diff -Nrcpad gcc-16-20250629/ChangeLog gcc-16-20250706/ChangeLog
*** gcc-16-20250629/ChangeLog	Sun Jun 29 22:32:24 2025
--- gcc-16-20250706/ChangeLog	Sun Jul  6 22:32:09 2025
***************
*** 1,3 ****
--- 1,15 ----
+ 2025-07-04  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* MAINTAINERS: Replace tabs with spaces.
+ 
+ 2025-07-04  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	* MAINTAINERS (Reviewers): Add myself for the aarch64 port.
+ 
+ 2025-07-03  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* MAINTAINERS: Add myself as an aarch64 port reviewer.
+ 
  2025-06-22  Nicolas Boulenguez  <nicolas@debian.org>
  
  	PR ada/120106
diff -Nrcpad gcc-16-20250629/LAST_UPDATED gcc-16-20250706/LAST_UPDATED
*** gcc-16-20250629/LAST_UPDATED	Sun Jun 29 22:35:00 2025
--- gcc-16-20250706/LAST_UPDATED	Sun Jul  6 22:34:09 2025
***************
*** 1 ****
! Obtained from git: master revision 0cd06c1da7a706330045e54a7516de2601341bc7
--- 1 ----
! Obtained from git: master revision 2a56f3c539b782b15ee76d5752921800ccc53eef
diff -Nrcpad gcc-16-20250629/MAINTAINERS gcc-16-20250706/MAINTAINERS
*** gcc-16-20250629/MAINTAINERS	Sun Jun 29 22:32:24 2025
--- gcc-16-20250706/MAINTAINERS	Sun Jul  6 22:32:09 2025
*************** check in changes outside of the parts of
*** 274,279 ****
--- 274,281 ----
  
                          Reviewers
  
+ aarch64 port            Alex Coplan             <alex.coplan@arm.com>
+ aarch64 port            Andrew Pinski           <pinskia@gmail.com>
  arm port (MVE)          Christophe Lyon         <christophe.lyon@arm.com>
  callgraph               Martin Jambor           <mjambor@suse.cz>
  C front end             Marek Polacek           <polacek@redhat.com>
diff -Nrcpad gcc-16-20250629/MD5SUMS gcc-16-20250706/MD5SUMS
*** gcc-16-20250629/MD5SUMS	Sun Jun 29 22:35:04 2025
--- gcc-16-20250706/MD5SUMS	Sun Jul  6 22:34:13 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20250629.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-16-20250706.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
*************** b8acb527560fc760209d200fcfab8ff4  .githu
*** 21,32 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! ad8edbf5beec6325b8b06ff605bf9278  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 67a73dc478fc5ffa89fce23c7608acad  LAST_UPDATED
! 0243224447499a1a62c0125937291a7c  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
  7dcc983bfbcda6838b504185562b60a3  Makefile.in
  2c81c9de7da119a00341d5e9529e629f  Makefile.tpl
--- 21,32 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 165b5727569474a98f4c4505c03fa8e1  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 9b3a21447957c4edb23256e3924f134a  LAST_UPDATED
! cb9e2a6b2d86fdc072c9c01c421845a3  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
  7dcc983bfbcda6838b504185562b60a3  Makefile.in
  2c81c9de7da119a00341d5e9529e629f  Makefile.tpl
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 154,160 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  9d9c5508a65175be5f9e10721e55ebbc  configure
  82e46c5338f6449fa0a149b6adf12797  configure.ac
! dd9a29f02f7388885480b6ddbc89538a  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
--- 154,160 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  9d9c5508a65175be5f9e10721e55ebbc  configure
  82e46c5338f6449fa0a149b6adf12797  configure.ac
! 6353a84c2f5ba309bd175ed769527b87  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 516,522 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 83122d1848e4d5b81f6ac524d73d33f5  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 516,522 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 9300a9c9caf0dca88cee1add10ccb26f  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 553,571 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 2f822fdbee20e0c0bace28a9dcaa892b  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 104ee5096a64d0578642abcfc873a433  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 2f037bf997904c05da966c43229be974  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 553,571 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! c95a6d06bea39f744cce0d7aac2aebc7  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 6bc6b407dba6b297a021d4154f86d159  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 29b31b7524a6dbff666596df3b03ed2c  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** e529e93557ba835a90440062c302bbfe  gcc/ad
*** 592,600 ****
  eea9961506181531b5f7f1a7f62fe428  gcc/ada/ChangeLog-2024
  5598cfcecd6612ea21efddabbbe1ecc0  gcc/ada/ChangeLog.ptr
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
! 5fa4a4aa07a319aa991e3260393e64b9  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! f9a43fc9d1cd806374fd057b920c4688  gcc/ada/Makefile.rtl
  db7e461b5b214c390e35d18397979f74  gcc/ada/accessibility.adb
  fbd3226b85f1e1cc6eb250fa51de4be1  gcc/ada/accessibility.ads
  80867b66cbed2dba054564ea216b3c66  gcc/ada/ada_get_targ.adb
--- 592,600 ----
  eea9961506181531b5f7f1a7f62fe428  gcc/ada/ChangeLog-2024
  5598cfcecd6612ea21efddabbbe1ecc0  gcc/ada/ChangeLog.ptr
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
! 1ddbf3755fbef2d964b15c7104b9937d  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! 3ade0c7d664404c6006c38dccaa83475  gcc/ada/Makefile.rtl
  db7e461b5b214c390e35d18397979f74  gcc/ada/accessibility.adb
  fbd3226b85f1e1cc6eb250fa51de4be1  gcc/ada/accessibility.ads
  80867b66cbed2dba054564ea216b3c66  gcc/ada/ada_get_targ.adb
*************** a07518144c5203a421dbc45a7b16e04f  gcc/ad
*** 602,621 ****
  30e7387695692ce78b78ca8165fa9561  gcc/ada/adabkend.ads
  3d1fcc88d6e5624970030c0a00ed8653  gcc/ada/adadecode.c
  066612d3b34078e2a26c00cff399ed82  gcc/ada/adadecode.h
! aabb5b60933c435566854464f69572d3  gcc/ada/adaint.c
  f6a5ac54108a44c0cdc3ee5c49d836ae  gcc/ada/adaint.h
  760bb6cd65cc72294ad54f492d54d482  gcc/ada/affinity.c
  a22ae88618cb2fc05cb66a79ed80efb5  gcc/ada/ali-util.adb
  a436320cda5fb678ef608c3511ad8c2a  gcc/ada/ali-util.ads
  b85696b217523a0bfb956e6ae85c879f  gcc/ada/ali.adb
! 7754a9c3f81e37b70201877adf034b01  gcc/ada/ali.ads
  f8207765beac36c54d43698a11140afa  gcc/ada/alloc.ads
  3150d7e2a4f0018bb92d065ed3aedcc0  gcc/ada/argv-lynxos178-raven-cert.c
  5470386a6301c0323b6ee66cf06c1e42  gcc/ada/argv.c
  f2493dd09ce42a8a76ba82606b9e20e3  gcc/ada/aspects.adb
! 500f0e117b0f8111522576a7ee43f9ba  gcc/ada/aspects.ads
! de33fbd78c165b8c499863445926b90c  gcc/ada/atree.adb
! 22eb9e0e7ad34e07a5de2091f598ad71  gcc/ada/atree.ads
  1a5f952bcb9d3c3529147729f3c4ef61  gcc/ada/atree.h
  557d2d802d51833ba752f2b05e30c591  gcc/ada/aux-io.c
  3ebdc86e765e129f74ed1b9a39f9e4b9  gcc/ada/back_end.adb
--- 602,621 ----
  30e7387695692ce78b78ca8165fa9561  gcc/ada/adabkend.ads
  3d1fcc88d6e5624970030c0a00ed8653  gcc/ada/adadecode.c
  066612d3b34078e2a26c00cff399ed82  gcc/ada/adadecode.h
! b0cd87f97b5a146eb21cb1ffdda62ce0  gcc/ada/adaint.c
  f6a5ac54108a44c0cdc3ee5c49d836ae  gcc/ada/adaint.h
  760bb6cd65cc72294ad54f492d54d482  gcc/ada/affinity.c
  a22ae88618cb2fc05cb66a79ed80efb5  gcc/ada/ali-util.adb
  a436320cda5fb678ef608c3511ad8c2a  gcc/ada/ali-util.ads
  b85696b217523a0bfb956e6ae85c879f  gcc/ada/ali.adb
! e86af58cfa10e3db683b44d2a2cf4c29  gcc/ada/ali.ads
  f8207765beac36c54d43698a11140afa  gcc/ada/alloc.ads
  3150d7e2a4f0018bb92d065ed3aedcc0  gcc/ada/argv-lynxos178-raven-cert.c
  5470386a6301c0323b6ee66cf06c1e42  gcc/ada/argv.c
  f2493dd09ce42a8a76ba82606b9e20e3  gcc/ada/aspects.adb
! cbdd556ce9a061827b67dcab28d48962  gcc/ada/aspects.ads
! 96017e82d14823563a6f140bb84ab657  gcc/ada/atree.adb
! 14d6b3ce6a60df74711e12144f5f85a2  gcc/ada/atree.ads
  1a5f952bcb9d3c3529147729f3c4ef61  gcc/ada/atree.h
  557d2d802d51833ba752f2b05e30c591  gcc/ada/aux-io.c
  3ebdc86e765e129f74ed1b9a39f9e4b9  gcc/ada/back_end.adb
*************** aa738dcebdf52f114dc2973019727da6  gcc/ad
*** 628,634 ****
  fac33e7248d1861201371edab993043b  gcc/ada/binde.ads
  ab8fa14bb86df108472a13dcc1b9d70f  gcc/ada/binderr.adb
  35dbcfe21d4e6360eb7fc5efa66ee28f  gcc/ada/binderr.ads
! e74423c2baea771f87323b4ea8dcda0d  gcc/ada/bindgen.adb
  e426b04a4bf47b1a91e530ac81300e86  gcc/ada/bindgen.ads
  415056107aa9043be758c707431a6219  gcc/ada/bindo-augmentors.adb
  b64567719158122058df5a1877a7afe9  gcc/ada/bindo-augmentors.ads
--- 628,634 ----
  fac33e7248d1861201371edab993043b  gcc/ada/binde.ads
  ab8fa14bb86df108472a13dcc1b9d70f  gcc/ada/binderr.adb
  35dbcfe21d4e6360eb7fc5efa66ee28f  gcc/ada/binderr.ads
! b68fad44bcff6c978c37627ba75c8d42  gcc/ada/bindgen.adb
  e426b04a4bf47b1a91e530ac81300e86  gcc/ada/bindgen.ads
  415056107aa9043be758c707431a6219  gcc/ada/bindo-augmentors.adb
  b64567719158122058df5a1877a7afe9  gcc/ada/bindo-augmentors.ads
*************** ae344bff4834b9e2ef3c07f6dd01b59b  gcc/ad
*** 655,673 ****
  530290230985903c593cb9d92f5b47c8  gcc/ada/cal.c
  2acfb74c50c4563afcbe6a1bca3912a3  gcc/ada/casing.adb
  c576df64e1d6a2ac70b389cc10a835e6  gcc/ada/casing.ads
! 20d0c21e346ef575a30e5da2f84b9b97  gcc/ada/checks.adb
  f963647952269416533799c6a5117ea3  gcc/ada/checks.ads
  4c0942bba88f786dffff9a3575759026  gcc/ada/cio.c
  10b93c3ec680bbe04e70ea0e2fb09ac7  gcc/ada/clean.adb
  90ca544c6bc4527aa56ac34e3e2ee7bc  gcc/ada/clean.ads
! ddaad54eb95ed435f61f53c447d79c9a  gcc/ada/comperr.adb
  b819ca6fd93695993d2656d2edc4cc8c  gcc/ada/comperr.ads
  7f9ac0dab1302fd2696f52755a30ca56  gcc/ada/config-lang.in
  be457e4923d2083550c66061c7e4d1e9  gcc/ada/contracts.adb
  08509704a245c7fb15ecf43481261825  gcc/ada/contracts.ads
  09a5213fb46479fc00bc1e507f07c02d  gcc/ada/csets.adb
  c8fc2a7d00b9bdf2dfb05cf0fc1c945f  gcc/ada/csets.ads
! 6650227d4482aff0cdb03d0308aca9a6  gcc/ada/cstand.adb
  d5cdeee41f4cce7791ad47380e922eac  gcc/ada/cstand.ads
  1812c1cc859b55d34f8be50223970490  gcc/ada/cstreams.c
  453f1af3f48533612fca76f44afc9122  gcc/ada/ctrl_c.c
--- 655,673 ----
  530290230985903c593cb9d92f5b47c8  gcc/ada/cal.c
  2acfb74c50c4563afcbe6a1bca3912a3  gcc/ada/casing.adb
  c576df64e1d6a2ac70b389cc10a835e6  gcc/ada/casing.ads
! 8bd3e47c661fa4203435999b11409955  gcc/ada/checks.adb
  f963647952269416533799c6a5117ea3  gcc/ada/checks.ads
  4c0942bba88f786dffff9a3575759026  gcc/ada/cio.c
  10b93c3ec680bbe04e70ea0e2fb09ac7  gcc/ada/clean.adb
  90ca544c6bc4527aa56ac34e3e2ee7bc  gcc/ada/clean.ads
! 8c73593e7f221d2f965d45654a94a636  gcc/ada/comperr.adb
  b819ca6fd93695993d2656d2edc4cc8c  gcc/ada/comperr.ads
  7f9ac0dab1302fd2696f52755a30ca56  gcc/ada/config-lang.in
  be457e4923d2083550c66061c7e4d1e9  gcc/ada/contracts.adb
  08509704a245c7fb15ecf43481261825  gcc/ada/contracts.ads
  09a5213fb46479fc00bc1e507f07c02d  gcc/ada/csets.adb
  c8fc2a7d00b9bdf2dfb05cf0fc1c945f  gcc/ada/csets.ads
! 8071ec98accf7b2c543aa3542ca5ff00  gcc/ada/cstand.adb
  d5cdeee41f4cce7791ad47380e922eac  gcc/ada/cstand.ads
  1812c1cc859b55d34f8be50223970490  gcc/ada/cstreams.c
  453f1af3f48533612fca76f44afc9122  gcc/ada/ctrl_c.c
*************** d5598c70c14c05fdc521df6eaab25b4c  gcc/ad
*** 677,710 ****
  af445affacf9cfc99e3eb8ee82b8b7f0  gcc/ada/debug_a.ads
  e985c86f5eb27a1af5221f7338ac92cb  gcc/ada/doc/Makefile
  a012e0cb5df366014b5a4988036a509a  gcc/ada/doc/gnat-style.rst
! a279ed6487990a204e636674f9c44623  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
! 684a8ce6811bef53086abed46b2ceb33  gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
! c2ce843af1cfd3f0c588b2a488ad8d45  gcc/ada/doc/gnat_rm/implementation_advice.rst
! 816ee84af198e8336bad5e72516ebfb6  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
  687e948eae92592a9bb4b738fd473d80  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
! bb7b0bdc9f2695b217d3f45b46312a67  gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
! 7cb87fd519689d7c4b9e78c3ccb4afb8  gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
! 0b2c04c089a7da32cee28133b96b2979  gcc/ada/doc/gnat_rm/implementation_of_ada_2012_features.rst
  1ce2dc848df98bcbbb9d443501c48132  gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst
  454fb365cfb751d8e03b8e972d3abef1  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
  952177853de529b7a2f483f0d195d2b4  gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
  1fb33f7304c23a143fa3a6313055f70b  gcc/ada/doc/gnat_rm/security_hardening_features.rst
! 03676be4f649629e37041b8c849c7825  gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst
  3280f0cd5068d9afb4b30c72e74bd637  gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
  a8608ebf71444d2564728c8a41283e03  gcc/ada/doc/gnat_rm/standard_library_routines.rst
! 30264209881fd46b2667ef11a91c55d7  gcc/ada/doc/gnat_rm/the_gnat_library.rst
  391d17bf855af400348685ff678c6a6a  gcc/ada/doc/gnat_rm/the_implementation_of_standard_i_o.rst
  ad0b18bc67f8911f5f0d9d2762f19f82  gcc/ada/doc/gnat_ugn.rst
  97271c06a675f62b05d2a744164c36e1  gcc/ada/doc/gnat_ugn/about_this_guide.rst
! 06b93e736451a55e7c56e9289ad1924c  gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
  2bd1b4bce35f627e35f3316337a622f2  gcc/ada/doc/gnat_ugn/elaboration_order_handling_in_gnat.rst
  56a5718b224a18464cc8f770c1288a14  gcc/ada/doc/gnat_ugn/example_of_binder_output.rst
  6f289cabdb2ee5e2e1818f135c23020e  gcc/ada/doc/gnat_ugn/getting_started_with_gnat.rst
! f67a4cd7fabedae45b6da4cbdc834202  gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
  d05e426d95c24c54af666c18b1fb547c  gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst
  f7e7179ad111262b98d743c63002bc82  gcc/ada/doc/gnat_ugn/inline_assembler.rst
  fb97e551cf32ed76280cd4f8cd40825c  gcc/ada/doc/gnat_ugn/platform_specific_information.rst
--- 677,710 ----
  af445affacf9cfc99e3eb8ee82b8b7f0  gcc/ada/debug_a.ads
  e985c86f5eb27a1af5221f7338ac92cb  gcc/ada/doc/Makefile
  a012e0cb5df366014b5a4988036a509a  gcc/ada/doc/gnat-style.rst
! 7559c05099cde820bf8bebbceabccc04  gcc/ada/doc/gnat_rm.rst
! 5bf95a83da0a709f6bdf91751e65e01f  gcc/ada/doc/gnat_rm/about_this_guide.rst
! 95f36013115a0d2964f52a340712b135  gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst
! f88b707c2abbc5d9cd90127a84ed6fd7  gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
! ae3d832d67eb0561de58deff709050db  gcc/ada/doc/gnat_rm/implementation_advice.rst
! 4ef0af28325df2c1534cc73b9f4ed108  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
  687e948eae92592a9bb4b738fd473d80  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
! 42a86d66ceb034b24a71d53a737e46ea  gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
! 0ddf58bc4a9fdbe10cc6696d32b3c8b1  gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
! cd313e8a12cdfb20b99eede7c5252f16  gcc/ada/doc/gnat_rm/implementation_of_ada_2022_features.rst
  1ce2dc848df98bcbbb9d443501c48132  gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst
  454fb365cfb751d8e03b8e972d3abef1  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
  952177853de529b7a2f483f0d195d2b4  gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
  1fb33f7304c23a143fa3a6313055f70b  gcc/ada/doc/gnat_rm/security_hardening_features.rst
! 2fcc4a1e79f8bad335a4fa544f39c374  gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst
  3280f0cd5068d9afb4b30c72e74bd637  gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
  a8608ebf71444d2564728c8a41283e03  gcc/ada/doc/gnat_rm/standard_library_routines.rst
! 56f7744dd862728c63870212761faa26  gcc/ada/doc/gnat_rm/the_gnat_library.rst
  391d17bf855af400348685ff678c6a6a  gcc/ada/doc/gnat_rm/the_implementation_of_standard_i_o.rst
  ad0b18bc67f8911f5f0d9d2762f19f82  gcc/ada/doc/gnat_ugn.rst
  97271c06a675f62b05d2a744164c36e1  gcc/ada/doc/gnat_ugn/about_this_guide.rst
! e2eeb26a001a6279d55471a47eb60908  gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
  2bd1b4bce35f627e35f3316337a622f2  gcc/ada/doc/gnat_ugn/elaboration_order_handling_in_gnat.rst
  56a5718b224a18464cc8f770c1288a14  gcc/ada/doc/gnat_ugn/example_of_binder_output.rst
  6f289cabdb2ee5e2e1818f135c23020e  gcc/ada/doc/gnat_ugn/getting_started_with_gnat.rst
! eacaa696fafef4f9aba5958051b20a6a  gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
  d05e426d95c24c54af666c18b1fb547c  gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst
  f7e7179ad111262b98d743c63002bc82  gcc/ada/doc/gnat_ugn/inline_assembler.rst
  fb97e551cf32ed76280cd4f8cd40825c  gcc/ada/doc/gnat_ugn/platform_specific_information.rst
*************** c7da61a05156d50b4888cdfaae4241d0  gcc/ad
*** 717,760 ****
  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
! 399b87c697ee167fa98ffc4817e53009  gcc/ada/einfo-utils.adb
  fdeb0b11ed378cc91d79b0c88e2d35a0  gcc/ada/einfo-utils.ads
  4f882a8b5e78253d5838b1a83e4af5bb  gcc/ada/einfo.adb
! f92277f4bc7a9a116872ab44d1462fa2  gcc/ada/einfo.ads
  9fb4fb23a55081d07dc554eeb3253f91  gcc/ada/elists.adb
  1d7f8772477453dee268f8697433a589  gcc/ada/elists.ads
  2d6cb36d45dda0bf32d01725709f0007  gcc/ada/elists.h
  3ee454270bfb935945b73e4d5397b3ab  gcc/ada/env.c
  4c5dce869517fc9bf7fc787d64cc9f30  gcc/ada/env.h
  7160c7331da775e057d2022e905a0767  gcc/ada/err_vars.ads
! be40586851fdfc99329b557d8bdec5e0  gcc/ada/errid.adb
! fba5f72ffe9ebd4ae803b746907960c7  gcc/ada/errid.ads
  0585186de44d58458e21d420cc29671b  gcc/ada/errno.c
! fcd34052e516ec31760fa6ff23a540dd  gcc/ada/errout.adb
! 1de477548b87db008f344fd0314b8daf  gcc/ada/errout.ads
! e49039d52c4c622d5bf5eaa2f610a1aa  gcc/ada/erroutc-pretty_emitter.adb
! 1b867745275ece6e1175d7ab161779c1  gcc/ada/erroutc-pretty_emitter.ads
! 780a7d8519cdc4a3d9265ac7270f7ff2  gcc/ada/erroutc-sarif_emitter.adb
! d605b6936a38c906a6668a3e8c6c4ba4  gcc/ada/erroutc-sarif_emitter.ads
! 7f0d97b8e9e17c57169a5e80620df789  gcc/ada/erroutc.adb
! a80fb9a618c7fddbe7b6dc69f99ce507  gcc/ada/erroutc.ads
! 402960a6a04418f56f771e990b3508da  gcc/ada/errsw.adb
! 21fb129de3e0b0ba02959297df3e740d  gcc/ada/errsw.ads
! 38d8468bc3042960e78846d9865a35e8  gcc/ada/errutil.adb
  67078357e15eaef989cc9c0edaab1d13  gcc/ada/errutil.ads
! b270d994d3afc78b194d5ab9ddd800c0  gcc/ada/eval_fat.adb
  04c8399e5b8f5b974be325af4fc5793b  gcc/ada/eval_fat.ads
  5062429d8789169d01db0423985a5e99  gcc/ada/exit.c
! 316cd181d203c7271daf259a3e7f913b  gcc/ada/exp_aggr.adb
! cc3a6ec62bea106872aef6143609f920  gcc/ada/exp_aggr.ads
  f5cfbe3c80cc2c7ded2440a52b2b9cf0  gcc/ada/exp_atag.adb
  17872534d797a09463e33092ff3c4b9c  gcc/ada/exp_atag.ads
! 56271997261e93236b61701f82c27c14  gcc/ada/exp_attr.adb
  16622dd90fd58bfbfa68224d0bfaf8b2  gcc/ada/exp_attr.ads
  4cb08de59df5f8d0a124038dcbb392f0  gcc/ada/exp_cg.adb
  b18d9873e8e43583acd0e69ba6635023  gcc/ada/exp_cg.ads
  b5c7eb2b5e6d898d5afe2d0e6ae5f382  gcc/ada/exp_ch10.ads
! 93e27dbcf1bdf17b4eb6fc9d854ddfce  gcc/ada/exp_ch11.adb
  60bdf7b43270fd45b2cc28489113a581  gcc/ada/exp_ch11.ads
  bdf1e45828c56644b32ac57ae50d5710  gcc/ada/exp_ch12.adb
  855ab7be8dea970234057b661c2254a2  gcc/ada/exp_ch12.ads
--- 717,760 ----
  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
! 22b295629c6dacd0ec2e5475a6c7b4e6  gcc/ada/einfo-utils.adb
  fdeb0b11ed378cc91d79b0c88e2d35a0  gcc/ada/einfo-utils.ads
  4f882a8b5e78253d5838b1a83e4af5bb  gcc/ada/einfo.adb
! 92c1e2aa0f1c0cff591c71b4d07df323  gcc/ada/einfo.ads
  9fb4fb23a55081d07dc554eeb3253f91  gcc/ada/elists.adb
  1d7f8772477453dee268f8697433a589  gcc/ada/elists.ads
  2d6cb36d45dda0bf32d01725709f0007  gcc/ada/elists.h
  3ee454270bfb935945b73e4d5397b3ab  gcc/ada/env.c
  4c5dce869517fc9bf7fc787d64cc9f30  gcc/ada/env.h
  7160c7331da775e057d2022e905a0767  gcc/ada/err_vars.ads
! 8675f538842020e261f2081f1c21c995  gcc/ada/errid.adb
! 35c49ed60b3f9ae236a2ad56efd667eb  gcc/ada/errid.ads
  0585186de44d58458e21d420cc29671b  gcc/ada/errno.c
! 2709f2e8b20cfc012b41a3e70076c438  gcc/ada/errout.adb
! 753eaa33dd800ee24d257fc9480f25c5  gcc/ada/errout.ads
! 3c46648d5df9f40c55424b81c1c34a31  gcc/ada/erroutc-pretty_emitter.adb
! 5982702e01a95b6f1a9d43d315634f4e  gcc/ada/erroutc-pretty_emitter.ads
! 7ff69fee60c99ef8c581bff41c6a2e59  gcc/ada/erroutc-sarif_emitter.adb
! 4f1533723c09c587085c55610017eccb  gcc/ada/erroutc-sarif_emitter.ads
! 436897c81a6e613d8f8067b828bca9a1  gcc/ada/erroutc.adb
! e51a9a19184b2a73f27bb944998177e6  gcc/ada/erroutc.ads
! 85388e3edfef44bd2d594c366d29305b  gcc/ada/errsw.adb
! 718511a4ab2997da906bb1af2b9872f5  gcc/ada/errsw.ads
! 2ff5646ab62f288e935f6e65010485a3  gcc/ada/errutil.adb
  67078357e15eaef989cc9c0edaab1d13  gcc/ada/errutil.ads
! 8745064abd42114e7f2f12824abd58f8  gcc/ada/eval_fat.adb
  04c8399e5b8f5b974be325af4fc5793b  gcc/ada/eval_fat.ads
  5062429d8789169d01db0423985a5e99  gcc/ada/exit.c
! a4abb3ce19c57fb795cf3e09fc34ea51  gcc/ada/exp_aggr.adb
! 738bfb6669a1b696ef62dbecd858300a  gcc/ada/exp_aggr.ads
  f5cfbe3c80cc2c7ded2440a52b2b9cf0  gcc/ada/exp_atag.adb
  17872534d797a09463e33092ff3c4b9c  gcc/ada/exp_atag.ads
! ba27b26a494e7c39898301b6f2552d84  gcc/ada/exp_attr.adb
  16622dd90fd58bfbfa68224d0bfaf8b2  gcc/ada/exp_attr.ads
  4cb08de59df5f8d0a124038dcbb392f0  gcc/ada/exp_cg.adb
  b18d9873e8e43583acd0e69ba6635023  gcc/ada/exp_cg.ads
  b5c7eb2b5e6d898d5afe2d0e6ae5f382  gcc/ada/exp_ch10.ads
! 63a24d70794d9b56acd7830261a3816d  gcc/ada/exp_ch11.adb
  60bdf7b43270fd45b2cc28489113a581  gcc/ada/exp_ch11.ads
  bdf1e45828c56644b32ac57ae50d5710  gcc/ada/exp_ch12.adb
  855ab7be8dea970234057b661c2254a2  gcc/ada/exp_ch12.ads
*************** fce186389d317dec9c580f569a2a845a  gcc/ad
*** 762,776 ****
  c6728830f0888dc3385e474b5925c01f  gcc/ada/exp_ch13.ads
  d037443d1b61c02110e124f3c701b449  gcc/ada/exp_ch2.adb
  476e299ea88b583859604d0071046143  gcc/ada/exp_ch2.ads
! 430177829c6f568d66c2af86d41e9d8b  gcc/ada/exp_ch3.adb
  53e0d855cd76aedff48a9e6266db49e8  gcc/ada/exp_ch3.ads
! 4b4b353b43ef4e8cc2da3eb9d03e7cd1  gcc/ada/exp_ch4.adb
! 689dbf89ad9d44a03b54f8ce05455a31  gcc/ada/exp_ch4.ads
! c642a1d7102316f2db8b308db52c324b  gcc/ada/exp_ch5.adb
! 3564a044f1e9954ffdd8d3a48643fff9  gcc/ada/exp_ch5.ads
! 498f4216a108a6694a2ec6b1263e95e6  gcc/ada/exp_ch6.adb
  c22c79787fe7516adb5a4c55613fb6ab  gcc/ada/exp_ch6.ads
! 2dc46f230b6e63c0bfff64ad173315b8  gcc/ada/exp_ch7.adb
  31ee5e50c565d4788d9b794acb5bfebb  gcc/ada/exp_ch7.ads
  ff5f2710ba824ff8ef979c388663bac2  gcc/ada/exp_ch8.adb
  c1f464d28d24669bfe156f13cabe5fca  gcc/ada/exp_ch8.ads
--- 762,776 ----
  c6728830f0888dc3385e474b5925c01f  gcc/ada/exp_ch13.ads
  d037443d1b61c02110e124f3c701b449  gcc/ada/exp_ch2.adb
  476e299ea88b583859604d0071046143  gcc/ada/exp_ch2.ads
! 39748ac93cc49c3617b3fe16d780a30b  gcc/ada/exp_ch3.adb
  53e0d855cd76aedff48a9e6266db49e8  gcc/ada/exp_ch3.ads
! cd451a03d3f6e30e0aed13ae4ca5d48f  gcc/ada/exp_ch4.adb
! ef982b9647c35560ae7ff386e547bd16  gcc/ada/exp_ch4.ads
! d8ee1a2097135d84f7788fd2ece2f305  gcc/ada/exp_ch5.adb
! f0c7dc0ade3f9639e946e709a9288f31  gcc/ada/exp_ch5.ads
! cd7e7e16d94c374290a9743face6dfd9  gcc/ada/exp_ch6.adb
  c22c79787fe7516adb5a4c55613fb6ab  gcc/ada/exp_ch6.ads
! 323962e06b80a131d23f743cae560e49  gcc/ada/exp_ch7.adb
  31ee5e50c565d4788d9b794acb5bfebb  gcc/ada/exp_ch7.ads
  ff5f2710ba824ff8ef979c388663bac2  gcc/ada/exp_ch8.adb
  c1f464d28d24669bfe156f13cabe5fca  gcc/ada/exp_ch8.ads
*************** f8d7c73c2eb136405382e9f889d15683  gcc/ad
*** 786,792 ****
  116919038aa6e7d0ec9ce9ab609f0bc2  gcc/ada/exp_dist.ads
  623e2e99136d92d39e5b0f3277759f6a  gcc/ada/exp_fixd.adb
  9633ee578c6cb9ea5577a5cade68bdcc  gcc/ada/exp_fixd.ads
! 950e359997abe1b839b8fad4caafad05  gcc/ada/exp_imgv.adb
  9fc56117157205ad4de1209b42148d67  gcc/ada/exp_imgv.ads
  9f1bbeb12a811457cfb88a7e17ca9740  gcc/ada/exp_intr.adb
  923affd79668e065bae4808313b11bf9  gcc/ada/exp_intr.ads
--- 786,792 ----
  116919038aa6e7d0ec9ce9ab609f0bc2  gcc/ada/exp_dist.ads
  623e2e99136d92d39e5b0f3277759f6a  gcc/ada/exp_fixd.adb
  9633ee578c6cb9ea5577a5cade68bdcc  gcc/ada/exp_fixd.ads
! c48a8396237679c48ceef2c507661e1a  gcc/ada/exp_imgv.adb
  9fc56117157205ad4de1209b42148d67  gcc/ada/exp_imgv.ads
  9f1bbeb12a811457cfb88a7e17ca9740  gcc/ada/exp_intr.adb
  923affd79668e065bae4808313b11bf9  gcc/ada/exp_intr.ads
*************** f8d7c73c2eb136405382e9f889d15683  gcc/ad
*** 794,816 ****
  0e4de6363c3876604fc8fa97e180ddcf  gcc/ada/exp_pakd.ads
  be32a682413bacdc827334ec3f62973a  gcc/ada/exp_prag.adb
  b971e56ee00efc31bd07e4f49eb4e97e  gcc/ada/exp_prag.ads
! e72f0d3871865a20e4168ee757febcf5  gcc/ada/exp_put_image.adb
  c0f39ee1d515a13193e5726a49291c99  gcc/ada/exp_put_image.ads
  e224b65ac653dc73160c1665f825b557  gcc/ada/exp_sel.adb
  adda0da8d4f449351c0486c3277f39bd  gcc/ada/exp_sel.ads
  624e684a9e8c068e4ad7dc5d3a3eb244  gcc/ada/exp_smem.adb
  5eb50023abeda9a76f66518671ad1d05  gcc/ada/exp_smem.ads
! 02f00a0f87b66d02878571d0e46a37cf  gcc/ada/exp_spark.adb
  0365865a8be979f0a1db6a61cadbe940  gcc/ada/exp_spark.ads
  b042ff9582cb94caab7f476203ea6809  gcc/ada/exp_strm.adb
  772292d8d5c1417fcb3279f7ac312e3a  gcc/ada/exp_strm.ads
! 4ed5d5fe1679b7a931eb261cf15b0622  gcc/ada/exp_tss.adb
  52a5741c37559d0398594d7baa1c99ac  gcc/ada/exp_tss.ads
! 17c1e6db56a29cef37eb0acfa2e2176f  gcc/ada/exp_unst.adb
  d2f34876e61000e49299ef9b2569cbbf  gcc/ada/exp_unst.ads
! d75609807a4f81aac40088147e5d3873  gcc/ada/exp_util.adb
! 8b222934ed10101bc9553a5d06edfabb  gcc/ada/exp_util.ads
! 3bba6a658c16a14ec3297c802dcde881  gcc/ada/expander.adb
  53bb0eb5c4feebf8b5fbef639f5827bd  gcc/ada/expander.ads
  b38851c9b7a0167a71b96e69b7c86fb1  gcc/ada/expect.c
  ec920df5545ce1582319f1bfda3c5a19  gcc/ada/fe.h
--- 794,816 ----
  0e4de6363c3876604fc8fa97e180ddcf  gcc/ada/exp_pakd.ads
  be32a682413bacdc827334ec3f62973a  gcc/ada/exp_prag.adb
  b971e56ee00efc31bd07e4f49eb4e97e  gcc/ada/exp_prag.ads
! 5c439124d2bab6aebfa6ddc31b112752  gcc/ada/exp_put_image.adb
  c0f39ee1d515a13193e5726a49291c99  gcc/ada/exp_put_image.ads
  e224b65ac653dc73160c1665f825b557  gcc/ada/exp_sel.adb
  adda0da8d4f449351c0486c3277f39bd  gcc/ada/exp_sel.ads
  624e684a9e8c068e4ad7dc5d3a3eb244  gcc/ada/exp_smem.adb
  5eb50023abeda9a76f66518671ad1d05  gcc/ada/exp_smem.ads
! 63204e999b8ecaf7a7ac1365749a855e  gcc/ada/exp_spark.adb
  0365865a8be979f0a1db6a61cadbe940  gcc/ada/exp_spark.ads
  b042ff9582cb94caab7f476203ea6809  gcc/ada/exp_strm.adb
  772292d8d5c1417fcb3279f7ac312e3a  gcc/ada/exp_strm.ads
! 59000e9704cdc65241a4bceab3308eb3  gcc/ada/exp_tss.adb
  52a5741c37559d0398594d7baa1c99ac  gcc/ada/exp_tss.ads
! a55ae41c0e68be209828e4229c2bbae3  gcc/ada/exp_unst.adb
  d2f34876e61000e49299ef9b2569cbbf  gcc/ada/exp_unst.ads
! 387abff87b8e41be728e42dda647aba1  gcc/ada/exp_util.adb
! cae531f0465d59eedf5daf97690f2e50  gcc/ada/exp_util.ads
! d12050aeac4d9f87dd69e7ae55d6dfce  gcc/ada/expander.adb
  53bb0eb5c4feebf8b5fbef639f5827bd  gcc/ada/expander.ads
  b38851c9b7a0167a71b96e69b7c86fb1  gcc/ada/expect.c
  ec920df5545ce1582319f1bfda3c5a19  gcc/ada/fe.h
*************** fdb9382a8288a3a5b805910a0a3615e8  gcc/ad
*** 823,834 ****
  576d7463667fc4c859a05f9e19146427  gcc/ada/fname-uf.ads
  ec7cf235c00294fe67198b9bf264f3d9  gcc/ada/fname.adb
  5ef403dc7e6540ad58ec4ccec10de65c  gcc/ada/fname.ads
! aad2a318697514ee6e576768c075fc0e  gcc/ada/freeze.adb
  0cfb73b82bc6277eb801329c392229d2  gcc/ada/freeze.ads
! c6d8bff803673243e76f3e9aa705e974  gcc/ada/frontend.adb
  6f776be1d84e9d8c996b576c19a4349f  gcc/ada/frontend.ads
! 7aa596095d9ed5610d539070fd80a826  gcc/ada/gcc-interface/Make-lang.in
! c966c1785f2c20d928007c7842c93db0  gcc/ada/gcc-interface/Makefile.in
  b02134e55a04db5c49a710da26b19be1  gcc/ada/gcc-interface/ada-builtin-types.def
  bc1175cb4ea0b9cb5f8751b3f0da7f74  gcc/ada/gcc-interface/ada-builtins.def
  9671d558ad879f15e73993538906ebda  gcc/ada/gcc-interface/ada-tree.def
--- 823,834 ----
  576d7463667fc4c859a05f9e19146427  gcc/ada/fname-uf.ads
  ec7cf235c00294fe67198b9bf264f3d9  gcc/ada/fname.adb
  5ef403dc7e6540ad58ec4ccec10de65c  gcc/ada/fname.ads
! 32f9c4a5754646fe4a2f6b4b7e49e5f1  gcc/ada/freeze.adb
  0cfb73b82bc6277eb801329c392229d2  gcc/ada/freeze.ads
! 498bb16c341cb753da6cbb10f928fb0f  gcc/ada/frontend.adb
  6f776be1d84e9d8c996b576c19a4349f  gcc/ada/frontend.ads
! 4c71fe1c01f1248f7bc0a69b8a6315e6  gcc/ada/gcc-interface/Make-lang.in
! a941d4fd0f695dc497a49d000722997b  gcc/ada/gcc-interface/Makefile.in
  b02134e55a04db5c49a710da26b19be1  gcc/ada/gcc-interface/ada-builtin-types.def
  bc1175cb4ea0b9cb5f8751b3f0da7f74  gcc/ada/gcc-interface/ada-builtins.def
  9671d558ad879f15e73993538906ebda  gcc/ada/gcc-interface/ada-tree.def
*************** b5542229d5cce6dd4fff7dc4ba8e789b  gcc/ad
*** 836,842 ****
  9225a8cf7f4c37e1ac2c83d2916a1bdf  gcc/ada/gcc-interface/ada.h
  910c4ca7f1543916fa6923fa18e926e0  gcc/ada/gcc-interface/config-lang.in
  27a97efc2691bb0e500931269e932bee  gcc/ada/gcc-interface/cuintp.cc
! bb15bd1c30b57164a06f30870cc17083  gcc/ada/gcc-interface/decl.cc
  fa1feb51010fc73b933487acbdcf85e8  gcc/ada/gcc-interface/gadaint.h
  846fe3bd3db6658b85769bf0216e74fb  gcc/ada/gcc-interface/gigi.h
  8c3391ec25d2f8a3e26b0553d537d3e2  gcc/ada/gcc-interface/lang-specs.h
--- 836,842 ----
  9225a8cf7f4c37e1ac2c83d2916a1bdf  gcc/ada/gcc-interface/ada.h
  910c4ca7f1543916fa6923fa18e926e0  gcc/ada/gcc-interface/config-lang.in
  27a97efc2691bb0e500931269e932bee  gcc/ada/gcc-interface/cuintp.cc
! a0abdb1069422335edc0615d7c7cb49e  gcc/ada/gcc-interface/decl.cc
  fa1feb51010fc73b933487acbdcf85e8  gcc/ada/gcc-interface/gadaint.h
  846fe3bd3db6658b85769bf0216e74fb  gcc/ada/gcc-interface/gigi.h
  8c3391ec25d2f8a3e26b0553d537d3e2  gcc/ada/gcc-interface/lang-specs.h
*************** fa1feb51010fc73b933487acbdcf85e8  gcc/ad
*** 845,862 ****
  1403993cbf8ac5d3b60092dd85c26fa6  gcc/ada/gcc-interface/misc.cc
  a74b4504c5ad4ed4e963f0691c289b40  gcc/ada/gcc-interface/system.ads
  b350a6fd65cafe8bd47dc42192437310  gcc/ada/gcc-interface/targtyps.cc
! 459f0b99e7a1b0ab35902e89fc170732  gcc/ada/gcc-interface/trans.cc
! 90c13ab8fddf99cd6e0d1b118cd0ff54  gcc/ada/gcc-interface/utils.cc
  7b0d708fd189018a87468ef844fc3811  gcc/ada/gcc-interface/utils2.cc
! 002ae905acd15b48a8167d2a8f49837e  gcc/ada/gen_il-fields.ads
! fb142ddf14cbdab14a576d82e5a28ea9  gcc/ada/gen_il-gen-gen_entities.adb
! 2c5fe8d6eefdc25c0d34c009f715ac95  gcc/ada/gen_il-gen-gen_nodes.adb
  fa07e4c6240b8cfff6d7d98112fee236  gcc/ada/gen_il-gen.adb
  c979a98c6b57608c79d578871fa0c58a  gcc/ada/gen_il-gen.ads
  76bbf6f38878113d65648e887fc2fd72  gcc/ada/gen_il-internals.adb
  df0beb95a99f054fd498bb3fc0b8fccc  gcc/ada/gen_il-internals.ads
  6f79de1a05bf91310c857e93030b71e6  gcc/ada/gen_il-main.adb
! 49405c2ee5627667a07ba9bf2faf5539  gcc/ada/gen_il-types.ads
  12828a99220130b97b0ca7738966ce08  gcc/ada/gen_il.adb
  bea2267faa84573ddab9d7c7f7068fb7  gcc/ada/gen_il.ads
  a1d2619ccca21c06754f3cdd326876e1  gcc/ada/generate_minimal_reproducer.adb
--- 845,862 ----
  1403993cbf8ac5d3b60092dd85c26fa6  gcc/ada/gcc-interface/misc.cc
  a74b4504c5ad4ed4e963f0691c289b40  gcc/ada/gcc-interface/system.ads
  b350a6fd65cafe8bd47dc42192437310  gcc/ada/gcc-interface/targtyps.cc
! 34dc74bdcfc4940dc904bd9a4aae2535  gcc/ada/gcc-interface/trans.cc
! 80875110ccbd5107800053583558ac3a  gcc/ada/gcc-interface/utils.cc
  7b0d708fd189018a87468ef844fc3811  gcc/ada/gcc-interface/utils2.cc
! 4ae4ffa02d30e6cf8159a9e97a3fa641  gcc/ada/gen_il-fields.ads
! 07f86d40a95ee4d2a50f6c5853bb1cc8  gcc/ada/gen_il-gen-gen_entities.adb
! 117d059d852b91f0ca5bd704d53e66da  gcc/ada/gen_il-gen-gen_nodes.adb
  fa07e4c6240b8cfff6d7d98112fee236  gcc/ada/gen_il-gen.adb
  c979a98c6b57608c79d578871fa0c58a  gcc/ada/gen_il-gen.ads
  76bbf6f38878113d65648e887fc2fd72  gcc/ada/gen_il-internals.adb
  df0beb95a99f054fd498bb3fc0b8fccc  gcc/ada/gen_il-internals.ads
  6f79de1a05bf91310c857e93030b71e6  gcc/ada/gen_il-main.adb
! 8e01eef966574a548d971c02ad5b66be  gcc/ada/gen_il-types.ads
  12828a99220130b97b0ca7738966ce08  gcc/ada/gen_il.adb
  bea2267faa84573ddab9d7c7f7068fb7  gcc/ada/gen_il.ads
  a1d2619ccca21c06754f3cdd326876e1  gcc/ada/generate_minimal_reproducer.adb
*************** a1d2619ccca21c06754f3cdd326876e1  gcc/ad
*** 864,879 ****
  0930ee3acae3e581cd90b4ea71d36c46  gcc/ada/get_scos.ads
  c30d04e8e72b6ecb391a5f74ed43baa6  gcc/ada/get_targ.adb
  1033bc14018eca0ac6056a8955c8e228  gcc/ada/get_targ.ads
! ceea56f2846e3f170ecd0707ee0cd771  gcc/ada/ghost.adb
  169c6bef83eb7711cececa07b3485c6f  gcc/ada/ghost.ads
  6f5b1925a8a5b030703dd62acb3e37cc  gcc/ada/gnat-style.texi
! 52f2fb099443750a5fc3ecac2238d604  gcc/ada/gnat1drv.adb
  9ed317231a93f12d370f13f5070cdaab  gcc/ada/gnat1drv.ads
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  49c5329fd360e2bf4e549bc7de93aab7  gcc/ada/gnat_cuda.adb
  de69fc271ce889490809004600fcac0f  gcc/ada/gnat_cuda.ads
! ed0a2e0060ec653da871c39278e974f6  gcc/ada/gnat_rm.texi
! 4975e843b934671456d54fd5268bcf53  gcc/ada/gnat_ugn.texi
  957e02fdb4684d592d9172cea8dfb4cb  gcc/ada/gnatbind.adb
  fff8dfca966e9d6f779ce90e57344a0f  gcc/ada/gnatbind.ads
  aef32d71626b4170f80d299f2304d737  gcc/ada/gnatchop.adb
--- 864,879 ----
  0930ee3acae3e581cd90b4ea71d36c46  gcc/ada/get_scos.ads
  c30d04e8e72b6ecb391a5f74ed43baa6  gcc/ada/get_targ.adb
  1033bc14018eca0ac6056a8955c8e228  gcc/ada/get_targ.ads
! 529f0489c77f6bacb07d0c20d34ba541  gcc/ada/ghost.adb
  169c6bef83eb7711cececa07b3485c6f  gcc/ada/ghost.ads
  6f5b1925a8a5b030703dd62acb3e37cc  gcc/ada/gnat-style.texi
! 93a79ce6199f9950aed6b980e31bd48d  gcc/ada/gnat1drv.adb
  9ed317231a93f12d370f13f5070cdaab  gcc/ada/gnat1drv.ads
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  49c5329fd360e2bf4e549bc7de93aab7  gcc/ada/gnat_cuda.adb
  de69fc271ce889490809004600fcac0f  gcc/ada/gnat_cuda.ads
! 70b985cafe9f30c90e988835a65133e0  gcc/ada/gnat_rm.texi
! 81f45e97d2c16fe64085b67469c03a94  gcc/ada/gnat_ugn.texi
  957e02fdb4684d592d9172cea8dfb4cb  gcc/ada/gnatbind.adb
  fff8dfca966e9d6f779ce90e57344a0f  gcc/ada/gnatbind.ads
  aef32d71626b4170f80d299f2304d737  gcc/ada/gnatchop.adb
*************** e64260fbaff3aa9311d96a900d6fae59  gcc/ad
*** 886,892 ****
  d7392969bf1bfb1dc263eadee42f41a4  gcc/ada/gnatkr.ads
  396c7dd9ce4bc049ae401461ae99943a  gcc/ada/gnatlink.adb
  b82b4a0c5285d19d7f428258166a8842  gcc/ada/gnatlink.ads
! 86d9feb470c5408c79441efe4d8ef4d9  gcc/ada/gnatls.adb
  e204de79f4f6b64632812ec5d99d0161  gcc/ada/gnatls.ads
  935368c541333d5578cff90a09b46ea5  gcc/ada/gnatmake.adb
  822dd99ad504552e2dc5b25c21a83a10  gcc/ada/gnatmake.ads
--- 886,892 ----
  d7392969bf1bfb1dc263eadee42f41a4  gcc/ada/gnatkr.ads
  396c7dd9ce4bc049ae401461ae99943a  gcc/ada/gnatlink.adb
  b82b4a0c5285d19d7f428258166a8842  gcc/ada/gnatlink.ads
! 6db81ca2b81e2ebfb30868886be30f76  gcc/ada/gnatls.adb
  e204de79f4f6b64632812ec5d99d0161  gcc/ada/gnatls.ads
  935368c541333d5578cff90a09b46ea5  gcc/ada/gnatmake.adb
  822dd99ad504552e2dc5b25c21a83a10  gcc/ada/gnatmake.ads
*************** ee1cd4291748880452771b977bf8cb70  gcc/ad
*** 907,923 ****
  ea767dec8fd43eff8cefde339b3a7d04  gcc/ada/indepsw-gnu.adb
  9ca5d3c618970776de091507be452127  gcc/ada/indepsw.adb
  8c188167519fcde228e7406b86ad3c4f  gcc/ada/indepsw.ads
! d2ce4522ff8bfb72ff1063aca82c855d  gcc/ada/init.c
  c45e7a63e33e0bdb85ff3e50d0220aa4  gcc/ada/initialize.c
! 776795c6db0b5f873e9232530439ef3e  gcc/ada/inline.adb
  91cdabaa5b703885dad7b8dc5df17446  gcc/ada/inline.ads
  8d71a48789cbec10ceabfe68770803c1  gcc/ada/itypes.adb
  f62835b6268c11341ad683753a9d7acd  gcc/ada/itypes.ads
! 09524c751ab3d4f4007d23753287e215  gcc/ada/json_utils.adb
! b9ab1f104b29842f028d913bbf190559  gcc/ada/json_utils.ads
! c36aee8053df31ac269700edd9bb8db0  gcc/ada/krunch.adb
  cb8b4ae7eda616665ff5623008560e83  gcc/ada/krunch.ads
! 972b98804bcc6a31ccbbef2516112a6b  gcc/ada/layout.adb
  b4b99fcd90ad634233395f84a0a1a6eb  gcc/ada/layout.ads
  3f0bde567ad1e8961d92e121563b097d  gcc/ada/lib-list.adb
  17aaa002830c4185209c54931af90728  gcc/ada/lib-load.adb
--- 907,923 ----
  ea767dec8fd43eff8cefde339b3a7d04  gcc/ada/indepsw-gnu.adb
  9ca5d3c618970776de091507be452127  gcc/ada/indepsw.adb
  8c188167519fcde228e7406b86ad3c4f  gcc/ada/indepsw.ads
! bba82adc9fdf0fc509eaae42d763da79  gcc/ada/init.c
  c45e7a63e33e0bdb85ff3e50d0220aa4  gcc/ada/initialize.c
! 9194e6605ee95b8c1d6e5607b27683c9  gcc/ada/inline.adb
  91cdabaa5b703885dad7b8dc5df17446  gcc/ada/inline.ads
  8d71a48789cbec10ceabfe68770803c1  gcc/ada/itypes.adb
  f62835b6268c11341ad683753a9d7acd  gcc/ada/itypes.ads
! fae5c64806f921b2c67652d6b3a99421  gcc/ada/json_utils.adb
! 93e400538975a4c66730d29f23e6e9a8  gcc/ada/json_utils.ads
! f06a26272057ce1be21c9d5c5b109939  gcc/ada/krunch.adb
  cb8b4ae7eda616665ff5623008560e83  gcc/ada/krunch.ads
! 97f98aab4c6d6cc80fcdc365034c9168  gcc/ada/layout.adb
  b4b99fcd90ad634233395f84a0a1a6eb  gcc/ada/layout.ads
  3f0bde567ad1e8961d92e121563b097d  gcc/ada/lib-list.adb
  17aaa002830c4185209c54931af90728  gcc/ada/lib-load.adb
*************** abb502e358163dc5e01633496a0013fc  gcc/ad
*** 927,937 ****
  1cbf7ce71e82c406e945d0a1195bd1e1  gcc/ada/lib-util.ads
  7c40c7e02bfd219fdacaf79deacf4f36  gcc/ada/lib-writ.adb
  b6ab6aa41e1a35af588f7ac62bd68af4  gcc/ada/lib-writ.ads
! 2db0cbf7507c9f00553b185968d7acaa  gcc/ada/lib-xref-spark_specific.adb
  c46c7909c69914753823cfbfb23fa8a4  gcc/ada/lib-xref.adb
  2011d6e281dc4b4ce8a65a6fbc96b843  gcc/ada/lib-xref.ads
! ee63fdb3ca4df4a9cad69e92f237a483  gcc/ada/lib.adb
! 8eac5bd4baeed5186e713cfc7e942dda  gcc/ada/lib.ads
  2d8ce9872083b9f641e37150d0bb18f1  gcc/ada/libgnarl/a-astaco.adb
  c13d27ec688dfebb1965a8e9eaf55c2c  gcc/ada/libgnarl/a-astaco.ads
  66247d074eecb4270e7cf01d16e0cfce  gcc/ada/libgnarl/a-dinopr.ads
--- 927,937 ----
  1cbf7ce71e82c406e945d0a1195bd1e1  gcc/ada/lib-util.ads
  7c40c7e02bfd219fdacaf79deacf4f36  gcc/ada/lib-writ.adb
  b6ab6aa41e1a35af588f7ac62bd68af4  gcc/ada/lib-writ.ads
! d1852c8e168ded223730761c0854b44f  gcc/ada/lib-xref-spark_specific.adb
  c46c7909c69914753823cfbfb23fa8a4  gcc/ada/lib-xref.adb
  2011d6e281dc4b4ce8a65a6fbc96b843  gcc/ada/lib-xref.ads
! e15b36c98a01c7093ce126c5b2a938e6  gcc/ada/lib.adb
! acdce12dbd25ab577720670c9d1732e9  gcc/ada/lib.ads
  2d8ce9872083b9f641e37150d0bb18f1  gcc/ada/libgnarl/a-astaco.adb
  c13d27ec688dfebb1965a8e9eaf55c2c  gcc/ada/libgnarl/a-astaco.ads
  66247d074eecb4270e7cf01d16e0cfce  gcc/ada/libgnarl/a-dinopr.ads
*************** ae0a263b4415dd958a4c21f8d7d844d6  gcc/ad
*** 1122,1128 ****
  f92e9f8737cb531736927ccb20d28ad9  gcc/ada/libgnarl/s-tasren.adb
  c697c2af313ddae26a66274f559f1e7a  gcc/ada/libgnarl/s-tasren.ads
  fea46813e8ede9053f553123f1ca243e  gcc/ada/libgnarl/s-tasres.ads
! 58509f748777a96ab1603be7697071de  gcc/ada/libgnarl/s-tassta.adb
  b26d6e71786c33c74864abaef9d24a4a  gcc/ada/libgnarl/s-tassta.ads
  7ac5d77331db12d14f3b28f0861fc1f6  gcc/ada/libgnarl/s-tasuti.adb
  7920394e74237db6e4634763a3dd4479  gcc/ada/libgnarl/s-tasuti.ads
--- 1122,1128 ----
  f92e9f8737cb531736927ccb20d28ad9  gcc/ada/libgnarl/s-tasren.adb
  c697c2af313ddae26a66274f559f1e7a  gcc/ada/libgnarl/s-tasren.ads
  fea46813e8ede9053f553123f1ca243e  gcc/ada/libgnarl/s-tasres.ads
! 00d1c0cd803ccc01b3090b82c71a7884  gcc/ada/libgnarl/s-tassta.adb
  b26d6e71786c33c74864abaef9d24a4a  gcc/ada/libgnarl/s-tassta.ads
  7ac5d77331db12d14f3b28f0861fc1f6  gcc/ada/libgnarl/s-tasuti.adb
  7920394e74237db6e4634763a3dd4479  gcc/ada/libgnarl/s-tasuti.ads
*************** bd1451aa3970a1daa35ee591b1509555  gcc/ad
*** 1148,1153 ****
--- 1148,1155 ----
  07ed9a13044d9c23227fe17ebc75aa80  gcc/ada/libgnarl/s-tporft.adb
  c27e00e69445602d8e7867c8bded6fe1  gcc/ada/libgnarl/s-tposen.adb
  0458445f7dc10d7e3b11d0a15db0f419  gcc/ada/libgnarl/s-tposen.ads
+ 52fb781ee5d38b486c7de1945ac4c920  gcc/ada/libgnarl/s-tsgsba.adb
+ c7cb74d20ff9f72d1bbb463171f53bfb  gcc/ada/libgnarl/s-tsgsba__cheri.adb
  5ac2277eb973100c56534e7f1c879cf9  gcc/ada/libgnarl/s-vxwext.adb
  849b9e4094cfad502b06b64e340e7d5e  gcc/ada/libgnarl/s-vxwext.ads
  f8152252ae8a5b3304a0f9d685698dcf  gcc/ada/libgnarl/s-vxwext__kernel-smp.adb
*************** aadf6444a140a534f0c02420d9a27b68  gcc/ad
*** 1322,1328 ****
  67c586988a1ec3b9c9306b5769e7563e  gcc/ada/libgnat/a-envvar.adb
  e77a221e76c3e19394bf433277f04c0f  gcc/ada/libgnat/a-envvar.ads
  a28ab164c9315a2f99e5e7cdbcb088ce  gcc/ada/libgnat/a-excach.adb
! a58922dee9ccaceb21980fc0e868cf8b  gcc/ada/libgnat/a-except.adb
  8458ba0772e508cedf90ff6af4060974  gcc/ada/libgnat/a-except.ads
  51066f40c6ed78f2f89ef1ff6e04f9e2  gcc/ada/libgnat/a-exctra.adb
  085c93c65b54cb02fe4980a58f91e0a7  gcc/ada/libgnat/a-exctra.ads
--- 1324,1330 ----
  67c586988a1ec3b9c9306b5769e7563e  gcc/ada/libgnat/a-envvar.adb
  e77a221e76c3e19394bf433277f04c0f  gcc/ada/libgnat/a-envvar.ads
  a28ab164c9315a2f99e5e7cdbcb088ce  gcc/ada/libgnat/a-excach.adb
! e8910a65082ca26081a0704629fe476a  gcc/ada/libgnat/a-except.adb
  8458ba0772e508cedf90ff6af4060974  gcc/ada/libgnat/a-except.ads
  51066f40c6ed78f2f89ef1ff6e04f9e2  gcc/ada/libgnat/a-exctra.adb
  085c93c65b54cb02fe4980a58f91e0a7  gcc/ada/libgnat/a-exctra.ads
*************** e1ec6c63f08583982ce897634cbf9bf5  gcc/ad
*** 1380,1386 ****
  03d934454f8cbd5b382c05c95cd2a70a  gcc/ada/libgnat/a-ngcoar.ads
  f26a52f1a6f669dae0765bfac836b6dd  gcc/ada/libgnat/a-ngcoty.adb
  ac73ea5db807f510b48ed2db2f418512  gcc/ada/libgnat/a-ngcoty.ads
! cea6b621dd6e9b66545d8e143aaa80d0  gcc/ada/libgnat/a-ngelfu.adb
  88711673621a9324fb36e3948569d5be  gcc/ada/libgnat/a-ngelfu.ads
  c39d7e9b845c5ddf841934f051c25f8f  gcc/ada/libgnat/a-ngrear.adb
  eda88c38b09d5d0848cb7aad65b48569  gcc/ada/libgnat/a-ngrear.ads
--- 1382,1388 ----
  03d934454f8cbd5b382c05c95cd2a70a  gcc/ada/libgnat/a-ngcoar.ads
  f26a52f1a6f669dae0765bfac836b6dd  gcc/ada/libgnat/a-ngcoty.adb
  ac73ea5db807f510b48ed2db2f418512  gcc/ada/libgnat/a-ngcoty.ads
! 1bf72aa33c679a59f57ea50dfe54248f  gcc/ada/libgnat/a-ngelfu.adb
  88711673621a9324fb36e3948569d5be  gcc/ada/libgnat/a-ngelfu.ads
  c39d7e9b845c5ddf841934f051c25f8f  gcc/ada/libgnat/a-ngrear.adb
  eda88c38b09d5d0848cb7aad65b48569  gcc/ada/libgnat/a-ngrear.ads
*************** fde87f914a0fb6921988804794d7e36d  gcc/ad
*** 1480,1487 ****
  f875ce11dbd0980e354cf6e0f40ace8d  gcc/ada/libgnat/a-strsea.adb
  2a5097c79ed0f127f2c1ed00c49e49a8  gcc/ada/libgnat/a-strsea.ads
  666d32ee01d180ac98d7063c3dce7b89  gcc/ada/libgnat/a-strsto.ads
! 5031c316686760ed1e044fe0fe0b8e5b  gcc/ada/libgnat/a-strsup.adb
! a0e109f345b7bd1042ee73f24b4bea37  gcc/ada/libgnat/a-strsup.ads
  1c4f67b098ee46e794d0c3a2fe19f206  gcc/ada/libgnat/a-strunb.adb
  ec39f56f954e99f14f687ed0ff26552d  gcc/ada/libgnat/a-strunb.ads
  aa88bcbf41d237d4c910e39e82ad93ea  gcc/ada/libgnat/a-strunb__shared.adb
--- 1482,1489 ----
  f875ce11dbd0980e354cf6e0f40ace8d  gcc/ada/libgnat/a-strsea.adb
  2a5097c79ed0f127f2c1ed00c49e49a8  gcc/ada/libgnat/a-strsea.ads
  666d32ee01d180ac98d7063c3dce7b89  gcc/ada/libgnat/a-strsto.ads
! df0b259ef7a4a5b4a5ab3ecdaf05b00d  gcc/ada/libgnat/a-strsup.adb
! 27164ee062a90101f4417f9519682b6e  gcc/ada/libgnat/a-strsup.ads
  1c4f67b098ee46e794d0c3a2fe19f206  gcc/ada/libgnat/a-strunb.adb
  ec39f56f954e99f14f687ed0ff26552d  gcc/ada/libgnat/a-strunb.ads
  aa88bcbf41d237d4c910e39e82ad93ea  gcc/ada/libgnat/a-strunb__shared.adb
*************** fb95478bf10a92d004addc6efefe8498  gcc/ad
*** 1511,1517 ****
  e945e393a0fe2f13b4eefbc3a47e1bd6  gcc/ada/libgnat/a-stwima.ads
  35b6dee80743d9253ce0f38c7f7545b6  gcc/ada/libgnat/a-stwise.adb
  17d09294a902d13d57775e8517cc6bf9  gcc/ada/libgnat/a-stwise.ads
! c2869907bc80321b2588ec6a67c5a7e8  gcc/ada/libgnat/a-stwisu.adb
  8119e9702b937471a8c99dc5d7c3bc26  gcc/ada/libgnat/a-stwisu.ads
  58d74ad76c30c9e35de3f08902cf507c  gcc/ada/libgnat/a-stwiun.adb
  a9d0860644b353e53a34ff8f1a9a2c87  gcc/ada/libgnat/a-stwiun.ads
--- 1513,1519 ----
  e945e393a0fe2f13b4eefbc3a47e1bd6  gcc/ada/libgnat/a-stwima.ads
  35b6dee80743d9253ce0f38c7f7545b6  gcc/ada/libgnat/a-stwise.adb
  17d09294a902d13d57775e8517cc6bf9  gcc/ada/libgnat/a-stwise.ads
! c390939c77e3a0f8663f97de8506e6f7  gcc/ada/libgnat/a-stwisu.adb
  8119e9702b937471a8c99dc5d7c3bc26  gcc/ada/libgnat/a-stwisu.ads
  58d74ad76c30c9e35de3f08902cf507c  gcc/ada/libgnat/a-stwiun.adb
  a9d0860644b353e53a34ff8f1a9a2c87  gcc/ada/libgnat/a-stwiun.ads
*************** f3ddc25c20b07c4072918c6c0ea20ff9  gcc/ad
*** 1527,1533 ****
  6a637dcc4ddff32d46868aebf4a91372  gcc/ada/libgnat/a-stzmap.ads
  5c0f4fd060eb8b0e67d831c2f4385ad0  gcc/ada/libgnat/a-stzsea.adb
  d55d502a6a36904a7cd9e38161c25464  gcc/ada/libgnat/a-stzsea.ads
! 70a5372e0bc6f58f1c6aaa53e7521b54  gcc/ada/libgnat/a-stzsup.adb
  4c10f504df8a2e33ed3e9bd57b131910  gcc/ada/libgnat/a-stzsup.ads
  613815a3a9c4c6bb07f7a1485622bdf4  gcc/ada/libgnat/a-stzunb.adb
  7829bee7b68e11fdf7f2adcb25e4a61f  gcc/ada/libgnat/a-stzunb.ads
--- 1529,1535 ----
  6a637dcc4ddff32d46868aebf4a91372  gcc/ada/libgnat/a-stzmap.ads
  5c0f4fd060eb8b0e67d831c2f4385ad0  gcc/ada/libgnat/a-stzsea.adb
  d55d502a6a36904a7cd9e38161c25464  gcc/ada/libgnat/a-stzsea.ads
! b7623cbbc3cdee0a724d6b29450f7c2f  gcc/ada/libgnat/a-stzsup.adb
  4c10f504df8a2e33ed3e9bd57b131910  gcc/ada/libgnat/a-stzsup.ads
  613815a3a9c4c6bb07f7a1485622bdf4  gcc/ada/libgnat/a-stzunb.adb
  7829bee7b68e11fdf7f2adcb25e4a61f  gcc/ada/libgnat/a-stzunb.ads
*************** e1d21468d8dbe72facd07c26f37e0916  gcc/ad
*** 1598,1606 ****
  4f45fb79824b66021fe483d1b210e8c9  gcc/ada/libgnat/a-tienio.ads
  935655d07ba797732316881e1a0504cb  gcc/ada/libgnat/a-tifiau.adb
  fca90994ac67b0cbefa8dc5769ca3557  gcc/ada/libgnat/a-tifiau.ads
! 51b54c994053fb7da65c1c8df89a44db  gcc/ada/libgnat/a-tifiio.adb
  c16ad9374e832bfec80cdb19f8afaa99  gcc/ada/libgnat/a-tifiio.ads
! ccd6e91d128a6b19e876f2bafd80e737  gcc/ada/libgnat/a-tifiio__128.adb
  9e4762cc610e787acc987fdca0f356a9  gcc/ada/libgnat/a-tiflau.adb
  9aa4927052385939e731ca88a0f92f8d  gcc/ada/libgnat/a-tiflau.ads
  30f68c9d52ea481673ff9f6d7627ffb2  gcc/ada/libgnat/a-tiflio.adb
--- 1600,1608 ----
  4f45fb79824b66021fe483d1b210e8c9  gcc/ada/libgnat/a-tienio.ads
  935655d07ba797732316881e1a0504cb  gcc/ada/libgnat/a-tifiau.adb
  fca90994ac67b0cbefa8dc5769ca3557  gcc/ada/libgnat/a-tifiau.ads
! 03f01695bc0c7447e7e6396e6889e874  gcc/ada/libgnat/a-tifiio.adb
  c16ad9374e832bfec80cdb19f8afaa99  gcc/ada/libgnat/a-tifiio.ads
! cf1faadf0eb6cade541e9a0aa662999c  gcc/ada/libgnat/a-tifiio__128.adb
  9e4762cc610e787acc987fdca0f356a9  gcc/ada/libgnat/a-tiflau.adb
  9aa4927052385939e731ca88a0f92f8d  gcc/ada/libgnat/a-tiflau.ads
  30f68c9d52ea481673ff9f6d7627ffb2  gcc/ada/libgnat/a-tiflio.adb
*************** ac4398c87a170e85d59c963be7af117d  gcc/ad
*** 1655,1663 ****
  fa13b730a5c90ff293982415bf7bcecb  gcc/ada/libgnat/a-wtenio.ads
  3b0674406550c4c28446f9a131b294a4  gcc/ada/libgnat/a-wtfiau.adb
  c20c7b666d2627cca061ca81466a6530  gcc/ada/libgnat/a-wtfiau.ads
! 01b7d5def2bb11475a899a86e4735341  gcc/ada/libgnat/a-wtfiio.adb
  495444487be476924785b4b8eff6b910  gcc/ada/libgnat/a-wtfiio.ads
! 7d6cb373c9d4e36a4ee743b50c79efdd  gcc/ada/libgnat/a-wtfiio__128.adb
  ba793699253bde380b8cff98bb381f4a  gcc/ada/libgnat/a-wtflau.adb
  2880cfc5b513bda155fe4aa0ff52f782  gcc/ada/libgnat/a-wtflau.ads
  10b9ebd56179660704a76617c558027e  gcc/ada/libgnat/a-wtflio.adb
--- 1657,1665 ----
  fa13b730a5c90ff293982415bf7bcecb  gcc/ada/libgnat/a-wtenio.ads
  3b0674406550c4c28446f9a131b294a4  gcc/ada/libgnat/a-wtfiau.adb
  c20c7b666d2627cca061ca81466a6530  gcc/ada/libgnat/a-wtfiau.ads
! dc35e29252472bce10e3ba51441b52cb  gcc/ada/libgnat/a-wtfiio.adb
  495444487be476924785b4b8eff6b910  gcc/ada/libgnat/a-wtfiio.ads
! a1bdb5321873d3b27988ab50ae5c4929  gcc/ada/libgnat/a-wtfiio__128.adb
  ba793699253bde380b8cff98bb381f4a  gcc/ada/libgnat/a-wtflau.adb
  2880cfc5b513bda155fe4aa0ff52f782  gcc/ada/libgnat/a-wtflau.ads
  10b9ebd56179660704a76617c558027e  gcc/ada/libgnat/a-wtflio.adb
*************** bee760ec483726e853be1c9ba73e6f84  gcc/ad
*** 1705,1713 ****
  d4cb0c2b9ac1f5a380a0150e914689a4  gcc/ada/libgnat/a-ztexio.ads
  a2e5da06213f425b7f1814cc016f862e  gcc/ada/libgnat/a-ztfiau.adb
  5adb34460d67ecb22281a37893abf639  gcc/ada/libgnat/a-ztfiau.ads
! a692752939144d77afff4676c843a066  gcc/ada/libgnat/a-ztfiio.adb
  9e2efe8c1c2d6658a575fbecb5ab1418  gcc/ada/libgnat/a-ztfiio.ads
! 3d89f09f3edb9698db7338969a9b40d6  gcc/ada/libgnat/a-ztfiio__128.adb
  5f083402416ed25187bda81482907afc  gcc/ada/libgnat/a-ztflau.adb
  1619a0c60fed9a851e9ffea36b409c36  gcc/ada/libgnat/a-ztflau.ads
  11a5faa9f8cd552dc1118522cd12ea10  gcc/ada/libgnat/a-ztflio.adb
--- 1707,1715 ----
  d4cb0c2b9ac1f5a380a0150e914689a4  gcc/ada/libgnat/a-ztexio.ads
  a2e5da06213f425b7f1814cc016f862e  gcc/ada/libgnat/a-ztfiau.adb
  5adb34460d67ecb22281a37893abf639  gcc/ada/libgnat/a-ztfiau.ads
! cce33f4df4ea934b58cc1a8e749e49fd  gcc/ada/libgnat/a-ztfiio.adb
  9e2efe8c1c2d6658a575fbecb5ab1418  gcc/ada/libgnat/a-ztfiio.ads
! 9c1f8d96a18de02816c216822c423e50  gcc/ada/libgnat/a-ztfiio__128.adb
  5f083402416ed25187bda81482907afc  gcc/ada/libgnat/a-ztflau.adb
  1619a0c60fed9a851e9ffea36b409c36  gcc/ada/libgnat/a-ztflau.ads
  11a5faa9f8cd552dc1118522cd12ea10  gcc/ada/libgnat/a-ztflio.adb
*************** d2b5ac22236fcd922870df00cdbf5223  gcc/ad
*** 1974,1985 ****
  715600e1ae852deba1c294df3f8ea069  gcc/ada/libgnat/i-cheri.ads
  5e4322639a89e1c8d6ad573cc90c78d2  gcc/ada/libgnat/i-cobol.adb
  84003d299b51e75110957816395cead1  gcc/ada/libgnat/i-cobol.ads
! 7a48f9d159f9a5e900433ec1de58c451  gcc/ada/libgnat/i-cpoint.adb
  77f7e7686074d212957f8d38f73d95e7  gcc/ada/libgnat/i-cpoint.ads
  9743df732b34e67af4fcde000156ef5a  gcc/ada/libgnat/i-cstrea.adb
  a1f59c1391e76bbb0c315c6ed89d7903  gcc/ada/libgnat/i-cstrea.ads
  edbdf6dabe4b49bac55eca482be73229  gcc/ada/libgnat/i-cstrin.adb
! 277e9e53afc63fc7dd17e34975e9376b  gcc/ada/libgnat/i-cstrin.ads
  7d8297675730ed588134246459d2f63d  gcc/ada/libgnat/i-fortra.adb
  fe08792d30f40125dd75d63c7bcd68fe  gcc/ada/libgnat/i-fortra.ads
  6172ec3f6e14a699701cd6fecbe79259  gcc/ada/libgnat/i-pacdec.adb
--- 1976,1987 ----
  715600e1ae852deba1c294df3f8ea069  gcc/ada/libgnat/i-cheri.ads
  5e4322639a89e1c8d6ad573cc90c78d2  gcc/ada/libgnat/i-cobol.adb
  84003d299b51e75110957816395cead1  gcc/ada/libgnat/i-cobol.ads
! 75d5f7706ae83ce6a8ca0785eb248cdd  gcc/ada/libgnat/i-cpoint.adb
  77f7e7686074d212957f8d38f73d95e7  gcc/ada/libgnat/i-cpoint.ads
  9743df732b34e67af4fcde000156ef5a  gcc/ada/libgnat/i-cstrea.adb
  a1f59c1391e76bbb0c315c6ed89d7903  gcc/ada/libgnat/i-cstrea.ads
  edbdf6dabe4b49bac55eca482be73229  gcc/ada/libgnat/i-cstrin.adb
! f15ae7847900ba5b7bd86dd5b2b3d865  gcc/ada/libgnat/i-cstrin.ads
  7d8297675730ed588134246459d2f63d  gcc/ada/libgnat/i-fortra.adb
  fe08792d30f40125dd75d63c7bcd68fe  gcc/ada/libgnat/i-fortra.ads
  6172ec3f6e14a699701cd6fecbe79259  gcc/ada/libgnat/i-pacdec.adb
*************** a4b410c9bbb60942b8e9f990139c6dbe  gcc/ad
*** 2052,2059 ****
  0bce47676e2d4593d668bba2ee9c2cca  gcc/ada/libgnat/s-casi32.ads
  0b79bb72575b40e418eff2cbf49acdaa  gcc/ada/libgnat/s-casi64.adb
  55b10b5d170a4d6980ebf34e70e878a6  gcc/ada/libgnat/s-casi64.ads
! 8d0957f257d08fb981d51447d898f9ac  gcc/ada/libgnat/s-casuti.adb
! 69ec1c56ef16610c08b934adad6a62dc  gcc/ada/libgnat/s-casuti.ads
  7141b233dcced3ec43f263d8cb618f4d  gcc/ada/libgnat/s-caun128.adb
  b9314f753e77bcf3e8d0c87493822517  gcc/ada/libgnat/s-caun128.ads
  b7c587b6db25297c696f586d8c1ebd3a  gcc/ada/libgnat/s-caun16.adb
--- 2054,2061 ----
  0bce47676e2d4593d668bba2ee9c2cca  gcc/ada/libgnat/s-casi32.ads
  0b79bb72575b40e418eff2cbf49acdaa  gcc/ada/libgnat/s-casi64.adb
  55b10b5d170a4d6980ebf34e70e878a6  gcc/ada/libgnat/s-casi64.ads
! 277196710bc341471cc66c69cd44a2ae  gcc/ada/libgnat/s-casuti.adb
! 2a30196a8efd0e5f8a93966d6d3fc9fe  gcc/ada/libgnat/s-casuti.ads
  7141b233dcced3ec43f263d8cb618f4d  gcc/ada/libgnat/s-caun128.adb
  b9314f753e77bcf3e8d0c87493822517  gcc/ada/libgnat/s-caun128.ads
  b7c587b6db25297c696f586d8c1ebd3a  gcc/ada/libgnat/s-caun16.adb
*************** b7c587b6db25297c696f586d8c1ebd3a  gcc/ad
*** 2062,2067 ****
--- 2064,2071 ----
  242f29154cb7d2a0e1031fade98a5e13  gcc/ada/libgnat/s-caun32.ads
  9581e21d264a73a9a2df0d406f8d0206  gcc/ada/libgnat/s-caun64.adb
  daf3005263e0062e9f39b1cbcaec3e6c  gcc/ada/libgnat/s-caun64.ads
+ 57b1950ba63926934fd083873ec13a58  gcc/ada/libgnat/s-cautns.adb
+ 3f7cbdad594422fdb6de1792b7d47dc2  gcc/ada/libgnat/s-cautns.ads
  f37eb5605745956c236087bb0cc23ec4  gcc/ada/libgnat/s-chepoo.ads
  1f16e853c0747cb01e85deb3bcd51254  gcc/ada/libgnat/s-commun.adb
  aa94f3ce298c910f08d3e2d622d4dfc2  gcc/ada/libgnat/s-commun.ads
*************** b0b674397e26b47a258b47ad3b083697  gcc/ad
*** 2112,2118 ****
  0373020c8c333bc4c9aff4cdf70eb4bd  gcc/ada/libgnat/s-dwalin.ads
  b0582ed9e0f3716923001a5b20910ff6  gcc/ada/libgnat/s-elaall.adb
  0914a0a7b14d9140d662a98df793863b  gcc/ada/libgnat/s-elaall.ads
! 1bb9ef349425a303861ca461b9fc43b6  gcc/ada/libgnat/s-excdeb.adb
  ba7e9adf097c1a72bc46bf7f7994c8a4  gcc/ada/libgnat/s-excdeb.ads
  76bec4072ed3fe2ada147b473e5db4b1  gcc/ada/libgnat/s-except.adb
  72142b9f69d446f30da5dc3571fecfb5  gcc/ada/libgnat/s-except.ads
--- 2116,2122 ----
  0373020c8c333bc4c9aff4cdf70eb4bd  gcc/ada/libgnat/s-dwalin.ads
  b0582ed9e0f3716923001a5b20910ff6  gcc/ada/libgnat/s-elaall.adb
  0914a0a7b14d9140d662a98df793863b  gcc/ada/libgnat/s-elaall.ads
! b113fd6de80586dce1c76c636b0bd835  gcc/ada/libgnat/s-excdeb.adb
  ba7e9adf097c1a72bc46bf7f7994c8a4  gcc/ada/libgnat/s-excdeb.ads
  76bec4072ed3fe2ada147b473e5db4b1  gcc/ada/libgnat/s-except.adb
  72142b9f69d446f30da5dc3571fecfb5  gcc/ada/libgnat/s-except.ads
*************** e352a12b4d9f9fa805da7e6f658fdf64  gcc/ad
*** 2599,2606 ****
  96c313f30fdba62de433fb092458877f  gcc/ada/libgnat/s-stalib.ads
  55323d3e45389ad9fef892d1cd81d1fc  gcc/ada/libgnat/s-statxd.adb
  fafaec7e1407523ff707cd31b2f133b7  gcc/ada/libgnat/s-statxd.ads
! 5a84bd37eebed6a9a806a28b4d867da1  gcc/ada/libgnat/s-stausa.adb
! 6971fc7fe028e094537723058377fbab  gcc/ada/libgnat/s-stausa.ads
  8807ad512b03355051bfd5fb569a37e3  gcc/ada/libgnat/s-stchop.adb
  77ae5ab61ffcb4e91b6a831c69bb9008  gcc/ada/libgnat/s-stchop.ads
  cf4e9c9c6b5846a66a92e76ff6939db8  gcc/ada/libgnat/s-stchop__limit.ads
--- 2603,2610 ----
  96c313f30fdba62de433fb092458877f  gcc/ada/libgnat/s-stalib.ads
  55323d3e45389ad9fef892d1cd81d1fc  gcc/ada/libgnat/s-statxd.adb
  fafaec7e1407523ff707cd31b2f133b7  gcc/ada/libgnat/s-statxd.ads
! 8c19400b3750004a523d06f3c33a9a0f  gcc/ada/libgnat/s-stausa.adb
! 134b7c102d83020b2b045e0b61cceace  gcc/ada/libgnat/s-stausa.ads
  8807ad512b03355051bfd5fb569a37e3  gcc/ada/libgnat/s-stchop.adb
  77ae5ab61ffcb4e91b6a831c69bb9008  gcc/ada/libgnat/s-stchop.ads
  cf4e9c9c6b5846a66a92e76ff6939db8  gcc/ada/libgnat/s-stchop__limit.ads
*************** ed9803237b06bc4a3d390e2358fd3b27  gcc/ad
*** 2632,2638 ****
  26134f1dafdbc6f3bfdee2d8a3d691c7  gcc/ada/libgnat/s-traent.ads
  42dec61edfcb9d86beb94f9f2774d3df  gcc/ada/libgnat/s-trasym.adb
  ba0f0e2b49a2abcb11276ca13680a9ca  gcc/ada/libgnat/s-trasym.ads
! 4ee8d0b5c508944e7253d134538f80b3  gcc/ada/libgnat/s-trasym__dwarf.adb
  ae31c644571f5bd80e55212954450689  gcc/ada/libgnat/s-tsmona.adb
  d24397c620e7798c862b39526b3374cd  gcc/ada/libgnat/s-tsmona__linux.adb
  8991c7832c179d6caa3de959bccd9ca2  gcc/ada/libgnat/s-tsmona__mingw.adb
--- 2636,2642 ----
  26134f1dafdbc6f3bfdee2d8a3d691c7  gcc/ada/libgnat/s-traent.ads
  42dec61edfcb9d86beb94f9f2774d3df  gcc/ada/libgnat/s-trasym.adb
  ba0f0e2b49a2abcb11276ca13680a9ca  gcc/ada/libgnat/s-trasym.ads
! 26744f51263f2faad92d59a019131dc6  gcc/ada/libgnat/s-trasym__dwarf.adb
  ae31c644571f5bd80e55212954450689  gcc/ada/libgnat/s-tsmona.adb
  d24397c620e7798c862b39526b3374cd  gcc/ada/libgnat/s-tsmona__linux.adb
  8991c7832c179d6caa3de959bccd9ca2  gcc/ada/libgnat/s-tsmona__mingw.adb
*************** e3573a331c9da65676bb43b33e41eccd  gcc/ad
*** 2663,2685 ****
  b65d9577e62db8395bb2d0979fb6a89c  gcc/ada/libgnat/s-vallllu.ads
  ebc5cf7d12e00dad27cc95ef08f3f9ed  gcc/ada/libgnat/s-valllu.adb
  baff4dd34c4f5608ef7d05eb895f4d41  gcc/ada/libgnat/s-valllu.ads
! 7ce9f4a2290eaae020364a5e782ac01f  gcc/ada/libgnat/s-valrea.adb
  fea79505753dcfddbdd4bb7e6c817f95  gcc/ada/libgnat/s-valrea.ads
! 5ecd3b0aa5c8165e2e4087620bf19923  gcc/ada/libgnat/s-valued.adb
  6878604d7169687d8b0559a0c882290b  gcc/ada/libgnat/s-valued.ads
! 0ababf498f072f23acc7c6d8fd9d5fde  gcc/ada/libgnat/s-valuef.adb
  f57876720eb8101aa21c0b11bb083f4d  gcc/ada/libgnat/s-valuef.ads
  bcb3e97ba193bfaf7461ab85f04edbf8  gcc/ada/libgnat/s-valuei.adb
  8832c4d9879450406361af7a50cddfea  gcc/ada/libgnat/s-valuei.ads
  45d076789f772670210823137d7e95c5  gcc/ada/libgnat/s-valuen.adb
! 085c74c7ed0d273025dda1e9056c2660  gcc/ada/libgnat/s-valuen.ads
! 33bf84c4c4d0a3bcd98299ecce7e1bb6  gcc/ada/libgnat/s-valuer.adb
! 23b00738ace44d22300c5217e54626db  gcc/ada/libgnat/s-valuer.ads
  07ee239b017de40c720d59c339f5cd91  gcc/ada/libgnat/s-valueu.adb
  2948787a3a76d44aff2ff1c1e4ad5a24  gcc/ada/libgnat/s-valueu.ads
  462e5a0207eadc68a181a16d2d3e355f  gcc/ada/libgnat/s-valuns.adb
  d84639603cc842a686b7bf0bd746a6ac  gcc/ada/libgnat/s-valuns.ads
! e2d7afeb57e030893c1ea16a3a2f1a47  gcc/ada/libgnat/s-valuti.adb
  7cfc2eb10282fdf59f519ef8df0e4b70  gcc/ada/libgnat/s-valuti.ads
  ba4c2f32529d0e79da44fc4f70bacf03  gcc/ada/libgnat/s-valwch.adb
  22cb7235ac47c197e96f0afde7817106  gcc/ada/libgnat/s-valwch.ads
--- 2667,2689 ----
  b65d9577e62db8395bb2d0979fb6a89c  gcc/ada/libgnat/s-vallllu.ads
  ebc5cf7d12e00dad27cc95ef08f3f9ed  gcc/ada/libgnat/s-valllu.adb
  baff4dd34c4f5608ef7d05eb895f4d41  gcc/ada/libgnat/s-valllu.ads
! a6eaae3740357a08dc2ea57f2cffc6aa  gcc/ada/libgnat/s-valrea.adb
  fea79505753dcfddbdd4bb7e6c817f95  gcc/ada/libgnat/s-valrea.ads
! 6bef57c01f57857223cc339acabcdea2  gcc/ada/libgnat/s-valued.adb
  6878604d7169687d8b0559a0c882290b  gcc/ada/libgnat/s-valued.ads
! 04645dc22675a442380a12ac48183b8b  gcc/ada/libgnat/s-valuef.adb
  f57876720eb8101aa21c0b11bb083f4d  gcc/ada/libgnat/s-valuef.ads
  bcb3e97ba193bfaf7461ab85f04edbf8  gcc/ada/libgnat/s-valuei.adb
  8832c4d9879450406361af7a50cddfea  gcc/ada/libgnat/s-valuei.ads
  45d076789f772670210823137d7e95c5  gcc/ada/libgnat/s-valuen.adb
! edc0dc122754038dd5f7209655f7ebc6  gcc/ada/libgnat/s-valuen.ads
! a5990bd68a8141d02e3c57578028a8e4  gcc/ada/libgnat/s-valuer.adb
! cbf34015ef11dbe172c612c8cd92c1c0  gcc/ada/libgnat/s-valuer.ads
  07ee239b017de40c720d59c339f5cd91  gcc/ada/libgnat/s-valueu.adb
  2948787a3a76d44aff2ff1c1e4ad5a24  gcc/ada/libgnat/s-valueu.ads
  462e5a0207eadc68a181a16d2d3e355f  gcc/ada/libgnat/s-valuns.adb
  d84639603cc842a686b7bf0bd746a6ac  gcc/ada/libgnat/s-valuns.ads
! 763f9782dd873ecd0fa4caecdd8e5299  gcc/ada/libgnat/s-valuti.adb
  7cfc2eb10282fdf59f519ef8df0e4b70  gcc/ada/libgnat/s-valuti.ads
  ba4c2f32529d0e79da44fc4f70bacf03  gcc/ada/libgnat/s-valwch.adb
  22cb7235ac47c197e96f0afde7817106  gcc/ada/libgnat/s-valwch.ads
*************** ca50c109ab873565785735a0fc7b519c  gcc/ad
*** 2741,2747 ****
  6e0df90c197a855b968fcbf7f3b75168  gcc/ada/libgnat/system-linux-arm.ads
  46c7642eea429c4c381655f00aa89219  gcc/ada/libgnat/system-linux-hppa.ads
  0ef39f058633550414ed85daf5b0176a  gcc/ada/libgnat/system-linux-ia64.ads
! 53fc71cd1ef500bb36caf52c33ad6d8a  gcc/ada/libgnat/system-linux-loongarch.ads
  01a608db32885c695a0b8e3d05ec33b5  gcc/ada/libgnat/system-linux-m68k.ads
  2e6961fb9d192db0300eb43023c51c45  gcc/ada/libgnat/system-linux-mips.ads
  33193af368f24333f1577b5b11768eb6  gcc/ada/libgnat/system-linux-ppc.ads
--- 2745,2751 ----
  6e0df90c197a855b968fcbf7f3b75168  gcc/ada/libgnat/system-linux-arm.ads
  46c7642eea429c4c381655f00aa89219  gcc/ada/libgnat/system-linux-hppa.ads
  0ef39f058633550414ed85daf5b0176a  gcc/ada/libgnat/system-linux-ia64.ads
! 629fa89b2e492e788b8414313fb8a0fd  gcc/ada/libgnat/system-linux-loongarch.ads
  01a608db32885c695a0b8e3d05ec33b5  gcc/ada/libgnat/system-linux-m68k.ads
  2e6961fb9d192db0300eb43023c51c45  gcc/ada/libgnat/system-linux-mips.ads
  33193af368f24333f1577b5b11768eb6  gcc/ada/libgnat/system-linux-ppc.ads
*************** f1c598b9ed25c6a7f9ca4fe6ae452f22  gcc/ad
*** 2795,2801 ****
  751e8542774037ed27a6bc9f4ece18cb  gcc/ada/mdll.ads
  1c3b6dcadfa6a8c0f677bbc6532e4df4  gcc/ada/mingw32.h
  204b17cea6ee8ef6f625bdb94e8bea02  gcc/ada/mkdir.c
! df5aa0dd04daf543efbc0f72adda7a9a  gcc/ada/mutably_tagged.adb
  8b3ea8a8e93333d3199fe382c5a9bb29  gcc/ada/mutably_tagged.ads
  7f39a63ae2aca38a1e09b830d8298e42  gcc/ada/namet-sp.adb
  6bcaf8f1c19dc69c747c2d495b341d5f  gcc/ada/namet-sp.ads
--- 2799,2805 ----
  751e8542774037ed27a6bc9f4ece18cb  gcc/ada/mdll.ads
  1c3b6dcadfa6a8c0f677bbc6532e4df4  gcc/ada/mingw32.h
  204b17cea6ee8ef6f625bdb94e8bea02  gcc/ada/mkdir.c
! 251f6965bae5313f3f52222e273ce774  gcc/ada/mutably_tagged.adb
  8b3ea8a8e93333d3199fe382c5a9bb29  gcc/ada/mutably_tagged.ads
  7f39a63ae2aca38a1e09b830d8298e42  gcc/ada/namet-sp.adb
  6bcaf8f1c19dc69c747c2d495b341d5f  gcc/ada/namet-sp.ads
*************** b9fd1f536d8f1c867c911cbe2996ebeb  gcc/ad
*** 2826,2843 ****
  ed9e0f33947385dfddd6c98bc7c51a92  gcc/ada/par-ch2.adb
  a5b0bb97ff5d0883ff6ae65776076e78  gcc/ada/par-ch3.adb
  bc9ca61ef7f5b2dd590c60a8e0bbec6b  gcc/ada/par-ch4.adb
! bbeaf8c4d52dd6e55beb0b96742ec416  gcc/ada/par-ch5.adb
  9a6d14cbda19963ebbe77a942d8886c2  gcc/ada/par-ch6.adb
  2b201234474be782ce30a79ebe674e81  gcc/ada/par-ch7.adb
  349dda80fe39ecf9d2b818ec0e769d80  gcc/ada/par-ch8.adb
  3d5733e116665c179c26e9939a59395e  gcc/ada/par-ch9.adb
! d4d826a8938d43dd9c9ccc8bb66465e6  gcc/ada/par-endh.adb
  6f12aeb2c6db21d91040dfb1bf2e74ce  gcc/ada/par-labl.adb
  f94c687806a26857ca4b2a93d99b31e1  gcc/ada/par-load.adb
  8113cc08a49b97128e8b42b9756bae35  gcc/ada/par-prag.adb
  ee1279472214ff7ca5b61685a2ada15f  gcc/ada/par-sync.adb
! 62df590e3ddd37b092c26e4b8b1b684a  gcc/ada/par-tchk.adb
! 4b301bf83a66a95a68b6556cd5b684d9  gcc/ada/par-util.adb
  5fce07cb20ef0ed82cdb209d07bca682  gcc/ada/par.adb
  cc0b4ae85eb0edbcce886d13c925cbf3  gcc/ada/par.ads
  b0a53260cce47acbd0de8d046175c63f  gcc/ada/par_sco.adb
--- 2830,2847 ----
  ed9e0f33947385dfddd6c98bc7c51a92  gcc/ada/par-ch2.adb
  a5b0bb97ff5d0883ff6ae65776076e78  gcc/ada/par-ch3.adb
  bc9ca61ef7f5b2dd590c60a8e0bbec6b  gcc/ada/par-ch4.adb
! e80166837acac8e9697a90e447e06871  gcc/ada/par-ch5.adb
  9a6d14cbda19963ebbe77a942d8886c2  gcc/ada/par-ch6.adb
  2b201234474be782ce30a79ebe674e81  gcc/ada/par-ch7.adb
  349dda80fe39ecf9d2b818ec0e769d80  gcc/ada/par-ch8.adb
  3d5733e116665c179c26e9939a59395e  gcc/ada/par-ch9.adb
! 0f10c72440816216759b417e23acf069  gcc/ada/par-endh.adb
  6f12aeb2c6db21d91040dfb1bf2e74ce  gcc/ada/par-labl.adb
  f94c687806a26857ca4b2a93d99b31e1  gcc/ada/par-load.adb
  8113cc08a49b97128e8b42b9756bae35  gcc/ada/par-prag.adb
  ee1279472214ff7ca5b61685a2ada15f  gcc/ada/par-sync.adb
! 47b402373c995a1c6df9226ae6e02ff2  gcc/ada/par-tchk.adb
! f7fab42e1a1d4d9474c2cb72a9d95e3b  gcc/ada/par-util.adb
  5fce07cb20ef0ed82cdb209d07bca682  gcc/ada/par.adb
  cc0b4ae85eb0edbcce886d13c925cbf3  gcc/ada/par.ads
  b0a53260cce47acbd0de8d046175c63f  gcc/ada/par_sco.adb
*************** b0a53260cce47acbd0de8d046175c63f  gcc/ad
*** 2846,2852 ****
  d4e0d990ec706c00861a684898856c8d  gcc/ada/pprint.ads
  91aac53800a72e557fe679a71ba9085b  gcc/ada/prep.adb
  6dcc5289c9c7b452765a51d5831985bd  gcc/ada/prep.ads
! 001047fd6d846b04a693b45c46bd9d1b  gcc/ada/prepcomp.adb
  d28fe9bf503081b92048e26c8842b408  gcc/ada/prepcomp.ads
  fcfa33c29572e4f892bd68b226e0184d  gcc/ada/put_scos.adb
  3b031a53f556fd6a205a13665cd77c74  gcc/ada/put_scos.ads
--- 2850,2856 ----
  d4e0d990ec706c00861a684898856c8d  gcc/ada/pprint.ads
  91aac53800a72e557fe679a71ba9085b  gcc/ada/prep.adb
  6dcc5289c9c7b452765a51d5831985bd  gcc/ada/prep.ads
! ad6cb6b61cacdf44f450f4a4bef3bcf6  gcc/ada/prepcomp.adb
  d28fe9bf503081b92048e26c8842b408  gcc/ada/prepcomp.ads
  fcfa33c29572e4f892bd68b226e0184d  gcc/ada/put_scos.adb
  3b031a53f556fd6a205a13665cd77c74  gcc/ada/put_scos.ads
*************** fcfa33c29572e4f892bd68b226e0184d  gcc/ad
*** 2855,2861 ****
  bb35d323ecf448aa8fb7025a4bc206ac  gcc/ada/raise.h
  60f15e9242cc708164c2465f35b7bcee  gcc/ada/repinfo-input.adb
  2068823632327326518141ecef478b56  gcc/ada/repinfo-input.ads
! 36e0b6ed757a1c0f73f1072a9b0ec75c  gcc/ada/repinfo.adb
  2b7ee770fce987fa4a536a7ff6f66d28  gcc/ada/repinfo.ads
  9f01bfb3f02044d2af9dd8653ff046c7  gcc/ada/repinfo.h
  3d4a1dc93d967d84654b6489aaf51b1b  gcc/ada/restrict.adb
--- 2859,2865 ----
  bb35d323ecf448aa8fb7025a4bc206ac  gcc/ada/raise.h
  60f15e9242cc708164c2465f35b7bcee  gcc/ada/repinfo-input.adb
  2068823632327326518141ecef478b56  gcc/ada/repinfo-input.ads
! ee42403c9984dd389a6e7c3046178b10  gcc/ada/repinfo.adb
  2b7ee770fce987fa4a536a7ff6f66d28  gcc/ada/repinfo.ads
  9f01bfb3f02044d2af9dd8653ff046c7  gcc/ada/repinfo.h
  3d4a1dc93d967d84654b6489aaf51b1b  gcc/ada/restrict.adb
*************** c34ee64559a764f063b49301a7504e82  gcc/ad
*** 2881,2941 ****
  cbf1143b39dba16ccff2bad507662b80  gcc/ada/scos.ads
  1e9843bd9ac3288c126ec7d6727ea8e6  gcc/ada/sdefault.ads
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
! a67c36c91c4dea7353be4635f19754d1  gcc/ada/sem.adb
  852fbcc89a3ed10b6c00d4f9686d1405  gcc/ada/sem.ads
! 77e7d484fc0452e0030a2a24479da4b0  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! 89685570d809f05ecf279b006d5b53b7  gcc/ada/sem_attr.adb
  825e191d7eee72ea4718b1fc2ba02824  gcc/ada/sem_attr.ads
  4a02c8331cea42852aa409345905ab04  gcc/ada/sem_aux.adb
! 3f6d12eb2d9c7a6a829eaf2bda0535a5  gcc/ada/sem_aux.ads
  1b4e45ef8df3f33dae9b6710ce3bbf7a  gcc/ada/sem_case.adb
  88daa5c9b6e135316b52695cae25a496  gcc/ada/sem_case.ads
  84667b3de209c0b04f82a349c6125ab0  gcc/ada/sem_cat.adb
  e364f4e3ae92066699cc93a8f7b828c1  gcc/ada/sem_cat.ads
! 3b22f342b7dcccc44a20ea4f7e160b80  gcc/ada/sem_ch10.adb
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! 820754794e8faf0b418d62c3395ebde3  gcc/ada/sem_ch12.adb
  b0a3315dce9de8e3bbbb3682c8b0e2ff  gcc/ada/sem_ch12.ads
! 7505cc81b9a8a94e1771d86e246b2811  gcc/ada/sem_ch13.adb
! 24bb91233702860aa2a308e59ba7cb6a  gcc/ada/sem_ch13.ads
  14326c522718c8cb8415b13a79c07972  gcc/ada/sem_ch2.adb
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
! ba8825b4c74e3a6db73079c4c5bf62da  gcc/ada/sem_ch3.adb
  a9694f8bc09b47075cae226e570e02f0  gcc/ada/sem_ch3.ads
! 8dfb41205dbb5743f5e5a2f90b7ae11f  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
! 3bb75edede811051a0265caaac30883f  gcc/ada/sem_ch5.adb
! cbfbd3e4737f56717fc2ffda6b38f125  gcc/ada/sem_ch5.ads
! 7f0e7caa25a2a7ac6057eb0cc3e6fa82  gcc/ada/sem_ch6.adb
! 0795b422cecef3e0f4bcebfb00a2096d  gcc/ada/sem_ch6.ads
  3c7c6e6b95a9cddb1d6f1a42a5962379  gcc/ada/sem_ch7.adb
  24a1265e6a25756265643858abcf7ded  gcc/ada/sem_ch7.ads
! 3d5be0b4ef68143c1e9d2bfb96181585  gcc/ada/sem_ch8.adb
  f0b4e317e5d5515a6ec337bc5acf5fe0  gcc/ada/sem_ch8.ads
  7fdc25b17002200422b401c1df8f051c  gcc/ada/sem_ch9.adb
  7b283bd6453de444c7075a8c6f215dda  gcc/ada/sem_ch9.ads
  dea2a3321bde0d3ed6be665ade24a2c6  gcc/ada/sem_dim.adb
  d0ed9c569455451ee26c8e2565b7125b  gcc/ada/sem_dim.ads
! ee1685cc77eb01871b4b800e9e31f159  gcc/ada/sem_disp.adb
  40937cb7584e45e4c545aa3e4c20fbb2  gcc/ada/sem_disp.ads
  8f677120e0bcecbdcfa5b9c4f44cb282  gcc/ada/sem_dist.adb
  a38c4ce4bc2936bd0a73c28ff1b0df61  gcc/ada/sem_dist.ads
! ea4d856a616d24b9db47871b82e88726  gcc/ada/sem_elab.adb
  c074ec7450863300eff2a21c036a624b  gcc/ada/sem_elab.ads
! 1dcf7c5349839b9e9ab4ee0d1954c7c6  gcc/ada/sem_elim.adb
  c837e01542a712c622bac1cd152fc080  gcc/ada/sem_elim.ads
! 8b4f9372162e98d77174047dfe754b49  gcc/ada/sem_eval.adb
  6ad36871bb495808ea611c6c620fc482  gcc/ada/sem_eval.ads
  e8e79e2a818321d7816e27eed8d17404  gcc/ada/sem_intr.adb
  66ccba8e3b77fa8d6e0e13f6368d804a  gcc/ada/sem_intr.ads
  4a954a685009a9b0bcf72a8517dc3bdf  gcc/ada/sem_mech.adb
  bcb22deebc83b966e7be367087d9fd7b  gcc/ada/sem_mech.ads
! 0476f84651eebef465b740788986951b  gcc/ada/sem_prag.adb
  77d07a6ae20be77457587ee20ba32423  gcc/ada/sem_prag.ads
! af57de4e138d709f95154297e17cb15d  gcc/ada/sem_res.adb
  bb01f11ceaa352a8b99f95fcbcfe97d9  gcc/ada/sem_res.ads
  28d33ede4288814374d1909847798c7d  gcc/ada/sem_scil.adb
  db6f5a37bd59fd83ff3286e71ab985fe  gcc/ada/sem_scil.ads
--- 2885,2945 ----
  cbf1143b39dba16ccff2bad507662b80  gcc/ada/scos.ads
  1e9843bd9ac3288c126ec7d6727ea8e6  gcc/ada/sdefault.ads
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
! b58c1b9f5b963c617e489cf6a637242a  gcc/ada/sem.adb
  852fbcc89a3ed10b6c00d4f9686d1405  gcc/ada/sem.ads
! 56077675be6cdea397a7c913a87672b6  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! 4a4bed3e8155177fe516773f0103a256  gcc/ada/sem_attr.adb
  825e191d7eee72ea4718b1fc2ba02824  gcc/ada/sem_attr.ads
  4a02c8331cea42852aa409345905ab04  gcc/ada/sem_aux.adb
! 53f33d18e4572e77b490e9320f5c2aa4  gcc/ada/sem_aux.ads
  1b4e45ef8df3f33dae9b6710ce3bbf7a  gcc/ada/sem_case.adb
  88daa5c9b6e135316b52695cae25a496  gcc/ada/sem_case.ads
  84667b3de209c0b04f82a349c6125ab0  gcc/ada/sem_cat.adb
  e364f4e3ae92066699cc93a8f7b828c1  gcc/ada/sem_cat.ads
! 68cb25721bb4d26c4ab49b158aaf355e  gcc/ada/sem_ch10.adb
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! d7c35f5fb6e436afe84cb0f385f59af3  gcc/ada/sem_ch12.adb
  b0a3315dce9de8e3bbbb3682c8b0e2ff  gcc/ada/sem_ch12.ads
! 0eef1fb5bf49a8878f6e3e24d19ba3f1  gcc/ada/sem_ch13.adb
! 42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
  14326c522718c8cb8415b13a79c07972  gcc/ada/sem_ch2.adb
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
! 9f4770487c9a532babeaf5e8fd3730d6  gcc/ada/sem_ch3.adb
  a9694f8bc09b47075cae226e570e02f0  gcc/ada/sem_ch3.ads
! 5365888d72824ee41032155dd52ef502  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
! 0135ad6cef623899ddfc58bedb11e1bb  gcc/ada/sem_ch5.adb
! ec8d5a42c27c46e4969c16d6e18ed276  gcc/ada/sem_ch5.ads
! b0ae0f2942b77336c4ca1a3dcfd2fdf4  gcc/ada/sem_ch6.adb
! 51bdafe51a1cae21d9fba800fcd7a572  gcc/ada/sem_ch6.ads
  3c7c6e6b95a9cddb1d6f1a42a5962379  gcc/ada/sem_ch7.adb
  24a1265e6a25756265643858abcf7ded  gcc/ada/sem_ch7.ads
! 9fb98cdca68de7159f88210dc7bfb2a6  gcc/ada/sem_ch8.adb
  f0b4e317e5d5515a6ec337bc5acf5fe0  gcc/ada/sem_ch8.ads
  7fdc25b17002200422b401c1df8f051c  gcc/ada/sem_ch9.adb
  7b283bd6453de444c7075a8c6f215dda  gcc/ada/sem_ch9.ads
  dea2a3321bde0d3ed6be665ade24a2c6  gcc/ada/sem_dim.adb
  d0ed9c569455451ee26c8e2565b7125b  gcc/ada/sem_dim.ads
! dc4aae103bf28240aeca01e27e881dbe  gcc/ada/sem_disp.adb
  40937cb7584e45e4c545aa3e4c20fbb2  gcc/ada/sem_disp.ads
  8f677120e0bcecbdcfa5b9c4f44cb282  gcc/ada/sem_dist.adb
  a38c4ce4bc2936bd0a73c28ff1b0df61  gcc/ada/sem_dist.ads
! fb2845905c56e08b97d234bb3fa0e426  gcc/ada/sem_elab.adb
  c074ec7450863300eff2a21c036a624b  gcc/ada/sem_elab.ads
! 1623b94463e7ca1496ecde7010db85fc  gcc/ada/sem_elim.adb
  c837e01542a712c622bac1cd152fc080  gcc/ada/sem_elim.ads
! e6fdae4f1a2b5f4d99f3cf365e0d5e79  gcc/ada/sem_eval.adb
  6ad36871bb495808ea611c6c620fc482  gcc/ada/sem_eval.ads
  e8e79e2a818321d7816e27eed8d17404  gcc/ada/sem_intr.adb
  66ccba8e3b77fa8d6e0e13f6368d804a  gcc/ada/sem_intr.ads
  4a954a685009a9b0bcf72a8517dc3bdf  gcc/ada/sem_mech.adb
  bcb22deebc83b966e7be367087d9fd7b  gcc/ada/sem_mech.ads
! e2f3633d170142979d7ed46d67a83b5b  gcc/ada/sem_prag.adb
  77d07a6ae20be77457587ee20ba32423  gcc/ada/sem_prag.ads
! 0de51ef4cc99905ee063ed424da8ef09  gcc/ada/sem_res.adb
  bb01f11ceaa352a8b99f95fcbcfe97d9  gcc/ada/sem_res.ads
  28d33ede4288814374d1909847798c7d  gcc/ada/sem_scil.adb
  db6f5a37bd59fd83ff3286e71ab985fe  gcc/ada/sem_scil.ads
*************** db6f5a37bd59fd83ff3286e71ab985fe  gcc/ad
*** 2943,2955 ****
  89d73c108bd8921f6d6cd84d98726ea5  gcc/ada/sem_smem.ads
  d0a2f5b2f65a874363f7fbe2b9a79f8b  gcc/ada/sem_type.adb
  dee50852181adfada17fb5b7423ed973  gcc/ada/sem_type.ads
! b9daaddf4a513e90a11b486a60623027  gcc/ada/sem_util.adb
! 7ec54f10d36f265bb46733d6d41b14b8  gcc/ada/sem_util.ads
! 09716714503bb078951024d9081855f6  gcc/ada/sem_warn.adb
! e71db5efd6c6d9969e1e7887ebe4e6b5  gcc/ada/sem_warn.ads
  239ca67ac9aa430abfe5120a8d4302d9  gcc/ada/set_targ.adb
  b80f6a9d10e348b68d302b5cc4a1eb88  gcc/ada/set_targ.ads
! d677962c5cb91bdfb376118de618c60e  gcc/ada/sfn_scan.adb
  a6f437e146a2424a366c8756e1588bc4  gcc/ada/sfn_scan.ads
  fbcd374b992573a80a2d6f7cbf5beb67  gcc/ada/sigtramp-android-asm.h
  fd4d9f3482192f6e3be236b576b9c7a5  gcc/ada/sigtramp-android.c
--- 2947,2959 ----
  89d73c108bd8921f6d6cd84d98726ea5  gcc/ada/sem_smem.ads
  d0a2f5b2f65a874363f7fbe2b9a79f8b  gcc/ada/sem_type.adb
  dee50852181adfada17fb5b7423ed973  gcc/ada/sem_type.ads
! b2fb09d8a8d984cd4ec206933cdd21c4  gcc/ada/sem_util.adb
! 5c2fd7785d1403e27f5bc0ed4d3b8235  gcc/ada/sem_util.ads
! 9668d6a37fe84f41a81a7ffcb66d5ecc  gcc/ada/sem_warn.adb
! 441e0f80657ef72324e40dd20cebfc82  gcc/ada/sem_warn.ads
  239ca67ac9aa430abfe5120a8d4302d9  gcc/ada/set_targ.adb
  b80f6a9d10e348b68d302b5cc4a1eb88  gcc/ada/set_targ.ads
! bbe18b712f7dfa89536da6161a3a81f8  gcc/ada/sfn_scan.adb
  a6f437e146a2424a366c8756e1588bc4  gcc/ada/sfn_scan.ads
  fbcd374b992573a80a2d6f7cbf5beb67  gcc/ada/sigtramp-android-asm.h
  fd4d9f3482192f6e3be236b576b9c7a5  gcc/ada/sigtramp-android.c
*************** c2541eaa9688774ed19289cfc89625a5  gcc/ad
*** 2961,2970 ****
  f32c4d3d5df9ad9663b4978f7f8a2573  gcc/ada/sigtramp.h
  128a0905adb78c79aa56397a7942e20a  gcc/ada/sinfo-cn.adb
  2cb93d6ac8ba3beb6fc31af4d97b6fcd  gcc/ada/sinfo-cn.ads
! d78423bdc8b85ab7cdc070996aa4d544  gcc/ada/sinfo-utils.adb
! a279552ee28f4ed267298848351ccbc6  gcc/ada/sinfo-utils.ads
  e6d5c3ccb5893bb3943fbdf529b298d6  gcc/ada/sinfo.adb
! 0ba3fa3fa2369cd2f4898cbf11da05b3  gcc/ada/sinfo.ads
  ebb37a07fb72782f86b0c141d3f6077c  gcc/ada/sinput-c.adb
  ec9033e4caebeb446063de16e18918f4  gcc/ada/sinput-c.ads
  2fec6a5fbe7c9e765ea70c82814b0fd3  gcc/ada/sinput-d.adb
--- 2965,2974 ----
  f32c4d3d5df9ad9663b4978f7f8a2573  gcc/ada/sigtramp.h
  128a0905adb78c79aa56397a7942e20a  gcc/ada/sinfo-cn.adb
  2cb93d6ac8ba3beb6fc31af4d97b6fcd  gcc/ada/sinfo-cn.ads
! 5508690394c02353c472f15fdd05b280  gcc/ada/sinfo-utils.adb
! df1aa3814d8c5281deb3b526c99368fc  gcc/ada/sinfo-utils.ads
  e6d5c3ccb5893bb3943fbdf529b298d6  gcc/ada/sinfo.adb
! afba074844e27f973c77dcb0988bac5c  gcc/ada/sinfo.ads
  ebb37a07fb72782f86b0c141d3f6077c  gcc/ada/sinput-c.adb
  ec9033e4caebeb446063de16e18918f4  gcc/ada/sinput-c.ads
  2fec6a5fbe7c9e765ea70c82814b0fd3  gcc/ada/sinput-d.adb
*************** f6ff4b8bae7d2f10bf04f58ae4efb096  gcc/ad
*** 2974,2985 ****
  bb43802a54a3cfd9cb953188a875da3d  gcc/ada/sinput.adb
  ba7717c1c0a8bd7b1c3feee6580246e6  gcc/ada/sinput.ads
  66e1d7dbeefd14b51758e17a022c2929  gcc/ada/snames.adb-tmpl
! 3b358a9b916b7f80248088e96ade6a08  gcc/ada/snames.ads-tmpl
  b5bad059d1da34b0f6f1f8e3b605f212  gcc/ada/snames.h-tmpl
! 6a1a72215ac86e7110b29ca0d8fef7f6  gcc/ada/socket.c
  8bdf1e57c628c071b503b49f5c5078f6  gcc/ada/spark_xrefs.adb
  2753ed3eddef50a315406d42f653c5d3  gcc/ada/spark_xrefs.ads
! 79f131b16a5cd929ba26cec5480770f1  gcc/ada/sprint.adb
  3e9a55e0b0a74656ccf4d6b370f9f3b9  gcc/ada/sprint.ads
  ec2c88d86fa3c44323427da53121cd94  gcc/ada/stand.ads
  995259a03fc6743547480930ff72b93a  gcc/ada/standard.ads.h
--- 2978,2989 ----
  bb43802a54a3cfd9cb953188a875da3d  gcc/ada/sinput.adb
  ba7717c1c0a8bd7b1c3feee6580246e6  gcc/ada/sinput.ads
  66e1d7dbeefd14b51758e17a022c2929  gcc/ada/snames.adb-tmpl
! 6d49541c40b4d9103a24e289caf7ccdd  gcc/ada/snames.ads-tmpl
  b5bad059d1da34b0f6f1f8e3b605f212  gcc/ada/snames.h-tmpl
! efc103042b1bc17447f48a276dc860ab  gcc/ada/socket.c
  8bdf1e57c628c071b503b49f5c5078f6  gcc/ada/spark_xrefs.adb
  2753ed3eddef50a315406d42f653c5d3  gcc/ada/spark_xrefs.ads
! 1036fd7b697d46c21d8f46848c14bceb  gcc/ada/sprint.adb
  3e9a55e0b0a74656ccf4d6b370f9f3b9  gcc/ada/sprint.ads
  ec2c88d86fa3c44323427da53121cd94  gcc/ada/stand.ads
  995259a03fc6743547480930ff72b93a  gcc/ada/standard.ads.h
*************** b1eaff871eb559b799ef7fe2960e86f9  gcc/ad
*** 3008,3025 ****
  9f45bf3ee4cf0a6b06c0b5cc6a4830a7  gcc/ada/targext.c
  452605cc8bfabb79cb2938ed48290217  gcc/ada/targparm.adb
  d9d7a0f9b8ac29d8f1e477d6b53076c1  gcc/ada/targparm.ads
! 0aa22862767f466615555fb4238ed5c8  gcc/ada/tbuild.adb
  3820c42d29e72797dcd57daf35fe7e58  gcc/ada/tbuild.ads
  7180c008001620663d18e4ca13bb09d3  gcc/ada/tempdir.adb
  6f122fca818bdd0608fc8391dbb411ba  gcc/ada/tempdir.ads
  fb2dbb46dab058293bcd11b4ec94c26f  gcc/ada/terminals.c
  90388b2ce8b02dc01b5f589caaff07ec  gcc/ada/tracebak.c
! 4bd44687c5e9a7af8a75e863f0206da1  gcc/ada/treepr.adb
! 557c71455af3d957f986d007de0f291a  gcc/ada/treepr.ads
  6f3fd20323108cb95757cc42a1514191  gcc/ada/ttypes.ads
  e02948c9347a91c37c4f24e7d4356a02  gcc/ada/types.adb
! 088825c27a905ef2e10af9c37dd28496  gcc/ada/types.ads
! 8faf2ecc5e7b7d7bd58fdeacb128597b  gcc/ada/types.h
  84910d8cb8a78c95f71d4fb477098b2a  gcc/ada/uintp.adb
  0b30cdf1b20cec3012f43f473fec627b  gcc/ada/uintp.ads
  aa571047977f5d4eede1b3c590cfca1a  gcc/ada/uintp.h
--- 3012,3029 ----
  9f45bf3ee4cf0a6b06c0b5cc6a4830a7  gcc/ada/targext.c
  452605cc8bfabb79cb2938ed48290217  gcc/ada/targparm.adb
  d9d7a0f9b8ac29d8f1e477d6b53076c1  gcc/ada/targparm.ads
! 3091d71896ba4a230e82f11fca0c715a  gcc/ada/tbuild.adb
  3820c42d29e72797dcd57daf35fe7e58  gcc/ada/tbuild.ads
  7180c008001620663d18e4ca13bb09d3  gcc/ada/tempdir.adb
  6f122fca818bdd0608fc8391dbb411ba  gcc/ada/tempdir.ads
  fb2dbb46dab058293bcd11b4ec94c26f  gcc/ada/terminals.c
  90388b2ce8b02dc01b5f589caaff07ec  gcc/ada/tracebak.c
! 495a4fb8e90c60175f460291a9186bb8  gcc/ada/treepr.adb
! fffc3c236eb600b5b36d78fbe10f489d  gcc/ada/treepr.ads
  6f3fd20323108cb95757cc42a1514191  gcc/ada/ttypes.ads
  e02948c9347a91c37c4f24e7d4356a02  gcc/ada/types.adb
! e65f5e6c67d816a67d60a18801ead601  gcc/ada/types.ads
! c765cf44323532d905ddb837cb8ed1da  gcc/ada/types.h
  84910d8cb8a78c95f71d4fb477098b2a  gcc/ada/uintp.adb
  0b30cdf1b20cec3012f43f473fec627b  gcc/ada/uintp.ads
  aa571047977f5d4eede1b3c590cfca1a  gcc/ada/uintp.h
*************** df3f6c6882fc8f715d4cc537af0f6442  gcc/ad
*** 3054,3159 ****
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! 55c320ab579ed9b949f0e885631bd9ce  gcc/analyzer/ChangeLog
! c1d8dcf12e8a4e4782fe39d54eed2d1d  gcc/analyzer/access-diagram.cc
  9de61ebb9551c4e4ef3bfa77f503bfa0  gcc/analyzer/access-diagram.h
  3f3ac93dc38bf711c84a6bad8eb25b24  gcc/analyzer/ana-state-to-diagnostic-state.cc
  b37c0d2fb30992bd6ff7d1094082d20b  gcc/analyzer/ana-state-to-diagnostic-state.h
  0fbda9dacfcf6f4071f7bee8c6b7dbe9  gcc/analyzer/analysis-plan.cc
  b5f1385e0b051936dcf6b44d2802237b  gcc/analyzer/analysis-plan.h
! 1008e37744d30bb0a67499e909668195  gcc/analyzer/analyzer-language.cc
! eef9c09a709dbc60a5046961a17f3e1c  gcc/analyzer/analyzer-language.h
  51d836e1d69f301e94f2958fbf5168c4  gcc/analyzer/analyzer-logging.cc
! 7fac0aea0c8f0cfd8eb4f7325731f13e  gcc/analyzer/analyzer-logging.h
! 7d4785ce5481e67e60dcfa5781c0fae1  gcc/analyzer/analyzer-pass.cc
  313f066c1695c476ca0de7d8f98cc4db  gcc/analyzer/analyzer-selftests.cc
  a2da2c4ef5a4fe3acbece54115b2fcd5  gcc/analyzer/analyzer-selftests.h
! c03de84ce0c341c6eed61b462ca3947f  gcc/analyzer/analyzer.cc
  7728dfb3aa000e39dae978127135b53e  gcc/analyzer/analyzer.opt
  7c4b3ff66e19fadda3d2ea672e55bd5b  gcc/analyzer/analyzer.opt.urls
  36bb44ed21a23a1a8cfb1813e07e2618  gcc/analyzer/bar-chart.cc
  632007f36f35e261443f6de2baf0656a  gcc/analyzer/bar-chart.h
! 425dcdd921c3f2f39d678ba484fb5c15  gcc/analyzer/bounds-checking.cc
! 5e9a92b6c45e94d63529bcaadc776e52  gcc/analyzer/call-details.cc
  34784d3ca75f5fd6835d234890d819ef  gcc/analyzer/call-details.h
  ab7785be9752af3c41527ce7aa08e5f9  gcc/analyzer/call-info.cc
  80e57512f90deb1472ad7ad386c76c6b  gcc/analyzer/call-info.h
! 782d99b4aaad9de583e3bd8fdf3283ab  gcc/analyzer/call-string.cc
! 269242e7e59c0f923c78aaa080a5ca62  gcc/analyzer/call-string.h
! 0c33640a03f3ee40fe825f5f1e2ad950  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
! fb9d1e32dc6c3b1ef18905c09c9fa657  gcc/analyzer/checker-event.cc
  c6d3fa1382c4d33f5b729f45daad68ce  gcc/analyzer/checker-event.h
  c4687f7aa3cb8374e9f9a685ba14ee0e  gcc/analyzer/checker-path.cc
  bbcfe5f4c035b0e04c335bc110c841c0  gcc/analyzer/checker-path.h
! 41fcbb178345b1c1d87e0271919d1aac  gcc/analyzer/common.h
  60fa08b701b562f0dde13dd1877ddcd1  gcc/analyzer/complexity.cc
  9113c9c3a7167f3119fc0552883611b5  gcc/analyzer/complexity.h
! 47a07fbad11f20bb3af463bdfa71f998  gcc/analyzer/constraint-manager.cc
! a23c7325bc2b24e45ed69ba1e934aedc  gcc/analyzer/constraint-manager.h
! 21af69a3c5b6f2c556fa1e09d5a9ca99  gcc/analyzer/diagnostic-manager.cc
  f44cc8516da447fede0702befbb862f6  gcc/analyzer/diagnostic-manager.h
! 97c11311ab26e3134a6a2dcfae21f127  gcc/analyzer/engine.cc
  acc1f4f20384df654fa365f64ad6a6f9  gcc/analyzer/engine.h
  c31696d47421f74a13cc907d022b3935  gcc/analyzer/event-loc-info.h
! 44ededce237e02c414bf842c82718cee  gcc/analyzer/exploded-graph.h
  7330a37bff32b8bb4d971ffc043827a2  gcc/analyzer/feasible-graph.cc
  af675735c50099e3d3123b9ef8d97dad  gcc/analyzer/feasible-graph.h
! 6b62290e89378d4a19f4db1d7a4fc427  gcc/analyzer/function-set.cc
  73d77bbed77b45ed4b05881eeccbc992  gcc/analyzer/function-set.h
  eac039e9d9e8b9cb384a8ba136fdbf78  gcc/analyzer/infinite-loop.cc
! 8a548b26c22b5aee1504a1d0c15e0854  gcc/analyzer/infinite-recursion.cc
! 07eafd27ed9c4ea180d12eb903958401  gcc/analyzer/inlining-iterator.h
  9289c540d66da127e56aa983ca018af6  gcc/analyzer/kf-analyzer.cc
  f939ceabcab4e031bd8a0960eaa768dc  gcc/analyzer/kf-lang-cp.cc
! d36a60c41884b753cc7b96c9b4618d5d  gcc/analyzer/kf.cc
! cb79a8daeada17a63bea055278c1e25c  gcc/analyzer/known-function-manager.cc
  03a32d089b911aa5389a2b9006795f83  gcc/analyzer/known-function-manager.h
! 8fb5dbd300e0b21f4dbfa0c6c2252265  gcc/analyzer/pending-diagnostic.cc
  801dd659a2e39b1419f0cf63f793e632  gcc/analyzer/pending-diagnostic.h
! 87f808d699834f4b511d01124e808634  gcc/analyzer/program-point.cc
! f7322383aecfa4152a4484c8cd3b66a1  gcc/analyzer/program-point.h
! 9589225e5611ad16b14b8a12bf36120b  gcc/analyzer/program-state.cc
! c97e443d99b96358049864f06819f73a  gcc/analyzer/program-state.h
  fe06c3c30ebc980430c4383a990fb092  gcc/analyzer/ranges.cc
  f0acfecca8767075f2b2e9bc04089741  gcc/analyzer/ranges.h
  58fb7d339e1159812f9592e6de91dfa3  gcc/analyzer/reachability.h
! 65bf29d94a5ee15e6710eb43f16fc235  gcc/analyzer/record-layout.cc
  57354826ca1c448180149706333f891f  gcc/analyzer/record-layout.h
! ae849797eb29fb52bbe52783a1ee2d3b  gcc/analyzer/region-model-asm.cc
! a6df7126d3a84e80baac78fb613d0c28  gcc/analyzer/region-model-manager.cc
! 9195fc0db12dd5628901e3d6615a1f44  gcc/analyzer/region-model-manager.h
! 37e8578fcafa5394667c58349c364c6b  gcc/analyzer/region-model-reachability.cc
  34ab719ce08057bb88f8bf20e7c3c959  gcc/analyzer/region-model-reachability.h
! 91ead31c0782dac4955c4a1a4d0bc1d2  gcc/analyzer/region-model.cc
! 3625b99b6aa470fbd2564ca0941260b1  gcc/analyzer/region-model.h
! c3f5de40a834f109e8a799af75eb37cd  gcc/analyzer/region.cc
! 6e644055b512784328073293c1d0a0c7  gcc/analyzer/region.h
! 177e877832850e8f6423642df0d999fc  gcc/analyzer/sm-fd.cc
  7a28d77074f7b1b5ea7b79aa82f21698  gcc/analyzer/sm-fd.dot
! 5047ef0b8d2074e82cd1c31e14b486bb  gcc/analyzer/sm-file.cc
  38e55000eed6a24e2db959ceb1b99c4f  gcc/analyzer/sm-file.dot
! 91fc92cde065262460929de2f1015b52  gcc/analyzer/sm-malloc.cc
  e0c92f0f51c6cc6d8c51b020ac66c866  gcc/analyzer/sm-malloc.dot
! 141ae863b6f281cf450bbc5d30e58076  gcc/analyzer/sm-pattern-test.cc
! a1eebf5f1420ee989ee9218858607d5b  gcc/analyzer/sm-sensitive.cc
! 6da176ebc525b6cbf863d0f63675bdd5  gcc/analyzer/sm-signal.cc
! 49206d1ec370c4b174cf135e5d4d7da1  gcc/analyzer/sm-taint.cc
! 0800cbb02ef79d9288ce09defd9c419c  gcc/analyzer/sm.cc
! 072aa5171d5c8c621b5a006ec2e6d969  gcc/analyzer/sm.h
! 956efeb36f5f9266262e298ea01834b6  gcc/analyzer/state-purge.cc
! 4b6805c85c83335ce9698d34e7bc061c  gcc/analyzer/state-purge.h
! f94c8c0f96bf04b92f13d9cef9a2fc8b  gcc/analyzer/store.cc
! f0810d512591ebc1aa9ec31d1bb3b192  gcc/analyzer/store.h
! 86ff86d74970d23c852c158ca4d5ae29  gcc/analyzer/supergraph.cc
! 7f300defa9e3114d228cc7eb3ddd8b61  gcc/analyzer/supergraph.h
! cd23a3be8c0ce4de780f305ab42b6bf0  gcc/analyzer/svalue.cc
! 09224bd59e399ac5a636f74115ca2169  gcc/analyzer/svalue.h
  23b998a0cca7e9c96d0adc0bd16828bb  gcc/analyzer/symbol.cc
  336e5422328aefad109c05dff847934f  gcc/analyzer/symbol.h
  c60f1ef3d02e040c88d9e217de84ee81  gcc/analyzer/trimmed-graph.cc
  2d528f5f807adc6941ed2a20cc193c7f  gcc/analyzer/trimmed-graph.h
! e536d88f5c5cf78ee226a42b013854b7  gcc/analyzer/varargs.cc
  cc81acb908eb9d6b13038a95c3a10a9c  gcc/analyzer/varargs.dot
  eeb42b412edc2884a4c60d6f38f7473b  gcc/array-traits.h
  6abcb9777280c69da14835a391a5c347  gcc/asan.cc
--- 3058,3163 ----
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! 3ac7150720d99ee3326ff3d5f0a20deb  gcc/analyzer/ChangeLog
! aaa842009d67015d581300713c2b0686  gcc/analyzer/access-diagram.cc
  9de61ebb9551c4e4ef3bfa77f503bfa0  gcc/analyzer/access-diagram.h
  3f3ac93dc38bf711c84a6bad8eb25b24  gcc/analyzer/ana-state-to-diagnostic-state.cc
  b37c0d2fb30992bd6ff7d1094082d20b  gcc/analyzer/ana-state-to-diagnostic-state.h
  0fbda9dacfcf6f4071f7bee8c6b7dbe9  gcc/analyzer/analysis-plan.cc
  b5f1385e0b051936dcf6b44d2802237b  gcc/analyzer/analysis-plan.h
! 5e7a1356f3a013d95df4966c3b0184db  gcc/analyzer/analyzer-language.cc
! 44b8ef39c6cb5a7fde8a8f8cb953e764  gcc/analyzer/analyzer-language.h
  51d836e1d69f301e94f2958fbf5168c4  gcc/analyzer/analyzer-logging.cc
! b40988a4cf1f11f85dc4b7182a0253fd  gcc/analyzer/analyzer-logging.h
! bfd6293a1330b0a0026fdc80c0c23351  gcc/analyzer/analyzer-pass.cc
  313f066c1695c476ca0de7d8f98cc4db  gcc/analyzer/analyzer-selftests.cc
  a2da2c4ef5a4fe3acbece54115b2fcd5  gcc/analyzer/analyzer-selftests.h
! d4ff950465f696f54908b12a402c4570  gcc/analyzer/analyzer.cc
  7728dfb3aa000e39dae978127135b53e  gcc/analyzer/analyzer.opt
  7c4b3ff66e19fadda3d2ea672e55bd5b  gcc/analyzer/analyzer.opt.urls
  36bb44ed21a23a1a8cfb1813e07e2618  gcc/analyzer/bar-chart.cc
  632007f36f35e261443f6de2baf0656a  gcc/analyzer/bar-chart.h
! 856d703000578b2f75953114b5cbdea2  gcc/analyzer/bounds-checking.cc
! b3b4ea3c5d2bbdc7f1dbb54cf7c50562  gcc/analyzer/call-details.cc
  34784d3ca75f5fd6835d234890d819ef  gcc/analyzer/call-details.h
  ab7785be9752af3c41527ce7aa08e5f9  gcc/analyzer/call-info.cc
  80e57512f90deb1472ad7ad386c76c6b  gcc/analyzer/call-info.h
! 83a7dc74d76e0f16a332e5c8a5435092  gcc/analyzer/call-string.cc
! 850dcfdb7202d7b55db64d1dbe5cf586  gcc/analyzer/call-string.h
! 5ee965667b05f3d325ad2eea5190fa2f  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
! 730a48a13d7ffd3f7f48757c9c266f9f  gcc/analyzer/checker-event.cc
  c6d3fa1382c4d33f5b729f45daad68ce  gcc/analyzer/checker-event.h
  c4687f7aa3cb8374e9f9a685ba14ee0e  gcc/analyzer/checker-path.cc
  bbcfe5f4c035b0e04c335bc110c841c0  gcc/analyzer/checker-path.h
! 6b6291eb4a03bf034e574c4f02dbe8d8  gcc/analyzer/common.h
  60fa08b701b562f0dde13dd1877ddcd1  gcc/analyzer/complexity.cc
  9113c9c3a7167f3119fc0552883611b5  gcc/analyzer/complexity.h
! 74ace4f7805c8393c9c164dacc3c8322  gcc/analyzer/constraint-manager.cc
! 78d08c7af5c5ace7e984a3062c8053a5  gcc/analyzer/constraint-manager.h
! dba762ca3a9701b0861140d5a243492e  gcc/analyzer/diagnostic-manager.cc
  f44cc8516da447fede0702befbb862f6  gcc/analyzer/diagnostic-manager.h
! df692cdcba5df1cebe2853db59a20907  gcc/analyzer/engine.cc
  acc1f4f20384df654fa365f64ad6a6f9  gcc/analyzer/engine.h
  c31696d47421f74a13cc907d022b3935  gcc/analyzer/event-loc-info.h
! bd0aa8aba8793b6e03f6cddffd57b301  gcc/analyzer/exploded-graph.h
  7330a37bff32b8bb4d971ffc043827a2  gcc/analyzer/feasible-graph.cc
  af675735c50099e3d3123b9ef8d97dad  gcc/analyzer/feasible-graph.h
! 75fa61994e084f2c6f9d6ccff6da1c5b  gcc/analyzer/function-set.cc
  73d77bbed77b45ed4b05881eeccbc992  gcc/analyzer/function-set.h
  eac039e9d9e8b9cb384a8ba136fdbf78  gcc/analyzer/infinite-loop.cc
! 88e901e53566d286a6529d3ab31c3611  gcc/analyzer/infinite-recursion.cc
! 7ee54f0568377ab1b37ccdc7bb949387  gcc/analyzer/inlining-iterator.h
  9289c540d66da127e56aa983ca018af6  gcc/analyzer/kf-analyzer.cc
  f939ceabcab4e031bd8a0960eaa768dc  gcc/analyzer/kf-lang-cp.cc
! 9a9fe11eb047335b0c6e9f9995e6fca8  gcc/analyzer/kf.cc
! 87c0ace2795d7de6063a286af6c85d5b  gcc/analyzer/known-function-manager.cc
  03a32d089b911aa5389a2b9006795f83  gcc/analyzer/known-function-manager.h
! c1a5cbf927517772015d9be0349c4415  gcc/analyzer/pending-diagnostic.cc
  801dd659a2e39b1419f0cf63f793e632  gcc/analyzer/pending-diagnostic.h
! b0a3db683bfca881a5f79aab8edc412a  gcc/analyzer/program-point.cc
! c1fbd7a3b6a1c66e2dbbc2e6725bab7b  gcc/analyzer/program-point.h
! 9f46ec66d2d0e77e9935e8d60b80bfac  gcc/analyzer/program-state.cc
! 09f659b34abe6a9fec0cc1b38abd8f1c  gcc/analyzer/program-state.h
  fe06c3c30ebc980430c4383a990fb092  gcc/analyzer/ranges.cc
  f0acfecca8767075f2b2e9bc04089741  gcc/analyzer/ranges.h
  58fb7d339e1159812f9592e6de91dfa3  gcc/analyzer/reachability.h
! 59f0552f76cf621495df906f2db01f93  gcc/analyzer/record-layout.cc
  57354826ca1c448180149706333f891f  gcc/analyzer/record-layout.h
! c3940a144186acca651ddcdbc67ed8c2  gcc/analyzer/region-model-asm.cc
! 3bb1776cb845ffbe486880216ac3f330  gcc/analyzer/region-model-manager.cc
! d63277a107754fc16d0f14e27723be50  gcc/analyzer/region-model-manager.h
! fd4829788ccc0c5b24898e946b18894e  gcc/analyzer/region-model-reachability.cc
  34ab719ce08057bb88f8bf20e7c3c959  gcc/analyzer/region-model-reachability.h
! 1d500f788729d66520449e3844eddb93  gcc/analyzer/region-model.cc
! 12dbb4c144503439cf120f53cc69ce8e  gcc/analyzer/region-model.h
! 26879bd907a888e30cb97cc1b3957778  gcc/analyzer/region.cc
! 1ea9c46e24a4c830bab76a9ddf0ffa3f  gcc/analyzer/region.h
! 4356a32305c610c1d964e4d9ac9e9887  gcc/analyzer/sm-fd.cc
  7a28d77074f7b1b5ea7b79aa82f21698  gcc/analyzer/sm-fd.dot
! 103402a324c9fe6e7152fd7eea542a3f  gcc/analyzer/sm-file.cc
  38e55000eed6a24e2db959ceb1b99c4f  gcc/analyzer/sm-file.dot
! f0d123cde8a7afae17232e88d6704b93  gcc/analyzer/sm-malloc.cc
  e0c92f0f51c6cc6d8c51b020ac66c866  gcc/analyzer/sm-malloc.dot
! 329c3fd7929ce7a7c5137d3a3a6e12fb  gcc/analyzer/sm-pattern-test.cc
! 3a4a4355dda682acff21bd54d4fa0aec  gcc/analyzer/sm-sensitive.cc
! 6ec21218f67516b79559c765cd3b438c  gcc/analyzer/sm-signal.cc
! b069f65a3ee66f0abe951eda3cc5b50b  gcc/analyzer/sm-taint.cc
! 209d228de4dbad20fb79f03500b2c411  gcc/analyzer/sm.cc
! c46fb2fd2e81e18223756e32a499b5cd  gcc/analyzer/sm.h
! 0b805ff6293fa32e40ae2b5b76f12432  gcc/analyzer/state-purge.cc
! 285cfd3d271c9a04f9e1a2b348affaca  gcc/analyzer/state-purge.h
! 6c9fbfb181d10d52db050cf556698876  gcc/analyzer/store.cc
! 57b721390cbac9e355956843e1599b72  gcc/analyzer/store.h
! 98e55f40c471fe66032881622d28d872  gcc/analyzer/supergraph.cc
! fd6d3aab6e3dc2f26680b6d3ee68a8fe  gcc/analyzer/supergraph.h
! 8453a45af42ad9f580f067b55c81f4cc  gcc/analyzer/svalue.cc
! 4fe8554146d04207b5792cb0552633b3  gcc/analyzer/svalue.h
  23b998a0cca7e9c96d0adc0bd16828bb  gcc/analyzer/symbol.cc
  336e5422328aefad109c05dff847934f  gcc/analyzer/symbol.h
  c60f1ef3d02e040c88d9e217de84ee81  gcc/analyzer/trimmed-graph.cc
  2d528f5f807adc6941ed2a20cc193c7f  gcc/analyzer/trimmed-graph.h
! 459d86c51b22afac472cf796833ac553  gcc/analyzer/varargs.cc
  cc81acb908eb9d6b13038a95c3a10a9c  gcc/analyzer/varargs.dot
  eeb42b412edc2884a4c60d6f38f7473b  gcc/array-traits.h
  6abcb9777280c69da14835a391a5c347  gcc/asan.cc
*************** c77616ec7ed7ec81357de9544f955910  gcc/at
*** 3163,3170 ****
  0e1b67f20b5d137d4e1d6915400e406b  gcc/attribs.cc
  1bdf6723b4c88b5b1495f718e4dd00c7  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
! 683717178e4b18589287f75989a52472  gcc/auto-profile.cc
! e229f7b70350c202e4563272e7f07ca4  gcc/auto-profile.h
  ad2d5f7f83620f81560675456886e45d  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
  db748cbed8c442a442779d8d857a3ae4  gcc/backend.h
--- 3167,3174 ----
  0e1b67f20b5d137d4e1d6915400e406b  gcc/attribs.cc
  1bdf6723b4c88b5b1495f718e4dd00c7  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
! 074a1cd7324259c925b527f8073785a5  gcc/auto-profile.cc
! 750f46d563af89307c9b19bbb4a2dd18  gcc/auto-profile.h
  ad2d5f7f83620f81560675456886e45d  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
  db748cbed8c442a442779d8d857a3ae4  gcc/backend.h
*************** d6b885b0c4ea7cf856ba4b84021613ce  gcc/ba
*** 3175,3198 ****
  bb79e5d725623239adccc4b97ad421cb  gcc/bitmap.cc
  fe292df4b7f3e3ef7c0b8305084b6844  gcc/bitmap.h
  7cd04e6f25d02f9f2cecc8ce50e73e76  gcc/btfout.cc
! f808dbcc1ad6add5a0867c4b3e03fc4d  gcc/builtin-attrs.def
  9b2538f67781c7ccab3891a929caaaf0  gcc/builtin-types.def
! bec6a30db0391a4a551e8bd86db93219  gcc/builtins.cc
! dd55b2c473c288bdc5752f7da8cc21e7  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! 97cc58a0d6769a762450ea7b31ca9925  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
! 5a2e850515c6ecb57ffe6c19cadc6656  gcc/c-family/c-attribs.cc
! c2c735946b54e5b592fe957bb4732f76  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
  19fb19e4311805f52f48f30e7873ad2e  gcc/c-family/c-common.h
  36fce1bd96bd2574b12ccb10c168a57f  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  3406e6deaa6e96339c86962c3c82e169  gcc/c-family/c-format.cc
  89a27efffabf06afdd7dee7495d2591c  gcc/c-family/c-format.h
! 33e75548501d8294a77fd654bc8d4d39  gcc/c-family/c-gimplify.cc
  4d15aede5a4841d6489aa40ad1304c00  gcc/c-family/c-indentation.cc
  a4b7179d2e948bb7586a9143fbe05593  gcc/c-family/c-indentation.h
  4c01c042c599ee5c7b21aeb2c0cccbe8  gcc/c-family/c-lex.cc
--- 3179,3202 ----
  bb79e5d725623239adccc4b97ad421cb  gcc/bitmap.cc
  fe292df4b7f3e3ef7c0b8305084b6844  gcc/bitmap.h
  7cd04e6f25d02f9f2cecc8ce50e73e76  gcc/btfout.cc
! 644ae78fbe2e513e06637aa080774d55  gcc/builtin-attrs.def
  9b2538f67781c7ccab3891a929caaaf0  gcc/builtin-types.def
! f8fb3de784870f2797b2c68bd0d2ca5a  gcc/builtins.cc
! 4928906d86168cbc863e309bdb3ec391  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! f3a89faa8c0dcd35b43043e832c34b43  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
! bbc4d8d54c0b8a86ec729251af6ee83b  gcc/c-family/c-attribs.cc
! 7c7087d355210f92a3e615ce76d0675f  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
  19fb19e4311805f52f48f30e7873ad2e  gcc/c-family/c-common.h
  36fce1bd96bd2574b12ccb10c168a57f  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  3406e6deaa6e96339c86962c3c82e169  gcc/c-family/c-format.cc
  89a27efffabf06afdd7dee7495d2591c  gcc/c-family/c-format.h
! 75c39bfe2e550d84fcd82090af799a1c  gcc/c-family/c-gimplify.cc
  4d15aede5a4841d6489aa40ad1304c00  gcc/c-family/c-indentation.cc
  a4b7179d2e948bb7586a9143fbe05593  gcc/c-family/c-indentation.h
  4c01c042c599ee5c7b21aeb2c0cccbe8  gcc/c-family/c-lex.cc
*************** fc808567009babd00ebcf49b5b985691  gcc/c-
*** 3213,3219 ****
  5f7fed5b8b1f0adfab1f4d8395a8516e  gcc/c-family/c-target.h
  3cc58e7c02b9a71a4264944913a66e09  gcc/c-family/c-type-mismatch.cc
  2716f2dd9d461ac6da32e9185698bbb2  gcc/c-family/c-type-mismatch.h
! 4286e0086805aa55b325f25d060c6003  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
  ed4e4a12acd44dcb58dd646d038bc97a  gcc/c-family/c-warn.cc
  a51a5f8bf0e3793fce3e55e272e240ac  gcc/c-family/c.opt
--- 3217,3223 ----
  5f7fed5b8b1f0adfab1f4d8395a8516e  gcc/c-family/c-target.h
  3cc58e7c02b9a71a4264944913a66e09  gcc/c-family/c-type-mismatch.cc
  2716f2dd9d461ac6da32e9185698bbb2  gcc/c-family/c-type-mismatch.h
! 336506e12029cced181a44c7ff9670ee  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
  ed4e4a12acd44dcb58dd646d038bc97a  gcc/c-family/c-warn.cc
  a51a5f8bf0e3793fce3e55e272e240ac  gcc/c-family/c.opt
*************** aaf683e3b02704cfbfab0627d82edf85  gcc/c-
*** 3223,3233 ****
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 75323c766ef03d72d1857866260bc7c4  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! e9ed7d6d2ab1cdc3e0abac9f182f026a  gcc/c/c-decl.cc
  3601ac6299bb2579fedc2dcf2aba7773  gcc/c/c-errors.cc
  d9b5dea1631cefab5fe5ca3602db30f0  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
--- 3227,3237 ----
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 1e40cd88eb8cd01297983e4e5d49a126  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! 8e34fa42fd248755e601458e39b5ec22  gcc/c/c-decl.cc
  3601ac6299bb2579fedc2dcf2aba7773  gcc/c/c-errors.cc
  d9b5dea1631cefab5fe5ca3602db30f0  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
*************** d9c0725d061adffdf400457d91be3aed  gcc/c/
*** 3238,3244 ****
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  9cef7f8aed78affc01930dfcb3d3185c  gcc/c/c-tree.h
! db4d82f55bb14ef73d0e87c29c1d7a0d  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  c169f2d94910060e76c333db12b960b9  gcc/c/gimple-parser.cc
--- 3242,3248 ----
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  9cef7f8aed78affc01930dfcb3d3185c  gcc/c/c-tree.h
! a7ec34ce4545f25383fdaa3210b120cd  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  c169f2d94910060e76c333db12b960b9  gcc/c/gimple-parser.cc
*************** c1215ccb67376db53d2ba9dcfdcf5bab  gcc/cg
*** 3274,3281 ****
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! 6b8842d0342104521107a87804a892e6  gcc/cobol/ChangeLog
! 4aa2f919b02b0317155a96afd51aeb05  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  9a13fd3cc88107d0eacd2642a730e64c  gcc/cobol/cbldiag.h
  030342886cc720f11f17d7691f6f24ae  gcc/cobol/cdf-copy.cc
--- 3278,3285 ----
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! ceb0d6bdcde3c33fa973e1efbe7920d3  gcc/cobol/ChangeLog
! 38193d7961949c3da5d74d1451240847  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  9a13fd3cc88107d0eacd2642a730e64c  gcc/cobol/cbldiag.h
  030342886cc720f11f17d7691f6f24ae  gcc/cobol/cdf-copy.cc
*************** bdd6fbf13776c7983a16ac857615424c  gcc/co
*** 3289,3301 ****
  0a781b261895ff7f99592ae18f32722b  gcc/cobol/dts.h
  659e009bb5ec99fa506eb7f30a3ceb64  gcc/cobol/except.cc
  8208f264c49dfd56f856e8a4229545b9  gcc/cobol/exceptg.h
! 24c537bb1367d796de8c91d7fb8ce910  gcc/cobol/gcobc
  1276523bb287dcb395003b230b9462f8  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  ee529adcf01d8ec47590b845d67064e2  gcc/cobol/gcobolspec.cc
! bf2ee1e2b09908c918d4ec8650790636  gcc/cobol/genapi.cc
  dd72c11161e06d40fd3d674e841b6994  gcc/cobol/genapi.h
! 9bb3f8235db5eaff8925db3e1664496c  gcc/cobol/gengen.cc
  c6848847819715f0eeb0c129a43131a4  gcc/cobol/gengen.h
  f0d89caf87ef5de96b8553aa49e712e3  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
--- 3293,3305 ----
  0a781b261895ff7f99592ae18f32722b  gcc/cobol/dts.h
  659e009bb5ec99fa506eb7f30a3ceb64  gcc/cobol/except.cc
  8208f264c49dfd56f856e8a4229545b9  gcc/cobol/exceptg.h
! 183f2e5be05ff29f6035a12ca7f14ade  gcc/cobol/gcobc
  1276523bb287dcb395003b230b9462f8  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  ee529adcf01d8ec47590b845d67064e2  gcc/cobol/gcobolspec.cc
! 819f26f234e11c664795866287b09796  gcc/cobol/genapi.cc
  dd72c11161e06d40fd3d674e841b6994  gcc/cobol/genapi.h
! fca99a3879737810e15f135b027db00a  gcc/cobol/gengen.cc
  c6848847819715f0eeb0c129a43131a4  gcc/cobol/gengen.h
  f0d89caf87ef5de96b8553aa49e712e3  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
*************** d44e8c86d57fb704b6c1fbab3464fb9a  gcc/co
*** 3306,3329 ****
  2c85ade938027e95c4c411b384f6ad11  gcc/cobol/lang-specs.h
  4ab99742b15962360c2189eb9cdb087c  gcc/cobol/lang.opt
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
! 1fc11522ebe3b5f6a4476a4fc671c005  gcc/cobol/lexio.cc
! d3d23cf0118f6d909db4f77c7d753dec  gcc/cobol/lexio.h
! 7a16a3a15234096d70e3aec4ba7f1da5  gcc/cobol/parse.y
! 9770910367ff280c4f2b3a50667ab467  gcc/cobol/parse_ante.h
! f76848cec8095aa9b4bda7d8cda8b162  gcc/cobol/parse_util.h
! cb5c9a5236dad8f58a71d23f6278fbd9  gcc/cobol/scan.l
! ea93cc6e5d103955594b1d60c7e1e2c9  gcc/cobol/scan_ante.h
  dc23157881f66b51ceb1c14b45d4f349  gcc/cobol/scan_post.h
  98c9f76a3a609b005371e23b4ccc6f95  gcc/cobol/show_parse.h
  d75653f25ec3b747265e4ab78aa71521  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
  83336c5b7adecd6402f7ce49cf47a851  gcc/cobol/symbols.cc
! a4f8e4dbad2319dbe46edb1271fd268d  gcc/cobol/symbols.h
  919355a9377ff4f45564df87fe4983fe  gcc/cobol/symfind.cc
  58d0bac6f2e387d8a6cb2fba899d66b1  gcc/cobol/token_names.h
  94ee230280ef44983fee5c81648f8669  gcc/cobol/udf/stored-char-length.cbl
! cc027677ab26d5ae1933a01d547b2e06  gcc/cobol/util.cc
! f3b588ca273ab39de39bf43e96f8f1db  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
  30202062ccc5696f6203f07ab6965763  gcc/collect2-aix.cc
--- 3310,3333 ----
  2c85ade938027e95c4c411b384f6ad11  gcc/cobol/lang-specs.h
  4ab99742b15962360c2189eb9cdb087c  gcc/cobol/lang.opt
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
! 5a94aaae2651a5798e4921df8ab10c9f  gcc/cobol/lexio.cc
! bd914b8a76e418404927ed8b89360de2  gcc/cobol/lexio.h
! 66ea1d904176c98d92d2d40f4f8c0ea4  gcc/cobol/parse.y
! c0d87db4f7a81f8583072183a259be98  gcc/cobol/parse_ante.h
! e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
! 88ba29c66bc15939eb1790e0741d215f  gcc/cobol/scan.l
! 03bf3c80cbaab50048fa1e61f95e6b43  gcc/cobol/scan_ante.h
  dc23157881f66b51ceb1c14b45d4f349  gcc/cobol/scan_post.h
  98c9f76a3a609b005371e23b4ccc6f95  gcc/cobol/show_parse.h
  d75653f25ec3b747265e4ab78aa71521  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
  83336c5b7adecd6402f7ce49cf47a851  gcc/cobol/symbols.cc
! e27561f70e3125f46078e93654fd3ffc  gcc/cobol/symbols.h
  919355a9377ff4f45564df87fe4983fe  gcc/cobol/symfind.cc
  58d0bac6f2e387d8a6cb2fba899d66b1  gcc/cobol/token_names.h
  94ee230280ef44983fee5c81648f8669  gcc/cobol/udf/stored-char-length.cbl
! 2eb84a061ec6f37ec978678690ba44bf  gcc/cobol/util.cc
! b0971dbb0c766a209f7e09baffbd9cd4  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
  30202062ccc5696f6203f07ab6965763  gcc/collect2-aix.cc
*************** f55010fab8b9aabea82c3ac50d031028  gcc/co
*** 3334,3341 ****
  7041e62f0f582b09331732fef4bb9545  gcc/combine-stack-adj.cc
  5d00831740184b5f4f8f133a3a1ffc16  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
! 4dd80ccf1713a906ce348e343ae51904  gcc/common.opt
! 0fa30baeb636ae24a437473c671f1ddb  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
--- 3338,3345 ----
  7041e62f0f582b09331732fef4bb9545  gcc/combine-stack-adj.cc
  5d00831740184b5f4f8f133a3a1ffc16  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
! e60a956cd4fcf365799e209c2a706a8f  gcc/common.opt
! 6af5ba1e6b0c145c00f1b9c9803dacb8  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
*************** ddbb7a934f8b8aa068e7b765c4375fbe  gcc/co
*** 3406,3412 ****
  d1e3bcda28d89d23e45fed74c629752a  gcc/config/aarch64/aarch64-c.cc
  ba4e797220b33827e769b09447623896  gcc/config/aarch64/aarch64-cc-fusion.cc
  133f61af7e288fe91ca31c659939c551  gcc/config/aarch64/aarch64-coff.h
! 7dda5796a58478b5dadaba93a4cca59a  gcc/config/aarch64/aarch64-cores.def
  f0a8397b1e293e23f65674cd004845ae  gcc/config/aarch64/aarch64-cost-tables.h
  bef2a61270424fd606c71d78d20ad675  gcc/config/aarch64/aarch64-d.cc
  36405b6300d5ec6ca8faf17212ad1bc9  gcc/config/aarch64/aarch64-d.h
--- 3410,3416 ----
  d1e3bcda28d89d23e45fed74c629752a  gcc/config/aarch64/aarch64-c.cc
  ba4e797220b33827e769b09447623896  gcc/config/aarch64/aarch64-cc-fusion.cc
  133f61af7e288fe91ca31c659939c551  gcc/config/aarch64/aarch64-coff.h
! 61a6ea51f727c8e7a93590b1a91c29fa  gcc/config/aarch64/aarch64-cores.def
  f0a8397b1e293e23f65674cd004845ae  gcc/config/aarch64/aarch64-cost-tables.h
  bef2a61270424fd606c71d78d20ad675  gcc/config/aarch64/aarch64-d.cc
  36405b6300d5ec6ca8faf17212ad1bc9  gcc/config/aarch64/aarch64-d.h
*************** eb027b43f3e6788c44aa2d2b7e11943f  gcc/co
*** 3427,3441 ****
  3c95e830c849ee5787b2e1d5128a4bc6  gcc/config/aarch64/aarch64-modes.def
  64c80b1b7cd981b4fb4b76f7c36c9428  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
! c9a52df251f3132f3562d3fffaa39c7b  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  b14ff14af09e35148ebaceacc90e59a7  gcc/config/aarch64/aarch64-passes.def
! ed8b4ea0c25011b1f5f8000e9cb8655c  gcc/config/aarch64/aarch64-protos.h
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 02c5862c6dae83d189736aefb9707f44  gcc/config/aarch64/aarch64-simd.md
! e3fe67e652934d5092addccac9c9f30a  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
--- 3431,3445 ----
  3c95e830c849ee5787b2e1d5128a4bc6  gcc/config/aarch64/aarch64-modes.def
  64c80b1b7cd981b4fb4b76f7c36c9428  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
! 4d57595a81f442ce1ef7df054a4bf0b6  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  b14ff14af09e35148ebaceacc90e59a7  gcc/config/aarch64/aarch64-passes.def
! b9530750d10c463842868c73aee2e94e  gcc/config/aarch64/aarch64-protos.h
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! fc5843185882b29bebb31fec730b221d  gcc/config/aarch64/aarch64-simd.md
! 75404edde67473d9c33a31291c3569a3  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
*************** e2d80b89552da0c6b4cb6bede3b2e573  gcc/co
*** 3452,3466 ****
  354a32b5af602553358eb32a9ac919a5  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! 7623e429524852589dc493736c919445  gcc/config/aarch64/aarch64-sve.md
  5fadf27df621c41bae0181b584bb27f0  gcc/config/aarch64/aarch64-sve2.md
! 805529fa07916adcabb727f19ebd8dd2  gcc/config/aarch64/aarch64-sys-regs.def
! 065e0643d90a8831e9495b5ce2c12b0d  gcc/config/aarch64/aarch64-tune.md
  06480b67fa44a0b9fa7de2ed778a3df9  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! fd9db3d02c37f812e8e9bd6671285dec  gcc/config/aarch64/aarch64.cc
! 4c2226a017b612867a61db1f7929ad43  gcc/config/aarch64/aarch64.h
! b0c9504f794c9543f15ac542746c9931  gcc/config/aarch64/aarch64.md
  ae13780a8296e9c52f9e9b8cd95dc312  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
--- 3456,3470 ----
  354a32b5af602553358eb32a9ac919a5  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! 42089e13ccf4285281c61c2b153028ac  gcc/config/aarch64/aarch64-sve.md
  5fadf27df621c41bae0181b584bb27f0  gcc/config/aarch64/aarch64-sve2.md
! 85eca95263cb099f09b18daca655f091  gcc/config/aarch64/aarch64-sys-regs.def
! b301dc231a69a28202d2b7d79ea75f5d  gcc/config/aarch64/aarch64-tune.md
  06480b67fa44a0b9fa7de2ed778a3df9  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! 1735e2409b1610538a5fd3aa0abf25e6  gcc/config/aarch64/aarch64.cc
! 9567cf98f71ccd00c1d5a4f094c7bec7  gcc/config/aarch64/aarch64.h
! 8ee027068064231cccdcf6560c6a5ba1  gcc/config/aarch64/aarch64.md
  ae13780a8296e9c52f9e9b8cd95dc312  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
*************** c61b39c4504a36e5c45cd1e3b64723d7  gcc/co
*** 3476,3482 ****
  35fa48ff42e4796d58857c4d001d9920  gcc/config/aarch64/biarchilp32.h
  ae88170d2d567105865813bb4b77d91f  gcc/config/aarch64/biarchlp64.h
  124d7f2adedfdccecd86bb0274dfc7aa  gcc/config/aarch64/check-sve-md.awk
! 4eb5f6bc0723b5a1d6bb507b101d5fce  gcc/config/aarch64/constraints.md
  d98f001d9d7b4c0bc18d715b4d512ab9  gcc/config/aarch64/cortex-a57-fma-steering.cc
  034ef57fb17f601ded123d7a43b51d02  gcc/config/aarch64/cygming.h
  13b725f057e939c7ebe5bd19da1df7ee  gcc/config/aarch64/driver-aarch64.cc
--- 3480,3486 ----
  35fa48ff42e4796d58857c4d001d9920  gcc/config/aarch64/biarchilp32.h
  ae88170d2d567105865813bb4b77d91f  gcc/config/aarch64/biarchlp64.h
  124d7f2adedfdccecd86bb0274dfc7aa  gcc/config/aarch64/check-sve-md.awk
! 3268556a1b779072abfdf2537453d7ac  gcc/config/aarch64/constraints.md
  d98f001d9d7b4c0bc18d715b4d512ab9  gcc/config/aarch64/cortex-a57-fma-steering.cc
  034ef57fb17f601ded123d7a43b51d02  gcc/config/aarch64/cygming.h
  13b725f057e939c7ebe5bd19da1df7ee  gcc/config/aarch64/driver-aarch64.cc
*************** f7165d62ef852e1929a8fc9a85c01ab2  gcc/co
*** 3485,3492 ****
  dfcdbda4a3bb64a86fdf64ce6fce0ae3  gcc/config/aarch64/geniterators.sh
  bc3b4ebfac8bfd42d3e9098f33585afd  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 34170c16bd0c730cf23c213593517751  gcc/config/aarch64/iterators.md
! 5086a9aec97908fe033dfa0fb91f311a  gcc/config/aarch64/predicates.md
  a4e902ee1494ba5eee811ea46ecdf995  gcc/config/aarch64/rtems.h
  311b65ba9e415ee9bec122a44389ec72  gcc/config/aarch64/t-aarch64
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-freebsd
--- 3489,3496 ----
  dfcdbda4a3bb64a86fdf64ce6fce0ae3  gcc/config/aarch64/geniterators.sh
  bc3b4ebfac8bfd42d3e9098f33585afd  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! bb7dbe9f4cd4dd2740fc9ba67fc369d7  gcc/config/aarch64/iterators.md
! a1fcb0b7e687756c781537faf6a229b9  gcc/config/aarch64/predicates.md
  a4e902ee1494ba5eee811ea46ecdf995  gcc/config/aarch64/rtems.h
  311b65ba9e415ee9bec122a44389ec72  gcc/config/aarch64/t-aarch64
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-freebsd
*************** fc218940ab265ae323b54d5f007d0d98  gcc/co
*** 3740,3746 ****
  5ed27daaa89e74cf4016168779065375  gcc/config/avr/avr-dimode.md
  a22b4318830a45fe7c7db53efb64970d  gcc/config/avr/avr-fixed.md
  f43b68e01b2d61fffb5336ef45fa1e7f  gcc/config/avr/avr-log.cc
! 4d906223c63dc375c9525827a70b6a95  gcc/config/avr/avr-mcus.def
  1db4fe94056a22e92de33b6d365176c6  gcc/config/avr/avr-modes.def
  d37f092206fc4c0379cee5e5fc01b654  gcc/config/avr/avr-passes-fuse-move.h
  7ca2138284a804389351e8f73b78ce54  gcc/config/avr/avr-passes.cc
--- 3744,3750 ----
  5ed27daaa89e74cf4016168779065375  gcc/config/avr/avr-dimode.md
  a22b4318830a45fe7c7db53efb64970d  gcc/config/avr/avr-fixed.md
  f43b68e01b2d61fffb5336ef45fa1e7f  gcc/config/avr/avr-log.cc
! 117bbef05f3fb7ba16a92cee51e0064c  gcc/config/avr/avr-mcus.def
  1db4fe94056a22e92de33b6d365176c6  gcc/config/avr/avr-modes.def
  d37f092206fc4c0379cee5e5fc01b654  gcc/config/avr/avr-passes-fuse-move.h
  7ca2138284a804389351e8f73b78ce54  gcc/config/avr/avr-passes.cc
*************** a2bf0873375fc2ab681bcd55a2b23e26  gcc/co
*** 4121,4127 ****
  a5346c37d189bcadf27fd946fe2c2566  gcc/config/i386/djgpp.opt
  1b346c8cab1daa697ecd6c31e8e0e1d5  gcc/config/i386/djgpp.opt.urls
  0ada511dcea9cb884e7aed714cecb141  gcc/config/i386/dragonfly.h
! ed4eda2945e84d0efb4049e23cdf06d9  gcc/config/i386/driver-i386.cc
  8db059b2a4621231dcdc591159eace91  gcc/config/i386/driver-mingw32.cc
  436804c1d1ef71b2a318f01e7e91c190  gcc/config/i386/emmintrin.h
  def0edea16aac07cf3e0e7d2daf27455  gcc/config/i386/enqcmdintrin.h
--- 4125,4131 ----
  a5346c37d189bcadf27fd946fe2c2566  gcc/config/i386/djgpp.opt
  1b346c8cab1daa697ecd6c31e8e0e1d5  gcc/config/i386/djgpp.opt.urls
  0ada511dcea9cb884e7aed714cecb141  gcc/config/i386/dragonfly.h
! c25329d1855b8e4bc9e9340cee51a844  gcc/config/i386/driver-i386.cc
  8db059b2a4621231dcdc591159eace91  gcc/config/i386/driver-mingw32.cc
  436804c1d1ef71b2a318f01e7e91c190  gcc/config/i386/emmintrin.h
  def0edea16aac07cf3e0e7d2daf27455  gcc/config/i386/enqcmdintrin.h
*************** d3fb594d11281112ff8d8f304a000c4e  gcc/co
*** 4156,4168 ****
  a4a1a27264871bfba9de0f4fbdb4f3ac  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! 7d5337aec83c93c4ae5aa20e08ce2f08  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  48afebe713ddd3f5c6c11bca4e216c78  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
  66732512f01bad0bbb26cb3c09ec773e  gcc/config/i386/i386-isa.def
  795643c7d23acf02568d7fa7acad0138  gcc/config/i386/i386-modes.def
! 407a2fbc00b8213a9a58709ae0f2829c  gcc/config/i386/i386-options.cc
  08c877d750ab52ddb4fe7c99c90d62de  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  2b4efb0edf861dd06ddc1445aa9e4d05  gcc/config/i386/i386-passes.def
--- 4160,4172 ----
  a4a1a27264871bfba9de0f4fbdb4f3ac  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! 8b2aa9116edfa99fd43dfbc3c83e02e3  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  48afebe713ddd3f5c6c11bca4e216c78  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
  66732512f01bad0bbb26cb3c09ec773e  gcc/config/i386/i386-isa.def
  795643c7d23acf02568d7fa7acad0138  gcc/config/i386/i386-modes.def
! 4931ecf7c91aacb0ed7430cbbce5413c  gcc/config/i386/i386-options.cc
  08c877d750ab52ddb4fe7c99c90d62de  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  2b4efb0edf861dd06ddc1445aa9e4d05  gcc/config/i386/i386-passes.def
*************** c9c3969c00808c9b6809fbeab3e4a1d2  gcc/co
*** 4170,4178 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! d8856025e32aaeabdc544173d48679ae  gcc/config/i386/i386.cc
! 67d28bc93c120f3c30beaecf4f91ad94  gcc/config/i386/i386.h
! 5611bc207a6babace7d5bc4380ae103f  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
--- 4174,4182 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 7c31682e63db231e23ef3ae1a61b5fa0  gcc/config/i386/i386.cc
! d3a93e93c888eeff31e71867a61d5f7e  gcc/config/i386/i386.h
! 155ac405324eeef9af43183203ee15aa  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
*************** a8cd9a4a3d712802475e91e0ec9a3274  gcc/co
*** 4408,4414 ****
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
  95b1d7dc526a359b4045e24d14d4206f  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
! 144c058839db085ef1f40f5de915226d  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
  626538aad4ce79c9f33a19821084c1b3  gcc/config/loongarch/lsx.md
--- 4412,4418 ----
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
  95b1d7dc526a359b4045e24d14d4206f  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
! 9fd9109f20f7dfce6de910d45b5dbc85  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
  626538aad4ce79c9f33a19821084c1b3  gcc/config/loongarch/lsx.md
*************** d6da8f84e5835bd14f146fc765bcb39d  gcc/co
*** 4867,4873 ****
  cd13b51383c99c08d86250b61fed3805  gcc/config/pru/pru.opt.urls
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
! 1413042bfbe300b454638ea3504be62b  gcc/config/riscv/autovec-opt.md
  47e29021b80dec813828275b077dd7be  gcc/config/riscv/autovec.md
  40e0e0684e3c3a934587129211c4674c  gcc/config/riscv/bitmanip.md
  525889fe38728a8c0ab013c27cb9e4e8  gcc/config/riscv/constraints.md
--- 4871,4877 ----
  cd13b51383c99c08d86250b61fed3805  gcc/config/pru/pru.opt.urls
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
! dbe414af58cb415def3a93f63b9fd8ea  gcc/config/riscv/autovec-opt.md
  47e29021b80dec813828275b077dd7be  gcc/config/riscv/autovec.md
  40e0e0684e3c3a934587129211c4674c  gcc/config/riscv/bitmanip.md
  525889fe38728a8c0ab013c27cb9e4e8  gcc/config/riscv/constraints.md
*************** d8e970a7377ae8ee7892f014d5bbc979  gcc/co
*** 4889,4895 ****
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
! 2a71998d95e98219af9b8f38d141546c  gcc/config/riscv/predicates.md
  d7a63bbbf6653fc311084e8bb09d713b  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  717dabcf24d5f1356542a7716b96af87  gcc/config/riscv/riscv-c.cc
--- 4893,4900 ----
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
! 674baa66306b2b08e1b80995759f5381  gcc/config/riscv/pipeline-checker
! d8bfcd60492994bfc394b7fe87de21b5  gcc/config/riscv/predicates.md
  d7a63bbbf6653fc311084e8bb09d713b  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  717dabcf24d5f1356542a7716b96af87  gcc/config/riscv/riscv-c.cc
*************** da4e034d23a8f2754b1dfce0122f286e  gcc/co
*** 4917,4923 ****
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
  b0db0a336461a6390b254a883b8b491a  gcc/config/riscv/riscv-subset.h
  be3e0da2403121c429e21501de9c9b5f  gcc/config/riscv/riscv-target-attr.cc
! da0ce5c87dd2627be1c3e9c7916b48dc  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
--- 4922,4928 ----
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
  b0db0a336461a6390b254a883b8b491a  gcc/config/riscv/riscv-subset.h
  be3e0da2403121c429e21501de9c9b5f  gcc/config/riscv/riscv-target-attr.cc
! 066480de9aba4b03494a0245c59570de  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
*************** e4137796901da09141309284b35af93c  gcc/co
*** 4932,4943 ****
  147ceeb3518a43458ebef3a69344fc3f  gcc/config/riscv/riscv-vector-costs.cc
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
! 3c65f952c8116cc22f135cab9b639d28  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! a77fd800a5af1703ed8f8f20a168682a  gcc/config/riscv/riscv.cc
  1e6d5c3cff4825c434ac203d43f0b5ab  gcc/config/riscv/riscv.h
! 02b3093d583ee8f20e375b44b582091c  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
--- 4937,4948 ----
  147ceeb3518a43458ebef3a69344fc3f  gcc/config/riscv/riscv-vector-costs.cc
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
! 5a1dc434073ed565843a91456f836a9a  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! b85b6cf5192bc8e28f5b93cb1888d40c  gcc/config/riscv/riscv.cc
  1e6d5c3cff4825c434ac203d43f0b5ab  gcc/config/riscv/riscv.h
! f7e7dcc5d41043d9f91ebf646acba391  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
*************** d8773b3aa8a7da49d6ba814f852a218b  gcc/co
*** 4946,4952 ****
  954334fc674acb3564cd52e1096e1a2b  gcc/config/riscv/riscv_vector.h
  8ba362048b98a24051cd9ba947957a2a  gcc/config/riscv/rtems.h
  1a3ca767866d3a3feeab8c89a49e564d  gcc/config/riscv/sfb.md
! be325acf7e97346df2b332f8be3e7c26  gcc/config/riscv/sifive-7.md
  4bd546da4f447a6411214164ad27c10e  gcc/config/riscv/sifive-p400.md
  573ed3885e39b6ef4cf281949a9762d5  gcc/config/riscv/sifive-p600.md
  7c0405744bf9f8ca5956876a984fd6f9  gcc/config/riscv/sifive-vector-builtins-bases.cc
--- 4951,4957 ----
  954334fc674acb3564cd52e1096e1a2b  gcc/config/riscv/riscv_vector.h
  8ba362048b98a24051cd9ba947957a2a  gcc/config/riscv/rtems.h
  1a3ca767866d3a3feeab8c89a49e564d  gcc/config/riscv/sfb.md
! e16e009e9719a8a2a9c81517983b64ad  gcc/config/riscv/sifive-7.md
  4bd546da4f447a6411214164ad27c10e  gcc/config/riscv/sifive-p400.md
  573ed3885e39b6ef4cf281949a9762d5  gcc/config/riscv/sifive-p600.md
  7c0405744bf9f8ca5956876a984fd6f9  gcc/config/riscv/sifive-vector-builtins-bases.cc
*************** bcf728ad2379630774fd5bb529d4ee86  gcc/co
*** 4971,4978 ****
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! 9345c79d96476f90af64e73b779c5ab7  gcc/config/riscv/vector-iterators.md
! 41e0884b2c3fc61b50f0f86eabef18f6  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
--- 4976,4983 ----
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! f45ec1f6c0b5ade52c7593d0a5540b22  gcc/config/riscv/vector-iterators.md
! d7dacadbe1d2f03e0046aa529f44243b  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
*************** f0d456d13ca686f2fca52eddbebd20dd  gcc/co
*** 5059,5065 ****
  0d5433786ba116e393cf9deb517ccd3f  gcc/config/rs6000/lynx.h
  0cc3c5f9101501b8253ce3176c3ffce4  gcc/config/rs6000/milli.exp
  839d88a6522e621b3c5f17f9ba176272  gcc/config/rs6000/mm_malloc.h
! 11d22ff285a54af5ed91b8746307a599  gcc/config/rs6000/mma.md
  6aad66a72986aa33c90e6c75e2fb7e2a  gcc/config/rs6000/mmintrin.h
  3f53b4c3b5ff3886954bd47d41f115cc  gcc/config/rs6000/mpc.md
  f402c4db3d39c3eccf40a27f583bac39  gcc/config/rs6000/netbsd.h
--- 5064,5070 ----
  0d5433786ba116e393cf9deb517ccd3f  gcc/config/rs6000/lynx.h
  0cc3c5f9101501b8253ce3176c3ffce4  gcc/config/rs6000/milli.exp
  839d88a6522e621b3c5f17f9ba176272  gcc/config/rs6000/mm_malloc.h
! 5d3a793ca866fa9ee3560fd6e88aed4f  gcc/config/rs6000/mma.md
  6aad66a72986aa33c90e6c75e2fb7e2a  gcc/config/rs6000/mmintrin.h
  3f53b4c3b5ff3886954bd47d41f115cc  gcc/config/rs6000/mpc.md
  f402c4db3d39c3eccf40a27f583bac39  gcc/config/rs6000/netbsd.h
*************** f11925c88524d2fd457bf77944da1302  gcc/co
*** 5144,5150 ****
  38e93eff3a2b573d1d802ebad267b109  gcc/config/rs6000/vec_types.h
  a5506e6d02e00eca6773ad6611fafec6  gcc/config/rs6000/vector.md
  92d84780bc97fec043576239dfbc4de4  gcc/config/rs6000/vsx.md
! 476eea9f6c0eb11a85eb0a2c968cdec6  gcc/config/rs6000/vxworks.h
  cd6fbfee7df45bb751e81a607bf1cb7d  gcc/config/rs6000/vxworksae.h
  ec49257e720fea1d0b85265da90de158  gcc/config/rs6000/vxworksmils.h
  44a93bbae0ad5aba424ba7b97cc6914d  gcc/config/rs6000/x-aix
--- 5149,5155 ----
  38e93eff3a2b573d1d802ebad267b109  gcc/config/rs6000/vec_types.h
  a5506e6d02e00eca6773ad6611fafec6  gcc/config/rs6000/vector.md
  92d84780bc97fec043576239dfbc4de4  gcc/config/rs6000/vsx.md
! 0c3e96369fe8015c822892859cac5451  gcc/config/rs6000/vxworks.h
  cd6fbfee7df45bb751e81a607bf1cb7d  gcc/config/rs6000/vxworksae.h
  ec49257e720fea1d0b85265da90de158  gcc/config/rs6000/vxworksmils.h
  44a93bbae0ad5aba424ba7b97cc6914d  gcc/config/rs6000/x-aix
*************** d7112093049d4abbc421609d032b7358  gcc/co
*** 5200,5206 ****
  6fdfe66fdde3f81b83dc16c27ac7df3f  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
  94c7aecc0d353c9aa984b4bcea01590b  gcc/config/s390/s390-protos.h
! ab019f5d4ad70d039eb4fee4a76acc9f  gcc/config/s390/s390.cc
  f162b44703353c72956061efcbe580d7  gcc/config/s390/s390.h
  b42cac4e5bd67eda61880170ca30e9a1  gcc/config/s390/s390.md
  fa4475320c7a3767bf9accfa736efcc6  gcc/config/s390/s390.opt
--- 5205,5211 ----
  6fdfe66fdde3f81b83dc16c27ac7df3f  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
  94c7aecc0d353c9aa984b4bcea01590b  gcc/config/s390/s390-protos.h
! 51a792223f071cd70ff73f1a025762f5  gcc/config/s390/s390.cc
  f162b44703353c72956061efcbe580d7  gcc/config/s390/s390.h
  b42cac4e5bd67eda61880170ca30e9a1  gcc/config/s390/s390.md
  fa4475320c7a3767bf9accfa736efcc6  gcc/config/s390/s390.opt
*************** f4aff59e85baebb07f883ead0d12dd1c  gcc/co
*** 5229,5242 ****
  74546141c87057f1915baa2782f325a9  gcc/config/sh/little.h
  94e688ac8f591dab9736d19d17dcd2fa  gcc/config/sh/netbsd-elf.h
  8de2ae34446e2e96bf92675adc06055f  gcc/config/sh/newlib.h
! 3d58429b1c243c741021eb7996e14c18  gcc/config/sh/predicates.md
  77ab24a699e0e7690716da1cc08c9b83  gcc/config/sh/rtems.h
  e55807da6a1aeac0ce3d312b43660237  gcc/config/sh/rtemself.h
  2ee2c9da65382f56a7e9adc2e59652e2  gcc/config/sh/sh-c.cc
  89b99edd25f07e1fb2466c4692b8fbe8  gcc/config/sh/sh-mem.cc
  ba789265e4d5e5354b5475c90cedf1ae  gcc/config/sh/sh-modes.def
! b21e76d3061916df429b986025c99cd6  gcc/config/sh/sh-protos.h
! 6253fe9b08dd339c658cfa4033464ac3  gcc/config/sh/sh.cc
  bc3cf16ed45eb962cf4f8b13a97b724f  gcc/config/sh/sh.h
  41f79e8504a610cef908cbc11ec9b1f7  gcc/config/sh/sh.md
  ec5ab32d7efddf71dc540a3ebec3f02c  gcc/config/sh/sh.opt
--- 5234,5247 ----
  74546141c87057f1915baa2782f325a9  gcc/config/sh/little.h
  94e688ac8f591dab9736d19d17dcd2fa  gcc/config/sh/netbsd-elf.h
  8de2ae34446e2e96bf92675adc06055f  gcc/config/sh/newlib.h
! cab14c9c1bb7deb5ab9eaf12f17c14a1  gcc/config/sh/predicates.md
  77ab24a699e0e7690716da1cc08c9b83  gcc/config/sh/rtems.h
  e55807da6a1aeac0ce3d312b43660237  gcc/config/sh/rtemself.h
  2ee2c9da65382f56a7e9adc2e59652e2  gcc/config/sh/sh-c.cc
  89b99edd25f07e1fb2466c4692b8fbe8  gcc/config/sh/sh-mem.cc
  ba789265e4d5e5354b5475c90cedf1ae  gcc/config/sh/sh-modes.def
! a82fa095464662a059822c0fe93a73a2  gcc/config/sh/sh-protos.h
! edfe2cf69e1ab1ed445b6c32bfee6914  gcc/config/sh/sh.cc
  bc3cf16ed45eb962cf4f8b13a97b724f  gcc/config/sh/sh.h
  41f79e8504a610cef908cbc11ec9b1f7  gcc/config/sh/sh.md
  ec5ab32d7efddf71dc540a3ebec3f02c  gcc/config/sh/sh.opt
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5478,5486 ****
  9a52d4bcaec7df09971007540ad91f77  gcc/coretypes.h
  086834dbb33047e862ba6b6171eda392  gcc/coroutine-builtins.def
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
! 3a1ca7b4fe869dd9b031c27c8ad034e5  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 5273668953ef7ccb14c70447bb089ae3  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5483,5491 ----
  9a52d4bcaec7df09971007540ad91f77  gcc/coretypes.h
  086834dbb33047e862ba6b6171eda392  gcc/coroutine-builtins.def
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
! 02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 2e8c35d33c366627b6f2856dbd72d6e3  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** fce8de27014c109814b3f69be6a5d4f6  gcc/cp
*** 5521,5527 ****
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
  5d3764d67c8143feccf90707b5abb50f  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
! ca47bbc742b617855ec8874e182033e6  gcc/cp/constexpr.cc
  c21cfefd63579862250f4ce93419cbc3  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
--- 5526,5532 ----
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
  5d3764d67c8143feccf90707b5abb50f  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
! 3403f27a4f48da54d97b6ea0ecf1e1a0  gcc/cp/constexpr.cc
  c21cfefd63579862250f4ce93419cbc3  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
*************** f1581b369c1962c764264b1b2af61ca2  gcc/cp
*** 5551,5557 ****
  3d079dd21f8a1ab95fb2d1f96d799283  gcc/cp/g++spec.cc
  30b9ed40d39cf78b95792ef5dca2aebb  gcc/cp/gen-cxxapi-file.py
  6d44875db98234b640f99194d69cb96c  gcc/cp/init.cc
! b802e8f4d91963d26f15f2d39ed1f219  gcc/cp/lambda.cc
  ac5d78393361c1bcb930119a896a14ca  gcc/cp/lang-specs.h
  1352d53c83446655a7fcab07fcdeddc1  gcc/cp/lex.cc
  aaf76a9b03fd0532d2904aef004fd66a  gcc/cp/logic.cc
--- 5556,5562 ----
  3d079dd21f8a1ab95fb2d1f96d799283  gcc/cp/g++spec.cc
  30b9ed40d39cf78b95792ef5dca2aebb  gcc/cp/gen-cxxapi-file.py
  6d44875db98234b640f99194d69cb96c  gcc/cp/init.cc
! 1cc22c2ba5df0f0b5dcaad6ae68591ca  gcc/cp/lambda.cc
  ac5d78393361c1bcb930119a896a14ca  gcc/cp/lang-specs.h
  1352d53c83446655a7fcab07fcdeddc1  gcc/cp/lex.cc
  aaf76a9b03fd0532d2904aef004fd66a  gcc/cp/logic.cc
*************** aaf76a9b03fd0532d2904aef004fd66a  gcc/cp
*** 5565,5571 ****
  6e376c0a7ec6c4a14de40885e3b1a0cb  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! dc0b4e265d1b58cf6d4f57156ea05f03  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
  da7df7109bd077b8400db2c6d0ea54b8  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
--- 5570,5576 ----
  6e376c0a7ec6c4a14de40885e3b1a0cb  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! c08905e1e85e84c760a5e8f0511d3855  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
  da7df7109bd077b8400db2c6d0ea54b8  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
*************** b58bf61fbfed45af179b7104e72a9486  gcc/cp
*** 5576,5582 ****
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  e3798db73e0b3e892e772acbe569a5b8  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! 1deeec26546a4df393e29bd037bf434e  gcc/cp/typeck.cc
  1fea2b59dbf93b59626d7546b3c1f738  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
--- 5581,5587 ----
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  e3798db73e0b3e892e772acbe569a5b8  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! 1a4aed25c160a8bfa4771fe4e385fc97  gcc/cp/typeck.cc
  1fea2b59dbf93b59626d7546b3c1f738  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
*************** b24ae235869e8ddfde6c45d41923f7ef  gcc/df
*** 5863,5906 ****
  3a50d04564ba93f9be134a744fdd40f1  gcc/dfp.h
  aa13c8ce0ee0d35ca8e78fef45b93463  gcc/diagnostic-buffer.h
  4b477754fac3d1dfcc21f651d641ea08  gcc/diagnostic-client-data-hooks.h
! e0a7cab8692eb3cbd4b00c4494e48d70  gcc/diagnostic-color.cc
  65522110920a99041a18ed5b093986fd  gcc/diagnostic-color.h
  b14c12c33aee36a4d29601627a1a67da  gcc/diagnostic-core.h
  be405b20597be971120eee5709db8c4a  gcc/diagnostic-diagram.h
  a24233a009f0c9d29e034e6ba63082de  gcc/diagnostic-event-id.h
  309c2e004772d0e09c55b191936bca49  gcc/diagnostic-format-html.cc
  4ba6cee23036b1f335a76b93cd23fa29  gcc/diagnostic-format-html.h
! 1093108f43fadce869c3564274772c1b  gcc/diagnostic-format-json.cc
! 222621ee15ad8dc82e7fab2f43da3304  gcc/diagnostic-format-sarif.cc
  7be541fe41a4744f9206e99f8ad0609e  gcc/diagnostic-format-sarif.h
! 0be3d31017b5c71132af3b72e12f5de2  gcc/diagnostic-format-text.cc
  66be909d880de2f75a896a45bf395ab6  gcc/diagnostic-format-text.h
! 15f344af3b22d6354665985c4e102b1f  gcc/diagnostic-format.h
  c57536f66ae2965d5f7308e1fe115f1e  gcc/diagnostic-global-context.cc
  ddb5e19e6f3ff8224aedd1a60eaad23e  gcc/diagnostic-highlight-colors.h
  dd85098d241db456b95090aed8ac8026  gcc/diagnostic-label-effects.h
! e472f6066cc64e9f1cee0136404f0751  gcc/diagnostic-macro-unwinding.cc
  124a9446918f0c1e7a8586ac4aea6729  gcc/diagnostic-macro-unwinding.h
  065e0c81be159417eacd100742107ecc  gcc/diagnostic-metadata.h
  e32f47c03714e4be891aef1903c8a04f  gcc/diagnostic-output-file.h
  189c345f14efedfae43b913781845f58  gcc/diagnostic-output-spec.cc
  44a6737f244d23915aa9f9eda34652da  gcc/diagnostic-output-spec.h
! 8da9e55d72a87bdd590edc4f742cbe31  gcc/diagnostic-path-output.cc
! ee02481c976b80310a7bf4c87e03c540  gcc/diagnostic-path.cc
! 43641b42671856d19a05bae380df062a  gcc/diagnostic-path.h
! 57bb21a62fc9a6635baf141982b806b9  gcc/diagnostic-show-locus.cc
! 81a24429bc8eb52cbe24d574c6ec7e53  gcc/diagnostic-spec.cc
  375a39d1eff397ae7fcdce6e05c76d50  gcc/diagnostic-spec.h
  930431adcfe505679a6c92d3a1d93774  gcc/diagnostic-state-to-dot.cc
  e9f88195e181627e024a3473770576c0  gcc/diagnostic-state.h
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
! 3b1db2e02c71441242556b601484eea1  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
! afcf71ccd13e9ee56e647efa1d375ce7  gcc/diagnostic.h
  e2ff50cf5215e2299270f0da4d4d60d0  gcc/digraph.cc
  18e73120a6e21ceac1adce40777000cf  gcc/digraph.h
  2e5b1d73b7a82cbe4e9f60583946a21b  gcc/doc/analyzer.texi
! c3ebdb865864f4dbf15cdac76b30aa00  gcc/doc/avr-mmcu.texi
  628200aba31497f381052220465b8927  gcc/doc/bugreport.texi
  519dad6b92ca7405e11a87efd5ddd705  gcc/doc/cfg.texi
  5c6f1e0d6b6424f27020c9e5c08807d4  gcc/doc/collect2.texi
--- 5868,5910 ----
  3a50d04564ba93f9be134a744fdd40f1  gcc/dfp.h
  aa13c8ce0ee0d35ca8e78fef45b93463  gcc/diagnostic-buffer.h
  4b477754fac3d1dfcc21f651d641ea08  gcc/diagnostic-client-data-hooks.h
! 5771d42150cd2d9eba59db1bfd12fee2  gcc/diagnostic-color.cc
  65522110920a99041a18ed5b093986fd  gcc/diagnostic-color.h
  b14c12c33aee36a4d29601627a1a67da  gcc/diagnostic-core.h
  be405b20597be971120eee5709db8c4a  gcc/diagnostic-diagram.h
  a24233a009f0c9d29e034e6ba63082de  gcc/diagnostic-event-id.h
  309c2e004772d0e09c55b191936bca49  gcc/diagnostic-format-html.cc
  4ba6cee23036b1f335a76b93cd23fa29  gcc/diagnostic-format-html.h
! dce8c229fc641170f87c9c0b4f3585a8  gcc/diagnostic-format-sarif.cc
  7be541fe41a4744f9206e99f8ad0609e  gcc/diagnostic-format-sarif.h
! 374c1a4e48613be5c065401323abd464  gcc/diagnostic-format-text.cc
  66be909d880de2f75a896a45bf395ab6  gcc/diagnostic-format-text.h
! 824ff46e4e273337fa92cb6d42931ed7  gcc/diagnostic-format.h
  c57536f66ae2965d5f7308e1fe115f1e  gcc/diagnostic-global-context.cc
  ddb5e19e6f3ff8224aedd1a60eaad23e  gcc/diagnostic-highlight-colors.h
  dd85098d241db456b95090aed8ac8026  gcc/diagnostic-label-effects.h
! 0833c895a57471d96f0413545cdf8a65  gcc/diagnostic-macro-unwinding.cc
  124a9446918f0c1e7a8586ac4aea6729  gcc/diagnostic-macro-unwinding.h
  065e0c81be159417eacd100742107ecc  gcc/diagnostic-metadata.h
  e32f47c03714e4be891aef1903c8a04f  gcc/diagnostic-output-file.h
  189c345f14efedfae43b913781845f58  gcc/diagnostic-output-spec.cc
  44a6737f244d23915aa9f9eda34652da  gcc/diagnostic-output-spec.h
! 4769d8f66a021a927cabe0098108de1e  gcc/diagnostic-path-output.cc
! 7f951d9f885e54f0408d33c5a03472e6  gcc/diagnostic-path.cc
! 712951ce32a0c774632768892dcd102a  gcc/diagnostic-path.h
! cde9b376952f76ba61798ba6e4cb4f6b  gcc/diagnostic-show-locus.cc
! 7647e73c385e607426bf1e92ad468b09  gcc/diagnostic-spec.cc
  375a39d1eff397ae7fcdce6e05c76d50  gcc/diagnostic-spec.h
  930431adcfe505679a6c92d3a1d93774  gcc/diagnostic-state-to-dot.cc
  e9f88195e181627e024a3473770576c0  gcc/diagnostic-state.h
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
! 86a76939e644e0c3420f5ceb711dbc3b  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
! 6dde268c99f30c687450393dcd48e7ab  gcc/diagnostic.h
  e2ff50cf5215e2299270f0da4d4d60d0  gcc/digraph.cc
  18e73120a6e21ceac1adce40777000cf  gcc/digraph.h
  2e5b1d73b7a82cbe4e9f60583946a21b  gcc/doc/analyzer.texi
! 7c6d6f8bba4a9890d950bdef623af96f  gcc/doc/avr-mmcu.texi
  628200aba31497f381052220465b8927  gcc/doc/bugreport.texi
  519dad6b92ca7405e11a87efd5ddd705  gcc/doc/cfg.texi
  5c6f1e0d6b6424f27020c9e5c08807d4  gcc/doc/collect2.texi
*************** acdfc663791e4321372e79932070d05d  gcc/do
*** 5915,5921 ****
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! f4243bbdf114459407337f312fe859bc  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
--- 5919,5925 ----
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! 65b0b95ec1479d51d563185715fbb3ac  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 5939,5945 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  8e229b4231160873fbe34414e9f77cf9  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 1781f942f439a3570cd6bee68326d8af  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 5943,5949 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  8e229b4231160873fbe34414e9f77cf9  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! e8e0d2396375f524bd0298075e571ee0  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** a1f65f3aec3cc5d5b6505fb976d4c216  gcc/do
*** 5974,5980 ****
  c98feb0a43876ed3ef2fca3c8448e8f8  gcc/doc/lto.texi
  26f08ad01720c082109915a4ec33c80f  gcc/doc/makefile.texi
  2f8484fc473d3a7141e34a260b920ea3  gcc/doc/match-and-simplify.texi
! c9c36fbefa306c5ed545b38beb9d0a47  gcc/doc/md.texi
  8836b7001f069e8dead6a4643108258b  gcc/doc/objc.texi
  9673b2a6dd62d5ac08afb00421e98cdb  gcc/doc/optinfo.texi
  0ae5c8ef7a8ce01c113543a03df7e0df  gcc/doc/options.texi
--- 5978,5984 ----
  c98feb0a43876ed3ef2fca3c8448e8f8  gcc/doc/lto.texi
  26f08ad01720c082109915a4ec33c80f  gcc/doc/makefile.texi
  2f8484fc473d3a7141e34a260b920ea3  gcc/doc/match-and-simplify.texi
! cc8e010fe28e3129f0f50cb24cfca188  gcc/doc/md.texi
  8836b7001f069e8dead6a4643108258b  gcc/doc/objc.texi
  9673b2a6dd62d5ac08afb00421e98cdb  gcc/doc/optinfo.texi
  0ae5c8ef7a8ce01c113543a03df7e0df  gcc/doc/options.texi
*************** fd3bf27e33907464460ab9208cdd2240  gcc/do
*** 5991,5997 ****
  06d0869eb2bec892f989f31bcd7da233  gcc/doc/tm.texi.in
  c4168f9f01adf4dd8adc647c04107142  gcc/doc/tree-ssa.texi
  5f62752970e47d350c8cbce47123d1cf  gcc/doc/trouble.texi
! b94b7a4d6266f1e322684f068256dad9  gcc/doc/ux.texi
  a1be2415e4997dcc307935ed9a162b33  gcc/dojump.cc
  b0e42f8859b351c85a95aef45fde4bb0  gcc/dojump.h
  ec551149b4d908a5cc9e68b1f75c2afa  gcc/dominance.cc
--- 5995,6001 ----
  06d0869eb2bec892f989f31bcd7da233  gcc/doc/tm.texi.in
  c4168f9f01adf4dd8adc647c04107142  gcc/doc/tree-ssa.texi
  5f62752970e47d350c8cbce47123d1cf  gcc/doc/trouble.texi
! 7f44041407f24d2851135ae497914475  gcc/doc/ux.texi
  a1be2415e4997dcc307935ed9a162b33  gcc/dojump.cc
  b0e42f8859b351c85a95aef45fde4bb0  gcc/dojump.h
  ec551149b4d908a5cc9e68b1f75c2afa  gcc/dominance.cc
*************** a4ee0bae47797ce73f05daef7a07edd4  gcc/ex
*** 6032,6038 ****
  dee0d85cc89e81b4cc185f1c3102811e  gcc/expmed.h
  de0db91482e3d0889769a83bc7e854dc  gcc/expr.cc
  5480b0f834e382e22c92192d7f5a4744  gcc/expr.h
! b7ef4a8453eca6dbe12f52da45389cf6  gcc/ext-dce.cc
  2ecf474a8f5380e5027c5b7a745cd736  gcc/fibonacci_heap.cc
  4e78fbbdb0a8c835b984d732a6d97a7b  gcc/fibonacci_heap.h
  ee644c05e4a3461a8c2f5a4a5ea285bd  gcc/file-find.cc
--- 6036,6042 ----
  dee0d85cc89e81b4cc185f1c3102811e  gcc/expmed.h
  de0db91482e3d0889769a83bc7e854dc  gcc/expr.cc
  5480b0f834e382e22c92192d7f5a4744  gcc/expr.h
! 6630556dbcf078aded04b116429a3077  gcc/ext-dce.cc
  2ecf474a8f5380e5027c5b7a745cd736  gcc/fibonacci_heap.cc
  4e78fbbdb0a8c835b984d732a6d97a7b  gcc/fibonacci_heap.h
  ee644c05e4a3461a8c2f5a4a5ea285bd  gcc/file-find.cc
*************** a7bd1af0b1ebb1020c3f0c463acaaae9  gcc/fi
*** 6044,6055 ****
  7852b04b41add4ad6cc7c7c86cb82658  gcc/fixed-value.h
  96975c8e38a86e287c8c387deeeda7f0  gcc/flag-types.h
  e8c5838138a5e07e5716964a8284e9a1  gcc/flags.h
! a798cdca802a57ffa3473ab610b37c86  gcc/fold-const-call.cc
  182559f127e8416b9e9abcffb267d5fc  gcc/fold-const-call.h
! 62673b998414c05d123a9e3cc51be1d9  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 28d1eb7b184c94b53688b745f7a478a9  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6048,6059 ----
  7852b04b41add4ad6cc7c7c86cb82658  gcc/fixed-value.h
  96975c8e38a86e287c8c387deeeda7f0  gcc/flag-types.h
  e8c5838138a5e07e5716964a8284e9a1  gcc/flags.h
! ada0afb884a142f8214291990679be13  gcc/fold-const-call.cc
  182559f127e8416b9e9abcffb267d5fc  gcc/fold-const-call.h
! 6dd1484a5224f1070c3b6065080cb93d  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! a60976760cfcab5919959111d01d86ef  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** db21881c77a22fd3dbfe253c364af5ee  gcc/fo
*** 6081,6087 ****
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
  ed5a7b91a8e3e25ff4fd799b715fcd30  gcc/fortran/check.cc
  ec152c8d16c33705590d8b2ddbcad0b7  gcc/fortran/class.cc
! 60b1462a2f8d5fc08582de65eb85c8da  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
  16ea0e15947038265fbb5983b455b7bf  gcc/fortran/constructor.cc
  85285f438769e841d8dc39fedcd731d5  gcc/fortran/constructor.h
--- 6085,6091 ----
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
  ed5a7b91a8e3e25ff4fd799b715fcd30  gcc/fortran/check.cc
  ec152c8d16c33705590d8b2ddbcad0b7  gcc/fortran/class.cc
! aed3aedb6378a970055dff9e11eedc2d  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
  16ea0e15947038265fbb5983b455b7bf  gcc/fortran/constructor.cc
  85285f438769e841d8dc39fedcd731d5  gcc/fortran/constructor.h
*************** d3fd647d14d10316a01447090ed2bbac  gcc/fo
*** 6108,6114 ****
  751fb9c42a3297fe53e0e7de9564bb27  gcc/fortran/intrinsic.h
  e201f79869851c4fac61004ffd907741  gcc/fortran/intrinsic.texi
  4a7f5923c18268b245556ded8e9ba554  gcc/fortran/invoke.texi
! 40352b9b20b1301c44326264b3f12cd1  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
  e0ae917f78fe49a1e67153dca52a68b2  gcc/fortran/iresolve.cc
  40087b4e405f3e0f17ebd4f0e9b63f48  gcc/fortran/iso-c-binding.def
--- 6112,6118 ----
  751fb9c42a3297fe53e0e7de9564bb27  gcc/fortran/intrinsic.h
  e201f79869851c4fac61004ffd907741  gcc/fortran/intrinsic.texi
  4a7f5923c18268b245556ded8e9ba554  gcc/fortran/invoke.texi
! f9df43a02329adef3021a27235c57aca  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
  e0ae917f78fe49a1e67153dca52a68b2  gcc/fortran/iresolve.cc
  40087b4e405f3e0f17ebd4f0e9b63f48  gcc/fortran/iso-c-binding.def
*************** e0ae917f78fe49a1e67153dca52a68b2  gcc/fo
*** 6128,6134 ****
  4dc9068325ab8f3c2ac3f22ee80283da  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
! 59578048f04703cdbab50ae89154e7a7  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
--- 6132,6138 ----
  4dc9068325ab8f3c2ac3f22ee80283da  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
! d92609b02e08430181ec422053c09090  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
*************** d555f911945a83db335013815934e941  gcc/fo
*** 6143,6149 ****
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  d8e305ea46f72c347ae93f0ab9d8337a  gcc/fortran/trans-decl.cc
  f2b893974de6e6bfb2084ebaf6f1f144  gcc/fortran/trans-expr.cc
! 619298ebdb7722b23738a67610a81830  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
  5b71ca3372e1452f265beeb8ef8a3853  gcc/fortran/trans-openmp.cc
  fb800e2974a1e338a5366fdb5819d11a  gcc/fortran/trans-stmt.cc
--- 6147,6153 ----
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  d8e305ea46f72c347ae93f0ab9d8337a  gcc/fortran/trans-decl.cc
  f2b893974de6e6bfb2084ebaf6f1f144  gcc/fortran/trans-expr.cc
! 69cf57b99fce4ea1b2936eff50e51e47  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
  5b71ca3372e1452f265beeb8ef8a3853  gcc/fortran/trans-openmp.cc
  fb800e2974a1e338a5366fdb5819d11a  gcc/fortran/trans-stmt.cc
*************** f4276d234689e2787662f11ea4bcaffc  gcc/gc
*** 6176,6182 ****
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
  a01ec87393c0315f282b6a4f5444012b  gcc/gcov-io.cc
! b9ae583911b0dfc11e96e21548fad63d  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
  2a8393570ec2f0f06d815562e3e84f78  gcc/gcse-common.cc
--- 6180,6186 ----
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
  a01ec87393c0315f282b6a4f5444012b  gcc/gcov-io.cc
! cfc9ab0c22b99f57253142ecc5b4e462  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
  2a8393570ec2f0f06d815562e3e84f78  gcc/gcse-common.cc
*************** c8dd21ff63045c1a13e516534e9f26c8  gcc/gi
*** 6270,6276 ****
  6077f71d4f6a79ed60d0e24f247133a3  gcc/gimple-range-fold.h
  2ab6e680fbd55d50bfc4690e2ecf8a4f  gcc/gimple-range-gori.cc
  db61cb44af184c491426f70b14b72f64  gcc/gimple-range-gori.h
! 836ca478dda484e78599371c73fd56a4  gcc/gimple-range-infer.cc
  d1b8fdd0fd8c738683e5995bf45cda94  gcc/gimple-range-infer.h
  8ce7e8f3a71589b78ed308c68dafb5dc  gcc/gimple-range-op.cc
  c33a426eeaa6da07a474caf81b43a278  gcc/gimple-range-op.h
--- 6274,6280 ----
  6077f71d4f6a79ed60d0e24f247133a3  gcc/gimple-range-fold.h
  2ab6e680fbd55d50bfc4690e2ecf8a4f  gcc/gimple-range-gori.cc
  db61cb44af184c491426f70b14b72f64  gcc/gimple-range-gori.h
! 60c1306ed88dab1ceb0f87187653585f  gcc/gimple-range-infer.cc
  d1b8fdd0fd8c738683e5995bf45cda94  gcc/gimple-range-infer.h
  8ce7e8f3a71589b78ed308c68dafb5dc  gcc/gimple-range-op.cc
  c33a426eeaa6da07a474caf81b43a278  gcc/gimple-range-op.h
*************** c46e71acb17764a720ac6a68007b7298  gcc/gi
*** 6303,6311 ****
  fc5706ae421aa8f2f9bba7fe2c637237  gcc/gimple-walk.cc
  898d5f9cd9c732cb06cb7e84ca28c99b  gcc/gimple-walk.h
  19e41ad97511268bfc78109e4dbf8065  gcc/gimple-warn-recursion.cc
! 1c27797b28d9b5ff89ecc329a5cad7a8  gcc/gimple.cc
  2b31c9448b3ca4914742ffde943425c0  gcc/gimple.def
! 386cda8e463d97e1cd38f923b48af906  gcc/gimple.h
  140b5c45a362b9c0c981b683560d4ef8  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
  f0a53386866ab2a3ee350d3ed98f8271  gcc/gimplify.cc
--- 6307,6315 ----
  fc5706ae421aa8f2f9bba7fe2c637237  gcc/gimple-walk.cc
  898d5f9cd9c732cb06cb7e84ca28c99b  gcc/gimple-walk.h
  19e41ad97511268bfc78109e4dbf8065  gcc/gimple-warn-recursion.cc
! b42b320008114fef074bfc7fdb234491  gcc/gimple.cc
  2b31c9448b3ca4914742ffde943425c0  gcc/gimple.def
! 33d5704b8a251412e765702d26409b03  gcc/gimple.h
  140b5c45a362b9c0c981b683560d4ef8  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
  f0a53386866ab2a3ee350d3ed98f8271  gcc/gimplify.cc
*************** eec072fb4c8277a3634cf4cdc0846598  gcc/in
*** 6449,6458 ****
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! e56c512eb32210ae6869420bb1bec161  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
! 2956ae29acd688fd2229744edabdc027  gcc/ipa-fnsummary.cc
  fef6f27045737cc29ebf2dbbd22dda02  gcc/ipa-fnsummary.h
  622786ebb07c2d1849929c909e3eceab  gcc/ipa-free-lang-data.cc
  151286d02b3d36dcca2a63fe6ae51102  gcc/ipa-icf-gimple.cc
--- 6453,6462 ----
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! 588210bc45791eb781bb2b5373a32834  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
! fc51d06104be9deeec726b85d060238d  gcc/ipa-fnsummary.cc
  fef6f27045737cc29ebf2dbbd22dda02  gcc/ipa-fnsummary.h
  622786ebb07c2d1849929c909e3eceab  gcc/ipa-free-lang-data.cc
  151286d02b3d36dcca2a63fe6ae51102  gcc/ipa-icf-gimple.cc
*************** fef6f27045737cc29ebf2dbbd22dda02  gcc/ip
*** 6461,6467 ****
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  afa2616e2d58a9137deaabc102d2d7c1  gcc/ipa-inline-analysis.cc
  8aeea7e05b0080b60353a926b88ee97d  gcc/ipa-inline-transform.cc
! bb4dfd8320ff38191d233ff6ee252c4a  gcc/ipa-inline.cc
  229bac80ef5400801cf4edfd97790ef8  gcc/ipa-inline.h
  19c0cbbd70e071bd63dbb0527d02423e  gcc/ipa-locality-cloning.cc
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
--- 6465,6471 ----
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  afa2616e2d58a9137deaabc102d2d7c1  gcc/ipa-inline-analysis.cc
  8aeea7e05b0080b60353a926b88ee97d  gcc/ipa-inline-transform.cc
! fa62e663ddc6e2e79719855e68de5a10  gcc/ipa-inline.cc
  229bac80ef5400801cf4edfd97790ef8  gcc/ipa-inline.h
  19c0cbbd70e071bd63dbb0527d02423e  gcc/ipa-locality-cloning.cc
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
*************** f74891b3d3f9b6b3e0cbe66a7252cd83  gcc/la
*** 6598,6604 ****
  fffab8c77115c6471e5e10dea11739e1  gcc/langhooks.cc
  5918c7467c079a50e076e834bb3839c7  gcc/langhooks.h
  75deba840ba0746416d8a7516027f7b7  gcc/late-combine.cc
! c521215ec99f112111f648bd88759ca3  gcc/lazy-diagnostic-path.cc
  dc9c6fb11d3b3fffe354eff3daf0454c  gcc/lazy-diagnostic-path.h
  82e3d15b2545a4e7a7397d6396eb74fe  gcc/lcm.cc
  bdf8ae675ae5000d854fe2874116b2f8  gcc/lcm.h
--- 6602,6608 ----
  fffab8c77115c6471e5e10dea11739e1  gcc/langhooks.cc
  5918c7467c079a50e076e834bb3839c7  gcc/langhooks.h
  75deba840ba0746416d8a7516027f7b7  gcc/late-combine.cc
! 4e66997286420d91228be7e74c158c9f  gcc/lazy-diagnostic-path.cc
  dc9c6fb11d3b3fffe354eff3daf0454c  gcc/lazy-diagnostic-path.h
  82e3d15b2545a4e7a7397d6396eb74fe  gcc/lcm.cc
  bdf8ae675ae5000d854fe2874116b2f8  gcc/lcm.h
*************** b54054c495232a416b1cdea9032d1d9f  gcc/lo
*** 6627,6640 ****
  755a196fed2cd7b5878159035d75b39b  gcc/lra-assigns.cc
  0232e051e662ebb7fd2fa507d9c581b8  gcc/lra-coalesce.cc
  54e62c1c9cb8ac20e26344c0abc15f9c  gcc/lra-constraints.cc
! 386ac744fab32bf32aadbf67c62240df  gcc/lra-eliminations.cc
  c9f048755e3742fbe86e02e2b4b1eb6d  gcc/lra-int.h
  52ba28cd117bff034bd9a26fe150f692  gcc/lra-lives.cc
  f98dc87a80f661782eacaf50d123997d  gcc/lra-remat.cc
  7d88a319b2eed09205d9a01cca221eb6  gcc/lra-spills.cc
  e5fef2ffe59f5bb8bf855af92be9ce6a  gcc/lra.cc
  f34f18b0bf45561aad0763e10bc1ecb1  gcc/lra.h
! 47448197971da2e85aadd03dd315e469  gcc/lto-cgraph.cc
  3c0edd5f81587bb2a1bebb7979c19aa8  gcc/lto-compress.cc
  6081736069853cccad4e30dab7992217  gcc/lto-compress.h
  e30abe8a6f83280333eda23e196378ad  gcc/lto-ltrans-cache.cc
--- 6631,6644 ----
  755a196fed2cd7b5878159035d75b39b  gcc/lra-assigns.cc
  0232e051e662ebb7fd2fa507d9c581b8  gcc/lra-coalesce.cc
  54e62c1c9cb8ac20e26344c0abc15f9c  gcc/lra-constraints.cc
! ebe278d864d3a7e33fbcc46f02926248  gcc/lra-eliminations.cc
  c9f048755e3742fbe86e02e2b4b1eb6d  gcc/lra-int.h
  52ba28cd117bff034bd9a26fe150f692  gcc/lra-lives.cc
  f98dc87a80f661782eacaf50d123997d  gcc/lra-remat.cc
  7d88a319b2eed09205d9a01cca221eb6  gcc/lra-spills.cc
  e5fef2ffe59f5bb8bf855af92be9ce6a  gcc/lra.cc
  f34f18b0bf45561aad0763e10bc1ecb1  gcc/lra.h
! e4e04e320c78dc4b64d763d742f3ceaa  gcc/lto-cgraph.cc
  3c0edd5f81587bb2a1bebb7979c19aa8  gcc/lto-compress.cc
  6081736069853cccad4e30dab7992217  gcc/lto-compress.h
  e30abe8a6f83280333eda23e196378ad  gcc/lto-ltrans-cache.cc
*************** e44c0bf9cc0411d7bd57c6585eb6d0e4  gcc/lt
*** 6672,6678 ****
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! bd69f3a10e8e0f1555dfcc71f4db555d  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6676,6682 ----
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 47eeb810b7bd1b230e60753ac1b8905e  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** c9c5e6e4fbd4b365b1738fb97167c772  gcc/m2
*** 6958,6963 ****
--- 6962,6969 ----
  27e57c815545197925f9000c5be148ab  gcc/m2/gm2-libs-iso/GeneralUserExceptions.mod
  3be4b03912f03e5164671e278a4ba6a1  gcc/m2/gm2-libs-iso/IOChan.def
  d7d18b9eb960d97c1a449517b186fe0b  gcc/m2/gm2-libs-iso/IOChan.mod
+ c952fa889a1808a16de26ca7e30f8101  gcc/m2/gm2-libs-iso/IOChanUtils.def
+ fcb6e13112c3378c53ef65b83d811647  gcc/m2/gm2-libs-iso/IOChanUtils.mod
  58b81b1b97143b27dfd3d5c225da285c  gcc/m2/gm2-libs-iso/IOConsts.def
  ac7a7f55d14feeed5dab02f4d5f434a3  gcc/m2/gm2-libs-iso/IOConsts.mod
  3d1e4b84b179c15fe8b1fc60b7d46e6c  gcc/m2/gm2-libs-iso/IOLink.def
*************** a350794ca4c4b323746571b0e676afb6  gcc/m2
*** 7113,7120 ****
  f4373a75a461ec7946606dc749454355  gcc/m2/gm2-libs-log/Display.mod
  5e3e5af0b038ce4ac3ec8d8b92443fdc  gcc/m2/gm2-libs-log/ErrorCode.def
  bcf0466406e2a958f390256fcdb71e90  gcc/m2/gm2-libs-log/ErrorCode.mod
! 2a53ad0bf4ea1e72f00894c372143abd  gcc/m2/gm2-libs-log/FileSystem.def
! 89d69db340acfcc76ec092c2522fc138  gcc/m2/gm2-libs-log/FileSystem.mod
  8d73e14ade71f4eb2157891f0240fbdb  gcc/m2/gm2-libs-log/FloatingUtilities.def
  c8b643a1644e7213a7a9168f372236e0  gcc/m2/gm2-libs-log/FloatingUtilities.mod
  54b70a547bf2038b6a26f37ac5a132d4  gcc/m2/gm2-libs-log/InOut.def
--- 7119,7126 ----
  f4373a75a461ec7946606dc749454355  gcc/m2/gm2-libs-log/Display.mod
  5e3e5af0b038ce4ac3ec8d8b92443fdc  gcc/m2/gm2-libs-log/ErrorCode.def
  bcf0466406e2a958f390256fcdb71e90  gcc/m2/gm2-libs-log/ErrorCode.mod
! 59f2edb401d8ded52aeb2feba1f39258  gcc/m2/gm2-libs-log/FileSystem.def
! a9beffdbc626348ff790aa57fec4a80b  gcc/m2/gm2-libs-log/FileSystem.mod
  8d73e14ade71f4eb2157891f0240fbdb  gcc/m2/gm2-libs-log/FloatingUtilities.def
  c8b643a1644e7213a7a9168f372236e0  gcc/m2/gm2-libs-log/FloatingUtilities.mod
  54b70a547bf2038b6a26f37ac5a132d4  gcc/m2/gm2-libs-log/InOut.def
*************** afec185c1e66724107d47726d26f3ac8  gcc/m2
*** 7216,7223 ****
  bd66d44a1bb8a99631155e33ed5ea8cb  gcc/m2/gm2-libs/SCmdArgs.mod
  843897f2e3c461fb0327fb0c60ac59a6  gcc/m2/gm2-libs/SEnvironment.def
  6b7065b7f149a2b0d03fffe13bfbdd0a  gcc/m2/gm2-libs/SEnvironment.mod
! d590dd8538572ce2c7231a25b8eeb326  gcc/m2/gm2-libs/SFIO.def
! ea36e7e8b1f3fca86b5a0b2ca1f23ba5  gcc/m2/gm2-libs/SFIO.mod
  9222eb07c9f464434ed0f4b515cb19be  gcc/m2/gm2-libs/SMathLib0.def
  e17c6bf3bc3dafb2f4245566929a76c2  gcc/m2/gm2-libs/SMathLib0.mod
  185045150fb7863ccda3dda3df51b72e  gcc/m2/gm2-libs/SYSTEM.def
--- 7222,7229 ----
  bd66d44a1bb8a99631155e33ed5ea8cb  gcc/m2/gm2-libs/SCmdArgs.mod
  843897f2e3c461fb0327fb0c60ac59a6  gcc/m2/gm2-libs/SEnvironment.def
  6b7065b7f149a2b0d03fffe13bfbdd0a  gcc/m2/gm2-libs/SEnvironment.mod
! f20062f975b85328d9e6b331594e25ef  gcc/m2/gm2-libs/SFIO.def
! 333702071f6295fe11f5a10f9f46a356  gcc/m2/gm2-libs/SFIO.mod
  9222eb07c9f464434ed0f4b515cb19be  gcc/m2/gm2-libs/SMathLib0.def
  e17c6bf3bc3dafb2f4245566929a76c2  gcc/m2/gm2-libs/SMathLib0.mod
  185045150fb7863ccda3dda3df51b72e  gcc/m2/gm2-libs/SYSTEM.def
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7626,7632 ****
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  db2ee1a68662c8370d59f7e4f6cf917b  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 33a975e0fb2bcf8ebbe0fffcea30e309  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
--- 7632,7638 ----
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  db2ee1a68662c8370d59f7e4f6cf917b  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 5ee61cd9526e203e8c647c3417a73b47  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
*************** fcb5b7227342c442bcddbcc06eaddcdc  gcc/op
*** 7711,7717 ****
  bd138c731d5ef02ebe19e25375c465c8  gcc/opts-diagnostic.h
  dc49add7ae35ac8842b786b817fd79b3  gcc/opts-global.cc
  079a115ae417106f3e7f42b0272b866d  gcc/opts-jobserver.h
! 54630b31f685d879d0c1878a38f90693  gcc/opts.cc
  367fa9ca17175fb2e8651a43bc0d5ca3  gcc/opts.h
  b7a4b3edfca283f972cdeb23102a28a4  gcc/ordered-hash-map-tests.cc
  fccd951e3de91d49d3824e482c12e070  gcc/ordered-hash-map.h
--- 7717,7723 ----
  bd138c731d5ef02ebe19e25375c465c8  gcc/opts-diagnostic.h
  dc49add7ae35ac8842b786b817fd79b3  gcc/opts-global.cc
  079a115ae417106f3e7f42b0272b866d  gcc/opts-jobserver.h
! b4d32d1617012c79549f7927bb7988bb  gcc/opts.cc
  367fa9ca17175fb2e8651a43bc0d5ca3  gcc/opts.h
  b7a4b3edfca283f972cdeb23102a28a4  gcc/ordered-hash-map-tests.cc
  fccd951e3de91d49d3824e482c12e070  gcc/ordered-hash-map.h
*************** b2f692287d25760afcef126c010f7078  gcc/pa
*** 7721,7728 ****
  2207e1b3f2ea3f9a38dca4896d14b62c  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  818628b1b793b8f87f62d0c18fd1219a  gcc/pass_manager.h
! cf39cd628f9dc29a9a191f4af2c68346  gcc/passes.cc
! 6c37f61a77fb94451aa613a51f15b6a3  gcc/passes.def
  e3f908061f2b051f55381b513a49022b  gcc/path-coverage.cc
  9077bd1d4c611da16e24019cc5f1cdcd  gcc/pex.cc
  5f3fc8b9c6ba6a91676e512a41e3de7e  gcc/pex.h
--- 7727,7734 ----
  2207e1b3f2ea3f9a38dca4896d14b62c  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  818628b1b793b8f87f62d0c18fd1219a  gcc/pass_manager.h
! 38b9f60b5fd192ab2d5c201b4aff3f29  gcc/passes.cc
! 0303211bcc572876084762916144f8e3  gcc/passes.def
  e3f908061f2b051f55381b513a49022b  gcc/path-coverage.cc
  9077bd1d4c611da16e24019cc5f1cdcd  gcc/pex.cc
  5f3fc8b9c6ba6a91676e512a41e3de7e  gcc/pex.h
*************** ed550d9201c53b2e183ac8da7882fb20  gcc/pr
*** 7773,7784 ****
  a6e4e4fab174379976dcb09269c8de98  gcc/print-rtl-function.cc
  a5461dd81ec55dc6f56817a1f356f345  gcc/print-rtl.cc
  63499dea0e911b175def4a9153353027  gcc/print-rtl.h
! 4f53079bd53b2c18b204334e3b819cfc  gcc/print-tree.cc
  b92d7f51ae16cdd854cf95fa6ab0f456  gcc/print-tree.h
! a5fbacfb851b89168fc63a8d1b2598ef  gcc/profile-count.cc
! 127716370a7f778cb89f3e7c4ce094ae  gcc/profile-count.h
! be294583d74c167da1819e51e9001b52  gcc/profile.cc
! d30f617ac9705fc7dc5d14e744fe4ff0  gcc/profile.h
  555a319d44f0f4857aa378a1691e1d27  gcc/range-op-float.cc
  6b98a6ea5f4292196168184e5e0f4476  gcc/range-op-mixed.h
  111e7e65fb598a1d21148e1b0f23744b  gcc/range-op-ptr.cc
--- 7779,7790 ----
  a6e4e4fab174379976dcb09269c8de98  gcc/print-rtl-function.cc
  a5461dd81ec55dc6f56817a1f356f345  gcc/print-rtl.cc
  63499dea0e911b175def4a9153353027  gcc/print-rtl.h
! b049f30300658003f485bb43bf69c2cc  gcc/print-tree.cc
  b92d7f51ae16cdd854cf95fa6ab0f456  gcc/print-tree.h
! cd06e8a941b6bfa758b3577f67840bab  gcc/profile-count.cc
! 925846fd49460a6b38da1e40fa618786  gcc/profile-count.h
! bc21f26b6df11eea0b28a669f74f6e24  gcc/profile.cc
! cd641a4dec9a0a4cf7cf888cfa37e386  gcc/profile.h
  555a319d44f0f4857aa378a1691e1d27  gcc/range-op-float.cc
  6b98a6ea5f4292196168184e5e0f4476  gcc/range-op-mixed.h
  111e7e65fb598a1d21148e1b0f23744b  gcc/range-op-ptr.cc
*************** d90d59efc5dfd5359241062d80e3e745  gcc/se
*** 8370,8387 ****
  74ebb02c30bec8d1c45c78a387c5ee18  gcc/selftest-logical-location.h
  22224372e5a2696e660289e86b2696a5  gcc/selftest-rtl.cc
  ab96230d11b93b85d4d1b85cc5d494ab  gcc/selftest-rtl.h
! 065aeefaea4f9bbf3129cec6d81f4845  gcc/selftest-run-tests.cc
  777b0025fe2356f118cb24f2302ae4ff  gcc/selftest-tree.h
  fdc04e5af7ee387dce07c6ba9a99eaa8  gcc/selftest-xml.h
  220320c985328c0546a9a80a7353964e  gcc/selftest.cc
! fa9a7ef543e20dae72e7b8edfdb02b77  gcc/selftest.h
  71b83bf173726493d9fee558216a2e02  gcc/sese.cc
  62e0bec4b0ac9f8e027af35a2c2e2330  gcc/sese.h
  9123313dafdd85df1e747e738274ee2c  gcc/shortest-paths.h
  2b3e8f7222148471de23e5a550500206  gcc/shrink-wrap.cc
  125f9b6a6cf86e28e0a76470fb3c1f11  gcc/shrink-wrap.h
  50d9999185408bcae454174489317b68  gcc/signop.h
! c3069c84ca5c36bf2bde3a7644ce7130  gcc/simple-diagnostic-path.cc
  4155965d1db5d3c178f502d51e128b2f  gcc/simple-diagnostic-path.h
  69be67be8ae9d985309259e0c8c8f361  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
--- 8376,8393 ----
  74ebb02c30bec8d1c45c78a387c5ee18  gcc/selftest-logical-location.h
  22224372e5a2696e660289e86b2696a5  gcc/selftest-rtl.cc
  ab96230d11b93b85d4d1b85cc5d494ab  gcc/selftest-rtl.h
! f5e3b61f9caa3ad0f132927885e12ced  gcc/selftest-run-tests.cc
  777b0025fe2356f118cb24f2302ae4ff  gcc/selftest-tree.h
  fdc04e5af7ee387dce07c6ba9a99eaa8  gcc/selftest-xml.h
  220320c985328c0546a9a80a7353964e  gcc/selftest.cc
! 6502c49515a04c1f727feb88eadcfdaa  gcc/selftest.h
  71b83bf173726493d9fee558216a2e02  gcc/sese.cc
  62e0bec4b0ac9f8e027af35a2c2e2330  gcc/sese.h
  9123313dafdd85df1e747e738274ee2c  gcc/shortest-paths.h
  2b3e8f7222148471de23e5a550500206  gcc/shrink-wrap.cc
  125f9b6a6cf86e28e0a76470fb3c1f11  gcc/shrink-wrap.h
  50d9999185408bcae454174489317b68  gcc/signop.h
! 4e7769929646b581f3e42b51a8e030e0  gcc/simple-diagnostic-path.cc
  4155965d1db5d3c178f502d51e128b2f  gcc/simple-diagnostic-path.h
  69be67be8ae9d985309259e0c8c8f361  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8437,8443 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! dd86f6c1b4347904ba183005f7b802c4  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8443,8449 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! e3e7f05d6da7c96dad2cf8757bd6269e  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** dccaf3f6a5587a149aa108073584f903  gcc/te
*** 17332,17338 ****
  2c5cd1ccc8e8156dab1bceee1e648188  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c
  2407d9e5c1b1cedd802a676294c32835  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c
  7b37db3cd00928477b112bf00cee7b33  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-curl.c
- c52cf48f8a5b88323363853f697a3f05  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-json.c
  0aa30057e371550257dca5d0ad20d954  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-sarif.c
  aa8b4b553cd662957411d18c1af815d7  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c
  f55f42361e188dc552d2949c35266e9f  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-3.c
--- 17338,17343 ----
*************** cc00a3c5a3fe4188220028449567b571  gcc/te
*** 17660,17665 ****
--- 17665,17672 ----
  d89ff70e1d21d4c436a2561d33888f83  gcc/testsuite/c-c++-common/asan/pr106558.c
  fabe4f563e2a6b04ace68b9b7e010e6b  gcc/testsuite/c-c++-common/asan/pr120608-1.c
  a81fada6339487ed882e8189aae31718  gcc/testsuite/c-c++-common/asan/pr120608-2.c
+ 4bf79f26fda6692969b7b7acd3996a01  gcc/testsuite/c-c++-common/asan/pr120608-3.c
+ bfeb7c22d0f9799de47d33dd1bcdde09  gcc/testsuite/c-c++-common/asan/pr120608-4.c
  9a0dd3dcef02945c8967f40a29316496  gcc/testsuite/c-c++-common/asan/pr56330.c
  202bae43b2843228776d43c8d07c92c8  gcc/testsuite/c-c++-common/asan/pr59029.c
  65128b17436f6406d9e224257030e000  gcc/testsuite/c-c++-common/asan/pr59063-1.c
*************** ec9404dfa572066d29306781114781a5  gcc/te
*** 18121,18133 ****
  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
- e875feed3fbc0c6cae26a5abe73fc228  gcc/testsuite/c-c++-common/diagnostic-format-json-1.c
- 3d431c26ca20706b6d8fd7ca4bbffb24  gcc/testsuite/c-c++-common/diagnostic-format-json-2.c
- 1e998e17399e068819c47f49168322e3  gcc/testsuite/c-c++-common/diagnostic-format-json-3.c
- 20d4929d803c94e1e7030bc15d14b163  gcc/testsuite/c-c++-common/diagnostic-format-json-4.c
- 457d424c40ab9e4d35fa27b979a24ee1  gcc/testsuite/c-c++-common/diagnostic-format-json-5.c
- 996443d0fabc6adf05cf16b92f765f59  gcc/testsuite/c-c++-common/diagnostic-format-json-file-1.c
- 2db91f68d9841551bdb688cd339de968  gcc/testsuite/c-c++-common/diagnostic-format-json-stderr-1.c
  650e0b7e5a24079a8e87b557dc99fb51  gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-1.c
  e76f7da3b6ff122b724515225ddc93dc  gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-2.c
  c9df2a60be9c299d6875bdd23d7a834e  gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-3.c
--- 18128,18133 ----
*************** a8cae7afccfdaf5c55701d1fd623cbae  gcc/te
*** 18736,18742 ****
  314d7c905d7b458917321c534f1d5520  gcc/testsuite/c-c++-common/gomp/num-teams-1.c
  9284f2bc3ab39d4db900b0510ab44cb3  gcc/testsuite/c-c++-common/gomp/num-teams-2.c
  9085b42a44ff867d1851e43156fab957  gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device-2.c
! 33e4dd55bc56c426feb1f4f08d3025f5  gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device.c
  6edff4d259a25d0cbbd6bd788efd47b2  gcc/testsuite/c-c++-common/gomp/ompx-1.c
  a53bfb3d3f3e9c540d6b019fcc527fa4  gcc/testsuite/c-c++-common/gomp/ompx-2.c
  a5b411651a6f93c5cf3ce9b7c306c2e4  gcc/testsuite/c-c++-common/gomp/order-1.c
--- 18736,18742 ----
  314d7c905d7b458917321c534f1d5520  gcc/testsuite/c-c++-common/gomp/num-teams-1.c
  9284f2bc3ab39d4db900b0510ab44cb3  gcc/testsuite/c-c++-common/gomp/num-teams-2.c
  9085b42a44ff867d1851e43156fab957  gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device-2.c
! 835e56c803ebf6e088e108546f2f4ccf  gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device.c
  6edff4d259a25d0cbbd6bd788efd47b2  gcc/testsuite/c-c++-common/gomp/ompx-1.c
  a53bfb3d3f3e9c540d6b019fcc527fa4  gcc/testsuite/c-c++-common/gomp/ompx-2.c
  a5b411651a6f93c5cf3ce9b7c306c2e4  gcc/testsuite/c-c++-common/gomp/order-1.c
*************** b462f367b31710a6645647c66da8c83c  gcc/te
*** 19139,19145 ****
  0ad1fe60770cce573f6337c8d24e0fe7  gcc/testsuite/c-c++-common/pr104505.c
  f7797890edb72db96871a3c3582464f4  gcc/testsuite/c-c++-common/pr105186.c
  d5189fe9f7cb5f4a822563c9d438762d  gcc/testsuite/c-c++-common/pr105998.c
- 10c9b11e734e514259fcf9722af7ef2c  gcc/testsuite/c-c++-common/pr106133.c
  8ecfb3e3b043f225123b96e0bf8c3daf  gcc/testsuite/c-c++-common/pr107058.c
  ebd0b7e3acd0cf5b26b12db66f960d0b  gcc/testsuite/c-c++-common/pr107358.c
  e1ef9c58498f72552b0ec84751024b54  gcc/testsuite/c-c++-common/pr107465.c
--- 19139,19144 ----
*************** ab3cfaf3576e4a617a126e1901da04f3  gcc/te
*** 19834,19839 ****
--- 19833,19840 ----
  e2015df970a997f64cabe4a791c7016c  gcc/testsuite/c-c++-common/ubsan/nonnull-5.c
  7a621f4d7da946ae138a57d09b0e519f  gcc/testsuite/c-c++-common/ubsan/nonnull-6.c
  5dc5ca60e49d92169afd643167cc5738  gcc/testsuite/c-c++-common/ubsan/nonnull-7.c
+ 7916d95d8412af44a6e26230a67d2d14  gcc/testsuite/c-c++-common/ubsan/nonnull-8.c
+ f1edfeb969430243d092ee384d8d6c90  gcc/testsuite/c-c++-common/ubsan/nonnull-9.c
  6842fa0a5074224e7bfc1fa8476e9101  gcc/testsuite/c-c++-common/ubsan/null-1.c
  980109fa8241a757eeaa7dd86f275f3c  gcc/testsuite/c-c++-common/ubsan/null-10.c
  18d25a0147190f384aa027237ca4a444  gcc/testsuite/c-c++-common/ubsan/null-11.c
*************** eac533e1d20c6fc3182209d89d95dce1  gcc/te
*** 20417,20423 ****
  d36f8f9425c4a8000ad9c4a97185aca5  gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out
  5f5ef3353680e2b791ea5a108b7f3876  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.cob
  85a1b4e081b0827d61acd2b576f8e44d  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.out
! bb1ae587bbebd3a1c6a04cf9b5ba7730  gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob
  c72d199ef391d7ef4f0dc80fb62d8518  gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob
  9205da278ccf673e088502edc93ae569  gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out
  411c711305a2c39d1b45ddc6c640bb98  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob
--- 20418,20424 ----
  d36f8f9425c4a8000ad9c4a97185aca5  gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out
  5f5ef3353680e2b791ea5a108b7f3876  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.cob
  85a1b4e081b0827d61acd2b576f8e44d  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.out
! 21310f898eb7367c6b0b6e944a94b53d  gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob
  c72d199ef391d7ef4f0dc80fb62d8518  gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob
  9205da278ccf673e088502edc93ae569  gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out
  411c711305a2c39d1b45ddc6c640bb98  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob
*************** b03be3a03970717959df65ccdcbebe88  gcc/te
*** 21148,21153 ****
--- 21149,21156 ----
  7998896b5b941ead8835759e67d0fff5  gcc/testsuite/g++.dg/asan/pr117845-2.C
  bcebd751b296d1287bb9fa7c080ccecb  gcc/testsuite/g++.dg/asan/pr117845.C
  350e8cfd78cd243b5ca66f3b0149e4b7  gcc/testsuite/g++.dg/asan/pr118763.C
+ 5b2d3a20968e0f4254721c157eb7c67c  gcc/testsuite/g++.dg/asan/pr120608-3.C
+ 8cb6a9a2f920a7486ac33480f9cab891  gcc/testsuite/g++.dg/asan/pr120608-4.C
  a012f82a08211153b4c4517641e43c3d  gcc/testsuite/g++.dg/asan/pr120608.C
  e472f2ce37f2b55b1358ec08717d9f08  gcc/testsuite/g++.dg/asan/pr55617.C
  74a04a20e12a8acd0fd7d05742cf8d63  gcc/testsuite/g++.dg/asan/pr62017.C
*************** b585b1ced3a56644fa0fe5fea48a7186  gcc/te
*** 23739,23744 ****
--- 23742,23749 ----
  2b3062fcf828f181fc3399b93693031a  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const9.C
  b4468f4f3ad891d5e034fa908a0a57e9  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr1.C
  1ea88d8208d59f25e2b46e3f1efcf9de  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr2.C
+ 3fa26fd9c9659ea26c9d5b44041ca1f7  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3.C
+ baaeaf02818c9ac55ee1d4c78da5f31c  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3a.C
  167a011be964dea6896e3e468a38dc31  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C
  59ff738b6c6f39d1085d9586f3b2460e  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv10.C
  af8f4c292dd27cf325f9b83b0e8ae304  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C
*************** f130c799f5624997275657362cbc155f  gcc/te
*** 24759,24765 ****
  09bf4c9ea4be9a78430f128693f12e1b  gcc/testsuite/g++.dg/cpp0x/temp_default7.C
  ffb45b4a754d1417c1388582a835c6fa  gcc/testsuite/g++.dg/cpp0x/temp_default8.C
  3b5dc721d5f8945d257645537b85505e  gcc/testsuite/g++.dg/cpp0x/template_deduction.C
! d8e8033cd6a6a6a2fbf1368f7775ac8b  gcc/testsuite/g++.dg/cpp0x/this1.C
  d163f4d1121a82d4c4ddd269817b4753  gcc/testsuite/g++.dg/cpp0x/this2.C
  488528fbea12aa95fa338d2a320f5fb0  gcc/testsuite/g++.dg/cpp0x/trailing1.C
  b3ffcd3fe45fdfaefdabb2511bf9b313  gcc/testsuite/g++.dg/cpp0x/trailing10.C
--- 24764,24770 ----
  09bf4c9ea4be9a78430f128693f12e1b  gcc/testsuite/g++.dg/cpp0x/temp_default7.C
  ffb45b4a754d1417c1388582a835c6fa  gcc/testsuite/g++.dg/cpp0x/temp_default8.C
  3b5dc721d5f8945d257645537b85505e  gcc/testsuite/g++.dg/cpp0x/template_deduction.C
! 782e8b0ed4b7585a32468429f51f9718  gcc/testsuite/g++.dg/cpp0x/this1.C
  d163f4d1121a82d4c4ddd269817b4753  gcc/testsuite/g++.dg/cpp0x/this2.C
  488528fbea12aa95fa338d2a320f5fb0  gcc/testsuite/g++.dg/cpp0x/trailing1.C
  b3ffcd3fe45fdfaefdabb2511bf9b313  gcc/testsuite/g++.dg/cpp0x/trailing10.C
*************** db740268984e13059571b37af26229f7  gcc/te
*** 26694,26699 ****
--- 26699,26705 ----
  ef7d7c0e26159c8de94fcb3f8aeb2c11  gcc/testsuite/g++.dg/cpp23/normalize7.C
  1559cfc237c4cd0b5a977e0a3e97dcef  gcc/testsuite/g++.dg/cpp23/pr117287-attr.C
  bef1cfaa7a0c843e14d86e3cefd20837  gcc/testsuite/g++.dg/cpp23/range-for1.C
+ daec90ffb75379f104da0b9f4503d2b5  gcc/testsuite/g++.dg/cpp23/range-for10.C
  769314536bd2595caab3098e2d27f697  gcc/testsuite/g++.dg/cpp23/range-for2.C
  22632bf1d42798a1dc41e4771915e05a  gcc/testsuite/g++.dg/cpp23/range-for3.C
  d687312a7453171ab6159b043423f880  gcc/testsuite/g++.dg/cpp23/range-for4.C
*************** c7b2313c64f226651e97ebc4e634cc95  gcc/te
*** 27715,27720 ****
--- 27721,27727 ----
  fc1805f7c9ae0e0d70715f21f1ab1323  gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C
  7b82b863c8a6f3c30784d618a2e3c535  gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C
  8c0cfd54130aa654e2e50e1925316cab  gcc/testsuite/g++.dg/cpp2a/lambda-targ15.C
+ 8d4a60f484f6af22e432afc4620ef9f8  gcc/testsuite/g++.dg/cpp2a/lambda-targ16.C
  d363d5590bc863dbb1f6bb96bad95b3c  gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C
  d948ecca981f7c5de5ca48afc987ea36  gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C
  096118fef57f992a05319e3b6f8ba6a7  gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C
*************** a0fee4f3ee4678b54afd993b619baa05  gcc/te
*** 34979,34984 ****
--- 34986,34993 ----
  45c8a98fb67b502b90968b85f37350fd  gcc/testsuite/g++.dg/parse/pr113788.C
  4f1090730a2c9b918d79fed001575a31  gcc/testsuite/g++.dg/parse/pr113929.C
  dfa745316c10162491bb418266c2b932  gcc/testsuite/g++.dg/parse/pr116071.C
+ 732ccde523003692267913067f6a0ccd  gcc/testsuite/g++.dg/parse/pr120471.C
+ 225e1d7f8cf80186eac35ff37acc9379  gcc/testsuite/g++.dg/parse/pr120940.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
*************** d0caf9e5362287726dc95d5165f20feb  gcc/te
*** 35448,35454 ****
  ed2c407a8454e62219c76dc3c5b72a1e  gcc/testsuite/g++.dg/pr89242.C
  7287759250de84d3108a523dee756970  gcc/testsuite/g++.dg/pr89790.C
  35c17f0646594d5891b1fa427e1c3ea7  gcc/testsuite/g++.dg/pr90338.C
- 73735f0d288c2d08e6d7150b4af65ae1  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
--- 35457,35462 ----
*************** eb665dfa7b7ea47842e7a0ca1a4046e2  gcc/te
*** 36649,36654 ****
--- 36657,36663 ----
  5617adf87656fe7cb0eff6a0b9c0033c  gcc/testsuite/g++.dg/template/permissive-error1b.C
  6cdb652b5984198200693a1bd0d70d93  gcc/testsuite/g++.dg/template/permissive-error1c.C
  28d3f4512b4406102180ca1103ff1454  gcc/testsuite/g++.dg/template/permissive-error2.C
+ e4d0b292389630976cca25f6a5808a1e  gcc/testsuite/g++.dg/template/permissive-error3.C
  14967698fd85bf0506454b2df17f8d2a  gcc/testsuite/g++.dg/template/pr108206.C
  47c32753e30b4754695e8eabfcc1e9f5  gcc/testsuite/g++.dg/template/pr119138.C
  1cb28c70209f6da9c6fd5dc25fde1e1a  gcc/testsuite/g++.dg/template/pr16564.C
*************** ad6c0b4132032f21f64bfdd4836d3313  gcc/te
*** 38318,38323 ****
--- 38327,38333 ----
  59f2687e6719ef7d3d19b4de0e99a075  gcc/testsuite/g++.dg/ubsan/pr105729.C
  06fb5e3c91f4d1b4f58ee978dd2b4b30  gcc/testsuite/g++.dg/ubsan/pr116449.C
  a9c7210a5fb28a26cd54ad5ce0872a53  gcc/testsuite/g++.dg/ubsan/pr117259.C
+ a4c08c025f777efea858788766890b26  gcc/testsuite/g++.dg/ubsan/pr120471.C
  a654df71119821a4303cc9fe0501191b  gcc/testsuite/g++.dg/ubsan/pr59250.C
  420a6623146bb014dc1310134356d81f  gcc/testsuite/g++.dg/ubsan/pr59306.C
  79755a51c3cbb97ff48bd411272f6b08  gcc/testsuite/g++.dg/ubsan/pr59331.C
*************** c32e2d9c26f73ceab75448129f154a62  gcc/te
*** 38707,38712 ****
--- 38717,38723 ----
  c1c94fbed68712c556c47675075fab08  gcc/testsuite/g++.dg/warn/Wduplicated-branches6.C
  df34a3119747a72018c056305c89abd6  gcc/testsuite/g++.dg/warn/Wduplicated-branches7.C
  b9cda5e4dff795d15eaf9fe9108df523  gcc/testsuite/g++.dg/warn/Wduplicated-branches8.C
+ b78135999b9fbdc92326bfae8b355202  gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C
  53e8ba692e810326b135e28115da516a  gcc/testsuite/g++.dg/warn/Wduplicated-cond1.C
  aee46bcb7031162dcee9c8ebe1228c6f  gcc/testsuite/g++.dg/warn/Wduplicated-cond2.C
  3fd71ef4467ff2d96bedfb8624c9f6c9  gcc/testsuite/g++.dg/warn/Wduplicated-cond3.C
*************** f23b91fd4df934b4b8cb89c14e082b05  gcc/te
*** 43057,43069 ****
  0ec10c6dd8c46db7332b15201fba84ba  gcc/testsuite/g++.target/i386/m128-check.h
  a1f73425439294ed2e5c470eb6a67f31  gcc/testsuite/g++.target/i386/m256-check.h
  ae8574e23abf3d9af1504b3bec6f9ec6  gcc/testsuite/g++.target/i386/mangling-alias1.C
! ae2651261413c9389759f8bfa661ce25  gcc/testsuite/g++.target/i386/memset-pr101366-1.C
! 57024bf79b03bcb6b285444a8b28b612  gcc/testsuite/g++.target/i386/memset-pr101366-2.C
! 5f07e75dbd21ca39994a585cee4ca58c  gcc/testsuite/g++.target/i386/memset-pr108585-1a.C
! 5535ac7439d650c5bb9fab6da81fdb62  gcc/testsuite/g++.target/i386/memset-pr108585-1b.C
! 4ed896188ea2bea98c965e7e41f3d3d7  gcc/testsuite/g++.target/i386/memset-pr118276-1a.C
! a467604d2accb345c20c003f878494e4  gcc/testsuite/g++.target/i386/memset-pr118276-1b.C
! ac490f4c7437432cf3c76a1c44c29a8f  gcc/testsuite/g++.target/i386/memset-pr118276-1c.C
  4e700e994b817984ed104fabbd34d2c4  gcc/testsuite/g++.target/i386/mv-symbols1.C
  c0b24207688618b815731387510d9bed  gcc/testsuite/g++.target/i386/mv-symbols2.C
  9d62ccf3abbeb46b904b5883b04e23eb  gcc/testsuite/g++.target/i386/mv-symbols3.C
--- 43068,43080 ----
  0ec10c6dd8c46db7332b15201fba84ba  gcc/testsuite/g++.target/i386/m128-check.h
  a1f73425439294ed2e5c470eb6a67f31  gcc/testsuite/g++.target/i386/m256-check.h
  ae8574e23abf3d9af1504b3bec6f9ec6  gcc/testsuite/g++.target/i386/mangling-alias1.C
! 93d56d0b4495ed65b837bce8186f4749  gcc/testsuite/g++.target/i386/memset-pr101366-1.C
! 776f72fccf4d8af261b31189dad1c7ee  gcc/testsuite/g++.target/i386/memset-pr101366-2.C
! 0050ecf3c40d86b9485b48c200f8e13b  gcc/testsuite/g++.target/i386/memset-pr108585-1a.C
! 2142630c9515f5ebcfddb1985cbee0d3  gcc/testsuite/g++.target/i386/memset-pr108585-1b.C
! f83ec71de661b08fc9f19ffc5630e79f  gcc/testsuite/g++.target/i386/memset-pr118276-1a.C
! 8e913008098c373f3a04c6635b2c7aed  gcc/testsuite/g++.target/i386/memset-pr118276-1b.C
! c5465550486cf8ae79d0d35ba75ade1f  gcc/testsuite/g++.target/i386/memset-pr118276-1c.C
  4e700e994b817984ed104fabbd34d2c4  gcc/testsuite/g++.target/i386/mv-symbols1.C
  c0b24207688618b815731387510d9bed  gcc/testsuite/g++.target/i386/mv-symbols2.C
  9d62ccf3abbeb46b904b5883b04e23eb  gcc/testsuite/g++.target/i386/mv-symbols3.C
*************** a36b5332929fccce3ba46aacdd6e1984  gcc/te
*** 44581,44586 ****
--- 44592,44598 ----
  ae878ea349c8f9f2a197bf59dcff9d3a  gcc/testsuite/gcc.c-torture/compile/pr118429.c
  6d7416e999725c0f023c4322893b1214  gcc/testsuite/gcc.c-torture/compile/pr118501.c
  4e917b913d6f56bf343a7bff79797c93  gcc/testsuite/gcc.c-torture/compile/pr119226.c
+ ba307c947af4df2e0ff2f70272caf68a  gcc/testsuite/gcc.c-torture/compile/pr120807.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
*************** a5e27521e31c487bc91f8281068f33c3  gcc/te
*** 49480,49485 ****
--- 49492,49498 ----
  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
+ 040ecfdceaba1678ca6f0870189f65e4  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-pr120780.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
*************** c468bc46d49a90772b63f81541d1cdf0  gcc/te
*** 51764,51770 ****
  707a475740543f28e7d4a1a1c6dd5e2a  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-1.c
  e9e3452e14dfbc6213d63bbc19163128  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-2.c
  98a1035165205102450c094d1127f8ea  gcc/testsuite/gcc.dg/dfp/bitint-1.c
! 143efb0e67af1d841185aad9485eab11  gcc/testsuite/gcc.dg/dfp/bitint-10.c
  025dfa34516086fff4ea86cbff142e28  gcc/testsuite/gcc.dg/dfp/bitint-2.c
  ccb86bca1db885e54fa8d30063aa6a9a  gcc/testsuite/gcc.dg/dfp/bitint-3.c
  58ba588e40d3099aca918042db7c5f24  gcc/testsuite/gcc.dg/dfp/bitint-4.c
--- 51777,51783 ----
  707a475740543f28e7d4a1a1c6dd5e2a  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-1.c
  e9e3452e14dfbc6213d63bbc19163128  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-2.c
  98a1035165205102450c094d1127f8ea  gcc/testsuite/gcc.dg/dfp/bitint-1.c
! 435b0150048fc1bac0fc9aef60754472  gcc/testsuite/gcc.dg/dfp/bitint-10.c
  025dfa34516086fff4ea86cbff142e28  gcc/testsuite/gcc.dg/dfp/bitint-2.c
  ccb86bca1db885e54fa8d30063aa6a9a  gcc/testsuite/gcc.dg/dfp/bitint-3.c
  58ba588e40d3099aca918042db7c5f24  gcc/testsuite/gcc.dg/dfp/bitint-4.c
*************** ccb86bca1db885e54fa8d30063aa6a9a  gcc/te
*** 51772,51778 ****
  730ddc96d99e6d801906d63d8ae43c42  gcc/testsuite/gcc.dg/dfp/bitint-6.c
  0abc14c0fc9758db1fca1a924c745023  gcc/testsuite/gcc.dg/dfp/bitint-7.c
  66591ab0e72f12a0113129becb17a7f0  gcc/testsuite/gcc.dg/dfp/bitint-8.c
! 5aad3660822951a77e1e44e866886f80  gcc/testsuite/gcc.dg/dfp/bitint-9.c
  2d5128bddc0d69a547254935ce84b555  gcc/testsuite/gcc.dg/dfp/builtin-complex.c
  bbb3a4b9649cd82ff38969cb002504a5  gcc/testsuite/gcc.dg/dfp/builtin-snan-1.c
  d52de125edb1b6785a1995c8d138b9f0  gcc/testsuite/gcc.dg/dfp/builtin-snan-2.c
--- 51785,51791 ----
  730ddc96d99e6d801906d63d8ae43c42  gcc/testsuite/gcc.dg/dfp/bitint-6.c
  0abc14c0fc9758db1fca1a924c745023  gcc/testsuite/gcc.dg/dfp/bitint-7.c
  66591ab0e72f12a0113129becb17a7f0  gcc/testsuite/gcc.dg/dfp/bitint-8.c
! 1df031fb70e425a8b18bde73eb6df5ef  gcc/testsuite/gcc.dg/dfp/bitint-9.c
  2d5128bddc0d69a547254935ce84b555  gcc/testsuite/gcc.dg/dfp/builtin-complex.c
  bbb3a4b9649cd82ff38969cb002504a5  gcc/testsuite/gcc.dg/dfp/builtin-snan-1.c
  d52de125edb1b6785a1995c8d138b9f0  gcc/testsuite/gcc.dg/dfp/builtin-snan-2.c
*************** b6f9108cd4878577de83d43be75185ce  gcc/te
*** 51847,51853 ****
  440b561ad1d9037d4559c7011d636b7a  gcc/testsuite/gcc.dg/dfp/pr104557.c
  82ea312c34b2d7bbfe3d7dc309a1831f  gcc/testsuite/gcc.dg/dfp/pr108068.c
  ea6fd7375471549c289fdf2b28049341  gcc/testsuite/gcc.dg/dfp/pr118560.c
! 59bca99093471aec4689a575eb6354c1  gcc/testsuite/gcc.dg/dfp/pr120631.c
  d8629eb8e0c765b5a7daa583cb8eedad  gcc/testsuite/gcc.dg/dfp/pr31344.c
  b59fd600db434af135f39c38e21e2d74  gcc/testsuite/gcc.dg/dfp/pr37435.c
  17353eaf91a4f3959fa168324f86f6f5  gcc/testsuite/gcc.dg/dfp/pr41049.c
--- 51860,51866 ----
  440b561ad1d9037d4559c7011d636b7a  gcc/testsuite/gcc.dg/dfp/pr104557.c
  82ea312c34b2d7bbfe3d7dc309a1831f  gcc/testsuite/gcc.dg/dfp/pr108068.c
  ea6fd7375471549c289fdf2b28049341  gcc/testsuite/gcc.dg/dfp/pr118560.c
! b9ab9342a3fa794be9b6f9302b6694a3  gcc/testsuite/gcc.dg/dfp/pr120631.c
  d8629eb8e0c765b5a7daa583cb8eedad  gcc/testsuite/gcc.dg/dfp/pr31344.c
  b59fd600db434af135f39c38e21e2d74  gcc/testsuite/gcc.dg/dfp/pr37435.c
  17353eaf91a4f3959fa168324f86f6f5  gcc/testsuite/gcc.dg/dfp/pr41049.c
*************** ef50af421660786db0fe02810452b32f  gcc/te
*** 52096,52102 ****
  e486a1ffcb1566eec83f03a282afd7e6  gcc/testsuite/gcc.dg/flex-array-counted-by-7.c
  4dc99e0ee56663888e56bd5837502656  gcc/testsuite/gcc.dg/flex-array-counted-by-8.c
  87afb64cad8aabf8f81ae0aa525a224a  gcc/testsuite/gcc.dg/flex-array-counted-by-9.c
! 99866c95c8046db22909456476e855eb  gcc/testsuite/gcc.dg/flex-array-counted-by.c
  85db05f8c70ca4dbcefde9d1c06692c6  gcc/testsuite/gcc.dg/float-exact-1.c
  64811ec5667d21e1633fbe21a81dc58c  gcc/testsuite/gcc.dg/float-range-1.c
  004cdd7f4e1522c6bc32910e120d11f9  gcc/testsuite/gcc.dg/float-range-2.c
--- 52109,52115 ----
  e486a1ffcb1566eec83f03a282afd7e6  gcc/testsuite/gcc.dg/flex-array-counted-by-7.c
  4dc99e0ee56663888e56bd5837502656  gcc/testsuite/gcc.dg/flex-array-counted-by-8.c
  87afb64cad8aabf8f81ae0aa525a224a  gcc/testsuite/gcc.dg/flex-array-counted-by-9.c
! 079390c1d98770d2afb23500baeb74ce  gcc/testsuite/gcc.dg/flex-array-counted-by.c
  85db05f8c70ca4dbcefde9d1c06692c6  gcc/testsuite/gcc.dg/float-exact-1.c
  64811ec5667d21e1633fbe21a81dc58c  gcc/testsuite/gcc.dg/float-range-1.c
  004cdd7f4e1522c6bc32910e120d11f9  gcc/testsuite/gcc.dg/float-range-2.c
*************** b7a69609ea582386c302afd514d8e233  gcc/te
*** 53814,53826 ****
  29ace6c606b191c80e6eda01848c3e07  gcc/testsuite/gcc.dg/ipa/pr118097.c
  03eb6d8014b7164bbbc15cf1299be9d4  gcc/testsuite/gcc.dg/ipa/pr118138.c
  c8d0678c2016d21f4da748a79301946a  gcc/testsuite/gcc.dg/ipa/pr118535.c
! d2d98a344c776f2cee643c99d05eb20c  gcc/testsuite/gcc.dg/ipa/pr119318.c
  d8f0256cde05093b9738e8287c58d5c3  gcc/testsuite/gcc.dg/ipa/pr119530.c
  8724c127eb269868ca6c918a72fc36b1  gcc/testsuite/gcc.dg/ipa/pr119803.c
  e39432b4ae7797e55b13f6d2fd29a4a6  gcc/testsuite/gcc.dg/ipa/pr119852.c
  fc7c9c751d59b444d0ab30c4d9029491  gcc/testsuite/gcc.dg/ipa/pr120044-1.c
  538e5a7542c72b7ea4e4375cbebde001  gcc/testsuite/gcc.dg/ipa/pr120044-2.c
! 3c119ebca762218e529eb71f0df740de  gcc/testsuite/gcc.dg/ipa/pr120295.c
  c8295ff7fd7e271d17e7609620f5dfcb  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
--- 53827,53839 ----
  29ace6c606b191c80e6eda01848c3e07  gcc/testsuite/gcc.dg/ipa/pr118097.c
  03eb6d8014b7164bbbc15cf1299be9d4  gcc/testsuite/gcc.dg/ipa/pr118138.c
  c8d0678c2016d21f4da748a79301946a  gcc/testsuite/gcc.dg/ipa/pr118535.c
! 60f619bf7905d44b5480ef9c557d9112  gcc/testsuite/gcc.dg/ipa/pr119318.c
  d8f0256cde05093b9738e8287c58d5c3  gcc/testsuite/gcc.dg/ipa/pr119530.c
  8724c127eb269868ca6c918a72fc36b1  gcc/testsuite/gcc.dg/ipa/pr119803.c
  e39432b4ae7797e55b13f6d2fd29a4a6  gcc/testsuite/gcc.dg/ipa/pr119852.c
  fc7c9c751d59b444d0ab30c4d9029491  gcc/testsuite/gcc.dg/ipa/pr120044-1.c
  538e5a7542c72b7ea4e4375cbebde001  gcc/testsuite/gcc.dg/ipa/pr120044-2.c
! 565d3e382e01fcd9c41e557858bca548  gcc/testsuite/gcc.dg/ipa/pr120295.c
  c8295ff7fd7e271d17e7609620f5dfcb  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
*************** f11c04bf8d63c625d3b6257f4785bb60  gcc/te
*** 54564,54569 ****
--- 54577,54585 ----
  651344fe733fa7735632a9520a50f8ba  gcc/testsuite/gcc.dg/nonnull-1.c
  07b34390c5507d6aa09434802e5b61a8  gcc/testsuite/gcc.dg/nonnull-10.c
  38e52279b515e8d3e7adf38ec42bc32c  gcc/testsuite/gcc.dg/nonnull-11.c
+ d3f627c13c63b85243d5aa74bf71f222  gcc/testsuite/gcc.dg/nonnull-12.c
+ 88bce285c71ff2958299044a29d095b4  gcc/testsuite/gcc.dg/nonnull-13.c
+ d014ab67b303cec73f41cbc3cc96f77d  gcc/testsuite/gcc.dg/nonnull-14.c
  2fdfffd14d276c562eff1fc18a7208f3  gcc/testsuite/gcc.dg/nonnull-2.c
  2b60dc88544e8b426b9b8ef28cc5e41d  gcc/testsuite/gcc.dg/nonnull-3.c
  9922cca70be66c8b7ef7db9ddf403b59  gcc/testsuite/gcc.dg/nonnull-4.c
*************** f39bd472f690e3e2598e1924ee2b8d14  gcc/te
*** 54571,54577 ****
  e1e1132fa7369727498c14f35a94281c  gcc/testsuite/gcc.dg/nonnull-6.c
  fc042eaad3066a30b59b100c8d3fdb9c  gcc/testsuite/gcc.dg/nonnull-7.c
  7967c6f010c04e7b18af2536c24a6a07  gcc/testsuite/gcc.dg/nonnull-8.c
! 553b04c0a72360bf5e4f25bebdecc5cf  gcc/testsuite/gcc.dg/nonnull-9.c
  3aaa6f3029122e1bc2b4026e23e9faf0  gcc/testsuite/gcc.dg/nop.h
  dae2d727f3381a38344f95d1d6efde7a  gcc/testsuite/gcc.dg/noreorder.c
  3e581c5222a4c527b62118185817b783  gcc/testsuite/gcc.dg/noreorder2.c
--- 54587,54593 ----
  e1e1132fa7369727498c14f35a94281c  gcc/testsuite/gcc.dg/nonnull-6.c
  fc042eaad3066a30b59b100c8d3fdb9c  gcc/testsuite/gcc.dg/nonnull-7.c
  7967c6f010c04e7b18af2536c24a6a07  gcc/testsuite/gcc.dg/nonnull-8.c
! 796a2f7fb35f295f0bdd58b208547aff  gcc/testsuite/gcc.dg/nonnull-9.c
  3aaa6f3029122e1bc2b4026e23e9faf0  gcc/testsuite/gcc.dg/nop.h
  dae2d727f3381a38344f95d1d6efde7a  gcc/testsuite/gcc.dg/noreorder.c
  3e581c5222a4c527b62118185817b783  gcc/testsuite/gcc.dg/noreorder2.c
*************** d9f2439f176b4f73afa0c30baa468855  gcc/te
*** 54804,54810 ****
  000d3a6c8dca7e54f5be771190d10f29  gcc/testsuite/gcc.dg/pie-static-1.c
  be052bceddbf752586b645bc9e048e9c  gcc/testsuite/gcc.dg/pie-static-2.c
  06fc0933356fe57959666abea2f07f59  gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc
! 4d4e9b9858fe61fe76ea43e13b2b6dc2  gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc
  f256e1fca9dce4089a6d9d913c5f5e6a  gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc
  e894a2297a56ca0e7301582b3b1c8141  gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc
  cb4eac35bee8576a953631c035c2ff66  gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c
--- 54820,54826 ----
  000d3a6c8dca7e54f5be771190d10f29  gcc/testsuite/gcc.dg/pie-static-1.c
  be052bceddbf752586b645bc9e048e9c  gcc/testsuite/gcc.dg/pie-static-2.c
  06fc0933356fe57959666abea2f07f59  gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc
! 496791c2cd4980ffdc9a17ee52e31ebc  gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc
  f256e1fca9dce4089a6d9d913c5f5e6a  gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc
  e894a2297a56ca0e7301582b3b1c8141  gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc
  cb4eac35bee8576a953631c035c2ff66  gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c
*************** a7db561cc35fce636b1dca4e7394ba77  gcc/te
*** 54848,54854 ****
  a6a63e4d673f32d534d3afc18a7f8218  gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-1.c
  aa01caff792d42166912b838479f96af  gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c
  bc17d4fe49a94a5706f9bcef474031c2  gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py
- 5f17663596e733b7a39a6b737dc9ea56  gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-3.c
  9c0af25560d6f1bb77ab2c9926f2b350  gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.c
  4e32b40390f2106a445623caa3a97dac  gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.py
  d69b80e0a539be7739a33736ee0e8aaf  gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-5.c
--- 54864,54869 ----
*************** de7a6b85ff1667e6ef4b89117e774f2d  gcc/te
*** 54932,54938 ****
  4905199fc259967af414db22821f7f74  gcc/testsuite/gcc.dg/plugin/must_tail_call_plugin.cc
  adbc6d60d6e1474ca93af3b50208e741  gcc/testsuite/gcc.dg/plugin/one_time-test-1.c
  91500c30c78de7048ecb72b86a431e80  gcc/testsuite/gcc.dg/plugin/one_time_plugin.cc
! 1c9782a7735c6f969bb5edd7f2b0713c  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
--- 54947,54953 ----
  4905199fc259967af414db22821f7f74  gcc/testsuite/gcc.dg/plugin/must_tail_call_plugin.cc
  adbc6d60d6e1474ca93af3b50208e741  gcc/testsuite/gcc.dg/plugin/one_time-test-1.c
  91500c30c78de7048ecb72b86a431e80  gcc/testsuite/gcc.dg/plugin/one_time_plugin.cc
! 522a25fff5faa9c3a41ada0379cc3de2  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
*************** cec4c2edab704d04ba9649b787ed5274  gcc/te
*** 54993,54998 ****
--- 55008,55025 ----
  b667b5f1f8c62505fc01d9178b47459d  gcc/testsuite/gcc.dg/pointer-array-atomic.c
  a5319bd104f29d7fce777870a81fad4e  gcc/testsuite/gcc.dg/pointer-array-quals-1.c
  5c329c22bd23faf7b838de0e4cbb7af1  gcc/testsuite/gcc.dg/pointer-array-quals-2.c
+ 87303172cad22f129e26b5f5d00848f7  gcc/testsuite/gcc.dg/pointer-counted-by-1.c
+ 235b8ad4c1e8f7d345e8f9bfd0d4be3a  gcc/testsuite/gcc.dg/pointer-counted-by-2.c
+ 6bc63e6bb461685aa63789d592261cd1  gcc/testsuite/gcc.dg/pointer-counted-by-3.c
+ 55dda7861fc83456d204db29704a9e1b  gcc/testsuite/gcc.dg/pointer-counted-by-4-char.c
+ 0bec7f1bff0c50976006236a89c9c4e0  gcc/testsuite/gcc.dg/pointer-counted-by-4-float.c
+ 5f707f3db1b27de3b959ba40397d9ce6  gcc/testsuite/gcc.dg/pointer-counted-by-4-struct.c
+ 8fc07e8d2e760e2759c331eeab3c7a61  gcc/testsuite/gcc.dg/pointer-counted-by-4-union.c
+ a0acf8d13390e8848447fc73fb2b9827  gcc/testsuite/gcc.dg/pointer-counted-by-4.c
+ 4fb7e10140c253ff0ffeb53bb3ad166e  gcc/testsuite/gcc.dg/pointer-counted-by-5.c
+ ae7c56102b7bab6c5480c80a081567d9  gcc/testsuite/gcc.dg/pointer-counted-by-6.c
+ cb2a225c4939c4a047c2574e784b9149  gcc/testsuite/gcc.dg/pointer-counted-by-7.c
+ 9c65bfd5b2e510ef103d9a584f419195  gcc/testsuite/gcc.dg/pointer-counted-by.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
*************** d08452d24c97493e2434ecdd8c5310c4  gcc/te
*** 55551,55556 ****
--- 55578,55584 ----
  2b2d20742f9707962adb7ed6abf1aaff  gcc/testsuite/gcc.dg/pr118860.c
  000c93ab2283d35bc8262ea9d115e9b4  gcc/testsuite/gcc.dg/pr118895.c
  2bc77a865f5ed044c609c7e4633d1a53  gcc/testsuite/gcc.dg/pr118947-1.c
+ eaa8bc67e566af882ae8ca653097943c  gcc/testsuite/gcc.dg/pr118948-1.c
  cccc06652033bffb0ed73a8f12d234c2  gcc/testsuite/gcc.dg/pr119001-1.c
  c7a64c754e3bec3fcb350f02eeca455c  gcc/testsuite/gcc.dg/pr119001-2.c
  22c72fb8f0ea443ab61c2bcc7fc0c042  gcc/testsuite/gcc.dg/pr119039-1.c
*************** fa7bdb79eb170773050b26a5ed2ae1ec  gcc/te
*** 58677,58682 ****
--- 58705,58711 ----
  35aafd27620207da2f66dd0e44ff780f  gcc/testsuite/gcc.dg/torture/builtin-math-6.c
  6f699b99531328babffd4ec110ba2fd7  gcc/testsuite/gcc.dg/torture/builtin-math-7.c
  c77f4d57bad6850b166ed11f47ce8a4e  gcc/testsuite/gcc.dg/torture/builtin-math-8.c
+ 66c47832fbdd5fbbcb932d9af3bb0a39  gcc/testsuite/gcc.dg/torture/builtin-math-9.c
  d7925eb09751128af786d99274bd0ab7  gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c
  8fb73f7d131e21da3236db0dd505ca7d  gcc/testsuite/gcc.dg/torture/builtin-modf-1.c
  5463770205f265e1ec6ff8e46d339667  gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c
*************** faa7f4600800bdbdaab47877d0fb7746  gcc/te
*** 59319,59330 ****
--- 59348,59365 ----
  52b5e2430d6e31ce28c98ffd5968f540  gcc/testsuite/gcc.dg/torture/pr120122-1.c
  e1b9ad351c56aebfaff790ff4002bf6e  gcc/testsuite/gcc.dg/torture/pr120182.c
  0c3297c6ebf6e4adcaeec164dfe8e9ac  gcc/testsuite/gcc.dg/torture/pr120211-1.c
+ 68b7b9a81ceb31b6b33b9a797a7f6c30  gcc/testsuite/gcc.dg/torture/pr120242.c
  a0d2174875961d5bb3004aad3d93d7d7  gcc/testsuite/gcc.dg/torture/pr120276.c
  e9469d38b4234580f9b2284233404b3c  gcc/testsuite/gcc.dg/torture/pr120341-1.c
  aef01c040da8abd2a1e547ed6a07eb5a  gcc/testsuite/gcc.dg/torture/pr120341-2.c
  12e839fd30c3a301bab4708aee3c9815  gcc/testsuite/gcc.dg/torture/pr120347.c
  590593d14c26e1d9ed776d01fc734a3c  gcc/testsuite/gcc.dg/torture/pr120369-1.c
+ 437bb98a945fa9a075fd7999043aea48  gcc/testsuite/gcc.dg/torture/pr120627.c
  e6e17b2280f19928b738f46328c5dcf7  gcc/testsuite/gcc.dg/torture/pr120654.c
+ d9a43196d2efe2fcc49c98e125a9d6b3  gcc/testsuite/gcc.dg/torture/pr120736.c
+ a789d5fa70ddcb7ea1760ee8688e331c  gcc/testsuite/gcc.dg/torture/pr120813.c
+ e23df6b1422011499b9a500d2bf25add  gcc/testsuite/gcc.dg/torture/pr120944.c
+ 2109362b50e367ef8730288e7461163d  gcc/testsuite/gcc.dg/torture/pr120951-1.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
*************** be751d428ac7acd0bb5ba316dc89cbca  gcc/te
*** 60485,60491 ****
  fe7a25a8994098f4b71009b9a1aad559  gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c
  6002203bc07005ca0e9c543037930992  gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c
  7fea89044d1cae3c25a1775dd049cbe7  gcc/testsuite/gcc.dg/tree-prof/bb-reorg.c
! ec8df9345f980f5032e03879fbcc65f8  gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c
  ea5950f6fc294482e6c79818fb3837d4  gcc/testsuite/gcc.dg/tree-prof/clone-test.c
  fea6679f47a5ff36663a877937522419  gcc/testsuite/gcc.dg/tree-prof/cmpsf-1.c
  124079e3848ee10f2ebc98be4d07e9f5  gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c
--- 60520,60526 ----
  fe7a25a8994098f4b71009b9a1aad559  gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c
  6002203bc07005ca0e9c543037930992  gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c
  7fea89044d1cae3c25a1775dd049cbe7  gcc/testsuite/gcc.dg/tree-prof/bb-reorg.c
! 81362d69c7e6d3814714d9e07f30a093  gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c
  ea5950f6fc294482e6c79818fb3837d4  gcc/testsuite/gcc.dg/tree-prof/clone-test.c
  fea6679f47a5ff36663a877937522419  gcc/testsuite/gcc.dg/tree-prof/cmpsf-1.c
  124079e3848ee10f2ebc98be4d07e9f5  gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c
*************** b6636fcf606d4b2a9b3c129b082bc808  gcc/te
*** 63113,63118 ****
--- 63148,63158 ----
  3325507ff87bcf4f63df3972ec6895c4  gcc/testsuite/gcc.dg/ubsan/ipa-icf-1.c
  20138e45bcf86067b02f18ee36d2a451  gcc/testsuite/gcc.dg/ubsan/object-size-9.c
  4e0da97c15afa52d7e5b234e4f20fb83  gcc/testsuite/gcc.dg/ubsan/object-size-dyn.c
+ 1038592b4377c757cf64b992a97c48c2  gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-2.c
+ 9a2a9a3d06ff9ff7cb6952d4035bdbe0  gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-3.c
+ 90a10543424a4e0854a58f9c2eaea888  gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-4.c
+ 375104140062d628a4e0b31a63aecb44  gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-5.c
+ 15f2a453c54d88e665f619a8a24c6684  gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds.c
  bd23f40ca964648dca24107dcc929765  gcc/testsuite/gcc.dg/ubsan/pr103456.c
  dc95648d25ed66b53703856ca8bf9c89  gcc/testsuite/gcc.dg/ubsan/pr106099.c
  cefdc2a9eb13f2095c81dff3665fcbe2  gcc/testsuite/gcc.dg/ubsan/pr107183.c
*************** cefdc2a9eb13f2095c81dff3665fcbe2  gcc/te
*** 63123,63128 ****
--- 63163,63169 ----
  f7352e346071f20c88b4cda3aefaf007  gcc/testsuite/gcc.dg/ubsan/pr112709-2.c
  07fea3b40997114ec3071642a71f05f0  gcc/testsuite/gcc.dg/ubsan/pr112741.c
  9d35f4aafed7065254d5bcbd8e4b3469  gcc/testsuite/gcc.dg/ubsan/pr113012.c
+ cae65f7755e556ca92edd7478099c942  gcc/testsuite/gcc.dg/ubsan/pr120837.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
*************** e8a9b3f3f510ee57f71acab27a6b2cb0  gcc/te
*** 65356,65361 ****
--- 65397,65404 ----
  39723945c19c26c57adf66d889eabb98  gcc/testsuite/gcc.dg/vect/vect-peel-4.c
  a0e208729117f798ee5200a51a9c258b  gcc/testsuite/gcc.dg/vect/vect-pr111779.c
  8689fbd68c008546f301818654595aab  gcc/testsuite/gcc.dg/vect/vect-pr114375.c
+ 8006cd394692bd071c0417ad10367515  gcc/testsuite/gcc.dg/vect/vect-pr120927-2.c
+ dca085f893f46ecb56c7cecb15a42090  gcc/testsuite/gcc.dg/vect/vect-pr120927.c
  4d57df9e3b3522c9f1a6707c05f1da45  gcc/testsuite/gcc.dg/vect/vect-pr69848.c
  3a3a316ff2f2496494ecb0bd77d61aad  gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
  b860939f62d716a264f763f82b69b2c8  gcc/testsuite/gcc.dg/vect/vect-prefetch-drop.c
*************** dcbe68009cf519fec972930376254917  gcc/te
*** 67022,67027 ****
--- 67065,67071 ----
  9076c91dd96afebc8e0bbbc789c574fb  gcc/testsuite/gcc.target/aarch64/cmp-2.c
  1a49adb9a8d6e9ec4b9691318b915da9  gcc/testsuite/gcc.target/aarch64/cmp.c
  4ba06f31ec1c28eaeb88b7a0a8160041  gcc/testsuite/gcc.target/aarch64/cmp_shifted_reg_1.c
+ f71c5f130f6dc595021295132ccef929  gcc/testsuite/gcc.target/aarch64/cmpbr.c
  ee389eae370cb027260e737bcb692a7d  gcc/testsuite/gcc.target/aarch64/cmpelim_mult_uses_1.c
  7b5054f497a38f6f6603006f2d632a05  gcc/testsuite/gcc.target/aarch64/cmpimm_branch_1.c
  2750359abb653ac649405e9099ca1643  gcc/testsuite/gcc.target/aarch64/cmpimm_cset_1.c
*************** afa7e585db839996b7ab991a21ae5c22  gcc/te
*** 67972,67977 ****
--- 68016,68022 ----
  7cbbac8dbe2287907bd0801b093e358a  gcc/testsuite/gcc.target/aarch64/simd/saturating_arithmetic_autovect_3.c
  2be176da8d3444ff6888e3bc9db7c043  gcc/testsuite/gcc.target/aarch64/simd/saturating_arithmetic_autovect_4.c
  1aabdd6dc849c997417e794557a86100  gcc/testsuite/gcc.target/aarch64/simd/scale_fpm.c
+ 49c23dcae2e2d311e0f4fe9e8c7c0993  gcc/testsuite/gcc.target/aarch64/simd/shrn2subhn.c
  9940b0ce32d8e70c5099120a82dde8c8  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
*************** b77d57f6ab3a698dfef1798ec4ada94d  gcc/te
*** 71620,71626 ****
  1644b5aca1029272980fa6486471e83f  gcc/testsuite/gcc.target/aarch64/sve/adr_5.c
  08a30fcbd7cb13074d9f737a36ee873c  gcc/testsuite/gcc.target/aarch64/sve/adr_5_run.c
  a1d9993cfe67282d03182bc25905bd1a  gcc/testsuite/gcc.target/aarch64/sve/adr_6.c
! efba7357d7c211f0b8d25f18eb365cf6  gcc/testsuite/gcc.target/aarch64/sve/adr_7.c
  62c2fdff5e2575e27bb0a1d20d21aa9e  gcc/testsuite/gcc.target/aarch64/sve/arith_1.c
  efb1c357526ad1218a7cda47ab799c9e  gcc/testsuite/gcc.target/aarch64/sve/asrdiv_1.c
  d21de60c71043234f5e72b2fc5db1cbd  gcc/testsuite/gcc.target/aarch64/sve/asrdiv_2.c
--- 71665,71671 ----
  1644b5aca1029272980fa6486471e83f  gcc/testsuite/gcc.target/aarch64/sve/adr_5.c
  08a30fcbd7cb13074d9f737a36ee873c  gcc/testsuite/gcc.target/aarch64/sve/adr_5_run.c
  a1d9993cfe67282d03182bc25905bd1a  gcc/testsuite/gcc.target/aarch64/sve/adr_6.c
! 1daf19df597a9b2315d45de48190c8c5  gcc/testsuite/gcc.target/aarch64/sve/adr_7.c
  62c2fdff5e2575e27bb0a1d20d21aa9e  gcc/testsuite/gcc.target/aarch64/sve/arith_1.c
  efb1c357526ad1218a7cda47ab799c9e  gcc/testsuite/gcc.target/aarch64/sve/asrdiv_1.c
  d21de60c71043234f5e72b2fc5db1cbd  gcc/testsuite/gcc.target/aarch64/sve/asrdiv_2.c
*************** f6fd4449a72ddd84f5687641334109d2  gcc/te
*** 84899,84915 ****
  40cce91585f47cde61390171cd489668  gcc/testsuite/gcc.target/i386/memset-1.c
  d40214a38af3060ba1bba456c7399a32  gcc/testsuite/gcc.target/i386/memset-pr120708-1.c
  131f444cf3fea918073579825312e430  gcc/testsuite/gcc.target/i386/memset-pr120708-2.c
! 1feb8ee9db635b3c333cd931825cbab7  gcc/testsuite/gcc.target/i386/memset-pr70308-1a.c
! b970e68287955a210a8f61ee157aee19  gcc/testsuite/gcc.target/i386/memset-pr70308-1b.c
  5d42d8053ea9c0f90ccef1a5662638be  gcc/testsuite/gcc.target/i386/memset-strategy-1.c
  e34fc4954adf255e63dd959604f68e95  gcc/testsuite/gcc.target/i386/memset-strategy-2.c
! 1acfef678d9eaf584186d2672905976a  gcc/testsuite/gcc.target/i386/memset-strategy-25.c
  a94047349a1abfeda6fc4e2dcf8263fe  gcc/testsuite/gcc.target/i386/memset-strategy-26.c
  7450283d0eb74c8d5f86beff98d12f17  gcc/testsuite/gcc.target/i386/memset-strategy-27.c
! 97ec7f27bf115a9493769360e8b6297b  gcc/testsuite/gcc.target/i386/memset-strategy-28.c
! 03b96edbe905a357ae136329638c5370  gcc/testsuite/gcc.target/i386/memset-strategy-29.c
  ab2b88f0bcce4626b92af0e20a2b1f62  gcc/testsuite/gcc.target/i386/memset-strategy-3.c
! 3c26d2e0b55bd6af880380f3d3baabd9  gcc/testsuite/gcc.target/i386/memset-strategy-30.c
  19a8c6e0b9f8f118dc39d2de76b75363  gcc/testsuite/gcc.target/i386/memset-strategy-31.c
  20e5e2cabbded0b26bce978e68dfb2f0  gcc/testsuite/gcc.target/i386/memset-strategy-4.c
  fad1f723fea113cd6e9ed9c154a8ac50  gcc/testsuite/gcc.target/i386/memset-strategy-5.c
--- 84944,84960 ----
  40cce91585f47cde61390171cd489668  gcc/testsuite/gcc.target/i386/memset-1.c
  d40214a38af3060ba1bba456c7399a32  gcc/testsuite/gcc.target/i386/memset-pr120708-1.c
  131f444cf3fea918073579825312e430  gcc/testsuite/gcc.target/i386/memset-pr120708-2.c
! 1c6c1cb0f0c05a6be0e6930ff67f854b  gcc/testsuite/gcc.target/i386/memset-pr70308-1a.c
! cd52405ed338b5168962d96848b32252  gcc/testsuite/gcc.target/i386/memset-pr70308-1b.c
  5d42d8053ea9c0f90ccef1a5662638be  gcc/testsuite/gcc.target/i386/memset-strategy-1.c
  e34fc4954adf255e63dd959604f68e95  gcc/testsuite/gcc.target/i386/memset-strategy-2.c
! 17f2d295d42c0a6bd1334acffca4fd9d  gcc/testsuite/gcc.target/i386/memset-strategy-25.c
  a94047349a1abfeda6fc4e2dcf8263fe  gcc/testsuite/gcc.target/i386/memset-strategy-26.c
  7450283d0eb74c8d5f86beff98d12f17  gcc/testsuite/gcc.target/i386/memset-strategy-27.c
! 244d1bd0d333e5f355f688776a83d120  gcc/testsuite/gcc.target/i386/memset-strategy-28.c
! 337c856bf02d2fe08cda950198d74948  gcc/testsuite/gcc.target/i386/memset-strategy-29.c
  ab2b88f0bcce4626b92af0e20a2b1f62  gcc/testsuite/gcc.target/i386/memset-strategy-3.c
! 10ad23df84d734ec713f91d1c91b74cc  gcc/testsuite/gcc.target/i386/memset-strategy-30.c
  19a8c6e0b9f8f118dc39d2de76b75363  gcc/testsuite/gcc.target/i386/memset-strategy-31.c
  20e5e2cabbded0b26bce978e68dfb2f0  gcc/testsuite/gcc.target/i386/memset-strategy-4.c
  fad1f723fea113cd6e9ed9c154a8ac50  gcc/testsuite/gcc.target/i386/memset-strategy-5.c
*************** d4f46b5271ce6dccc8d803376c5790f5  gcc/te
*** 84997,85004 ****
  53573eabfe7a88bc5c685842328a0bfb  gcc/testsuite/gcc.target/i386/neg-zext-1.c
  17e0a5a79b5ebe25244934057a3faf0f  gcc/testsuite/gcc.target/i386/neg-zext-2.c
  a7f204e20c0df5dad30eac30c4a089ab  gcc/testsuite/gcc.target/i386/nest-1.c
! dd28f3910c1c820877396bdada67b53a  gcc/testsuite/gcc.target/i386/no-callee-saved-1.c
! 483378afab21196a730cecbe3a61c407  gcc/testsuite/gcc.target/i386/no-callee-saved-10.c
  f3e395b65622feac99889a0a7b3407ca  gcc/testsuite/gcc.target/i386/no-callee-saved-11.c
  e5188370fac870f1044da14bdbfa0928  gcc/testsuite/gcc.target/i386/no-callee-saved-12.c
  42bd97eb7c2cc9b7ea74515a0c4cf3ce  gcc/testsuite/gcc.target/i386/no-callee-saved-13.c
--- 85042,85049 ----
  53573eabfe7a88bc5c685842328a0bfb  gcc/testsuite/gcc.target/i386/neg-zext-1.c
  17e0a5a79b5ebe25244934057a3faf0f  gcc/testsuite/gcc.target/i386/neg-zext-2.c
  a7f204e20c0df5dad30eac30c4a089ab  gcc/testsuite/gcc.target/i386/nest-1.c
! 30f81baa74eb17e2f287e035925477c6  gcc/testsuite/gcc.target/i386/no-callee-saved-1.c
! 4db6dbf3a78ed414f7c6ea5b1cad2d77  gcc/testsuite/gcc.target/i386/no-callee-saved-10.c
  f3e395b65622feac99889a0a7b3407ca  gcc/testsuite/gcc.target/i386/no-callee-saved-11.c
  e5188370fac870f1044da14bdbfa0928  gcc/testsuite/gcc.target/i386/no-callee-saved-12.c
  42bd97eb7c2cc9b7ea74515a0c4cf3ce  gcc/testsuite/gcc.target/i386/no-callee-saved-13.c
*************** ce847ee191adcc1a562b86eae8463fe1  gcc/te
*** 85006,85025 ****
  28070df22cbeb8bdda40326e1f3db379  gcc/testsuite/gcc.target/i386/no-callee-saved-15.c
  9204056c1841f39e08a93f36fd4f926c  gcc/testsuite/gcc.target/i386/no-callee-saved-16.c
  603a6e01b2f7a9cfee08f9a76db61c4a  gcc/testsuite/gcc.target/i386/no-callee-saved-17.c
! f6e04015c07dfdbd1fec397006546df4  gcc/testsuite/gcc.target/i386/no-callee-saved-18.c
! caf6372ce9d8e11a4e4374001d1cbda0  gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
  4d13266787ee48d3ccb6ef09a0ac08bc  gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
! 4e9d44eb38f6afdbec76073d8f2d172e  gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
! 557de4c471fba7816994cd7ac615be5a  gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
  3d7b300d05bb9b3c1bc384676d0db528  gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
! ad33c89265b5a7b8d4a875a0abf790b3  gcc/testsuite/gcc.target/i386/no-callee-saved-2.c
  1706fd64433a7760cdc1f03b531cc111  gcc/testsuite/gcc.target/i386/no-callee-saved-3.c
  7c0013e877ad677f03dc9f16afde12ee  gcc/testsuite/gcc.target/i386/no-callee-saved-4.c
  3945dff670a00bd729c9d700c0e429d3  gcc/testsuite/gcc.target/i386/no-callee-saved-5.c
  b72976450abb440a20ee8bbbcbe9d3da  gcc/testsuite/gcc.target/i386/no-callee-saved-6.c
! cb75d1a0c9cbcc1ff35c0ebfc4521d0f  gcc/testsuite/gcc.target/i386/no-callee-saved-7.c
! d2d958ed5eb47397497845d4ec4608e7  gcc/testsuite/gcc.target/i386/no-callee-saved-8.c
! fcdd3649e1c0734d0e2c71c3b6a131b6  gcc/testsuite/gcc.target/i386/no-callee-saved-9.c
  d153cc65f8aad89fc3f4f976c1844c13  gcc/testsuite/gcc.target/i386/nop-mcount.c
  7554f6e1a30e3cc93f33dbad79fc2a68  gcc/testsuite/gcc.target/i386/noplt-1.c
  4db83aa123fc4bac669e5678c3fd01a8  gcc/testsuite/gcc.target/i386/noplt-2.c
--- 85051,85070 ----
  28070df22cbeb8bdda40326e1f3db379  gcc/testsuite/gcc.target/i386/no-callee-saved-15.c
  9204056c1841f39e08a93f36fd4f926c  gcc/testsuite/gcc.target/i386/no-callee-saved-16.c
  603a6e01b2f7a9cfee08f9a76db61c4a  gcc/testsuite/gcc.target/i386/no-callee-saved-17.c
! aab3453cf3c5253a20cbcf5fb2b738c5  gcc/testsuite/gcc.target/i386/no-callee-saved-18.c
! 919ffeb1bc3e429a47ad767fcadb034b  gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
  4d13266787ee48d3ccb6ef09a0ac08bc  gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
! a5cc7ce415580bf22227b9808575f62c  gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
! 9f0679a848e8c00f52c80c25d859b81b  gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
  3d7b300d05bb9b3c1bc384676d0db528  gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
! a14afc4545978be3365714810486fa76  gcc/testsuite/gcc.target/i386/no-callee-saved-2.c
  1706fd64433a7760cdc1f03b531cc111  gcc/testsuite/gcc.target/i386/no-callee-saved-3.c
  7c0013e877ad677f03dc9f16afde12ee  gcc/testsuite/gcc.target/i386/no-callee-saved-4.c
  3945dff670a00bd729c9d700c0e429d3  gcc/testsuite/gcc.target/i386/no-callee-saved-5.c
  b72976450abb440a20ee8bbbcbe9d3da  gcc/testsuite/gcc.target/i386/no-callee-saved-6.c
! 91ce8e7334f6685e1162fd58720224ea  gcc/testsuite/gcc.target/i386/no-callee-saved-7.c
! d3aa3fdd97d8af1545b4ad8a07d4d869  gcc/testsuite/gcc.target/i386/no-callee-saved-8.c
! adb9a921b0738fbc19853dbc3cfe9bf3  gcc/testsuite/gcc.target/i386/no-callee-saved-9.c
  d153cc65f8aad89fc3f4f976c1844c13  gcc/testsuite/gcc.target/i386/nop-mcount.c
  7554f6e1a30e3cc93f33dbad79fc2a68  gcc/testsuite/gcc.target/i386/noplt-1.c
  4db83aa123fc4bac669e5678c3fd01a8  gcc/testsuite/gcc.target/i386/noplt-2.c
*************** ccbd1332987abb6ae1d43a2bbd8cc701  gcc/te
*** 85945,85951 ****
  ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/testsuite/gcc.target/i386/pr119450.c
  42f4bc7c237a78cf6b5c8c5a42d51425  gcc/testsuite/gcc.target/i386/pr119473.c
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
! bb420ee68e25b3f2c223a9b99a8e7c79  gcc/testsuite/gcc.target/i386/pr119784a.c
  038406363ec46be9b531268d03546b94  gcc/testsuite/gcc.target/i386/pr119784b.c
  1eb4ee8a31ea901f2b8b18e1346e6d95  gcc/testsuite/gcc.target/i386/pr119884.c
  940e784d589973675da003c24eabc2ee  gcc/testsuite/gcc.target/i386/pr119919.c
--- 85990,85996 ----
  ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/testsuite/gcc.target/i386/pr119450.c
  42f4bc7c237a78cf6b5c8c5a42d51425  gcc/testsuite/gcc.target/i386/pr119473.c
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
! 9f5fc319370713ca538c4ff5dba50a70  gcc/testsuite/gcc.target/i386/pr119784a.c
  038406363ec46be9b531268d03546b94  gcc/testsuite/gcc.target/i386/pr119784b.c
  1eb4ee8a31ea901f2b8b18e1346e6d95  gcc/testsuite/gcc.target/i386/pr119884.c
  940e784d589973675da003c24eabc2ee  gcc/testsuite/gcc.target/i386/pr119919.c
*************** ba011de94e8c76e7b3328d4e8e3327b8  gcc/te
*** 85964,85970 ****
--- 86009,86032 ----
  b8ebdafc2fa7c81ba75987868812e914  gcc/testsuite/gcc.target/i386/pr120689.c
  9c574bf548e6423ff47b97232d310a9b  gcc/testsuite/gcc.target/i386/pr120728.c
  26580d939ed25dfa9d160c6061a8abe9  gcc/testsuite/gcc.target/i386/pr120741.c
+ c1a42e6abf341c78082c17c60365086c  gcc/testsuite/gcc.target/i386/pr120840-1a.c
+ b69eb677daef92be04da1f0e0218c44e  gcc/testsuite/gcc.target/i386/pr120840-1b.c
+ 90c426e3f9f68074b3688e77c0a85c20  gcc/testsuite/gcc.target/i386/pr120840-1c.c
+ b157fbe2632de5156079590d5faadfd7  gcc/testsuite/gcc.target/i386/pr120840-1d.c
+ e33b63cd8f6d60b286b2286424f25714  gcc/testsuite/gcc.target/i386/pr120908.c
  b03b1d817538a863277c823b5e4cdf75  gcc/testsuite/gcc.target/i386/pr12092-1.c
+ 90f0a4cd64e0d1518eb33e96a887ea31  gcc/testsuite/gcc.target/i386/pr120936-1.c
+ 5b64c9b39ad3518e7cec05850b3227ca  gcc/testsuite/gcc.target/i386/pr120936-10.c
+ 5b8824b166efeeb9d51782e1072919ba  gcc/testsuite/gcc.target/i386/pr120936-11.c
+ e238a230ac1d25b0b4f423a7281faad4  gcc/testsuite/gcc.target/i386/pr120936-12.c
+ a81b630afcba5660992ed784d352f053  gcc/testsuite/gcc.target/i386/pr120936-2.c
+ 2817306738efb31ce761f4d0fd1b5900  gcc/testsuite/gcc.target/i386/pr120936-3.c
+ b9f557399123d006336ac6b37dd02821  gcc/testsuite/gcc.target/i386/pr120936-4.c
+ 46512d868f8da9434eacb5d2c2dd11a1  gcc/testsuite/gcc.target/i386/pr120936-5.c
+ dc16be3575b02803198cc00eac4f0ffe  gcc/testsuite/gcc.target/i386/pr120936-6.c
+ e46459a506a641702fdeaa8713b478db  gcc/testsuite/gcc.target/i386/pr120936-7.c
+ b56b7319ec16cc733aa742b3020839be  gcc/testsuite/gcc.target/i386/pr120936-8.c
+ c76df20d01878e92fcfede59dff4d377  gcc/testsuite/gcc.target/i386/pr120936-9.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
*************** e1a47196028cf3d7d1da3ad695db60b3  gcc/te
*** 87561,87567 ****
  7c666da60bf0f91a71a0449e0dc05fe9  gcc/testsuite/gcc.target/i386/pr92080-14.c
  be1e0e8eba7c0a6e5b4edccfb5c6ee30  gcc/testsuite/gcc.target/i386/pr92080-15.c
  7e4ed332aefc3d639a093680c490517e  gcc/testsuite/gcc.target/i386/pr92080-16.c
! af608aa8cd87cda88b12ce3bac34ddc2  gcc/testsuite/gcc.target/i386/pr92080-17.c
  0af0fd636c3a72d334625b16a51242d3  gcc/testsuite/gcc.target/i386/pr92080-18.c
  494c2614cf731267b1b0f41709bfbca9  gcc/testsuite/gcc.target/i386/pr92080-19.c
  72ca6ad41495194d27cf4156a0bea46d  gcc/testsuite/gcc.target/i386/pr92080-2.c
--- 87623,87629 ----
  7c666da60bf0f91a71a0449e0dc05fe9  gcc/testsuite/gcc.target/i386/pr92080-14.c
  be1e0e8eba7c0a6e5b4edccfb5c6ee30  gcc/testsuite/gcc.target/i386/pr92080-15.c
  7e4ed332aefc3d639a093680c490517e  gcc/testsuite/gcc.target/i386/pr92080-16.c
! ab02458a1670e94ea4873f9557f8c269  gcc/testsuite/gcc.target/i386/pr92080-17.c
  0af0fd636c3a72d334625b16a51242d3  gcc/testsuite/gcc.target/i386/pr92080-18.c
  494c2614cf731267b1b0f41709bfbca9  gcc/testsuite/gcc.target/i386/pr92080-19.c
  72ca6ad41495194d27cf4156a0bea46d  gcc/testsuite/gcc.target/i386/pr92080-2.c
*************** ed9ca6b6e7a5f74d080f80bb7fb9c2e9  gcc/te
*** 87629,87637 ****
  00cf6279198438d4bb24c7415d6332cd  gcc/testsuite/gcc.target/i386/pr93395.c
  8afa6fc9b9a61e004c0c1d39a49db1b1  gcc/testsuite/gcc.target/i386/pr93492-1.c
  c9eb5d38661bdb8e79a65ba04d5c0825  gcc/testsuite/gcc.target/i386/pr93492-2.c
! 291af42ebb9633dc68339da0ad2d68d9  gcc/testsuite/gcc.target/i386/pr93492-3.c
  dfe601dd62f0bb43b4f06b62a5ddeb31  gcc/testsuite/gcc.target/i386/pr93492-4.c
! 11eab759ab2b2f59db81f74fd0a8dc53  gcc/testsuite/gcc.target/i386/pr93492-5.c
  16c32cf33e45444168010f2d660b185b  gcc/testsuite/gcc.target/i386/pr93611.c
  9387bfde104289ddf53adc9ae95c43ef  gcc/testsuite/gcc.target/i386/pr93654.c
  0cbbfb6a80b114bf60fcfd0fce913fdb  gcc/testsuite/gcc.target/i386/pr93656.c
--- 87691,87699 ----
  00cf6279198438d4bb24c7415d6332cd  gcc/testsuite/gcc.target/i386/pr93395.c
  8afa6fc9b9a61e004c0c1d39a49db1b1  gcc/testsuite/gcc.target/i386/pr93492-1.c
  c9eb5d38661bdb8e79a65ba04d5c0825  gcc/testsuite/gcc.target/i386/pr93492-2.c
! bda63b7c2e9b673fe13b351d76185686  gcc/testsuite/gcc.target/i386/pr93492-3.c
  dfe601dd62f0bb43b4f06b62a5ddeb31  gcc/testsuite/gcc.target/i386/pr93492-4.c
! 614126f0d614a7561cad50b575054363  gcc/testsuite/gcc.target/i386/pr93492-5.c
  16c32cf33e45444168010f2d660b185b  gcc/testsuite/gcc.target/i386/pr93611.c
  9387bfde104289ddf53adc9ae95c43ef  gcc/testsuite/gcc.target/i386/pr93654.c
  0cbbfb6a80b114bf60fcfd0fce913fdb  gcc/testsuite/gcc.target/i386/pr93656.c
*************** d380df14afc6d38427db2430bb5640c7  gcc/te
*** 87901,87913 ****
  89c120add0d0cea3a2a86aaa0863dd2e  gcc/testsuite/gcc.target/i386/prefetchi-4.c
  7ac67198871c4cac2af2231517ff5658  gcc/testsuite/gcc.target/i386/prefetchi-5.c
  24ceb6d5f3f5cde4b9d852839bdb98ae  gcc/testsuite/gcc.target/i386/prefetchw-1.c
! 0bfc10937d08b32485b0d05f857c6d89  gcc/testsuite/gcc.target/i386/preserve-none-1.c
  c67d46e36d4a7e968e0fcaa3891ff96e  gcc/testsuite/gcc.target/i386/preserve-none-10.c
  811a5506483777c40996276aca5ecc5e  gcc/testsuite/gcc.target/i386/preserve-none-11.c
! 64c5b13a6ffc0b426560cc93070e7303  gcc/testsuite/gcc.target/i386/preserve-none-12.c
! e48e20c32b11ede1355b06424998d843  gcc/testsuite/gcc.target/i386/preserve-none-13.c
! 8a0814eb09cb30cd1317bdec233e2e52  gcc/testsuite/gcc.target/i386/preserve-none-14.c
! 6494b067ec12b0ad23d7341400c53771  gcc/testsuite/gcc.target/i386/preserve-none-15.c
  6f0b161e274978fc465705acdebb3969  gcc/testsuite/gcc.target/i386/preserve-none-16.c
  2a363e5704fe55548d7ba10d2285e825  gcc/testsuite/gcc.target/i386/preserve-none-17.c
  39b85791a1f4d96f8f6146862340680f  gcc/testsuite/gcc.target/i386/preserve-none-18.c
--- 87963,87975 ----
  89c120add0d0cea3a2a86aaa0863dd2e  gcc/testsuite/gcc.target/i386/prefetchi-4.c
  7ac67198871c4cac2af2231517ff5658  gcc/testsuite/gcc.target/i386/prefetchi-5.c
  24ceb6d5f3f5cde4b9d852839bdb98ae  gcc/testsuite/gcc.target/i386/prefetchw-1.c
! fddba6de81aa7fea6584273dc6b3df67  gcc/testsuite/gcc.target/i386/preserve-none-1.c
  c67d46e36d4a7e968e0fcaa3891ff96e  gcc/testsuite/gcc.target/i386/preserve-none-10.c
  811a5506483777c40996276aca5ecc5e  gcc/testsuite/gcc.target/i386/preserve-none-11.c
! 49e228ad7941593d66503db15bb82424  gcc/testsuite/gcc.target/i386/preserve-none-12.c
! af443a637b1bbe94c00fa9497d96f7bb  gcc/testsuite/gcc.target/i386/preserve-none-13.c
! f57a82588645a68210589a6abc683ddb  gcc/testsuite/gcc.target/i386/preserve-none-14.c
! b6a1cde1548013b66be47a3cd36c9945  gcc/testsuite/gcc.target/i386/preserve-none-15.c
  6f0b161e274978fc465705acdebb3969  gcc/testsuite/gcc.target/i386/preserve-none-16.c
  2a363e5704fe55548d7ba10d2285e825  gcc/testsuite/gcc.target/i386/preserve-none-17.c
  39b85791a1f4d96f8f6146862340680f  gcc/testsuite/gcc.target/i386/preserve-none-18.c
*************** e48e20c32b11ede1355b06424998d843  gcc/te
*** 87916,87922 ****
  d18b3df1e3458bb621e6394d59a53306  gcc/testsuite/gcc.target/i386/preserve-none-20.c
  56306971eee8f608a87c6e88e789d411  gcc/testsuite/gcc.target/i386/preserve-none-21.c
  7fca32d4ccac7b8ffc8719cb67604ae3  gcc/testsuite/gcc.target/i386/preserve-none-22.c
! 411c3b60ccb6232ce09f2cc01b9f9eb3  gcc/testsuite/gcc.target/i386/preserve-none-23.c
  2fc1e21de8668eb81132effc8f8e0472  gcc/testsuite/gcc.target/i386/preserve-none-24.c
  36f2af5f54d89fbd52ffdf607d1db23c  gcc/testsuite/gcc.target/i386/preserve-none-25.c
  9d3023190f814ae2fde64e821fac4c21  gcc/testsuite/gcc.target/i386/preserve-none-26.c
--- 87978,87984 ----
  d18b3df1e3458bb621e6394d59a53306  gcc/testsuite/gcc.target/i386/preserve-none-20.c
  56306971eee8f608a87c6e88e789d411  gcc/testsuite/gcc.target/i386/preserve-none-21.c
  7fca32d4ccac7b8ffc8719cb67604ae3  gcc/testsuite/gcc.target/i386/preserve-none-22.c
! 8278a9c28c9e6fe75e54ebbf4ae4f66a  gcc/testsuite/gcc.target/i386/preserve-none-23.c
  2fc1e21de8668eb81132effc8f8e0472  gcc/testsuite/gcc.target/i386/preserve-none-24.c
  36f2af5f54d89fbd52ffdf607d1db23c  gcc/testsuite/gcc.target/i386/preserve-none-25.c
  9d3023190f814ae2fde64e821fac4c21  gcc/testsuite/gcc.target/i386/preserve-none-26.c
*************** b501a62760784713bfc543b44dc04688  gcc/te
*** 87928,87935 ****
  620285a0fd83ac6165eadbe66fc5638c  gcc/testsuite/gcc.target/i386/preserve-none-30b.c
  637c2bec6ad35c42f783e0a3b31021f4  gcc/testsuite/gcc.target/i386/preserve-none-4.c
  aeb341ec372b4ad17f7d946f744a6d78  gcc/testsuite/gcc.target/i386/preserve-none-5.c
! a694ad147ddc2e431f3caf06ad842b64  gcc/testsuite/gcc.target/i386/preserve-none-6.c
! fd1343642cf1783c243f12b74e234a34  gcc/testsuite/gcc.target/i386/preserve-none-7.c
  46ee3b21d6fbb4874e2cc387dc76894f  gcc/testsuite/gcc.target/i386/preserve-none-8.c
  dbaa3ccce2e7bd8e259f97b2d272cf9c  gcc/testsuite/gcc.target/i386/preserve-none-9.c
  4561455bd0f6ca8ce0b0f477f2897ee2  gcc/testsuite/gcc.target/i386/ptwrite1.c
--- 87990,87997 ----
  620285a0fd83ac6165eadbe66fc5638c  gcc/testsuite/gcc.target/i386/preserve-none-30b.c
  637c2bec6ad35c42f783e0a3b31021f4  gcc/testsuite/gcc.target/i386/preserve-none-4.c
  aeb341ec372b4ad17f7d946f744a6d78  gcc/testsuite/gcc.target/i386/preserve-none-5.c
! 7b282944b063006f6e2ff7c67ebb74b7  gcc/testsuite/gcc.target/i386/preserve-none-6.c
! 192f3b1fb9a6904f97a6c55cb3648351  gcc/testsuite/gcc.target/i386/preserve-none-7.c
  46ee3b21d6fbb4874e2cc387dc76894f  gcc/testsuite/gcc.target/i386/preserve-none-8.c
  dbaa3ccce2e7bd8e259f97b2d272cf9c  gcc/testsuite/gcc.target/i386/preserve-none-9.c
  4561455bd0f6ca8ce0b0f477f2897ee2  gcc/testsuite/gcc.target/i386/ptwrite1.c
*************** c50397e875cfec6d318c0ef41dbe3596  gcc/te
*** 88913,88919 ****
  b24ba66b3104508ec7610b49a0fdd32f  gcc/testsuite/gcc.target/i386/vect-pr115385.c
  890caaae0bae6a4b8a542ac986a9465e  gcc/testsuite/gcc.target/i386/vect-pr115895.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
  d9f045b5fbe212b9521b7587a8323146  gcc/testsuite/gcc.target/i386/vect-pragma-target-1.c
  e28ced0a0e02af5ead87e8e207052bbd  gcc/testsuite/gcc.target/i386/vect-pragma-target-2.c
--- 88975,88982 ----
  b24ba66b3104508ec7610b49a0fdd32f  gcc/testsuite/gcc.target/i386/vect-pr115385.c
  890caaae0bae6a4b8a542ac986a9465e  gcc/testsuite/gcc.target/i386/vect-pr115895.c
  515f451843087285cae4273f2866f93b  gcc/testsuite/gcc.target/i386/vect-pr67800.c
! 2d95d6fd458e66a2e6ff98ed01238327  gcc/testsuite/gcc.target/i386/vect-pr82426-2.c
! 7677260c5e9615f8adc02d0d8774dfd6  gcc/testsuite/gcc.target/i386/vect-pr82426.c
  c94d34a8add7450a1085d0dbbfca7403  gcc/testsuite/gcc.target/i386/vect-pr97352.c
  d9f045b5fbe212b9521b7587a8323146  gcc/testsuite/gcc.target/i386/vect-pragma-target-1.c
  e28ced0a0e02af5ead87e8e207052bbd  gcc/testsuite/gcc.target/i386/vect-pragma-target-2.c
*************** f1ea877f35ca466bb967858a715d4f6c  gcc/te
*** 91233,91239 ****
  c02928696f09c7fc9c99174083ecb49c  gcc/testsuite/gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-2.c
  04b3fc34bfccb1856530015004e53b0f  gcc/testsuite/gcc.target/powerpc/builtin-fegetround.c
  47bacabfccc9e78ddef3b0b6f2d15106  gcc/testsuite/gcc.target/powerpc/builtin-vec-sums-be-int.c
! ac5fc8abef0ee25e3006e84d9ec6e994  gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
  a8f9adaf01b9c4605ccf3a2b91395d9a  gcc/testsuite/gcc.target/powerpc/builtins-1-be-folded.c
  d7a191d70b9b9996b4b19f79964cf6c2  gcc/testsuite/gcc.target/powerpc/builtins-1-le-folded.c
  3caa2573bbad9fdef8b5573d969fe446  gcc/testsuite/gcc.target/powerpc/builtins-1-p10-runnable.c
--- 91296,91302 ----
  c02928696f09c7fc9c99174083ecb49c  gcc/testsuite/gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-2.c
  04b3fc34bfccb1856530015004e53b0f  gcc/testsuite/gcc.target/powerpc/builtin-fegetround.c
  47bacabfccc9e78ddef3b0b6f2d15106  gcc/testsuite/gcc.target/powerpc/builtin-vec-sums-be-int.c
! 0a0b275d0be04b242c475f65eea6a60a  gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
  a8f9adaf01b9c4605ccf3a2b91395d9a  gcc/testsuite/gcc.target/powerpc/builtins-1-be-folded.c
  d7a191d70b9b9996b4b19f79964cf6c2  gcc/testsuite/gcc.target/powerpc/builtins-1-le-folded.c
  3caa2573bbad9fdef8b5573d969fe446  gcc/testsuite/gcc.target/powerpc/builtins-1-p10-runnable.c
*************** d66b77cd3223498c6e933305c7a7ca13  gcc/te
*** 94324,94335 ****
  80b46a59e47fe5cb83685a398cf89368  gcc/testsuite/gcc.target/riscv/mcpu-tt-ascalon-d8.c
  dcced0272e68ebd6c311b4e558088af7  gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-kunminghu.c
  65e147ffc7d34e1068d4e84bee668245  gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-nanhu.c
! b5f6d51bd0ec8d7a190149dbf3823c23  gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
! 08941392c68d87472f730253b5192799  gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
! 75a1f8dd61c21fdc1a6b18247ee215b8  gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
! 2b8458a91aa33c9fd6652078b93152a2  gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
! eaa915618c20093072ed285e03e4892d  gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
! 63ae3116854324d9bf8f1302d194f07f  gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
  3311f6659838594b5135f5297b263bd1  gcc/testsuite/gcc.target/riscv/mem-extend.c
  16126a8d4ef67d573cd4276fa7c8cb6f  gcc/testsuite/gcc.target/riscv/memcpy-nonoverlapping.c
  2dd2de1f802134107e9ed820836a3aa7  gcc/testsuite/gcc.target/riscv/memset-nonoverlapping.c
--- 94387,94398 ----
  80b46a59e47fe5cb83685a398cf89368  gcc/testsuite/gcc.target/riscv/mcpu-tt-ascalon-d8.c
  dcced0272e68ebd6c311b4e558088af7  gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-kunminghu.c
  65e147ffc7d34e1068d4e84bee668245  gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-nanhu.c
! 19de394d94684c3e89cb1d285acca034  gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
! b90deaaee0e0ff0b92a31d7860a8a612  gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
! 2dac1a57501dfbf980c64965da3faff3  gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
! ff231335f542050ad4fec2d9fb0a1456  gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
! f4d15f0f76038ce87073049d4d456ff6  gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
! df1e6186129f1056cb9287da6e0a2c85  gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
  3311f6659838594b5135f5297b263bd1  gcc/testsuite/gcc.target/riscv/mem-extend.c
  16126a8d4ef67d573cd4276fa7c8cb6f  gcc/testsuite/gcc.target/riscv/memcpy-nonoverlapping.c
  2dd2de1f802134107e9ed820836a3aa7  gcc/testsuite/gcc.target/riscv/memset-nonoverlapping.c
*************** a7cdfe664ef8616a70af588b3a79aa27  gcc/te
*** 94715,94721 ****
  8c4f6b44c5539860ac14e0e52ee563cd  gcc/testsuite/gcc.target/riscv/pr118146-1.c
  b22a15e86fb70037feb383a055b6e153  gcc/testsuite/gcc.target/riscv/pr118146-2.c
  1fa594621b25166287d6d30b0daf189b  gcc/testsuite/gcc.target/riscv/pr118170.c
! b2926d7d0c3ebd0521abd5b1bd13e5f8  gcc/testsuite/gcc.target/riscv/pr118241.c
  8c91cf2796ff0e2ea816e9d35b520e8d  gcc/testsuite/gcc.target/riscv/pr118248.c
  2635a8ce323c6f470fcbe6331ea7497b  gcc/testsuite/gcc.target/riscv/pr118410-1.c
  acc8133b241415ea173b4e1e06147a04  gcc/testsuite/gcc.target/riscv/pr118410-2.c
--- 94778,94785 ----
  8c4f6b44c5539860ac14e0e52ee563cd  gcc/testsuite/gcc.target/riscv/pr118146-1.c
  b22a15e86fb70037feb383a055b6e153  gcc/testsuite/gcc.target/riscv/pr118146-2.c
  1fa594621b25166287d6d30b0daf189b  gcc/testsuite/gcc.target/riscv/pr118170.c
! 2bc8f4e965541e4fc96271a069a25fb6  gcc/testsuite/gcc.target/riscv/pr118241-b.cc
! a0414657daa6221b34457b2d257d1cf3  gcc/testsuite/gcc.target/riscv/pr118241.c
  8c91cf2796ff0e2ea816e9d35b520e8d  gcc/testsuite/gcc.target/riscv/pr118248.c
  2635a8ce323c6f470fcbe6331ea7497b  gcc/testsuite/gcc.target/riscv/pr118410-1.c
  acc8133b241415ea173b4e1e06147a04  gcc/testsuite/gcc.target/riscv/pr118410-2.c
*************** bf00cac22e30fab76ac74c7b2e5af207  gcc/te
*** 94723,94731 ****
  3852261f17cf66abc75e896fa7c07501  gcc/testsuite/gcc.target/riscv/pr119971.c
  d7b10be51739976c3b0ea4b16c390ba8  gcc/testsuite/gcc.target/riscv/pr120137.c
  a21d4b9178b49fb0fb65552af24e2832  gcc/testsuite/gcc.target/riscv/pr120154.c
! ea446029e0fd8e2a167fbb85bdedc0cc  gcc/testsuite/gcc.target/riscv/pr120223.c
  d90629fcb060c4d6b1e7e38318f80843  gcc/testsuite/gcc.target/riscv/pr120333.c
  4f37f1ab5c897b7d856cd69b7a0d1b97  gcc/testsuite/gcc.target/riscv/pr120368.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
  10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
  c2ac0b53d6af56f5ec5bded3d252dddc  gcc/testsuite/gcc.target/riscv/pr93202.c
--- 94787,94797 ----
  3852261f17cf66abc75e896fa7c07501  gcc/testsuite/gcc.target/riscv/pr119971.c
  d7b10be51739976c3b0ea4b16c390ba8  gcc/testsuite/gcc.target/riscv/pr120137.c
  a21d4b9178b49fb0fb65552af24e2832  gcc/testsuite/gcc.target/riscv/pr120154.c
! 372a3609365f2da8909b851ec64299ba  gcc/testsuite/gcc.target/riscv/pr120223.c
  d90629fcb060c4d6b1e7e38318f80843  gcc/testsuite/gcc.target/riscv/pr120333.c
  4f37f1ab5c897b7d856cd69b7a0d1b97  gcc/testsuite/gcc.target/riscv/pr120368.c
+ d8e76b4cd45daa82499151eedc966298  gcc/testsuite/gcc.target/riscv/pr120659.c
+ 0cdcf97373ed486ded9f3c10ef04348d  gcc/testsuite/gcc.target/riscv/pr120714.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
  10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
  c2ac0b53d6af56f5ec5bded3d252dddc  gcc/testsuite/gcc.target/riscv/pr93202.c
*************** e5794d88a1109065814ce4f8f2246087  gcc/te
*** 95544,95549 ****
--- 95610,95616 ----
  1064dbbae3b2f7e04909839e8152b061  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
  e7ca8fe6239410f9affbff1106fd2d15  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr119114.c
  446b0327be112ddedf3f8db6bc96d603  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr119224.c
+ 97a2ebde6fd6564be1fe7abc131eb066  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c
  21cad2ea7a1a5a2e645eed965ace99dd  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-1.c
  600f9912922423684f29884007330d55  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-2.c
  b81941261eb74f03f85b72b205359f75  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-3.c
*************** b3623744beb4280e52fad318705b4610  gcc/te
*** 96025,96033 ****
  16920d9f62e5d09248040c3ec8404e32  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-run-4-u32.c
  1c598ec4fd1e5289a617380d3efc3ff6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-run-4-u64.c
  95310899ac17575420553ab9eb737108  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-run-4-u8.c
! 7ca5e9f7654e24638954dc4ce2bd2587  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u16.c
! e64314fec15c9ef406fa213999aa540c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u32.c
! 23391d9cbe5a76315076476f9dc4de52  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u8.c
  1d1189d58bf415555e2ecfea30217a85  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-run-1-u16.c
  2c289d5ac69c48a17f4c5a53766ddb24  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-run-1-u32.c
  f0786b4f9a93c9157cba05550f7e0d1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-run-1-u8.c
--- 96092,96100 ----
  16920d9f62e5d09248040c3ec8404e32  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-run-4-u32.c
  1c598ec4fd1e5289a617380d3efc3ff6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-run-4-u64.c
  95310899ac17575420553ab9eb737108  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-run-4-u8.c
! 21b34458f735729383e5d5cf8ec45718  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u16.c
! 564271f5cf181c68a64fafe02d00c15e  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u32.c
! 6bb344b349801093203dc47415617279  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u8.c
  1d1189d58bf415555e2ecfea30217a85  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-run-1-u16.c
  2c289d5ac69c48a17f4c5a53766ddb24  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-run-1-u32.c
  f0786b4f9a93c9157cba05550f7e0d1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-run-1-u8.c
*************** f95d4e0ecca41e722099be6b52b3efe7  gcc/te
*** 97028,97046 ****
  35044d6a949091b4c23addf451f035ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-rv64.c
  0026b1e2310b7242895d290cff3f1e9e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h
  2d052315288cbb1a315add9fb76abbc3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vreinterpet-fixed.c
! 5a5c2677b3f4ba03f723fd5717a8f5b6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c
! 9eaf25a81c625134b6ab909d9835ffc9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c
! 7627748916fa8442c4996ee421fad2d7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c
! 4e79f2320adaa0314f1fd55b6fd577bc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
! 4dfde55f6e069bc523bbc2fc76772192  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
! ed116c4f631de51cf2f529159fe5be2b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c
! 7d7ac98d52ecfd2edbe272e19bea452e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
! fe29fd37e36557ac8f4f9847b0e1adcd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
! a50f72bc52776a0bd8d721cb4ed28480  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
! 81b1a38be538be17414c4c19076935cd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
! a99188b93839ea6f8bd118dd66772f14  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
! 24de1ab5a0bfa7d27d6ac8253dca1bf0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c
! 89b3d4a2405bbd7f73e7a706ecf396dd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h
  1c4119935df2b0a9b4ab87cf47a3cdd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_data.h
  8a877888b137cdf6de2dae4c42a62fc4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_run.h
  87c4adf3bb3fa8b556a37c108b196308  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c
--- 97095,97113 ----
  35044d6a949091b4c23addf451f035ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-rv64.c
  0026b1e2310b7242895d290cff3f1e9e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h
  2d052315288cbb1a315add9fb76abbc3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vreinterpet-fixed.c
! 7c9da26a36d1399c84c04f88bfa33670  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c
! 50728df578c72141c84e19539aa9a936  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c
! fea54bb5a266eff0820350de1af77b72  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c
! 2153285f7fded17c7f8f30fdff3b49a1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
! 38388be2ff42d5bb10ca4cf7dccc5077  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
! 5daea474bc1bfdba230c7dac9ff7eef5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c
! eb1f45d4fcd35f278e7709b660455f04  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
! 1320b062477b98c6fe14d5846140fbf6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
! 6cfd7ead5e3067abad015bc85be198f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
! 2852596345847f098b0fe72cd12b105e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
! 29c3cd53b83ec02101bcaa183d0cc3aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
! 80f6cd8c4545ede87b8410857115bc89  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c
! 5e9dea14b882222608d901654711d9f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h
  1c4119935df2b0a9b4ab87cf47a3cdd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_data.h
  8a877888b137cdf6de2dae4c42a62fc4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_run.h
  87c4adf3bb3fa8b556a37c108b196308  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c
*************** b2042d3fd17f57d0b81698e6174c2095  gcc/te
*** 97055,97116 ****
  06e92de882ce989fe90d826f329e1e91  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c
  bdefbf3eeea1f08fffd42d2bde350dea  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f32.c
  5a1f7f5afdbbfcecd97cb5d7098ff707  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f64.c
  7da184cf2d6603eeb3aaada1849c1d87  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c
  9c4307fc1db29e045adc4a9f15ddca66  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f32.c
  0515f842a58d067880c5658e5addbece  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f64.c
  dcff7589b154cab465b0484df4cf3e9a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
  dfc52616a58f523908e41a5a4e0f72b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f32.c
  813960aebe71c2622a67c2b2649a8973  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f64.c
! dd7808454602536be88e14f7d10f486f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
! fa4ac03e2d933578c31ca21f07ffc9f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
! ec224a03154ed25208d9fadaa99e389d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
! a294639dc592d5a79e3ebffd1a593df0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
! 5f99c00589b4d4f32eed18f8398c77f8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! c77905d6588c1a315c61edc1ea4882d3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! 9b65fa71ced0d5be06477b3ca3bebddf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
! 01973ff1d0f93e06ab74ae604762103e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
! d1668bd03963304916eb77e5bb9ae2a2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
! 12025ed008c85151e36d2b96ecfbf612  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
! 888fc2394d3b6f9c7e35950ebe32dbaa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
! 38323e2d60e44a0ddabe4f44a4d0d839  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! 8a39d7e64a46dd723960bffadc3e63f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! 0be9ddfb978024f01c7240fdb30f4979  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! 2626fb34e6d891aa5b5d94fdb26397f8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
! dabe3bcc242a421be2686c4364259630  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
! cd616239c9c47441ca489ea4964949e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
! 6c4c08f836984218f5c02b2d9c87a193  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
! 828039e9c1e96b046bb47c823fd296f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
! f108a5722bdabafd06db6e85101ecbb0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! 0541efe5bd6c3df2621972e034af4e70  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! f36d88215d41aea8317665598d9f104f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! 19d77035ace4fc34bb46458a9d3a3dce  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
! 227638aa9db34ca3ff613449893d01b9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
! 865b405c46529b1cfa031526e6550635  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
! 8e28677a3b66e91211f40161b6612cd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
! a9a7b200d108af9cade843626a284798  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
! f556ef945e3c76a7a92d356f4e938183  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
! ec33d6b3a7988cf973111d0e5607c705  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
! c2a225a8f2339e0aa7dcd53f3d611cc3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
! 285dc58e493ca85b84145bec4e1d5d65  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
! 500784491622426d93099cd55044c374  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
! 99a98cfbd756fa439da2ae7f2b87f678  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
! 352abf4ca6ef05b6a3991013abc0da7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
! b63ce9d06bf3917eba4fab4cce7c2e95  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
! ae11f45fda59a4dd480816bb0974b884  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
! 2248cb5568d1bb8f45a72fd79b9cd11e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
! dc6bf93d15e188921b5cab3461eeae51  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
! b29d64155506de608c570e84df76dfba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
! d170ab81f6c282c0436d1c1f7a36b973  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
! 67ab5de1138b35e06133eb6ce99150b0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
! ec8562df80b24e7892b6c369531a3730  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
! 8e73711b84b47950cfdcb9db3de68025  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
! 97fcd42af923bbad5b2011ef4e012a71  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
! 3be12556c9a79063d9ac8f586aa1587c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
! 4bf21d665583aa2f99130efee8b413bb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
! d75764706cc651d38969853c2ae36ad4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
! 6af3dab3c5ead6211d31e3610a988903  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
! ba4b12aa252ba0ff346bea46692b4067  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! 549c3e9bdfbf61845f01bc62e3dcdb9f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  f82d1e3332267f884d6990983f9a5c50  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c
  9f3b8184fd845e5425e43d0e12950ff1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c
--- 97122,97189 ----
  06e92de882ce989fe90d826f329e1e91  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c
  bdefbf3eeea1f08fffd42d2bde350dea  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f32.c
  5a1f7f5afdbbfcecd97cb5d7098ff707  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f64.c
+ 8ad4b4a53f3eda1aab2cf3f144a85bf0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c
+ 87786f9293eedd4f262ccf4e09d478f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c
+ 634b2fb5bed1d8ed41e55b271de9400c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c
  7da184cf2d6603eeb3aaada1849c1d87  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c
  9c4307fc1db29e045adc4a9f15ddca66  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f32.c
  0515f842a58d067880c5658e5addbece  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f64.c
+ c4beb3109541d0de430a708a653ddd11  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c
+ 585be3a51575d87dbf0cd1d5cbe0d062  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c
+ 127ff44000f971b8e7e5ba53d71a55fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c
  dcff7589b154cab465b0484df4cf3e9a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
  dfc52616a58f523908e41a5a4e0f72b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f32.c
  813960aebe71c2622a67c2b2649a8973  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f64.c
! 5c8f9759319fefc9dd810761dd81be93  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
! 2001b4722e8257b6e5b0f5fb6ec5327f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
! 716e14e154c48cb3c56a1f3b96fc4949  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
! 23a622522c7cf69e5015c72d8e64c20f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
! fe76a50d7d2bfbb09a95cfdc870c5a58  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! 921e064b1942db3570f71688901d6f1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! 98873e11ae359ac12e78de0bbc15ea34  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
! 4ec78081df2f7e81954aab0e75d811ba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
! 73ccc1997a64d5a2ff26a275b6fd4402  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
! 1fff709cefe8811448e95e26eccc9e15  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
! 957a7377794756f5202a70399336bfcb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
! 5f867f355f9276e0accbefeddc380531  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! cf92ab1fc4a82779fedf31229361f8f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! 90321b085c0e080446cd8279b8c538e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! 58bc268739642ed05278bd0e0f13a3ce  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
! a910949e56a3ef0e897b90e588754b3d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
! 58a1ddd673fe52a2c5c0bbd9abae23e9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
! 58505f5bcc938f5f5f6c58a516d377f2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
! b0e3cc7f8391c889b4dbee365486b69b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
! 0d70c3e28dbfbf54947df12bef668387  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! 79037fe4dc3b77d0c479a553be761ffe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! 3ee990b72cb1f95d624564adf5ecc447  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! 7d1d0c555dd4cbeab1ac3b5a60d234b3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
! 84e2faf4513ba470a86ed4add88943ab  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
! 1fe72c3570113b3924b78cfb84f21906  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
! 86eb22f92c520c01a55612c135c9f1a0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
! d0c70611e2dfae4ac175d5506977b729  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
! 05e94ae6d47261a8d8b7d3cff46f25e4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
! f5dc40a82b7c036577fcc72024184f19  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
! 2e2eae8aaff09ef0f65f78335991c2e0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
! e35b6b8d6395fc6a016f0a149caad6b5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
! 8855c8bc73c7fcd3420091cb56a6f20b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
! f42149bc562f9f18ba3bf4e647b6887b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
! f1933bd0bebe6f771e9fb6c39f56cbff  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
! cdf97a91860a705746f74f7e6c93b5f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
! 1e1fc97e22322f988dce595def6fe449  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
! 5157adb717b30c261cc526f84f2eb666  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
! 730f79a8aed25f4a0a3a60fd7a716294  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
! 74a13c6598de7d87d8e22ffd90478b5c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
! 284e77c828fb264faf6caf3d9df1f3f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
! 5a232ff3477cda770403ec2b1fbf8aba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
! 14873c0180343f9be00d8a619768b3e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
! bbab8c9455f6e4f97e722ce16c200607  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
! 9f6452aa0e32390fe844c815c84a3de4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
! 38c5f36cf96f9240de3a2e233edb9cdc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
! 047e370cea424e3ed1c8540a08f046c8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
! b7a3bb5893c188ffb2b0336cd8014537  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
! bcf8b479d013180b261f51d17d36aeed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
! cc4f99651f3d3cc5a9946437662841f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! c0401905b0a95a698a06fb5d1cc86649  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  f82d1e3332267f884d6990983f9a5c50  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c
  9f3b8184fd845e5425e43d0e12950ff1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c
*************** ab1ea727d2290cb4de9b7e7d2093eec9  gcc/te
*** 97196,97205 ****
--- 97269,97286 ----
  fdff265e90fd902eca5c517ac99fba20  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c
  8fad85d94c2ebb8b2c7a97448400e42d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c
  abd281c20ca983dae4ef633a58d18c7d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c
+ 6229cd9e08933ce479a9cb59564c1f79  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i16.c
+ a5dd444163542d9f25596fc735060332  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i32.c
+ 1431e7bdad0e4afe39ac3b3fec7d08b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i64.c
+ ca1c1eba4bbdc2084d01e4b4ab1b3601  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i8.c
  c49b5794481494dbda1c29ece2adec2e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-u16.c
  df9e0c9800ce12120d8d53bf84d3105e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-u32.c
  501ae6cc28ba3b917c2de06df7726a27  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-u64.c
  df6190dacbf26bd43b381290da73d10a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-u8.c
+ 2c413baef58c32fa638317386bb6adb6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u16.c
+ a6db8ffba7d62150d3bcffc5ed474cdb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u32.c
+ 95acf3267aef2576362e82f345479fd5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u64.c
+ 4c57c0630d94eee378a1a88ab7de195a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u8.c
  63ecf62c70647f5af85690b50449a4a3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsub-run-1-i16.c
  e0a029ed9e4f9f4ab4383ebb4a63f046  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsub-run-1-i32.c
  7ec38b653f84c7041b0b862f361c9822  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsub-run-1-i64.c
*************** c68a73138459484ead0cddce6ce27d08  gcc/te
*** 97933,97939 ****
  eaed30eccbeb952165411cfd2c789b72  gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
  96272d16f134fa97f27114f27089793a  gcc/testsuite/gcc.target/riscv/rvv/base/pr118931-run-1.c
  b8ddadeddd15bd6f079e943b9036825d  gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c
! 8d1ba7c37ca5471a617b0d18076298c0  gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
  3086321c9a12d3eecd8f1f9ad8ecac7a  gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c
  c05efbdfaafc64ad34b3d1c4b60a38eb  gcc/testsuite/gcc.target/riscv/rvv/base/pr90263.c
  be75fd39ea9b3d01e3e22294359fb482  gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c
--- 98014,98020 ----
  eaed30eccbeb952165411cfd2c789b72  gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
  96272d16f134fa97f27114f27089793a  gcc/testsuite/gcc.target/riscv/rvv/base/pr118931-run-1.c
  b8ddadeddd15bd6f079e943b9036825d  gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c
! abe5cb852d5c8b368720c2010f7dde5c  gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
  3086321c9a12d3eecd8f1f9ad8ecac7a  gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c
  c05efbdfaafc64ad34b3d1c4b60a38eb  gcc/testsuite/gcc.target/riscv/rvv/base/pr90263.c
  be75fd39ea9b3d01e3e22294359fb482  gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c
*************** ddd1d9abea631f3e020388dafc07d465  gcc/te
*** 98211,98222 ****
  b24cc019652df35507375fa00adc3788  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-19.c
  47b5f867ac8b47962d877f8ed6592b98  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-2.c
  f94586f8a444e654ba0f0cada142b1b5  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-20.c
! e9790061a65ac76dacf9f734bd855739  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-21.c
  256d22070cd91b8806a778e254692355  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-22.c
  ed416055de6cdce7b0aeccd46bb98e00  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-23.c
  7a9b2413a6e8a3a78e885676ba970267  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-24.c
  be1cc3999aa851cf17480e41a214079a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-25.c
! d74cd41f6d59beacc916eb88d39e50d6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-26.c
  987339bf0d8453df97965a5ec9631729  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-27.c
  854162a9a442f47706303e0ae14e994b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-28.c
  9ed206cad21ff52eb51d3a22b9f57b5b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-29.c
--- 98292,98303 ----
  b24cc019652df35507375fa00adc3788  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-19.c
  47b5f867ac8b47962d877f8ed6592b98  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-2.c
  f94586f8a444e654ba0f0cada142b1b5  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-20.c
! 70c594d513a97c55533183beb92827f2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-21.c
  256d22070cd91b8806a778e254692355  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-22.c
  ed416055de6cdce7b0aeccd46bb98e00  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-23.c
  7a9b2413a6e8a3a78e885676ba970267  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-24.c
  be1cc3999aa851cf17480e41a214079a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-25.c
! 997b91ec2181d32ed7486a8b6ccfc1b2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-26.c
  987339bf0d8453df97965a5ec9631729  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-27.c
  854162a9a442f47706303e0ae14e994b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-28.c
  9ed206cad21ff52eb51d3a22b9f57b5b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-29.c
*************** cb2167e096c8381b0cdad25496ab8e72  gcc/te
*** 98227,98239 ****
  f93d01a4769012de04e02ac44e05cd46  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-33.c
  e4457fcb3c7eb7d9b0612ce8e58acd93  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-34.c
  4b3f57506f7bb41746d7ebfed21be19d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-35.c
! ee08e471795cc953a8159c8367235ec2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c
  1b0c37572b837f0e0c8f7e03f1c0b00b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c
  fc113c8d95b51954d7f9871c93446b9f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-38.c
! a257665e3d63cec5cac3c4516dc204c9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c
  17d98ea8a8a651bc5ea1c12a8a76e844  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c
  e982f410da548fc73557e74cb4ca7db4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-40.c
! f70ac786c994b15fc8f8329c3cb2482d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c
  5536be35d117b4e0304189c057e3c4ea  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-42.c
  2c1fdce0036da496dd235afc113768d6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-43.c
  2497d83b565b03f282e5bbb58bb7a7bc  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-44.c
--- 98308,98320 ----
  f93d01a4769012de04e02ac44e05cd46  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-33.c
  e4457fcb3c7eb7d9b0612ce8e58acd93  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-34.c
  4b3f57506f7bb41746d7ebfed21be19d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-35.c
! db0a5b3b6100b7acab9712793560a780  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c
  1b0c37572b837f0e0c8f7e03f1c0b00b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c
  fc113c8d95b51954d7f9871c93446b9f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-38.c
! a45963b5d080e72125bbac7d426add30  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c
  17d98ea8a8a651bc5ea1c12a8a76e844  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c
  e982f410da548fc73557e74cb4ca7db4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-40.c
! 419dc6bfe8177790c95f1c53e74f8179  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c
  5536be35d117b4e0304189c057e3c4ea  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-42.c
  2c1fdce0036da496dd235afc113768d6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-43.c
  2497d83b565b03f282e5bbb58bb7a7bc  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-44.c
*************** f36bd3acc515a31959dd9e5b03716209  gcc/te
*** 98590,98596 ****
  42371f3cec1f548824c992973fa73962  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-2.c
  a2b89786800f8429d801237a3b473a0e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-20.c
  c621e73f024d332f72690f6f94c043ad  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-21.c
! 85bcdbbc17d5c013303d2e8c77393bdc  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-22.c
  3c84cff56b0818c6d06fb89a91dfcc08  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-23.c
  1b90c5c8cf6499b4add94b7f03fc2fa4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
  188c49b218b64f54ee64bd0ee2ade48f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-3.c
--- 98671,98677 ----
  42371f3cec1f548824c992973fa73962  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-2.c
  a2b89786800f8429d801237a3b473a0e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-20.c
  c621e73f024d332f72690f6f94c043ad  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-21.c
! 0e7b4d3b6bf1e7cf2ec65e3b80ac0368  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-22.c
  3c84cff56b0818c6d06fb89a91dfcc08  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-23.c
  1b90c5c8cf6499b4add94b7f03fc2fa4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
  188c49b218b64f54ee64bd0ee2ade48f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-3.c
*************** fff2976108519ec62768f18b012c9590  gcc/te
*** 98612,98626 ****
  949f235392597ff9b824f9430107ab0e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-12.c
  e827f0ca0f57ceeee3bfb3ebf59daa93  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-13.c
  22dbf2d3870aedbdac2461ccd96f7e6a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-14.c
! 6d5d426c0976b78985fb6472b9f31c41  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c
  152d71e37b937c99de6c3186ebc09167  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-16.c
  b767f73987768bb7d7766b74f2414566  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-17.c
  764110eeea245506020fffc7c97b96fd  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-18.c
  27b3163c7cc3ddd01b9ada46db53df1a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-19.c
! 164b8945ed6553400e691e2b94b9eb83  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c
  ad64c08f922f72ad597d7b6f3fe69035  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-20.c
  f353ff22b3d33ab76e2d0ef9b8df7a38  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-3.c
! ed887cfb0c3d7c35703bd016f17dafc4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c
  d5f9bb03f6b98e53fb108d8fd014f713  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-5.c
  055bfb9c23b3e7eb33041e6f2cc311f6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-6.c
  b3330bdc7e59d45053b22dc4e53f3689  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-7.c
--- 98693,98707 ----
  949f235392597ff9b824f9430107ab0e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-12.c
  e827f0ca0f57ceeee3bfb3ebf59daa93  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-13.c
  22dbf2d3870aedbdac2461ccd96f7e6a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-14.c
! 27ee9e0bbeed46697035a84b631ae9e2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c
  152d71e37b937c99de6c3186ebc09167  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-16.c
  b767f73987768bb7d7766b74f2414566  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-17.c
  764110eeea245506020fffc7c97b96fd  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-18.c
  27b3163c7cc3ddd01b9ada46db53df1a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-19.c
! d17a0185572fe7333bcae93211f2b815  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c
  ad64c08f922f72ad597d7b6f3fe69035  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-20.c
  f353ff22b3d33ab76e2d0ef9b8df7a38  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-3.c
! 8435b3ccbac2c3025e9a841083eb901d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c
  d5f9bb03f6b98e53fb108d8fd014f713  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-5.c
  055bfb9c23b3e7eb33041e6f2cc311f6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-6.c
  b3330bdc7e59d45053b22dc4e53f3689  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-7.c
*************** a8f53ad5180333afb72d569d125c3922  gcc/te
*** 98658,98664 ****
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! aa86892e51a80a405c2e61ec07d21b2d  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  d854d0b00eecc5320b415c7f679377e9  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  3ab4643679c40f024b38869976721fb5  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  b5bd745f6b9117ac4e1b1964f07756fb  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
--- 98739,98745 ----
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! 218dd3c37f6b3da332b2d9f2a9732da4  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  d854d0b00eecc5320b415c7f679377e9  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  3ab4643679c40f024b38869976721fb5  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  b5bd745f6b9117ac4e1b1964f07756fb  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
*************** e11e93f672c95ede30a7d5026b91f367  gcc/te
*** 98696,98708 ****
--- 98777,98800 ----
  a94361e04473a2c6b07f0006cc21020d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c
  97d8b0836937f8fe659245f11700da42  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c
  30f5c02a7e982b6c8bb655d3137af05e  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c
+ 68c2e02f6bafdf67ded027684a93f05a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c
+ 60adfd52c884a1fa3d7ec034c35bfc1a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c
+ baa326a38e2ab47e69028a797e5b2fe9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c
+ 7879041333441934c447baabd7cac72c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c
  194d1aa63a23ecbc52c282602dee47e8  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c
  b6c05474c1e42c3da50dba2524519d3e  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c
  bebbfe3ec914363870604dd8ac4deb8c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c
  d5476a9625b2e72d3532d647b6bf4d1d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c
+ a4b60331fe2f752ce161081b8bcdd275  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i16.c
+ 650012f631a91baab099ef65ccb99af1  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i32.c
+ 281e4b74556749ada23a30d0d750f728  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i64.c
+ 93cfd3e4c44855f4307ca910f4d80a52  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i8.c
  659c3b9c2b70b894dc633748c3f56890  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i16.c
  5355149b6c04b1eae8c847ab040357a9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i32.c
  69ad40c6f5b2b845ba28b763a2b07586  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i8.c
+ 846b4c034c52e1ba01068025a5e77f24  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c
+ 5355149b6c04b1eae8c847ab040357a9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c
+ de74c9cd17a3a83f5892b7207aba8ec2  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c
  72810fff8f00c0146a77f13c9741cbbf  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i16.c
  9361bec687751a64dfe2b0a3c1e1f4ab  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i32.c
  51af994b03c7a92302c8bdbbc2dc6ac1  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
*************** ecbbab960980ce6717cd871016f94e2b  gcc/te
*** 100158,100164 ****
  00c677b45b031010d00b9a08464d45c2  gcc/testsuite/gcc.target/s390/vector/vec-abi-struct-1.c
  49445c57bcd7c342eb0107bc9b13d44e  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c
  dd0d54001d5c0c89de9ecbfeca7d9163  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-2.c
! b032ea34a9409f0482c317fa2ea7ebed  gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c
  18a30b21905501cfe3b583c13b3c756a  gcc/testsuite/gcc.target/s390/vector/vec-clobber-1.c
  f4f003702feb568dbc88ed411b2783e9  gcc/testsuite/gcc.target/s390/vector/vec-cmp-1.c
  6ad5106106095fa0defa7e045850f1a6  gcc/testsuite/gcc.target/s390/vector/vec-cmp-2.c
--- 100250,100256 ----
  00c677b45b031010d00b9a08464d45c2  gcc/testsuite/gcc.target/s390/vector/vec-abi-struct-1.c
  49445c57bcd7c342eb0107bc9b13d44e  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c
  dd0d54001d5c0c89de9ecbfeca7d9163  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-2.c
! 04edf5219581ca639beb3a6702c0c825  gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c
  18a30b21905501cfe3b583c13b3c756a  gcc/testsuite/gcc.target/s390/vector/vec-clobber-1.c
  f4f003702feb568dbc88ed411b2783e9  gcc/testsuite/gcc.target/s390/vector/vec-cmp-1.c
  6ad5106106095fa0defa7e045850f1a6  gcc/testsuite/gcc.target/s390/vector/vec-cmp-2.c
*************** b149a03c83e407974152eb2857fa31fd  gcc/te
*** 100183,100192 ****
  2c26f350a22588870ab9a7eca3102f56  gcc/testsuite/gcc.target/s390/vector/vec-init-2.c
  7d8a2a5d26b13c07f6024709aedd0742  gcc/testsuite/gcc.target/s390/vector/vec-init-3.c
  03cc140b84b037d2fe9c9c0be079e135  gcc/testsuite/gcc.target/s390/vector/vec-int-math-compile-1.c
! 856674a75a8200b391a94aeaefe62dbc  gcc/testsuite/gcc.target/s390/vector/vec-max-emu.c
! aac15cbd63557a6d4fce6fbf70f1e964  gcc/testsuite/gcc.target/s390/vector/vec-min-emu.c
  3f0e273f04c5175b1fdb100976e981c6  gcc/testsuite/gcc.target/s390/vector/vec-nopeel-1.c
  36edbd8af8f3368a9b83ac5c88068cfc  gcc/testsuite/gcc.target/s390/vector/vec-nopeel-2.c
  604b357bf5bdc9c25e2e900ed77fd858  gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c
  ac53c0a1cd9b9e491894529575db4008  gcc/testsuite/gcc.target/s390/vector/vec-set-1.c
  8de36944e18edbbcc735c9baad533f52  gcc/testsuite/gcc.target/s390/vector/vec-shift-1.c
--- 100275,100286 ----
  2c26f350a22588870ab9a7eca3102f56  gcc/testsuite/gcc.target/s390/vector/vec-init-2.c
  7d8a2a5d26b13c07f6024709aedd0742  gcc/testsuite/gcc.target/s390/vector/vec-init-3.c
  03cc140b84b037d2fe9c9c0be079e135  gcc/testsuite/gcc.target/s390/vector/vec-int-math-compile-1.c
! 85a7a93be54451633e5847d1fe706a13  gcc/testsuite/gcc.target/s390/vector/vec-max-emu.c
! ff8a9ec0d970b55dd483a1d16ac9c94e  gcc/testsuite/gcc.target/s390/vector/vec-min-emu.c
  3f0e273f04c5175b1fdb100976e981c6  gcc/testsuite/gcc.target/s390/vector/vec-nopeel-1.c
  36edbd8af8f3368a9b83ac5c88068cfc  gcc/testsuite/gcc.target/s390/vector/vec-nopeel-2.c
+ 6ef587966b363a02d4d92c17291005c6  gcc/testsuite/gcc.target/s390/vector/vec-perm-merge-1.c
+ 49d2d93d83391e6a89cb6fb3c01b3c59  gcc/testsuite/gcc.target/s390/vector/vec-perm-pack-1.c
  604b357bf5bdc9c25e2e900ed77fd858  gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c
  ac53c0a1cd9b9e491894529575db4008  gcc/testsuite/gcc.target/s390/vector/vec-set-1.c
  8de36944e18edbbcc735c9baad533f52  gcc/testsuite/gcc.target/s390/vector/vec-shift-1.c
*************** afac6d20e33b6a8fe9636a4a68d97023  gcc/te
*** 100493,100499 ****
  83f0e6260fee9d3b8c2ef58d42827074  gcc/testsuite/gcc.target/sh/pr54089-8.c
  f2f91b5ec18907495ab1eec7610f1734  gcc/testsuite/gcc.target/sh/pr54089-9.c
  66f542966f7b56b2845c0e4bf1c278cc  gcc/testsuite/gcc.target/sh/pr54236-1.c
! 061b72638553914ad6b7591494869f6e  gcc/testsuite/gcc.target/sh/pr54236-2.c
  2217adb687f17b2a8d5e9bc1ac45e0fd  gcc/testsuite/gcc.target/sh/pr54236-3.c
  cfc2a9a1d84ca3daaf2daa138a4954a3  gcc/testsuite/gcc.target/sh/pr54236-4.c
  8d8ed377061cbfdec118e736ef175028  gcc/testsuite/gcc.target/sh/pr54236-5.c
--- 100587,100593 ----
  83f0e6260fee9d3b8c2ef58d42827074  gcc/testsuite/gcc.target/sh/pr54089-8.c
  f2f91b5ec18907495ab1eec7610f1734  gcc/testsuite/gcc.target/sh/pr54089-9.c
  66f542966f7b56b2845c0e4bf1c278cc  gcc/testsuite/gcc.target/sh/pr54236-1.c
! ab0f913acf929c89113a5c541d23ec4a  gcc/testsuite/gcc.target/sh/pr54236-2.c
  2217adb687f17b2a8d5e9bc1ac45e0fd  gcc/testsuite/gcc.target/sh/pr54236-3.c
  cfc2a9a1d84ca3daaf2daa138a4954a3  gcc/testsuite/gcc.target/sh/pr54236-4.c
  8d8ed377061cbfdec118e736ef175028  gcc/testsuite/gcc.target/sh/pr54236-5.c
*************** ee39ad592286c583f1d1379691059313  gcc/te
*** 107497,107502 ****
--- 107591,107598 ----
  2976e4b841c45c0246377f27fe9cf8ab  gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08
  43d788d504cdfa97e23c07739b149766  gcc/testsuite/gfortran.dg/coarray/coindexed_4.f08
  5201b70d524a8d53f60a2b5aea480443  gcc/testsuite/gfortran.dg/coarray/coindexed_5.f90
+ a66257c48ed0bc4c478299b74ba345d5  gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90
+ 15ab41c852cd60d830935f5537d52e99  gcc/testsuite/gfortran.dg/coarray/coindexed_7.f90
  f3a5dbd5b18b49f30a47e9c6ddf0ef10  gcc/testsuite/gfortran.dg/coarray/collectives_1.f90
  57d5669b2d7c4384f4f2cbf7f42c55e5  gcc/testsuite/gfortran.dg/coarray/collectives_2.f90
  7a0bf8e143e7c4ebaf6f3ce4b0caaef3  gcc/testsuite/gfortran.dg/coarray/collectives_3.f90
*************** b522fadd1464db48d2fe8165d2a66e70  gcc/te
*** 108254,108263 ****
  652fa12d630d17b29894c33b10c6b1b8  gcc/testsuite/gfortran.dg/dev_null.F90
  94ce3208dac145ea14fc3f821f662788  gcc/testsuite/gfortran.dg/dfloat_1.f90
  799fa150ac7a732454d14018441cc944  gcc/testsuite/gfortran.dg/dg.exp
- c10b7b4dc20a1533c7a2357a0f492845  gcc/testsuite/gfortran.dg/diagnostic-format-json-1.F90
- cfbcd3ddd9fc1232cdc9946102d27f45  gcc/testsuite/gfortran.dg/diagnostic-format-json-2.F90
- 9276873e2824938cb62a98e8c0f43024  gcc/testsuite/gfortran.dg/diagnostic-format-json-3.F90
- 7a9e9b114ffeb81403692e0d38c97591  gcc/testsuite/gfortran.dg/diagnostic-format-json-pr105916.F90
  9908ec78fb87e3fe7ae0633630b06c2f  gcc/testsuite/gfortran.dg/diagnostic-format-sarif-1.F90
  bd37d03007cff83cef3265fcd94bb7f0  gcc/testsuite/gfortran.dg/diagnostic-format-sarif-1.py
  09ab14bed93694dea911f6ebb1867a4e  gcc/testsuite/gfortran.dg/diagnostic-format-sarif-pr105916.f90
--- 108350,108355 ----
*************** d63391da91e43519d530db761b208cc9  gcc/te
*** 109697,109703 ****
  41fb58e8b2edcf7fe98876928e703e8e  gcc/testsuite/gfortran.dg/gomp/omp_do1.f90
  818c401459cd690f09b6456c6af28b9a  gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90
  5f5a0d1616e63425912fcb98974f741c  gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device-2.f90
! 7a8ea6145f3e66bafa6aa7a4f1d806dd  gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device.f90
  c1f9abec8f22e154bb77201af2f18b23  gcc/testsuite/gfortran.dg/gomp/omp_parallel_1.f90
  073107c55ddf84d8db682f826501e5d5  gcc/testsuite/gfortran.dg/gomp/omp_parse1.f90
  3940c2cd145907f9545b48f9cd30792d  gcc/testsuite/gfortran.dg/gomp/omp_parse2.f
--- 109789,109795 ----
  41fb58e8b2edcf7fe98876928e703e8e  gcc/testsuite/gfortran.dg/gomp/omp_do1.f90
  818c401459cd690f09b6456c6af28b9a  gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90
  5f5a0d1616e63425912fcb98974f741c  gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device-2.f90
! 37f87166b7a86247ca4651413f18dda0  gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device.f90
  c1f9abec8f22e154bb77201af2f18b23  gcc/testsuite/gfortran.dg/gomp/omp_parallel_1.f90
  073107c55ddf84d8db682f826501e5d5  gcc/testsuite/gfortran.dg/gomp/omp_parse1.f90
  3940c2cd145907f9545b48f9cd30792d  gcc/testsuite/gfortran.dg/gomp/omp_parse2.f
*************** f9fbb418b92d420ebb3f6a854efc8622  gcc/te
*** 115460,115465 ****
--- 115552,115558 ----
  75ef6c39687877d18acecb1187d7077c  gcc/testsuite/gm2/isolib/run/pass/termfile.mod-disabled
  dc2a1d9cbb699aea2bb0228df7dc3bab  gcc/testsuite/gm2/isolib/run/pass/testappend.mod
  44b0706459af32f2fcae978eb612d24a  gcc/testsuite/gm2/isolib/run/pass/testdelete.mod
+ a678ad29e6501579ae0715c3d544730f  gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod
  5be5d33eec745090ad97266f20fc2177  gcc/testsuite/gm2/isolib/run/pass/testinittm.mod
  3c2b8785cd9a160a4d9c0557e6712778  gcc/testsuite/gm2/isolib/run/pass/testinput
  c52fa331117eec4f92c2d39dc4aebd31  gcc/testsuite/gm2/isolib/run/pass/testio.mod
*************** bc32d4230d22e40bfcb1e74bb392ab97  gcc/te
*** 116334,116339 ****
--- 116427,116433 ----
  48bea14426a2eb3497c75d91b28ead48  gcc/testsuite/gm2/pimlib/logitech/run/pass/realinput2.mod
  86bd87e23026ed6bf9dab38da47fd638  gcc/testsuite/gm2/pimlib/logitech/run/pass/realinput3.mod
  6de5e9c5a7b2bb68088a9983d496b0ef  gcc/testsuite/gm2/pimlib/logitech/run/pass/rename.mod
+ d3c9e9c643b707e6298f82ba170ee883  gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod
  90894de07b46fc09b2259d3be72ef874  gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod
  00248d5f46033daa8b9856ff2869e3e5  gcc/testsuite/gm2/pimlib/logitech/run/pass/timedate.mod
  cb7f18d9d8e9955ad964a25e931aacba  gcc/testsuite/gm2/pimlib/logitech/run/pass/writeoct.mod
*************** b434571f14dc637407f321e185093bce  gcc/te
*** 116346,116351 ****
--- 116440,116446 ----
  12b74f13ad655f02d6d03cd3afd8386b  gcc/testsuite/gm2/pimlib/run/pass/pimlib-run-pass.exp
  19fbabb90573435e066566857d602ff9  gcc/testsuite/gm2/pimlib/run/pass/test.c
  eb658a5ad91f33a16115753df34c87d4  gcc/testsuite/gm2/pimlib/run/pass/testchar.mod
+ e1370374caa4a3a31fefd6609cc7df7f  gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod
  248b32cb4654932e670ca1f4528b0e6d  gcc/testsuite/gm2/pimlib/run/pass/testfiobinary.mod
  e5d5befc7aececd211929f46bd11fdda  gcc/testsuite/gm2/pimlib/run/pass/testgetopt.mod
  9a882e693618bae68e045331cbbf0a39  gcc/testsuite/gm2/pimlib/run/pass/testnan.mod
*************** a7bd734382497172aa271ae6f28c2872  gcc/te
*** 118676,118681 ****
--- 118771,118777 ----
  757c6c1089f7521b4d88d3ea98faeac3  gcc/testsuite/gnat.dg/specs/fe_inlining_helper.adb
  bc790bd930f8c4f971b8268bdda83659  gcc/testsuite/gnat.dg/specs/fe_inlining_helper.ads
  07a75ac7ade09270a3df5c08ed7d6c00  gcc/testsuite/gnat.dg/specs/finalizable1.ads
+ 8b2c27da0d1a366c730abf05792e6535  gcc/testsuite/gnat.dg/specs/finalizable2.ads
  085a1214c06b4e9495c47b56f30e6cd3  gcc/testsuite/gnat.dg/specs/formal_type.ads
  b605c919a473b8d6808dd232aa7eaf49  gcc/testsuite/gnat.dg/specs/gen_interface.ads
  4830454a8335e61b1876284f60de9782  gcc/testsuite/gnat.dg/specs/gen_interface_p.ads
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 121571,121577 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 5f89f68215a27a3ac284de8930332a8a  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
--- 121667,121673 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 69c8655ee8a43bc98c283ffe826f4373  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
*************** ffb9a5436754a7e1571b88f970f08891  gcc/tr
*** 124032,124039 ****
  b4a6da1471f279353aaca4956c18cdea  gcc/tree-affine.cc
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
! f404fdaff17655204dd0c7824570a081  gcc/tree-call-cdce.cc
! da458e5a38b79bc75fc738a312e02056  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  ca2c309862705e4161a11efb32eb1ebf  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
--- 124128,124135 ----
  b4a6da1471f279353aaca4956c18cdea  gcc/tree-affine.cc
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
! 23590c969997d33ec2e1fa1da2a89526  gcc/tree-call-cdce.cc
! 40849e6fc8fed4c8345d6bfc2a530cf2  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  ca2c309862705e4161a11efb32eb1ebf  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
*************** b528a0932f50504df146d112f7d01a5c  gcc/tr
*** 124045,124051 ****
  e43a555cdaab9a97ba3910364910f865  gcc/tree-data-ref.h
  f01aeac56dffd44808096094e2bf76c1  gcc/tree-dfa.cc
  7ccb47a2df405aa08b45cb7f5fca6385  gcc/tree-dfa.h
! 1779d67ec138dfa2f60a9ad4bf1efd6c  gcc/tree-diagnostic-client-data-hooks.cc
  2e869fb8c2c129d455393a91b03e0982  gcc/tree-diagnostic.cc
  21e7c804e59b1471314ee9c773a41ed1  gcc/tree-diagnostic.h
  061a86cf1b2c01bdde3dc32a0701f5b5  gcc/tree-dump.cc
--- 124141,124147 ----
  e43a555cdaab9a97ba3910364910f865  gcc/tree-data-ref.h
  f01aeac56dffd44808096094e2bf76c1  gcc/tree-dfa.cc
  7ccb47a2df405aa08b45cb7f5fca6385  gcc/tree-dfa.h
! b25919ebfbe71d3f3113697ffdbf2ea7  gcc/tree-diagnostic-client-data-hooks.cc
  2e869fb8c2c129d455393a91b03e0982  gcc/tree-diagnostic.cc
  21e7c804e59b1471314ee9c773a41ed1  gcc/tree-diagnostic.h
  061a86cf1b2c01bdde3dc32a0701f5b5  gcc/tree-dump.cc
*************** dffcb3b5c014f0539c1d4ad44d7cfc4f  gcc/tr
*** 124069,124075 ****
  62502d6fd9aa927353d7437dc2a6da17  gcc/tree-nested.cc
  b9bad013f5186a6cf78fe8adbe457945  gcc/tree-nested.h
  45fa4d8e792d6ddd01efa95b7e6dd98e  gcc/tree-nrv.cc
! e29c56f554dbdf5acd832105e721212a  gcc/tree-object-size.cc
  2726009c7d301c88845d73276d4dc3b9  gcc/tree-object-size.h
  de65dfb7d298f3e879ec71e5e2e95913  gcc/tree-outof-ssa.cc
  b9d636bd9641f3038bbe37a70684e18e  gcc/tree-outof-ssa.h
--- 124165,124171 ----
  62502d6fd9aa927353d7437dc2a6da17  gcc/tree-nested.cc
  b9bad013f5186a6cf78fe8adbe457945  gcc/tree-nested.h
  45fa4d8e792d6ddd01efa95b7e6dd98e  gcc/tree-nrv.cc
! 6f4c3306ebe4a2ab399c2b10aad2705c  gcc/tree-object-size.cc
  2726009c7d301c88845d73276d4dc3b9  gcc/tree-object-size.h
  de65dfb7d298f3e879ec71e5e2e95913  gcc/tree-outof-ssa.cc
  b9d636bd9641f3038bbe37a70684e18e  gcc/tree-outof-ssa.h
*************** ebea01b285bb347999736a8da2d7eb94  gcc/tr
*** 124082,124088 ****
  529cb4117fb3ff7fd899c570bd97e944  gcc/tree-pretty-print-markup.h
  5fdac46b7c48b07cde7b3ee6816d646f  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
! f2fea638426d89fe9ea58081e5c46b3a  gcc/tree-profile.cc
  fba416ae78dc089ae1624feee90fb7ab  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
  e9f74f0a94b92fcf4fafe691fee3c65b  gcc/tree-sra.cc
--- 124178,124184 ----
  529cb4117fb3ff7fd899c570bd97e944  gcc/tree-pretty-print-markup.h
  5fdac46b7c48b07cde7b3ee6816d646f  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
! 7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
  fba416ae78dc089ae1624feee90fb7ab  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
  e9f74f0a94b92fcf4fafe691fee3c65b  gcc/tree-sra.cc
*************** c724c8becbea9eec0f806e3335942c32  gcc/tr
*** 124092,124098 ****
  b8450f3f71eba56c45cfa47b8a520ef2  gcc/tree-ssa-alias-compare.h
  34e846f14e9bc92a7bf94b3df502bd99  gcc/tree-ssa-alias.cc
  9d359861d05b5dfbc59cbf45c70feb0f  gcc/tree-ssa-alias.h
! 338ab724f39d1c1f947de15e26a7a7fa  gcc/tree-ssa-ccp.cc
  0facf771754439bdf307ff1c5ae92cb5  gcc/tree-ssa-ccp.h
  56468d0bf8f8f4c754ea03008cc6c0eb  gcc/tree-ssa-coalesce.cc
  44217fe298d550aecd4800f65391c931  gcc/tree-ssa-coalesce.h
--- 124188,124194 ----
  b8450f3f71eba56c45cfa47b8a520ef2  gcc/tree-ssa-alias-compare.h
  34e846f14e9bc92a7bf94b3df502bd99  gcc/tree-ssa-alias.cc
  9d359861d05b5dfbc59cbf45c70feb0f  gcc/tree-ssa-alias.h
! 8efced24be3a776c71f76acc4b64181f  gcc/tree-ssa-ccp.cc
  0facf771754439bdf307ff1c5ae92cb5  gcc/tree-ssa-ccp.h
  56468d0bf8f8f4c754ea03008cc6c0eb  gcc/tree-ssa-coalesce.cc
  44217fe298d550aecd4800f65391c931  gcc/tree-ssa-coalesce.h
*************** da72a60de8a6f51a635ead26120d3cc7  gcc/tr
*** 124132,124138 ****
  fc4f0e674e345822394ee5645ce22429  gcc/tree-ssa-propagate.h
  9515681f0fd9c70f852eb417ea1ff9df  gcc/tree-ssa-reassoc.cc
  258492cd7ef04be49374ea1e670f3b5b  gcc/tree-ssa-reassoc.h
! bdc6a8841437c7f23f31a5441d500984  gcc/tree-ssa-sccvn.cc
  952cb2484413ce2cf094a52b596dc078  gcc/tree-ssa-sccvn.h
  a27c58eccc3d8929767feb76dc99399f  gcc/tree-ssa-scopedtables.cc
  aa25adbcb019dd38a66ce237df54ae1d  gcc/tree-ssa-scopedtables.h
--- 124228,124234 ----
  fc4f0e674e345822394ee5645ce22429  gcc/tree-ssa-propagate.h
  9515681f0fd9c70f852eb417ea1ff9df  gcc/tree-ssa-reassoc.cc
  258492cd7ef04be49374ea1e670f3b5b  gcc/tree-ssa-reassoc.h
! fd8c3c4d8f8f65da42ff163b80d892aa  gcc/tree-ssa-sccvn.cc
  952cb2484413ce2cf094a52b596dc078  gcc/tree-ssa-sccvn.h
  a27c58eccc3d8929767feb76dc99399f  gcc/tree-ssa-scopedtables.cc
  aa25adbcb019dd38a66ce237df54ae1d  gcc/tree-ssa-scopedtables.h
*************** af4c63760c432f66b1c6c8e7e7666699  gcc/tr
*** 124162,124185 ****
  6714826bb9cd5f171a08cbabcb1da8e6  gcc/tree-streamer.h
  c7cfce71bf4903e72ac00b08e215eb2c  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
! 952baf2ca4a5dd0543af542151502bfc  gcc/tree-tailcall.cc
! a485c788a8567b497442f59077ad5cbc  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  65fda28044fc56c04c54a1c20ff53b61  gcc/tree-vect-loop-manip.cc
! 97d02d93bf96a319e860b7a3e441c212  gcc/tree-vect-loop.cc
  da6336ee0c69409d59d2599d74cc5717  gcc/tree-vect-patterns.cc
  c6943415b45e06de6924e0c93b06b502  gcc/tree-vect-slp-patterns.cc
! 7181f44315da19fb2d1b3c4cd5cafdd6  gcc/tree-vect-slp.cc
! 9233a3fce6ccc8736b002ed676691ddc  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  a4620080dfbf6757116ace6cfaae648f  gcc/tree-vectorizer.cc
  67801fd796ab7f3082daef67ce2527aa  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! 2f42cbef5fda7fdbd080b8bef8f104d3  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! b8e2b6e7e9300c4d04c2ac9455c2beda  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
--- 124258,124281 ----
  6714826bb9cd5f171a08cbabcb1da8e6  gcc/tree-streamer.h
  c7cfce71bf4903e72ac00b08e215eb2c  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
! 324fa6ae10c2436c091c4c968318d653  gcc/tree-tailcall.cc
! 155cba670139398bb39ea8a47610472f  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  65fda28044fc56c04c54a1c20ff53b61  gcc/tree-vect-loop-manip.cc
! db3741eb570e42d3f7fbc716a9985101  gcc/tree-vect-loop.cc
  da6336ee0c69409d59d2599d74cc5717  gcc/tree-vect-patterns.cc
  c6943415b45e06de6924e0c93b06b502  gcc/tree-vect-slp-patterns.cc
! f8417535652119ccc5ac99a53ab1e3c6  gcc/tree-vect-slp.cc
! 143f29fd9a74d5c3b84c91dae6d66493  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  a4620080dfbf6757116ace6cfaae648f  gcc/tree-vectorizer.cc
  67801fd796ab7f3082daef67ce2527aa  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! d189fd260248ed511db68494d4e6edb7  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 5c837e4f50a9e0bbdf73e4a8bbef6b70  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
*************** dc1a1767ff7dfd18c94f3b0889416869  gcc/ts
*** 124189,124195 ****
  899f310edfcbe0de08b2768cde16445b  gcc/typeclass.h
  d2d91dc800e8c43d824d4dcf180e3a37  gcc/typed-splay-tree.cc
  a4d47cb279dc7287caea65889ed72175  gcc/typed-splay-tree.h
! 7b53196550de0df570b92ae6880c1e8e  gcc/ubsan.cc
  a9422171692d7910cbbb362c686e1a69  gcc/ubsan.h
  04f1055776eb53bdc0ad3db1e5b3531d  gcc/unique-argv.h
  1255497d1969e733354fd083e9048143  gcc/valtrack.cc
--- 124285,124291 ----
  899f310edfcbe0de08b2768cde16445b  gcc/typeclass.h
  d2d91dc800e8c43d824d4dcf180e3a37  gcc/typed-splay-tree.cc
  a4d47cb279dc7287caea65889ed72175  gcc/typed-splay-tree.h
! bdef48c03d36e93faae5658a394f7bf4  gcc/ubsan.cc
  a9422171692d7910cbbb362c686e1a69  gcc/ubsan.h
  04f1055776eb53bdc0ad3db1e5b3531d  gcc/unique-argv.h
  1255497d1969e733354fd083e9048143  gcc/valtrack.cc
*************** f63a06d746592d67d8c161bc2461a24e  libgfo
*** 127649,127655 ****
  e90afde1ec8653f66d433a7cc5e070a7  libgfortran/runtime/select_inc.c
  fa1f81a5ee204308c775545490d24fbd  libgfortran/runtime/stop.c
  08f6570c94f64b0aaf21fb2ec9aa10e9  libgfortran/runtime/string.c
! 074bdd69239e63b93b495139822b07dc  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  38778826306c4efe1f6a33cb21cece23  libgm2/Makefile.in
  5655398e9c1e3027c587898dc4fce566  libgm2/acinclude.m4
--- 127745,127751 ----
  e90afde1ec8653f66d433a7cc5e070a7  libgfortran/runtime/select_inc.c
  fa1f81a5ee204308c775545490d24fbd  libgfortran/runtime/stop.c
  08f6570c94f64b0aaf21fb2ec9aa10e9  libgfortran/runtime/string.c
! b0e68a793ee26ebc24d12beb8406a9c9  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  38778826306c4efe1f6a33cb21cece23  libgm2/Makefile.in
  5655398e9c1e3027c587898dc4fce566  libgm2/acinclude.m4
*************** f25de03fc822c5eebf7118fcf5283ebc  libgm2
*** 127663,127670 ****
  1c81daa01520f3a05da1ff4d530f5873  libgm2/libm2cor/Makefile.in
  256f893d9141ee50fb703d08f0c7ce3a  libgm2/libm2iso/ChanConsts.h
  87d5ba33acc7d56c7dd0f43a7d6660ca  libgm2/libm2iso/ErrnoCategory.cc
! 26941eba9215610a8751469175c3d8f1  libgm2/libm2iso/Makefile.am
! 9226c2947deac943dd64c5faa28b5611  libgm2/libm2iso/Makefile.in
  55e7456cbf4c00590b7d5c26437bf683  libgm2/libm2iso/RTco.cc
  60e20d4966763ff532153264c355ec8f  libgm2/libm2iso/m2rts.h
  9cb2d2fda0da4de1596491a1ba383634  libgm2/libm2iso/wrapclock.cc
--- 127759,127766 ----
  1c81daa01520f3a05da1ff4d530f5873  libgm2/libm2cor/Makefile.in
  256f893d9141ee50fb703d08f0c7ce3a  libgm2/libm2iso/ChanConsts.h
  87d5ba33acc7d56c7dd0f43a7d6660ca  libgm2/libm2iso/ErrnoCategory.cc
! 50b1ab5ac2f7313addeb89244a63e53d  libgm2/libm2iso/Makefile.am
! 06bbf355611e65199fed815c1971975a  libgm2/libm2iso/Makefile.in
  55e7456cbf4c00590b7d5c26437bf683  libgm2/libm2iso/RTco.cc
  60e20d4966763ff532153264c355ec8f  libgm2/libm2iso/m2rts.h
  9cb2d2fda0da4de1596491a1ba383634  libgm2/libm2iso/wrapclock.cc
*************** a50aaef4b803051d8c8de65277787205  libobj
*** 136580,136586 ****
  1529c9317f23aa02b19c43cda7528d66  libobjc/selector.c
  e48bb3c47cdcb1bfade3ef0007f5a149  libobjc/sendmsg.c
  06be35842165837797461a0db264aeea  libobjc/thr.c
! 6f73fafc9ab207a53b2bcd0293183d8d  libphobos/ChangeLog
  e188e263b43a1566b83ecb298034d491  libphobos/Makefile.am
  156e9416d3f91f179bb662effed69086  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
--- 136676,136682 ----
  1529c9317f23aa02b19c43cda7528d66  libobjc/selector.c
  e48bb3c47cdcb1bfade3ef0007f5a149  libobjc/sendmsg.c
  06be35842165837797461a0db264aeea  libobjc/thr.c
! f8665cbcfb2dd6ac1871eb40d87c3fda  libphobos/ChangeLog
  e188e263b43a1566b83ecb298034d491  libphobos/Makefile.am
  156e9416d3f91f179bb662effed69086  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
*************** fbb3c30724cb241010afacb0505c53e7  libpho
*** 136589,136595 ****
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
  0fbc6aac226228d33e1f5810b09eee59  libphobos/configure
  122f630ac036808d09fb88947d310aff  libphobos/configure.ac
! c7ecb00c38e5e2217d598dc9c5c3e5b5  libphobos/configure.tgt
  63ec818a02a0e071420a85b12fbfd563  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
  ddebe4c1ba53d5a98f1cbfe28019c009  libphobos/libdruntime/MERGE
--- 136685,136691 ----
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
  0fbc6aac226228d33e1f5810b09eee59  libphobos/configure
  122f630ac036808d09fb88947d310aff  libphobos/configure.ac
! de129b521681677344713bb055c6cdce  libphobos/configure.tgt
  63ec818a02a0e071420a85b12fbfd563  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
  ddebe4c1ba53d5a98f1cbfe28019c009  libphobos/libdruntime/MERGE
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 138240,138246 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! d8d67922b7510840711096d85a1aa7d3  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 138336,138342 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 257c8a98816f36ff1a51a8ce9321cf57  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** e3c307e48b9e12b0736fde183ffa8bd7  libstd
*** 138930,138936 ****
  5384dfbb9eb9731df3aca40e40d55350  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  8a303c55e1a9a90d751641a38581e2bc  libstdc++-v3/include/bits/chrono.h
! fab18ab56be7cffb9e042404cd30b6b6  libstdc++-v3/include/bits/chrono_io.h
  2ff73cb405cb01626a751e0fa0f339f3  libstdc++-v3/include/bits/codecvt.h
  23fc42ee8644308c793f44d20f00420e  libstdc++-v3/include/bits/concept_check.h
  e999e0783a5ca2165919f352526501e9  libstdc++-v3/include/bits/cow_string.h
--- 139026,139032 ----
  5384dfbb9eb9731df3aca40e40d55350  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  8a303c55e1a9a90d751641a38581e2bc  libstdc++-v3/include/bits/chrono.h
! 6744192b501389860f0f70d6037587fe  libstdc++-v3/include/bits/chrono_io.h
  2ff73cb405cb01626a751e0fa0f339f3  libstdc++-v3/include/bits/codecvt.h
  23fc42ee8644308c793f44d20f00420e  libstdc++-v3/include/bits/concept_check.h
  e999e0783a5ca2165919f352526501e9  libstdc++-v3/include/bits/cow_string.h
*************** a0ff2aff5e6b290f02129d8fd5066f94  libstd
*** 138992,138998 ****
  053e1de38aef43bbaf1a9a4af1e3ad2f  libstdc++-v3/include/bits/random.h
  924981b1c29c7c7b010418607af71d7b  libstdc++-v3/include/bits/random.tcc
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
! 2c984db7b8373aa29c3d8c6a836bf55a  libstdc++-v3/include/bits/ranges_algo.h
  2739c66cfdc38cbad18771e2317ce548  libstdc++-v3/include/bits/ranges_algobase.h
  12404cc111ad47773d8f645e76d111f3  libstdc++-v3/include/bits/ranges_base.h
  586727039587b10b560a902b1c7008b1  libstdc++-v3/include/bits/ranges_cmp.h
--- 139088,139094 ----
  053e1de38aef43bbaf1a9a4af1e3ad2f  libstdc++-v3/include/bits/random.h
  924981b1c29c7c7b010418607af71d7b  libstdc++-v3/include/bits/random.tcc
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
! c9600d34774ec40c09ff1b2280e744e0  libstdc++-v3/include/bits/ranges_algo.h
  2739c66cfdc38cbad18771e2317ce548  libstdc++-v3/include/bits/ranges_algobase.h
  12404cc111ad47773d8f645e76d111f3  libstdc++-v3/include/bits/ranges_base.h
  586727039587b10b560a902b1c7008b1  libstdc++-v3/include/bits/ranges_cmp.h
*************** c35a5da0369f3af2e9e202c9c8510914  libstd
*** 139025,139037 ****
  5b3bd66db6802c89905c016f488a41d0  libstdc++-v3/include/bits/std_mutex.h
  bb19c550085b43f6251959e05791f4c6  libstdc++-v3/include/bits/std_thread.h
  3738277ac274ee1b48828db7014b1599  libstdc++-v3/include/bits/stl_algo.h
! ba1901789908a4eca42f3ec20afebc3a  libstdc++-v3/include/bits/stl_algobase.h
  50378fb402a4f63ad663a2763f5cd08a  libstdc++-v3/include/bits/stl_bvector.h
  c2ca446fe3c0e405c49faaad2b28e9aa  libstdc++-v3/include/bits/stl_construct.h
  914ee95a80c9537f434a34cddd3409fb  libstdc++-v3/include/bits/stl_deque.h
  8bd7e182b77be76921e6f1bead44217f  libstdc++-v3/include/bits/stl_function.h
  c6b4511debfbf2f7971dbae97dbcc998  libstdc++-v3/include/bits/stl_heap.h
! 2f2000c15148ae7767daa74756a00019  libstdc++-v3/include/bits/stl_iterator.h
  e377e5172a37470411327d66be24b6a0  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  252307c6170fb8ddbc0bb33c0c80f35b  libstdc++-v3/include/bits/stl_iterator_base_types.h
  4f93444bfce714698d1c4bd36a134164  libstdc++-v3/include/bits/stl_list.h
--- 139121,139133 ----
  5b3bd66db6802c89905c016f488a41d0  libstdc++-v3/include/bits/std_mutex.h
  bb19c550085b43f6251959e05791f4c6  libstdc++-v3/include/bits/std_thread.h
  3738277ac274ee1b48828db7014b1599  libstdc++-v3/include/bits/stl_algo.h
! 1b4047632ad5c13fb8b11a4e72df1ff6  libstdc++-v3/include/bits/stl_algobase.h
  50378fb402a4f63ad663a2763f5cd08a  libstdc++-v3/include/bits/stl_bvector.h
  c2ca446fe3c0e405c49faaad2b28e9aa  libstdc++-v3/include/bits/stl_construct.h
  914ee95a80c9537f434a34cddd3409fb  libstdc++-v3/include/bits/stl_deque.h
  8bd7e182b77be76921e6f1bead44217f  libstdc++-v3/include/bits/stl_function.h
  c6b4511debfbf2f7971dbae97dbcc998  libstdc++-v3/include/bits/stl_heap.h
! 227225a668d7f28a80dbc8c1563040e8  libstdc++-v3/include/bits/stl_iterator.h
  e377e5172a37470411327d66be24b6a0  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  252307c6170fb8ddbc0bb33c0c80f35b  libstdc++-v3/include/bits/stl_iterator_base_types.h
  4f93444bfce714698d1c4bd36a134164  libstdc++-v3/include/bits/stl_list.h
*************** c422f42aab865e6ef70233d1d512473c  libstd
*** 139047,139053 ****
  c48928d63732da42056105c33cf860ff  libstdc++-v3/include/bits/stl_stack.h
  e77200e337d1f4695ed04b8f6fd9991d  libstdc++-v3/include/bits/stl_tempbuf.h
  eaceb582a18a6a7ee11227f1fc82b069  libstdc++-v3/include/bits/stl_tree.h
! 4b5acc9b9be1d3fad8fa21ea297e6b78  libstdc++-v3/include/bits/stl_uninitialized.h
  a370f99cf5710c07aee43e033d2e6b9b  libstdc++-v3/include/bits/stl_vector.h
  c021eea8ffb782c5cae76e39deaa7369  libstdc++-v3/include/bits/stream_iterator.h
  69fecd7181ec71c850dba6e19cf9a58c  libstdc++-v3/include/bits/streambuf.tcc
--- 139143,139149 ----
  c48928d63732da42056105c33cf860ff  libstdc++-v3/include/bits/stl_stack.h
  e77200e337d1f4695ed04b8f6fd9991d  libstdc++-v3/include/bits/stl_tempbuf.h
  eaceb582a18a6a7ee11227f1fc82b069  libstdc++-v3/include/bits/stl_tree.h
! d90c08d54200b0bffbb85bf5fddbcd8b  libstdc++-v3/include/bits/stl_uninitialized.h
  a370f99cf5710c07aee43e033d2e6b9b  libstdc++-v3/include/bits/stl_vector.h
  c021eea8ffb782c5cae76e39deaa7369  libstdc++-v3/include/bits/stream_iterator.h
  69fecd7181ec71c850dba6e19cf9a58c  libstdc++-v3/include/bits/streambuf.tcc
*************** a229b5c8ad2904a3b3173239225596c4  libstd
*** 139071,139078 ****
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  652419a46dc988dd67c512e4f7d5638a  libstdc++-v3/include/bits/vector.tcc
! 800b57e2657386298e3444ca09999db2  libstdc++-v3/include/bits/version.def
! c64e1fdc7567a18ca90f22c66e4521d0  libstdc++-v3/include/bits/version.h
  0db0dfc5d016435e64398e3bb70098d3  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
--- 139167,139174 ----
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  652419a46dc988dd67c512e4f7d5638a  libstdc++-v3/include/bits/vector.tcc
! c41b7b8273c34853838127cefb6f215b  libstdc++-v3/include/bits/version.def
! 090d3154a808e89ed128833856fef9cb  libstdc++-v3/include/bits/version.h
  0db0dfc5d016435e64398e3bb70098d3  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
*************** d434b6703454e6fece0bb6ab907894d5  libstd
*** 139624,139630 ****
  0629d22f554a52275f62402292b23e12  libstdc++-v3/include/std/atomic
  d1730a41b18e21cbac0f5328aad2d223  libstdc++-v3/include/std/barrier
  66a9c513e3e5b0698ace3297c819bdcf  libstdc++-v3/include/std/bit
! 5651be4f16ccfbe8539766c53154dc20  libstdc++-v3/include/std/bitset
  3fca3267513b72857aff767e71c81692  libstdc++-v3/include/std/charconv
  3282d97cb840e6ff9b826fb1a3b5ab27  libstdc++-v3/include/std/chrono
  a90e2b9ed2c236c92f3f2387a39a0ac8  libstdc++-v3/include/std/codecvt
--- 139720,139726 ----
  0629d22f554a52275f62402292b23e12  libstdc++-v3/include/std/atomic
  d1730a41b18e21cbac0f5328aad2d223  libstdc++-v3/include/std/barrier
  66a9c513e3e5b0698ace3297c819bdcf  libstdc++-v3/include/std/bit
! bd722d6752add2c722ae118b7170f419  libstdc++-v3/include/std/bitset
  3fca3267513b72857aff767e71c81692  libstdc++-v3/include/std/charconv
  3282d97cb840e6ff9b826fb1a3b5ab27  libstdc++-v3/include/std/chrono
  a90e2b9ed2c236c92f3f2387a39a0ac8  libstdc++-v3/include/std/codecvt
*************** ed6663b9ff729b09c2bacefa3568d1fc  libstd
*** 139655,139661 ****
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! c2b9ce00940d8398ed1f4488795d06cf  libstdc++-v3/include/std/mdspan
  2b8d6320d7f5a907bf3c094dcbe4d9f5  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  a7b8e00d6cf56ea696ec15140b7c1d15  libstdc++-v3/include/std/mutex
--- 139751,139757 ----
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! d9de310ef180f95551fac73b0be4aed7  libstdc++-v3/include/std/mdspan
  2b8d6320d7f5a907bf3c094dcbe4d9f5  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  a7b8e00d6cf56ea696ec15140b7c1d15  libstdc++-v3/include/std/mutex
*************** b944796362aa39fc1cba3747d2247464  libstd
*** 139666,139672 ****
  8883599080e145869428c2dc9e59e2d3  libstdc++-v3/include/std/print
  317c818ab1030cf117c8d8ef03df06aa  libstdc++-v3/include/std/queue
  01746ff9db8573f15b943b0c36cce6a8  libstdc++-v3/include/std/random
! 83f0b1fb9db24c31bf034bd93bb4dec8  libstdc++-v3/include/std/ranges
  a28bf4bed6789b61535d4b05ff48ba76  libstdc++-v3/include/std/ratio
  400d95a1fd416911b5c47562d7a586cf  libstdc++-v3/include/std/regex
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
--- 139762,139768 ----
  8883599080e145869428c2dc9e59e2d3  libstdc++-v3/include/std/print
  317c818ab1030cf117c8d8ef03df06aa  libstdc++-v3/include/std/queue
  01746ff9db8573f15b943b0c36cce6a8  libstdc++-v3/include/std/random
! 48e48db8bd4dc7480700ddb4c226d44a  libstdc++-v3/include/std/ranges
  a28bf4bed6789b61535d4b05ff48ba76  libstdc++-v3/include/std/ratio
  400d95a1fd416911b5c47562d7a586cf  libstdc++-v3/include/std/regex
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
*************** a6c4bb899d00f4ad391b73d1730ab67f  libstd
*** 139946,139952 ****
  9e767a34d6cc919c18bd9e3ee372972f  libstdc++-v3/src/c++11/sso_string.cc
  f5af35184f655abcf9edbb76a7ac9985  libstdc++-v3/src/c++11/sstream-inst.cc
  96c5a746ee563d36d5c93056996ec3ff  libstdc++-v3/src/c++11/streambuf-inst.cc
! 63b97d5a214a3ed86e82dff205caf8b0  libstdc++-v3/src/c++11/string-inst.cc
  51eb59aec233df19c1193a1961362c36  libstdc++-v3/src/c++11/string-io-inst.cc
  b8e7b1593e5ed3dee7f0c98b40666a11  libstdc++-v3/src/c++11/system_error.cc
  2c8e1fdeb39d12dc28ddf3a5f6aaaf99  libstdc++-v3/src/c++11/thread.cc
--- 140042,140048 ----
  9e767a34d6cc919c18bd9e3ee372972f  libstdc++-v3/src/c++11/sso_string.cc
  f5af35184f655abcf9edbb76a7ac9985  libstdc++-v3/src/c++11/sstream-inst.cc
  96c5a746ee563d36d5c93056996ec3ff  libstdc++-v3/src/c++11/streambuf-inst.cc
! 9a462773b93cea47b4ba35ff80b3b9f9  libstdc++-v3/src/c++11/string-inst.cc
  51eb59aec233df19c1193a1961362c36  libstdc++-v3/src/c++11/string-io-inst.cc
  b8e7b1593e5ed3dee7f0c98b40666a11  libstdc++-v3/src/c++11/system_error.cc
  2c8e1fdeb39d12dc28ddf3a5f6aaaf99  libstdc++-v3/src/c++11/thread.cc
*************** d85f3a53465585d54b96880e79456c79  libstd
*** 139999,140005 ****
  ea41b659ccf9f3e1850802e2fddaba52  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
  c319163994652e23066095eded5869f0  libstdc++-v3/src/c++23/std-clib.cc.in
! 282c1e35cfc4b408cd31b9b83047ba48  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  97527213996a1ca6a0910b1ab5f6c3a3  libstdc++-v3/src/c++26/Makefile.am
  5dd6b2acd5d63f897ba1545bb9a07d25  libstdc++-v3/src/c++26/Makefile.in
--- 140095,140101 ----
  ea41b659ccf9f3e1850802e2fddaba52  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
  c319163994652e23066095eded5869f0  libstdc++-v3/src/c++23/std-clib.cc.in
! c12f6fb02f2405759918a6d91540a08d  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  97527213996a1ca6a0910b1ab5f6c3a3  libstdc++-v3/src/c++26/Makefile.am
  5dd6b2acd5d63f897ba1545bb9a07d25  libstdc++-v3/src/c++26/Makefile.in
*************** b23338c1f6138984551479ca9bcd7963  libstd
*** 140488,140505 ****
  2ea21afce67de56cf0383869e4d48f60  libstdc++-v3/testsuite/20_util/bitset/access/to_string.cc
  0fabb05eeefcd5bd82fc4b42cfcb0d49  libstdc++-v3/testsuite/20_util/bitset/access/to_ullong.cc
  48eb6defba9905258ff301e196c1d31c  libstdc++-v3/testsuite/20_util/bitset/access/to_ulong.cc
! 9309c445c805dadd5e0ce8b4784b0129  libstdc++-v3/testsuite/20_util/bitset/cons/1.cc
  4e71cc23d9d08f39edd1b405623e2ffb  libstdc++-v3/testsuite/20_util/bitset/cons/16020.cc
  309c953ae5d00367a068ed165be1055d  libstdc++-v3/testsuite/20_util/bitset/cons/2.cc
  6f567fd09672d511777113e4729ddd5e  libstdc++-v3/testsuite/20_util/bitset/cons/3.cc
  fdb870f77bb25b869888d7bd7b426bb3  libstdc++-v3/testsuite/20_util/bitset/cons/38244.cc
  aec695dfa67c199a3b4539987fccb573  libstdc++-v3/testsuite/20_util/bitset/cons/50268.cc
! 25440aa87f8321d1d77897042351c05d  libstdc++-v3/testsuite/20_util/bitset/cons/6282.cc
  ed93021866f5024b5bede5df5a13a983  libstdc++-v3/testsuite/20_util/bitset/cons/constexpr.cc
  6abbb67385d01ef586af796804e437be  libstdc++-v3/testsuite/20_util/bitset/cons/constexpr_c++23.cc
  2f909320aab04ee1c6cec89843920dac  libstdc++-v3/testsuite/20_util/bitset/cons/dr1325-1.cc
  409e0135eb2eb16fce312c6099f4dced  libstdc++-v3/testsuite/20_util/bitset/cons/dr1325-2.cc
  01edf39421083072f99f916088684dfa  libstdc++-v3/testsuite/20_util/bitset/cons/dr396.cc
  4739712fd7e238ea3f424a1b9a749ded  libstdc++-v3/testsuite/20_util/bitset/count/constexpr.cc
  68995ecb93baf7833c60d27ef2cd9ab1  libstdc++-v3/testsuite/20_util/bitset/debug/invalidation/1.cc
  d2faecc969e0eab765ee7eefdca7d973  libstdc++-v3/testsuite/20_util/bitset/ext/15361.cc
--- 140584,140603 ----
  2ea21afce67de56cf0383869e4d48f60  libstdc++-v3/testsuite/20_util/bitset/access/to_string.cc
  0fabb05eeefcd5bd82fc4b42cfcb0d49  libstdc++-v3/testsuite/20_util/bitset/access/to_ullong.cc
  48eb6defba9905258ff301e196c1d31c  libstdc++-v3/testsuite/20_util/bitset/access/to_ulong.cc
! 8e355a5db43d98f2dfa11884c20ad456  libstdc++-v3/testsuite/20_util/bitset/cons/1.cc
  4e71cc23d9d08f39edd1b405623e2ffb  libstdc++-v3/testsuite/20_util/bitset/cons/16020.cc
  309c953ae5d00367a068ed165be1055d  libstdc++-v3/testsuite/20_util/bitset/cons/2.cc
  6f567fd09672d511777113e4729ddd5e  libstdc++-v3/testsuite/20_util/bitset/cons/3.cc
  fdb870f77bb25b869888d7bd7b426bb3  libstdc++-v3/testsuite/20_util/bitset/cons/38244.cc
  aec695dfa67c199a3b4539987fccb573  libstdc++-v3/testsuite/20_util/bitset/cons/50268.cc
! e1eaaf82a9146ce649ff48ea2c451dcc  libstdc++-v3/testsuite/20_util/bitset/cons/6282.cc
  ed93021866f5024b5bede5df5a13a983  libstdc++-v3/testsuite/20_util/bitset/cons/constexpr.cc
  6abbb67385d01ef586af796804e437be  libstdc++-v3/testsuite/20_util/bitset/cons/constexpr_c++23.cc
  2f909320aab04ee1c6cec89843920dac  libstdc++-v3/testsuite/20_util/bitset/cons/dr1325-1.cc
  409e0135eb2eb16fce312c6099f4dced  libstdc++-v3/testsuite/20_util/bitset/cons/dr1325-2.cc
  01edf39421083072f99f916088684dfa  libstdc++-v3/testsuite/20_util/bitset/cons/dr396.cc
+ 23558c3c7723e93f470cbb736e5d9af5  libstdc++-v3/testsuite/20_util/bitset/cons/string_view.cc
+ 7b64a4ce05ecd6b19e8079b0c59ca3d9  libstdc++-v3/testsuite/20_util/bitset/cons/string_view_wide.cc
  4739712fd7e238ea3f424a1b9a749ded  libstdc++-v3/testsuite/20_util/bitset/count/constexpr.cc
  68995ecb93baf7833c60d27ef2cd9ab1  libstdc++-v3/testsuite/20_util/bitset/debug/invalidation/1.cc
  d2faecc969e0eab765ee7eefdca7d973  libstdc++-v3/testsuite/20_util/bitset/ext/15361.cc
*************** d3159b84b2e9833a521af84ceffbacfa  libstd
*** 141548,141553 ****
--- 141646,141652 ----
  131fd8d66b4f4501ac218ad00b557ef8  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_n/94540.cc
  0de29c71eed69f5dd9c1663e99323429  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_n/sizes.cc
  39a02fadd67d7b20114705bd3af7113d  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/102064.cc
+ feb06362a46b71fbdb97217735aa60ab  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc
  1bd6a89394feba8d8f6fff469ba5ea32  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
  2e5dfaf792edfc3d054bd2df519fac37  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/58982.cc
  e7d66f65613424b0c5442bcd109b99dc  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc
*************** cc42abd3f12e4e2d740c196077e9dfbd  libstd
*** 143543,143548 ****
--- 143642,143649 ----
  1e719131ce8d3c52ab96fb6320a2682e  libstdc++-v3/testsuite/23_containers/map/requirements/partial_specialization/1.cc
  ef8992fce519e4aeb10d10129736a163  libstdc++-v3/testsuite/23_containers/map/requirements/typedefs.cc
  1a429dd433a9cca8518d6eeaf0db7ff4  libstdc++-v3/testsuite/23_containers/map/version.cc
+ 44898fbd0da3bd306298ec2583fc7138  libstdc++-v3/testsuite/23_containers/mdspan/accessors/default.cc
+ c9be65e1a0cf8e0da83e4027b6ea3e64  libstdc++-v3/testsuite/23_containers/mdspan/accessors/default_neg.cc
  cf53330bcd33cbf3f9444b6c9c76a483  libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
  58d322becec5c5e65c19f17834e2a082  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
  e9e5cce5f41b3fcb25e00e9b6edb9a83  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
*************** da6b9cea5f235e2b213bc339e6f3e108  libstd
*** 145387,145392 ****
--- 145488,145494 ----
  9b49cd894afc0849551f18e6a3ae9dad  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/requirements/explicit_instantiation/2.cc
  08ce520470c2cc3960c9e999f60ce4a4  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/requirements/explicit_instantiation/pod.cc
  f5a9097eb16672d6c05a87340096c086  libstdc++-v3/testsuite/25_algorithms/remove_if/1.cc
+ 22e4da064ddab0c392673bb1bf3caaed  libstdc++-v3/testsuite/25_algorithms/remove_if/120789.cc
  6ad9c03d796a5ea1c1db4dd2e57ffd11  libstdc++-v3/testsuite/25_algorithms/remove_if/check_type.cc
  1f4beb3d917a723881a7b3bc10780924  libstdc++-v3/testsuite/25_algorithms/remove_if/constexpr.cc
  95f6c3e6d7249235adc5bdb54c85cd0c  libstdc++-v3/testsuite/25_algorithms/remove_if/constrained.cc
*************** cb588cb5fec0b19b7c78f4dfd30d85ef  libstd
*** 145489,145495 ****
--- 145591,145599 ----
  b9e15f9c132b851daa48841f10764363  libstdc++-v3/testsuite/25_algorithms/set_union/requirements/explicit_instantiation/2.cc
  b2ea87e9205e641b5475df5f3f8d9ac7  libstdc++-v3/testsuite/25_algorithms/set_union/requirements/explicit_instantiation/pod.cc
  407d8b99e25d61c6c691dd66db308b9c  libstdc++-v3/testsuite/25_algorithms/shift_left/1.cc
+ 4ecd9e1c4943f009cee1d5911da8e27d  libstdc++-v3/testsuite/25_algorithms/shift_left/constrained.cc
  960464186034ba5de96696d8b4b40874  libstdc++-v3/testsuite/25_algorithms/shift_right/1.cc
+ bfc3e968d9eeeab0a163fa931efba1f6  libstdc++-v3/testsuite/25_algorithms/shift_right/constrained.cc
  13fef40827fc69a1a6fa8ae8d2d22db6  libstdc++-v3/testsuite/25_algorithms/shuffle/1.cc
  43f26af530f4768cc438502aa7ba12ea  libstdc++-v3/testsuite/25_algorithms/shuffle/constrained.cc
  fdc8ebf89947b64544c3b407c7df39b9  libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc
*************** ed6f6f508ec323519c9a830fd0d89140  libstd
*** 145557,145562 ****
--- 145661,145667 ----
  599daadb3db6b6b5291b2fd1508d55b8  libstdc++-v3/testsuite/25_algorithms/transform/requirements/explicit_instantiation/pod.cc
  df013990874a60d054aa46070d1ac5bb  libstdc++-v3/testsuite/25_algorithms/unique/1.cc
  9fc8b2e62a27f41f89e4f6bafd064f54  libstdc++-v3/testsuite/25_algorithms/unique/11480.cc
+ 12ee07b6e724d84c83471a929de6054c  libstdc++-v3/testsuite/25_algorithms/unique/120789.cc
  b844c411edd6cbdfcbf585555ffc293e  libstdc++-v3/testsuite/25_algorithms/unique/2.cc
  72b6f4e940949680db65cbf48a320570  libstdc++-v3/testsuite/25_algorithms/unique/constexpr.cc
  dc72aaba1141a4d064d97cb11b1948ff  libstdc++-v3/testsuite/25_algorithms/unique/constrained.cc
*************** a0e630899068a41f2ddf2c81cbd386a4  libstd
*** 149274,149280 ****
  b84e90f734d1e8ca59322b53758c6f9c  libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc
  05b5fe236bc0b5ee3fe341b1435caeba  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
  c1b23609040e813a09294f54b708a162  libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
! dc17d5542c1969aa4c52c6a15de5c4fa  libstdc++-v3/testsuite/std/ranges/concat/1.cc
  474d22d474aece24ab6833bba4c36b37  libstdc++-v3/testsuite/std/ranges/conv/1.cc
  63a2d6de25511179d0f6232f1739a1bd  libstdc++-v3/testsuite/std/ranges/conv/112803.cc
  30b021647d63542228568a19a21f2fd4  libstdc++-v3/testsuite/std/ranges/conv/2_neg.cc
--- 149379,149385 ----
  b84e90f734d1e8ca59322b53758c6f9c  libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc
  05b5fe236bc0b5ee3fe341b1435caeba  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
  c1b23609040e813a09294f54b708a162  libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
! 6121dbeb75930b73fe5c552392ee5693  libstdc++-v3/testsuite/std/ranges/concat/1.cc
  474d22d474aece24ab6833bba4c36b37  libstdc++-v3/testsuite/std/ranges/conv/1.cc
  63a2d6de25511179d0f6232f1739a1bd  libstdc++-v3/testsuite/std/ranges/conv/112803.cc
  30b021647d63542228568a19a21f2fd4  libstdc++-v3/testsuite/std/ranges/conv/2_neg.cc
*************** dee72a6a60e99528b0d17bf3ff9a1e15  ltopti
*** 150235,150245 ****
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! 14a378d731b3a3af3bf72c08193ad683  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
! d6a821768afd8889b92c5a53e29d3ce1  maintainer-scripts/crontab
  c67f943b672b0dc1c628ebb0e2df97a3  maintainer-scripts/gcc_release
  262d529ab10d5bd398f14fc1ec9fed1a  maintainer-scripts/generate_libstdcxx_web_docs
  33d97164a8610c7abf67eff7d28f47ff  maintainer-scripts/maintainer-addresses
--- 150340,150350 ----
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! 0366c21dc9120eedf7fadfaeff2ddc9d  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
! 4768ac1c11fd5f6d1ff3384bdf7cb38a  maintainer-scripts/crontab
  c67f943b672b0dc1c628ebb0e2df97a3  maintainer-scripts/gcc_release
  262d529ab10d5bd398f14fc1ec9fed1a  maintainer-scripts/generate_libstdcxx_web_docs
  33d97164a8610c7abf67eff7d28f47ff  maintainer-scripts/maintainer-addresses
diff -Nrcpad gcc-16-20250629/contrib/ChangeLog gcc-16-20250706/contrib/ChangeLog
*** gcc-16-20250629/contrib/ChangeLog	Sun Jun 29 22:32:24 2025
--- gcc-16-20250706/contrib/ChangeLog	Sun Jul  6 22:32:09 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-29  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* mklog.py: In 'main()', specify variable 'root' as global.
+ 
  2025-06-26  Alex Coplan  <alex.coplan@arm.com>
  
  	* mklog.py (main): New.
diff -Nrcpad gcc-16-20250629/gcc/ChangeLog gcc-16-20250706/gcc/ChangeLog
*** gcc-16-20250629/gcc/ChangeLog	Sun Jun 29 22:32:24 2025
--- gcc-16-20250706/gcc/ChangeLog	Sun Jul  6 22:32:09 2025
***************
*** 1,3 ****
--- 1,587 ----
+ 2025-07-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* config/rs6000/vxworks.h (SUBTARGET_DRIVER_SELF_SPECS):
+ 	Redefine to select word size matching TARGET_VXWORKS64.
+ 	(TARGET_VXWORKS64): Redefine in terms of TARGET_64BIT.
+ 
+ 2025-07-04  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	PR target/118241
+ 	* config/riscv/riscv.md (prefetch): Add alternative "r".
+ 
+ 2025-07-04  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* config/riscv/predicates.md (prefetch_operand): mack 5 bits.
+ 
+ 2025-07-04  Raphael Moreira Zinsly  <rzinsly@ventanamicro.com>
+ 
+ 	* config/sh/predicates.md
+ 	(treg_set_expr_not_const01): call sh_recog_treg_set_expr_not_01
+ 	* config/sh/sh-protos.h
+ 	(sh_recog_treg_set_expr_not_01): New function
+ 	* config/sh/sh.cc (sh_recog_treg_set_expr_not_01): Likewise
+ 
+ 2025-07-04  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR c/118948
+ 	* fold-const.cc (tree_expr_nonnegative_warnv_p): Use
+ 	error_operand_p instead of checking for error_mark_node directly.
+ 
+ 2025-07-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-v.cc (expand_vx_binary_vec_dup_vec): Add
+ 	new case SS_PLUS.
+ 	(expand_vx_binary_vec_vec_dup): Ditto.
+ 	* config/riscv/riscv.cc (riscv_rtx_costs): Ditto.
+ 	* config/riscv/vector-iterators.md: Add new op ss_plus.
+ 
+ 2025-07-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120944
+ 	* tree-ssa-sccvn.cc (vn_reference_lookup_3): Gate optimizations
+ 	invalid when volatile is involved.
+ 
+ 2025-07-04  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* common.opt: Add period.
+ 	* common.opt.urls: Regenerate.
+ 
+ 2025-07-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120927
+ 	* tree-vect-data-refs.cc (vect_compute_data_ref_alignment):
+ 	Do not force a DRs base alignment when analyzing an
+ 	epilog loop.  Check whether the step preserves alignment
+ 	for all VFs possibly involved sofar.
+ 
+ 2025-07-04  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/loongarch.md (crc_combine): Avoid nested
+ 	subreg.
+ 
+ 2025-07-04  Shreya Munnangi  <smunnangi1@ventanamicro.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_macro_fusion_pair_p): Add basic
+ 	instrumentation to all cases where fusion is detected.  Fix
+ 	minor formatting goofs found in the process.
+ 
+ 2025-07-04  panciyan  <panciyan@eswincomputing.com>
+ 
+ 	* match.pd: Add signed scalar SAT_ADD IMM form2 matching.
+ 
+ 2025-07-03  Juergen Christ  <jchrist@linux.ibm.com>
+ 
+ 	* config/s390/s390.cc (expand_perm_with_merge): Add size change cases.
+ 	(expand_perm_with_pack): New function.
+ 	(vectorize_vec_perm_const_1): Wire up new function.
+ 
+ 2025-07-03  Co-authored-by: Daniel Barboza  <dbarboza@ventanamicro.com>
+ 	    Co-authored-by: Shreya Munnangi  <smunnangi1@ventanamicro.com>
+ 
+ 	PR target/118886
+ 	* config/riscv/riscv.cc (riscv_macro_fusion_pair_p): Check
+ 	for fusion being disabled earlier.  If PREV is already fused,
+ 	then it can't be fused again.  Be more selective about fusing
+ 	when the destination registers do not match.  Don't fuse into
+ 	loads that aren't scalar integer modes.  Revamp store pair
+ 	commit support.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (aarch64_cbz<optab><mode>1): Move
+ 	above rules for CBB<cond>/CBH<cond>/CB<cond>.
+ 	(*aarch64_tbz<optab><mode>1): Likewise.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (aarch64_cb_rhs): New function.
+ 	* config/aarch64/aarch64.cc (aarch64_cb_rhs): Likewise.
+ 	* config/aarch64/aarch64.md (cbranch<mode>4): Rename to ...
+ 	(cbranch<GPI:mode>4): ...here, and emit CMPBR if possible.
+ 	(cbranch<SHORT:mode>4): New expand rule.
+ 	(aarch64_cb<INT_CMP:code><GPI:mode>): New insn rule.
+ 	(aarch64_cb<INT_CMP:code><SHORT:mode>): Likewise.
+ 	* config/aarch64/constraints.md (Uc0): New constraint.
+ 	(Uc1): Likewise.
+ 	(Uc2): Likewise.
+ 	* config/aarch64/iterators.md (cmpbr_suffix): New mode attr.
+ 	(INT_CMP): New code iterator.
+ 	(cmpbr_imm_constraint): New code attr.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64-option-extensions.def (cmpbr): New
+ 	option.
+ 	* config/aarch64/aarch64.h (TARGET_CMPBR): New macro.
+ 	* doc/invoke.texi (cmpbr): New option.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (far_branch): Replace 0/1 with
+ 	no/yes.
+ 	(aarch64_bcond): Handle rename.
+ 	(aarch64_cbz<optab><mode>1): Likewise.
+ 	(*aarch64_tbz<optab><mode>1): Likewise.
+ 	(@aarch64_tbz<optab><ALLI:mode><GPI:mode>): Likewise.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (BRANCH_LEN_P_1MiB): New constant.
+ 	(BRANCH_LEN_N_1MiB): Likewise.
+ 	(BRANCH_LEN_P_32KiB): Likewise.
+ 	(BRANCH_LEN_N_32KiB): Likewise.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (condjump): Rename to ...
+ 	(aarch64_bcond): ...here.
+ 	(*compare_condjump<GPI:mode>): Rename to ...
+ 	(*aarch64_bcond_wide_imm<GPI:mode>): ...here.
+ 	(aarch64_cb<optab><mode>): Rename to ...
+ 	(aarch64_cbz<optab><mode>1): ...here.
+ 	(*cb<optab><mode>1): Rename to ...
+ 	(*aarch64_tbz<optab><mode>1): ...here.
+ 	(@aarch64_tb<optab><ALLI:mode><GPI:mode>): Rename to ...
+ 	(@aarch64_tbz<optab><ALLI:mode><GPI:mode>): ...here.
+ 	(restore_stack_nonlocal): Handle rename.
+ 	(stack_protect_combined_test): Likewise.
+ 	* config/aarch64/aarch64-simd.md (cbranch<mode>4): Likewise.
+ 	* config/aarch64/aarch64-sme.md (aarch64_restore_za): Likewise.
+ 	* config/aarch64/aarch64.cc (aarch64_gen_test_and_branch): Likewise.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (cbranch<mode>4): Reformat.
+ 	(cbranchcc4): Likewise.
+ 	(condjump): Likewise.
+ 	(*compare_condjump<GPI:mode>): Likewise.
+ 	(aarch64_cb<optab><mode>1): Likewise.
+ 	(*cb<optab><mode>1): Likewise.
+ 	(tbranch_<code><mode>3): Likewise.
+ 	(@aarch64_tb<optab><ALLI:mode><GPI:mode>): Likewise.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (condjump): Move.
+ 	(*compare_condjump<GPI:mode>): Likewise.
+ 	(aarch64_cb<optab><mode>1): Likewise.
+ 	(*cb<optab><mode>1): Likewise.
+ 	(tbranch_<code><mode>3): Likewise.
+ 	(@aarch64_tb<optab><ALLI:mode><GPI:mode>): Likewise.
+ 
+ 2025-07-03  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR tree-optimization/120780
+ 	* tree-object-size.cc (inner_at_offset,
+ 	get_wholesize_for_memref): New functions.
+ 	(addr_object_size): Call get_wholesize_for_memref.
+ 
+ 2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120936
+ 	* config/i386/i386.cc (x86_print_call_or_nop): Add a label
+ 	argument and use it to print label.
+ 	(x86_function_profiler): Emit label only when __mcount_loc
+ 	section is used.
+ 
+ 2025-07-03  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (get_combined_location): Handle negative
+ 	offsets; output better diagnostics.
+ 	(get_relative_location_for_locus): Reutrn -1 for unknown location.
+ 	(function_instance::get_cgraph_node): New member function.
+ 	(match_with_target): New function.
+ 	(dump_stmt): New function.
+ 	(function_instance::lookup_count): New function.
+ 	(mark_expr_locations): New function.
+ 	(function_instance::match): New function.
+ 	(autofdo_source_profile::offline_external_functions): Do
+ 	not repeat renaming; manage two worklists and do matching.
+ 	(autofdo_source_profile::offline_unrealized_inlines): Simplify.
+ 	(afdo_set_bb_count): do not look for lost discriminators.
+ 	(auto_profile): Do not ICE when profile reading failed.
+ 	* common.opt (Wauto-profile): New warning flag
+ 	* doc/invoke.texi (-Wauto-profile): Document.
+ 
+ 2025-07-03  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-fnsummary.cc (analyze_function_body): For loop
+ 	heuristics use header count instead of preheader count.
+ 
+ 2025-07-03  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-cp.cc (update_profiling_info): Watch for division by zero.
+ 
+ 2025-07-03  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md
+ 	(vec_load_lanes<mode><vsingle>): Expand else operand in
+ 	subvector mode, as per optab documentation.
+ 	(vec_mask_load_lanes<mode><vsingle>): Add missing mode for
+ 	operand 3.
+ 	* config/aarch64/predicates.md (aarch64_maskload_else_operand):
+ 	Remove const_int.
+ 
+ 2025-07-03  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	* doc/md.texi (Standard Names): Clarify mode of else operand for
+ 	vec_mask_load_lanesmn optab.
+ 
+ 2025-07-03  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-cp.cc (cs_interesting_for_ipcp_p): Handle
+ 	correctly GLOBAL0 afdo counts.
+ 	(ipcp_cloning_candidate_p): Do not rule out nodes
+ 	!node->optimize_for_size_p ().
+ 	(good_cloning_opportunity_p): Handle afdo counts
+ 	as non-zero.
+ 
+ 2025-07-03  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-cp.cc (hint_time_bonus): Return sreal and avoid
+ 	conversions to integer.
+ 	(good_cloning_opportunity_p): Avoid sreal to integer
+ 	conversions
+ 	(perform_estimation_of_a_value): Update.
+ 
+ 2025-07-03  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (afdo_hot_bb_threshod): New global
+ 	variable.
+ 	(maybe_hot_afdo_count_p): New function.
+ 	(autofdo_source_profile::read): Do not set up dump file;
+ 	set afdo_hot_bb_threshod.
+ 	(afdo_annotate_cfg): Handle partial training.
+ 	(afdo_callsite_hot_enough_for_early_inline):
+ 	Use maybe_hot_afdo_count_p.
+ 	(auto_profile_offline::execute): Read autofdo file.
+ 	* auto-profile.h (maybe_hot_afdo_count_p): Declare.
+ 	(afdo_hot_bb_threshold): Declare.
+ 	* coverage.cc (read_counts_file): Also set gcov_profile_info.
+ 	(coverage_init): Do not read autofdo file.
+ 	* opts.cc (enable_fdo_optimizations): Add autofdo parameter;
+ 	do not set flag_branch_probabilities and flag_profile_values
+ 	with it.
+ 	(common_handle_option): Update.
+ 	* passes.cc (finish_optimization_passes): Do not end branch
+ 	prob here.
+ 	(pass_manager::dump_profile_report): Also mark change after
+ 	autofdo pass.
+ 	* profile.cc: Include auto-profile.h
+ 	(gcov_profile_info): New global variable.
+ 	(struct afdo_fdo_record): New struture.
+ 	(compute_branch_probabilities): Record afdo profile.
+ 	(end_branch_prob): Dump afdo/fdo profile comparsion.
+ 	* profile.h (gcov_profile_info): Declarre.
+ 	* tree-profile.cc (tree_profiling): Call end_branch_prob
+ 	(pass_ipa_tree_profile::gate): Also enable with autoFDO
+ 
+ 2025-07-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/118669
+ 	* tree-vect-stmts.cc (vectorizable_load): Emit loads
+ 	with proper (element) alignment.
+ 	(vectorizable_store): Likewise.
+ 
+ 2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
+ 	gen_tls_local_dynamic_64.
+ 	* config/i386/i386.md (*tls_global_dynamic_64_largepic): Add
+ 	RDI clobber and use it to generate LEA.
+ 	(*tls_local_dynamic_64_<mode>): Likewise.
+ 	(*tls_local_dynamic_base_64_largepic): Likewise.
+ 	(@tls_local_dynamic_64_<mode>): Add a clobber.
+ 
+ 2025-07-02  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
+ 	gen_tls_global_dynamic_64.
+ 	* config/i386/i386.md (*tls_global_dynamic_64_<mode>): Add RDI
+ 	clobber and use it to generate LEA.
+ 	(@tls_global_dynamic_64_<mode>): Add a clobber.
+ 
+ 2025-07-02  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	PR target/120356
+ 	* config/riscv/riscv-v.cc
+ 	(expand_const_vector_interleaved_stepped_npatterns):
+ 	Fix ASHIFT to LSHIFTRT insn.
+ 
+ 2025-07-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120927
+ 	* tree-vect-loop.cc (vect_analyze_loop): Stop querying
+ 	further epilogues after one with partial vectors.
+ 
+ 2025-07-02  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/driver-i386.cc (host_detect_local_cpu): Change
+ 	to AMX-FP8 for Diamond Rapids.
+ 
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* tree-object-size.cc (access_with_size_object_size): Update comments
+ 	for pointers with .ACCESS_WITH_SIZE.
+ 	(collect_object_sizes_for): Propagate size info through GIMPLE_ASSIGN
+ 	for pointers with .ACCESS_WITH_SIZE.
+ 
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* doc/extend.texi: Extend counted_by attribute to pointer fields in
+ 	structures. Add one more requirement to pointers with counted_by
+ 	attribute.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120471
+ 	* tree.h (address_invariant_p): New function.
+ 	* tree.cc (address_invariant_p): New function.
+ 	(tree_invariant_p_1): Use it for ADDR_EXPR handling.  Formatting
+ 	tweak.
+ 
+ 2025-07-01  Remi Machet  <rmachet@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*shrn_to_subhn_<mode>): Add pattern
+ 	converting mvn+shrn into mvni+subhn.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120608
+ 	* passes.def (pass_musttail): Move before pass_sanopt.
+ 	* tree-tailcall.cc (empty_eh_cleanup): Handle GIMPLE_RESX
+ 	which doesn't throw externally through recursion on single
+ 	eh edge (if any and cnt still allows that).
+ 	(find_tail_calls): Add ESUCC, IGNORED_EDGES and MUST_SEE_BBS
+ 	arguments.  Handle GIMPLE_CONDs for non-simplified cleanups with
+ 	finally_tmp temporaries both on backward and forward walks, adjust
+ 	recursive call.
+ 	(tree_optimize_tail_calls_1): Adjust find_tail_calls callers.
+ 
+ 2025-07-01  Ezra Sitorus  <ezra.sitorus@arm.com>
+ 
+ 	* config/aarch64/aarch64-sys-regs.def: Copy from Binutils.
+ 
+ 2025-07-01  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR debug/120902
+ 	* print-tree.cc (debug with const tree_node *): Call debug_tree
+ 	instead of debug.
+ 
+ 2025-07-01  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	* fold-const-call.cc (fold_const_call_ss): Constant fold for
+ 	single arg pi-based trigonometric builtins.
+ 	(fold_const_call_sss): Constant fold for double arg pi-based
+ 	trigonometric builtins.
+ 	* fold-const.cc (negate_mathfn_p): asinpi/atanpi is odd func.
+ 	(tree_call_nonnegative_warnv_p): acospi always non-neg,
+ 	asinpi/atanpi non-neg iff arg non-neg.
+ 	* tree-call-cdce.cc (can_test_argument_range): Add acospi/asinpi.
+ 	(edom_only_function): Add acospi/asinpi/cospi/sinpi.
+ 	(get_no_error_domain): Add acospi/asinpi.
+ 
+ 2025-06-30  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/120242
+ 	PR rtl-optimization/120627
+ 	PR rtl-optimization/120736
+ 	PR rtl-optimization/120813
+ 	* ext-dce.cc (ext_dce_process_uses): Remove some cases where we
+ 	unnecessarily expanded live sets for promoted subregs.
+ 	(expand_changed_pseudos): New function.
+ 	(reset_subreg_promoted_p): Use it.
+ 
+ 2025-06-30  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	PR target/120714
+ 	* config/riscv/riscv.cc (riscv_allocate_and_probe_stack_space):
+ 	Fix SP-addresses in REG_CFA_DEF_CFA notes for stack-clash case.
+ 
+ 2025-06-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic-color.cc: Use nullptr rather than NULL.
+ 	* diagnostic-format-sarif.cc: Likewise.
+ 	* diagnostic-format-text.cc: Likewise.
+ 	* diagnostic-macro-unwinding.cc: Likewise.
+ 	* diagnostic-path-output.cc: Likewise.
+ 	* diagnostic-path.cc: Likewise.
+ 	* diagnostic-show-locus.cc: Likewise.
+ 	* diagnostic-spec.cc: Likewise.
+ 	* diagnostic.cc: Likewise.
+ 	* lazy-diagnostic-path.cc: Likewise.
+ 	* simple-diagnostic-path.cc: Likewise.
+ 	* tree-diagnostic-client-data-hooks.cc: Likewise.
+ 
+ 2025-06-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic-format-sarif.cc
+ 	(sarif_builder::maybe_make_kinds_array): Convert
+ 	diagnostic_event::meaning enums to enum class.
+ 	* diagnostic-path-output.cc (path_label::get_text): Likewise.
+ 	* diagnostic-path.cc
+ 	(diagnostic_event::meaning::maybe_get_verb_str): Likewise.
+ 	(diagnostic_event::meaning::maybe_get_noun_str): Likewise.
+ 	(diagnostic_event::meaning::maybe_get_property_str): Likewise.
+ 	* diagnostic-path.h (diagnostic_event::verb): Likewise.
+ 	(diagnostic_event::noun): Likewise.
+ 	(diagnostic_event::property): Likewise.
+ 	(diagnostic_event::meaning): Likewise.
+ 
+ 2025-06-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* Makefile.in (OBJS-libcommon): Drop diagnostic-format-json.o.
+ 	* common.opt (fdiagnostics-format=): Drop
+ 	"json|json-stderr|json-file".
+ 	(diagnostics_output_format): Drop values "json", "json-stderr",
+ 	and "json-file".
+ 	* diagnostic-format-json.cc: Delete file.
+ 	* diagnostic-format.h
+ 	(diagnostic_output_format_init_json_stderr): Delete.
+ 	(diagnostic_output_format_init_json_file): Delete.
+ 	* diagnostic.cc (diagnostic_output_format_init): Delete cases for
+ 	DIAGNOSTICS_OUTPUT_FORMAT_JSON_STDERR and
+ 	DIAGNOSTICS_OUTPUT_FORMAT_JSON_FILE.
+ 	* diagnostic.h (DIAGNOSTICS_OUTPUT_FORMAT_JSON_STDERR): Delete.
+ 	(DIAGNOSTICS_OUTPUT_FORMAT_JSON_FILE): Delete.
+ 	* doc/invoke.texi: Remove references to json output format.
+ 	* doc/ux.texi: Likewise.
+ 	* selftest-run-tests.cc (selftest::run_tests): Drop call to
+ 	deleted selftest::diagnostic_format_json_cc_tests.
+ 	* selftest.h (selftest::diagnostic_format_json_cc_tests): Delete.
+ 
+ 2025-06-30  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* common.opt.urls: Regenerate.
+ 
+ 2025-06-30  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-v.cc (expand_vx_binary_vec_vec_dup): Add
+ 	new case US_MINUS.
+ 	* config/riscv/riscv.cc (riscv_rtx_costs): Ditto.
+ 	* config/riscv/vector-iterators.md: Add new op us_minus.
+ 
+ 2025-06-30  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/109116
+ 	* config/rs6000/mma.md (unspec): Delete UNSPEC_MMA_EXTRACT.
+ 	(vsx_disassemble_pair): Expand into a vector register sized subreg.
+ 	(mma_disassemble_acc): Likewise.
+ 	(*vsx_disassemble_pair): Delete.
+ 	(*mma_disassemble_acc): Likewise.
+ 
+ 2025-06-30  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/sifive-7.md: Add primary vector pipeline model
+ 	for SiFive 7 series.
+ 
+ 2025-06-30  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/120659
+ 	* config/riscv/sifive-7.md: Add B extension, fp16 and missing
+ 	scalar instruction type for sifive-7 pipeline model.
+ 
+ 2025-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_2): Handle ternary
+ 	and call operators when swapping operands.
+ 
+ 2025-06-30  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR target/119100
+ 	* config/riscv/autovec-opt.md (*vfnmsub_<mode>,*vfnmadd_<mode>): Handle
+ 	both add and acc variants.
+ 	* config/riscv/vector.md (*pred_mul_neg_<optab><mode>_scalar_undef): New
+ 	pattern.
+ 
+ 2025-06-30  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (gb10): New entry.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* doc/invoke.texi (AArch64 Options): Document the above.
+ 
+ 2025-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120520
+ 	PR c/117023
+ 	* builtin-attrs.def (DEF_LIST_INT_INT_INT): Define it and
+ 	use for 1,2,3.
+ 	(ATTR_NONNULL_IF123_LIST): New DEF_ATTR_TREE_LIST.
+ 	(ATTR_NONNULL_4_IF123_LIST): Likewise.
+ 	* builtins.def (BUILT_IN_FWRITE): Use ATTR_NONNULL_4_IF123_LIST
+ 	instead of ATTR_NONNULL_LIST.
+ 	(BUILT_IN_FWRITE_UNLOCKED): Likewise.
+ 	* gimple.h (infer_nonnull_range_by_attribute): Add another optional
+ 	tree * argument defaulted to NULL.
+ 	* gimple.cc (infer_nonnull_range_by_attribute): Add OP3 argument,
+ 	handle 3 argument nonnull_if_nonzero attribute.
+ 	* builtins.cc (validate_arglist): Handle 3 argument nonnull_if_nonzero
+ 	attribute.
+ 	* tree-ssa-ccp.cc (pass_post_ipa_warn::execute): Likewise.
+ 	* ubsan.cc (instrument_nonnull_arg): Adjust
+ 	infer_nonnull_range_by_attribute caller, handle 3 argument
+ 	nonnull_if_nonzero attribute.
+ 	* gimple-range-infer.cc (gimple_infer_range::gimple_infer_range):
+ 	Handle 3 argument nonnull_if_nonzero attribute.
+ 	* doc/extend.texi (nonnull_if_nonzero): Document 3 argument version
+ 	of the attribute.
+ 
+ 2025-06-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/120733
+ 	* lra-eliminations.cc (move_plus_up): Check whether lowpart_subreg
+ 	returns null.
+ 
+ 2025-06-30  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (autofdo_source_profile::offline_external_functions):
+ 	Add missing newline in dump.
+ 	(afdo_propagate_edge): If annotated BB or edge has too small count
+ 	bump it up to mitigate profile imprecisions caused by vectorizer.
+ 	(afdo_propagate): Increase number of iteraitons and fix dump
+ 
+ 2025-06-30  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (struct decl_lineno): Turn to structure; add
+ 	location.
+ 	(dump_inline_stack): Update.
+ 	(get_inline_stack): Update.
+ 	(get_relative_location_for_locus): Fixup formating.
+ 	(function_instance::get_function_instance_by_decl): Add
+ 	LOCATION parameter; improve dumping.
+ 	(autofdo_source_profile::get_callsite_total_count): Improve dumping;
+ 	update.
+ 	(walk_block): Update.
+ 	(autofdo_source_profile::offline_unrealized_inlines): Update.
+ 	(autofdo_source_profile::get_count_info): Update.
+ 
+ 2025-06-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120840
+ 	* config/i386/i386-expand.cc (ix86_expand_call): Don't mark
+ 	hard frame pointer as clobber.
+ 	* config/i386/i386-options.cc (ix86_set_func_type): Use
+ 	TYPE_NO_CALLEE_SAVED_REGISTERS instead of
+ 	TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP.
+ 	* config/i386/i386.cc (ix86_function_ok_for_sibcall): Remove the
+ 	TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP check.
+ 	(ix86_save_reg): Merge TYPE_NO_CALLEE_SAVED_REGISTERS and
+ 	TYPE_PRESERVE_NONE with TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP.
+ 	* config/i386/i386.h (call_saved_registers_type): Remove
+ 	TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP.
+ 	* doc/extend.texi: Update no_callee_saved_registers documentation.
+ 
+ 2025-06-30  Jin Ma  <jinma@linux.alibaba.com>
+ 
+ 	* config/riscv/riscv-vsetvl.cc (bitmap_union_of_preds_with_entry):
+ 	Refactor.
+ 
+ 2025-06-30  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/pipeline-checker: New file.
+ 
  2025-06-28  H.J. Lu  <hjl.tools@gmail.com>
  
  	PR debug/120849
diff -Nrcpad gcc-16-20250629/gcc/DATESTAMP gcc-16-20250706/gcc/DATESTAMP
*** gcc-16-20250629/gcc/DATESTAMP	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/DATESTAMP	Sun Jul  6 22:32:09 2025
***************
*** 1 ****
! 20250629
--- 1 ----
! 20250706
diff -Nrcpad gcc-16-20250629/gcc/Makefile.in gcc-16-20250706/gcc/Makefile.in
*** gcc-16-20250629/gcc/Makefile.in	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/Makefile.in	Sun Jul  6 22:32:09 2025
*************** OBJS = \
*** 1853,1859 ****
  # no target dependencies.
  OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
  	diagnostic-format-html.o \
- 	diagnostic-format-json.o \
  	diagnostic-format-sarif.o \
  	diagnostic-format-text.o \
  	diagnostic-global-context.o \
--- 1853,1858 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/ChangeLog gcc-16-20250706/gcc/ada/ChangeLog
*** gcc-16-20250629/gcc/ada/ChangeLog	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/ChangeLog	Sun Jul  6 22:32:09 2025
***************
*** 1,3 ****
--- 1,1104 ----
+ 2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/Make-lang.in (ACATSDIR): Change to acats-4.
+ 
+ 2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/utils.cc (make_packable_type): Clear the TYPE_PACKED
+ 	flag in the case where the alignment is bumped.
+ 
+ 2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.cc (Subprogram_Body_to_gnu): Do not generate
+ 	a block-copy out for a null initialization procedure when the _Init
+ 	parameter is not passed in.
+ 
+ 2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_subprog_type): Only apply the
+ 	transformation to integer types.
+ 
+ 2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_subprog_type): Add guards.
+ 
+ 2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_subprog_type): In the case of a
+ 	subprogram using the Copy-In/Copy-Out mechanism, deal specially with
+ 	the case of 2 parameters of differing sizes.
+ 	* gcc-interface/trans.cc (Subprogram_Body_to_gnu): In the case of a
+ 	subprogram using the Copy-In/Copy-Out mechanism, make sure the types
+ 	are consistent on the two sides for all the parameters.
+ 
+ 2025-07-04  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Type_Conversion): Replace code for
+ 	detecting a similar case with a more comprehensive test.
+ 
+ 2025-07-04  Bob Duff  <duff@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst
+ 	(Short_Circuit_And_Or): Add more documentation.
+ 	* sem_ch8.adb (Analyze_Subprogram_Renaming):
+ 	Disallow renamings.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2025-07-04  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch7.adb (Make_Final_Call): Tweak search of Finalize primitive.
+ 	* exp_util.adb (Finalize_Address): Likewise.
+ 
+ 2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* freeze.adb (Check_Compile_Time_Size): Try harder to see whether
+ 	the bounds of array types are known at compile time.
+ 
+ 2025-07-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_aux.ads (First_Discriminant): Remove space before period.
+ 
+ 2025-07-04  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Record_Representation_Clause): In deciding
+ 	whether to generate a warning about a missing component clause, in
+ 	addition to calling Is_Unchecked_Union also call a new local
+ 	function, Unchecked_Union_Pragma_Pending, which checks for the
+ 	case of a not-yet-analyzed Unchecked_Union pragma occurring later
+ 	in the declaration list.
+ 
+ 2025-07-04  Steve Baird  <baird@adacore.com>
+ 
+ 	* mutably_tagged.adb (Make_CW_Size_Compile_Check): Include the
+ 	value of the Size'Class limit in the message generated via a
+ 	Compile_Time_Error pragma.
+ 
+ 2025-07-04  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* sem_ch13.adb (Check_Aspect_At_Freeze_Point): Remove obsolete bits.
+ 
+ 2025-07-04  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Aspect_Specifications): Fix error emission.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/Makefile.in (gnatlib-sjlj): Delete.
+ 	(gnatlib-zcx): Do not modify Frontend_Exceptions constant.
+ 	* libgnat/system-linux-loongarch.ads (Frontend_Exceptions): Delete.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (type_contains_only_integral_data): Do not
+ 	return false only because the type contains pointer data.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_entity): Use default messages
+ 	for errors reported for Object_Size clauses.
+ 	(validate_size): Give an error for stand-alone objects of composite
+ 	types if the specified size is not a multiple of the alignment.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.cc (addressable_p): Add COMPG third parameter.
+ 	<COMPONENT_REF>: Do not return true out of alignment considerations
+ 	for non-strict-alignment targets if COMPG is set.
+ 	(Call_to_gnu): Pass true as COMPG in the call to the addressable_p
+ 	predicate if the called subprogram is an initialization procedure.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.cc (gnat_to_gnu) <N_Allocator>: Allocate the
+ 	bounds alongside the data if the Is_Constr_Array_Subt_With_Bounds
+ 	flag is set on the designated type.
+ 	<N_Free_Statement>: Take into account the allocated bounds if the
+ 	Is_Constr_Array_Subt_With_Bounds flag is set on the designated type.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_component_type): Validate the
+ 	Component_Size like the size of a type only if the component type
+ 	is actually packed.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_elab.adb (Check_Overriding_Primitive): Find early call region
+ 	of the subprogram body declaration, not of the subprogram body stub.
+ 
+ 2025-07-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb (N_Unchecked_Type_Conversion):
+ 	Remove useless Nmake_Assert.
+ 	* tbuild.adb (Unchecked_Convert_To):
+ 	Narrow the bitfield-related conditions.
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_util.adb (Insert_Actions): Fix check.
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch6.adb (Expand_Ctrl_Function_Call): Precisify comment.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch6.adb (Expand_Ctrl_Function_Call): Do not bail out for the
+ 	declarations of return objects.
+ 
+ 2025-07-03  Daniel King  <dmking@adacore.com>
+ 
+ 	* Makefile.rtl (LIBGNAT_TARGET_PAIRS): New unit s-tsgsba__cheri.adb for morello-freebsd.
+ 	* libgnarl/s-tassta.adb (Get_Stack_Base): New function.
+ 	* libgnarl/s-tsgsba__cheri.adb: New file for CHERI targets.
+ 	* libgnarl/s-tsgsba.adb: New default file for non-CHERI targets.
+ 	* libgnat/s-stausa.adb (Fill_Stack, Compute_Result): Port to CHERI.
+ 	* libgnat/s-stausa.ads (Initialize_Analyzer, Stack_Analyzer): Port to CHERI.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Return_Subtype_Indication): Use Original_Node.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Return_Subtype_Indication): Use type from
+ 	explicit subtype indication, when possible.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Return_Subtype_Indication): Adjust error message
+ 	to match the RM wording.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Return_Subtype_Indication): Use the nominal
+ 	subtype of a return object; literally implement the RM rule about
+ 	elementary types; check for static subtype compatibility both when
+ 	the subtype is given as a subtype mark and a subtype indication.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* repinfo.adb (First_Comp_Or_Discr.Is_Placed_Before): Return True
+ 	only if the components are in the same component list.
+ 
+ 2025-07-03  Denis Mazzucato  <mazzucato@adacore.com>
+ 
+ 	* sem_disp.adb (Check_Dispatching_call): Fix uninitialized Subp_Entity.
+ 	* sem_util.adb (Update_Controlling_Argument): No need to replace controlling argument
+ 	in case of functions.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* errid.ads: Adjust header to renaming and fix copyright line.
+ 	* errid.adb: Adjust header to renaming and add blank line.
+ 	* erroutc-pretty_emitter.ads: Adjust header to renaming.
+ 	* erroutc-pretty_emitter.adb: Likewise.
+ 	* erroutc-sarif_emitter.ads: Likewise.
+ 	* erroutc-sarif_emitter.adb: Likewise.
+ 	* errsw.ads: Adjust header to renaming and add blank line.
+ 	* errsw.adb: Likewise.
+ 	* json_utils.ads: Likewise.
+ 	* json_utils.adb: Adjust header to renaming.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* errid.ads (Diagnostic_Entries): Now a constant.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* errid.ads (Diagnostic_Entries): Remove nested aggregate.
+ 	* errsw.adb (Switches): Likewise.
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch7.adb (Make_Deep_Record_Body): Fix case of absent Initialize
+ 	primitive.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Count_Default_Sized_Task_Stacks): Refine subtypes of
+ 	parameters; same for callsites.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_imgv.adb (Expand_Value_Attribute): Do not call Set_Etype on N
+ 	after rewriting it by means of OK_Convert_To.
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_aggr.adb (Generate_Finalization_Actions): Stop assuming that
+ 	initialize primitive exists.
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch7.adb (Build_Record_Deep_Procs): Fix typo in comment.
+ 
+ 2025-07-03  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch12.adb (Install_Spec): Remove "not Is_Generic_Instance (Par)"
+ 	in test for setting Instance_Parent_Unit. Revise comment to no longer
+ 	say "noninstance", plus remove "???".
+ 	(Remove_Parent): Restructure if_statement to allow for both "elsif"
+ 	parts to be executed (by changing them to be separate if_statements
+ 	within an "else" part).
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch3.adb (Predefined_Primitive_Bodies): Fix comment.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_tss.adb (TSS): Refactor IF condition to make code smaller.
+ 	* lib.adb (Increment_Serial_Number, Synchronize_Serial_Number):
+ 	Use type of renamed object when creating renaming.
+ 	* lib.ads (Unit_Record): Refine subtype of dependency number.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valuef.adb: Document the prerequisites more precisely.
+ 	* libgnat/a-tifiio.adb (OK_Get_32): Adjust to the prerequisites.
+ 	(OK_Get_64): Likewise.
+ 	* libgnat/a-tifiio__128.adb (OK_Get_32): Likewise.
+ 	(OK_Get_64): Likewise.
+ 	(OK_Get_128): Likewise.
+ 	* libgnat/a-wtfiio.adb (OK_Get_32): Likewise.
+ 	(OK_Get_64): Likewise.
+ 	* libgnat/a-wtfiio__128.adb (OK_Get_32): Likewise.
+ 	(OK_Get_64): Likewise.
+ 	(OK_Get_128): Likewise.
+ 	* libgnat/a-ztfiio.adb (OK_Get_32): Likewise.
+ 	(OK_Get_64): Likewise.
+ 	* libgnat/a-ztfiio__128.adb (OK_Get_32): Likewise.
+ 	(OK_Get_64): Likewise.
+ 	(OK_Get_128): Likewise.
+ 	* exp_imgv.adb (Expand_Value_Attribute): Adjust the conditions under
+ 	which the RE_Value_Fixed{32,64,128} routines are called for ordinary
+ 	fixed-point types.
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch3.adb (Make_Predefined_Primitive_Specs): Fix comment.
+ 
+ 2025-07-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch7.adb (Insert_Actions_In_Scope_Around): Fix condition.
+ 
+ 2025-07-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* checks.adb: Remove unnecessary "return;" statements.
+ 	* eval_fat.adb: Likewise.
+ 	* exp_aggr.adb: Likewise.
+ 	* exp_attr.adb: Likewise.
+ 	* exp_ch3.adb: Likewise.
+ 	* exp_ch4.adb: Likewise.
+ 	* exp_ch5.adb: Likewise.
+ 	* exp_ch6.adb: Likewise.
+ 	* exp_unst.adb: Likewise.
+ 	* krunch.adb: Likewise.
+ 	* layout.adb: Likewise.
+ 	* libgnat/s-excdeb.adb: Likewise.
+ 	* libgnat/s-trasym__dwarf.adb: Likewise.
+ 	* par-endh.adb: Likewise.
+ 	* par-tchk.adb: Likewise.
+ 	* sem.adb: Likewise.
+ 	* sem_attr.adb: Likewise.
+ 	* sem_ch6.adb: Likewise.
+ 	* sem_elim.adb: Likewise.
+ 	* sem_eval.adb: Likewise.
+ 	* sfn_scan.adb: Likewise.
+ 
+ 2025-07-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_characteristics.rst:
+ 	Change Ignore to Disable.
+ 	* sem_ch13.ads (Analyze_Aspect_Specifications):
+ 	Minor: Remove incorrect comment; there is no need to check
+ 	Has_Aspects (N) at the call site.
+ 	* gnat_rm.texi: Regenerate.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-07-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* types.ads (Empty_Or_Error): Remove.
+ 	* atree.adb: Remove reference to Empty_Or_Error.
+ 	* par-endh.adb: Likewise.
+ 	* sem_ch12.adb: Likewise.
+ 	* sem_ch3.adb: Likewise.
+ 	* sem_util.adb: Likewise.
+ 	* treepr.adb: Likewise.
+ 
+ 2025-07-03  Viljar Indus  <indus@adacore.com>
+ 
+ 	* sem_ch10.adb(Analyze_With_Clause): Call Semantics instead
+ 	of Analyze to bring Current_Sem_Unit up to date.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-xref-spark_specific.adb
+ 	(Enclosing_Subprogram_Or_Library_Package): Traverse subunits and body
+ 	stubs.
+ 
+ 2025-07-03  Tonu Naks  <naks@adacore.com>
+ 
+ 	* libgnat/i-cstrin.ads (Value): add documentation
+ 
+ 2025-07-03  Aleksandra Pasek  <pasek@adacore.com>
+ 
+ 	* libgnat/a-strsup.adb (Super_Delete): Fix index check.
+ 	* libgnat/a-stwisu.adb (Super_Delete): Likewise.
+ 	* libgnat/a-stzsup.adb (Super_Delete): Likewise.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch4.adb (Handle_Changed_Representation): Alphabetize local
+ 	variables.  Set the No_Finalize_Actions flag on the assignment.
+ 
+ 2025-07-03  Joffrey Huguet  <huguet@adacore.com>
+ 
+ 	* aspects.ads: Define an identifier for Potentially_Invalid.
+ 	* doc/gnat_rm/implementation_defined_aspects.rst: Add section for Potentially_Invalid.
+ 	* sem_attr.adb (Analyze_Attribute_Old_Result): Attribute Old is allowed to occur in a
+ 	Potentially_Invalid aspect.
+ 	* sem_ch13.adb (Analyze_Aspect_Specifications): Handle Potentially_Invalid.
+ 	* sem_util.adb (Has_Potentially_Invalid): Returns True iff an entity is subject to the
+ 	Potentially_Invalid aspect.
+ 	* sem_util.ads (Has_Potentially_Invalid): Idem.
+ 	* snames.ads-tmpl: New name for Potentially_Invalid.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2025-07-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch10.adb (Analyze_Compilation_Unit): Ignored ghost unit need no
+ 	elaboration checks.
+ 
+ 2025-07-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valued.adb (Integer_to_Decimal): Use truncation for the
+ 	scaled divide operation performed for bases other than 10.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/120705
+ 	* exp_ch6.adb (Needs_BIP_Collection): Always return False if the
+ 	type has relaxed finalization.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valuef.adb (Integer_to_Fixed): Restore rounding of the
+ 	first scaled divide operation.
+ 
+ 2025-07-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* gnat1drv.adb (Gnat1drv): Do minimal decoration of the spec and body
+ 	of an ignored ghost compilation unit.
+ 
+ 2025-07-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* ali.ads (Unit_Record): Fix grammar in comment.
+ 	* bindgen.adb (Num_Elab_Calls, Num_Primary_Stacks): Remove counters
+ 	that were only incremented and never actually used.
+ 
+ 2025-07-01  Tonu Naks  <naks@adacore.com>
+ 
+ 	* libgnat/s-valuer.adb (Scan_Decimal_Digits,
+ 	Scan_Integral_Digits): fix condition for rejecting
+ 	underscore.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valued.adb (Integer_To_Decimal): Deal specifically with
+ 	Val = 2**(Int'Size - 1) if Minus is not set.  Exit the loops when V
+ 	saturates to 0 in the case of (huge) negative exponents.  Use Base
+ 	instead of B consistently in unsigned computations.
+ 	* libgnat/s-valuef.adb (Integer_To_Fixed): Use Base instead of B
+ 	consistently in unsigned computations.
+ 
+ 2025-07-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Fixup_Universal_Fixed_Operation): Move to spec.
+ 	* exp_ch4.ads (Fixup_Universal_Fixed_Operation): Move from body.
+ 	* exp_spark.adb (Expand_SPARK): Call a fixup expansion routine.
+ 
+ 2025-07-01  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_ch3.adb (Build_Heap_Or_Pool_Allocator): Test not Has_Relaxed_Finalization
+ 	as a guard against retrieving BIP_Collection formal (and related code).
+ 
+ 2025-07-01  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* exp_ch3.adb (Build_Untagged_Record_Equality): Report the
+ 	warning when no component of an untagged record type U is a
+ 	record type, and the type C of some of its components has
+ 	defined its user-defined equality operator "=".
+ 	* exp_ch4.adb (Expand_Composite_Equality): Report the warning
+ 	calling Warn_On_Ignored_Equality_Operator.
+ 	* sem_warn.ads (Warn_On_Ignored_Equality_Operator): New subprogram.
+ 	* sem_warn.adb (Warn_On_Ignored_Equality_Operator): Factorize code
+ 	reporting the warning.
+ 
+ 2025-07-01  Tonu Naks  <naks@adacore.com>
+ 
+ 	* libgnat/a-ngelfu.adb: conditional computation of X^2
+ 
+ 2025-07-01  Steve Baird  <baird@adacore.com>
+ 
+ 	* Makefile.rtl: Add entry for new unit's object file.
+ 	* libgnat/s-casuti.adb: Remove bodies of subprograms that were moved
+ 	to the new unit.
+ 	* libgnat/s-casuti.ads: Replace (with renamings) declarations for
+ 	subprograms that moved to the new unit.
+ 	* libgnat/s-cautns.adb: Body for new unit (a new source file).
+ 	* libgnat/s-cautns.ads: Spec for new unit (a new source file).
+ 	* libgnat/s-valuti.adb: Use the new unit instead of the old one.
+ 	* gcc-interface/Make-lang.in: Add entries for new unit's object file.
+ 	* gcc-interface/Makefile.in: Likewise.
+ 
+ 2025-07-01  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch3.adb (Constrain_Corresponding_Record): Inherit Class_Wide_Type on the
+ 	created constrained subtype.
+ 
+ 2025-07-01  Artur Pietrek  <pietrek@adacore.com>
+ 
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst: add
+ 	GNAT LLVM explicit selection in GPR file
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch7.adb (Shift_Address_For_Descriptor): Add dummy variable
+ 	to make sure that System_Storage_Elements is loaded.
+ 
+ 2025-07-01  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* doc/gnat_rm/gnat_language_extensions.rst: Document new extension.
+ 	* gen_il-fields.ads (Opt_Field_Enum): Add new fields.
+ 	* gen_il-types.ads (N_Loop_Flow_Statement, N_Continue_Statement): New
+ 	node kinds.
+ 	* gen_il-gen-gen_nodes.adb (N_Loop_Flow_Statement): New abstract node
+ 	kind.
+ 	(N_Continue_Statement): New node kind.
+ 	(N_Exit_Statement): Reparent below N_Loop_Flow_Statement.
+ 	* sinfo.ads (N_Continue_Statement): Add description.
+ 	* sinfo-utils.ads (Loop_Flow_Keyword): New function.
+ 	* sinfo-utils.adb (Loop_Flow_Keyword): New function.
+ 	* gen_il-gen-gen_entities.adb (E_Loop): Add new field.
+ 	* einfo.ads (Continue_Mark): Document new field.
+ 	* sprint.adb (Sprint_Node_Actual): Update for new node kind.
+ 	* snames.ads-tmpl: Add new keyword.
+ 	* par-ch5.adb (P_Continue_Statement, Parse_Loop_Flow_Statement): New
+ 	functions.
+ 	(P_Sequence_Of_Statements): Handle continue statements.
+ 	(P_Exit_Statement): Use Parse_Loop_Flow_Statement.
+ 	* sem.adb (Analyze): Handle new node kind.
+ 	* sem_ch5.adb (Analyze_Loop_Flow_Statement): New function.
+ 	(Analyze_Continue_Statement): New procedure.
+ 	(Analyze_Exit_Statement): Use new Analyze_Loop_Flow_Statement function.
+ 	* sem_ch5.ads (Analyze_Continue_Statement): New procedure.
+ 	* expander.adb (Expand): Handle new node kind.
+ 	* exp_ch5.ads (Expand_N_Continue_Statement): New procedure.
+ 	* exp_ch5.adb (Expand_Loop_Flow_Statement): New procedure.
+ 	(Expand_N_Continue_Statement): New procedure.
+ 	(Expand_N_Exit_Statement): Use new Expand_Loop_Flow_Statement
+ 	procedure.
+ 	(Build_Formal_Container_Iteration): Always reuse original loop entity.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2025-07-01  Bob Duff  <duff@adacore.com>
+ 
+ 	* repinfo.adb (List_Entities):
+ 	Disable output in case of object renamings.
+ 
+ 2025-07-01  Aleksandra Pasek  <pasek@adacore.com>
+ 
+ 	* libgnat/s-valuen.ads: Correct comment.
+ 
+ 2025-07-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* init.c: Include string.h.
+ 
+ 2025-07-01  Tonu Naks  <naks@adacore.com>
+ 
+ 	* doc/gnat_rm.rst: remove ref to 2012 chapter
+ 	* doc/gnat_rm/about_this_guide.rst: remove ref to 2012 chapter
+ 	* doc/gnat_rm/compatibility_and_porting_guide.rst: update list of
+ 	supported versions
+ 	* doc/gnat_rm/implementation_of_ada_2012_features.rst: delete
+ 	* doc/gnat_rm/specialized_needs_annexes.rst: update list of
+ 	supported versions
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2025-07-01  Tonu Naks  <naks@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_advice.rst: remove GLADE
+ 	* doc/gnat_rm/implementation_defined_characteristics.rst: remove GLADE
+ 	* doc/gnat_rm/specialized_needs_annexes.rst: remove GLADE
+ 	* doc/gnat_rm/the_gnat_library.rst: remove GLADE
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2025-07-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* adaint.c [__vxworks] (alloca): Redirect to builtin.
+ 
+ 2025-07-01  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* freeze.adb (Freeze_Record_Type): Check for CodePeer_Mode.
+ 
+ 2025-07-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch12.adb (Analyze_Subprogram_Instantiation): Move aspects when
+ 	instantiating subprogram as a library unit.
+ 
+ 2025-07-01  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_ch5.adb (Expand_N_Loop_Statement): Remove useless subexpressions.
+ 
+ 2025-07-01  Jose Ruiz  <ruiz@adacore.com>
+ 
+ 	* doc/gnat_ugn/gnat_and_program_execution.rst: Add the
+ 	documentation about benefits of using sanitizers in
+ 	mixed-language applications.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-07-01  Viljar Indus  <indus@adacore.com>
+ 
+ 	* atree.ads (Compile_Time_Pragma_Warnings): Removed.
+ 	* errout.adb (Initialize): Remove initialization for
+ 	Compile_Time_Pragma_Warnings.
+ 	(Error_Msg_Internal): Use Warning_As_Error_Kind in the
+ 	Error_Msg_Object. Set its value based on the reason the
+ 	warning was changed to an error.
+ 	(Write_JSON_Span): Adjust the code for Warn_Err.
+ 	(Output_Messages): Update the calculation for actual warnings
+ 	and errors by just using Warnings_Treated_As_Errors.
+ 	(Set_Msg_Text): Simply mark that we are dealing with a
+ 	run time message here. Move the code for the Warning_Mode to
+ 	Error_Msg_Internal.
+ 	* erroutc-pretty_emitter.adb (Write_Error_Msg_Line): Adjust the code
+ 	for Warn_Err. Use the Warn_As_Err_Tag token.
+ 	* erroutc.adb (Compilation_Errors): Simplify the implementation so
+ 	that it only checks for errors and warnings treated as errors.
+ 	(Decrease_Error_Msg_Count): Remove the count for
+ 	Compile_Time_Pragma_Warnings.
+ 	(dmsg): Adjust the code for changes to Warn_Err.
+ 	(Increase_Error_Msg_Count): Likewise and remove the count for
+ 	Compile_Time_Pragma_Warnings.
+ 	(Output_Msg_Text): Warnings converted to error by the
+ 	Warning_As_Error pragma and -gnatwE now use the error prefix
+ 	in their messages but only warnings changed by the pragma get
+ 	the [warning-as-error] tag.
+ 	(Output_Text_Within): Adjust the variable name for
+ 	Is_Runtime_Raise_Msg.
+ 	(Write_Error_Summary): Adjust printing of warnings so that it
+ 	just uses the counts for Warnings_Detected and
+ 	Warnings_Treated_As_Errors.
+ 	* erroutc.ads (Is_Runtime_Raise): renamed to Is_Runtime_Raise_Msg.
+ 	(Warning_As_Error_Kind): New type for marking the warning message
+ 	is treated as an error which also captures the reason for the
+ 	change. Historically each of the reasons will have a different way
+ 	of displaying the warning message.
+ 	(Error_Msg_Object.Warn_Err): Change type to Warning_As_Error_Kind.
+ 	(Kind_To_String): Warnings treated as errors originating from
+ 	the pragma or -gnatwE will return error where as warnings
+ 	originating from -gnatwe will return warning.
+ 	(Compilation_Errors): Update the documentation.
+ 	(Warn_As_Err_Tag): Constant string to be used when printing warnings
+ 	as errors.
+ 	* errutil.adb (Error_Msg): Adjust the code for Warn_Err.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch7.adb (Shift_Address_For_Descriptor): New function.
+ 	(Make_Address_For_Finalize): Call above function.
+ 	(Make_Finalize_Address_Stmts): Likewise.
+ 	* exp_util.ads (Is_Constr_Array_Subt_Of_Unc_With_Controlled): New
+ 	predicate.
+ 	* exp_util.adb (Is_Constr_Array_Subt_Of_Unc_With_Controlled): Ditto.
+ 	(Remove_Side_Effects): Call above predicate.
+ 	* sem_ch3.adb (Analyze_Object_Declaration): Likewise.
+ 	* sem_ch4.adb (Analyze_Allocator): Allocate the bounds by setting
+ 	Is_Constr_Array_Subt_With_Bounds when appropriate.
+ 
+ 2025-07-01  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_ch4.adb (Try_Object_Operation): Handle mutably tagged
+ 	class-wide type prefix.
+ 
+ 2025-07-01  Viljar Indus  <indus@adacore.com>
+ 
+ 	* errout.adb (Error_Msg_Internal): Use the new
+ 	Warning_Treated_As_Error function.
+ 	* erroutc.adb (Get_Warning_Option): Add new version of this
+ 	function that operates on the Error_Msg_Object directly instead
+ 	of the Error_Id. Update the existing function to call the new
+ 	version interanlly.
+ 	(Get_Warning_Tag): Likewise.
+ 	(Warning_Treated_As_Error): Add a new method that combines the
+ 	checks for the error message itself and its tag.
+ 	* erroutc.ads (Get_Warning_Option): Add new spec.
+ 	(Get_Warning_Option): Likewise.
+ 	(Get_Warning_Option): Likewise.
+ 
+ 2025-07-01  Viljar Indus  <indus@adacore.com>
+ 
+ 	* atree.ads: Add Compile_Time_Pragma_Warnings for counting
+ 	compile time warnings.
+ 	* errout.adb (Initialize): Initialize Compile_Time_Pragma_Warnings.
+ 	(Output_Messages): Use Compile_Time_Pragma_Warnings instead of
+ 	Count_Compile_Time_Pragma_Warnings.
+ 	* erroutc.adb (Compilation_Errors): Likewise.
+ 	(Count_Compile_Time_Pragma_Warnings): Removed.
+ 	(Decrease_Error_Msg_Count): Update Compile_Time_Pragma_Warnings.
+ 	(Increase_Error_Msg_Count): Likewise.
+ 	(Write_Error_Summary): Use Compile_Time_Pragma_Warnings instead of
+ 	Count_Compile_Time_Pragma_Warnings.
+ 	* erroutc.ads (Count_Compile_Time_Pragma_Warnings): Removed.
+ 
+ 2025-07-01  Viljar Indus  <indus@adacore.com>
+ 
+ 	* errout.adb (Delete_Warning_And_Continuations): Use
+ 	Decrease_Error_Msg_Count to update the message counts.
+ 	(Delete_Warning): Likewise.
+ 	(To_Be_Removed): Likewise.
+ 
+ 2025-07-01  Viljar Indus  <indus@adacore.com>
+ 
+ 	* errout.adb (Remove_Warning_Messages): Mark removed messages as
+ 	deleted.
+ 	* erroutc.adb (Purge_Messages): Likewise.
+ 
+ 2025-07-01  Martin Clochard  <clochard@adacore.com>
+ 
+ 	* frontend.adb (Frontend): do not override GNATprove's setting for
+ 	Warn_On_Non_Local_Exception
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_Allocator): Do not set Etype to itself.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_util.adb (Finalize_Address): Do not go to the root type for
+ 	array types.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valuer.ads (System.Value_R): Remove Round parameter.
+ 	(Scan_Raw_Real): Replace Extra with Extra2 and adjust the comment.
+ 	(Value_Raw_Real): Likewise.
+ 	* libgnat/s-valuer.adb (Round_Extra): Delete.
+ 	(Scan_Decimal_Digits): Replace Extra with Extra2 and adjust the
+ 	implementation.
+ 	(Scan_Integral_Digits): Replace Extra with Extra2 and Extra_Rounded
+ 	with Extra2_Filled and adjust the implementation.
+ 	(Scan_Raw_Real): Replace Extra with Extra2 and adjust the
+ 	implementation.
+ 	(Value_Raw_Real): Likewise.
+ 	* libgnat/s-valrea.adb (Impl): Remove actual for Round formal.
+ 	* libgnat/s-valued.adb (Impl): Likewise.
+ 	(Integer_to_Decimal): Replace Extra with Extra2 and adjust the
+ 	implementation.  Rename Unsigned_To_Signed to To_Signed.
+ 	(Scan_Decimal): Replace Extra with Extra2 and adjust the
+ 	implementation.
+ 	(Value_Decimal): Likewise.
+ 	* libgnat/s-valuef.adb (Impl): Remove actual for Round formal.
+ 	(Integer_to_Fixed): Replace Extra with Extra2 and adjust the
+ 	implementation.  Rename Unsigned_To_Signed to To_Signed.  Only
+ 	round the last scaled divide operation.
+ 	(Scan_Fixed): Replace Extra with Extra2 and adjust the
+ 	implementation.
+ 	(Value_Fixed): Likewise.
+ 
+ 2025-07-01  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* libgnat/s-valuer.adb (Scan_Decimal_Digits, Scan_Integral_Digits):
+ 	Minor rephrasing.
+ 
+ 2025-07-01  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Loop_Parameter_Specification): Set ekind
+ 	earlier.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_util.ads (Is_Finalizable_Access): New predicate.
+ 	(Is_Non_BIP_Func_Call): Delete.
+ 	(Is_Secondary_Stack_BIP_Func_Call): Likewise.
+ 	* exp_util.adb (Is_Finalizable_Access): New predicate.
+ 	(Initialized_By_Aliased_BIP_Func_Call): Delete.
+ 	(Initialized_By_Reference): Likewise.
+ 	(Is_Aliased): Only consider the nontransient object serviced by
+ 	the transient scope.
+ 	(Is_Part_Of_BIP_Return_Statement): Minor tweak.
+ 	(Is_Finalizable_Transient): Remove calls to Initialized_By_Reference
+ 	and Initialized_By_Aliased_BIP_Func_Call.
+ 	Call Is_Finalizable_Access for access objects.
+ 	(Is_Non_BIP_Func_Call): Delete.
+ 	(Is_Secondary_Stack_BIP_Func_Call): Likewise.
+ 	(Requires_Cleanup_Actions): Call Is_Finalizable_Access for access
+ 	objects.
+ 	(Side_Effect_Free): Return True for N_Reference.
+ 	* exp_ch7.adb (Build_Finalizer.Process_Declarations): Call
+ 	Is_Finalizable_Access for access objects.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_util.adb (Is_Expression_Of_Func_Return): New predicate.
+ 	(Is_Related_To_Func_Return): Call Is_Expression_Of_Func_Return.
+ 	(Remove_Side_Effects): Generate a temporary for a function call
+ 	that returns a constrained array type with controlled component
+ 	and an unconstrained first subtype.
+ 
+ 2025-07-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* inline.adb (Rewrite_Procedure_Call): Replace with a simple rewriting
+ 	of procedure call into a single block node, i.e. remove broken
+ 	optimization.
+ 	* sem_util.adb (Next_Actual): Adapt GNATprove-specific code that peeks
+ 	into inlined calls.
+ 
+ 2025-07-01  Martin Clochard  <clochard@adacore.com>
+ 
+ 	* exp_util.adb (Is_Controlling_Formal_Ref): test scope against
+ 	derived subprogram as well.
+ 
+ 2025-07-01  Viljar Indus  <indus@adacore.com>
+ 
+ 	* errout.adb (Error_Msg_Internal): Relocate Warn_As_Err propagation
+ 	to Increase_Error_Msg_Counti.
+ 	(Delete_Warning_And_Continuations): Update
+ 	Warnings_Treated_As_Errors count.
+ 	(Delete_Warning): Likewise.
+ 	(To_Be_Removed): Likewise.
+ 	* erroutc.adb (Increase_Error_Msg_Count): Count warnings treated
+ 	as errors here and perform the propagation of this property to
+ 	the parent message.
+ 	(Output_Msg_Text): Remove counting of warnings as errors from
+ 	here.
+ 	(Decrease_Error_Msg_Count): Update Warnings_Treated_As_Errors
+ 	count.
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/120106
+ 	* Make-generated.in (GNATMAKE_FOR_BUILD): Define.
+ 
+ 2025-06-30  Viljar Indus  <indus@adacore.com>
+ 
+ 	* comperr.adb (Compiler_Abort): Pass the exit code in calls to
+ 	Output_Messages.
+ 	* errout.adb (Output_Messages): Add new parameter for the
+ 	Exit_Code and store its value.
+ 	* errout.ads (Output_Messages): Likewise.
+ 	* erroutc-sarif_emitter.adb (Print_Invocations): Set
+ 	Execution_Successful based on the exit code.
+ 	* erroutc.ads (Exit_Code): Store the exit code value.
+ 	* gnat1drv.adb (Gnat1drv): Pass the exit code in calls to
+ 	Output_Messages.
+ 	* prepcomp.adb (Parse_Preprocessing_Data_File, Prpare_To_Preprocess):
+ 	Likewise.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* gen_il-gen-gen_entities.adb (Gen_Entities): Tweak Has_Exit.
+ 
+ 2025-06-30  Bob Duff  <duff@adacore.com>
+ 
+ 	* exp_attr.adb (Attribute_Max_Size_In_Storage_Elements):
+ 	Return Storage_Count'Last converted to universal_integer.
+ 
+ 2025-06-30  Tonu Naks  <naks@adacore.com>
+ 
+ 	* doc/gnat_rm.rst: add entry point for the new chapter
+ 	* doc/gnat_rm/about_this_guide.rst: add reference to the new
+ 	chapter
+ 	* doc/gnat_rm/implementation_of_ada_2022_features.rst: new file
+ 	* doc/gnat_rm/implementation_of_ada_2012_features.rst: update
+ 	explanation about RM references
+ 	* gnat_rm.texi: Regenerate.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* par-util.adb (Check_Future_Keyword): Use Snames subtypes. Extend
+ 	comment.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Loop_Statement): Remove obsolete comment.
+ 
+ 2025-06-30  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Useless_Assignments):
+ 	Enable Warn_On_Useless_Assignment in the case of
+ 	Warn_On_All_Unread_Out_Parameters.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Subtype_Declaration): Remove uses of E_Void.
+ 	(Copy_Parent_Attributes): New procedure.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* cstand.adb (Make_Aliased_Component, Make_Formal, New_Operator,
+ 	Create_Standard): Remove useless calls.
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valuer.adb (Scan_Decimal_Digits): Also pretend that the
+ 	precision limit was just reached if it was already reached.
+ 	(Scan_Integral_Digits): Add Extra_Rounded out parameter, set it to
+ 	False on entry and to True when Extra is rounded.
+ 	(Scan_Raw_Real): New Extra_Rounded local variable.  Pass it in the
+ 	calls to Scan_Integral_Digits.  If it is True, pass a dummy extra
+ 	digit to Scan_Decimal_Digits.
+ 
+ 2025-06-30  Claire Dross  <dross@adacore.com>
+ 
+ 	* libgnat/a-strsup.ads: Ignore Ghost_Predicate in the assertion policy.
+ 
+ 2025-06-30  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Record_Aggregate): Adjust the code to
+ 	handle mutably tagged class-wide types since they don't have
+ 	discriminants, but all class-wide types are considered to have
+ 	unknown discriminants. Initialize mutably tagged class-wide
+ 	type components calling their IP subprogram.
+ 	* exp_aggr.adb (Gen_Assign): Handle mutably tagged class-wide type
+ 	components that have an initializing qualified expression, and
+ 	mutably tagged class-wide components default initialization.
+ 	(Gen_Loop): Handle mutably tagged class-wide types.
+ 	(Gen_Assign): ditto.
+ 	(Build_Record_Aggr_Code): Default initialization of mutably tagged
+ 	class-wide types is performed by their IP subprogram.
+ 	* exp_ch3.adb (Init_Component): Generate code to raise Program_Error
+ 	in the IP subprogram of arrays when the type of their components is
+ 	a mutably tagged abstract class-wide type.
+ 	(Build_Init_Procedure): ditto for the init procedure of record types.
+ 	(Build_Init_Statements): Ensure that the type of the expression
+ 	initializing a mutably class-wide tagged type component is frozen.
+ 	(Requires_Init_Proc): Mutably tagged class-wide types require the
+ 	init-proc since it takes care of their default initialization.
+ 	* sem_util.adb (Needs_Simple_Initialization): Mutably tagged class-wide
+ 	types don't require simple initialization.
+ 	* types.ads (PE_Abstract_Type_Component): New reason for Program_Error.
+ 	* types.h (PE_Abstract_Type_Component): ditto.
+ 	* exp_ch11.adb (Get_RT_Exception_Name): Handle new reason for
+ 	Program_Error.
+ 	* libgnat/a-except.adb (Rcheck_PE_Abstract_Type_Component): New
+ 	subprogram.
+ 
+ 2025-06-30  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.ads (Get_Enclosing_Object, Get_Enum_Lit_From_Pos,
+ 	Is_Universal_Numeric_Type): Reorder declarations.
+ 
+ 2025-06-30  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Get_Enclosing_Object): Traverse unchecked type
+ 	conversions since they from the compiler and should be transparent for
+ 	semantic reasoning.
+ 
+ 2025-06-30  Steve Baird  <baird@adacore.com>
+ 
+ 	* einfo-utils.adb (Predicate_Function): Look through an Itype if
+ 	that takes us to another subtype of the same type.
+ 
+ 2025-06-30  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_util.adb (Must_Map_Call_To_Parent_Primitive): Change function
+ 	name (was Call_To_Parent_Dispatching_Op_Must_Be_Mapped). Move logic
+ 	for attributes and dereferences, plus testing for controlled formals,
+ 	into new function Expr_Has_Ctrl_Formal_Ref. Add handling for
+ 	access attributes, multiple levels of attributes/dereferences,
+ 	conditional_expressions, and declare_expressions. Properly account
+ 	for function calls with multiple operands and enclosing calls.
+ 	(Expr_Has_Ctrl_Formal_Ref): New function to determine whether
+ 	an expression is a reference to a controlling formal or has
+ 	a prefix that is such a reference.
+ 	(Is_Controlling_Formal_Ref): New function in Expr_Has_Ctrl_Formal_Ref
+ 	to determine if a node is a direct reference to a controlling formal.
+ 	* freeze.adb (Build_DTW_Body): Create an unchecked conversion instead
+ 	of a regular type conversion for converting actuals in calls to parent
+ 	inherited primitives that are wrapped for inherited pre/postconditions.
+ 	Avoids generating unnecessary checks (such as accessibility checks on
+ 	conversions for anonymous access formals).
+ 
+ 2025-06-30  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.ads (Get_Enclosing_Ghost_Entity): Rename spec.
+ 	* sem_util.adb (Get_Enclosing_Ghost_Object): Rename body; reorder
+ 	alphabetically; adapt recursive call.
+ 	* ghost.adb: Adapt calls to Get_Enclosing_Ghost_Object.
+ 
+ 2025-06-30  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* ghost.adb (Ghost_Entity): Remove; use Get_Enclosing_Ghost_Object
+ 	instead; adapt callers.
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_prag.adb (Analyze_Pragma) <Pragma_No_Component_Reordering>:
+ 	Call Find_Type on the first argument of the pragma.
+ 
+ 2025-06-30  Tonu Naks  <naks@adacore.com>
+ 
+ 	* gnatls.adb: remove -l switch
+ 
+ 2025-06-30  Steve Baird  <baird@adacore.com>
+ 
+ 	* doc/gnat_rm/gnat_language_extensions.rst: Update documentation for
+ 	mutably tagged types and the Size'Class aspect.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2025-06-30  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* ghost.adb
+ 	(Whole_Object_Ref): Remove; use Get_Enclosing_Ghost_Object instead.
+ 	(Is_Ghost_Assignment): Handle more than object identifiers.
+ 	(Mark_And_Set_Ghost_Assignment): Likewise.
+ 	* sem_util.adb (Get_Enclosing_Ghost_Object): Detect more expressions
+ 	as ghost references; rename to better match the intended meaning.
+ 	* sem_util.ads (Get_Enclosing_Ghost_Object): Rename; adjust comment.
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_aggr.adb (Backend_Processing_Possible.Component_Check): Return
+ 	False for delayed conditional expressions.
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_aggr.ads (Parent_Is_Regular_Aggregate): New predicate.
+ 	* exp_aggr.adb (In_Place_Assign_OK.Safe_Component): Implement more
+ 	accurate criterion for function calls.
+ 	(Convert_To_Assignments): Use Parent_Is_Regular_Aggregate predicate.
+ 	(Expand_Array_Aggregate): Likewise.  Remove obsolete comment.
+ 	(Initialize_Component): Do not adjust when the expression is a naked
+ 	function call and Back_End_Return_Slot is True.
+ 	(Parent_Is_Regular_Aggregate): New predicate.
+ 	* exp_ch3.adb (Build_Record_Init_Proc.Build_Assignment): Add test of
+ 	Back_End_Return_Slot in conjunction with a function call.
+ 	* exp_ch4.adb (Expand_Allocator_Expression): Likewise.  Use the
+ 	Is_Container_Aggregate predicate to detect container aggregates.
+ 	(Expand_N_Case_Expression): Delay the expansion if the parent is a
+ 	regular aggregate and the type should not be copied.
+ 	(Expand_N_If_Expression): Likewise.
+ 	(New_Assign_Copy): New function.
+ 	* exp_ch6.adb (Expand_Ctrl_Function_Call): Bail out when the parent
+ 	is a regular aggregate.
+ 	* sem_util.adb (Check_Function_Writable_Actuals): Do not take into
+ 	account attribute references created by the compiler.
+ 
+ 2025-06-30  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* socket.c [__vxworks]
+ 	(__gnat_gethostbyname): Drop excess '&'.
+ 	(__gnat_gethostbyaddr): Likewise.
+ 
+ 2025-06-30  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* adaint.c [__vxworks]: Include ctype.h.
+ 
+ 2025-06-30  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_put_image.adb (Build_Record_Put_Image_Procedure): If
+ 	Discriminant_Specifications takes us from the full view of a type
+ 	to an (intentionally) unanalyzed subtree, then instead find
+ 	discriminant entities by calling Discriminant_Specifications on
+ 	the partial view of the type.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* sem_ch6.adb (Check_Delayed_Subprogram, Possible_Freeze): Restrict
+ 	cases where freezing is delayed.
+ 	* sem_ch6.ads (Check_Delayed_Subprogram): Improve documentation
+ 	comment.
+ 	* sprint.adb (Write_Itype): Improve output.
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valrea.adb (Integer_to_Real): Rename to...
+ 	(Integer_To_Real): ...this.  Remove the second condition of the
+ 	conjunction in the test for the zero value.
+ 	(Scan_Real): Adjust to above renaming.
+ 	(Value_Real): Likewise.
+ 	* libgnat/s-valuer.ads (Scan_Raw_Real): Add note about Val.
+ 
+ 2025-06-30  Jose Ruiz  <ruiz@adacore.com>
+ 
+ 	* doc/gnat_ugn/gnat_and_program_execution.rst: Fix a
+ 	couple of minor formatting issues.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* treepr.ads (Print_Entity_Chain, pec, rpec): New subprograms.
+ 	* treepr.adb (Print_Entity_Chain, pec, rpec): Likewise.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* atree.ads (Parent_Or_List_Containing): Fix typo.
+ 
+ 2025-06-30  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* treepr.adb (Print_Node): Tweak Parent field printing.
+ 
+ 2025-06-30  Jose Ruiz  <ruiz@adacore.com>
+ 
+ 	* doc/gnat_ugn/gnat_and_program_execution.rst: Add the
+ 	documentation about using sanitizers with Ada code.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-06-30  Jose Ruiz  <ruiz@adacore.com>
+ 
+ 	* doc/gnat_ugn/gnat_and_program_execution.rst: Add the
+ 	documentation about using sanitizers with Ada code.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-06-30  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Get_Enclosing_Object): Remove dead code.
+ 
+ 2025-06-30  Steve Baird  <baird@adacore.com>
+ 
+ 	* einfo-utils.adb (Predicate_Function): Improve handling of a case
+ 	where a predicate specified for a subtype of a partial view of a
+ 	type was incorrectly ignored.
+ 	(Set_Predicate_Function): If the attribute has already been set to
+ 	the same value, then do nothing (instead of raising P_E).
+ 	* sem_ch13.adb (Build_Predicate_Function): Add new function
+ 	Has_Source_Predicate. If a subtype inherits a predicate but also
+ 	has its own explicitly specified predicate, then avoid
+ 	misinterpreting the presence of the function built for the
+ 	inherited predicate to mean that no additional predicate function
+ 	is needed.
+ 	* sem_util.adb (Build_Subtype): In the case where we are given a
+ 	constrained record or array subtype and we need to construct a
+ 	different subtype, subject to a different constraint, the
+ 	subtype_mark of the constructed subtype needs to reference an
+ 	unconstrained subtype (because a new constraint is going to be
+ 	imposed). If the Predicated_Parent attribute of the given subtype
+ 	is present and refers to a suitable unconstrained subtype, then
+ 	use that subtype instead of setting the Predicated_Parent
+ 	attribute on a new node (and performing the associated attribute
+ 	copying).
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch7.adb (Process_Transient_In_Scope): Bail out if the object
+ 	is an ignored ghost entity.
+ 
+ 2025-06-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_util.adb (Insert_Actions): Extend special treatment applied
+ 	to freeze nodes to the case of blocks generated for aggregates.
+ 
+ 2025-06-30  Johannes Kliemann  <kliemann@adacore.com>
+ 
+ 	* libgnat/s-valuer.adb: Switch missing if-statements to
+ 	short-circuit form.
+ 	* libgnat/i-cpoint.adb: Ditto.
+ 
  2025-06-28  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/120854
diff -Nrcpad gcc-16-20250629/gcc/ada/Make-generated.in gcc-16-20250706/gcc/ada/Make-generated.in
*** gcc-16-20250629/gcc/ada/Make-generated.in	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/Make-generated.in	Sun Jul  6 22:32:09 2025
***************
*** 1,3 ****
--- 1,5 ----
+ GNATMAKE_FOR_BUILD = gnatmake
+ 
  # Dependencies for compiler sources that are generated at build time
  
  fsrcdir := $(shell cd $(srcdir);${PWD_COMMAND})
diff -Nrcpad gcc-16-20250629/gcc/ada/Makefile.rtl gcc-16-20250706/gcc/ada/Makefile.rtl
*** gcc-16-20250629/gcc/ada/Makefile.rtl	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/Makefile.rtl	Sun Jul  6 22:32:09 2025
*************** GNATRTL_NONTASKING_OBJS= \
*** 544,549 ****
--- 544,550 ----
    s-caun16$(objext) \
    s-caun32$(objext) \
    s-caun64$(objext) \
+   s-cautns$(objext) \
    s-chepoo$(objext) \
    s-commun$(objext) \
    s-conca2$(objext) \
*************** ifeq ($(strip $(filter-out %aarch64 free
*** 1853,1858 ****
--- 1854,1860 ----
      LIBGNAT_TARGET_PAIRS += \
      s-intman.adb<libgnarl/s-intman__cheribsd.adb \
      s-osinte.ads<libgnarl/s-osinte__cheribsd.ads \
+     s-tsgsba.adb<libgnarl/s-tsgsba__cheri.adb \
      s-secsta.adb<libgnat/s-secsta__cheri.adb
  
      EXTRA_GNATRTL_NONTASKING_OBJS += i-cheri.o i-cheri-exceptions.o
diff -Nrcpad gcc-16-20250629/gcc/ada/adaint.c gcc-16-20250706/gcc/ada/adaint.c
*** gcc-16-20250629/gcc/ada/adaint.c	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/adaint.c	Sun Jul  6 22:32:09 2025
***************
*** 61,66 ****
--- 61,71 ----
  #define POSIX
  #include "vxWorks.h"
  #include <sys/time.h>
+ #include <ctype.h> /* for isalpha */
+ 
+ #ifndef alloca
+ #define alloca(n) __builtin_alloca(n)
+ #endif
  
  #if defined (__mips_vxworks)
  #include "cacheLib.h"
diff -Nrcpad gcc-16-20250629/gcc/ada/ali.ads gcc-16-20250706/gcc/ada/ali.ads
*** gcc-16-20250629/gcc/ada/ali.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/ali.ads	Sun Jul  6 22:32:09 2025
*************** package ALI is
*** 358,365 ****
        --  Indicates presence of PR parameter for a preelaborated package
  
        No_Elab : Boolean;
!       --  Indicates presence of NE parameter for a unit that has does not
!       --  have an elaboration routine (since it has no elaboration code).
  
        Pure : Boolean;
        --  Indicates presence of PU parameter for a package having pragma Pure
--- 358,365 ----
        --  Indicates presence of PR parameter for a preelaborated package
  
        No_Elab : Boolean;
!       --  Indicates presence of NE parameter for a unit that does not have an
!       --  elaboration routine (since it has no elaboration code).
  
        Pure : Boolean;
        --  Indicates presence of PU parameter for a package having pragma Pure
diff -Nrcpad gcc-16-20250629/gcc/ada/aspects.ads gcc-16-20250706/gcc/ada/aspects.ads
*** gcc-16-20250629/gcc/ada/aspects.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/aspects.ads	Sun Jul  6 22:32:09 2025
*************** package Aspects is
*** 127,132 ****
--- 127,133 ----
        Aspect_Part_Of,                       -- GNAT
        Aspect_Post,
        Aspect_Postcondition,
+       Aspect_Potentially_Invalid,           -- GNAT
        Aspect_Pre,
        Aspect_Precondition,
        Aspect_Predicate,                     -- GNAT
*************** package Aspects is
*** 327,332 ****
--- 328,334 ----
        Aspect_Obsolescent                => True,
        Aspect_Part_Of                    => True,
        Aspect_Persistent_BSS             => True,
+       Aspect_Potentially_Invalid        => True,
        Aspect_Predicate                  => True,
        Aspect_Pure_Function              => True,
        Aspect_Refined_Depends            => True,
*************** package Aspects is
*** 407,414 ****
     subtype Boolean_Aspects is
       Aspect_Id range Aspect_Always_Terminates .. Aspect_Id'Last;
  
!    subtype Pre_Post_Aspects is
!      Aspect_Id range Aspect_Post .. Aspect_Precondition;
  
     --  The following type is used for indicating allowed expression forms
  
--- 409,419 ----
     subtype Boolean_Aspects is
       Aspect_Id range Aspect_Always_Terminates .. Aspect_Id'Last;
  
!    subtype Pre_Post_Aspects is Aspect_Id
!    with Static_Predicate => Pre_Post_Aspects in Aspect_Post
!                                               | Aspect_Postcondition
!                                               | Aspect_Pre
!                                               | Aspect_Precondition;
  
     --  The following type is used for indicating allowed expression forms
  
*************** package Aspects is
*** 477,482 ****
--- 482,488 ----
        Aspect_Part_Of                    => Expression,
        Aspect_Post                       => Expression,
        Aspect_Postcondition              => Expression,
+       Aspect_Potentially_Invalid        => Optional_Expression,
        Aspect_Pre                        => Expression,
        Aspect_Precondition               => Expression,
        Aspect_Predicate                  => Expression,
*************** package Aspects is
*** 583,588 ****
--- 589,595 ----
        Aspect_Part_Of                      => False,
        Aspect_Post                         => False,
        Aspect_Postcondition                => False,
+       Aspect_Potentially_Invalid          => False,
        Aspect_Pre                          => False,
        Aspect_Precondition                 => False,
        Aspect_Predicate                    => False,
*************** package Aspects is
*** 784,789 ****
--- 791,797 ----
        Aspect_Persistent_BSS               => Name_Persistent_BSS,
        Aspect_Post                         => Name_Post,
        Aspect_Postcondition                => Name_Postcondition,
+       Aspect_Potentially_Invalid          => Name_Potentially_Invalid,
        Aspect_Pre                          => Name_Pre,
        Aspect_Precondition                 => Name_Precondition,
        Aspect_Predicate                    => Name_Predicate,
*************** package Aspects is
*** 1095,1100 ****
--- 1103,1109 ----
        Aspect_No_Tagged_Streams            => Never_Delay,
        Aspect_Obsolescent                  => Never_Delay,
        Aspect_Part_Of                      => Never_Delay,
+       Aspect_Potentially_Invalid          => Never_Delay,
        Aspect_Refined_Depends              => Never_Delay,
        Aspect_Refined_Global               => Never_Delay,
        Aspect_Refined_Post                 => Never_Delay,
diff -Nrcpad gcc-16-20250629/gcc/ada/atree.adb gcc-16-20250706/gcc/ada/atree.adb
*** gcc-16-20250629/gcc/ada/atree.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/atree.adb	Sun Jul  6 22:32:09 2025
*************** package body Atree is
*** 1296,1303 ****
          Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
  
     begin
!       --  Empty_Or_Error use as described in types.ads
!       if Destination <= Empty_Or_Error or No (Source) then
           pragma Assert (Serious_Errors_Detected > 0);
           return;
        end if;
--- 1296,1302 ----
          Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
  
     begin
!       if Destination in Empty | Error or else No (Source) then
           pragma Assert (Serious_Errors_Detected > 0);
           return;
        end if;
*************** package body Atree is
*** 1458,1464 ****
     --  Start of processing for Copy_Separate_Tree
  
     begin
!       if Source <= Empty_Or_Error then
           return Source;
  
        elsif Is_Entity (Source) then
--- 1457,1463 ----
     --  Start of processing for Copy_Separate_Tree
  
     begin
!       if Source in Empty | Error then
           return Source;
  
        elsif Is_Entity (Source) then
*************** package body Atree is
*** 1841,1847 ****
        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;
  
--- 1840,1846 ----
        pragma Debug (Validate_Node (Source));
        S_Size : constant Slot_Count := Size_In_Slots_To_Alloc (Source);
     begin
!       if Source in Empty | Error then
           return Source;
        end if;
  
diff -Nrcpad gcc-16-20250629/gcc/ada/atree.ads gcc-16-20250706/gcc/ada/atree.ads
*** gcc-16-20250629/gcc/ada/atree.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/atree.ads	Sun Jul  6 22:32:09 2025
*************** package Atree is
*** 453,459 ****
  
     function Parent_Or_List_Containing (X : Union_Id) return Union_Id;
     --  X must be in Node_Range or in List_Range. If X is in Node_Range and is
!    --  contained in a list, returns that list, otherwise return the parent of
     --  the list or node represented by X.
  
     function Paren_Count (N : Node_Id) return Nat;
--- 453,459 ----
  
     function Parent_Or_List_Containing (X : Union_Id) return Union_Id;
     --  X must be in Node_Range or in List_Range. If X is in Node_Range and is
!    --  contained in a list, returns that list, otherwise returns the parent of
     --  the list or node represented by X.
  
     function Paren_Count (N : Node_Id) return Nat;
diff -Nrcpad gcc-16-20250629/gcc/ada/bindgen.adb gcc-16-20250706/gcc/ada/bindgen.adb
*** gcc-16-20250629/gcc/ada/bindgen.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/bindgen.adb	Sun Jul  6 22:32:09 2025
*************** package body Bindgen is
*** 53,65 ****
     --  Flag which indicates whether the program uses the GNARL library
     --  (presence of the unit System.OS_Interface)
  
-    Num_Elab_Calls : Nat := 0;
-    --  Number of generated calls to elaboration routines
- 
-    Num_Primary_Stacks : Nat := 0;
-    --  Number of default-sized primary stacks the binder needs to allocate for
-    --  task objects declared in the program.
- 
     Num_Sec_Stacks : Nat := 0;
     --  Number of default-sized primary stacks the binder needs to allocate for
     --  task objects declared in the program.
--- 53,58 ----
*************** package body Bindgen is
*** 2483,2498 ****
           ALIs.Table (ALIs.First).Time_Slice_Value := Opt.Time_Slice_Value;
        end if;
  
-       --  Count number of elaboration calls
- 
-       for E in Elab_Order'Range loop
-          if Units.Table (Elab_Order (E)).No_Elab then
-             null;
-          else
-             Num_Elab_Calls := Num_Elab_Calls + 1;
-          end if;
-       end loop;
- 
        --  Count the number of statically allocated stacks to be generated by
        --  the binder. If the user has specified the number of default-sized
        --  secondary stacks, use that number. Otherwise start the count at one
--- 2476,2481 ----
*************** package body Bindgen is
*** 2506,2514 ****
        end if;
  
        for J in Units.First .. Units.Last loop
-          Num_Primary_Stacks :=
-            Num_Primary_Stacks + Units.Table (J).Primary_Stack_Count;
- 
           Num_Sec_Stacks :=
             Num_Sec_Stacks + Units.Table (J).Sec_Stack_Count;
        end loop;
--- 2489,2494 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/checks.adb gcc-16-20250706/gcc/ada/checks.adb
*** gcc-16-20250629/gcc/ada/checks.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/checks.adb	Sun Jul  6 22:32:09 2025
*************** package body Checks is
*** 750,756 ****
        --  mode then just skip the check (it is not required in any case).
  
        when RE_Not_Available =>
!          return;
     end Apply_Address_Clause_Check;
  
     -------------------------------------
--- 750,756 ----
        --  mode then just skip the check (it is not required in any case).
  
        when RE_Not_Available =>
!          null;
     end Apply_Address_Clause_Check;
  
     -------------------------------------
*************** package body Checks is
*** 1078,1084 ****
  
        exception
           when RE_Not_Available =>
!             return;
        end;
     end Apply_Arithmetic_Overflow_Strict;
  
--- 1078,1084 ----
  
        exception
           when RE_Not_Available =>
!             null;
        end;
     end Apply_Arithmetic_Overflow_Strict;
  
*************** package body Checks is
*** 6437,6444 ****
           if Debug_Flag_CC then
              w ("  exception occurred, overflow flag set");
           end if;
- 
-          return;
     end Enable_Overflow_Check;
  
     ------------------------
--- 6437,6442 ----
*************** package body Checks is
*** 6686,6693 ****
           if Debug_Flag_CC then
              w ("  exception occurred, range flag set");
           end if;
- 
-          return;
     end Enable_Range_Check;
  
     ------------------
--- 6684,6689 ----
*************** package body Checks is
*** 7091,7098 ****
        end loop;
  
        --  If we fall through entry was not found
- 
-       return;
     end Find_Check;
  
     ---------------------------------
--- 7087,7092 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/comperr.adb gcc-16-20250706/gcc/ada/comperr.adb
*** gcc-16-20250629/gcc/ada/comperr.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/comperr.adb	Sun Jul  6 22:32:09 2025
*************** package body Comperr is
*** 146,152 ****
  
        if Serious_Errors_Detected /= 0 and then not Debug_Flag_K then
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages;
  
           Set_Standard_Error;
           Write_Str ("compilation abandoned due to previous error");
--- 146,152 ----
  
        if Serious_Errors_Detected /= 0 and then not Debug_Flag_K then
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages (E_Errors);
  
           Set_Standard_Error;
           Write_Str ("compilation abandoned due to previous error");
diff -Nrcpad gcc-16-20250629/gcc/ada/cstand.adb gcc-16-20250706/gcc/ada/cstand.adb
*** gcc-16-20250629/gcc/ada/cstand.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/cstand.adb	Sun Jul  6 22:32:09 2025
*************** package body CStand is
*** 1076,1082 ****
              Set_Never_Set_In_Source    (A_Char, True);
              Set_Is_True_Constant       (A_Char, True);
              Set_Etype                  (A_Char, Standard_Character);
-             Set_Scope                  (A_Char, Standard_Entity (S_ASCII));
              Set_Is_Immediately_Visible (A_Char, False);
              Set_Is_Public              (A_Char, True);
              Set_Is_Known_Valid         (A_Char, True);
--- 1076,1081 ----
*************** package body CStand is
*** 1732,1738 ****
     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);
--- 1731,1736 ----
*************** package body CStand is
*** 1750,1756 ****
     begin
        Mutate_Ekind  (Formal, E_In_Parameter);
        Set_Mechanism (Formal, Default_Mechanism);
-       Set_Scope     (Formal, Standard_Standard);
        Set_Etype     (Formal, Typ);
  
        return Formal;
--- 1748,1753 ----
*************** package body CStand is
*** 1780,1786 ****
        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));
        Set_Convention (Ident_Node, Convention_Intrinsic);
  
--- 1777,1782 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/about_this_guide.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/about_this_guide.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/about_this_guide.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/about_this_guide.rst	Sun Jul  6 22:32:09 2025
*************** GNAT compiler.  It includes information
*** 14,20 ****
  characteristics of GNAT, including all the information required by
  Annex M of the Ada language standard.
  
! GNAT implements Ada 95, Ada 2005 and Ada 2012, and it may also be
  invoked in Ada 83 compatibility mode.
  By default, GNAT assumes Ada 2012,
  but you can override with a compiler switch
--- 14,20 ----
  characteristics of GNAT, including all the information required by
  Annex M of the Ada language standard.
  
! GNAT implements Ada 95, Ada 2005, Ada 2012 and Ada 2022, and it may also be
  invoked in Ada 83 compatibility mode.
  By default, GNAT assumes Ada 2012,
  but you can override with a compiler switch
*************** This reference manual contains the follo
*** 93,100 ****
    to GNAT's implementation of machine code insertions, tasking, and several
    other features.
  
! * :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.
--- 93,100 ----
    to GNAT's implementation of machine code insertions, tasking, and several
    other features.
  
! * :ref:`Implementation_of_Ada_2022_Features`, describes the status of the
!   GNAT implementation of the Ada 2022 language standard.
  
  * :ref:`Security_Hardening_Features` documents GNAT extensions aimed
    at security hardening.
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst	Sun Jul  6 22:32:09 2025
*************** types will be portable.
*** 134,142 ****
  Compatibility with Ada 83
  =========================
  
! .. index:: Compatibility (between Ada 83 and Ada 95 / Ada 2005 / Ada 2012)
  
! Ada 95 and the subsequent revisions Ada 2005 and Ada 2012
  are highly upwards compatible with Ada 83.  In
  particular, the design intention was that the difficulties associated
  with moving from Ada 83 to later versions of the standard should be no greater
--- 134,142 ----
  Compatibility with Ada 83
  =========================
  
! .. index:: Compatibility (between Ada 83 and Ada 95 / Ada 2005 / Ada 2012 / Ada 2022)
  
! Ada 95 and the subsequent revisions Ada 2005, Ada 2012, Ada 2022
  are highly upwards compatible with Ada 83.  In
  particular, the design intention was that the difficulties associated
  with moving from Ada 83 to later versions of the standard should be no greater
*************** such an Ada 83 application is being port
*** 505,511 ****
  example where the byte endianness has changed) then you will need to
  carefully examine the program logic; the porting effort will heavily depend
  on the robustness of the original design.  Moreover, Ada 95 (and thus
! Ada 2005 and Ada 2012) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
  GNAT's approach to these issues is described in :ref:`Representation_Clauses`.
--- 505,511 ----
  example where the byte endianness has changed) then you will need to
  carefully examine the program logic; the porting effort will heavily depend
  on the robustness of the original design.  Moreover, Ada 95 (and thus
! Ada 2005, Ada 2012, and Ada 2022) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
  GNAT's approach to these issues is described in :ref:`Representation_Clauses`.
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst	Sun Jul  6 22:32:09 2025
*************** case statement with composite selector t
*** 1350,1462 ****
  Mutably Tagged Types with Size'Class Aspect
  -------------------------------------------
  
! The ``Size'Class`` aspect can be applied to a tagged type to specify a size
! constraint for the type and its descendants. When this aspect is specified
! on a tagged type, the class-wide type of that type is considered to be a
! "mutably tagged" type - meaning that objects of the class-wide type can have
! their tag changed by assignment from objects with a different tag.
  
! Example:
  
! .. code-block:: ada
  
!     type Base is tagged null record
!         with Size'Class => 16 * 8;  -- Size in bits (128 bits, or 16 bytes)
  
!     type Derived_Type is new Base with record
!        Data_Field : Integer;
!     end record;  -- ERROR if Derived_Type exceeds 16 bytes
  
! Class-wide types with a specified ``Size'Class`` can be used as the type of
! array components, record components, and stand-alone objects.
  
  .. code-block:: ada
  
!     Inst : Base'Class;
!     type Array_of_Base is array (Positive range <>) of Base'Class;
  
! If the ``Size'Class`` aspect is specified for a type ``T``, then every
! specific descendant of ``T`` [redundant: (including ``T``)]
  
! - shall have a Size that does not exceed the specified value; and
  
! - shall be undiscriminated; and
  
! - shall have no composite subcomponent whose subtype is subject to a
!   dynamic constraint; and
  
! - shall have no interface progenitors; and
  
! - shall not have a tagged partial view other than a private extension; and
  
! - shall not have a statically deeper accessibility level than that of ``T``.
  
! In addition to the places where Legality Rules normally apply (see 12.3),
! these legality rules apply also in the private part and in the body of an
! instance of a generic unit.
  
! For any subtype ``S`` that is a subtype of a descendant of ``T``, ``S'Class'Size`` is
! defined to yield the specified value [redundant:,  although ``S'Class'Size`` is
! not a static expression].
  
! A class-wide descendant of a type with a specified ``Size'Class`` aspect is
! defined to be a "mutably tagged" type. Any subtype of a mutably tagged type is,
! by definition, a definite subtype (RM 3.3 notwithstanding). Default
! initialization of an object of such a definite subtype proceeds as for the
! corresponding specific type, except that ``Program_Error`` is raised if the
! specific type is abstract. [In particular, the initial tag of the object is
! that of the corresponding specific type.]
  
! An object of a tagged type is defined to be "tag-constrained" if it is
  
! - an object whose type is not mutably tagged; or
  
! - a constant object; or
  
! - a view conversion of a tag-constrained object; or
  
! - a formal ``in out`` or ``out`` parameter whose corresponding
!   actual parameter is tag-constrained.
  
! In the case of an assignment to a tagged variable that
! is not tag-constrained, no check is performed that the tag of the value of
! the expression is the same as that of the target (RM 5.2 notwithstanding).
  Instead, the tag of the target object becomes that of the source object of
! the assignment.
  An assignment to a composite object similarly copies the tags of any
! subcomponents of the source object that have a mutably-tagged type.
! 
! The ``Constrained`` attribute is defined for any name denoting an object of a
! mutably tagged type (RM 3.7.2 notwithstanding). In this case, the Constrained
! attribute yields the value True if the object is tag-constrained and False
! otherwise.
  
! Renaming is not allowed (see 8.5.1) for a type conversion having an operand of
! a mutably tagged type ``MT`` and a target type ``TT`` such that ``TT'Class``
! does not cover ``MT``, nor for any part of such an object, nor for any slice
! of such an object. This rule also applies in any context where a name is
! required to be one for which "renaming is allowed" (for example, see RM 12.4).
  
! A name denoting a view of a variable of a mutably tagged type shall not
! occur as an operative constituent of the prefix of a name denoting a
! prefixed view of a callable entity, except as the callee name in a call to
! the callable entity.
  
! For a type conversion between two general access types, either both or neither
! of the designated types shall be mutably tagged. For an ``Access`` (or
! ``Unchecked_Access``) attribute reference, the designated type of the type of the
! attribute reference and the type of the prefix of the attribute shall either
! both or neither be mutably tagged.
  
  The execution of a construct is erroneous if the construct has a constituent
  that is a name denoting a subcomponent of a tagged object and the object's
! tag is changed by this execution between evaluating the name and the last use
! (within this execution) of the subcomponent denoted by the name.
  
! If the type of a formal parameter is a specific tagged type then the execution
  of the call is erroneous if the tag of the actual is changed while the formal
! parameter exists (that is, before leaving the corresponding callable
! construct).
  
  Generalized Finalization
  ------------------------
--- 1350,1499 ----
  Mutably Tagged Types with Size'Class Aspect
  -------------------------------------------
  
! For a specific tagged nonformal type T that satisfies some conditions
! described later in this section, the universal-integer-valued type-related
! representation aspect ``Size'Class`` may be specified; any such specified
! aspect value shall be static.
  
! Specifying this aspect imposes an upper bound on the sizes of all specific
! descendants of T (including T itself). T'Class (but not T) is then said to be
! a "mutably tagged" type - meaning that T'Class is a definite subtype and that
! the tag of a variable of type T'Class may be modified by assignment in some
! cases described later in this section. An inherited ``Size'Class`` aspect
! value may be overridden, but not with a larger value.
  
! If the ``Size'Class`` aspect is specified for a type T, then every specific
! descendant of T (including T itself)
  
! * shall have a Size that does not exceed the specified value; and
  
! * shall have a (possibly inherited) ``Size'Class`` aspect that does not exceed
!   the specifed value; and
  
! * shall be undiscriminated; and
! 
! * shall have no composite subcomponent whose subtype is subject to a nonstatic
!   constraint; and
! 
! * shall not have a tagged partial view other than a private extension; and
! 
! * shall not be a descendant of an interface type; and
! 
! * shall not have a statically deeper accessibility level than that of T.
! 
! If the ``Size'Class`` aspect is not specified for a type T (either explicitly
! or by inheritance), then it shall not be specified for any descendant of T.
! 
! Example:
  
  .. code-block:: ada
  
!     type Root_Type is tagged null record with Size'Class => 16 * 8;
  
!     type Derived_Type is new Root_Type with record
!        Stuff : Some_Type;
!     end record;  -- ERROR if Derived_Type exceeds 16 bytes
  
! Because any subtype of a mutably tagged type is definite, it can be used as a
! component subtype for enclosing array or record types, as the subtype of a
! default-initialized stand-alone object, or as the subtype of an uninitialized
! allocator, as in this example:
  
! .. code-block:: ada
  
!     Obj : Root_Type'Class;
!     type Array_of_Roots is array (Positive range <>) of Root_Type'Class;
  
! Default initialization of an object of such a definite subtype proceeds as
! for the corresponding specific type, except that Program_Error is raised if
! the specific type is abstract. In particular, the initial tag of the object
! is that of the corresponding specific type.
  
! There is a general design principle that if a type has a tagged partial view,
! then the type's ``Size'Class`` aspect (or lack thereof) should be determinable
! by looking only at the partial view. That provides the motivation for the
! rules of the next two paragraphs.
  
! If a type has a tagged partial view, then a ``Size'Class`` aspect specification
! may be provided only at the point of the partial view declaration (in other
! words, no such aspect specification may be provided when the full view of
! the type is declared). All of the above rules (in particular, the rule that
! an overriding ``Size'Class`` aspect value shall not be larger than the
! overridden inherited value) are also enforced when the full view (which may
! have a different ancestor type than that of the partial view) is declared.
! If a partial view for a type inherits a ``Size'Class`` aspect value and does
! not override that value with an explicit aspect specification, then the
! (static) aspect values inherited by the partial view and by the full view
! shall be equal.
  
! An actual parameter of an instantiation whose corresponding formal parameter
! is a formal tagged private type shall not be either mutably tagged or the
! corresponding specific type of a mutably tagged type.
  
! For the legality rules in this section, the RM 12.3(11) rule about legality
! checking in the visible part and formal part of an instance is extended (in
! the same way that it is extended in many other places in the RM) to include
! the private part of an instance.
  
! An object (or a view thereof) of a tagged type is defined to be
! "tag-constrained" if it is
  
! * an object whose type is not mutably tagged; or
  
! * a constant object; or
  
! * a view conversion of a tag-constrained object; or
  
! * a view conversion to a type that is not a descendant of the operand's
!   type; or
  
! * a formal in out or out parameter whose corresponding actual parameter is
!   tag-constrained; or
  
! * a dereference of an access value.
! 
! In the case of an assignment to a tagged variable that is not
! tag-constrained, no check is performed that the tag of the value
! of the expression is the same as that of the target (RM 5.2 notwithstanding).
  Instead, the tag of the target object becomes that of the source object of
! the assignment. Note that the tag of an object of a mutably tagged type MT
! will always be the tag of some specific type that is a descendant of MT.
  An assignment to a composite object similarly copies the tags of any
! subcomponents of the source object that have a mutably tagged type.
  
! The Constrained attribute is defined for any name denoting an object of a
! mutably tagged type (RM 3.7.2 notwithstanding). In this case, the
! Constrained attribute yields the value True if the object is
! tag-constrained and False otherwise.
  
! Renaming is not allowed (see RM 8.5.1) for a type conversion having an operand
! of a mutably tagged type MT and a target type TT such that TT (or its
! corresponding specific type if TT is class-wide) is not an ancestor of MT
! (this is sometimes called a "downward" conversion), nor for any part of
! such an object, nor for any slice of any part of such an object. This
! rule also applies in any context where a name is required to be one for
! which "renaming is allowed" (for example, see RM 12.4).
! [This is analogous to the way that renaming is not allowed for a
! discriminant-dependent component of an unconstrained variable.]
  
! A name denoting a view of a variable of a mutably tagged type shall not occur
! as an operative constituent of the prefix of a name denoting a prefixed
! view of a callable entity, except as the callee name in a call to the
! callable entity. This disallows, for example, renaming such a prefixed view,
! passing the prefixed view name as a generic actual parameter, or using the
! prefixed view name as the prefix of an attribute.
  
  The execution of a construct is erroneous if the construct has a constituent
  that is a name denoting a subcomponent of a tagged object and the object's
! tag is changed by this execution between evaluating the name and the last
! use (within this execution) of the subcomponent denoted by the name.
! This is analogous to the RM 3.7.2(4) rule about discriminant-dependent
! subcomponents.
  
! If the type of a formal parameter is a specific tagged type, then the execution
  of the call is erroneous if the tag of the actual is changed while the formal
! parameter exists (that is, before leaving the corresponding callable construct).
! This is analogous to the RM 6.4.1(18) rule about discriminated parameters.
  
  Generalized Finalization
  ------------------------
*************** If an exception is raised in the finally
*** 1740,1742 ****
--- 1777,1795 ----
  Abort/ATC (asynchronous transfer of control) cannot interrupt a finally block, nor prevent its
  execution, that is the finally block must be executed in full even if the containing task is
  aborted, or if the control is transferred out of the block.
+ 
+ Continue statement
+ ------------------
+ 
+ The ``continue`` keyword makes it possible to stop execution of a loop iteration
+ and continue with the next one. A continue statement has the same syntax
+ (except "exit" is replaced with "continue"), static semantics, and legality
+ rules as an exit statement. The difference is in the dynamic semantics: where an
+ exit statement would cause a transfer of control that completes the (implicitly
+ or explicitly) specified loop_statement, a continue statement would instead
+ cause a transfer of control that completes only the current iteration of that
+ loop_statement, like a goto statement targeting a label following the last
+ statement in the sequence of statements of the specified loop_statement.
+ 
+ Note that ``continue`` is a keyword but it is not a reserved word. This is a
+ configuration that does not exist in standard Ada.
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_advice.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_advice.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_advice.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_advice.rst	Sun Jul  6 22:32:09 2025
*************** RM E.5(28-29): Partition Communication S
*** 1218,1233 ****
    should allow them to block until the corresponding subprogram body
    returns."
  
! Followed by GLADE, a separately supplied PCS that can be used with
! GNAT.
  
    "The ``Write`` operation on a stream of type ``Params_Stream_Type``
    should raise ``Storage_Error`` if it runs out of space trying to
    write the ``Item`` into the stream."
  
- Followed by GLADE, a separately supplied PCS that can be used with
- GNAT.
- 
  .. index:: COBOL support
  
  RM F(7): COBOL Support
--- 1218,1229 ----
    should allow them to block until the corresponding subprogram body
    returns."
  
! A separately supplied PCS that can be used with GNAT when combined with the PolyORB product.
  
    "The ``Write`` operation on a stream of type ``Params_Stream_Type``
    should raise ``Storage_Error`` if it runs out of space trying to
    write the ``Item`` into the stream."
  
  .. index:: COBOL support
  
  RM F(7): COBOL Support
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst	Sun Jul  6 22:32:09 2025
*************** Aspect Persistent_BSS
*** 538,543 ****
--- 538,551 ----
  
  This boolean aspect is equivalent to :ref:`pragma Persistent_BSS<Pragma-Persistent_BSS>`.
  
+ Aspect Potentially_Invalid
+ ==========================
+ .. index:: Potentially_Invalid
+ 
+ For the syntax and semantics of this aspect, see the SPARK 2014 Reference
+ Manual, section 13.9.1.
+ 
+ 
  Aspect Predicate
  ================
  .. index:: Predicate
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst	Sun Jul  6 22:32:09 2025
*************** may have been set by a call to ``Ada.Com
*** 377,387 ****
  *
    "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.
  
  *
    "The details of program execution, including program
--- 377,383 ----
  *
    "The mechanisms for building and running partitions.  See 10.2(24)."
  
! GNAT itself supports programs with only a single partition. The PolyORB product (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 PolyORB user guide for details.
  
  *
    "The details of program execution, including program
*************** See separate section on compilation mode
*** 394,400 ****
    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.
  
  *
--- 390,396 ----
    implementation.  See 10.2(28)."
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system. See the PolyORB user guide for
  further details.
  
  *
*************** Implementation-defined assertion_aspect_
*** 467,473 ****
  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)."
--- 463,469 ----
  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 Disable and Suppressible.
  
  *
    "The default assertion policy.  See 11.4.2(10)."
*************** Unknown.
*** 1188,1214 ****
    "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
    inaccessible.  See E.1(7)."
  
! 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 details on the effect of abort in
  a distributed application.
  
  *
--- 1184,1210 ----
    "The means for creating and executing distributed
    programs.  See E(5)."
  
! The PolyORB product provides means creating and executing
! distributed programs. See the PolyORB user guide for further details.
  
  *
    "Any events that can result in a partition becoming
    inaccessible.  See E.1(7)."
  
! See the PolyORB user guide 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 PolyORB user guide 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 PolyORB user guide for details on the effect of abort in
  a distributed application.
  
  *
*************** System.RPC.Partition_ID'Last is Integer'
*** 1219,1225 ****
  *
    "Implementation-defined interfaces in the PCS.  See E.5(26)."
  
! See the GLADE reference manual for a full description of all
  implementation defined interfaces.
  
  *
--- 1215,1221 ----
  *
    "Implementation-defined interfaces in the PCS.  See E.5(26)."
  
! See the PolyORB user guide for a full description of all
  implementation defined interfaces.
  
  *
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst	Sun Jul  6 22:32:09 2025
*************** Syntax:
*** 5914,5926 ****
    pragma Short_Circuit_And_Or;
  
  
! This configuration pragma causes any occurrence of the AND operator applied to
! operands of type Standard.Boolean to be short-circuited (i.e. the AND operator
! is treated as if it were AND THEN). Or is similarly treated as OR ELSE. This
! may be useful in the context of certification protocols requiring the use of
! short-circuited logical operators. If this configuration pragma occurs locally
! within the file being compiled, it applies only to the file being compiled.
  There is no requirement that all units in a partition use this option.
  
  Pragma Short_Descriptors
  ========================
--- 5914,5946 ----
    pragma Short_Circuit_And_Or;
  
  
! This configuration pragma causes the predefined AND and OR operators of
! type Standard.Boolean to have short-circuit semantics. That is, they
! behave like AND THEN and OR ELSE; the right-hand side is not evaluated
! if the left-hand side determines the result. This may be useful in the
! context of certification protocols requiring the use of short-circuited
! logical operators.
! 
  There is no requirement that all units in a partition use this option.
+ However, mixing of short-circuit and non-short-circuit semantics can be
+ confusing. Therefore, the recommended use is to put the pragma in a
+ configuration file that applies to the whole program. Alternatively, if
+ you have a legacy library that should not use this pragma, you can put
+ it in a separate library project that does not use the pragma.
+ In any case, fine-grained mixing of the different semantics is not
+ recommended. If pragma ``Short_Circuit_And_Or`` is specified, then it
+ is illegal to rename the predefined Boolean AND and OR, or to pass
+ them to generic formal functions; this corresponds to the fact that
+ AND THEN and OR ELSE cannot be renamed nor passed as generic formal
+ functions.
+ 
+ Note that this pragma has no effect on other logical operators --
+ predefined operators of modular types, array-of-boolean types and types
+ derived from Standard.Boolean, nor user-defined operators.
+ 
+ See also the pragma ``Unevaluated_Use_Of_Old`` and the restriction
+ ``No_Direct_Boolean_Operators``, which may be useful in conjunction
+ with ``Short_Circuit_And_Or``.
  
  Pragma Short_Descriptors
  ========================
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_of_ada_2012_features.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_of_ada_2012_features.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_of_ada_2012_features.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_of_ada_2012_features.rst	Thu Jan  1 00:00:00 1970
***************
*** 1,1330 ****
- .. _Implementation_of_Ada_2012_Features:
- 
- ***********************************
- Implementation of Ada 2012 Features
- ***********************************
- 
- .. index:: Ada 2012 implementation status
- 
- .. index:: -gnat12 option (gcc)
- 
- .. index:: pragma Ada_2012
- 
- .. index:: configuration pragma Ada_2012
- 
- .. index:: Ada_2012 configuration pragma
- 
- This chapter contains a complete list of Ada 2012 features that have been
- implemented.
- Generally, these features are only
- available if the *-gnat12* (Ada 2012 features enabled) option is set,
- which is the default behavior,
- or if the configuration pragma ``Ada_2012`` is used.
- 
- However, new pragmas, attributes, and restrictions are
- unconditionally available, since the Ada 95 standard allows the addition of
- new pragmas, attributes, and restrictions (there are exceptions, which are
- documented in the individual descriptions), and also certain packages
- were made available in earlier versions of Ada.
- 
- An ISO date (YYYY-MM-DD) appears in parentheses on the description line.
- This date shows the implementation date of the feature. Any wavefront
- subsequent to this date will contain the indicated feature, as will any
- subsequent releases. A date of 0000-00-00 means that GNAT has always
- 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
- http://www.ada-auth.org/ai05-summary.html.
- 
- .. index:: AI-0002 (Ada 2012 feature)
- 
- * *AI-0002 Export C with unconstrained arrays (0000-00-00)*
- 
-   The compiler is not required to support exporting an Ada subprogram with
-   convention C if there are parameters or a return type of an unconstrained
-   array type (such as ``String``). GNAT allows such declarations but
-   generates warnings. It is possible, but complicated, to write the
-   corresponding C code and certainly such code would be specific to GNAT and
-   non-portable.
- 
-   RM References:  B.01 (17)   B.03 (62)   B.03 (71.1/2)
- 
- .. index:: AI-0003 (Ada 2012 feature)
- 
- * *AI-0003 Qualified expressions as names (2010-07-11)*
- 
-   In Ada 2012, a qualified expression is considered to be syntactically a name,
-   meaning that constructs such as ``A'(F(X)).B`` are now legal. This is
-   useful in disambiguating some cases of overloading.
- 
-   RM References:  3.03 (11)   3.03 (21)   4.01 (2)   4.04 (7)   4.07 (3)
-   5.04 (7)
- 
- .. index:: AI-0007 (Ada 2012 feature)
- 
- * *AI-0007 Stream read and private scalar types (0000-00-00)*
- 
-   The RM as written appeared to limit the possibilities of declaring read
-   attribute procedures for private scalar types. This limitation was not
-   intended, and has never been enforced by GNAT.
- 
-   RM References:  13.13.02 (50/2)   13.13.02 (51/2)
- 
- .. index:: AI-0008 (Ada 2012 feature)
- 
- * *AI-0008 General access to constrained objects (0000-00-00)*
- 
-   The wording in the RM implied that if you have a general access to a
-   constrained object, it could be used to modify the discriminants. This was
-   obviously not intended. ``Constraint_Error`` should be raised, and GNAT
-   has always done so in this situation.
- 
-   RM References:  3.03 (23)   3.10.02 (26/2)   4.01 (9)   6.04.01 (17)   8.05.01 (5/2)
- 
- .. index:: AI-0009 (Ada 2012 feature)
- 
- * *AI-0009 Pragma Independent[_Components] (2010-07-23)*
- 
-   This AI introduces the new pragmas ``Independent`` and
-   ``Independent_Components``,
-   which control guaranteeing independence of access to objects and components.
-   The AI also requires independence not unaffected by confirming rep clauses.
- 
-   RM References:  9.10 (1)   13.01 (15/1)   13.02 (9)   13.03 (13)   C.06 (2)
-   C.06 (4)   C.06 (6)   C.06 (9)   C.06 (13)   C.06 (14)
- 
- .. index:: AI-0012 (Ada 2012 feature)
- 
- * *AI-0012 Pack/Component_Size for aliased/atomic (2010-07-15)*
- 
-   It is now illegal to give an inappropriate component size or a pragma
-   ``Pack`` that attempts to change the component size in the case of atomic
-   or aliased components. Previously GNAT ignored such an attempt with a
-   warning.
- 
-   RM References:  13.02 (6.1/2)   13.02 (7)   C.06 (10)   C.06 (11)   C.06 (21)
- 
- .. index:: AI-0015 (Ada 2012 feature)
- 
- * *AI-0015 Constant return objects (0000-00-00)*
- 
-   The return object declared in an *extended_return_statement* may be
-   declared constant. This was always intended, and GNAT has always allowed it.
- 
-   RM References:  6.05 (2.1/2)   3.03 (10/2)   3.03 (21)   6.05 (5/2)
-   6.05 (5.7/2)
- 
- .. index:: AI-0017 (Ada 2012 feature)
- 
- * *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.
- 
-   RM References:  13.14 (3/1)
- 
- .. index:: AI-0019 (Ada 2012 feature)
- 
- * *AI-0019 Freezing of primitives for tagged types (0000-00-00)*
- 
-   The RM suggests that primitive subprograms of a specific tagged type are
-   frozen when the tagged type is frozen. This would be an incompatible change
-   and is not intended. GNAT has never attempted this kind of freezing and its
-   behavior is consistent with the recommendation of this AI.
- 
-   RM References:  13.14 (2)   13.14 (3/1)   13.14 (8.1/1)   13.14 (10)   13.14 (14)   13.14 (15.1/2)
- 
- .. index:: AI-0026 (Ada 2012 feature)
- 
- * *AI-0026 Missing rules for Unchecked_Union (2010-07-07)*
- 
-   Record representation clauses concerning Unchecked_Union types cannot mention
-   the discriminant of the type. The type of a component declared in the variant
-   part of an Unchecked_Union cannot be controlled, have controlled components,
-   nor have protected or task parts. If an Unchecked_Union type is declared
-   within the body of a generic unit or its descendants, then the type of a
-   component declared in the variant part cannot be a formal private type or a
-   formal private extension declared within the same generic unit.
- 
-   RM References:  7.06 (9.4/2)   B.03.03 (9/2)   B.03.03 (10/2)
- 
- .. index:: AI-0030 (Ada 2012 feature)
- 
- * *AI-0030 Requeue on synchronized interfaces (2010-07-19)*
- 
-   Requeue is permitted to a protected, synchronized or task interface primitive
-   providing it is known that the overriding operation is an entry. Otherwise
-   the requeue statement has the same effect as a procedure call. Use of pragma
-   ``Implemented`` provides a way to impose a static requirement on the
-   overriding operation by adhering to one of the implementation kinds: entry,
-   protected procedure or any of the above.
- 
-   RM References:  9.05 (9)   9.05.04 (2)   9.05.04 (3)   9.05.04 (5)
-   9.05.04 (6)   9.05.04 (7)   9.05.04 (12)
- 
- .. index:: AI-0031 (Ada 2012 feature)
- 
- * *AI-0031 Add From parameter to Find_Token (2010-07-25)*
- 
-   A new version of ``Find_Token`` is added to all relevant string packages,
-   with an extra parameter ``From``. Instead of starting at the first
-   character of the string, the search for a matching Token starts at the
-   character indexed by the value of ``From``.
-   These procedures are available in all versions of Ada
-   but if used in versions earlier than Ada 2012 they will generate a warning
-   that an Ada 2012 subprogram is being used.
- 
-   RM References:  A.04.03 (16)   A.04.03 (67)   A.04.03 (68/1)   A.04.04 (51)
-   A.04.05 (46)
- 
- .. index:: AI-0032 (Ada 2012 feature)
- 
- * *AI-0032 Extended return for class-wide functions (0000-00-00)*
- 
-   If a function returns a class-wide type, the object of an extended return
-   statement can be declared with a specific type that is covered by the class-
-   wide type. This has been implemented in GNAT since the introduction of
-   extended returns. Note AI-0103 complements this AI by imposing matching
-   rules for constrained return types.
- 
-   RM References:  6.05 (5.2/2)   6.05 (5.3/2)   6.05 (5.6/2)   6.05 (5.8/2)
-   6.05 (8/2)
- 
- .. index:: AI-0033 (Ada 2012 feature)
- 
- * *AI-0033 Attach/Interrupt_Handler in generic (2010-07-24)*
- 
-   Neither of these two pragmas may appear within a generic template, because
-   the generic might be instantiated at other than the library level.
- 
-   RM References:  13.11.02 (16)   C.03.01 (7/2)   C.03.01 (8/2)
- 
- .. index:: AI-0034 (Ada 2012 feature)
- 
- * *AI-0034 Categorization of limited views (0000-00-00)*
- 
-   The RM makes certain limited with clauses illegal because of categorization
-   considerations, when the corresponding normal with would be legal. This is
-   not intended, and GNAT has always implemented the recommended behavior.
- 
-   RM References:  10.02.01 (11/1)   10.02.01 (17/2)
- 
- .. index:: AI-0035 (Ada 2012 feature)
- 
- * *AI-0035 Inconsistencies with Pure units (0000-00-00)*
- 
-   This AI remedies some inconsistencies in the legality rules for Pure units.
-   Derived access types are legal in a pure unit (on the assumption that the
-   rule for a zero storage pool size has been enforced on the ancestor type).
-   The rules are enforced in generic instances and in subunits. GNAT has always
-   implemented the recommended behavior.
- 
-   RM References:  10.02.01 (15.1/2)   10.02.01 (15.4/2)   10.02.01 (15.5/2)   10.02.01 (17/2)
- 
- .. index:: AI-0037 (Ada 2012 feature)
- 
- * *AI-0037 Out-of-range box associations in aggregate (0000-00-00)*
- 
-   This AI confirms that an association of the form ``Indx => <>`` in an
-   array aggregate must raise ``Constraint_Error`` if ``Indx``
-   is out of range. The RM specified a range check on other associations, but
-   not when the value of the association was defaulted. GNAT has always inserted
-   a constraint check on the index value.
- 
-   RM References:  4.03.03 (29)
- 
- .. index:: AI-0038 (Ada 2012 feature)
- 
- * *AI-0038 Minor errors in Text_IO (0000-00-00)*
- 
-   These are minor errors in the description on three points. The intent on
-   all these points has always been clear, and GNAT has always implemented the
-   correct intended semantics.
- 
-   RM References:  A.10.05 (37)   A.10.07 (8/1)   A.10.07 (10)   A.10.07 (12)   A.10.08 (10)   A.10.08 (24)
- 
- .. index:: AI-0039 (Ada 2012 feature)
- 
- * *AI-0039 Stream attributes cannot be dynamic (0000-00-00)*
- 
-   The RM permitted the use of dynamic expressions (such as ``ptr.all``)
-   for stream attributes, but these were never useful and are now illegal. GNAT
-   has always regarded such expressions as illegal.
- 
-   RM References:  13.03 (4)   13.03 (6)   13.13.02 (38/2)
- 
- .. index:: AI-0040 (Ada 2012 feature)
- 
- * *AI-0040 Limited with clauses on descendant (0000-00-00)*
- 
-   This AI confirms that a limited with clause in a child unit cannot name
-   an ancestor of the unit. This has always been checked in GNAT.
- 
-   RM References:  10.01.02 (20/2)
- 
- .. index:: AI-0042 (Ada 2012 feature)
- 
- * *AI-0042 Overriding versus implemented-by (0000-00-00)*
- 
-   This AI fixes a wording gap in the RM. An operation of a synchronized
-   interface can be implemented by a protected or task entry, but the abstract
-   operation is not being overridden in the usual sense, and it must be stated
-   separately that this implementation is legal. This has always been the case
-   in GNAT.
- 
-   RM References:  9.01 (9.2/2)   9.04 (11.1/2)
- 
- .. index:: AI-0043 (Ada 2012 feature)
- 
- * *AI-0043 Rules about raising exceptions (0000-00-00)*
- 
-   This AI covers various omissions in the RM regarding the raising of
-   exceptions. GNAT has always implemented the intended semantics.
- 
-   RM References:  11.04.01 (10.1/2)   11 (2)
- 
- .. index:: AI-0044 (Ada 2012 feature)
- 
- * *AI-0044 Restrictions on container instantiations (0000-00-00)*
- 
-   This AI places restrictions on allowed instantiations of generic containers.
-   These restrictions are not checked by the compiler, so there is nothing to
-   change in the implementation. This affects only the RM documentation.
- 
-   RM References:  A.18 (4/2)   A.18.02 (231/2)   A.18.03 (145/2)   A.18.06 (56/2)   A.18.08 (66/2)   A.18.09 (79/2)   A.18.26 (5/2)   A.18.26 (9/2)
- 
- .. index:: AI-0046 (Ada 2012 feature)
- 
- * *AI-0046 Null exclusion match for full conformance (2010-07-17)*
- 
-   For full conformance, in the case of access parameters, the null exclusion
-   must match (either both or neither must have ``not null``).
- 
-   RM References:  6.03.02 (18)
- 
- .. index:: AI-0050 (Ada 2012 feature)
- 
- * *AI-0050 Raising Constraint_Error early for function call (0000-00-00)*
- 
-   The implementation permissions for raising ``Constraint_Error`` early on a function call
-   when it was clear an exception would be raised were over-permissive and allowed
-   mishandling of discriminants in some cases. GNAT did
-   not take advantage of these incorrect permissions in any case.
- 
-   RM References:  6.05 (24/2)
- 
- .. index:: AI-0056 (Ada 2012 feature)
- 
- * *AI-0056 Index on null string returns zero (0000-00-00)*
- 
-   The wording in the Ada 2005 RM implied an incompatible handling of the
-   ``Index`` functions, resulting in raising an exception instead of
-   returning zero in some situations.
-   This was not intended and has been corrected.
-   GNAT always returned zero, and is thus consistent with this AI.
- 
-   RM References:  A.04.03 (56.2/2)   A.04.03 (58.5/2)
- 
- .. index:: AI-0058 (Ada 2012 feature)
- 
- * *AI-0058 Abnormal completion of an extended return (0000-00-00)*
- 
-   The RM had some incorrect wording implying wrong treatment of abnormal
-   completion in an extended return. GNAT has always implemented the intended
-   correct semantics as described by this AI.
- 
-   RM References:  6.05 (22/2)
- 
- .. index:: AI-0060 (Ada 2012 feature)
- 
- * *AI-0060 Extended definition of remote access types (0000-00-00)*
- 
-   This AI extends the definition of remote access types to include access
-   to limited, synchronized, protected or task class-wide interface types.
-   GNAT already implemented this extension.
- 
-   RM References:  A (4)   E.02.02 (9/1)   E.02.02 (9.2/1)   E.02.02 (14/2)   E.02.02 (18)
- 
- .. index:: AI-0062 (Ada 2012 feature)
- 
- * *AI-0062 Null exclusions and deferred constants (0000-00-00)*
- 
-   A full constant may have a null exclusion even if its associated deferred
-   constant does not. GNAT has always allowed this.
- 
-   RM References:  7.04 (6/2)   7.04 (7.1/2)
- 
- .. index:: AI-0064 (Ada 2012 feature)
- 
- * *AI-0064 Redundant finalization rule (0000-00-00)*
- 
-   This is an editorial change only. The intended behavior is already checked
-   by an existing ACATS test, which GNAT has always executed correctly.
- 
-   RM References:  7.06.01 (17.1/1)
- 
- .. index:: AI-0065 (Ada 2012 feature)
- 
- * *AI-0065 Remote access types and external streaming (0000-00-00)*
- 
-   This AI clarifies the fact that all remote access types support external
-   streaming. This fixes an obvious oversight in the definition of the
-   language, and GNAT always implemented the intended correct rules.
- 
-   RM References:  13.13.02 (52/2)
- 
- .. index:: AI-0070 (Ada 2012 feature)
- 
- * *AI-0070 Elaboration of interface types (0000-00-00)*
- 
-   This is an editorial change only, there are no testable consequences short of
-   checking for the absence of generated code for an interface declaration.
- 
-   RM References:  3.09.04 (18/2)
- 
- .. index:: AI-0072 (Ada 2012 feature)
- 
- * *AI-0072 Task signalling using 'Terminated (0000-00-00)*
- 
-   This AI clarifies that task signalling for reading ``'Terminated`` only
-   occurs if the result is True. GNAT semantics has always been consistent with
-   this notion of task signalling.
- 
-   RM References:  9.10 (6.1/1)
- 
- .. index:: AI-0073 (Ada 2012 feature)
- 
- * *AI-0073 Functions returning abstract types (2010-07-10)*
- 
-   This AI covers a number of issues regarding returning abstract types. In
-   particular generic functions cannot have abstract result types or access
-   result types designated an abstract type. There are some other cases which
-   are detailed in the AI. Note that this binding interpretation has not been
-   retrofitted to operate before Ada 2012 mode, since it caused a significant
-   number of regressions.
- 
-   RM References:  3.09.03 (8)   3.09.03 (10)   6.05 (8/2)
- 
- .. index:: AI-0076 (Ada 2012 feature)
- 
- * *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)
- 
- .. index:: AI-0077 (Ada 2012 feature)
- 
- * *AI-0077 Limited withs and scope of declarations (0000-00-00)*
- 
-   This AI clarifies that a declaration does not include a context clause,
-   and confirms that it is illegal to have a context in which both a limited
-   and a nonlimited view of a package are accessible. Such double visibility
-   was always rejected by GNAT.
- 
-   RM References:  10.01.02 (12/2)   10.01.02 (21/2)   10.01.02 (22/2)
- 
- .. index:: AI-0078 (Ada 2012 feature)
- 
- * *AI-0078 Relax Unchecked_Conversion alignment rules (0000-00-00)*
- 
-   In Ada 2012, compilers are required to support unchecked conversion where the
-   target alignment is a multiple of the source alignment. GNAT always supported
-   this case (and indeed all cases of differing alignments, doing copies where
-   required if the alignment was reduced).
- 
-   RM References:  13.09 (7)
- 
- .. index:: AI-0079 (Ada 2012 feature)
- 
- * *AI-0079 Allow other_format characters in source (2010-07-10)*
- 
-   Wide characters in the unicode category *other_format* are now allowed in
-   source programs between tokens, but not within a token such as an identifier.
- 
-   RM References:  2.01 (4/2)   2.02 (7)
- 
- .. index:: AI-0080 (Ada 2012 feature)
- 
- * *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)
- 
- .. index:: AI-0087 (Ada 2012 feature)
- 
- * *AI-0087 Actual for formal nonlimited derived type (2010-07-15)*
- 
-   The actual for a formal nonlimited derived type cannot be limited. In
-   particular, a formal derived type that extends a limited interface but which
-   is not explicitly limited cannot be instantiated with a limited type.
- 
-   RM References:  7.05 (5/2)   12.05.01 (5.1/2)
- 
- .. index:: AI-0088 (Ada 2012 feature)
- 
- * *AI-0088 The value of exponentiation (0000-00-00)*
- 
-   This AI clarifies the equivalence rule given for the dynamic semantics of
-   exponentiation: the value of the operation can be obtained by repeated
-   multiplication, but the operation can be implemented otherwise (for example
-   using the familiar divide-by-two-and-square algorithm, even if this is less
-   accurate), and does not imply repeated reads of a volatile base.
- 
-   RM References:  4.05.06 (11)
- 
- .. index:: AI-0091 (Ada 2012 feature)
- 
- * *AI-0091 Do not allow other_format in identifiers (0000-00-00)*
- 
-   Wide characters in the unicode category *other_format* are not permitted
-   within  an identifier, since this can be a security problem. The error
-   message for this case has been improved to be more specific, but GNAT has
-   never allowed such characters to appear in identifiers.
- 
-   RM References:  2.03 (3.1/2)   2.03 (4/2)   2.03 (5/2)   2.03 (5.1/2)   2.03 (5.2/2)   2.03 (5.3/2)   2.09 (2/2)
- 
- .. index:: AI-0093 (Ada 2012 feature)
- 
- * *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)
- 
- .. index:: AI-0095 (Ada 2012 feature)
- 
- * *AI-0095 Address of intrinsic subprograms (0000-00-00)*
- 
-   The prefix of ``'Address`` cannot statically denote a subprogram with
-   convention ``Intrinsic``. The use of the ``Address`` attribute raises
-   ``Program_Error`` if the prefix denotes a subprogram with convention
-   ``Intrinsic``.
- 
-   RM References:  13.03 (11/1)
- 
- .. index:: AI-0096 (Ada 2012 feature)
- 
- * *AI-0096 Deriving from formal private types (2010-07-20)*
- 
-   In general it is illegal for a type derived from a formal limited type to be
-   nonlimited.  This AI makes an exception to this rule: derivation is legal
-   if it appears in the private part of the generic, and the formal type is not
-   tagged. If the type is tagged, the legality check must be applied to the
-   private part of the package.
- 
-   RM References:  3.04 (5.1/2)   6.02 (7)
- 
- .. index:: AI-0097 (Ada 2012 feature)
- 
- * *AI-0097 Treatment of abstract null extension (2010-07-19)*
- 
-   The RM as written implied that in some cases it was possible to create an
-   object of an abstract type, by having an abstract extension inherit a non-
-   abstract constructor from its parent type. This mistake has been corrected
-   in GNAT and in the RM, and this construct is now illegal.
- 
-   RM References:  3.09.03 (4/2)
- 
- .. index:: AI-0098 (Ada 2012 feature)
- 
- * *AI-0098 Anonymous subprogram access restrictions (0000-00-00)*
- 
-   An unintentional omission in the RM implied some inconsistent restrictions on
-   the use of anonymous access to subprogram values. These restrictions were not
-   intentional, and have never been enforced by GNAT.
- 
-   RM References:  3.10.01 (6)   3.10.01 (9.2/2)
- 
- .. index:: AI-0099 (Ada 2012 feature)
- 
- * *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)
- 
- .. index:: AI-0100 (Ada 2012 feature)
- 
- * *AI-0100 Placement of pragmas  (2010-07-01)*
- 
-   This AI is an earlier version of AI-163. It simplifies the rules
-   for legal placement of pragmas. In the case of lists that allow pragmas, if
-   the list may have no elements, then the list may consist solely of pragmas.
- 
-   RM References:  2.08 (7)
- 
- .. index:: AI-0102 (Ada 2012 feature)
- 
- * *AI-0102 Some implicit conversions are illegal (0000-00-00)*
- 
-   It is illegal to assign an anonymous access constant to an anonymous access
-   variable. The RM did not have a clear rule to prevent this, but GNAT has
-   always generated an error for this usage.
- 
-   RM References:  3.07 (16)   3.07.01 (9)   6.04.01 (6)   8.06 (27/2)
- 
- .. index:: AI-0103 (Ada 2012 feature)
- 
- * *AI-0103 Static matching for extended return (2010-07-23)*
- 
-   If the return subtype of a function is an elementary type or a constrained
-   type, the subtype indication in an extended return statement must match
-   statically this return subtype.
- 
-   RM References:  6.05 (5.2/2)
- 
- .. index:: AI-0104 (Ada 2012 feature)
- 
- * *AI-0104 Null exclusion and uninitialized allocator (2010-07-15)*
- 
-   The assignment ``Ptr := new not null Some_Ptr;`` will raise
-   ``Constraint_Error`` because the default value of the allocated object is
-   **null**. This useless construct is illegal in Ada 2012.
- 
-   RM References:  4.08 (2)
- 
- .. index:: AI-0106 (Ada 2012 feature)
- 
- * *AI-0106 No representation pragmas on generic formals (0000-00-00)*
- 
-   The RM appeared to allow representation pragmas on generic formal parameters,
-   but this was not intended, and GNAT has never permitted this usage.
- 
-   RM References:  13.01 (9.1/1)
- 
- .. index:: AI-0108 (Ada 2012 feature)
- 
- * *AI-0108 Limited incomplete view and discriminants (0000-00-00)*
- 
-   This AI confirms that an incomplete type from a limited view does not have
-   discriminants. This has always been the case in GNAT.
- 
-   RM References:  10.01.01 (12.3/2)
- 
- .. index:: AI-0109 (Ada 2012 feature)
- 
- * *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.13.02 (34/2)
- 
- .. index:: AI-0112 (Ada 2012 feature)
- 
- * *AI-0112 Detection of duplicate pragmas (2010-07-24)*
- 
-   This AI concerns giving names to various representation aspects, but the
-   practical effect is simply to make the use of duplicate
-   ``Atomic[_Components]``,
-   ``Volatile[_Components]``, and
-   ``Independent[_Components]`` pragmas illegal, and GNAT
-   now performs this required check.
- 
-   RM References:  13.01 (8)
- 
- .. index:: AI-0114 (Ada 2012 feature)
- 
- * *AI-0114 Classification of letters (0000-00-00)*
- 
-   The code points 170 (``FEMININE ORDINAL INDICATOR``),
-   181 (``MICRO SIGN``), and
-   186 (``MASCULINE ORDINAL INDICATOR``) are technically considered
-   lower case letters by Unicode.
-   However, they are not allowed in identifiers, and they
-   return ``False`` to ``Ada.Characters.Handling.Is_Letter/Is_Lower``.
-   This behavior is consistent with that defined in Ada 95.
- 
-   RM References:  A.03.02 (59)   A.04.06 (7)
- 
- .. index:: AI-0116 (Ada 2012 feature)
- 
- * *AI-0116 Alignment of class-wide objects (0000-00-00)*
- 
-   This AI requires that the alignment of a class-wide object be no greater
-   than the alignment of any type in the class. GNAT has always followed this
-   recommendation.
- 
-   RM References:  13.03 (29)   13.11 (16)
- 
- .. index:: AI-0118 (Ada 2012 feature)
- 
- * *AI-0118 The association of parameter associations (0000-00-00)*
- 
-   This AI clarifies the rules for named associations in subprogram calls and
-   generic instantiations. The rules have been in place since Ada 83.
- 
-   RM References:  6.04.01 (2)   12.03 (9)
- 
- .. index:: AI-0120 (Ada 2012 feature)
- 
- * *AI-0120 Constant instance of protected object (0000-00-00)*
- 
-   This is an RM editorial change only. The section that lists objects that are
-   constant failed to include the current instance of a protected object
-   within a protected function. This has always been treated as a constant
-   in GNAT.
- 
-   RM References:  3.03 (21)
- 
- .. index:: AI-0122 (Ada 2012 feature)
- 
- * *AI-0122 Private with and children of generics (0000-00-00)*
- 
-   This AI clarifies the visibility of private children of generic units within
-   instantiations of a parent. GNAT has always handled this correctly.
- 
-   RM References:  10.01.02 (12/2)
- 
- .. index:: AI-0123 (Ada 2012 feature)
- 
- * *AI-0123 Composability of equality (2010-04-13)*
- 
-   Equality of untagged record composes, so that the predefined equality for a
-   composite type that includes a component of some untagged record type
-   ``R`` uses the equality operation of ``R`` (which may be user-defined
-   or predefined). This makes the behavior of untagged records identical to that
-   of tagged types in this respect.
- 
-   This change is an incompatibility with previous versions of Ada, but it
-   corrects a non-uniformity that was often a source of confusion. Analysis of
-   a large number of industrial programs indicates that in those rare cases
-   where a composite type had an untagged record component with a user-defined
-   equality, either there was no use of the composite equality, or else the code
-   expected the same composability as for tagged types, and thus had a bug that
-   would be fixed by this change.
- 
-   RM References:  4.05.02 (9.7/2)   4.05.02 (14)   4.05.02 (15)   4.05.02 (24)
-   8.05.04 (8)
- 
- .. index:: AI-0125 (Ada 2012 feature)
- 
- * *AI-0125 Nonoverridable operations of an ancestor (2010-09-28)*
- 
-   In Ada 2012, the declaration of a primitive operation of a type extension
-   or private extension can also override an inherited primitive that is not
-   visible at the point of this declaration.
- 
-   RM References:  7.03.01 (6)   8.03 (23)   8.03.01 (5/2)   8.03.01 (6/2)
- 
- .. index:: AI-0126 (Ada 2012 feature)
- 
- * *AI-0126 Dispatching with no declared operation (0000-00-00)*
- 
-   This AI clarifies dispatching rules, and simply confirms that dispatching
-   executes the operation of the parent type when there is no explicitly or
-   implicitly declared operation for the descendant type. This has always been
-   the case in all versions of GNAT.
- 
-   RM References:  3.09.02 (20/2)   3.09.02 (20.1/2)   3.09.02 (20.2/2)
- 
- .. index:: AI-0127 (Ada 2012 feature)
- 
- * *AI-0127 Adding Locale Capabilities (2010-09-29)*
- 
-   This package provides an interface for identifying the current locale.
- 
-   RM References:  A.19    A.19.01    A.19.02    A.19.03    A.19.05    A.19.06
-   A.19.07    A.19.08    A.19.09    A.19.10    A.19.11    A.19.12    A.19.13
- 
- .. index:: AI-0128 (Ada 2012 feature)
- 
- * *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.02.03 (6)   6.06 (6)
- 
- .. index:: AI-0129 (Ada 2012 feature)
- 
- * *AI-0129 Limited views and incomplete types (0000-00-00)*
- 
-   This AI clarifies the description of limited views: a limited view of a
-   package includes only one view of a type that has an incomplete declaration
-   and a full declaration (there is no possible ambiguity in a client package).
-   This AI also fixes an omission: a nested package in the private part has no
-   limited view. GNAT always implemented this correctly.
- 
-   RM References:  10.01.01 (12.2/2)   10.01.01 (12.3/2)
- 
- .. index:: AI-0132 (Ada 2012 feature)
- 
- * *AI-0132 Placement of library unit pragmas (0000-00-00)*
- 
-   This AI fills a gap in the description of library unit pragmas. The pragma
-   clearly must apply to a library unit, even if it does not carry the name
-   of the enclosing unit. GNAT has always enforced the required check.
- 
-   RM References:  10.01.05 (7)
- 
- .. index:: AI-0134 (Ada 2012 feature)
- 
- * *AI-0134 Profiles must match for full conformance (0000-00-00)*
- 
-   For full conformance, the profiles of anonymous-access-to-subprogram
-   parameters must match. GNAT has always enforced this rule.
- 
-   RM References:  6.03.01 (18)
- 
- .. index:: AI-0137 (Ada 2012 feature)
- 
- * *AI-0137 String encoding package (2010-03-25)*
- 
-   The packages ``Ada.Strings.UTF_Encoding``, together with its child
-   packages, ``Conversions``, ``Strings``, ``Wide_Strings``,
-   and ``Wide_Wide_Strings`` have been
-   implemented. These packages (whose documentation can be found in the spec
-   files :file:`a-stuten.ads`, :file:`a-suenco.ads`, :file:`a-suenst.ads`,
-   :file:`a-suewst.ads`, :file:`a-suezst.ads`) allow encoding and decoding of
-   ``String``, ``Wide_String``, and ``Wide_Wide_String``
-   values using UTF coding schemes (including UTF-8, UTF-16LE, UTF-16BE, and
-   UTF-16), as well as conversions between the different UTF encodings. With
-   the exception of ``Wide_Wide_Strings``, these packages are available in
-   Ada 95 and Ada 2005 mode as well as Ada 2012 mode.
-   The ``Wide_Wide_Strings`` package
-   is available in Ada 2005 mode as well as Ada 2012 mode (but not in Ada 95
-   mode since it uses ``Wide_Wide_Character``).
- 
-   RM References:  A.04.11
- 
- .. index:: AI-0139-2 (Ada 2012 feature)
- 
- * *AI-0139-2 Syntactic sugar for iterators (2010-09-29)*
- 
-   The new syntax for iterating over arrays and containers is now implemented.
-   Iteration over containers is for now limited to read-only iterators. Only
-   default iterators are supported, with the syntax: ``for Elem of C``.
- 
-   RM References:  5.05
- 
- .. index:: AI-0146 (Ada 2012 feature)
- 
- * *AI-0146 Type invariants (2009-09-21)*
- 
-   Type invariants may be specified for private types using the aspect notation.
-   Aspect ``Type_Invariant`` may be specified for any private type,
-   ``Type_Invariant'Class`` can
-   only be specified for tagged types, and is inherited by any descendent of the
-   tagged types. The invariant is a boolean expression that is tested for being
-   true in the following situations: conversions to the private type, object
-   declarations for the private type that are default initialized, and
-   [**in**] **out**
-   parameters and returned result on return from any primitive operation for
-   the type that is visible to a client.
-   GNAT defines the synonyms ``Invariant`` for ``Type_Invariant`` and
-   ``Invariant'Class`` for ``Type_Invariant'Class``.
- 
-   RM References:  13.03.03 (00)
- 
- .. index:: AI-0147 (Ada 2012 feature)
- 
- * *AI-0147 Conditional expressions (2009-03-29)*
- 
-   Conditional expressions are permitted. The form of such an expression is:
- 
-   ::
- 
-         (if expr then expr {elsif expr then expr} [else expr])
- 
-   The parentheses can be omitted in contexts where parentheses are present
-   anyway, such as subprogram arguments and pragma arguments. If the **else**
-   clause is omitted, **else** *True* is assumed;
-   thus ``(if A then B)`` is a way to conveniently represent
-   *(A implies B)* in standard logic.
- 
-   RM References:  4.03.03 (15)   4.04 (1)   4.04 (7)   4.05.07 (0)   4.07 (2)
-   4.07 (3)   4.09 (12)   4.09 (33)   5.03 (3)   5.03 (4)   7.05 (2.1/2)
- 
- .. index:: AI-0152 (Ada 2012 feature)
- 
- * *AI-0152 Restriction No_Anonymous_Allocators (2010-09-08)*
- 
-   Restriction ``No_Anonymous_Allocators`` prevents the use of allocators
-   where the type of the returned value is an anonymous access type.
- 
-   RM References:  H.04 (8/1)
- 
- .. index:: AI-0157 (Ada 2012 feature)
- 
- * *AI-0157 Allocation/Deallocation from empty pool (2010-07-11)*
- 
-   Allocation and Deallocation from an empty storage pool (i.e. allocation or
-   deallocation of a pointer for which a static storage size clause of zero
-   has been given) is now illegal and is detected as such. GNAT
-   previously gave a warning but not an error.
- 
-   RM References:  4.08 (5.3/2)   13.11.02 (4)   13.11.02 (17)
- 
- .. index:: AI-0158 (Ada 2012 feature)
- 
- * *AI-0158 Generalizing membership tests (2010-09-16)*
- 
-   This AI extends the syntax of membership tests to simplify complex conditions
-   that can be expressed as membership in a subset of values of any type. It
-   introduces syntax for a list of expressions that may be used in loop contexts
-   as well.
- 
-   RM References:  3.08.01 (5)   4.04 (3)   4.05.02 (3)   4.05.02 (5)   4.05.02 (27)
- 
- .. index:: AI-0161 (Ada 2012 feature)
- 
- * *AI-0161 Restriction No_Default_Stream_Attributes (2010-09-11)*
- 
-   A new restriction ``No_Default_Stream_Attributes`` prevents the use of any
-   of the default stream attributes for elementary types. If this restriction is
-   in force, then it is necessary to provide explicit subprograms for any
-   stream attributes used.
- 
-   RM References:  13.12.01 (4/2)   13.13.02 (40/2)   13.13.02 (52/2)
- 
- .. index:: AI-0162 (Ada 2012 feature)
- 
- * *AI-0162 Incomplete type completed by partial view (2010-09-15)*
- 
-   Incomplete types are made more useful by allowing them to be completed by
-   private types and private extensions.
- 
-   RM References:  3.10.01 (2.5/2)   3.10.01 (2.6/2)   3.10.01 (3)   3.10.01 (4/2)
- 
- .. index:: AI-0163 (Ada 2012 feature)
- 
- * *AI-0163 Pragmas in place of null (2010-07-01)*
- 
-   A statement sequence may be composed entirely of pragmas. It is no longer
-   necessary to add a dummy ``null`` statement to make the sequence legal.
- 
-   RM References:  2.08 (7)   2.08 (16)
- 
- .. index:: AI-0171 (Ada 2012 feature)
- 
- * *AI-0171 Pragma CPU and Ravenscar Profile (2010-09-24)*
- 
-   A new package ``System.Multiprocessors`` is added, together with the
-   definition of pragma ``CPU`` for controlling task affinity. A new no
-   dependence restriction, on ``System.Multiprocessors.Dispatching_Domains``,
-   is added to the Ravenscar profile.
- 
-   RM References:  D.13.01 (4/2)   D.16
- 
- .. index:: AI-0173 (Ada 2012 feature)
- 
- * *AI-0173 Testing if tags represent abstract types (2010-07-03)*
- 
-   The function ``Ada.Tags.Type_Is_Abstract`` returns ``True`` if invoked
-   with the tag of an abstract type, and ``False`` otherwise.
- 
-   RM References:  3.09 (7.4/2)   3.09 (12.4/2)
- 
- .. index:: AI-0176 (Ada 2012 feature)
- 
- * *AI-0176 Quantified expressions (2010-09-29)*
- 
-   Both universally and existentially quantified expressions are implemented.
-   They use the new syntax for iterators proposed in AI05-139-2, as well as
-   the standard Ada loop syntax.
- 
-   RM References:  1.01.04 (12)   2.09 (2/2)   4.04 (7)   4.05.09 (0)
- 
- .. index:: AI-0177 (Ada 2012 feature)
- 
- * *AI-0177 Parameterized expressions (2010-07-10)*
- 
-   The new Ada 2012 notion of parameterized expressions is implemented. The form
-   is:
- 
-   .. code-block:: ada
- 
-      function-specification is (expression)
- 
-   This is exactly equivalent to the
-   corresponding function body that returns the expression, but it can appear
-   in a package spec. Note that the expression must be parenthesized.
- 
-   RM References:  13.11.01 (3/2)
- 
- .. index:: AI-0178 (Ada 2012 feature)
- 
- * *AI-0178 Incomplete views are limited (0000-00-00)*
- 
-   This AI clarifies the role of incomplete views and plugs an omission in the
-   RM. GNAT always correctly restricted the use of incomplete views and types.
- 
-   RM References:  7.05 (3/2)   7.05 (6/2)
- 
- .. index:: AI-0179 (Ada 2012 feature)
- 
- * *AI-0179 Statement not required after label (2010-04-10)*
- 
-   It is not necessary to have a statement following a label, so a label
-   can appear at the end of a statement sequence without the need for putting a
-   null statement afterwards, but it is not allowable to have only labels and
-   no real statements in a statement sequence.
- 
-   RM References:  5.01 (2)
- 
- .. index:: AI-0181 (Ada 2012 feature)
- 
- * *AI-0181 Soft hyphen is a non-graphic character (2010-07-23)*
- 
-   From Ada 2005 on, soft hyphen is considered a non-graphic character, which
-   means that it has a special name (``SOFT_HYPHEN``) in conjunction with the
-   ``Image`` and ``Value`` attributes for the character types. Strictly
-   speaking this is an inconsistency with Ada 95, but in practice the use of
-   these attributes is so obscure that it will not cause problems.
- 
-   RM References:  3.05.02 (2/2)   A.01 (35/2)   A.03.03 (21)
- 
- .. index:: AI-0182 (Ada 2012 feature)
- 
- * *AI-0182 Additional forms for* ``Character'Value`` *(0000-00-00)*
- 
-   This AI allows ``Character'Value`` to accept the string ``'?'`` where
-   ``?`` is any character including non-graphic control characters. GNAT has
-   always accepted such strings. It also allows strings such as
-   ``HEX_00000041`` to be accepted, but GNAT does not take advantage of this
-   permission and raises ``Constraint_Error``, as is certainly still
-   permitted.
- 
-   RM References:  3.05 (56/2)
- 
- .. index:: AI-0183 (Ada 2012 feature)
- 
- * *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)
- 
- ==================================== ===========
- Supported Aspect                     Source
- ==================================== ===========
-   ``Ada_2005``                           -- GNAT
-   ``Ada_2012``                           -- GNAT
-   ``Address``
-   ``Alignment``
-   ``Atomic``
-   ``Atomic_Components``
-   ``Bit_Order``
-   ``Component_Size``
-   ``Contract_Cases``                     -- GNAT
-   ``Discard_Names``
-   ``External_Tag``
-   ``Favor_Top_Level``                    -- GNAT
-   ``Inline``
-   ``Inline_Always``                      -- GNAT
-   ``Invariant``                          -- GNAT
-   ``Machine_Radix``
-   ``No_Return``
-   ``Object_Size``                        -- GNAT
-   ``Pack``
-   ``Persistent_BSS``                     -- GNAT
-   ``Post``
-   ``Pre``
-   ``Predicate``
-   ``Preelaborable_Initialization``
-   ``Pure_Function``                      -- GNAT
-   ``Remote_Access_Type``                 -- GNAT
-   ``Shared``                             -- GNAT
-   ``Size``
-   ``Storage_Pool``
-   ``Storage_Size``
-   ``Stream_Size``
-   ``Suppress``
-   ``Suppress_Debug_Info``                -- GNAT
-   ``Test_Case``                          -- GNAT
-   ``Thread_Local_Storage``               -- GNAT
-   ``Type_Invariant``
-   ``Unchecked_Union``
-   ``Universal_Aliasing``                 -- GNAT
-   ``Unmodified``                         -- GNAT
-   ``Unreferenced``                       -- GNAT
-   ``Unreferenced_Objects``               -- GNAT
-   ``Unsuppress``
-   ``Value_Size``                         -- GNAT
-   ``Volatile``
-   ``Volatile_Components``
-   ``Warnings``                           -- GNAT
- ==================================== ===========
- 
-   Note that for aspects with an expression, e.g. ``Size``, the expression is
-   treated like a default expression (visibility is analyzed at the point of
-   occurrence of the aspect, but evaluation of the expression occurs at the
-   freeze point of the entity involved).
- 
-   RM References:  3.02.01 (3)   3.02.02 (2)   3.03.01 (2/2)   3.08 (6)
-   3.09.03 (1.1/2)   6.01 (2/2)   6.07 (2/2)   9.05.02 (2/2)   7.01 (3)   7.03
-   (2)   7.03 (3)   9.01 (2/2)   9.01 (3/2)   9.04 (2/2)   9.04 (3/2)
-   9.05.02 (2/2)   11.01 (2)   12.01 (3)   12.03 (2/2)   12.04 (2/2)   12.05 (2)
-   12.06 (2.1/2)   12.06 (2.2/2)   12.07 (2)   13.01 (0.1/2)   13.03 (5/1)
-   13.03.01 (0)
- 
- .. index:: AI-0185 (Ada 2012 feature)
- 
- * *AI-0185 Ada.Wide_[Wide_]Characters.Handling (2010-07-06)*
- 
-   Two new packages ``Ada.Wide_[Wide_]Characters.Handling`` provide
-   classification functions for ``Wide_Character`` and
-   ``Wide_Wide_Character``, as well as providing
-   case folding routines for ``Wide_[Wide_]Character`` and
-   ``Wide_[Wide_]String``.
- 
-   RM References:  A.03.05 (0)   A.03.06 (0)
- 
- .. index:: AI-0188 (Ada 2012 feature)
- 
- * *AI-0188 Case expressions (2010-01-09)*
- 
-   Case expressions are permitted. This allows use of constructs such as:
- 
-   .. code-block:: ada
- 
-       X := (case Y is when 1 => 2, when 2 => 3, when others => 31)
- 
-   RM References:  4.05.07 (0)   4.05.08 (0)   4.09 (12)   4.09 (33)
- 
- .. index:: AI-0189 (Ada 2012 feature)
- 
- * *AI-0189 No_Allocators_After_Elaboration (2010-01-23)*
- 
-   This AI introduces a new restriction ``No_Allocators_After_Elaboration``,
-   which says that no dynamic allocation will occur once elaboration is
-   completed.
-   In general this requires a run-time check, which is not required, and which
-   GNAT does not attempt. But the static cases of allocators in a task body or
-   in the body of the main program are detected and flagged at compile or bind
-   time.
- 
-   RM References:  D.07 (19.1/2)   H.04 (23.3/2)
- 
- .. index:: AI-0190 (Ada 2012 feature)
- 
- * *AI-0190 pragma Default_Storage_Pool (2010-09-15)*
- 
-   This AI introduces a new pragma ``Default_Storage_Pool``, which can be
-   used to control storage pools globally.
-   In particular, you can force every access
-   type that is used for allocation (**new**) to have an explicit storage pool,
-   or you can declare a pool globally to be used for all access types that lack
-   an explicit one.
- 
-   RM References:  D.07 (8)
- 
- .. index:: AI-0193 (Ada 2012 feature)
- 
- * *AI-0193 Alignment of allocators (2010-09-16)*
- 
-   This AI introduces a new attribute ``Max_Alignment_For_Allocation``,
-   analogous to ``Max_Size_In_Storage_Elements``, but for alignment instead
-   of size.
- 
-   RM References:  13.11 (16)   13.11 (21)   13.11.01 (0)   13.11.01 (1)
-   13.11.01 (2)   13.11.01 (3)
- 
- .. index:: AI-0194 (Ada 2012 feature)
- 
- * *AI-0194 Value of Stream_Size attribute (0000-00-00)*
- 
-   The ``Stream_Size`` attribute returns the default number of bits in the
-   stream representation of the given type.
-   This value is not affected by the presence
-   of stream subprogram attributes for the type. GNAT has always implemented
-   this interpretation.
- 
-   RM References:  13.13.02 (1.2/2)
- 
- .. index:: AI-0195 (Ada 2012 feature)
- 
- * *AI-0195 Invalid value handling is implementation defined (2010-07-03)*
- 
-   The handling of invalid values is now designated to be implementation
-   defined. This is a documentation change only, requiring Annex M in the GNAT
-   Reference Manual to document this handling.
-   In GNAT, checks for invalid values are made
-   only when necessary to avoid erroneous behavior. Operations like assignments
-   which cannot cause erroneous behavior ignore the possibility of invalid
-   values and do not do a check. The date given above applies only to the
-   documentation change, this behavior has always been implemented by GNAT.
- 
-   RM References:  13.09.01 (10)
- 
- .. index:: AI-0196 (Ada 2012 feature)
- 
- * *AI-0196 Null exclusion tests for out parameters (0000-00-00)*
- 
-   Null exclusion checks are not made for ``out`` parameters when
-   evaluating the actual parameters. GNAT has never generated these checks.
- 
-   RM References:  6.04.01 (13)
- 
- .. index:: AI-0198 (Ada 2012 feature)
- 
- * *AI-0198 Inheriting abstract operators  (0000-00-00)*
- 
-   This AI resolves a conflict between two rules involving inherited abstract
-   operations and predefined operators. If a derived numeric type inherits
-   an abstract operator, it overrides the predefined one. This interpretation
-   was always the one implemented in GNAT.
- 
-   RM References:  3.09.03 (4/3)
- 
- .. index:: AI-0199 (Ada 2012 feature)
- 
- * *AI-0199 Aggregate with anonymous access components (2010-07-14)*
- 
-   A choice list in a record aggregate can include several components of
-   (distinct) anonymous access types as long as they have matching designated
-   subtypes.
- 
-   RM References:  4.03.01 (16)
- 
- .. index:: AI-0200 (Ada 2012 feature)
- 
- * *AI-0200 Mismatches in formal package declarations (0000-00-00)*
- 
-   This AI plugs a gap in the RM which appeared to allow some obviously intended
-   illegal instantiations. GNAT has never allowed these instantiations.
- 
-   RM References:  12.07 (16)
- 
- .. index:: AI-0201 (Ada 2012 feature)
- 
- * *AI-0201 Independence of atomic object components (2010-07-22)*
- 
-   If an Atomic object has a pragma ``Pack`` or a ``Component_Size``
-   attribute, then individual components may not be addressable by independent
-   tasks. However, if the representation clause has no effect (is confirming),
-   then independence is not compromised. Furthermore, in GNAT, specification of
-   other appropriately addressable component sizes (e.g. 16 for 8-bit
-   characters) also preserves independence. GNAT now gives very clear warnings
-   both for the declaration of such a type, and for any assignment to its components.
- 
-   RM References:  9.10 (1/3)   C.06 (22/2)   C.06 (23/2)
- 
- .. index:: AI-0203 (Ada 2012 feature)
- 
- * *AI-0203 Extended return cannot be abstract (0000-00-00)*
- 
-   A return_subtype_indication cannot denote an abstract subtype. GNAT has never
-   permitted such usage.
- 
-   RM References:  3.09.03 (8/3)
- 
- .. index:: AI-0205 (Ada 2012 feature)
- 
- * *AI-0205 Extended return declares visible name (0000-00-00)*
- 
-   This AI corrects a simple omission in the RM. Return objects have always
-   been visible within an extended return statement.
- 
-   RM References:  8.03 (17)
- 
- .. index:: AI-0206 (Ada 2012 feature)
- 
- * *AI-0206 Remote types packages and preelaborate (2010-07-24)*
- 
-   Remote types packages are now allowed to depend on preelaborated packages.
-   This was formerly considered illegal.
- 
-   RM References:  E.02.02 (6)
- 
- .. index:: AI-0207 (Ada 2012 feature)
- 
- * *AI-0207 Mode conformance and access constant (0000-00-00)*
- 
-   This AI confirms that access_to_constant indication must match for mode
-   conformance. This was implemented in GNAT when the qualifier was originally
-   introduced in Ada 2005.
- 
-   RM References:  6.03.01 (16/2)
- 
- .. index:: AI-0208 (Ada 2012 feature)
- 
- * *AI-0208 Characteristics of incomplete views (0000-00-00)*
- 
-   The wording in the Ada 2005 RM concerning characteristics of incomplete views
-   was incorrect and implied that some programs intended to be legal were now
-   illegal. GNAT had never considered such programs illegal, so it has always
-   implemented the intent of this AI.
- 
-   RM References:  3.10.01 (2.4/2)   3.10.01 (2.6/2)
- 
- .. index:: AI-0210 (Ada 2012 feature)
- 
- * *AI-0210 Correct Timing_Events metric (0000-00-00)*
- 
-   This is a documentation only issue regarding wording of metric requirements,
-   that does not affect the implementation of the compiler.
- 
-   RM References:  D.15 (24/2)
- 
- .. index:: AI-0211 (Ada 2012 feature)
- 
- * *AI-0211 No_Relative_Delays forbids Set_Handler use (2010-07-09)*
- 
-   The restriction ``No_Relative_Delays`` forbids any calls to the subprogram
-   ``Ada.Real_Time.Timing_Events.Set_Handler``.
- 
-   RM References:  D.07 (5)   D.07 (10/2)   D.07 (10.4/2)   D.07 (10.7/2)
- 
- .. index:: AI-0214 (Ada 2012 feature)
- 
- * *AI-0214 Defaulted discriminants for limited tagged (2010-10-01)*
- 
-   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)
- 
- .. index:: AI-0216 (Ada 2012 feature)
- 
- * *AI-0216 No_Task_Hierarchy forbids local tasks (0000-00-00)*
- 
-   It is clearly the intention that ``No_Task_Hierarchy`` is intended to
-   forbid tasks declared locally within subprograms, or functions returning task
-   objects, and that is the implementation that GNAT has always provided.
-   However the language in the RM was not sufficiently clear on this point.
-   Thus this is a documentation change in the RM only.
- 
-   RM References:  D.07 (3/3)
- 
- .. index:: AI-0219 (Ada 2012 feature)
- 
- * *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)
- 
- .. index:: AI-0220 (Ada 2012 feature)
- 
- * *AI-0220 Needed components for aggregates (0000-00-00)*
- 
-   This AI addresses a wording problem in the RM that appears to permit some
-   complex cases of aggregates with nonstatic discriminants. GNAT has always
-   implemented the intended semantics.
- 
-   RM References:  4.03.01 (17)
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_of_ada_2022_features.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_of_ada_2022_features.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/implementation_of_ada_2022_features.rst	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/implementation_of_ada_2022_features.rst	Sun Jul  6 22:32:09 2025
***************
*** 0 ****
--- 1,2249 ----
+ .. _Implementation_of_Ada_2022_Features:
+ 
+ ***********************************
+ Implementation of Ada 2022 Features
+ ***********************************
+ 
+ .. index:: Ada 2022 implementation status
+ 
+ .. index:: -gnat22 option (gcc)
+ 
+ .. index:: pragma Ada_2022
+ 
+ .. index:: configuration pragma Ada_2022
+ 
+ .. index:: Ada_2022 configuration pragma
+ 
+ This chapter contains a complete list of Ada 2022 features that have been
+ implemented. Generally, these features are only available if the *-gnat22* (Ada 2022 features enabled) option is set, or if the configuration pragma ``Ada_2022`` is used.
+ 
+ However, new pragmas, attributes, and restrictions are unconditionally available, since the Ada standard allows the addition of new pragmas, attributes, and restrictions (there are exceptions, which are
+ documented in the individual descriptions), and also certain packages
+ were made available in earlier versions of Ada.
+ 
+ An ISO date (YYYY-MM-DD) appears in parentheses on the description line.
+ This date shows the implementation date of the feature. Any wavefront
+ subsequent to this date will contain the indicated feature, as will any
+ subsequent releases. A date of 0000-00-00 means that GNAT has always
+ 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 2022.
+ 
+ The section "RM references" lists all modified paragraphs in the Ada 2012 reference manual. The details of each modification as well as a complete description of the AIs may be found in
+ http://www.ada-auth.org/AI12-SUMMARY.HTML.
+ 
+ .. index:: AI12-0001 (Ada 2022 feature)
+ 
+ * *AI12-0001 Independence and Representation clauses for atomic objects (2019-11-27)*
+ 
+   The compiler accepts packing clauses in all cases, even if they have effectively no influence on the layout. Types, where packing is essentially infeasible are, for instance atomic, aliased and by-reference types.
+ 
+   RM references: 13.02 (6.1/2) 13.02 (7) 13.02 (8) 13.02 (9/3) C.06 (8.1/3)
+   C.06 (10) C.06 (11) C.06 (21) C.06 (24)
+ 
+ .. index:: AI12-0003 (Ada 2022 feature)
+ 
+ * *AI12-0003 Specifying the standard storage pool (2020-06-25)*
+ 
+   Allows the standard storage pool being specified with a ``Default_Storage_Pool`` pragma or aspect.
+ 
+   RM references: 8.02 (11) 13.11.03 (1/3) 13.11.03 (3.1/3) 13.11.03 (4/3)
+   13.11.03 (4.1/3) 13.11.03 (5/3) 13.11.03 (6.2/3) 13.11.03
+   (6.3/3)
+ 
+ .. index:: AI12-0004 (Ada 2022 feature)
+ 
+ * *AI12-0004 Normalization and allowed characters for identifiers (2020-06-11)*
+ 
+   This AI clarifies that Ada identifiers containing characters which are not
+   allowed in Normalization Form KC are illegal.
+ 
+   RM references: 2.01 (4.1/3) 2.03 (4/3) A.03.02 (4/3) A.03.02 (32.5/3)
+   A.03.05 (18/3) A.03.05 (51/3)
+ 
+ .. index:: AI12-0020 (Ada 2022 feature)
+ 
+ * *AI12-0020 'Image for all types (2020-03-30)*
+ 
+   Put_Image prints out a human-readable representation of an object. The
+   functionality in Ada2022 RM is fully implemented except the support for
+   types in the ``Remote_Types`` packages.
+ 
+   RM references: 4.10 (0) 3.05 (27.1/2) 3.05 (27.2/2) 3.05 (27.3/2) 3.05
+   (27.4/2) 3.05 (27.5/2) 3.05 (27.6/2) 3.05 (27.7/2) 3.05 (28) 3.05
+   (29) 3.05 (30/3) 3.05 (31) 3.05 (32) 3.05 (33/3) 3.05 (37.1/2)
+   3.05 (38) 3.05 (39) 3.05 (43/3) 3.05 (55/3) 3.05 (55.1/5) 3.05
+   (55.2/4) 3.05 (55.3/4) 3.05 (55.4/4) 3.05 (59) H.04 (23) H.04 (23.8/2)
+ 
+ .. index:: AI12-0022 (Ada 2022 feature)
+ 
+ * *AI12-0022 Raise_Expressions (2013-01-27)*
+ 
+   This feature allows you to write "raise NAME [with STRING]" in an
+   expression to rise given exception. It is particularly useful in the case of
+   assertions such as preconditions allowing to specify which exception a
+   precondition raises if it fails.
+ 
+   RM references: 4.04 (3/3) 11.02 (6) 11.03 (2/2) 11.03 (3) 11.03 (3.1/2)
+   11.03 (4/2) 11.04.01 (10.1/3)
+ 
+ .. index:: AI12-0027 (Ada 2022 feature)
+ 
+ * *AI12-0027 Access values should never designate unaliased components (2020-06-15)*
+ 
+   AI12-0027 adds a requirement for a value conversion that converts from an array of unaliased components to an array of aliased components to make a copy. It defines such conversions to have a local accessibility, effectively preventing the possibility of unsafe accesses to unaliased components.
+ 
+   RM references: 4.06 (24.17/3) 4.06 (24.21/2) 4.06 (58) 6.02 (10/3) 3.10.02 (10/3)
+ 
+ .. index:: AI12-0028 (Ada 2022 feature)
+ 
+ * *AI12-0028 Import of variadic C functions (2020-03-03)*
+ 
+   Ada programs can now properly call variadic C functions by means of the
+   conventions C_Variadic_<n>, for small integer values <n>.
+ 
+   RM references: B.03 (1/3) B.03 (60.15/3) B.03 (75)
+ 
+ .. index:: AI12-0030 (Ada 2022 feature)
+ 
+ * *AI12-0030 Formal derived types and stream attribute availability (2020-08-21)*
+ 
+   Corner cases involving streaming operations for formal derived limited types
+   that are now defined to raise Program_Error. Before, behavior in these cases
+   was undefined. Stream attribute availability is more precisely computed in cases where a derived type declaration occurs ahead of a streaming attribute specification for the parent type.
+ 
+   RM references: 12.05.01 (21/3) 13.13.02 (49/2)
+ 
+ .. index:: AI12-0031 (Ada 2022 feature)
+ 
+ * *AI12-0031 All_Calls_Remote and indirect calls (0000-00-00)*
+ 
+   Remote indirect calls (i.e., calls through a remote access-to-subprogram type)
+   behave the same as remote direct calls.
+ 
+   RM references: E.02.03 (19/3)
+ 
+ .. index:: AI12-0032 (Ada 2022 feature)
+ 
+ * *AI12-0032 Questions on 'Old (2020-04-24)*
+ 
+   AI12-0032 resolves several issues related to the 'Old attribute. The GNAT
+   compiler already implemented what the AI requires in most of those cases, but two having to do with static and dynamic checking of the accessibility level of the constant object implicitly declared for an 'Old attribute reference were not yet implemented. Accessibility checking for these constants is now implemented as defined in the AI.
+ 
+   RM references: 4.01.03 (9/3) 6.01.01 (22/3) 6.01.01 (26/3) 6.01.01 (35/3)
+ 
+ .. index:: AI12-0033 (Ada 2022 feature)
+ 
+ * *AI12-0033 Sets of CPUs when defining dispatching domains (0000-00-00)*
+ 
+   The set of CPUs associated with a dispatching domain is no longer required
+   to be a contiguous range of CPU values.
+ 
+   RM references: D.16.01 (7/3) D.16.01 (9/3) D.16.01 (20/3) D.16.01 (23/3)
+   D.16.01 (24/3) D.16.01 (26/3)
+ 
+ .. index:: AI12-0035 (Ada 2022 feature)
+ 
+ * *AI12-0035 Accessibility checks for indefinite elements of containers (0000-00-00)*
+ 
+   If the element type for an instance of one of the indefinite container generics has an access discriminant, then accessibility checks (at run-time) prevent inserting a value into a container object if the value's discriminant designates an object that is too short-lived (that is, if the designated object has an accessibility level that is deeper than that of the instance). Without this check, dangling references would be possible. GNAT handled this correctly already before this AI was issued.
+ 
+   RM references: A.18 (5/3) A.18.11 (8/2) A.18.12 (7/2) A.18.13 (8/2)
+   A.18.14 (8/2) A.18.15 (4/2) A.18.16 (4/2) A.18.17 (7/3) A.18.18
+   (39/3) A.18.18 (47/3)
+ 
+ .. index:: AI12-0036 (Ada 2022 feature)
+ 
+ * *AI12-0036 The actual for an untagged formal derived type cannot be tagged (2019-10-21)*
+ 
+   AI12-0036 is a binding interpretation that adds the following legality rule:
+   The actual type for a formal derived type shall be tagged if and only if the
+   formal derived type is a private extension. The check is implemented for all Ada dialects, not just Ada 2022.
+ 
+   RM references: 12.05.01 (5.1/3)
+ 
+ .. index:: AI12-0037 (Ada 2022 feature)
+ 
+ * *AI12-0037 New types in Ada.Locales can't be converted to/from strings (2016-09-10)*
+ 
+   The type definitions for Language_Code and Country_Code are now using dynamic
+   predicates.
+ 
+   RM references: A.19 (4/3)
+ 
+ .. index:: AI12-0039 (Ada 2022 feature)
+ 
+ * *AI12-0039 Ambiguity in syntax for membership expression removed (0000-00-00)*
+ 
+   An ambiguity in the syntax for membership expressions was resolved. For example, "A in B and C" can be parsed in only one way because of this AI.
+ 
+   RM references: 4.04 (3/3) 4.04 (3.2/3) 4.05.02 (3.1/3) 4.05.02 (4) 4.05.02
+   (4.1/3) 4.05.02 (27/3) 4.05.02 (27.1/3) 4.05.02 (28.1/3) 4.05.02
+   (28.2/3) 4.05.02 (29/3) 4.05.02 (30/3) 4.05.02 (30.1/3) 4.05.02
+   (30.2/3) 4.05.02 (30.3/3) 4.09 (11/3) 4.09 (32.6/3) 8.06 (27.1/3)
+   3.02.04 (17/3)
+ 
+ .. index:: AI12-0040 (Ada 2022 feature)
+ 
+ * *AI12-0040 Resolving the selecting_expression of a case_expression (0000-00-00)*
+ 
+   The definition of "complete context" is corrected so that selectors of case expressions
+   and of case statements are treated uniformly.
+ 
+   RM references: 8.06 (9)
+ 
+ .. index:: AI12-0041 (Ada 2022 feature)
+ 
+ * *AI12-0041 Type_Invariant'Class for interface types (2016-12-12)*
+ 
+   Subprogram calls within class-wide type invariant expressions get resolved
+   as primitive operations instead of being dynamically dispatched.
+ 
+   RM references: 7.03.02 (1/3) 7.03.02 (3/3)
+ 
+ .. index:: AI12-0042 (Ada 2022 feature)
+ 
+ * *AI12-0042 Type invariant checking rules (2020-06-05)*
+ 
+   AI12-0042 adds rules for type invariants.
+   Specifically, when inheriting a private dispatching operation when the ancestor operation is visible at the point of the type extension, the operation must be abstract or else overridden. In addition, for a class-wide view conversion from an object of a specific type T to which a type invariant applies, an invariant check is performed when the conversion is within the immediate scope of T.
+ 
+   RM references: 7.03.02 (6/3) 7.03.02 (17/3) 7.03.02 (18/3) 7.03.02 (19/3)
+   7.03.02 (20/3)
+ 
+ .. index:: AI12-0043 (Ada 2022 feature)
+ 
+ * *AI12-0043 Details of the storage pool used when Storage_Size is specified (0000-00-00)*
+ 
+   Clarify that a Storage_Size specification for an access type specifies both an upper bound and a lower bound (not just a lower bound) of the amount of storage allowed for allocated objects.
+ 
+   RM references: 13.11 (18)
+ 
+ .. index:: AI12-0044 (Ada 2022 feature)
+ 
+ * *AI12-0044 Calling visible functions from type invariant expressions (2020-05-11)*
+ 
+   AI05-0289-1 extends invariant checking to `in` parameters. However, this makes
+   it impossible to call a public function of the type from an invariant
+   expression, as that public function will attempt to check the invariant,
+   resulting in an infinite recursion.
+ 
+   This AI specifies, that type-invariant checking is performed on parameters
+   of mode `in` upon return from procedure calls, but not of `in`-mode
+   parameters in functions.
+ 
+   RM references: 7.03.02 (19/3)
+ 
+ .. index:: AI12-0045 (Ada 2022 feature)
+ 
+ * *AI12-0045 Pre- and Postconditions are allowed on generic subprograms (2015-03-17)*
+ 
+   The SPARK toolset now supports contracts on generic subprograms, packages and
+   their respective bodies.
+ 
+   RM references: 6.01.01 (1/3)
+ 
+ .. index:: AI12-0046 (Ada 2022 feature)
+ 
+ * *AI12-0046 Enforcing legality for anonymous access components in record aggregates (0000-00-00)*
+ 
+   For a record aggregate of the form (X | Y => ....), any relevant legality rules are checked for both for X and Y.
+ 
+   For example,
+ 
+   .. code::
+ 
+       X : aliased constant String := ... ;
+       type R is record
+         F1 : access constant String;
+         F2 : access String;
+       end record;
+       Obj : R := (F1 | F2 => X'Access); -- ok for F1, but illegal for F2
+ 
+   RM references: 4.03.01 (16/3)
+ 
+ .. index:: AI12-0047 (Ada 2022 feature)
+ 
+ * *AI12-0047 Generalized iterators and discriminant-dependent components (0000-00-00)*
+ 
+   Iterating over the elements of an array is subject to the same legality checks as renaming the array. For example, if an assignment to an enclosing discriminated object could cause an array object to cease to exist then we don't allow renaming the array. So it is similarly not allowed to iterate over the elements of such an array.
+ 
+   RM references: 5.05.02 (6/3)
+ 
+ .. index:: AI12-0048 (Ada 2022 feature)
+ 
+ * *AI12-0048 Default behavior of tasks on a multiprocessor with a specified dispatching policy (0000-00-00)*
+ 
+   Clarify that if the user does not impose requirements about what CPUs a given task might execute on, then the implementation does not get to impose such requirements. This avoids potential problems with priority inversion.
+ 
+   RM references: D.16.01 (30/3)
+ 
+ .. index:: AI12-0049 (Ada 2022 feature)
+ 
+ * *AI12-0049 Invariants need to be checked on the initialization of deferred constants (0000-00-00)*
+ 
+   Invariant checking for deferred constants (and subcomponents thereof) is performed. Corrects a clear oversight in the previous RM wording.
+ 
+   RM references: 7.03.02 (10/3)
+ 
+ .. index:: AI12-0050 (Ada 2022 feature)
+ 
+ * *AI12-0050 Conformance of quantified expressions (2016-07-22)*
+ 
+   Compiler rejects a subprogram body when an expression for a boolean formal
+   parameter includes a quantified expression, and the subprogram declaration
+   contains a textual copy of the same.
+ 
+   RM references: 6.03.01 (20) 6.03.01 (21)
+ 
+ .. index:: AI12-0051 (Ada 2022 feature)
+ 
+ * *AI12-0051 The Priority aspect can be specified when Attach_Handler is specified (0000-00-00)*
+ 
+   Previous RM wording had two contradictory rules for determining (in some cases) the priority of a protected subprogram that is attached to an interrupt. The AI clarifies which one of the rules takes precedence.
+ 
+   RM references: D.03 (10/3)
+ 
+ .. index:: AI12-0052 (Ada 2022 feature)
+ 
+ * *AI12-0052 Implicit objects are considered overlapping (0000-00-00)*
+ 
+   Clarify that the rules about unsynchronized concurrent access apply as one would expect in the case of predefined routines that access Text_IO's default input and default output files. There was no compiler changes needed to implement this.
+ 
+   RM references: A (3/2) A.10.03 (21)
+ 
+ .. index:: AI12-0054-2 (Ada 2022 feature)
+ 
+ * *AI12-0054-2 Aspect Predicate_Failure (0000-00-00)*
+ 
+   New aspect Predicate_Failure is defined.  A solution for the problem that a predicate like
+ 
+   ..  code::
+ 
+     subtype Open_File is File with Dynamic_Predicate =\> Is_Open (Open_File) or else (raise File_Not_Open);
+ 
+   does the wrong thing in the case of a membership test.
+ 
+   RM references: 3.02.04 (14/3) 3.02.04 (31/3) 3.02.04 (35/3)
+ 
+ .. index:: AI12-0055 (Ada 2022 feature)
+ 
+ * *AI12-0055 All properties of a usage profile are defined by pragmas (2020-06-09)*
+ 
+   AI12-0055 allows the use of the No_Dynamic_CPU_Assignment restriction in pragmas Restrictions and Restrictions_Warnings.
+ 
+   RM references: D.07 (10/3) D.13 (6/3) D.13 (8/3) D.13 (10/3)
+ 
+ .. index:: AI12-0059 (Ada 2022 feature)
+ 
+ * *AI12-0059 Object_Size attribute (2019-12-02)*
+ 
+   AI12-0059 brings GNAT-defined attribute Object_Size to Ada standard
+   and clarifies its semantics. Given that the attribute already existed in
+   GNAT compiler, the feature is supported for all language versions.
+ 
+   RM references: 4.09.01 (2/3) 13.01 (14) 13.01 (23) 13.03 (9/3) 13.03
+   (50/2) 13.03 (51) 13.03 (52) 13.03 (58)
+ 
+ .. index:: AI12-0061 (Ada 2022 feature)
+ 
+ * *AI12-0061 Iterated component associations in array aggregates (2016-09-01)*
+ 
+   Ada issue AI12-061 introduces a new construct in array aggregates allowing
+   component associations to be parameterized by a loop variable, for example:
+ 
+   .. code::
+ 
+     Array (1 .. 10) of Integer :=
+       (for I in 1 .. 10 => I ** 2);
+     type Matrix is
+     array
+       (Positive range <>, Positive range <>) of Float;
+     G : constant Matrix
+     :=
+       (for I in 1 .. 4 =>
+           (for J in 1 .. 4 =>
+               (if I=J then
+     1.0 else 0.0))); -- Identity matrix
+ 
+   The expression in such an association can also be a function that returns a
+   limited type, and the range can be specified by the 'others' choice.
+ 
+   RM references: 4.03.03 (5/2) 4.03.03 (6) 4.03.03 (17/3) 4.03.03 (20)
+   4.03.03 (23.1/4) 4.03.03 (32/3) 4.03.03 (43) 3.01 (6/3) 3.03 (6)
+   3.03 (18.1/3) 3.03.01 (23/3) 5.05 (6) 8.01 (2.1/4)
+ 
+ .. index:: AI12-0062 (Ada 2022 feature)
+ 
+ * *AI12-0062 Raise exception with failing string function (0000-00-00)*
+ 
+   Clarify that if raising exception E1 is accompanied with a String-valued
+   expression whose evaluation raises exception E2, then E2 is what gets propagated.
+ 
+   RM references: 11.03 (4/2)
+ 
+ .. index:: AI12-0065 (Ada 2022 feature)
+ 
+ * *AI12-0065 Descendants of incomplete views (0000-00-00)*
+ 
+   This AI is a clarification of potentially confusing wording.  GNAT correctly handles the example given in AARM 7.3.1(5.b-5.d), which illustrates the topic of this AI.
+ 
+   RM references: 7.03.01 (5.2/3)
+ 
+ .. index:: AI12-0067 (Ada 2022 feature)
+ 
+ * *AI12-0067 Accessibility level of explicitly aliased parameters of procedures and entries (0000-00-00)*
+ 
+   The AI fixes a case where the intent was fairly obvious but the RM wording failed to mention a case (with the result that the accessibility level of an explicitly aliased parameter of a procedure or entry was undefined even though the intent was clear).
+ 
+   RM references: 3.10.02 (7/3)
+ 
+ .. index:: AI12-0068 (Ada 2022 feature)
+ 
+ * *AI12-0068 Predicates and the current instance of a subtype (2020-05-06)*
+ 
+   AI12-0068 is a binding interpretation that defines the current instance name in a type or subtype aspect to be a value rather than an object. This affects
+   attributes whose prefix is a current instance in predicates, type invariants, and ``Default_Initial_Condition`` aspects. In particular, in the case of the ``Constrained`` attribute the value will always be True, and formerly legal attributes that require an object as their prefix (such as ``Size``, ``Access``, ``Address``, etc.) are illegal when applied to a current instance in type and subtype aspects.
+ 
+   RM references: 8.06 (17/3)
+ 
+ .. index:: AI12-0069 (Ada 2022 feature)
+ 
+ * *AI12-0069 Inconsistency in Tree container definition (0000-00-00)*
+ 
+   The description of how iteration over a Tree container's elements was contradictory in some cases regarding whether a cursor designating the Root node is included in the iteration. This contradiction was resolved. In the "!ACATS Test" section of the AI, it says that if an implementation were to get this wrong then almost any attempt to iterate over any tree would fail at runtime.
+ 
+   RM references: A.18.10 (153/3) A.18.10 (155/3) A.18.10 (157/3) A.18.10 (159/3)
+ 
+ .. index:: AI12-0070 (Ada 2022 feature)
+ 
+ * *AI12-0070 9.3(2) does not work for anonymous access types (0000-00-00)*
+ 
+   The RM contained some old wording about the master of an allocated object that only made sense for named access types. The AI clarifies the wording to clearly state the scope of validity and ensures that the paragraph does not contradict 3.10.2's rules for anonymous access  types.
+ 
+   RM references: 3.10.02 (13.1/3) 9.03 (2)
+ 
+ .. index:: AI12-0071 (Ada 2022 feature)
+ 
+ * *AI12-0071 Order of evaluation when multiple predicates apply (2015-08-10)*
+ 
+   AI12-0071 specifies the semantics of multiple/inherited predicates on a
+   single subtype.
+ 
+   RM references: 3.02.04 (4/3) 3.02.04 (6/3) 3.02.04 (30/3) 3.02.04 (31/3)
+   3.02.04 (32/3) 3.02.04 (33/3) 3.02.04 (35/3) 3.05.05 (7.1/3)
+   3.05.05 (7.2/3) 3.05.05 (7.3/3) 3.08.01 (10.1/3) 3.08.01 (15/3)
+   4.05.02 (29/3) 4.05.02 (30/3) 4.06 (51/3) 4.09.01 (10/3) 5.04
+   (7/3) 5.05 (9/3) 13.09.02 (3/3) 13.09.02 (12)
+ 
+ .. index:: AI12-0072 (Ada 2022 feature)
+ 
+ * *AI12-0072 Missing rules for Discard_Names aspect (0000-00-00)*
+ 
+   Clarify that Discard_Names is an aspect, not just a pragma.
+ 
+   RM references: C.05 (1) C.05 (5) C.05 (7/2) C.05 (8)
+ 
+ .. index:: AI12-0073 (Ada 2022 feature)
+ 
+ * *AI12-0073 Synchronous Barriers are not allowed with Ravenscar (2020-02-24)*
+ 
+   Ada 2022 adds (as a binding interpretation) a ``No_Dependence =>
+   Ada.Synchronous_Barriers`` restriction to the Ravenscar profile.
+ 
+   RM references: D.13 (6/3)
+ 
+ .. index:: AI12-0074 (Ada 2022 feature)
+ 
+ * *AI12-0074 View conversions and out parameters passed by copy (2020-03-26)*
+ 
+   This Ada 2022 AI makes illegal some cases of out parameters whose type has a
+   ``Default_Value`` aspect.
+ 
+   RM references: 4.06 (56) 6.04.01 (6.25/3) 6.04.01 (13.1/3)
+ 
+ .. index:: AI12-0075 (Ada 2022 feature)
+ 
+ * *AI12-0075 Static expression functions (2020-04-13)*
+ 
+   Ada 2022 defines a new aspect ``Static`` that can be specified on expression
+   functions. Such an expression function can be called in contexts requiring static expressions when the actual parameters are all static, allowing for greater abstraction in complex static expressions.
+ 
+   RM references: 4.09 (21) 6.08 (3/4) 6.08 (5/4) 6.08 (6/4) 7.03.02 (8.2/5)
+   7.03.02 (15/4) 7.03.02 (16/4) 7.03.02 (17/4) 7.03.02 (19/4)
+   7.03.02 (20/5)
+ 
+ .. index:: AI12-0076 (Ada 2022 feature)
+ 
+ * *AI12-0076 Variable state in pure packages (0000-00-00)*
+ 
+   Defines an obscure constant-modifying construct to be erroneous. The issue is that the current instance of a type is a variable object, so the following is legal:
+ 
+   .. code::
+ 
+      type T;
+      type T_Ref (Access_To_Variable : access T) is null record;
+      type T is limited record
+         Self : T_Ref (T'Access);
+         Int : Integer;
+      end record;
+ 
+      Obj : constant T := (Self => <>, Int => 123);
+    begin
+      Obj.Self.Access_To_Variable.Int := 456; -- modifying a component of a constant
+ 
+   In cases where constancy is really needed (e.g., for an object declared in a Pure context), such a case needs to be erroneous.
+ 
+   RM references: 10.02.01 (17/3) E.02.02 (17/2)
+ 
+ .. index:: AI12-0077 (Ada 2022 feature)
+ 
+ * *AI12-0077 Has_Same_Storage on objects of size zero (2020-03-30)*
+ 
+   This binding interpretation requires the Has_Same_Storage attribute
+   to return always `false` for objects that have a size of zero.
+ 
+   RM references: 13.03 (73.4/3)
+ 
+ .. index:: AI12-0078 (Ada 2022 feature)
+ 
+ * *AI12-0078 Definition of node for tree container is confusing (0000-00-00)*
+ 
+   Clarifies the expected behavior in processing tree containers.
+ 
+   RM references: A.18.10 (2/3) A.18.10 (3/3)
+ 
+ .. index:: AI12-0081 (Ada 2022 feature)
+ 
+ * *AI12-0081 Real-time aspects need to specify when they are evaluated (0000-00-00)*
+ 
+   Clarify the point at which Priority and Interrupt_Priority aspect expressions are evaluated.
+ 
+   RM references: D.01 (17/3) D.16 (9/3)
+ 
+ .. index:: AI12-0084 (Ada 2022 feature)
+ 
+ * *AI12-0084 Box expressions in array aggregates (2014-12-15)*
+ 
+   This AI addresses an issue where compiler used to fail to initialize
+   components of a multidimensional aggregates with box initialization when
+   scalar components have a specified default value. The AI clarifies that
+   in an array aggregate with box (i.e., ``<>``) component values, the
+   ``Default_Component_Value`` of the array type (if any) should not be ignored.
+ 
+   RM references: 4.03.03 (23.1/2)
+ 
+ .. index:: AI12-0085 (Ada 2022 feature)
+ 
+ * *AI12-0085 Missing aspect cases for Remote_Types (0000-00-00)*
+ 
+   A distributed systems annex (Annex E) clarification. Aspect specifications
+   that are forbidden using attribute definition clause syntax are also forbidden
+   using aspect_specification syntax.
+ 
+   RM references: E.02.02 (17/2)
+ 
+ .. index:: AI12-0086 (Ada 2022 feature)
+ 
+ * *AI12-0086 Aggregates and variant parts (2019-08-14)*
+ 
+   In Ada 2012, a discriminant value that governs an active variant part in an
+   aggregate had to be static. AI12-0086 relaxes this restriction: If the subtype of the discriminant value is a static subtype all of whose values select the same variant, then the expression for the discriminant is allowed to be nonstatic.
+ 
+   RM references: 4.03.01 (17/3) 4.03.01 (19/3)
+ 
+ .. index:: AI12-0088 (Ada 2022 feature)
+ 
+ * *AI12-0088 UTF_Encoding.Conversions and overlong characters on input (0000-00-00)*
+ 
+   Clarify that overlong characters are acceptable on input even if we never generate them as output.
+ 
+   RM references: A.04.11 (54/3) A.04.11 (55/3)
+ 
+ .. index:: AI12-0089 (Ada 2022 feature)
+ 
+ * *AI12-0089 Accessibility rules need to take into account that a generic function is not a (0000-00-00)*
+ 
+   Fix cases in RM wording where the accessibility rules for a function failed to take into account the fact that a generic function is not a function. For example, a generic function with an explicitly aliased parameter should be able to return references to that parameter in the same ways that a (non-generic) function can. The previous wording did not allow that.
+ 
+   RM references: 3.10.02 (7/3) 3.10.02 (19.2/3) 3.10.02 (19.3/3) 6.05 (4/3)
+ 
+ .. index:: AI12-0093 (Ada 2022 feature)
+ 
+ * *AI12-0093 Iterator with indefinite cursor (0000-00-00)*
+ 
+   A clarification that confirms what GNAT is already doing.
+ 
+   RM references: 5.05.02 (8/3) 5.05.02 (10/3)
+ 
+ .. index:: AI12-0094 (Ada 2022 feature)
+ 
+ * *AI12-0094 An access_definition should be a declarative region (0000-00-00)*
+ 
+   Fixes wording omission in the RM, confirming that the behaviour of GNAT is
+   correct.
+ 
+   RM references: 8.03 (2) 8.03 (26/3)
+ 
+ .. index:: AI12-0095 (Ada 2022 feature)
+ 
+ * *AI12-0095 Generic formal types and constrained partial views (0000-00-00)*
+ 
+   Deciding whether an actual parameter corresponding to an explicitly aliased formal parameter is legal depends on (among other things) whether the parameter type has a constrained partial view. The AI clarifies how this compile-time checking works in the case of a generic formal type (assume the best in the spec and recheck each instance, assume the worst in a generic body).
+ 
+   RM references: 3.10.02 (27.2/3) 4.06 (24.16/2) 6.04.01 (6.2/3) 12.05.01 (15)
+ 
+ .. index:: AI12-0096 (Ada 2022 feature)
+ 
+ * *AI12-0096 The exception raised when a subtype conversion fails a predicate check (0000-00-00)*
+ 
+   Clarify that the Predicate_Failure aspect works the same in a subtype conversion as in any other context.
+ 
+   RM references: 4.06 (57/3)
+ 
+ .. index:: AI12-0097 (Ada 2022 feature)
+ 
+ * *AI12-0097 Tag of the return object of a simple return expression (0000-00-00)*
+ 
+   Clarify wording about the tag of a function result in the case of a simple (i.e. not extended) return statement in a function with a class-wide result type.
+ 
+   RM references: 6.05 (8/3)
+ 
+ .. index:: AI12-0098 (Ada 2022 feature)
+ 
+ * *AI12-0098 Problematic examples for ATC (0000-00-00)*
+ 
+   The AI clarifies reference manual examples, there is no compiler impact.
+ 
+   RM references: 9.07.04 (13)
+ 
+ .. index:: AI12-0099 (Ada 2022 feature)
+ 
+ * *AI12-0099 Wording problems with predicates (2020-05-04)*
+ 
+   When extending a task or protected type from an ancestor interface subtype with  a predicate, a link error can occur due to the compiler failing to generate the predicate-checking function. This AI clarifies the requirement for such predicate inheritance for concurrent types.
+ 
+   RM references: 3.02.04 (4/4) 3.02.04 (12/3) 3.02.04 (20/3)
+ 
+ .. index:: AI12-0100 (Ada 2022 feature)
+ 
+ * *AI12-0100 A qualified expression makes a predicate check (2020-02-17)*
+ 
+   The compiler now enforces predicate checks on qualified expressions when the
+   qualifying subtype imposes a predicate.
+ 
+   RM references: 4.07 (4)
+ 
+ .. index:: AI12-0101 (Ada 2022 feature)
+ 
+ * *AI12-0101 Incompatibility of hidden untagged record equality (2019-10-31)*
+ 
+   AI12-0101 is a binding interpretation that removes a legality rule that
+   prohibited the declaration of a primitive equality function for a private type in the private part of its enclosing package (either before or after the completion of the type) when the type is completed as an untagged record type. Such declarations are now accepted in Ada 2012 and later Ada versions.
+ 
+   As a consequence of this work, some cases where the implementation of AI05-0123 was incomplete were corrected.
+   More specifically, if a user-defined equality operator is present for an untagged record type in an Ada 2012 program, that user-defined equality operator will be (correctly) executed in some difficult-to-characterize cases where the predefined component-by-component comparison was previously being (incorrectly) executed. This can arise, for example, in the case of the predefined equality operation for an enclosing composite type that has a component of the user-defined primitive equality op's operand type.
+   This correction means that the impact of this change is not limited solely to code that was previously rejected at compile time.
+ 
+   RM references: 4.05.02 (9.8/3)
+ 
+ .. index:: AI12-0102 (Ada 2022 feature)
+ 
+ * *AI12-0102 Stream_IO.File_Type has Preelaborable_Initialization (0000-00-00)*
+ 
+   Modifies the declaration of one type in a predefined package. GNAT's version of ``Ada.Streams.Stream_IO`` already had this modification (the ``Preelaborable__Initialization`` pragma).
+ 
+   RM references: A.12.01 (5)
+ 
+ .. index:: AI12-0103 (Ada 2022 feature)
+ 
+ * *AI12-0103 Expression functions that are completions in package specifications (0000-00-00)*
+ 
+   Clarifies that expression functions that are completions do not cause "general"  freeze-everybody-in-sight freezing like a subprogram body.
+ 
+   RM references: 13.14 (3/3) 13.14 (5/3)
+ 
+ .. index:: AI12-0104 (Ada 2022 feature)
+ 
+ * *AI12-0104 Overriding an aspect is undefined (0000-00-00)*
+ 
+   A clarification of the wording in RM, no compiler impact.
+ 
+   RM references: 4.01.06 (4/3) 4.01.06 (17/3)
+ 
+ .. index:: AI12-0105 (Ada 2022 feature)
+ 
+ * *AI12-0105 Pre and Post are not allowed on any subprogram completion (0000-00-00)*
+ 
+   Language-defined aspects (e.g., ``Post``) cannot be specified as part of the completion of  a subprogram declaration. Fix a hole in the RM wording to clarify that this general rule applies even in the special cases where the completion is either an expression function or a null procedure.
+ 
+   RM references: 13.01.01 (18/3)
+ 
+ .. index:: AI12-0106 (Ada 2022 feature)
+ 
+ * *AI12-0106 Write'Class aspect (0000-00-00)*
+ 
+   Clarify that the syntax used in an ACATS test BDD2005 for specifying a class-wide streaming aspect is correct.
+ 
+   RM references: 13.01.01 (28/3) 13.13.02 (38/3)
+ 
+ .. index:: AI12-0107 (Ada 2022 feature)
+ 
+ * *AI12-0107 A prefixed view of a By_Protected_Procedure interface has convention protected (2020-06-05)*
+ 
+   A prefixed view of a subprogram with aspect Synchronization set to
+   By_Protected_Procedure has convention protected.
+ 
+   RM references: 6.03.01 (10.1/2) 6.03.01 (12) 6.03.01 (13)
+ 
+ .. index:: AI12-0109 (Ada 2022 feature)
+ 
+ * *AI12-0109 Representation of untagged derived types (2019-11-12)*
+ 
+   Ada disallows a nonconforming specification of a type-related representation
+   aspect of an untagged by-reference type. The motivation for this rule is to ensure that a parent type and a later type derived from the parent agree with respect to such aspects. AI12-0109 disallows a construct that otherwise could be used to get around this rule: an aspect specification for the parent type that occurs after the declaration of the derived type.
+ 
+   RM references: 13.01 (10/3)
+ 
+ .. index:: AI12-0110 (Ada 2022 feature)
+ 
+ * *AI12-0110 Tampering checks are performed first (2020-04-14)*
+ 
+   AI12-0110 requires tampering checks in the containers library to be
+   performed first, before any other checks.
+ 
+   RM references: A.18.02 (97.1/3) A.18.03 (69.1/3) A.18.04 (15.1/3) A.18.07
+   (14.1/3) A.18.10 (90/3) A.18.18 (35/3)
+ 
+ .. index:: AI12-0112 (Ada 2022 feature)
+ 
+ * *AI12-0112 Contracts for container operations (0000-00-00)*
+ 
+   A representation change replacing english descriptions of contracts for
+   operations on predefined container types with pre/post-conditions. No compiler
+   impact.
+ 
+   RM references: A.18.02 (99/3) 11.04.02 (23.1/3) 11.05 (23) 11.05 (26) A
+   (4) A.18 (10)
+ 
+ .. index:: AI12-0114 (Ada 2022 feature)
+ 
+ * *AI12-0114 Overlapping objects designated by access parameters are not thread-safe (0000-00-00)*
+ 
+   There are rules saying that concurrent calls to predefined subprograms don't interfere with each other unless actual parameters overlap. The AI clarifies that such an interference is also possible if overlapping objects are reachable via access dereferencing from actual parameters of the two calls.
+ 
+   RM references: A (3/2)
+ 
+ .. index:: AI12-0116 (Ada 2022 feature)
+ 
+ * *AI12-0116 Private types and predicates (0000-00-00)*
+ 
+   Clarify that the same aspect cannot be specified twice for the same type. ``Dynamic_Predicate``, for example, can be specified on either the partial view of a type or on the completion in the private part, but not on both.
+ 
+   RM references: 13.01 (9/3) 13.01 (9.1/3)
+ 
+ .. index:: AI12-0117 (Ada 2022 feature)
+ 
+ * *AI12-0117 Restriction No_Tasks_Unassigned_To_CPU (2020-06-12)*
+ 
+   This AI adds a restriction No_Tasks_Unassigned_To_CPU to provide safe
+   use of Ravenscar.
+ 
+   The CPU aspect is specified for the environment task. No CPU aspect is
+   specified to be statically equal to ``Not_A_Specific_CPU``. If aspect CPU
+   is specified (dynamically) to the value ``Not_A_Specific_CPU``, then
+   Program_Error is raised. If Set_CPU or ``Delay_Until_And_Set_CPU`` are called
+   with the CPU parameter equal to ``Not_A_Specific_CPU``, then ``Program_Error`` is raised.
+ 
+   RM references: D.07 (10.8/3)
+ 
+ .. index:: AI12-0120 (Ada 2022 feature)
+ 
+ * *AI12-0120 Legality and exceptions of generalized loop iteration (0000-00-00)*
+ 
+   Clarify that the expansion-based definition of generalized loop iteration
+   includes legality checking. If the expansion would be illegal (for example,
+   because of passing a constant actual parameter in a call when the mode of
+   the corresponding formal parameter is in-out), then the loop is illegal too.
+ 
+   RM references: 5.05.02 (6.1/4) 5.05.02 (10/3) 5.05.02 (13/3)
+ 
+ .. index:: AI12-0121 (Ada 2022 feature)
+ 
+ * *AI12-0121 Stream-oriented aspects (0000-00-00)*
+ 
+   Clarify that streaming-oriented aspects (e.g., Read) can be specified using
+   aspect_specification syntax, not just via an attribute definition clause.
+ 
+   RM references: 13.13.02 (38/3)
+ 
+ .. index:: AI12-0124 (Ada 2022 feature)
+ 
+ * *AI12-0124 Add Object'Image (2017-03-24)*
+ 
+   The corrigendum of Ada 2012 extends attribute ``'Image following`` the syntax for the GNAT ``'Img`` attribute. This AI fixes a gap in the earlier implementation, which did not recognize function calls and attributes that are functions as valid object prefixes.
+ 
+   RM references: 3.05 (55/3)
+ 
+ .. index:: AI12-0125-3 (Ada 2022 feature)
+ 
+ * *AI12-0125-3 Add @ as an abbreviation for the LHS of an assignment (2016-11-11)*
+ 
+   This AI introduces the use of the character '@' as an abbreviation for the left-hand side of an assignment statement, usable anywhere within the expression on the right-hand side. To use this feature the compilation flag -gnat2022 must be specified.
+ 
+   RM references: 5.02.01 (0) 2.02 (9) 3.03 (21.1/3) 4.01 (2/3) 8.06 (9/4)
+ 
+ .. index:: AI12-0127 (Ada 2022 feature)
+ 
+ * *AI12-0127 Partial aggregate notation (2016-10-12)*
+ 
+   This AI describes a new constructor for aggregates, in terms of an existing record or array object, and a series of component-wise modifications of its value, given by named associations for the modified components. To use this feature the compilation flag ``-gnat2022`` must be specified.
+ 
+   RM references: 4.03 (2) 4.03 (3/2) 4.03 (4) 4.03.01 (9) 4.03.01 (15/3)
+   4.03.01 (16/4) 4.03.01 (17/5) 4.03.01 (17.1/2) 4.03.03 (4) 4.03.03
+   (14) 4.03.03 (17/5) 4.03.04 (0) 7.05 (2.6/2)
+ 
+ .. index:: AI12-0128 (Ada 2022 feature)
+ 
+ * *AI12-0128 Exact size access to parts of composite atomic objects (2019-11-24)*
+ 
+   According to this AI, the compiler generates full access to atomic composite objects even if the access is only partial in the source code. To use this feature the compilation flag ``-gnat2022`` must be specified.
+ 
+   RM references: C.06 (13.2/3) C.06 (19) C.06 (20) C.06 (22/2) C.06 (25/4)
+ 
+ .. index:: AI12-0129 (Ada 2022 feature)
+ 
+ * *AI12-0129 Make protected objects more protecting (2020-07-01)*
+ 
+   A new aspect Exclusive_Functions has been added to the language to force the
+   use of read/write locks on protected functions when needed.
+ 
+   RM references: 9.05.01 (2) 9.05.01 (4) 9.05.01 (5) 9.05.01 (7) 9.05.03
+   (15) 9.05.03 (23)
+ 
+ .. index:: AI12-0130 (Ada 2022 feature)
+ 
+ * *AI12-0130 All I/O packages should have Flush (2016-07-03)*
+ 
+   The Flush routine has been added for the ``Sequential_IO`` and ``Direct_IO`` standard packages in the Ada 2012 COR.1:2016. The Flush routine here is equivalent to the one found in ``Text_IO``. The ``Flush`` procedure synchronizes the external file with the internal file (by flushing any internal buffers) without closing the file.
+ 
+   RM references: A.08.01 (10) A.08.02 (28/3) A.08.04 (10) A.10.03 (21)
+   A.12.01 (28/2) A.12.01 (28.6/1)
+ 
+ .. index:: AI12-0131 (Ada 2022 feature)
+ 
+ * *AI12-0131 Inherited Pre'Class when unspecified on initial subprogram (0000-00-00)*
+ 
+   If T1 is a tagged type with a primitive P that has no class-wide precondition,
+   and if T2 is an extension of T1 which overrides the inherited primitive P, then that overriding P is not allowed to have a class-wide precondition. Allowing it would be ineffective except in corner cases where it would be confusing.
+ 
+   RM references: 6.01.01 (17/3) 6.01.01 (18/3)
+ 
+ .. index:: AI12-0132 (Ada 2022 feature)
+ 
+ * *AI12-0132 Freezing of renames-as-body (2020-06-13)*
+ 
+   This AI clarifies that a renames-as-body freezes the expression of any
+   expression function that it renames.
+ 
+   RM references: 13.14 (5/3)
+ 
+ .. index:: AI12-0133 (Ada 2022 feature)
+ 
+ * *AI12-0133 Type invariants and default initialized objects (0000-00-00)*
+ 
+   Clarify that invariant checking for a default-initialized object is performed regardless of where the object is declared (in particular, even when the full view of the type is visible).
+ 
+   RM references: 7.03.02 (10.3/3)
+ 
+ .. index:: AI12-0135 (Ada 2022 feature)
+ 
+ * *AI12-0135 Enumeration types should be eligible for convention C (0000-00-00)*
+ 
+   Ada previously allowed but did not require supporting specifying convention C for an enumeration type. Now it is required that an implementation shall support it.
+ 
+   RM references: B.01 (14/3) B.01 (41/3) B.03 (65)
+ 
+ .. index:: AI12-0136 (Ada 2022 feature)
+ 
+ * *AI12-0136 Language-defined packages and aspect Default_Storage_Pool (0000-00-00)*
+ 
+   Clarify that the effect of specifying Default_Storage_Pool for an instance of a predefined generic is implementation-defined. No compiler impact.
+ 
+   RM references: 13.11.03 (5/3)
+ 
+ .. index:: AI12-0137 (Ada 2022 feature)
+ 
+ * *AI12-0137 Incomplete views and access to class-wide types (0000-00-00)*
+ 
+   If the designated type of an access type is incomplete when the access type is declared, then we have rules about whether we get a complete view when a value of the access type is dereferenced. Clarify that analogous rules apply if the designated type is class-wide.
+ 
+   RM references: 3.10.01 (2.1/2)
+ 
+ .. index:: AI12-0138 (Ada 2022 feature)
+ 
+ * *AI12-0138 Iterators of formal derived types (2021-02-11)*
+ 
+   AI12-0138 specifies the legality rules for confirming specifications of
+   nonoverridable aspects. This completes the legality checks for aspect ``Implicit_Dereference`` and simplifies the checks for those aspects that are inherited operations.
+ 
+   RM references: 13.01.01 (18/4) 13.01.01 (34/3) 4.01.05 (6/3) 4.01.06 (5/3)
+   4.01.06 (6/3) 4.01.06 (7/3) 4.01.06 (8/3) 4.01.06 (9/3) 5.05.01 (11/3)
+ 
+ .. index:: AI12-0140 (Ada 2022 feature)
+ 
+ * *AI12-0140 Access to unconstrained partial view when full view is constrained (0000-00-00)*
+ 
+   Clarify some confusion about about whether what matters when checking whether designated subtypes statically match is the view of the designated type that is currently available v.s. the view that was available when the access type was declared.
+ 
+   RM references: 3.02 (7/2) 7.03.01 (5/1)
+ 
+ .. index:: AI12-0143 (Ada 2022 feature)
+ 
+ * *AI12-0143 Using an entry index of a family in a precondition (2022-04-05)*
+ 
+   Ada 2022 adds the ``Index`` attribute, which allows the use of the entry family index of an entry call within preconditions and post-conditions.
+ 
+   RM references: 6.01.01 (30/3) 9.05.04 (5/3)
+ 
+ .. index:: AI12-0144 (Ada 2022 feature)
+ 
+ * *AI12-0144 Make Discrete_Random more flexible (2020-01-31)*
+ 
+   A new function Random with First/Last parameters is provided in the
+   ``Ada.Numerics.Discrete_Random`` package.
+ 
+   RM references: A.05.02 (20) A.05.02 (32) A.05.02 (41) A.05.02 (42)
+ 
+ .. index:: AI12-0145 (Ada 2022 feature)
+ 
+ * *AI12-0145 Pool_of_Subpool returns null when called too early (0000-00-00)*
+ 
+   Clarify that if you ask for the pool of a subpool (by calling ``Pool_Of_Subpool``) before ``Set_Pool_of_Subpool`` is called, then the result is null.
+ 
+   RM references: 13.11.04 (20/3)
+ 
+ .. index:: AI12-0147 (Ada 2022 feature)
+ 
+ * *AI12-0147 Expression functions and null procedures can be declared in a protected_body (2015-03-05)*
+ 
+   AI12-0147 specifies that null procedures and expression functions are now
+   allowed in protected bodies.
+ 
+   RM references: 9.04 (8/1)
+ 
+ .. index:: AI12-0149 (Ada 2022 feature)
+ 
+ * *AI12-0149 Type invariants are checked for functions returning access-to-type (0000-00-00)*
+ 
+   Extend the rule saying that ``Type_Invariant`` checks are performed for access-to-T parameters (where T has a specified ``Type_Invariant``) so that the rule also applies to function results.
+ 
+   RM references: 7.03.02 (19.3/4)
+ 
+ .. index:: AI12-0150 (Ada 2022 feature)
+ 
+ * *AI12-0150 Class-wide type invariants and statically bound calls (0000-00-00)*
+ 
+   The same approach used in AI12-0113 to ensure that contract-related calls associated with a call to a subprogram "match" with respect to dispatching also applies to ``Type_Invariant`` checking.
+ 
+   RM references: 7.03.02 (3/3) 7.03.02 (5/3) 7.03.02 (9/3) 7.03.02 (22/3)
+ 
+ .. index:: AI12-0154 (Ada 2022 feature)
+ 
+ * *AI12-0154 Aspects of library units (0000-00-00)*
+ 
+   Clarify that an aspect_specification for a library unit is equivalent to a corresponding aspect-specifying pragma.
+ 
+   RM references: 13.01.01 (32/3)
+ 
+ .. index:: AI12-0156 (Ada 2022 feature)
+ 
+ * *AI12-0156 Use subtype_indication in generalized iterators (0000-00-00)*
+ 
+   For iterating over an array, we already allow (but do not require) explicitly providing a subtype indication in an iterator_specification. Tee AI generalizes this to handle the case where the element type of the array is of an anonymous access type. This also allows (but does not require) explicitly naming the cursor subtype in a generalized iterator.
+   The main motivation for allowing these new cases is improving readability by making it easy to infer the (sub)type of the iteration object just by looking at the loop.
+ 
+   RM references: 5.05.02 (2/3) 5.05.02 (5/4) 5.05.02 (7/3) 3.10.02 (11.1/2)
+ 
+ .. index:: AI12-0157 (Ada 2022 feature)
+ 
+ * *AI12-0157 Missing rules for expression functions (0000-00-00)*
+ 
+   Clarify that an expression function behaves like a single-return-statement
+   function in more cases: it can return an aggregate without extra parens, the expression has an applicable index constraint, and the same accessibility rules apply in both cases.
+ 
+   For instance, the code below is legal:
+ 
+   .. code::
+ 
+     subtype S is String (1 .. 10);
+     function f return S is (others => '?');
+ 
+   RM references: 3.10.02 (19.2/4) 3.10.02 (19.3/4) 4.03.03 (11/2) 6.08 (2/3)
+   6.08 (3/3) 6.08 (5/3) 6.08 (6/3) 6.08 (7/3) 7.05 (2.9/3) 13.14
+   (5.1/4) 13.14 (5.2/4) 13.14 (8/3) 13.14 (10.1/3) 13.14 (10.2/3)
+   13.14 (10.3/3)
+ 
+ .. index:: AI12-0160 (Ada 2022 feature)
+ 
+ * *AI12-0160 Adding an indexing aspect to an indexable container type (0000-00-00)*
+ 
+   If the parent type of a derived type has exactly one of the two indexing aspects (that is, constant_indexing and variable_indexing) specified, then the derived type cannot have a specification for the other one.
+ 
+   RM references: 4.01.06 (6/4) 4.01.06 (9/4) 3.06 (22.2/3)
+ 
+ .. index:: AI12-0162 (Ada 2022 feature)
+ 
+ * *AI12-0162 Memberships and Unchecked_Unions (0000-00-00)*
+ 
+   Clarify that membership tests for unchecked_union types work consistently when
+   testing membership in more than one subtype (X in AA | BB | CC)  as when
+   testing for one.
+ 
+   RM references: B.03.03 (25/2)
+ 
+ .. index:: AI12-0164 (Ada 2022 feature)
+ 
+ * *AI12-0164 Max_Entry_Queue_Length aspect for entries (2019-06-11)*
+ 
+   AI12-0164 defines pragma and aspect ``Max_Entry_Queue_Length`` in addition
+   to the GNAT-specific equivalents ``Max_Queue_Length`` and ``Max_Entry_Queue_Depth``.
+ 
+   RM references: D.04 (16)
+ 
+ .. index:: AI12-0165 (Ada 2022 feature)
+ 
+ * *AI12-0165 Operations of class-wide types and formal abstract subprograms (2021-10-19)*
+ 
+   Ada 2022 specifies that when the controlling type of a formal abstract
+   subprogram declaration is a formal type, and the actual type is a class-wide type T'Class, the actual subprogram can be an implicitly declared subprogram corresponding to a primitive operation of type T.
+ 
+   RM references: 12.06 (8.5/2)
+ 
+ .. index:: AI12-0166 (Ada 2022 feature)
+ 
+ * *AI12-0166 External calls to protected functions that appear to be internal calls (2016-11-15)*
+ 
+   According to this AI, the compiler rejects a call to a protected operation when the call appears within a precondition for another protected operation.
+ 
+   RM references: 6.01.01 (34/3) 9.05 (3/3) 9.05 (7.1/3)
+ 
+ .. index:: AI12-0167 (Ada 2022 feature)
+ 
+ * *AI12-0167 Type_Invariants and tagged-type View Conversions (0000-00-00)*
+ 
+   This AI clarifies that no invariant check is performed in a case where an invariant-violating value is assigned to a component. This confirms the current compiler behavior.
+ 
+   RM references: 7.03.02 (9/4)
+ 
+ .. index:: AI12-0168 (Ada 2022 feature)
+ 
+ * *AI12-0168 Freezing of generic instantiations of generics with bodies (0000-00-00)*
+ 
+   Adjust freezing rules to be compatible with AI12-0103-1. The change confirms the current compiler behavior.
+ 
+   RM references: 13.14 (3/4)
+ 
+ .. index:: AI12-0169 (Ada 2022 feature)
+ 
+ * *AI12-0169 Aspect specifications for entry bodies (0000-00-00)*
+ 
+   Change syntax to allow aspect specifications for implementation-defined aspects on entry bodies. The change doesn't influence any of the language-defined aspects and is solely required for SPARK.
+ 
+   RM references: 9.05.02 (5)
+ 
+ .. index:: AI12-0170 (Ada 2022 feature)
+ 
+ * *AI12-0170 Abstract subprogram calls in class-wide precondition expressions (2020-07-06)*
+ 
+   This AI specifies rules for calls to abstract functions within class-wide preconditions and postconditions.
+ 
+   RM references: 3.09.03 (7) 6.01.01 (7/4) 6.01.01 (18/4) 6.01.01 (18.2/4)
+ 
+ .. index:: AI12-0172 (Ada 2022 feature)
+ 
+ * *AI12-0172 Raise expressions in limited contexts (2019-07-29)*
+ 
+   The compiler has been enhanced to support the use of raise expressions in
+   limited contexts.
+ 
+   RM references: 7.05 (2.1/3)
+ 
+ .. index:: AI12-0173 (Ada 2022 feature)
+ 
+ * *AI12-0173 Expression of an extended return statement (0000-00-00)*
+ 
+   Fix the wording related to expression of an extended return statement that was made ambiguous by changes of syntax in other AI's. No compiler changes involved.
+ 
+   RM references: 6.05 (3/2) 6.05 (5/3)
+ 
+ .. index:: AI12-0174 (Ada 2022 feature)
+ 
+ * *AI12-0174 Aggregates of Unchecked_Unions using named notation (0000-00-00)*
+ 
+   In many cases, it is illegal to name a discriminant of an unchecked_union type.  Relax this rule to allow the use of named notation in an aggregate of an unchecked_union type.
+ 
+   RM references: B.03.03 (9/3)
+ 
+ .. index:: AI12-0175 (Ada 2022 feature)
+ 
+ * *AI12-0175 Preelaborable packages with address clauses (2020-03-20)*
+ 
+   The compiler nows accepts calls to certain functions that are essentially unchecked conversions in preelaborated library units. To use this feature the compilation flag ``-gnat2022`` must be specified.
+ 
+   RM references: 10.02.01 (7)
+ 
+ .. index:: AI12-0179 (Ada 2022 feature)
+ 
+ * *AI12-0179 Failure of postconditions of language-defined units (0000-00-00)*
+ 
+   A clarification that expressing postconditions for predefined units via RM wording or via ``Post`` aspect specifications are equivalent. In particular, the expression in such a ``Post`` aspect specification should not yield False. No implementation changes needed.
+ 
+   RM references: 1.01.03 (17/3) 11.04.02 (23.1/3)
+ 
+ .. index:: AI12-0180 (Ada 2022 feature)
+ 
+ * *AI12-0180 Using protected subprograms and entries within an invariant (2020-06-22)*
+ 
+   AI12-0180 makes entries and protected subprograms directly visible within Invariant aspects of a task or protected type.
+ 
+   RM references: 13.01.01 (12/3)
+ 
+ .. index:: AI12-0181 (Ada 2022 feature)
+ 
+ * *AI12-0181 Self-referencing representation aspects (0000-00-00)*
+ 
+   Clarify that a name or expression which freezes an entity cannot occur in an aspect specification for that entity.
+ 
+   RM references: 13.01 (9/4) 13.01 (9.1/4) 13.14 (19)
+ 
+ .. index:: AI12-0182 (Ada 2022 feature)
+ 
+ * *AI12-0182 Pre'Class and protected operations (0000-00-00)*
+ 
+   Confirm that Pre'Class and Post'Class cannot be specified for a protected operation. No language change.
+ 
+   RM references: 13.01.01 (16/3)
+ 
+ .. index:: AI12-0184 (Ada 2022 feature)
+ 
+ * *AI12-0184 Long Long C Data Types (2020-01-30)*
+ 
+   Two new types ``long_long`` and ``unsigned_long_long`` are introduced in the package ``Interfaces.C``.
+ 
+   RM references: B.03 (71.3/3)
+ 
+ .. index:: AI12-0185 (Ada 2022 feature)
+ 
+ * *AI12-0185 Resolution of postcondition-specific attributes (0000-00-00)*
+ 
+   Clarify resolution rules for ``'Old`` and ``'Result`` attribute references to match original intent.
+ 
+   RM references: 6.01.01 (7/4) 6.01.01 (8/3) 6.01.01 (26.10/4) 6.01.01 (29/3)
+ 
+ .. index:: AI12-0186 (Ada 2022 feature)
+ 
+ * *AI12-0186 Profile freezing for the Access attribute (0000-00-00)*
+ 
+   Clarify that the use of Some_Subprogram'Access does not freeze the profile of Some_Subprogram.
+ 
+   RM references: 13.14 (15)
+ 
+ .. index:: AI12-0187 (Ada 2022 feature)
+ 
+ * *AI12-0187 Stable properties of abstract data types (2020-11-04)*
+ 
+   Ada 2022 defines a new aspect, ``Stable_Properties``, for use in
+   generating additional postcondition checks for subprograms.
+ 
+   RM references: 7.03.04 (0) 13.01.01 (4/3)
+ 
+ .. index:: AI12-0191 (Ada 2022 feature)
+ 
+ * *AI12-0191 Clarify "part" for type invariants (0000-00-00)*
+ 
+   Clarify that for purposes of determining whether an invariant check is required for a "part" of an object, we do not look at "parts" which do not correspond to "parts" of the nominal type of the object. For example, if we have a parameter Param of a tagged type T1 (or equivalently of type T1'Class), and type T2 is an extension of T1 which declares a component Foo, and T1'Class (Param)'Tag = T2'Tag, then no invariant check is performed for Param's Foo component (or any subcomponent thereof).
+ 
+   RM references: 3.03 (23/5) 3.09.01 (4.1/2) 6.08 (5.8/5) 7.03.02 (8.3/5)
+   7.03.02 (8.4/5) 7.03.02 (8.5/5) 7.03.02 (8.6/5) 7.03.02 (8.7/5)
+   7.03.02 (8.8/5) 7.03.02 (8.9/5) 7.03.02 (8.10/5) 7.03.02 (8.11/5)
+   7.03.02 (8.12/5) 7.03.02 (10.1/4) 7.03.02 (15/5) 7.03.02 (17/4)
+   7.03.02 (18/4) 7.03.02 (19/4) 13.13.02 (9/3)
+ 
+ .. index:: AI12-0192 (Ada 2022 feature)
+ 
+ * *AI12-0192 "requires late initialization" and protected types (2020-03-11)*
+ 
+   This AI clarifies that components of a protected type require late initialization when their initialization references (implicitly) the current instance of the type.
+ 
+   RM references: 3.03.01 (8.1/2)
+ 
+ .. index:: AI12-0194 (Ada 2022 feature)
+ 
+ * *AI12-0194 Language-defined aspects and entry bodies (0000-00-00)*
+ 
+   The AI Includes entry bodies on the list of bodies for which no language-defined aspects can be specified (although specifying an implementation-defined aspect may be allowed).
+ 
+   A wording change, no implementation impact.
+ 
+   RM references: 13.01.01 (17/3)
+ 
+ .. index:: AI12-0195 (Ada 2022 feature)
+ 
+ * *AI12-0195 Inheriting body but overriding precondition or postcondition (2021-08-11)*
+ 
+   Ada 2022 specifies that if a primitive with a class-wide precondition or
+   postcondition is inherited, and some primitive function called in the class-wide precondition or postcondition is overridden, then a dispatching call to the first primitive with a controlling operand that has the tag of the overriding type is required to check both the interpretation using the overriding function and the interpretation using the original overridden function.
+ 
+   RM references: 6.01.01 (38/4)
+ 
+ .. index:: AI12-0196 (Ada 2022 feature)
+ 
+ * *AI12-0196 Concurrent access to Ada container libraries (0000-00-00)*
+ 
+   Clarify that parallel execution of operations which use cursors to refer to different elements of the same container does not violate the rules about erroneous concurrent access in some cases. That is, if C1 and C2 are cursors that refer to different elements of some container, then it is ok to concurrently execute an operation that is passed C1 and which accesses one element of the container, with another operation (perhaps the same operation, perhaps not) that is passed C2 and which accesses another element of the container.
+ 
+   RM references: A.18 (2/2) A.18.02 (125/2) A.18.02 (133/3) A.18.02 (135/3)
+   A.18.03 (81/3) A.18.04 (36/3) A.18.07 (34/2) A.18.10 (116/3)
+ 
+ .. index:: AI12-0198 (Ada 2022 feature)
+ 
+ * *AI12-0198 Potentially unevaluated components of array aggregates (2020-05-13)*
+ 
+   Ada 2022 enforces the detection of components that belong to a nonstatic or
+   null range of index values of an array aggregate.
+ 
+   RM references: 6.01.01 (22.1/4)
+ 
+ .. index:: AI12-0199 (Ada 2022 feature)
+ 
+ * *AI12-0199 Abstract subprogram calls in class-wide invariant expressions (0000-00-00)*
+ 
+   Class-wide type invariants do not apply to abstract types, to avoid various
+   problems. Define the notion of a "corresponding expression" for a class-wide
+   type invariant, replacing references to components as appropriate, taking into
+   account rules for corresponding and specified discriminants when applying them
+   to a nonabstract descendant.
+ 
+   RM references: 7.03.02 (5/4) 7.03.02 (8/3)
+ 
+ .. index:: AI12-0201 (Ada 2022 feature)
+ 
+ * *AI12-0201 Missing operations of static string types (2020-02-25)*
+ 
+   Relational operators and type conversions of static string types are now static in Ada 2022.
+ 
+   RM references: 4.09 (9) 4.09 (19) 4.09 (20) 4.09 (24)
+ 
+ .. index:: AI12-0203 (Ada 2022 feature)
+ 
+ * *AI12-0203 Overriding a nonoverridable aspect (0000-00-00)*
+ 
+   A corner case wording clarification that has no impact on compilers.
+ 
+   RM references: 4.01.05 (5.1/4) 4.01.05 (7/3)
+ 
+ .. index:: AI12-0204 (Ada 2022 feature)
+ 
+ * *AI12-0204 Renaming of a prefixed view (2020-02-24)*
+ 
+   AI12-0204 clarifies that the prefix of a prefixed view that is renamed or
+   passed as a formal subprogram must be renameable as an object.
+ 
+   RM references: 8.05.04 (5.2/2) 12.06 (8.3/2) 4.01.03 (13.1/2) 4.01.06 (9/5)
+ 
+ .. index:: AI12-0205 (Ada 2022 feature)
+ 
+ * *AI12-0205 Defaults for generic formal types (2021-04-01)*
+ 
+   AI12-0205 specifies syntax and semantics that provide defaults for formal types of generic units. The legality rules guarantee that the default subtype_mark that is specified for a formal type would be a legal actual in any instantiation of the generic unit.
+ 
+   RM references: 12.03 (7/3) 12.03 (10) 12.05 (2.1/3) 12.05 (2.2/3) 12.05 (7/2)
+ 
+ .. index:: AI12-0206 (Ada 2022 feature)
+ 
+ * *AI12-0206 Nonoverridable should allow arbitrary kinds of aspects (0000-00-00)*
+ 
+   A non-overridable aspect can have a value other than a name; for example, ``Max_Entry_Queue_Length`` is non-overridable and it has a scalar value.
+   Part of adding support for ``Max_Entry_Queue_Length`` (which is already supported by GNAT).
+ 
+   RM references: 13.01.01 (18.2/4) 13.01.01 (18.3/4) 13.01.01 (18.6/4)
+ 
+ .. index:: AI12-0207 (Ada 2022 feature)
+ 
+ * *AI12-0207 Convention of anonymous access types (2020-02-01)*
+ 
+   The convention of anonymous access elements of arrays now have the same convention as the array instead of convention Ada.
+ 
+   RM references: 6.03.01 (13.1/3) B.01 (19) B.01 (21/3)
+ 
+ .. index:: AI12-0208 (Ada 2022 feature)
+ 
+ * *AI12-0208 Predefined Big numbers support (0000-00-00)*
+ 
+   Add predefined package ``Ada.Numerics.Big_Numbers``.
+ 
+   RM references: A.05.05 (0) A.05.06 (0) A.05.07 (0)
+ 
+ .. index:: AI12-0211 (Ada 2022 feature)
+ 
+ * *AI12-0211 Interface types and inherited nonoverridable aspects (2020-08-24)*
+ 
+   AI12-0211 introduces two new legality rules for Ada 2022. The first says that
+   if a nonoverridable aspect is explicitly specified for a type that also inherits that aspect from another type (an ancestor or a progenitor), then the explicit aspect specification shall be confirming. The second says that if a type inherits a nonoverridable aspect from two different sources (this can only occur if at least one of the two is an interface type), then the two sources shall agree with respect to the given aspect. This AI is a binding interpretation, so these checks are performed even for earlier Ada versions. Because of compatibility concerns, an escape mechanism for suppressing these legality checks is provided: these new checks always pass if the ``-gnatd.M`` switch (relaxed RM semantics) is specified.
+ 
+   RM references: 13.01.01 (18.3/5) 13.01.01 (18.4/4)
+ 
+ .. index:: AI12-0212 (Ada 2022 feature)
+ 
+ * *AI12-0212 Container aggregates; generalized array aggregates (0000-00-00)*
+ 
+   The AI defines a new feature: generalized array aggregates that already exists in GNAT.
+ 
+   RM references: 4.03.05 (0) 1.01.04 (12) 1.01.04 (13) 2.01 (15) 2.02 (9/5)
+   3.07.01 (3) 3.08.01 (4) 4.03 (2/5) 4.03 (3/5) 4.03.01 (5) 4.03.03
+   (3/2) 4.03.03 (4/5) 4.03.03 (5.1/5) 4.03.03 (9) 4.03.03 (17/5)
+   4.03.03 (21) 4.03.03 (23.2/5) 4.03.03 (26) 4.03.03 (27) 4.03.03
+   (31) 4.03.04 (4/5) 4.04 (3.1/3) 11.02 (3) 13.01.01 (5/3)
+   13.01.01 (7/3) A.18.02 (8/3) A.18.02 (14/2) A.18.02 (47/2) A.18.02
+   (175/2) A.18.03 (6/3) A.18.05 (3/3) A.18.06 (4/3) A.18.08 (3/3)
+   A.18.09 (4/3)
+ 
+ .. index:: AI12-0216 (Ada 2022 feature)
+ 
+ * *AI12-0216 6.4.1(6.16-17/3) should never apply to composite objects (0000-00-00)*
+ 
+   Fix wording so that parameter passing cases where there isn't really any aliasing problems or evaluation order dependency are classified as acceptable.
+ 
+   No compiler impact.
+ 
+   RM references: 6.04.01 (6.17/3)
+ 
+ .. index:: AI12-0217 (Ada 2022 feature)
+ 
+ * *AI12-0217 Rules regarding restrictions on the use of the Old attribute are too strict (2020-03-25)*
+ 
+   AI12-0217 loosens the rules regarding what is allowed as the prefix of a 'Old
+   attribute reference. In particular, a prefix is now only required to "statically name" (as opposed to the previous "statically denote") an object. This means that components of composite objects that previously would have been illegal are now legal prefixes.
+ 
+   RM references: 6.01.01 (24/3) 6.01.01 (27/3)
+ 
+ .. index:: AI12-0220 (Ada 2022 feature)
+ 
+ * *AI12-0220 Pre/Post for access-to-subprogram types (2020-04-14)*
+ 
+   Contract aspects can now be specified for access-to-subprogram types, as
+   defined for Ada 2022 in this AI.
+ 
+   RM references: 6.01.01 (1/4) 6.01.01 (2/3) 6.01.01 (4/3) 6.01.01 (19/3)
+   6.01.01 (28/3) 6.01.01 (29/3) 6.01.01 (39/3) 13.01.01 (12/5)
+ 
+ .. index:: AI12-0222 (Ada 2022 feature)
+ 
+ * *AI12-0222 Representation aspects and private types (0000-00-00)*
+ 
+   Clarify that the rule against specifying a representation aspect for a type before the type is completely defined also applies in the case where aspect_specification syntax is used (not just in the case where a pragma or some other kind of representation item is used).
+ 
+   GNAT already implements this.
+ 
+   RM references: 13.01 (9/5) 13.01 (9.1/4) 13.01 (9.2/5)
+ 
+ .. index:: AI12-0225 (Ada 2022 feature)
+ 
+ * *AI12-0225 Prefix of Obj'Image (0000-00-00)*
+ 
+   Clarify some Object vs. Value corner cases to allow names that do not denote objects in more contexts, such as a qualified expression as a prefix of an Image attribute.
+ 
+   RM references: 3.05 (55.1/4)
+ 
+ .. index:: AI12-0226 (Ada 2022 feature)
+ 
+ * *AI12-0226 Make objects more consistent (0000-00-00)*
+ 
+   Allow value conversions as objects. For instance this example becomes legal: ``Long_Integer (Duration'Last)'Image``.
+ 
+   RM references: 3.03 (11.1/3) 3.03 (21.1/3) 3.03 (23.8/5) 4.06 (58.1/4)
+   4.06 (58.3/4)
+ 
+ .. index:: AI12-0227 (Ada 2022 feature)
+ 
+ * *AI12-0227 Evaluation of nonstatic universal expressions when no operators are involved (0000-00-00)*
+ 
+   Nonstatic universal integer expressions are always evaluated at runtime as values of type root_integer; similarly, nonstatic universal real expressions are always evaluated at runtime as values of type root_real.
+   This AI corrects a wording oversight. Previously, the above was only true if a call to operator was involved. With this change it is true in all cases.
+ 
+   No compiler impact.
+ 
+   RM references: 4.04 (10) 8.06 (29)
+ 
+ .. index:: AI12-0228 (Ada 2022 feature)
+ 
+ * *AI12-0228 Properties of qualified expressions used as names (2020-02-19)*
+ 
+   This AI clarifies that properties of a qualified object pass through a
+   qualified expression used as a name. Specifically, "aliased" and "known to be
+   constrained" are not changed by a qualified expression.
+ 
+   RM references: 3.03 (23.7/3) 3.10 (9/3)
+ 
+ .. index:: AI12-0231 (Ada 2022 feature)
+ 
+ * *AI12-0231 Null_Task_Id and Activation_Is_Complete (0000-00-00)*
+ 
+   Add ``Activation_Is_Complete`` to the list of functions that raise P_E if passed ``Null_Task_Id``, correcting an oversight.
+ 
+   RM references: C.07.01 (15)
+ 
+ .. index:: AI12-0232 (Ada 2022 feature)
+ 
+ * *AI12-0232 Rules for pure generic bodies (0000-00-00)*
+ 
+   Clarify the rules for a generic body nested in a pure library unit.
+ 
+   RM references: 10.02.01 (9/3) 10.02.01 (15.1/3) 10.02.01 (15.5/3)
+ 
+ .. index:: AI12-0233 (Ada 2022 feature)
+ 
+ * *AI12-0233 Pre'Class for hidden operations of private types (0000-00-00)*
+ 
+   Clarify how ``Pre'Class`` checking interacts with private-part overriding of inherited subprograms. A class-wide precondition can be checked at runtime even if it is specified in a private part that the caller cannot see into.
+ 
+   RM references: 6.01.01 (38/4)
+ 
+ .. index:: AI12-0234 (Ada 2022 feature)
+ 
+ * *AI12-0234 Compare-and-swap for atomic objects (0000-00-00)*
+ 
+   New predefined units for atomic operations (``System.Atomic_Operations`` and child units thereof).
+ 
+   RM references: C.06.01 (0) C.06.02 (0)
+ 
+ .. index:: AI12-0235 (Ada 2022 feature)
+ 
+ * *AI12-0235 System.Storage_Pools should be pure (0000-00-00)*
+ 
+   Change the predefined package System.Storage_Pools from preelaborated to pure.
+ 
+   RM references: 13.11 (5)
+ 
+ .. index:: AI12-0236 (Ada 2022 feature)
+ 
+ * *AI12-0236 declare expressions (2020-04-08)*
+ 
+   A ``declare expression`` allows constant objects and renamings to be
+   declared within an expression.
+ 
+   RM references: 2.08 (6) 3.09.02 (3) 3.10.02 (9.1/3) 3.10.02 (16.1/3)
+   3.10.02 (32.2/3) 4.03.02 (5.4/3) 4.03.03 (15.1/3) 4.04 (7/3)
+   4.05.09 (0) 6.02 (10/4) 7.05 (2.1/5) 8.01 (2.1/4)
+ 
+ .. index:: AI12-0237 (Ada 2022 feature)
+ 
+ * *AI12-0237 Getting the representation of an enumeration value (2020-01-31)*
+ 
+   The GNAT-specific attributes ``Enum_Rep`` and ``Enum_Val`` have been standardized and are now also supported as Ada 2022 attributes.
+ 
+   RM references: 13.04 (10) 13.04 (11/3)
+ 
+ .. index:: AI12-0242 (Ada 2022 feature)
+ 
+ * *AI12-0242 Shorthand Reduction Expressions for Objects (0000-00-00)*
+ 
+   Allow reduction expressions to iterate over an an array or an iterable object without having to explicitly create a value sequence.
+ 
+   This allows, for instance, writing ``A'Reduce("+", 0)`` instead of the equivalent (but more verbose) ``[for Value of A => Value]'Reduce("+", 0);``.
+ 
+   RM references: 4.05.10 (0) 4.01.04 (6)
+ 
+ .. index:: AI12-0247 (Ada 2022 feature)
+ 
+ * *AI12-0247 Potentially Blocking goes too far for Detect_Blocking (0000-00-00)*
+ 
+   During a protected action, a call on a subprogram that contains a potentially blocking operation is considered a bounded error (so raising P_E is optional).
+   This rule imposed an unreasonable implementation burden.
+   The new rule introduced by this AI allows ignoring (i.e., not detecting) the problem until execution of a potentially blocking operation is actually attempted.
+ 
+   RM references: 9.05 (55/5) 9.05 (56/5) 9.05.01 (18/5) H.05 (5/2)
+ 
+ .. index:: AI12-0249 (Ada 2022 feature)
+ 
+ * *AI12-0249 User-defined numeric literals (2020-04-07)*
+ 
+   Compiler support is added for three new aspects (``Integer_Literal``, ``Real_Literal``, and ``String_Literal``) as described in AI12-0249 (for ``Integer_Literal`` and ``Real_Literal``), AI12-0295 (for  ``String_Literal``), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined
+   aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
+ 
+   RM references: 4.02 (9) 4.02.01 (0) 4.09 (3)
+ 
+ .. index:: AI12-0250 (Ada 2022 feature)
+ 
+ * *AI12-0250 Iterator Filters (2020-05-19)*
+ 
+   This AI defines Ada 2022 feature of iterator filters, which can be
+   applied to loop parameter specifications and iterator specifications.
+ 
+   RM references: 4.03.03 (21) 4.03.03 (26) 4.03.03 (31) 4.03.05 (0) 4.05.10
+   (0) 5.05 (4) 5.05 (7) 5.05 (9/4) 5.05 (9.1/4) 5.05 (10)
+   5.05.02 (2/3) 5.05.02 (10/3) 5.05.02 (11/3)
+ 
+ .. index:: AI12-0252 (Ada 2022 feature)
+ 
+ * *AI12-0252 Duplicate interrupt handlers under Ravenscar (2018-07-05)*
+ 
+   Ada Issue AI12-0252 requires that the runtime shall terminate with a
+   Program_Error when more than one interrupt handler is attached to the same interrupt and the restriction No_Dynamic_Attachment is in effect.
+ 
+   RM references: C.03.01 (13)
+ 
+ .. index:: AI12-0256 (Ada 2022 feature)
+ 
+ * *AI12-0256 Aspect No_Controlled_Parts (2021-01-26)*
+ 
+   The compiler now supports the Ada 2022 aspect No_Controlled_Parts (see
+   AI12-0256). When specified for a type, this aspect requires that the type and any of its ancestors must not have any controlled parts.
+ 
+   RM references: H.04.01 (0) 13.01.01 (18.7/5)
+ 
+ .. index:: AI12-0258 (Ada 2022 feature)
+ 
+ * *AI12-0258 Containers and controlled element types (0000-00-00)*
+ 
+   Most predefined containers are allowed to defer finalization of container elements until the finalization of the container. This allows implementation flexibility  but  causes problems in some cases. AI12-0258 tightens up the rules for the indefinite containers to say that finalization happens earlier - if a client needs the tighter finalization guarantees, then it can use the indefinite containers (even if the element subtype in question is definite). Other solutions involving the holder generic are also possible.
+ 
+   GNAT implements these tighter element finalization requirements for instances of the indefinite container generics.
+ 
+   RM references: A.18 (10/4)
+ 
+ .. index:: AI12-0259 (Ada 2022 feature)
+ 
+ * *AI12-0259 Lower bound of strings returned from Ada.Command_Line (0000-00-00)*
+ 
+   Specify that the low-bound of a couple of predefined String-valued functions will always be one.
+ 
+   RM references: A.15 (14) A.15 (16/3)
+ 
+ .. index:: AI12-0260 (Ada 2022 feature)
+ 
+ * *AI12-0260 Functions Is_Basic and To_Basic in Wide_Characters.Handling (2020-04-01)*
+ 
+   AI12-0260 is implemented for Ada 2022, providing the new functions ``Is_Basic`` and ``To_Basic`` in package ``Ada.Wide_Characters.Handling``.
+ 
+   RM references: 1.02 (8/3) A.03.05 (8/3) A.03.05 (20/3) A.03.05 (21/3)
+   A.03.05 (33/3) A.03.05 (61/3)
+ 
+ .. index:: AI12-0261 (Ada 2022 feature)
+ 
+ * *AI12-0261 Conflict in "private with" rules (0000-00-00)*
+ 
+   If a library unit is only visible at some point because of a "private with", there are legality rules about a name denoting that entity. The AI cleans up the wording so that it captures the intent in a corner case involving a private-child library-unit subprogram. The previous wording incorrectly caused this case to be illegal.
+ 
+   RM references: 10.01.02 (12/3) 10.01.02 (13/2) 10.01.02 (14/2) 10.01.02
+   (15/2) 10.01.02 (16/2)
+ 
+ .. index:: AI12-0262 (Ada 2022 feature)
+ 
+ * *AI12-0262 Map-Reduce attribute (0000-00-00)*
+ 
+   The AI defines Reduction Expressions to allow the programmer to apply the
+   Map-Reduce paradigm to map/transform a set of values to a new set of values,
+   and then summarize/reduce the transformed values into a single result value.
+ 
+   RM references: 4.01.04 (1) 4.01.04 (6) 4.01.04 (11) 4.05.10 (0)
+ 
+ .. index:: AI12-0263 (Ada 2022 feature)
+ 
+ * *AI12-0263 Update references to ISO/IEC 10646 (0000-00-00)*
+ 
+   Change RM references to ISO/IEC 10646:2011 to instead refer to ISO/IEC 10646:2017. No compiler impact.
+ 
+   RM references: 1.01.04 (14.2/3) 2.01 (1/3) 2.01 (3.1/3) 2.01 (4/3) 2.01
+   (4.1/5) 2.01 (5/3) 2.01 (15/3) 2.01 (4.1/5) 2.01 (5/3) 2.03
+   (4.1/5) 2.03 (5/3) 3.05.02 (2/3) 3.05.02 (3/3) 3.05.02 (4/3) A.01
+   (36.1/3) A.01 (36.2/3) A.03.02 (32.6/5) A.03.05 (51.2/5) A.03.05
+   (55/3) A.03.05 (59/3) A.04.10 (3/3) B.05 (21/5)
+ 
+ .. index:: AI12-0264 (Ada 2022 feature)
+ 
+ * *AI12-0264 Overshifting and overrotating (0000-00-00)*
+ 
+   Clarify Shift and Rotate op behavior with large shift/rotate amounts.
+ 
+   RM references: B.02 (9)
+ 
+ .. index:: AI12-0265 (Ada 2022 feature)
+ 
+ * *AI12-0265 Default_Initial_Condition for types (2020-11-13)*
+ 
+   The aspect ``Default_Initial_Condition``, originally proposed by SPARK and
+   supported in GNAT, is now also included in Ada 2022. One change from the
+   original implementation is that when the aspect is specified on ancestor types of a derived type, the ancestors' check expressions also apply to the derived type.
+   ``Default_Initial_Condition`` checks are also now applied in cases of default
+   initialization of components, allocators, ancestor parts of extension aggregates, and box associations of aggregates.
+ 
+   RM references: 7.03.03 (0) 1.01.03 (17.1/5) 11.04.02 (23.2/5) 11.04.02 (23.3/5)
+ 
+ .. index:: AI12-0269 (Ada 2022 feature)
+ 
+ * *AI12-0269 Aspect No_Return for functions reprise (2020-03-19)*
+ 
+   This amendment has been implemented under the ``-gnat2022`` switch, and the
+   compiler now accepts the aspect/pragma No_Return for functions and generic
+   functions.
+ 
+   RM references: 6.05.01 (0) 6.05.01 (1/3) 6.05.01 (3.1/3) 6.05.01 (3.4/3)
+   6.05.01 (5/2) 6.05.01 (6/2) 6.05.01 (7/2) J.15.02 (2/3) J.15.02
+   (3/3) J.15.02 (4/3)
+ 
+ .. index:: AI12-0272 (Ada 2022 feature)
+ 
+ * *AI12-0272 (part 1) Pre/Postconditions for formal subprograms (0000-00-00)*
+ 
+   Pre and Post aspects can be specified for a generic formal subprogram. ``Default_Initial_Condition`` can be specified for a generic formal private type.
+ 
+   GNAT implements this with an exception of the part related to ``Default_Initial_Condition``.
+ 
+   RM references: 6.01.01 (1/5) 6.01.01 (39/5) 7.03.03 (1/5) 7.03.03 (2/5)
+   7.03.03 (8/5) 7.03.04 (5/5) F.01 (1)
+ 
+ .. index:: AI12-0275 (Ada 2022 feature)
+ 
+ * *AI12-0275 Make subtype_mark optional in object renames (2020-01-28)*
+ 
+   AI12-0275 allows object renamings to be declared without an explicit
+   subtype_mark or access_definition. This feature can be used by compiling
+   with the switch ``-gnat2022``.
+ 
+   RM references: 8.05.01 (2/3) 8.05.01 (3/2)
+ 
+ .. index:: AI12-0277 (Ada 2022 feature)
+ 
+ * *AI12-0277 The meaning of "accessibility level of the body of F" (0000-00-00)*
+ 
+   Clarify that the only time that an explicitly aliased formal parameter has different accessibility properties than an aliased part of a "normal" parameter is for the accessibility checking associated with a return statement.
+ 
+   RM references: 3.10.02 (19.2/4)
+ 
+ .. index:: AI12-0278 (Ada 2022 feature)
+ 
+ * *AI12-0278 Implicit conversions of anonymous return types (0000-00-00)*
+ 
+   If a call to a function with an anonymous-access-type result is converted to a named access type, it doesn't matter whether the conversion is implicit or explicit. the AI fixes hole where the previous rules didn't cover the implicit conversion case.
+ 
+   RM references: 3.10.02 (10.3/3)
+ 
+ .. index:: AI12-0279 (Ada 2022 feature)
+ 
+ * *AI12-0279 Nonpreemptive dispatching needs more dispatching points (2020-04-17)*
+ 
+   Ada 2022 defines a new aspect `Yield` that can be specified in the declaration of a noninstance subprogram (including a generic formal subprogram), a generic subprogram, or an entry, to ensure that the associated subprogram has at least one task dispatching point during each invocation.
+ 
+   RM references: D.02.01 (1.5/2) D.02.01 (7/5)
+ 
+ .. index:: AI12-0280-2 (Ada 2022 feature)
+ 
+ * *AI12-0280-2 Making 'Old more flexible (2020-07-24)*
+ 
+   For Ada 2022, AI12-0280-2 relaxes Ada's restrictions on 'Old attribute
+   references whose attribute prefix does not statically name an entity. Previously, it was required that such an attribute reference must be unconditionally evaluated when the postcondition is evaluated; with the new rule, conditional evaluation is permitted if the relevant conditions can be evaluated upon entry to the subprogram with the same results as evaluation at the time of the postcondition's evaluation. In this case, the 'Old attribute prefix is evaluated conditionally (more specifically, the prefix is evaluated only if the result of that evaluation is going to be referenced later when the
+   postcondition is evaluated).
+ 
+   RM references: 6.01.01 (20/3) 6.01.01 (21/3) 6.01.01 (22/3) 6.01.01
+   (22.1/4) 6.01.01 (22.2/5) 6.01.01 (23/3) 6.01.01 (24/3) 6.01.01
+   (26/4) 6.01.01 (27/5) 6.01.01 (39/5)
+ 
+ .. index:: AI12-0282 (Ada 2022 feature)
+ 
+ * *AI12-0282 Atomic, Volatile, and Independent generic formal types (0000-00-00)*
+ 
+   The AI specifies that the aspects ``Atomic``, ``Volatile``, ``Independent``, ``Atomic_Components``, ``Volatile_Components``, and ``Independent_Components`` are specifiable for generic formal types. The actual type must have a matching specification.
+ 
+   RM references: C.06 (6.1/3) C.06 (6.3/3) C.06 (6.5/3) C.06 (6.8/3) C.06
+   (12/3) C.06 (12.1/3) C.06 (21/4)
+ 
+ .. index:: AI12-0285 (Ada 2022 feature)
+ 
+ * *AI12-0285 Syntax for Stable_Properties aspects (0000-00-00)*
+ 
+   The AI establishes the required named notation for a Stable_Properties aspect specification in order to avoid syntactic ambiguities.
+ 
+   With the old syntax, an example like
+ 
+   .. code::
+ 
+      type Ugh is ...
+         with Stable_Properties =\> Foo, Bar, Nonblocking, Pack;
+ 
+   was problematic; ``Nonblocking`` and ``Pack`` are other aspects, while ``Foo`` and ``Bar`` are ``Stable_Properties`` functions. With the clarified syntax, the example above shall be written as:
+ 
+   .. code::
+ 
+       type Ugh is ...
+         with Stable_Properties => (Foo, Bar), Nonblocking, Pack;
+ 
+   RM references: 7.03.04 (2/5) 7.03.04 (3/5) 7.03.04 (4/5) 7.03.04 (6/5)
+   7.03.04 (7/5) 7.03.04 (9/5) 7.03.04 (10/5) 7.03.04 (14/5) 13.01.01 (4/5)
+ 
+ .. index:: AI12-0287 (Ada 2022 feature)
+ 
+ * *AI12-0287 Legality Rules for null exclusions in renaming are too fierce (2020-02-17)*
+ 
+   The null exclusion legality rules for generic formal object matching and object renaming now only apply to generic formal objects with mode in out.
+ 
+   RM references: 8.05.01 (4.4/2) 8.05.01 (4.5/2) 8.05.01 (4.6/2) 8.05.04
+   (4.2/2) 12.04 (8.3/2) 12.04 (8.4/2) 12.04 (8.5/2) 12.04 (8.2/5)
+   12.06 (8.2/5)
+ 
+ .. index:: AI12-0289 (Ada 2022 feature)
+ 
+ * *AI12-0289 Implicitly null excluding anonymous access types and conformance (2020-06-09)*
+ 
+   AI12-0289 is implemented for Ada 2022, allowing safer use of access parameters
+   when the partial view of the designated type is untagged, but the full view is
+   tagged.
+ 
+   RM references: 3.10 (26)
+ 
+ .. index:: AI12-0290 (Ada 2022 feature)
+ 
+ * *AI12-0290 Restriction Pure_Barriers (2020-02-18)*
+ 
+   The GNAT implementation of the Pure_Barriers restriction has
+   been updated to match the Ada RM's definition as specified
+   in this AI. Some constructs that were accepted by the previous
+   implementation are now rejected, and vice versa. In
+   particular, the use of a component of a component of a
+   protected record in a barrier expression, as in "when
+   Some_Component.Another_Component =>", formerly was (at least
+   in some cases) not considered to be a violation of the
+   Pure_Barriers restriction; that is no longer the case.
+ 
+   RM references: D.07 (2) D.07 (10.10/4)
+ 
+ .. index:: AI12-0291 (Ada 2022 feature)
+ 
+ * *AI12-0291 Jorvik Profile (2020-02-19)*
+ 
+   The Jorvik profile is now implemented, as defined in this AI.
+   For Ada 2012 and earlier versions of Ada, Jorvik is an implementation-defined
+   profile whose definition matches its Ada 2022 definition.
+ 
+   RM references: D.13 (0) D.13 (1/3) D.13 (4/3) D.13 (6/4) D.13 (9/3) D.13
+   (10/3) D.13 (11/4) D.13 (12/4)
+ 
+ .. index:: AI12-0293 (Ada 2022 feature)
+ 
+ * *AI12-0293 Add predefined FIFO_Streams packages (0000-00-00)*
+ 
+   The AI adds ``Ada.Streams.Storage`` and its two subunits ``Bounded`` and ``Unbounded``.
+ 
+   RM references: 13.13.01 (1) 13.13.01 (9) 13.13.01 (9.1/1)
+ 
+ .. index:: AI12-0295 (Ada 2022 feature)
+ 
+ * *AI12-0295 User-defined string  (2020-04-07)*
+ 
+   Compiler support is added for three new aspects (``Integer_Literal``, ``Real_Literal``, and ``String_Literal``) as described in AI12-0249 (for ``Integer_Literal`` and ``Real_Literal``), AI12-0295 (for ``String_Literal``), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
+ 
+   RM references: 4.02 (6) 4.02 (10) 4.02 (11) 3.06.03 (1) 4.02.01 (0) 4.09 (26/3)
+ 
+ .. index:: AI12-0301 (Ada 2022 feature)
+ 
+ * *AI12-0301 Predicates should be checked like constraints for types with Default_Value (2020-02-25)*
+ 
+   This AI clarifies that predicate checks apply for objects that are initialized
+   by default and that are of a type that has any components whose subtypes specify ``Default_Value`` or ``Default_Component_Value``.
+ 
+   RM references: 3.02.04 (31/4)
+ 
+ .. index:: AI12-0304 (Ada 2022 feature)
+ 
+ * *AI12-0304 Image attributes of language-defined types (2020-07-07)*
+ 
+   According to this AI, ``Put_Image`` (and therefore ``'Image``) is provided for
+   the containers and for unbounded strings.
+ 
+   RM references: 4.10 (0)
+ 
+ .. index:: AI12-0306 (Ada 2022 feature)
+ 
+ * *AI12-0306 Split null array aggregates from positional array aggregates (0000-00-00)*
+ 
+   The AI clarifies the wording of the references RM paragraphs without introducing any language changes.
+ 
+   RM references: 4.03.03 (2) 4.03.03 (3/2) 4.03.03 (9/5) 4.03.03 (26/5)
+   4.03.03 (26.1/5) 4.03.03 (33/3) 4.03.03 (38) 4.03.03 (39) 4.03.03 (42)
+ 
+ .. index:: AI12-0307 (Ada 2022 feature)
+ 
+ * *AI12-0307 Resolution of aggregates (2020-08-13)*
+ 
+   The proposed new syntax for aggregates in Ada 2022 uses square brackets as
+   delimiters, and in particular allows ``[]`` as a notation for empty array and container aggregates. This syntax is currently available as an experimental feature under the ``-gnatX`` flag.
+ 
+   RM references: 4.03 (3/5)
+ 
+ .. index:: AI12-0309 (Ada 2022 feature)
+ 
+ * *AI12-0309 Missing checks for pragma Suppress (0000-00-00)*
+ 
+   The AI includes some previously overlooked run-time checks in the list of checks that are potentially suppressed via a pragma ``Suppress``. For example, AI12-0251-1 adds a check that the number of chunks in a chunk_specification is not zero or negative. Clarify that suppressing ``Program_Error_Check`` suppresses that check too.
+ 
+   RM references: 11.05 (10) 11.05 (19) 11.05 (20) 11.05 (22) 11.05 (24)
+ 
+ .. index:: AI12-0311 (Ada 2022 feature)
+ 
+ * *AI12-0311 Suppressing client-side assertions for language-defined units (0000-00-00)*
+ 
+   The AI defines some new assertion policies that can be given as arguments in a Suppress pragma (e.g., Calendar_Assertion_Check). GNAT recognizes and ignores those new policies, the checks are not implemented.
+ 
+   RM references: 11.04.02 (23.5/5) 11.05 (23) 11.05 (26)
+ 
+ .. index:: AI12-0315 (Ada 2022 feature)
+ 
+ * *AI12-0315 Image Attributes subclause improvements (0000-00-00)*
+ 
+   Clarify that a named number or similar can be the prefix of an Image attribute reference.
+ 
+   RM references: 4.10 (0)
+ 
+ .. index:: AI12-0318 (Ada 2022 feature)
+ 
+ * *AI12-0318 No_IO should apply to Ada.Directories (2020-01-31)*
+ 
+   The restriction No_IO now applies to and prevents the use of the
+   ``Ada.Directories package``.
+ 
+   RM references: H.04 (20/2) H.04 (24/3)
+ 
+ .. index:: AI12-0321 (Ada 2022 feature)
+ 
+ * *AI12-0321 Support for Arithmetic Atomic Operations and Test and Set (0000-00-00)*
+ 
+   The AI adds some predefined atomic operations, e.g. package System.``Atomic_Operations.Test_And_Set``.
+ 
+   RM references: C.06.03 (0) C.06.04 (0)
+ 
+ .. index:: AI12-0325 (Ada 2022 feature)
+ 
+ * *AI12-0325 Various issues with user-defined literals (2020-04-07)*
+ 
+   Compiler support is added for three new aspects (``Integer_Literal``, ``Real_Literal``, and ``String_Literal``) as described in AI12-0249 (for ``Integer_Literal`` and ``Real_Literal``), AI12-0295 (for ``String_Literal``), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
+ 
+   RM references: 4.02 (6) 4.02 (10) 4.02 (11) 4.02.01 (0)
+ 
+ .. index:: AI12-0329 (Ada 2022 feature)
+ 
+ * *AI12-0329 Naming of FIFO_Streams packages (0000-00-00)*
+ 
+   The AI changes the name of predefined package ``Ada.Streams.FIFO_Streams`` to ``Ada.Streams.Storage``.
+ 
+   RM references: 13.13.01 (9/5) 13.13.01 (9.1/5)
+ 
+ .. index:: AI12-0331 (Ada 2022 feature)
+ 
+ * *AI12-0331 Order of finalization of a subpool (0000-00-00)*
+ 
+   Clarify that when a subpool is being finalized, objects allocated from that subpool are finalized before (not after) they cease to exist (i.e. object's storage has been reclaimed).
+ 
+   RM references: 13.11.05 (5/3) 13.11.05 (6/3) 13.11.05 (7/3) 13.11.05
+   (7.1/4) 13.11.05 (8/3) 13.11.05 (9/3)
+ 
+ .. index:: AI12-0333 (Ada 2022 feature)
+ 
+ * *AI12-0333 Predicate checks on out parameters (0000-00-00)*
+ 
+   If a view conversion is passed as an actual parameter corresponding to an out-mode formal parameter, and if the subtype of the formal parameter has a predicate, then no predicate check associated with the conversion is performed.
+ 
+   RM references: 3.02.04 (31/5) 4.06 (51/4) 6.04.01 (14)
+ 
+ .. index:: AI12-0335 (Ada 2022 feature)
+ 
+ * *AI12-0335 Dynamic accessibility check needed for some requeue targets (0000-00-00)*
+ 
+   Define a new runtime accessibility check for a corner case involving requeue statements.
+ 
+   RM references: 9.05.04 (7/4)
+ 
+ .. index:: AI12-0336 (Ada 2022 feature)
+ 
+ * *AI12-0336 Meaning of Time_Offset (0000-00-00)*
+ 
+   The AI introduces changes to the predefined package ``Ada.Calendar.Time_Zones``.
+ 
+   RM references: 9.06.01 (6/2) 9.06.01 (35/2) 9.06.01 (40/2) 9.06.01 (41/2)
+   9.06.01 (42/3) 9.06.01 (90/2) 9.06.01 (91/2)
+ 
+ .. index:: AI12-0337 (Ada 2022 feature)
+ 
+ * *AI12-0337 Simple_Name("/") in Ada.Directories (0000-00-00)*
+ 
+   Clarify behavior of subprograms in the predefined package ``Ada.Directories``. In particular, Simple_Name ("/") should return "/" on Unix-like systems.
+ 
+   RM references: A.16 (47/2) A.16 (74/2) A.16 (82/3)
+ 
+ .. index:: AI12-0338 (Ada 2022 feature)
+ 
+ * *AI12-0338 Type invariant checking and incomplete types (0000-00-00)*
+ 
+   Clarify that type invariants for type T are not checked for incomplete types whose completion is not available, even if that completion has components of type T.
+ 
+   RM references: 7.03.02 (20/5)
+ 
+ .. index:: AI12-0339 (Ada 2022 feature)
+ 
+ * *AI12-0339 Empty function for Container aggregates (2020-08-06)*
+ 
+   To provide uniform support for container aggregates, all standard container
+   libraries have been enhanced with a function Empty, to be used when initializing an aggregate prior to inserting the specified elements in the object being constructed. All products have been updated to remove the ambiguities that may have arisen from previous uses of entities named Empty in our sources, and the expansion of container aggregates uses Empty wherever needed.
+ 
+   RM references: A.18.02 (8/5) A.18.02 (12.3/5) A.18.02 (78.2/5) A.18.02
+   (98.6/5) A.18.03 (6/5) A.18.03 (10.2/5) A.18.03 (50.2/5) A.18.05
+   (3/5) A.18.05 (7.2/5) A.18.05 (37.3/5) A.18.05 (46/2) A.18.06
+   (4/5) A.18.06 (8.2/5) A.18.06 (51.4/5) A.18.08 (3/5) A.18.08
+   (8.1/5) A.18.08 (59.2/5) A.18.08 (68/2) A.18.09 (4/5) A.18.09
+   (9.1/5) A.18.09 (74.2/5) A.18.10 (15.2/5) A.18.18 (8.1/5) A.18.19
+   (6.1/5) A.18.20 (6/3) A.18.21 (6/3) A.18.22 (6/3) A.18.23 (6/3)
+   A.18.24 (6/3) A.18.25 (8/3)
+ 
+ .. index:: AI12-0340 (Ada 2022 feature)
+ 
+ * *AI12-0340 Put_Image should use a Text_Buffer (0000-00-00)*
+ 
+   Add a new predefined package Ada.Strings.Text_Buffers (along with child units) and change the definition of Put_Image attribute to refer to it.
+ 
+   RM references: A.04.12 (0) 4.10 (3.1/5) 4.10 (3.2/5) 4.10 (6/5) 4.10
+   (25.2/5) 4.10 (28/5) 4.10 (31/5) 4.10 (41/5) H.04 (23.2/5) H.04 (23.11/5)
+ 
+ .. index:: AI12-0342 (Ada 2022 feature)
+ 
+ * *AI12-0342 Various issues with user-defined literals (part 2) (2020-04-07)*
+ 
+   Compiler support is added for three new aspects (``Integer_Literal``, ``Real_Literal``,  and ``String_Literal``) as described in AI12-0249 (for ``Integer_Literal`` and ``Real_Literal``), AI12-0295 (for ``String_Literal``), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
+ 
+   RM references: 4.02.01 (0) 3.09.02 (1/2) 6.03.01 (22)
+ 
+ .. index:: AI12-0343 (Ada 2022 feature)
+ 
+ * *AI12-0343 Return Statement Checks (2020-04-02)*
+ 
+   This binding interpretation has been implemented and the accessibility,
+   predicate, and tag checks prescribed by RM 6.5 are now performed at the appropriate points, as required by this AI.
+ 
+   RM references: 6.05 (5.12/5) 6.05 (8/4) 6.05 (8.1/3) 6.05 (21/3)
+ 
+ .. index:: AI12-0345 (Ada 2022 feature)
+ 
+ * *AI12-0345 Dynamic accessibility of explicitly aliased parameters (0000-00-00)*
+ 
+   Further clarify (after AI12-0277) accessibility rules for explicitly aliased parameters.
+ 
+   RM references: 3.10.02 (5) 3.10.02 (7/4) 3.10.02 (10.5/3) 3.10.02 (13.4/4)
+   3.10.02 (19.2/5) 3.10.02 (21)
+ 
+ .. index:: AI12-0350 (Ada 2022 feature)
+ 
+ * *AI12-0350 Swap for Indefinite_Holders (0000-00-00)*
+ 
+   Add a ``Swap`` procedure to the predefined package
+   ``Ada.Containers.Indefinite_Holders``. The AI also contains implementation advice for ``Ada.Containers.Bounded_Indefinite_Holders``, a package that is not implemented by GNAT.
+ 
+   RM references: A.18.18 (22/5) A.18.18 (67/5) A.18.18 (73/3) A.18.32 (13/5)
+ 
+ .. index:: AI12-0351 (Ada 2022 feature)
+ 
+ * *AI12-0351 Matching for actuals for formal derived types (2020-04-03)*
+ 
+   This binding interpretation requires the compiler to checks
+   that an actual subtype in a generic parameter association of an instantiation is statically compatible (even when the actual is unconstrained) with the ancestor of an associated nondiscriminated generic formal derived type.
+ 
+   RM references: 12.05.01 (7) 12.05.01 (8)
+ 
+ .. index:: AI12-0352 (Ada 2022 feature)
+ 
+ * *AI12-0352 Early derivation and equality of untagged types (2020-07-09)*
+ 
+   AI12-0352 clarifies that declaring a user-defined primitive equality operation for a record type T is illegal if it occurs after a type has been derived from T.
+ 
+   RM references: 4.05.02 (9.8/4)
+ 
+ .. index:: AI12-0356 (Ada 2022 feature)
+ 
+ * *AI12-0356 Root_Storage_Pool_With_Subpools should have Preelaborable_Initialization (0000-00-00)*
+ 
+   Add Preelaborable_Initialization pragmas for predefined types ``Root_Storage_Pool_With_Subpools`` and ``Root_Subpool``.
+ 
+   RM references: 13.11.04 (4/3) 13.11.04 (5/3)
+ 
+ .. index:: AI12-0363 (Ada 2022 feature)
+ 
+ * *AI12-0363 Fixes for Atomic and Volatile (2020-09-08)*
+ 
+   This amendment has been implemented under the ``-gnat2022`` switch and the compiler now supports the ``Full_Access_Only`` aspect, which is mostly equivalent to GNAT's ``Volatile_Full_Access``.
+ 
+   RM references: 3.10.02 (26/3) 9.10 (1/5) C.06 (6.4/3) C.06 (6.10/3) C.06
+   (8.1/4) C.06 (12/5) C.06 (12.1/5) C.06 (13.3/5) C.06 (19.1/5)
+ 
+ .. index:: AI12-0364 (Ada 2022 feature)
+ 
+ * *AI12-0364 Add a modular atomic arithmetic package (0000-00-00)*
+ 
+   Generalize support for atomic integer operations to extend to modular types. Add new predefined generic package,
+   ``System.Atomic_Operations.Modular_Arithmetic``.
+ 
+   RM references: C.06.05 (0) C.06.04 (1/5) C.06.04 (2/5) C.06.04 (3/5)
+   C.06.04 (9/5)
+ 
+ .. index:: AI12-0366 (Ada 2022 feature)
+ 
+ * *AI12-0366 Changes to Big_Integer and Big_Real (0000-00-00)*
+ 
+   Simplify ``Big_Integer ``and ``Big_Real`` specs by eliminating explicit support for creating "invalid" values. No more
+   ``Optional_Big_[Integer,Real]`` types.
+ 
+   RM references: A.05.06 (0) A.05.07 (0)
+ 
+ .. index:: AI12-0367 (Ada 2022 feature)
+ 
+ * *AI12-0367 Glitches in aspect specifications (0000-00-00)*
+ 
+   The AI clarifies a few wording omissions. For example, a specified Small value for a fixed point type has to be positive.
+ 
+   RM references: 3.05.09 (8/2) 3.05.10 (2/1) 13.01 (9.1/5) 13.14 (10)
+ 
+ .. index:: AI12-0368 (Ada 2022 feature)
+ 
+ * *AI12-0368 Declare expressions can be static (2020-05-30)*
+ 
+   AI12-0368 allows declare expressions to be static in Ada 2022.
+ 
+   RM references: 4.09 (8) 4.09 (12.1/3) 4.09 (17) 6.01.01 (24.2/5) 6.01.01
+   (24.3/5) 6.01.01 (24.4/5) 6.01.01 (24.5/5) C.04 (9)
+ 
+ .. index:: AI12-0369 (Ada 2022 feature)
+ 
+ * *AI12-0369 Relaxing barrier restrictions (2020-03-25)*
+ 
+   The definitions of the ``Simple_Barriers`` and ``Pure_Barriers`` restrictions were modified by this AI, replacing uses of "statically denotes" with "statically names". This means that in many cases (but not all) a barrier expression that references a subcomponent of a component of the protected type while subject to either of the two restrictions is now allowed; with the previous restriction definitions, such a barrier expression would not have been legal.
+ 
+   RM references: D.07 (1.3/5) D.07 (10.12/5)
+ 
+ .. index:: AI12-0372 (Ada 2022 feature)
+ 
+ * *AI12-0372 Static accessibility of "master of the call" (0000-00-00)*
+ 
+   Add an extra compile-time accessibility check for explicitly aliased parameters needed to prevent dangling references.
+ 
+   RM references: 3.10.02 (10.5/5) 3.10.02 (19.3/4) 6.04.01 (6.4/3)
+ 
+ .. index:: AI12-0373 (Ada 2022 feature)
+ 
+ * *AI12-0373 Bunch of fixes (0000-00-00)*
+ 
+   Small clarifications to various RM entries with minor impact on compiler implementation.
+ 
+   RM references: 3.01 (1) 4.02 (4) 4.02 (8/2) 4.02.01 (3/5) 4.02.01 (4/5)
+   4.02.01 (5/5) 4.09 (17.3/5) 6.01.01 (41/5) 8.05.04 (4/3) 13.01.01
+   (4/3) 13.01.01 (11/3) 13.14 (3/5)
+ 
+ .. index:: AI12-0376 (Ada 2022 feature)
+ 
+ * *AI12-0376 Representation changes finally allowed for untagged derived types (0000-00-00)*
+ 
+   A change of representation for a derived type is allowed in some previously-illegal cases where a change of representation is required to implement a call to a derived subprogram.
+ 
+   RM references: 13.01 (10/4)
+ 
+ .. index:: AI12-0377 (Ada 2022 feature)
+ 
+ * *AI12-0377 View conversions and out parameters of types with Default_Value revisited (2020-06-17)*
+ 
+   This AI clarifies that an actual of an out parameter that is a view conversion
+   is illegal if either the target or operand type has Default_Value specified while the other does not.
+ 
+   RM references: 6.04.01 (5.1/4) 6.04.01 (5.2/4) 6.04.01 (5.3/4) 6.04.01
+   (13.1/4) 6.04.01 (13.2/4) 6.04.01 (13.3/4) 6.04.01 (13.4/4) 6.04.01 (15/3)
+ 
+ .. index:: AI12-0381 (Ada 2022 feature)
+ 
+ * *AI12-0381 Tag of a delta aggregate (0000-00-00)*
+ 
+   In the case of a delta aggregate of a specific tagged type, the tag of the aggregate comes from the specific type (as opposed to somehow from the base object).
+ 
+   RM references: 4.03.04 (14/5)
+ 
+ .. index:: AI12-0382 (Ada 2022 feature)
+ 
+ * *AI12-0382 Loosen type-invariant overriding requirement of AI12-0042-1 (0000-00-00)*
+ 
+   The AI relaxes some corner-case legality rules about type invariants that were added by AI12-0042-1.
+ 
+   RM references: 7.3.2(6.1/4)
+ 
+ .. index:: AI12-0383 (Ada 2022 feature)
+ 
+ * *AI12-0383 Renaming values (2020-06-17)*
+ 
+   This AI allow names that denote values rather than objects to nevertheless be
+   renamed using an object renaming.
+ 
+   RM references: 8.05.01 (1) 8.05.01 (4) 8.05.01 (4.1/2) 8.05.01 (6/2) 8.05.01 (8)
+ 
+ .. index:: AI12-0384-2 (Ada 2022 feature)
+ 
+ * *AI12-0384-2 Fixups for Put_Image and Text_Buffers (2021-04-29)*
+ 
+   In GNAT's initial implementation of the Ada 2022 ``Put_Image`` aspect and
+   attribute, buffering was performed using a GNAT-defined package,
+   ``Ada.Strings.Text_Output``. Ada 2022 requires a different package, Ada.``Strings.Text_Buffers``, for this role, and that package is now provided, and the older package is eliminated.
+ 
+   RM references: 4.10 (0) A.04.12 (0)
+ 
+ .. index:: AI12-0385 (Ada 2022 feature)
+ 
+ * *AI12-0385 Predefined shifts and rotates should be static (0000-00-00)*
+ 
+   This AI allows Shift and Rotate operations in static expressions. GNAT implements this AI partially.
+ 
+   RM references: 4.09 (20)
+ 
+ .. index:: AI12-0389 (Ada 2022 feature)
+ 
+ * *AI12-0389 Ignoring unrecognized aspects (2020-10-08)*
+ 
+   Two new restrictions, ``No_Unrecognized_Aspects`` and ``No_Unrecognized_Pragmas``, are available to make the compiler emit error messages on unrecognized pragmas and aspects.
+ 
+   RM references: 13.01.01 (38/3) 13.12.01 (6.3/3)
+ 
+ .. index:: AI12-0394 (Ada 2022 feature)
+ 
+ * *AI12-0394 Named Numbers and User-Defined Numeric Literals (2020-10-05)*
+ 
+   Ada 2022 allows using integer named numbers with types that have an
+   ``Integer_Literal`` aspect. Similarly, real named numbers may now be used with types that have a ``Real_Literal`` aspect with an overloading that takes two strings, to be used in particular  with
+   ``Ada.Numerics.Big_Numbers.Big_Reals``.
+ 
+   RM references: 3.03.02 (3) 4.02.01 (4/5) 4.02.01 (8/5) 4.02.01 (12/5)
+   4.02.01 (13/5) 4.09 (5)
+ 
+ .. index:: AI12-0395 (Ada 2022 feature)
+ 
+ * *AI12-0395 Allow aspect_specifications on formal parameters (0000-00-00)*
+ 
+   Change syntax rules to allow aspect_specifications on formal parameters, if an implementation if an implementation wants to define one. Currently, GNAT doesn't define any such aspect_specifications.
+ 
+   RM references: 6.01 (15/3)
+ 
+ .. index:: AI12-0397 (Ada 2022 feature)
+ 
+ * *AI12-0397 Default_Initial_Condition applied to derived type (2020-12-09)*
+ 
+   The compiler now implements the rules for resolving ``Default_Initial_Condition``
+   expressions that involve references to the current instance of types with the aspect, as specified by this AI. The type of the current instance is defined to be like a formal derived type, so for a derived type that inherits the aspect, a call passing the current instance to a primitive means that the call will resolve to invoke the corresponding primitive of the descendant type. This also now permits calls to abstract primitives to occur within the aspect expression of an abstract type.
+ 
+   RM references: 7.03.03 (3/5) 7.03.03 (6/5) 7.03.03 (8/5)
+ 
+ .. index:: AI12-0398 (Ada 2022 feature)
+ 
+ * *AI12-0398 Most declarations should have aspect specifications (2020-11-19)*
+ 
+   It is now possible to specify aspects for discriminant specifications, extended return object declarations, and entry index specifications. This is an extension added for Ada 2022 by this AI.
+ 
+   RM references: 3.07 (5/2) 6.03.01 (25) 6.05 (2.1/3) 9.05.02 (8)
+ 
+ .. index:: AI12-0399 (Ada 2022 feature)
+ 
+ * *AI12-0399 Aspect specification for Preelaborable_Initialization (0000-00-00)*
+ 
+   Semantics-preserving presentation change. Replace ``Preelaborable_Initialization`` pragmas with equivalent aspect specs in the listed predefined packages. GNAT follows the guidance of this AI partially.
+ 
+   RM references: 9.05 (53/5) 3.09 (6/5) 7.06 (5/2) 7.06 (7/2) 11.04.01 (2/5)
+   11.04.01 (3/2) 13.11 (6/2) 13.11.04 (4/5) 13.11.04 (5/5) 13.13.01
+   (3/2) A.04.02 (4/2) A.04.02 (20/2) A.04.05 (4/2) A.04.07 (4/2)
+   A.04.07 (20/2) A.04.08 (4/2) A.04.08 (20/2) A.12.01 (5/4) A.18.02
+   (8/5) A.18.02 (9/2) A.18.02 (79.2/5) A.18.02 (79.3/5) A.18.03
+   (6/5) A.18.03 (7/2) A.18.03 (50.2/5) A.18.03 (50.3/5) A.18.05
+   (3/5) A.18.05 (4/2) A.18.05 (37.3/5) A.18.05 (37.4/5) A.18.06
+   (4/5) A.18.06 (5/2) A.18.06 (51.4/5) A.18.06 (51.5/5) A.18.08
+   (3/5) A.18.08 (4/2) A.18.08 (58.2/5) A.18.08 (58.3/5) A.18.09
+   (4/5) A.18.09 (5/2) A.18.09 (74.2/5) A.18.09 (74.3/5) A.18.10
+   (8/5) A.18.10 (9/3) A.18.10 (70.2/5) A.18.10 (70.3/5) A.18.18
+   (6/5) B.03.01 (5/2) C.07.01 (2/5) G.01.01 (4/2)
+ 
+ .. index:: AI12-0400 (Ada 2022 feature)
+ 
+ * *AI12-0400 Ambiguities associated with Vector Append and container aggregates (0000-00-00)*
+ 
+   Change the names of subprograms in the predefined Vector containers from ``Append`` to ``Append_Vector`` and from ``Prepend`` to ``Prepend_Vector`` in order to resolve some ambiguity problems. GNAT adds the subprograms with new names but also keeps the old ones for backward compatibility.
+ 
+   RM references: A.18.02 (8/5) A.18.02 (36/5) A.18.02 (37/5) A.18.02 (38/5)
+   A.18.02 (44/5) A.18.02 (46/5) A.18.02 (47/5) A.18.02 (58/5)
+   A.18.02 (79.2/5) A.18.02 (150/5) A.18.02 (151/5) A.18.02 (152/5)
+   A.18.02 (153/5) A.18.02 (154/5) A.18.02 (155/5) A.18.02 (156/5)
+   A.18.02 (168/5) A.18.02 (169/5) A.18.02 (172/5) A.18.02 (173/5)
+   A.18.02 (174/5) A.18.02 (175.1/5) A.18.03 (23/5) A.18.03 (23.1/5)
+   A.18.03 (58.2/5) A.18.03 (96/5) A.18.03 (97.1/5)
+ 
+ .. index:: AI12-0401 (Ada 2022 feature)
+ 
+ * *AI12-0401 Renaming of qualified expression of variable (2020-10-31)*
+ 
+   Ada 2022 AI12-0401 restricts renaming of a qualified expression to cases where
+   the operand is a constant, or the target subtype statically matches the nominal subtype of the operand, or is unconstrained with no predicates, to prevent setting variables to values outside their range or constraints.
+ 
+   RM references: 3.03 (23.2/3) 8.05.01 (4.7/5) 8.05.01 (5/3)
+ 
+ .. index:: AI12-0409 (Ada 2022 feature)
+ 
+ * *AI12-0409 Preelaborable_Initialization and bounded containers (2021-06-23)*
+ 
+   As defined by this AI, the ``Preelaborable_Initializatio`` aspect now has a
+   corresponding attribute of the same name. Types declared within a generic package specification are permitted to specify the expression of a ``Prelaborable_Initialization`` aspect by including one or more references to the attribute applied to a formal private or formal derived type conjoined by ``and`` operators. This permits the full type of a private type with such an aspect expression to have components of the named formal types, and such a type will have preelaborable initialization in an instance when the
+   actual types for all referenced formal types have preelaborable initialization.
+ 
+   RM references: 10.02.01 (4.1/2) 10.02.01 (4.2/2) 10.02.01 (11.1/2)
+   10.02.01 (11.2/2) 10.02.01 (11.6/2) 10.02.01 (11.7/2) 10.02.01
+   (11.8/2) 13.01 (11/3) A.18.19 (5/5) A.18.20 (5/5) A.18.21 (5/5)
+   A.18.22 (5/5) A.18.23 (5/5) A.18.24 (5/5) A.18.25 (5/5) A.18.32
+   (6/5) J.15.14 (0)
+ 
+ .. index:: AI12-0411 (Ada 2022 feature)
+ 
+ * *AI12-0411 Add "bool" to Interfaces.C (0000-00-00)*
+ 
+   RM references: B.03 (13) B.03 (43/2) B.03 (65.1/4)
+ 
+ .. index:: AI12-0412 (Ada 2022 feature)
+ 
+ * *AI12-0412 Abstract Pre/Post'Class on primitive of abstract type (2021-05-19)*
+ 
+   In Ada 2022, by AI12-0412, it's legal to specify Pre'Class and Post'Class
+   aspects on nonabstract primitive subprograms of an abstract type, but if the
+   expression of such an aspect is nonstatic, then it's illegal to make a nondispatching call to such a primitive, to apply ``'Access`` to it, or to pass such a primitive as an actual subprogram for a concrete formal subprogram in a generic instantiation.
+ 
+   RM references: 6.01.01 (18.2/4)
+ 
+ .. index:: AI12-0413 (Ada 2022 feature)
+ 
+ * *AI12-0413 Reemergence of "=" when defined to be abstract (0000-00-00)*
+ 
+   The AI clarifies rules about operator reemergence in instances, and nondispatching calls to abstract subprograms.
+ 
+   RM references: 3.09.03 (7) 4.05.02 (14.1/3) 4.05.02 (24.1/3) 12.05 (8/3)
+ 
+ .. index:: AI12-0423 (Ada 2022 feature)
+ 
+ * *AI12-0423 Aspect inheritance fixups (0000-00-00)*
+ 
+   Clarify that the No_Return aspect behaves as one would expect for an inherited subprogram and that inheritance works as one would expect for a multi-part aspect whose value is specified via an aggregate (e.g., the Aggregate aspect).
+ 
+   RM references: 6.05.01 (3.3/3) 13.01 (15.7/5) 13.01 (15.8/5)
+ 
+ .. index:: AI12-0432 (Ada 2022 feature)
+ 
+ * *AI12-0432 View conversions of assignments and predicate checks (2021-05-05)*
+ 
+   When a predicate applies to a tagged type, a view conversion to that type
+   normally requires a predicate check. However, as specified by AI12-0432, when the view conversion appears as the target of an assignment, a predicate check is not applied to the object in the conversion.
+ 
+   RM references: 3.02.04 (31/5) 4.06 (51.1/5)
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst	Sun Jul  6 22:32:09 2025
***************
*** 4,12 ****
  Specialized Needs Annexes
  *************************
  
! Ada 95, Ada 2005, and Ada 2012 define a number of Specialized Needs Annexes, which are not
! required in all implementations.  However, as described in this chapter,
! GNAT implements all of these annexes:
  
  *Systems Programming (Annex C)*
    The Systems Programming Annex is fully implemented.
--- 4,10 ----
  Specialized Needs Annexes
  *************************
  
! Ada 95, Ada 2005, Ada 2012, and Ada 2022 define a number of Specialized Needs Annexes, which are not required in all implementations.  However, as described in this chapter, GNAT implements all of these annexes:
  
  *Systems Programming (Annex C)*
    The Systems Programming Annex is fully implemented.
*************** GNAT implements all of these annexes:
*** 18,26 ****
  
  *Distributed Systems (Annex E)*
    Stub generation is fully implemented in the GNAT compiler.  In addition,
!   a complete compatible PCS is available as part of the GLADE system,
!   a separate product.  When the two
!   products are used in conjunction, this annex is fully implemented.
  
  
  *Information Systems (Annex F)*
--- 16,23 ----
  
  *Distributed Systems (Annex E)*
    Stub generation is fully implemented in the GNAT compiler.  In addition,
!   a complete compatible PCS is available as part of ``PolyORB``,
!   a separate product. Note, that PolyORB is a deprecated product and will be eventually replaced with other technologies such as ``RTI``.
  
  
  *Information Systems (Annex F)*
*************** GNAT implements all of these annexes:
*** 34,37 ****
  *Safety and Security / High-Integrity Systems (Annex H)*
    The Safety and Security Annex (termed the High-Integrity Systems Annex
    in Ada 2005) is fully implemented.
- 
--- 31,33 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm/the_gnat_library.rst gcc-16-20250706/gcc/ada/doc/gnat_rm/the_gnat_library.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm/the_gnat_library.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm/the_gnat_library.rst	Sun Jul  6 22:32:09 2025
*************** technically an implementation-defined ad
*** 2037,2043 ****
  
  This package provides facilities for partition interfacing.  It
  is used primarily in a distribution context when using Annex E
! with ``GLADE``.
  
  .. _`System.Pool_Global_(s-pooglo.ads)`:
  
--- 2037,2043 ----
  
  This package provides facilities for partition interfacing.  It
  is used primarily in a distribution context when using Annex E
! with ``PolyORB``.
  
  .. _`System.Pool_Global_(s-pooglo.ads)`:
  
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_rm.rst gcc-16-20250706/gcc/ada/doc/gnat_rm.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_rm.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_rm.rst	Sun Jul  6 22:32:09 2025
*************** GNAT Reference Manual
*** 54,60 ****
     gnat_rm/interfacing_to_other_languages
     gnat_rm/specialized_needs_annexes
     gnat_rm/implementation_of_specific_ada_features
!    gnat_rm/implementation_of_ada_2012_features
     gnat_rm/gnat_language_extensions
     gnat_rm/security_hardening_features
     gnat_rm/obsolescent_features
--- 54,60 ----
     gnat_rm/interfacing_to_other_languages
     gnat_rm/specialized_needs_annexes
     gnat_rm/implementation_of_specific_ada_features
!    gnat_rm/implementation_of_ada_2022_features
     gnat_rm/gnat_language_extensions
     gnat_rm/security_hardening_features
     gnat_rm/obsolescent_features
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst gcc-16-20250706/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst	Sun Jul  6 22:32:09 2025
*************** We provide two options that you can use
*** 8128,8133 ****
--- 8128,8136 ----
    which version of GNAT built that file because it contains either
    :code:`GNAT` or :code:`GNAT-LLVM`.
  
+   You can also explicitly select GNAT LLVM in your existing GPR project
+   file by adding :code:`for Toolchain_Name("Ada") use "GNAT_LLVM";`
+ 
  .. only:: PRO
  
      If your project uses one of the libraries packaged with the GCC
diff -Nrcpad gcc-16-20250629/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst gcc-16-20250706/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
*** gcc-16-20250629/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst	Sun Jul  6 22:32:09 2025
*************** This chapter covers several topics:
*** 23,28 ****
--- 23,29 ----
  * `Performing Dimensionality Analysis in GNAT`_
  * `Stack Related Facilities`_
  * `Memory Management Issues`_
+ * `Sanitizers for Ada`_
  
  .. _Running_and_Debugging_Ada_Programs:
  
*************** execution of this erroneous program:
*** 4133,4135 ****
--- 4134,4458 ----
  
    The allocation root #1 of the first example has been split in 2 roots #1
    and #3, thanks to the more precise associated backtrace.
+ 
+ .. _Sanitizers_for_Ada:
+ 
+ Sanitizers for Ada
+ ==================
+ 
+ .. index:: Sanitizers
+ 
+ This section explains how to use sanitizers with Ada code. Sanitizers offer code
+ instrumentation and run-time libraries that detect certain memory issues and
+ undefined behaviors during execution. They provide dynamic analysis capabilities
+ useful for debugging and testing.
+ 
+ While many sanitizer capabilities overlap with Ada's built-in runtime checks,
+ they are particularly valuable for identifying issues that arise from unchecked
+ features or low-level operations.
+ 
+ .. _AddressSanitizer:
+ 
+ AddressSanitizer
+ ----------------
+ 
+ .. index:: AddressSanitizer
+ .. index:: ASan
+ .. index:: -fsanitize=address
+ 
+ AddressSanitizer (aka ASan) is a memory error detector activated with the
+ :switch:`-fsanitize=address` switch. Note that many of the typical memory errors,
+ such as use after free or buffer overflow, are detected by Ada’s ``Access_Check``
+ and ``Index_Check``.
+ 
+ It can detect the following types of problems:
+ 
+ * Wrong memory overlay
+ 
+   A memory overlay is a situation in which an object of one type is placed at the
+   same memory location as a distinct object of a different type, thus overlaying
+   one object over the other in memory. When there is an overflow because the
+   objects do not overlap (like in the following example), the sanitizer can signal
+   it.
+ 
+     .. code-block:: ada
+ 
+        procedure Wrong_Size_Overlay is
+           type Block is array (Natural range <>) of Integer;
+ 
+           Block4 : aliased Block := (1 .. 4 => 4);
+           Block5 : Block (1 .. 5) with Address => Block4'Address;
+        begin
+           Block5 (Block5'Last) := 5;  --  Outside the object
+        end Wrong_Size_Overlay;
+ 
+   If the code is built with the :switch:`-fsanitize=address` and :switch:`-g` options,
+   the following error is shown at execution time:
+ 
+     ::
+ 
+         ...
+         SUMMARY: AddressSanitizer: stack-buffer-overflow wrong_size_overlay.adb:7 in _ada_wrong_size_overlay
+         ...
+ 
+ * Buffer overflow
+ 
+   Ada’s ``Index_Check`` detects buffer overflows caused by out-of-bounds array
+   access. If run-time checks are disabled, the sanitizer can still detect such
+   overflows at execution time the same way as it signalled the previous wrong
+   memory overlay. Note that if both the Ada run-time checks and the sanitizer
+   are enabled, the Ada run-time exception takes precedence.
+ 
+     .. code-block:: ada
+ 
+        procedure Buffer_Overrun is
+           Size : constant := 100;
+           Buffer : array (1 .. Size) of Integer := (others => 0);
+           Wrong_Index : Integer := Size + 1 with Export;
+        begin
+           -- Access outside the boundaries
+           Put_Line ("Value: " & Integer'Image (Buffer (Wrong_Index)));
+        end Buffer_Overrun;
+ 
+ * Use after lifetime
+ 
+   Ada’s ``Accessibility_Check`` helps prevent use-after-return and
+   use-after-scope errors by enforcing lifetime rules. When these checks are
+   bypassed using ``Unchecked_Access``, sanitizers can still detect such
+   violations during execution.
+ 
+     .. code-block:: ada
+ 
+        with Ada.Text_IO; use Ada.Text_IO;
+ 
+        procedure Use_After_Return is
+           type Integer_Access is access all Integer;
+           Ptr : Integer_Access;
+ 
+           procedure Inner;
+ 
+           procedure Inner is
+              Local : aliased Integer := 42;
+           begin
+              Ptr := Local'Unchecked_Access;
+           end Inner;
+ 
+        begin
+           Inner;
+           --  Accessing Local after it has gone out of scope
+           Put_Line ("Value: " & Integer'Image (Ptr.all));
+        end Use_After_Return;
+ 
+   If the code is built with the :switch:`-fsanitize=address` and :switch:`-g`
+   options, the following error is shown at execution time:
+ 
+     ::
+ 
+         ...
+         ==1793927==ERROR: AddressSanitizer: stack-use-after-return on address 0xf6fa1a409060 at pc 0xb20b6cb6cac0 bp 0xffffcc89c8b0 sp 0xffffcc89c8c8
+         READ of size 4 at 0xf6fa1a409060 thread T0
+             #0 0xb20b6cb6cabc in _ada_use_after_return use_after_return.adb:18
+             ...
+ 
+         Address 0xf6fa1a409060 is located in stack of thread T0 at offset 32 in frame
+             #0 0xb20b6cb6c794 in use_after_return__inner use_after_return.adb:9
+ 
+           This frame has 1 object(s):
+             [32, 36) 'local' (line 10) <== Memory access at offset 32 is inside this variable
+         SUMMARY: AddressSanitizer: stack-use-after-return use_after_return.adb:18 in _ada_use_after_return
+         ...
+ 
+ * Memory leak
+ 
+   A memory leak happens when a program allocates memory from the heap but fails
+   to release it after it is no longer needed and loses all references to it like
+   in the following example.
+ 
+     .. code-block:: ada
+ 
+        procedure Memory_Leak is
+           type Integer_Access is access Integer;
+ 
+           procedure Allocate is
+              Ptr : Integer_Access := new Integer'(42);
+           begin
+              null;
+           end Allocate;
+        begin
+           --  Memory leak occurs in the following procedure
+          Allocate;
+        end Memory_Leak;
+ 
+   If the code is built with the :switch:`-fsanitize=address` and :switch:`-g`
+   options, the following error is emitted at execution time showing the
+   location of the offending allocation.
+ 
+     ::
+ 
+         ==1810634==ERROR: LeakSanitizer: detected memory leaks
+ 
+         Direct leak of 4 byte(s) in 1 object(s) allocated from:
+             #0 0xe3cbee4bb4a8 in __interceptor_malloc asan_malloc_linux.cpp:69
+             #1 0xc15bb25d0af8 in __gnat_malloc (memory_leak+0x10af8) (BuildId: f5914a6eac10824f81d512de50b514e7d5f733be)
+             #2 0xc15bb25c9060 in memory_leak__allocate memory_leak.adb:5
+             ...
+ 
+         SUMMARY: AddressSanitizer: 4 byte(s) leaked in 1 allocation(s).
+ 
+ .. _UndefinedBehaviorSanitizer:
+ 
+ UndefinedBehaviorSanitizer
+ --------------------------
+ 
+ .. index:: UndefinedBehaviorSanitizer
+ .. index:: UBSan
+ .. index:: -fsanitize=undefined
+ 
+ UndefinedBehaviorSanitizer (aka UBSan) modifies the program at compile-time to
+ catch various kinds of undefined behavior during program execution.
+ 
+ Different sanitize options (:switch:`-fsanitize=alignment,float-cast-overflow,signed-integer-overflow`)
+ detect the following types of problems:
+ 
+ * Wrong alignment
+ 
+   The :switch:`-fsanitize=alignment` flag (included also in
+   :switch:`-fsanitize=undefined`) enables run-time checks for misaligned memory
+   accesses, ensuring that objects are accessed at addresses that conform to the
+   alignment constraints of their declared types. Violations may lead to crashes
+   or performance penalties on certain architectures.
+ 
+   In the following example:
+ 
+     .. code-block:: ada
+ 
+        with Ada.Text_IO; use Ada.Text_IO;
+        with System.Storage_Elements; use System.Storage_Elements;
+ 
+        procedure Misaligned_Address is
+           type Aligned_Integer is new Integer with
+             Alignment => 4;  -- Ensure 4-byte alignment
+ 
+           Reference : Aligned_Integer := 42;  -- Properly aligned object
+ 
+           -- Create a misaligned object by modifying the address manually
+           Misaligned : Aligned_Integer with Address => Reference'Address + 1;
+ 
+        begin
+           -- This causes undefined behavior or an alignment exception on strict architectures
+           Put_Line ("Misaligned Value: " & Aligned_Integer'Image (Misaligned));
+        end Misaligned_Address;
+ 
+   If the code is built with the :switch:`-fsanitize=alignment` and :switch:`-g`
+   options, the following error is shown at execution time.
+ 
+     ::
+ 
+         misaligned_address.adb:15:51: runtime error: load of misaligned address 0xffffd836dd45 for type 'volatile misaligned_address__aligned_integer', which requires 4 byte alignment
+ 
+ * Signed integer overflow
+ 
+   Ada performs range checks at runtime in arithmetic operation on signed integers
+   to ensure the value is within the target type's bounds. If this check is removed,
+   the :switch:`-fsanitize=signed-integer-overflow` flag (included also in
+   :switch:`-fsanitize=undefined`) enables run-time checks for signed integer
+   overflows.
+ 
+   In the following example:
+ 
+     .. code-block:: ada
+ 
+        procedure Signed_Integer_Overflow is
+           type Small_Int is range -128 .. 127;
+           X, Y, Z : Small_Int with Export;
+        begin
+           X := 100;
+           Y := 50;
+           -- This addition will exceed 127, causing an overflow
+           Z := X + Y;
+        end Signed_Integer_Overflow;
+ 
+   If the code is built with the :switch:`-fsanitize=signed-integer-overflow` and
+   :switch:`-g` options, the following error is shown at execution time.
+ 
+     ::
+ 
+         signed_integer_overflow.adb:8:11: runtime error: signed integer overflow: 100 + 50 cannot be represented in type 'signed_integer_overflow__small_int'
+ 
+ * Float to integer overflow
+ 
+   When converting a floating-point value to an integer type, Ada performs a range
+   check at runtime to ensure the value is within the target type's bounds. If this
+   check is removed, the sanitizer can detect overflows in conversions from
+   floating point to integer types.
+ 
+   In the following code:
+ 
+       .. code-block:: ada
+ 
+          procedure Float_Cast_Overflow is
+             Flt : Float := Float'Last with Export;
+             Int : Integer;
+          begin
+             Int := Integer (Flt); --  Overflow
+          end Float_Cast_Overflow;
+ 
+   If the code is built with the :switch:`-fsanitize=float-cast-overflow` and
+   :switch:`-g` options, the following error is shown at execution time.
+ 
+     ::
+ 
+         float_cast_overflow.adb:5:20: runtime error: 3.40282e+38 is outside the range of representable values of type 'integer'
+ 
+ Sanitizers in mixed-language applications
+ -----------------------------------------
+ 
+ Most of the checks performed by sanitizers operate at a global level, which
+ means they can detect issues even when they span across language boundaries.
+ This applies notably to:
+ 
+ * All checks performed by the AddressSanitizer: wrong memory overlays, buffer
+   overflows, uses after lifetime, memory leaks. These checks apply globally,
+   regardless of where the objects are allocated or defined, or where they are
+   destroyed
+ 
+ * Wrong alignment checks performed by the UndefinedBehaviorSanitizer. It will
+   check whether an object created in a given language is accessed in another
+   with an incompatible alignment
+ 
+ An interesting case that highlights the benefit of global sanitization is a
+ buffer overflow caused by a mismatch in language bindings. Consider the
+ following C function, which allocates an array of 4 characters:
+ 
+       .. code-block:: c
+ 
+          char *get_str (void) {
+             char *str = malloc (4 * sizeof (char));
+          }
+ 
+ This function is then bound to Ada code, which incorrectly assumes the buffer
+ is of size 5:
+ 
+       .. code-block:: ada
+ 
+          type Buffer is array (1 .. 5) of Character;
+ 
+          function Get_Str return access Buffer
+             with Import => True, Convention => C, External_Name => "get_str";
+ 
+          Str : access Buffer := Get_Str;
+          Ch  : Character     := S (S'Last);  -- Detected by AddressSanitizer as erroneous
+ 
+ On the Ada side, accessing ``Str (5)`` appears valid because the array type
+ declares five elements. However, the actual memory allocated in C only holds
+ four. This mismatch is not detectable by Ada run-time checks, because Ada has
+ no visibility into how the memory was allocated.
+ 
+ However, the AddressSanitizer will detect the heap buffer overflow at runtime,
+ halting execution and providing a clear diagnostic:
+ 
+     ::
+ 
+         ...
+         SUMMARY: AddressSanitizer: heap-buffer-overflow buffer_overflow.adb:20 in _ada_buffer_overflow
+         ...
diff -Nrcpad gcc-16-20250629/gcc/ada/einfo-utils.adb gcc-16-20250706/gcc/ada/einfo-utils.adb
*** gcc-16-20250629/gcc/ada/einfo-utils.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/einfo-utils.adb	Sun Jul  6 22:32:09 2025
*************** package body Einfo.Utils is
*** 2345,2350 ****
--- 2345,2369 ----
     begin
        pragma Assert (Is_Type (Id));
  
+       if Nkind (Associated_Node_For_Itype (Id)) = N_Subtype_Declaration then
+          declare
+             Associated_Id : constant Entity_Id :=
+               Defining_Identifier (Associated_Node_For_Itype (Id));
+          begin
+             --  Avoid Itype/predicate problems by looking through Itypes.
+             --  We never introduce new predicates for Itypes, so doing this
+             --  will never cause us to incorrectly overlook a predicate.
+             --  It is not clear whether the FE needs this fix, but
+             --  GNATProve does (note that GNATProve calls Predicate_Function).
+ 
+             if Id /= Associated_Id
+               and then Base_Type (Id) = Base_Type (Associated_Id)
+             then
+                return Predicate_Function (Associated_Id);
+             end if;
+          end;
+       end if;
+ 
        --  If type is private and has a completion, predicate may be defined on
        --  the full view.
  
*************** package body Einfo.Utils is
*** 2376,2381 ****
--- 2395,2431 ----
              if Ekind (Subp_Id) = E_Function
                and then Is_Predicate_Function (Subp_Id)
              then
+                --  We may have incorrectly looked through predicate-bearing
+                --  subtypes when going from a private subtype to its full
+                --  view, so compensate for that case. Unfortunately,
+                --  Subp_Id might not be analyzed at this point, so we
+                --  use a crude works-most-of-the-time text-based
+                --  test to detect the case where Id is a subtype (declared by
+                --  a subtype declaration) and no predicate was explicitly
+                --  specified for Id. Ugh. ???
+ 
+                if Nkind (Parent (Id)) = N_Subtype_Declaration
+                  -- 1st choice ...
+                  --   and then Etype (First_Entity (Subp_Id)) /= Id
+                  -- but that doesn't work if Subp_Id is not analyzed.
+ 
+                  --  so we settle for 2nd choice, ignoring cases like
+                  --  "subtype Foo is Pkg.Foo;" where distinct subtypes
+                  --  have the same identifier:
+                  --
+                  and then Get_Name_String (Chars (Subp_Id)) /=
+                           Get_Name_String (Chars (Id)) & "Predicate"
+                then
+                   declare
+                      Mark : Node_Id := Subtype_Indication (Parent (Id));
+                   begin
+                      if Nkind (Mark) = N_Subtype_Indication then
+                         Mark := Subtype_Mark (Mark);
+                      end if;
+                      return Predicate_Function (Entity (Mark));
+                   end;
+                end if;
+ 
                 return Subp_Id;
              end if;
  
*************** package body Einfo.Utils is
*** 2803,2809 ****
        end if;
  
        Subp_Elmt := First_Elmt (Subps);
-       Prepend_Elmt (V, Subps);
  
        --  Check for a duplicate predication function
  
--- 2853,2858 ----
*************** package body Einfo.Utils is
*** 2813,2823 ****
           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;
  
     -----------------
--- 2862,2878 ----
           if Ekind (Subp_Id) = E_Function
             and then Is_Predicate_Function (Subp_Id)
           then
!             if V = Subp_Id then
!                return;
!             else
!                raise Program_Error;
!             end if;
           end if;
  
           Next_Elmt (Subp_Elmt);
        end loop;
+ 
+       Prepend_Elmt (V, Subps);
     end Set_Predicate_Function;
  
     -----------------
diff -Nrcpad gcc-16-20250629/gcc/ada/einfo.ads gcc-16-20250706/gcc/ada/einfo.ads
*** gcc-16-20250629/gcc/ada/einfo.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/einfo.ads	Sun Jul  6 22:32:09 2025
*************** package Einfo is
*** 716,721 ****
--- 716,729 ----
  --       bodies. Set if the entity contains any ignored Ghost code in the form
  --       of declaration, procedure call, assignment statement or pragma.
  
+ --    Continue_Mark
+ --       Defined in loop entities. It points to the loop's statement after
+ --       which the label for continue statements must be inserted if one is
+ --       needed. This is not always the last statement in the loop's list; it
+ --       can notably be followed by assignment statements generated by
+ --       expansion of iterator specifications, which continue statements must
+ --       not jump past.
+ 
  --    Contract
  --       Defined in constant, entry, entry family, operator, [generic] package,
  --       package body, protected unit, [generic] subprogram, subprogram body,
diff -Nrcpad gcc-16-20250629/gcc/ada/errid.adb gcc-16-20250706/gcc/ada/errid.adb
*** gcc-16-20250629/gcc/ada/errid.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/errid.adb	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --               D I A G N O S T I C S . R E P O S I T O R Y                --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                                E R R I D                                 --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
***************
*** 22,27 ****
--- 22,28 ----
  -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
  ------------------------------------------------------------------------------
+ 
  with JSON_Utils; use JSON_Utils;
  with Output;     use Output;
  
diff -Nrcpad gcc-16-20250629/gcc/ada/errid.ads gcc-16-20250706/gcc/ada/errid.ads
*** gcc-16-20250629/gcc/ada/errid.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/errid.ads	Sun Jul  6 22:32:09 2025
***************
*** 2,12 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --               D I A G N O S T I C S . R E P O S I T O R Y                --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 19925, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
--- 2,12 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                                E R R I D                                 --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2025, Free Software Foundation, Inc.         --
  --                                                                          --
  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  -- terms of the  GNU General Public License as published  by the Free Soft- --
***************
*** 22,27 ****
--- 22,28 ----
  -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
  ------------------------------------------------------------------------------
+ 
  with Types; use Types;
  with Errsw; use Errsw;
  
*************** package Errid is
*** 76,83 ****
     --    - Optionally additional information
     --    TODO: the mandatory fields for the documentation file could be changed
  
!    Diagnostic_Entries : Diagnostics_Registry_Type :=
!      (No_Diagnostic_Id => (others => <>),
        GNAT0001         =>
          (Status        => Active,
           Human_Id      => new String'("Default_Iterator_Not_Primitive_Error"),
--- 77,84 ----
     --    - Optionally additional information
     --    TODO: the mandatory fields for the documentation file could be changed
  
!    Diagnostic_Entries : constant Diagnostics_Registry_Type :=
!      (No_Diagnostic_Id => <>,
        GNAT0001         =>
          (Status        => Active,
           Human_Id      => new String'("Default_Iterator_Not_Primitive_Error"),
diff -Nrcpad gcc-16-20250629/gcc/ada/errout.adb gcc-16-20250706/gcc/ada/errout.adb
*** gcc-16-20250629/gcc/ada/errout.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/errout.adb	Sun Jul  6 22:32:09 2025
*************** with Gnatvsn;        use Gnatvsn;
*** 44,50 ****
  with Lib;            use Lib;
  with Opt;            use Opt;
  with Nlists;         use Nlists;
- with Osint;          use Osint;
  with Output;         use Output;
  with Scans;          use Scans;
  with Sem_Aux;        use Sem_Aux;
--- 44,49 ----
*************** package body Errout is
*** 278,288 ****
           begin
              if not M.Deleted then
                 M.Deleted := True;
!                Warnings_Detected := Warnings_Detected - 1;
! 
!                if M.Warn_Err then
!                   Warnings_Treated_As_Errors := Warnings_Treated_As_Errors - 1;
!                end if;
              end if;
  
              Id := M.Next;
--- 277,283 ----
           begin
              if not M.Deleted then
                 M.Deleted := True;
!                Decrease_Error_Msg_Count (M);
              end if;
  
              Id := M.Next;
*************** package body Errout is
*** 1061,1069 ****
  
        Temp_Msg : Error_Msg_Id;
  
-       Warn_Err : Boolean;
-       --  Set if warning to be treated as error
- 
        First_Fix : Fix_Id := No_Fix;
        Last_Fix  : Fix_Id := No_Fix;
  
--- 1056,1061 ----
*************** package body Errout is
*** 1408,1414 ****
            Line                => Get_Physical_Line_Number (Sptr),
            Col                 => Get_Column_Number (Sptr),
            Compile_Time_Pragma => Is_Compile_Time_Msg,
!           Warn_Err            => False, -- reset below
            Warn_Chr            => Warning_Msg_Char,
            Uncond              => Is_Unconditional_Msg,
            Msg_Cont            => Continuation,
--- 1400,1406 ----
            Line                => Get_Physical_Line_Number (Sptr),
            Col                 => Get_Column_Number (Sptr),
            Compile_Time_Pragma => Is_Compile_Time_Msg,
!           Warn_Err            => None, -- reset below
            Warn_Chr            => Warning_Msg_Char,
            Uncond              => Is_Unconditional_Msg,
            Msg_Cont            => Continuation,
*************** package body Errout is
*** 1421,1441 ****
            Fixes               => First_Fix));
        Cur_Msg := Errors.Last;
  
!       --  Test if warning to be treated as error
! 
!       Warn_Err :=
!         Error_Msg_Kind in Warning | Style
!         and then (Warning_Treated_As_Error (Msg_Buffer (1 .. Msglen))
!                   or else Warning_Treated_As_Error (Get_Warning_Tag (Cur_Msg))
!                   or else Is_Runtime_Raise);
! 
!       --  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;
  
        --  If immediate errors mode set, output error message now. Also output
        --  now if the -d1 debug flag is set (so node number message comes out
--- 1413,1437 ----
            Fixes               => First_Fix));
        Cur_Msg := Errors.Last;
  
!       --  Test if a warning is to be treated as error:
!       --  * It is marked by a pragma Warning_As_Error
!       --  * Warning_Mode is Treat_Run_Time_Warnings_As_Errors and we are
!       --    dealing with a runtime warning.
!       --  * Warning_Mode is Warnings_As_Errors and it is not a compile time
!       --    message.
  
!       if Error_Msg_Kind in Warning | Style then
!          if Warning_Treated_As_Error (Errors.Table (Cur_Msg)) then
!             Errors.Table (Cur_Msg).Warn_Err := From_Pragma;
!          elsif Warning_Mode = Treat_Run_Time_Warnings_As_Errors
!            and then Is_Runtime_Raise_Msg
!          then
!             Errors.Table (Cur_Msg).Warn_Err := From_Run_Time_As_Err;
!          elsif Warning_Mode = Treat_As_Error and then not Is_Compile_Time_Msg
!          then
!             Errors.Table (Cur_Msg).Warn_Err := From_Warn_As_Err;
!          end if;
!       end if;
  
        --  If immediate errors mode set, output error message now. Also output
        --  now if the -d1 debug flag is set (so node number message comes out
*************** package body Errout is
*** 1815,1821 ****
        begin
           if not Errors.Table (E).Deleted then
              Errors.Table (E).Deleted := True;
!             Warnings_Detected := Warnings_Detected - 1;
           end if;
        end Delete_Warning;
  
--- 1811,1817 ----
        begin
           if not Errors.Table (E).Deleted then
              Errors.Table (E).Deleted := True;
!             Decrease_Error_Msg_Count (Errors.Table (E));
           end if;
        end Delete_Warning;
  
*************** package body Errout is
*** 2643,2649 ****
  
        Write_Str ("{""kind"":");
  
!       if Errors.Table (E).Kind = Warning and then not Errors.Table (E).Warn_Err
        then
           Write_Str ("""warning""");
        elsif Errors.Table (E).Kind in
--- 2639,2646 ----
  
        Write_Str ("{""kind"":");
  
!       if Errors.Table (E).Kind = Warning
!         and then Errors.Table (E).Warn_Err = None
        then
           Write_Str ("""warning""");
        elsif Errors.Table (E).Kind in
*************** package body Errout is
*** 2710,2716 ****
     -- Output_Messages --
     ---------------------
  
!    procedure Output_Messages is
  
        --  Local subprograms
  
--- 2707,2713 ----
     -- Output_Messages --
     ---------------------
  
!    procedure Output_Messages (Exit_Code : Exit_Code_Type) is
  
        --  Local subprograms
  
*************** package body Errout is
*** 2819,2824 ****
--- 2816,2823 ----
           raise Program_Error;
        end if;
  
+       Erroutc.Exit_Code := Exit_Code;
+ 
        --  Reset current error source file if the main unit has a pragma
        --  Source_Reference. This ensures outputting the proper name of
        --  the source file in this situation.
*************** package body Errout is
*** 3140,3158 ****
        end if;
  
        if Warning_Mode = Treat_As_Error then
!          declare
!             Compile_Time_Pragma_Warnings : constant Nat :=
!                Count_Compile_Time_Pragma_Warnings;
!             Total : constant Int := Total_Errors_Detected + Warnings_Detected
!                - Compile_Time_Pragma_Warnings;
!             --  We need to protect against a negative Total here, because
!             --  if a pragma Compile_Time_Warning occurs in dead code, it
!             --  gets counted in Compile_Time_Pragma_Warnings but not in
!             --  Warnings_Detected.
!          begin
!             Total_Errors_Detected := Int'Max (Total, 0);
!             Warnings_Detected := Compile_Time_Pragma_Warnings;
!          end;
        end if;
     end Output_Messages;
  
--- 3139,3148 ----
        end if;
  
        if Warning_Mode = Treat_As_Error then
!          pragma Assert (Warnings_Detected >= Warnings_Treated_As_Errors);
!          Total_Errors_Detected :=
!            Total_Errors_Detected + Warnings_Treated_As_Errors;
!          Warnings_Detected := Warnings_Detected - Warnings_Treated_As_Errors;
        end if;
     end Output_Messages;
  
*************** package body Errout is
*** 3341,3347 ****
  
                 and then not Errors.Table (E).Uncond
              then
!                Warnings_Detected := Warnings_Detected - 1;
  
                 return True;
  
--- 3331,3337 ----
  
                 and then not Errors.Table (E).Uncond
              then
!                Decrease_Error_Msg_Count (Errors.Table (E));
  
                 return True;
  
*************** package body Errout is
*** 3366,3371 ****
--- 3356,3363 ----
           E := First_Error_Msg;
           while E /= No_Error_Msg loop
              while To_Be_Removed (Errors.Table (E).Next) loop
+                Errors.Table (Errors.Table (E).Next).Deleted := True;
+ 
                 Errors.Table (E).Next :=
                   Errors.Table (Errors.Table (E).Next).Next;
  
*************** package body Errout is
*** 4095,4109 ****
                    Set_Msg_Insertion_Code;
  
                 else
!                   --  Switch the message from a warning to an error if the flag
!                   --  -gnatwE is specified to treat run-time exception warnings
!                   --  as non-serious errors.
! 
!                   if Error_Msg_Kind = Warning
!                     and then Warning_Mode = Treat_Run_Time_Warnings_As_Errors
!                   then
!                      Is_Runtime_Raise := True;
!                   end if;
  
                    if Error_Msg_Kind = Warning then
                       Set_Msg_Str ("will be raised at run time");
--- 4087,4093 ----
                    Set_Msg_Insertion_Code;
  
                 else
!                   Is_Runtime_Raise_Msg := True;
  
                    if Error_Msg_Kind = Warning then
                       Set_Msg_Str ("will be raised at run time");
diff -Nrcpad gcc-16-20250629/gcc/ada/errout.ads gcc-16-20250706/gcc/ada/errout.ads
*** gcc-16-20250629/gcc/ada/errout.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/errout.ads	Sun Jul  6 22:32:09 2025
*************** with Err_Vars;
*** 32,37 ****
--- 32,38 ----
  with Erroutc;
  with Errid;    use Errid;
  with Namet;    use Namet;
+ with Osint;    use Osint;
  with Table;
  with Types;    use Types;
  with Uintp;    use Uintp;
*************** package Errout is
*** 716,724 ****
     --  and must be set True on the last call (a value of True activates some
     --  processing that must only be done after all messages are posted).
  
!    procedure Output_Messages;
     --  Output list of messages, including messages giving number of detected
!    --  errors and warnings.
  
     procedure Error_Msg
       (Msg : String; Flag_Location : Source_Ptr);
--- 717,725 ----
     --  and must be set True on the last call (a value of True activates some
     --  processing that must only be done after all messages are posted).
  
!    procedure Output_Messages (Exit_Code : Exit_Code_Type);
     --  Output list of messages, including messages giving number of detected
!    --  errors and warnings and store the exit code used.
  
     procedure Error_Msg
       (Msg : String; Flag_Location : Source_Ptr);
diff -Nrcpad gcc-16-20250629/gcc/ada/erroutc-pretty_emitter.adb gcc-16-20250706/gcc/ada/erroutc-pretty_emitter.adb
*** gcc-16-20250629/gcc/ada/erroutc-pretty_emitter.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/erroutc-pretty_emitter.adb	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --             D I A G N O S T I C S . P R E T T Y _ E M I T T E R          --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                 E R R O U T C . P R E T T Y _ E M I T T E R              --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
*************** package body Erroutc.Pretty_Emitter is
*** 1120,1127 ****
           Write_Str (" " & Switch_Str);
        end if;
  
!       if E_Msg.Warn_Err then
!          Write_Str (" [warning-as-error]");
        end if;
  
        Write_Eol;
--- 1120,1127 ----
           Write_Str (" " & Switch_Str);
        end if;
  
!       if E_Msg.Warn_Err = From_Pragma then
!          Write_Str (" " & Warn_As_Err_Tag);
        end if;
  
        Write_Eol;
diff -Nrcpad gcc-16-20250629/gcc/ada/erroutc-pretty_emitter.ads gcc-16-20250706/gcc/ada/erroutc-pretty_emitter.ads
*** gcc-16-20250629/gcc/ada/erroutc-pretty_emitter.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/erroutc-pretty_emitter.ads	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --             D I A G N O S T I C S . P R E T T Y _ E M I T T E R          --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                 E R R O U T C . P R E T T Y _ E M I T T E R              --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
diff -Nrcpad gcc-16-20250629/gcc/ada/erroutc-sarif_emitter.adb gcc-16-20250706/gcc/ada/erroutc-sarif_emitter.adb
*** gcc-16-20250629/gcc/ada/erroutc-sarif_emitter.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/erroutc-sarif_emitter.adb	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --              D I A G N O S T I C S . S A R I F _ E M I T T E R           --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                 E R R O U T C . S A R I F _ E M I T T E R                --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
*************** with GNAT.Lists; use GNAT.Lists;
*** 28,34 ****
  with Gnatvsn;    use Gnatvsn;
  with Lib;        use Lib;
  with Namet;      use Namet;
- with Osint;      use Osint;
  with Output;     use Output;
  with Sinput;     use Sinput;
  with System.OS_Lib;
--- 28,33 ----
*************** package body Erroutc.SARIF_Emitter is
*** 759,765 ****
  
        --  Print executionSuccessful
  
!       Write_Boolean_Attribute (N_EXECUTION_SUCCESSFUL, not Compilation_Errors);
  
        End_Block;
        NL_And_Indent;
--- 758,764 ----
  
        --  Print executionSuccessful
  
!       Write_Boolean_Attribute (N_EXECUTION_SUCCESSFUL, Exit_Code = E_Success);
  
        End_Block;
        NL_And_Indent;
diff -Nrcpad gcc-16-20250629/gcc/ada/erroutc-sarif_emitter.ads gcc-16-20250706/gcc/ada/erroutc-sarif_emitter.ads
*** gcc-16-20250629/gcc/ada/erroutc-sarif_emitter.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/erroutc-sarif_emitter.ads	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --              D I A G N O S T I C S . S A R I F _ E M I T T E R           --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                 E R R O U T C . S A R I F _ E M I T T E R                --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
***************
*** 24,29 ****
  ------------------------------------------------------------------------------
  
  package Erroutc.SARIF_Emitter is
- 
     procedure Print_SARIF_Report;
  end Erroutc.SARIF_Emitter;
--- 24,28 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/erroutc.adb gcc-16-20250706/gcc/ada/erroutc.adb
*** gcc-16-20250629/gcc/ada/erroutc.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/erroutc.adb	Sun Jul  6 22:32:09 2025
*************** package body Erroutc is
*** 225,273 ****
     ------------------------
  
     function Compilation_Errors return Boolean is
-       Warnings_Count : constant Int := Warnings_Detected;
     begin
!       if Total_Errors_Detected /= 0 then
!          return True;
! 
!       elsif Warnings_Treated_As_Errors /= 0 then
!          return True;
! 
!       --  We should never treat warnings that originate from a
!       --  Compile_Time_Warning pragma as an error. Warnings_Count is the sum
!       --  of both "normal" and Compile_Time_Warning warnings. This means that
!       --  there are only one or more non-Compile_Time_Warning warnings when
!       --  Warnings_Count is greater than Count_Compile_Time_Pragma_Warnings.
! 
!       elsif Warning_Mode = Treat_As_Error
!          and then Warnings_Count > Count_Compile_Time_Pragma_Warnings
!       then
!          return True;
!       end if;
! 
!       return False;
     end Compilation_Errors;
  
-    ----------------------------------------
-    -- Count_Compile_Time_Pragma_Warnings  --
-    ----------------------------------------
- 
-    function Count_Compile_Time_Pragma_Warnings return Int is
-       Result : Int := 0;
-    begin
-       for J in 1 .. Errors.Last loop
-          begin
-             if Errors.Table (J).Kind = Warning
-                and then Errors.Table (J).Compile_Time_Pragma
-                and then not Errors.Table (J).Deleted
-             then
-                Result := Result + 1;
-             end if;
-          end;
-       end loop;
-       return Result;
-    end Count_Compile_Time_Pragma_Warnings;
- 
     ------------------------------
     -- Decrease_Error_Msg_Count --
     ------------------------------
--- 225,235 ----
     ------------------------
  
     function Compilation_Errors return Boolean is
     begin
!       return Total_Errors_Detected /= 0
!         or else Warnings_Treated_As_Errors /= 0;
     end Compilation_Errors;
  
     ------------------------------
     -- Decrease_Error_Msg_Count --
     ------------------------------
*************** package body Erroutc is
*** 282,287 ****
--- 244,253 ----
           when Warning | Style =>
              Warnings_Detected := Warnings_Detected - 1;
  
+             if E.Warn_Err /= None then
+                Warnings_Treated_As_Errors := Warnings_Treated_As_Errors - 1;
+             end if;
+ 
           when High_Check | Medium_Check | Low_Check =>
              Check_Messages := Check_Messages - 1;
  
*************** package body Erroutc is
*** 340,346 ****
        w ("  Line               = ", Int (E.Line));
        w ("  Col                = ", Int (E.Col));
        w ("  Kind               = ", E.Kind'Img);
!       w ("  Warn_Err           = ", E.Warn_Err);
        w ("  Warn_Chr           = '" & E.Warn_Chr & ''');
        w ("  Uncond             = ", E.Uncond);
        w ("  Msg_Cont           = ", E.Msg_Cont);
--- 306,312 ----
        w ("  Line               = ", Int (E.Line));
        w ("  Col                = ", Int (E.Col));
        w ("  Kind               = ", E.Kind'Img);
!       w ("  Warn_Err           = ", E.Warn_Err'Img);
        w ("  Warn_Chr           = '" & E.Warn_Chr & ''');
        w ("  Uncond             = ", E.Uncond);
        w ("  Msg_Cont           = ", E.Msg_Cont);
*************** package body Erroutc is
*** 372,382 ****
     ------------------------
  
     function Get_Warning_Option (Id : Error_Msg_Id) return String is
!       Is_Style : constant Boolean         := Errors.Table (Id).Kind in Style;
!       Warn_Chr : constant String (1 .. 2) := Errors.Table (Id).Warn_Chr;
  
     begin
!       if Has_Switch_Tag (Errors.Table (Id))
          and then Warn_Chr (1) /= '?'
        then
           if Warn_Chr = "$ " then
--- 338,353 ----
     ------------------------
  
     function Get_Warning_Option (Id : Error_Msg_Id) return String is
!    begin
!       return Get_Warning_Option (Errors.Table (Id));
!    end Get_Warning_Option;
! 
!    function Get_Warning_Option (E : Error_Msg_Object) return String is
!       Is_Style : constant Boolean         := E.Kind in Style;
!       Warn_Chr : constant String (1 .. 2) := E.Warn_Chr;
  
     begin
!       if Has_Switch_Tag (E)
          and then Warn_Chr (1) /= '?'
        then
           if Warn_Chr = "$ " then
*************** package body Erroutc is
*** 398,408 ****
     ---------------------
  
     function Get_Warning_Tag (Id : Error_Msg_Id) return String is
!       Warn_Chr : constant String (1 .. 2) := Errors.Table (Id).Warn_Chr;
!       Option   : constant String          := Get_Warning_Option (Id);
  
     begin
!       if Has_Switch_Tag (Id) then
           if Warn_Chr = "? " then
              return "[enabled by default]";
           elsif Warn_Chr = "* " then
--- 369,384 ----
     ---------------------
  
     function Get_Warning_Tag (Id : Error_Msg_Id) return String is
!    begin
!       return Get_Warning_Tag (Errors.Table (Id));
!    end Get_Warning_Tag;
! 
!    function Get_Warning_Tag (E : Error_Msg_Object) return String is
!       Warn_Chr : constant String (1 .. 2) := E.Warn_Chr;
!       Option   : constant String          := Get_Warning_Option (E);
  
     begin
!       if Has_Switch_Tag (E) then
           if Warn_Chr = "? " then
              return "[enabled by default]";
           elsif Warn_Chr = "* " then
*************** package body Erroutc is
*** 429,434 ****
--- 405,428 ----
           when Warning | Style =>
              Warnings_Detected := Warnings_Detected + 1;
  
+             if E.Warn_Err /= None then
+                Warnings_Treated_As_Errors := Warnings_Treated_As_Errors + 1;
+ 
+                --  Propagate Warn_Err to all of the preceeding continuation
+                --  messages and the main message.
+ 
+                for J in reverse 1 .. Errors.Last loop
+                   if Errors.Table (J).Warn_Err = None then
+                      Errors.Table (J).Warn_Err := E.Warn_Err;
+ 
+                      Warnings_Treated_As_Errors :=
+                        Warnings_Treated_As_Errors + 1;
+                   end if;
+ 
+                   exit when not Errors.Table (J).Msg_Cont;
+                end loop;
+             end if;
+ 
           when High_Check | Medium_Check | Low_Check =>
              Check_Messages := Check_Messages + 1;
  
*************** package body Erroutc is
*** 1013,1022 ****
        --  Prefix with "error:" rather than warning.
        --  Additionally include the style suffix when needed.
  
!       if E_Msg.Warn_Err then
! 
!          Warnings_Treated_As_Errors := Warnings_Treated_As_Errors + 1;
! 
           Append
             (Buf,
              SGR_Error & "error: " & SGR_Reset &
--- 1007,1013 ----
        --  Prefix with "error:" rather than warning.
        --  Additionally include the style suffix when needed.
  
!       if E_Msg.Warn_Err in From_Pragma | From_Run_Time_As_Err then
           Append
             (Buf,
              SGR_Error & "error: " & SGR_Reset &
*************** package body Erroutc is
*** 1048,1055 ****
  
        --  Postfix [warning-as-error] at the end
  
!       if E_Msg.Warn_Err then
!          Append (Buf, " [warning-as-error]");
        end if;
  
        Output_Text_Within (To_String (Buf), Line_Length);
--- 1039,1046 ----
  
        --  Postfix [warning-as-error] at the end
  
!       if E_Msg.Warn_Err = From_Pragma then
!          Append (Buf, " " & Warn_As_Err_Tag);
        end if;
  
        Output_Text_Within (To_String (Buf), Line_Length);
*************** package body Erroutc is
*** 1143,1149 ****
  
           Error_Msg_Kind       := Error;
           Is_Unconditional_Msg := False;
!          Is_Runtime_Raise     := False;
           Warning_Msg_Char     := "  ";
  
           --  Check style message
--- 1134,1140 ----
  
           Error_Msg_Kind       := Error;
           Is_Unconditional_Msg := False;
!          Is_Runtime_Raise_Msg := False;
           Warning_Msg_Char     := "  ";
  
           --  Check style message
*************** package body Erroutc is
*** 1313,1318 ****
--- 1304,1311 ----
        E := First_Error_Msg;
        while E /= No_Error_Msg loop
           while To_Be_Purged (Errors.Table (E).Next) loop
+             Errors.Table (Errors.Table (E).Next).Deleted := True;
+ 
              Errors.Table (E).Next :=
                Errors.Table (Errors.Table (E).Next).Next;
           end loop;
*************** package body Erroutc is
*** 2106,2111 ****
--- 2099,2112 ----
        return False;
     end Warning_Treated_As_Error;
  
+    function Warning_Treated_As_Error (E : Error_Msg_Object) return Boolean is
+ 
+    begin
+       return
+         Warning_Treated_As_Error (E.Text.all)
+         or else Warning_Treated_As_Error (Get_Warning_Tag (E));
+    end Warning_Treated_As_Error;
+ 
     -------------------------
     -- Warnings_Suppressed --
     -------------------------
*************** package body Erroutc is
*** 2182,2257 ****
           Write_Str (" errors");
        end if;
  
!       --  We now need to output warnings. When using -gnatwe, all warnings
!       --  should be treated as errors, except for warnings originating from
!       --  the use of the Compile_Time_Warning pragma. Another situation
!       --  where a warning might be treated as an error is when the source
!       --  code contains a Warning_As_Error pragma.
!       --  When warnings are treated as errors, we still log them as
!       --  warnings, but we add a message denoting how many of these warnings
!       --  are also errors.
! 
!       declare
!          Warnings_Count : constant Int := Warnings_Detected;
! 
!          Compile_Time_Warnings : Int;
!          --  Number of warnings that come from a Compile_Time_Warning
!          --  pragma.
  
!          Non_Compile_Time_Warnings : Int;
!          --  Number of warnings that do not come from a Compile_Time_Warning
!          --  pragmas.
  
!       begin
!          if Warnings_Count > 0 then
!             Write_Str (", ");
!             Write_Int (Warnings_Count);
!             Write_Str (" warning");
  
!             if Warnings_Count > 1 then
!                Write_Char ('s');
              end if;
  
!             Compile_Time_Warnings := Count_Compile_Time_Pragma_Warnings;
!             Non_Compile_Time_Warnings :=
!                Warnings_Count - Compile_Time_Warnings;
! 
!             if Warning_Mode = Treat_As_Error
!                and then Non_Compile_Time_Warnings > 0
!             then
!                Write_Str (" (");
! 
!                if Compile_Time_Warnings > 0 then
!                   Write_Int (Non_Compile_Time_Warnings);
!                   Write_Str (" ");
!                end if;
! 
!                Write_Str ("treated as error");
! 
!                if Non_Compile_Time_Warnings > 1 then
!                   Write_Char ('s');
!                end if;
! 
!                Write_Char (')');
! 
!             elsif Warnings_Treated_As_Errors > 0 then
!                Write_Str (" (");
! 
!                if Warnings_Treated_As_Errors /= Warnings_Count then
!                   Write_Int (Warnings_Treated_As_Errors);
!                   Write_Str (" ");
!                end if;
! 
!                Write_Str ("treated as error");
! 
!                if Warnings_Treated_As_Errors > 1 then
!                   Write_Str ("s");
!                end if;
  
!                Write_Str (")");
              end if;
           end if;
!       end;
  
        if Info_Messages /= 0 then
           Write_Str (", ");
--- 2183,2214 ----
           Write_Str (" errors");
        end if;
  
!       if Warnings_Detected > 0 then
!          Write_Str (", ");
!          Write_Int (Warnings_Detected);
!          Write_Str (" warning");
  
!          if Warnings_Detected > 1 then
!             Write_Char ('s');
!          end if;
  
!          if Warnings_Treated_As_Errors > 0 then
!             Write_Str (" (");
  
!             if Warnings_Treated_As_Errors /= Warnings_Detected then
!                Write_Int (Warnings_Treated_As_Errors);
!                Write_Str (" ");
              end if;
  
!             Write_Str ("treated as error");
  
!             if Warnings_Treated_As_Errors > 1 then
!                Write_Str ("s");
              end if;
+ 
+             Write_Str (")");
           end if;
!       end if;
  
        if Info_Messages /= 0 then
           Write_Str (", ");
diff -Nrcpad gcc-16-20250629/gcc/ada/erroutc.ads gcc-16-20250706/gcc/ada/erroutc.ads
*** gcc-16-20250629/gcc/ada/erroutc.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/erroutc.ads	Sun Jul  6 22:32:09 2025
***************
*** 29,38 ****
--- 29,42 ----
  with Table;
  with Errsw; use Errsw;
  with Errid; use Errid;
+ with Osint; use Osint;
  with Types; use Types;
  
  package Erroutc is
  
+    Exit_Code : Exit_Code_Type := E_Success;
+    --  Exit_Code used at the end of the compilation
+ 
     type Error_Msg_Type is
       (Error,  -- Default value
        Non_Serious_Error,
*************** package Erroutc is
*** 78,92 ****
     --  Set true to indicate that the current message originates from a
     --  Compile_Time_Warning or Compile_Time_Error pragma.
  
     Is_Unconditional_Msg : Boolean := False;
     --  Set True to indicate that the current message contains the insertion
     --  character ! and is thus to be treated as an unconditional message.
  
-    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)..
- 
     Error_Msg_Kind : Error_Msg_Type := Error;
  
     Warning_Msg_Char : String (1 .. 2);
--- 82,95 ----
     --  Set true to indicate that the current message originates from a
     --  Compile_Time_Warning or Compile_Time_Error pragma.
  
+    Is_Runtime_Raise_Msg : Boolean := False;
+    --  Set to True to indicate that the current message is a constraint error
+    --  that will be raised at runtime (contains [).
+ 
     Is_Unconditional_Msg : Boolean := False;
     --  Set True to indicate that the current message contains the insertion
     --  character ! and is thus to be treated as an unconditional message.
  
     Error_Msg_Kind : Error_Msg_Type := Error;
  
     Warning_Msg_Char : String (1 .. 2);
*************** package Erroutc is
*** 257,262 ****
--- 260,276 ----
       Table_Increment      => 200,
       Table_Name           => "Fix");
  
+    type Warning_As_Error_Kind is
+      (None, From_Pragma, From_Warn_As_Err, From_Run_Time_As_Err);
+    --  The reason for a warning to be converted as an error:
+    --  * None - Regular warning. Default value for non-warning messages.
+    --  * From_Pragma - Warning converted to an error due to a pragma
+    --    Warning_As_Error.
+    --  * From_Warn_As_Err - Warning converted to an error because the
+    --    Warning_Mode was set to Treat_As_Errors by -gnatwe.
+    --  * From_Run_Time_As_Err - Warning converted to an error because the
+    --    Warning_Mode was set to Treat_Run_Time_Warnings_As_Errors by -gnatwE.
+ 
     type Error_Msg_Object is record
        Text : String_Ptr;
        --  Text of error message, fully expanded with all insertions
*************** package Erroutc is
*** 304,312 ****
        --  True if the message originates from a Compile_Time_Warning or
        --  Compile_Time_Error pragma
  
!       Warn_Err : Boolean;
!       --  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 : String (1 .. 2);
        --  See Warning_Msg_Char
--- 318,328 ----
        --  True if the message originates from a Compile_Time_Warning or
        --  Compile_Time_Error pragma
  
!       Warn_Err : Warning_As_Error_Kind;
!       --  By default this is None. If the warning was converted by some reason
!       --  to an error then it has a different value. Depending on the value
!       --  the warning will be printed in a different way due to historical
!       --  reasons.
  
        Warn_Chr : String (1 .. 2);
        --  See Warning_Msg_Char
*************** package Erroutc is
*** 377,383 ****
     --  Update E to point to the next continuation message
  
     function Kind_To_String (E : Error_Msg_Object) return String is
!      (if E.Warn_Err then "error"
        else
          (case E.Kind is
             when Error | Non_Serious_Error => "error",
--- 393,399 ----
     --  Update E to point to the next continuation message
  
     function Kind_To_String (E : Error_Msg_Object) return String is
!      (if E.Warn_Err in From_Pragma | From_Run_Time_As_Err then "error"
        else
          (case E.Kind is
             when Error | Non_Serious_Error => "error",
*************** package Erroutc is
*** 574,580 ****
       (SGR_Seq (Color_Bold));
  
     function Get_SGR_Code (E_Msg : Error_Msg_Object) return String is
!      (if E_Msg.Warn_Err then SGR_Error
        else
          (case E_Msg.Kind is
             when Warning | Style => SGR_Warning,
--- 590,596 ----
       (SGR_Seq (Color_Bold));
  
     function Get_SGR_Code (E_Msg : Error_Msg_Object) return String is
!      (if E_Msg.Warn_Err /= None then SGR_Error
        else
          (case E_Msg.Kind is
             when Warning | Style => SGR_Warning,
*************** package Erroutc is
*** 602,609 ****
     --  buffer, and preceded by a space.
  
     function Compilation_Errors return Boolean;
!    --  Returns true if errors have been detected, or warnings in -gnatwe
!    --  (treat warnings as errors) mode.
  
     procedure dmsg (Id : Error_Msg_Id);
     --  Debugging routine to dump an error message
--- 618,625 ----
     --  buffer, and preceded by a space.
  
     function Compilation_Errors return Boolean;
!    --  Returns true if errors have been detected, or warnings that are treated
!    --  as errors.
  
     procedure dmsg (Id : Error_Msg_Id);
     --  Debugging routine to dump an error message
*************** package Erroutc is
*** 621,636 ****
     --  redundant. If so, the message to be deleted and all its continuations
     --  are marked with the Deleted flag set to True.
  
-    function Count_Compile_Time_Pragma_Warnings return Int;
-    --  Returns the number of warnings in the Errors table that were triggered
-    --  by a Compile_Time_Warning pragma.
- 
     function Get_Warning_Option (Id : Error_Msg_Id) return String;
     --  Returns the warning switch causing this warning message or an empty
     --  string is there is none..
  
     function Get_Warning_Tag (Id : Error_Msg_Id) return String;
!    --  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.
  
     procedure Increase_Error_Msg_Count (E : Error_Msg_Object);
--- 637,650 ----
     --  redundant. If so, the message to be deleted and all its continuations
     --  are marked with the Deleted flag set to True.
  
     function Get_Warning_Option (Id : Error_Msg_Id) return String;
+    function Get_Warning_Option (E : Error_Msg_Object) return String;
     --  Returns the warning switch causing this warning message or an empty
     --  string is there is none..
  
     function Get_Warning_Tag (Id : Error_Msg_Id) return String;
!    function Get_Warning_Tag (E : Error_Msg_Object) return String;
!    --  Given an error message, return tag showing warning message class, or
     --  the null string if this option is not enabled or this is not a warning.
  
     procedure Increase_Error_Msg_Count (E : Error_Msg_Object);
*************** package Erroutc is
*** 716,721 ****
--- 730,739 ----
     High_Prefix   : constant String := "high: ";
     Style_Prefix  : constant String := "(style) ";
  
+    Warn_As_Err_Tag : constant String := "[warning-as-error]";
+    --  Tag used at the end of warning messages that were converted by
+    --  pragma Warning_As_Error.
+ 
     procedure Purge_Messages (From : Source_Ptr; To : Source_Ptr);
     --  All error messages whose location is in the range From .. To (not
     --  including the end points) will be deleted from the error listing.
*************** package Erroutc is
*** 872,877 ****
--- 890,899 ----
     --  given by Warning_As_Error pragmas, as stored in the Warnings_As_Errors
     --  table.
  
+    function Warning_Treated_As_Error (E : Error_Msg_Object) return Boolean;
+    --  Returns true if a Warning_As_Error pragma matches either the error text
+    --  or the warning tag of the message.
+ 
     procedure Write_Error_Summary;
     --  Write error summary
  
diff -Nrcpad gcc-16-20250629/gcc/ada/errsw.adb gcc-16-20250706/gcc/ada/errsw.adb
*** gcc-16-20250629/gcc/ada/errsw.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/errsw.adb	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --  D I A G N O S T I C S . D I A G N O S T I C S _ R E P O S I T O R Y     --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                                E R R S W                                 --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
***************
*** 22,27 ****
--- 22,28 ----
  -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
  ------------------------------------------------------------------------------
+ 
  with JSON_Utils; use JSON_Utils;
  with Output;     use Output;
  
*************** package body Errsw is
*** 30,36 ****
     Switches : constant array (Switch_Id)
       of Switch_Type :=
       (No_Switch_Id            =>
!         (others => <>),
        gnatwb                  =>
          (Human_Id          => new String'("Warn_On_Bad_Fixed_Value"),
           Status            => Active,
--- 31,37 ----
     Switches : constant array (Switch_Id)
       of Switch_Type :=
       (No_Switch_Id            =>
!         <>,
        gnatwb                  =>
          (Human_Id          => new String'("Warn_On_Bad_Fixed_Value"),
           Status            => Active,
diff -Nrcpad gcc-16-20250629/gcc/ada/errsw.ads gcc-16-20250706/gcc/ada/errsw.ads
*** gcc-16-20250629/gcc/ada/errsw.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/errsw.ads	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --  D I A G N O S T I C S . D I A G N O S T I C S _ R E P O S I T O R Y     --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                                E R R S W                                 --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
***************
*** 22,27 ****
--- 22,28 ----
  -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
  ------------------------------------------------------------------------------
+ 
  with Types; use Types;
  
  package Errsw is
diff -Nrcpad gcc-16-20250629/gcc/ada/errutil.adb gcc-16-20250706/gcc/ada/errutil.adb
*** gcc-16-20250629/gcc/ada/errutil.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/errutil.adb	Sun Jul  6 22:32:09 2025
*************** package body Errutil is
*** 208,214 ****
              Line                => Get_Physical_Line_Number (Sptr),
              Col                 => Get_Column_Number (Sptr),
              Compile_Time_Pragma => Is_Compile_Time_Msg,
!             Warn_Err            => Warning_Mode = Treat_As_Error,
              Warn_Chr            => Warning_Msg_Char,
              Uncond              => Is_Unconditional_Msg,
              Msg_Cont            => Continuation,
--- 208,216 ----
              Line                => Get_Physical_Line_Number (Sptr),
              Col                 => Get_Column_Number (Sptr),
              Compile_Time_Pragma => Is_Compile_Time_Msg,
!             Warn_Err            => (if Warning_Mode = Treat_As_Error
!                                     then From_Warn_As_Err
!                                     else None),
              Warn_Chr            => Warning_Msg_Char,
              Uncond              => Is_Unconditional_Msg,
              Msg_Cont            => Continuation,
diff -Nrcpad gcc-16-20250629/gcc/ada/eval_fat.adb gcc-16-20250706/gcc/ada/eval_fat.adb
*** gcc-16-20250629/gcc/ada/eval_fat.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/eval_fat.adb	Sun Jul  6 22:32:09 2025
*************** package body Eval_Fat is
*** 146,153 ****
        if UR_Is_Negative (X) then
           Fraction := -Fraction;
        end if;
- 
-       return;
     end Decompose;
  
     -------------------
--- 146,151 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_aggr.adb gcc-16-20250706/gcc/ada/exp_aggr.adb
*** gcc-16-20250629/gcc/ada/exp_aggr.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_aggr.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Aggr is
*** 865,871 ****
  
              --  Checks 8: (no delayed components)
  
!             if Is_Delayed_Aggregate (Expr) then
                 return False;
              end if;
  
--- 865,873 ----
  
              --  Checks 8: (no delayed components)
  
!             if Is_Delayed_Aggregate (Expr)
!               or else Is_Delayed_Conditional_Expression (Expr)
!             then
                 return False;
              end if;
  
*************** package body Exp_Aggr is
*** 1405,1410 ****
--- 1407,1429 ----
                             N_Iterated_Component_Association
                 then
                    null;
+ 
+                --  For mutably tagged class-wide type components that have an
+                --  initializing qualified expression, the expression must be
+                --  analyzed and resolved using the type of the qualified
+                --  expression; otherwise spurious errors would be reported
+                --  because components defined in derivations of the root type
+                --  of the mutably tagged class-wide type would not be visible.
+ 
+                --  Resolve_Aggr_Expr has previously checked that the type of
+                --  the qualified expression is a descendant of the root type
+                --  of the mutably class-wide tagged type.
+ 
+                elsif Is_Mutably_Tagged_Type (Comp_Typ)
+                  and then Nkind (Expr) = N_Qualified_Expression
+                then
+                   Analyze_And_Resolve (Expr_Q, Etype (Expr));
+ 
                 else
                    Analyze_And_Resolve (Expr_Q, Comp_Typ);
                 end if;
*************** package body Exp_Aggr is
*** 1438,1449 ****
           end if;
  
           if Present (Expr) then
!             Initialize_Component
!               (N          => N,
!                Comp       => Indexed_Comp,
!                Comp_Typ   => Comp_Typ,
!                Init_Expr  => Expr,
!                Stmts      => Stmts);
  
           --  Ada 2005 (AI-287): In case of default initialized component, call
           --  the initialization subprogram associated with the component type.
--- 1457,1510 ----
           end if;
  
           if Present (Expr) then
! 
!             --  For mutably tagged abstract class-wide types, we rely on the
!             --  type of the initializing expression to initialize the tag of
!             --  each array component.
! 
!             --  Generate:
!             --     expr_type!(Indexed_Comp) := expr;
!             --     expr_type!(Indexed_Comp)._tag := expr_type'Tag;
! 
!             if Is_Mutably_Tagged_Type (Comp_Typ)
!               and then Is_Abstract_Type (Root_Type (Comp_Typ))
!             then
!                declare
!                   Expr_Type : Entity_Id;
! 
!                begin
!                   if Nkind (Expr) in N_Has_Etype
!                     and then Present (Etype (Expr))
!                   then
!                      Expr_Type := Etype (Expr);
! 
!                   elsif Nkind (Expr) = N_Qualified_Expression then
!                      Analyze (Subtype_Mark (Expr));
!                      Expr_Type := Etype (Subtype_Mark (Expr));
! 
!                   --  Unsupported case
! 
!                   else
!                      pragma Assert (False);
!                      raise Program_Error;
!                   end if;
! 
!                   Initialize_Component
!                     (N          => N,
!                      Comp       => Unchecked_Convert_To (Expr_Type,
!                                      Indexed_Comp),
!                      Comp_Typ   => Expr_Type,
!                      Init_Expr  => Expr,
!                      Stmts      => Stmts);
!                end;
!             else
!                Initialize_Component
!                  (N          => N,
!                   Comp       => Indexed_Comp,
!                   Comp_Typ   => Comp_Typ,
!                   Init_Expr  => Expr,
!                   Stmts      => Stmts);
!             end if;
  
           --  Ada 2005 (AI-287): In case of default initialized component, call
           --  the initialization subprogram associated with the component type.
*************** package body Exp_Aggr is
*** 1457,1470 ****
           --  object creation that will invoke it otherwise.
  
           else
!             if Present (Base_Init_Proc (Ctype)) then
                 Check_Restriction (No_Default_Initialization, N);
  
                 if not Restriction_Active (No_Default_Initialization) then
                    Append_List_To (Stmts,
                      Build_Initialization_Call (N,
                        Id_Ref            => Indexed_Comp,
!                       Typ               => Ctype,
                        With_Default_Init => True));
                 end if;
  
--- 1518,1538 ----
           --  object creation that will invoke it otherwise.
  
           else
!             --  For mutably tagged class-wide types, default initialization is
!             --  performed by the init procedure of their root type.
! 
!             if Is_Mutably_Tagged_Type (Comp_Typ) then
!                Comp_Typ := Root_Type (Comp_Typ);
!             end if;
! 
!             if Present (Base_Init_Proc (Comp_Typ)) then
                 Check_Restriction (No_Default_Initialization, N);
  
                 if not Restriction_Active (No_Default_Initialization) then
                    Append_List_To (Stmts,
                      Build_Initialization_Call (N,
                        Id_Ref            => Indexed_Comp,
!                       Typ               => Comp_Typ,
                        With_Default_Init => True));
                 end if;
  
*************** package body Exp_Aggr is
*** 1473,1489 ****
                 --  be analyzed and resolved before the code for initialization
                 --  of other components.
  
!                if Has_Invariants (Ctype) then
!                   Set_Etype (Indexed_Comp, Ctype);
                    Append_To (Stmts, Make_Invariant_Call (Indexed_Comp));
                 end if;
              end if;
  
!             if Needs_Finalization (Ctype) then
                 Init_Call :=
                   Make_Init_Call
                     (Obj_Ref => New_Copy_Tree (Indexed_Comp),
!                     Typ     => Ctype);
  
                 --  Guard against a missing [Deep_]Initialize when the component
                 --  type was not properly frozen.
--- 1541,1557 ----
                 --  be analyzed and resolved before the code for initialization
                 --  of other components.
  
!                if Has_Invariants (Comp_Typ) then
!                   Set_Etype (Indexed_Comp, Comp_Typ);
                    Append_To (Stmts, Make_Invariant_Call (Indexed_Comp));
                 end if;
              end if;
  
!             if Needs_Finalization (Comp_Typ) then
                 Init_Call :=
                   Make_Init_Call
                     (Obj_Ref => New_Copy_Tree (Indexed_Comp),
!                     Typ     => Comp_Typ);
  
                 --  Guard against a missing [Deep_]Initialize when the component
                 --  type was not properly frozen.
*************** package body Exp_Aggr is
*** 1504,1512 ****
              --  is not empty, but a default init still applies, such as for
              --  Default_Value cases, in which case we won't get here. ???
  
!             if Has_DIC (Ctype) and then Present (DIC_Procedure (Ctype)) then
                 Append_To (Stmts,
!                  Build_DIC_Call (Loc, New_Copy_Tree (Indexed_Comp), Ctype));
              end if;
           end if;
  
--- 1572,1584 ----
              --  is not empty, but a default init still applies, such as for
              --  Default_Value cases, in which case we won't get here. ???
  
!             if Has_DIC (Comp_Typ)
!               and then Present (DIC_Procedure (Comp_Typ))
!             then
                 Append_To (Stmts,
!                  Build_DIC_Call (Loc,
!                    Obj_Name => New_Copy_Tree (Indexed_Comp),
!                    Typ      => Comp_Typ));
              end if;
           end if;
  
*************** package body Exp_Aggr is
*** 1518,1523 ****
--- 1590,1597 ----
        --------------
  
        function Gen_Loop (L, H : Node_Id; Expr : Node_Id) return List_Id is
+          Comp_Typ : Entity_Id;
+ 
           Is_Iterated_Component : constant Boolean :=
             Parent_Kind (Expr) = N_Iterated_Component_Association;
  
*************** package body Exp_Aggr is
*** 1573,1578 ****
--- 1647,1658 ----
                    Tcopy := New_Copy_Tree (Expr);
                    Set_Parent (Tcopy, N);
  
+                   Comp_Typ := Component_Type (Etype (N));
+ 
+                   if Is_Class_Wide_Equivalent_Type (Comp_Typ) then
+                      Comp_Typ := Corresponding_Mutably_Tagged_Type (Comp_Typ);
+                   end if;
+ 
                    --  For iterated_component_association analyze and resolve
                    --  the expression with name of the index parameter visible.
                    --  To manipulate scopes, we use entity of the implicit loop.
*************** package body Exp_Aggr is
*** 1584,1591 ****
                       begin
                          Push_Scope (Scope (Index_Parameter));
                          Enter_Name (Index_Parameter);
!                         Analyze_And_Resolve
!                           (Tcopy, Component_Type (Etype (N)));
                          End_Scope;
                       end;
  
--- 1664,1670 ----
                       begin
                          Push_Scope (Scope (Index_Parameter));
                          Enter_Name (Index_Parameter);
!                         Analyze_And_Resolve (Tcopy, Comp_Typ);
                          End_Scope;
                       end;
  
*************** package body Exp_Aggr is
*** 1593,1599 ****
                    --  resolve the expression.
  
                    else
!                      Analyze_And_Resolve (Tcopy, Component_Type (Etype (N)));
                    end if;
  
                    Expander_Mode_Restore;
--- 1672,1678 ----
                    --  resolve the expression.
  
                    else
!                      Analyze_And_Resolve (Tcopy, Comp_Typ);
                    end if;
  
                    Expander_Mode_Restore;
*************** package body Exp_Aggr is
*** 2130,2135 ****
--- 2209,2215 ----
                          Set_Loop_Actions (Others_Assoc, New_List);
                          First := False;
                       end if;
+ 
                       Expr := Get_Assoc_Expr (Others_Assoc);
                       Append_List (Gen_Loop (Low, High, Expr), To => New_Code);
                    end if;
*************** package body Exp_Aggr is
*** 2490,2501 ****
              Ref := Convert_To (Init_Typ, New_Copy_Tree (Target));
              Set_Assignment_OK (Ref);
  
!             Append_To (L,
!               Make_Procedure_Call_Statement (Loc,
!                 Name                   =>
!                   New_Occurrence_Of
!                     (Find_Controlled_Prim_Op (Init_Typ, Name_Initialize), Loc),
!                 Parameter_Associations => New_List (New_Copy_Tree (Ref))));
           end if;
        end Generate_Finalization_Actions;
  
--- 2570,2590 ----
              Ref := Convert_To (Init_Typ, New_Copy_Tree (Target));
              Set_Assignment_OK (Ref);
  
!             declare
!                Intlz : constant Entity_Id :=
!                  Find_Controlled_Prim_Op (Init_Typ, Name_Initialize);
!             begin
!                if Present (Intlz) then
!                   Append_To
!                     (L,
!                      Make_Procedure_Call_Statement
!                        (Loc,
!                         Name                   =>
!                           New_Occurrence_Of (Intlz, Loc),
!                         Parameter_Associations =>
!                           New_List (New_Copy_Tree (Ref))));
!                end if;
!             end;
           end if;
        end Generate_Finalization_Actions;
  
*************** package body Exp_Aggr is
*** 3267,3320 ****
           --  a call to the corresponding IP subprogram if available.
  
           elsif Box_Present (Comp)
!            and then Has_Non_Null_Base_Init_Proc (Etype (Selector))
!          then
!             Check_Restriction (No_Default_Initialization, N);
! 
!             if Ekind (Selector) /= E_Discriminant then
!                Generate_Finalization_Actions;
!             end if;
  
!             --  Ada 2005 (AI-287): If the component type has tasks then
!             --  generate the activation chain and master entities (except
!             --  in case of an allocator because in that case these entities
!             --  are generated by Build_Task_Allocate_Block).
  
              declare
!                Ctype            : constant Entity_Id := Etype (Selector);
!                Inside_Allocator : Boolean            := False;
!                P                : Node_Id            := Parent (N);
  
              begin
!                if Is_Task_Type (Ctype) or else Has_Task (Ctype) then
!                   while Present (P) loop
!                      if Nkind (P) = N_Allocator then
!                         Inside_Allocator := True;
!                         exit;
                       end if;
  
!                      P := Parent (P);
!                   end loop;
  
!                   if not Inside_Init_Proc and not Inside_Allocator then
!                      Build_Activation_Chain_Entity (N);
                    end if;
                 end if;
              end;
  
-             if not Restriction_Active (No_Default_Initialization) then
-                Append_List_To (L,
-                  Build_Initialization_Call (N,
-                    Id_Ref            => Make_Selected_Component (Loc,
-                                           Prefix        =>
-                                             New_Copy_Tree (Target),
-                                           Selector_Name =>
-                                             New_Occurrence_Of (Selector, Loc)),
-                    Typ               => Etype (Selector),
-                    Enclos_Type       => Typ,
-                    With_Default_Init => True));
-             end if;
- 
           --  Prepare for component assignment
  
           elsif Ekind (Selector) /= E_Discriminant
--- 3356,3440 ----
           --  a call to the corresponding IP subprogram if available.
  
           elsif Box_Present (Comp)
!            and then
!              (Has_Non_Null_Base_Init_Proc (Etype (Selector))
  
!                --  Default initialization of mutably tagged class-wide type
!                --  components is performed by the IP subprogram.
  
+                or else Is_Class_Wide_Equivalent_Type (Etype (Selector)))
+          then
              declare
!                Ctype : Entity_Id := Etype (Selector);
  
              begin
!                if Is_Class_Wide_Equivalent_Type (Ctype) then
!                   Ctype :=
!                     Root_Type (Corresponding_Mutably_Tagged_Type (Ctype));
!                end if;
! 
!                Check_Restriction (No_Default_Initialization, N);
! 
!                if Ekind (Selector) /= E_Discriminant then
!                   Generate_Finalization_Actions;
!                end if;
! 
!                --  Ada 2005 (AI-287): If the component type has tasks then
!                --  generate the activation chain and master entities (except
!                --  in case of an allocator because in that case these entities
!                --  are generated by Build_Task_Allocate_Block).
! 
!                declare
!                   Inside_Allocator : Boolean := False;
!                   P                : Node_Id := Parent (N);
! 
!                begin
!                   if Is_Task_Type (Ctype) or else Has_Task (Ctype) then
!                      while Present (P) loop
!                         if Nkind (P) = N_Allocator then
!                            Inside_Allocator := True;
!                            exit;
!                         end if;
! 
!                         P := Parent (P);
!                      end loop;
! 
!                      if not Inside_Init_Proc and not Inside_Allocator then
!                         Build_Activation_Chain_Entity (N);
                       end if;
+                   end if;
+                end;
  
!                if not Restriction_Active (No_Default_Initialization) then
!                   Append_List_To (L,
!                     Build_Initialization_Call (N,
!                       Id_Ref            => Make_Selected_Component (Loc,
!                                              Prefix        =>
!                                                New_Copy_Tree (Target),
!                                              Selector_Name =>
!                                                New_Occurrence_Of
!                                                  (Selector, Loc)),
!                       Typ               => Ctype,
!                       Enclos_Type       => Typ,
!                       With_Default_Init => True));
  
!                   if Is_Class_Wide_Equivalent_Type (Etype (Selector))
!                     and then Is_Abstract_Type (Ctype)
!                   then
!                      Error_Msg_Name_1 := Chars (Selector);
!                      Error_Msg_N
!                        ("default initialization of abstract type "
!                          & "component % not allowed??", Comp);
!                      Error_Msg_N
!                        ("\Program_Error will be raised at run time??", Comp);
! 
!                      Append_To (L,
!                         Make_Raise_Program_Error (Loc,
!                           Reason => PE_Abstract_Type_Component));
                    end if;
                 end if;
              end;
  
           --  Prepare for component assignment
  
           elsif Ekind (Selector) /= E_Discriminant
*************** package body Exp_Aggr is
*** 3471,3482 ****
                    end if;
                 end if;
  
!                Initialize_Component
!                  (N         => N,
!                   Comp      => Comp_Expr,
!                   Comp_Typ  => Etype (Selector),
!                   Init_Expr => Expr_Q,
!                   Stmts     => L);
              end if;
  
           --  comment would be good here ???
--- 3591,3617 ----
                    end if;
                 end if;
  
!                --  For mutably tagged class-wide components with a qualified
!                --  initializing expressions use the qualified expression as
!                --  its Init_Expr; required to avoid reporting spurious errors.
! 
!                if Is_Class_Wide_Equivalent_Type (Comp_Type)
!                  and then Nkind (Expression (Comp)) = N_Qualified_Expression
!                then
!                   Initialize_Component
!                     (N         => N,
!                      Comp      => Comp_Expr,
!                      Comp_Typ  => Etype (Selector),
!                      Init_Expr => Expression (Comp),
!                      Stmts     => L);
!                else
!                   Initialize_Component
!                     (N         => N,
!                      Comp      => Comp_Expr,
!                      Comp_Typ  => Etype (Selector),
!                      Init_Expr => Expr_Q,
!                      Stmts     => L);
!                end if;
              end if;
  
           --  comment would be good here ???
*************** package body Exp_Aggr is
*** 3865,3872 ****
  
        function Safe_Component (Expr : Node_Id) return Boolean;
        --  Verify that an expression cannot depend on the target being assigned
!       --  to. Return true for compile-time known values, stand-alone objects,
!       --  parameters passed by copy, calls to functions that return by copy,
        --  selected components thereof only if the aggregate's type is an array,
        --  indexed components and slices thereof only if the aggregate's type is
        --  a record, and simple expressions involving only these as operands.
--- 4000,4007 ----
  
        function Safe_Component (Expr : Node_Id) return Boolean;
        --  Verify that an expression cannot depend on the target being assigned
!       --  (which is Target_Object if it is set), return true for compile-time
!       --  known values, stand-alone objects, formal parameters passed by copy,
        --  selected components thereof only if the aggregate's type is an array,
        --  indexed components and slices thereof only if the aggregate's type is
        --  a record, and simple expressions involving only these as operands.
*************** package body Exp_Aggr is
*** 3877,3883 ****
        --  which is excluded by the above condition. Additionally, if the target
        --  is statically known, return true for arbitrarily nested selections,
        --  indexations or slicings, provided that their ultimate prefix is not
!       --  the target itself.
  
        --------------------
        -- Safe_Aggregate --
--- 4012,4019 ----
        --  which is excluded by the above condition. Additionally, if the target
        --  is statically known, return true for arbitrarily nested selections,
        --  indexations or slicings, provided that their ultimate prefix is not
!       --  the target itself, and calls to functions that take only these as
!       --  actual parameters provided that the target is not aliased.
  
        --------------------
        -- Safe_Aggregate --
*************** package body Exp_Aggr is
*** 3982,3993 ****
                    return Check_Component (Prefix (C), T_OK);
  
                 when N_Function_Call =>
!                   if Nkind (Name (C)) = N_Explicit_Dereference then
!                      return not Returns_By_Ref (Etype (Name (C)));
!                   else
!                      return not Returns_By_Ref (Entity (Name (C)));
                    end if;
  
                 when N_Indexed_Component | N_Slice =>
                    --  In a target record, these operations cannot determine
                    --  alone a component so we can recurse whatever the target.
--- 4118,4143 ----
                    return Check_Component (Prefix (C), T_OK);
  
                 when N_Function_Call =>
!                   if No (Target_Object) or else Is_Aliased (Target_Object) then
!                      return False;
                    end if;
  
+                   if Present (Parameter_Associations (C)) then
+                      declare
+                         Actual : Node_Id;
+                      begin
+                         Actual := First_Actual (C);
+                         while Present (Actual) loop
+                            if not Check_Component (Actual, T_OK) then
+                               return False;
+                            end if;
+                            Next_Actual (Actual);
+                         end loop;
+                      end;
+                   end if;
+ 
+                   return True;
+ 
                 when N_Indexed_Component | N_Slice =>
                    --  In a target record, these operations cannot determine
                    --  alone a component so we can recurse whatever the target.
*************** package body Exp_Aggr is
*** 4179,4189 ****
           --  excluding container aggregates as these are transformed into
           --  subprogram calls later.
  
!          (Nkind (Parent_Node) = N_Component_Association
!            and then not Is_Container_Aggregate (Parent (Parent_Node)))
! 
!          or else (Nkind (Parent_Node) in N_Aggregate | N_Extension_Aggregate
!                    and then not Is_Container_Aggregate (Parent_Node))
  
           --  Allocator (see Convert_Aggr_In_Allocator)
  
--- 4329,4335 ----
           --  excluding container aggregates as these are transformed into
           --  subprogram calls later.
  
!          Parent_Is_Regular_Aggregate (Parent_Node)
  
           --  Allocator (see Convert_Aggr_In_Allocator)
  
*************** package body Exp_Aggr is
*** 6150,6163 ****
        if
           --  Internal aggregates (transformed when expanding the parent),
           --  excluding container aggregates as these are transformed into
!          --  subprogram calls later. So far aggregates with self-references
!          --  are not supported if they appear in a conditional expression.
! 
!          (Nkind (Parent_Node) = N_Component_Association
!            and then not Is_Container_Aggregate (Parent (Parent_Node)))
  
!          or else (Nkind (Parent_Node) in N_Aggregate | N_Extension_Aggregate
!                    and then not Is_Container_Aggregate (Parent_Node))
  
           --  Allocator (see Convert_Aggr_In_Allocator). Sliding cannot be done
           --  in place for the time being.
--- 6296,6304 ----
        if
           --  Internal aggregates (transformed when expanding the parent),
           --  excluding container aggregates as these are transformed into
!          --  subprogram calls later.
  
!          Parent_Is_Regular_Aggregate (Parent_Node)
  
           --  Allocator (see Convert_Aggr_In_Allocator). Sliding cannot be done
           --  in place for the time being.
*************** package body Exp_Aggr is
*** 6501,6507 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Aggregate;
  
     -------------------------------
--- 6642,6648 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Aggregate;
  
     -------------------------------
*************** package body Exp_Aggr is
*** 7825,7831 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Extension_Aggregate;
  
     -----------------------------
--- 7966,7972 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Extension_Aggregate;
  
     -----------------------------
*************** package body Exp_Aggr is
*** 8703,8708 ****
--- 8844,8851 ----
        --  generated by Make_Tag_Ctrl_Assignment). But, in the case of an array
        --  aggregate, controlled subaggregates are not considered because each
        --  of their individual elements will receive an adjustment of its own.
+       --  Moreover, the result of a function call need not be adjusted if it
+       --  has already been adjusted in the called function.
  
        if Finalization_OK
          and then not Is_Inherently_Limited_Type (Comp_Typ)
*************** package body Exp_Aggr is
*** 8711,8716 ****
--- 8854,8861 ----
              and then Is_Array_Type (Comp_Typ)
              and then Needs_Finalization (Component_Type (Comp_Typ))
              and then Nkind (Unqualify (Init_Expr)) = N_Aggregate)
+         and then not (Back_End_Return_Slot
+                        and then Nkind (Init_Expr) = N_Function_Call)
        then
           Set_No_Finalize_Actions (Init_Stmt);
  
*************** package body Exp_Aggr is
*** 9437,9442 ****
--- 9582,9605 ----
        return False;
     end Must_Slide;
  
+    ---------------------------------
+    -- Parent_Is_Regular_Aggregate --
+    ---------------------------------
+ 
+    function Parent_Is_Regular_Aggregate (Par : Node_Id) return Boolean is
+    begin
+       case Nkind (Par) is
+          when N_Component_Association =>
+             return Parent_Is_Regular_Aggregate (Parent (Par));
+ 
+          when N_Extension_Aggregate | N_Aggregate =>
+             return not Is_Container_Aggregate (Par);
+ 
+          when others =>
+             return False;
+       end case;
+    end Parent_Is_Regular_Aggregate;
+ 
     ---------------------
     -- Sort_Case_Table --
     ---------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_aggr.ads gcc-16-20250706/gcc/ada/exp_aggr.ads
*** gcc-16-20250629/gcc/ada/exp_aggr.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_aggr.ads	Sun Jul  6 22:32:09 2025
*************** package Exp_Aggr is
*** 59,64 ****
--- 59,68 ----
     --  This is the case if it consists only of iterated component associations
     --  with iterator specifications, see RM 4.3.3(20.2/5).
  
+    function Parent_Is_Regular_Aggregate (Par : Node_Id) return Boolean;
+    --  Return True if Par is an aggregate that is not a container aggregate, or
+    --  a component association of such an aggregate.
+ 
     function Static_Array_Aggregate (N : Node_Id) return Boolean;
     --  N is an array aggregate that may have a component association with
     --  an others clause and a range. If bounds are static and the expressions
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_attr.adb gcc-16-20250706/gcc/ada/exp_attr.adb
*** gcc-16-20250629/gcc/ada/exp_attr.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_attr.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Attr is
*** 5353,5374 ****
           Typ : constant Entity_Id := Etype (N);
  
        begin
!          --  If the prefix is X'Class, we transform it into a direct reference
!          --  to the class-wide type, because the back end must not see a 'Class
!          --  reference. See also 'Size.
  
           if Is_Entity_Name (Pref)
             and then Is_Class_Wide_Type (Entity (Pref))
           then
!             Rewrite (Prefix (N), New_Occurrence_Of (Entity (Pref), Loc));
!             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:
--- 5353,5394 ----
           Typ : constant Entity_Id := Etype (N);
  
        begin
!          --  Tranform T'Class'Max_Size_In_Storage_Elements (for any T) into
!          --  Storage_Count'Pos (Storage_Count'Last), because it must include
!          --  all descendants, which can be arbitrarily large. Note that the
!          --  back end must not see any 'Class attribute references.
!          --  The 'Pos is to make it be of type universal_integer.
!          --
!          --  ???If T'Class'Size is specified, it should probably affect
!          --  T'Class'Max_Size_In_Storage_Elements accordingly.
  
           if Is_Entity_Name (Pref)
             and then Is_Class_Wide_Type (Entity (Pref))
           then
!             declare
!                Storage_Count_Type : constant Entity_Id :=
!                  RTE (RE_Storage_Count);
!                Attr : constant Node_Id :=
!                  Make_Attribute_Reference (Loc,
!                    Prefix => New_Occurrence_Of (Storage_Count_Type, Loc),
!                    Attribute_Name => Name_Pos,
!                    Expressions => New_List (
!                      Make_Attribute_Reference (Loc,
!                        Prefix => New_Occurrence_Of (Storage_Count_Type, Loc),
!                        Attribute_Name => Name_Last)));
!             begin
!                Rewrite (N, Attr);
!                Analyze_And_Resolve (N, Typ);
!                return;
!             end;
  
           --  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.
  
!          elsif Needs_Finalization (Ptyp)
!            and then not Header_Size_Added (N)
!          then
              Set_Header_Size_Added (N);
  
              --  Generate:
*************** package body Exp_Attr is
*** 8756,8762 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Attribute_Reference;
  
     --------------------------------
--- 8776,8782 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Attribute_Reference;
  
     --------------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch11.adb gcc-16-20250706/gcc/ada/exp_ch11.adb
*** gcc-16-20250629/gcc/ada/exp_ch11.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch11.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Ch11 is
*** 1970,1975 ****
--- 1970,1977 ----
           when CE_Tag_Check_Failed =>
              Add_Str_To_Name_Buffer ("CE_Tag_Check");
  
+          when PE_Abstract_Type_Component =>
+             Add_Str_To_Name_Buffer ("PE_Abstract_Type_Component");
           when PE_Access_Before_Elaboration =>
              Add_Str_To_Name_Buffer ("PE_Access_Before_Elaboration");
           when PE_Accessibility_Check_Failed =>
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch3.adb gcc-16-20250706/gcc/ada/exp_ch3.adb
*** gcc-16-20250629/gcc/ada/exp_ch3.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch3.adb	Sun Jul  6 22:32:09 2025
*************** with Sem_Res;        use Sem_Res;
*** 69,74 ****
--- 69,75 ----
  with Sem_SCIL;       use Sem_SCIL;
  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;
*** 77,82 ****
--- 78,84 ----
  with Tbuild;         use Tbuild;
  with Ttypes;         use Ttypes;
  with Validsw;        use Validsw;
+ with Warnsw;         use Warnsw;
  
  package body Exp_Ch3 is
  
*************** package body Exp_Ch3 is
*** 340,348 ****
     --     typSO          provides result of 'Output attribute
     --     typPI          provides result of 'Put_Image attribute
     --
!    --  The following entries are additionally present for non-limited tagged
!    --  types, and implement additional dispatching operations for predefined
!    --  operations:
     --
     --     _equality      implements "=" operator
     --     _assign        implements assignment operation
--- 342,350 ----
     --     typSO          provides result of 'Output attribute
     --     typPI          provides result of 'Put_Image attribute
     --
!    --  The following entries implement additional dispatching operations for
!    --  predefined operations. Deep finalization is present on all tagged types;
!    --  the others only on nonlimited tagged types:
     --
     --     _equality      implements "=" operator
     --     _assign        implements assignment operation
*************** package body Exp_Ch3 is
*** 399,405 ****
       (Tag_Typ    : Entity_Id;
        Renamed_Eq : Entity_Id) return List_Id;
     --  Create the bodies of the predefined primitives that are described in
!    --  Predefined_Primitive_Specs. When not empty, Renamed_Eq must denote
     --  the defining unit name of the type's predefined equality as returned
     --  by Make_Predefined_Primitive_Specs.
  
--- 401,407 ----
       (Tag_Typ    : Entity_Id;
        Renamed_Eq : Entity_Id) return List_Id;
     --  Create the bodies of the predefined primitives that are described in
!    --  Make_Predefined_Primitive_Specs. When not empty, Renamed_Eq must denote
     --  the defining unit name of the type's predefined equality as returned
     --  by Make_Predefined_Primitive_Specs.
  
*************** package body Exp_Ch3 is
*** 671,677 ****
        --------------------
  
        function Init_Component return List_Id is
!          Comp : Node_Id;
  
        begin
           Comp :=
--- 673,680 ----
        --------------------
  
        function Init_Component return List_Id is
!          Comp   : Node_Id;
!          Result : List_Id;
  
        begin
           Comp :=
*************** package body Exp_Ch3 is
*** 681,687 ****
  
           if Has_Default_Aspect (A_Type) then
              Set_Assignment_OK (Comp);
!             return New_List (
                Make_Assignment_Statement (Loc,
                  Name       => Comp,
                  Expression =>
--- 684,690 ----
  
           if Has_Default_Aspect (A_Type) then
              Set_Assignment_OK (Comp);
!             Result := New_List (
                Make_Assignment_Statement (Loc,
                  Name       => Comp,
                  Expression =>
*************** package body Exp_Ch3 is
*** 690,696 ****
  
           elsif Comp_Simple_Init then
              Set_Assignment_OK (Comp);
!             return New_List (
                Make_Assignment_Statement (Loc,
                  Name       => Comp,
                  Expression =>
--- 693,699 ----
  
           elsif Comp_Simple_Init then
              Set_Assignment_OK (Comp);
!             Result := New_List (
                Make_Assignment_Statement (Loc,
                  Name       => Comp,
                  Expression =>
*************** package body Exp_Ch3 is
*** 701,707 ****
  
           else
              Clean_Task_Names (Comp_Type, Proc_Id);
!             return
                Build_Initialization_Call
                  (N            => Nod,
                   Id_Ref       => Comp,
--- 704,710 ----
  
           else
              Clean_Task_Names (Comp_Type, Proc_Id);
!             Result :=
                Build_Initialization_Call
                  (N            => Nod,
                   Id_Ref       => Comp,
*************** package body Exp_Ch3 is
*** 709,714 ****
--- 712,730 ----
                   In_Init_Proc => True,
                   Enclos_Type  => A_Type);
           end if;
+ 
+          --  Raise Program_Error in the init procedure of arrays when the type
+          --  of their components is a mutably tagged abstract class-wide type.
+ 
+          if Is_Class_Wide_Equivalent_Type (Component_Type (A_Type))
+            and then Is_Abstract_Type (Comp_Type)
+          then
+             Append_To (Result,
+               Make_Raise_Program_Error (Loc,
+                 Reason => PE_Abstract_Type_Component));
+          end if;
+ 
+          return Result;
        end Init_Component;
  
        ------------------------
*************** package body Exp_Ch3 is
*** 2675,2683 ****
  
           Exp_Q := Unqualify (Exp);
  
!          --  Adjust the component if controlled, except if it is an aggregate
!          --  that will be expanded inline (but note that the case of container
!          --  aggregates does require component adjustment), or a function call.
           --  Note that, when we don't inhibit component adjustment, the tag
           --  will be automatically inserted by Make_Tag_Ctrl_Assignment in the
           --  tagged case. Otherwise, we have to generate a tag assignment here.
--- 2691,2700 ----
  
           Exp_Q := Unqualify (Exp);
  
!          --  Adjust the component if controlled, except if the expression is an
!          --  aggregate that will be expanded inline (but note that the case of
!          --  container aggregates does require component adjustment), or else
!          --  a function call whose result is adjusted in the called function.
           --  Note that, when we don't inhibit component adjustment, the tag
           --  will be automatically inserted by Make_Tag_Ctrl_Assignment in the
           --  tagged case. Otherwise, we have to generate a tag assignment here.
*************** package body Exp_Ch3 is
*** 2686,2692 ****
             and then (Nkind (Exp_Q) not in N_Aggregate | N_Extension_Aggregate
                        or else Is_Container_Aggregate (Exp_Q))
             and then not Is_Build_In_Place_Function_Call (Exp)
!            and then Nkind (Exp) /= N_Function_Call
           then
              Set_No_Finalize_Actions (First (Res));
  
--- 2703,2710 ----
             and then (Nkind (Exp_Q) not in N_Aggregate | N_Extension_Aggregate
                        or else Is_Container_Aggregate (Exp_Q))
             and then not Is_Build_In_Place_Function_Call (Exp)
!            and then not (Back_End_Return_Slot
!                           and then Nkind (Exp) = N_Function_Call)
           then
              Set_No_Finalize_Actions (First (Res));
  
*************** package body Exp_Ch3 is
*** 3323,3328 ****
--- 3341,3357 ----
                   Make_Tag_Assignment_From_Type
                     (Loc, Make_Identifier (Loc, Name_uInit), Rec_Type));
  
+                --  Ensure that Program_Error is raised if a mutably class-wide
+                --  abstract tagged type is initialized by default.
+ 
+                if Is_Abstract_Type (Rec_Type)
+                  and then Is_Mutably_Tagged_Type (Class_Wide_Type (Rec_Type))
+                then
+                   Append_To (Init_Tags_List,
+                     Make_Raise_Program_Error (Loc,
+                       Reason => PE_Abstract_Type_Component));
+                end if;
+ 
                 --  Ada 2005 (AI-251): Initialize the secondary tags components
                 --  located at fixed positions (tags whose position depends on
                 --  variable size components are initialized later ---see below)
*************** package body Exp_Ch3 is
*** 3744,3749 ****
--- 3773,3788 ----
                 --  Explicit initialization
  
                 if Present (Expression (Decl)) then
+ 
+                   --  Ensure that the type of the expression initializing a
+                   --  mutably tagged class-wide type component is frozen.
+ 
+                   if Nkind (Expression (Decl)) = N_Qualified_Expression
+                     and then Is_Class_Wide_Equivalent_Type (Etype (Id))
+                   then
+                      Freeze_Before (N, Etype (Expression (Decl)));
+                   end if;
+ 
                    if Is_CPP_Constructor_Call (Expression (Decl)) then
                       Actions :=
                         Build_Initialization_Call
*************** package body Exp_Ch3 is
*** 3915,3920 ****
--- 3954,3968 ----
                            Discr_Map           => Discr_Map,
                            Init_Control_Actual => Init_Control_Actual);
  
+                      if Is_Mutably_Tagged_CW_Equivalent_Type (Etype (Id))
+                        and then not Is_Parent
+                        and then Is_Abstract_Type (Typ)
+                      then
+                         Append_To (Init_Call_Stmts,
+                           Make_Raise_Program_Error (Comp_Loc,
+                             Reason => PE_Abstract_Type_Component));
+                      end if;
+ 
                       if Is_Parent then
                          --  This is tricky. At first it looks like
                          --  we are going to end up with nested
*************** package body Exp_Ch3 is
*** 4535,4540 ****
--- 4583,4593 ----
              if Present (Expression (Comp_Decl))
                or else Has_Non_Null_Base_Init_Proc (Typ)
                or else Component_Needs_Simple_Initialization (Typ)
+ 
+                --  Mutably tagged class-wide types require the init-proc since
+                --  it takes care of their default initialization.
+ 
+               or else Is_Mutably_Tagged_CW_Equivalent_Type (Typ)
              then
                 return True;
              end if;
*************** package body Exp_Ch3 is
*** 5106,5111 ****
--- 5159,5190 ----
           if Is_Library_Level_Entity (Typ) then
              Set_Is_Public (Op);
           end if;
+ 
+       --  Otherwise, the result is defined in terms of the primitive equals
+       --  operator (RM 4.5.2 (24/3)). Report a warning if some component of
+       --  the untagged record has defined a user-defined "=", because it can
+       --  be surprising that the predefined "=" takes precedence over it.
+       --  This warning is not reported when Build_Eq is True because the
+       --  expansion of the built body will call Expand_Composite_Equality
+       --  that will report it if necessary.
+ 
+       elsif Warn_On_Ignored_Equality then
+          Comp := First_Component (Typ);
+ 
+          while Present (Comp) loop
+             if Present (User_Defined_Eq (Etype (Comp)))
+               and then not Is_Record_Type (Etype (Comp))
+               and then not Is_Intrinsic_Subprogram
+                              (User_Defined_Eq (Etype (Comp)))
+             then
+                Warn_On_Ignored_Equality_Operator
+                  (Typ      => Typ,
+                   Comp_Typ => Etype (Comp),
+                   Loc      => Sloc (User_Defined_Eq (Etype (Comp))));
+             end if;
+ 
+             Next_Component (Comp);
+          end loop;
        end if;
     end Build_Untagged_Record_Equality;
  
*************** package body Exp_Ch3 is
*** 5877,5883 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_Freeze_Enumeration_Type;
  
     -------------------------------
--- 5956,5962 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_Freeze_Enumeration_Type;
  
     -------------------------------
*************** package body Exp_Ch3 is
*** 6829,6836 ****
  
        procedure Count_Default_Sized_Task_Stacks
          (Typ         : Entity_Id;
!          Pri_Stacks  : out Int;
!          Sec_Stacks  : out Int);
        --  Count the number of default-sized primary and secondary task stacks
        --  required for task objects contained within type Typ. If the number of
        --  task objects contained within the type is not known at compile time
--- 6908,6915 ----
  
        procedure Count_Default_Sized_Task_Stacks
          (Typ         : Entity_Id;
!          Pri_Stacks  : out Nat;
!          Sec_Stacks  : out Nat);
        --  Count the number of default-sized primary and secondary task stacks
        --  required for task objects contained within type Typ. If the number of
        --  task objects contained within the type is not known at compile time
*************** package body Exp_Ch3 is
*** 6902,6908 ****
  
           --  Processing for objects that require finalization actions
  
!          if Needs_Finalization (Ret_Typ) then
              declare
                 Decls       : constant List_Id := New_List;
                 Fin_Coll_Id : constant Entity_Id :=
--- 6981,6989 ----
  
           --  Processing for objects that require finalization actions
  
!          if Needs_Finalization (Ret_Typ)
!            and then not Has_Relaxed_Finalization (Ret_Typ)
!          then
              declare
                 Decls       : constant List_Id := New_List;
                 Fin_Coll_Id : constant Entity_Id :=
*************** package body Exp_Ch3 is
*** 7105,7112 ****
  
        procedure Count_Default_Sized_Task_Stacks
          (Typ         : Entity_Id;
!          Pri_Stacks  : out Int;
!          Sec_Stacks  : out Int)
        is
           Component : Entity_Id;
  
--- 7186,7193 ----
  
        procedure Count_Default_Sized_Task_Stacks
          (Typ         : Entity_Id;
!          Pri_Stacks  : out Nat;
!          Sec_Stacks  : out Nat)
        is
           Component : Entity_Id;
  
*************** package body Exp_Ch3 is
*** 7178,7185 ****
  
                 while Present (Component) loop
                    declare
!                      P : Int;
!                      S : Int;
  
                    begin
                       Count_Default_Sized_Task_Stacks (Etype (Component), P, S);
--- 7259,7266 ----
  
                 while Present (Component) loop
                    declare
!                      P : Nat;
!                      S : Nat;
  
                    begin
                       Count_Default_Sized_Task_Stacks (Etype (Component), P, S);
*************** package body Exp_Ch3 is
*** 7597,7603 ****
          and then not (Is_Array_Type (Typ) and then Has_Init_Expression (N))
        then
           declare
!             PS_Count, SS_Count : Int;
           begin
              Count_Default_Sized_Task_Stacks (Typ, PS_Count, SS_Count);
              Increment_Primary_Stack_Count (PS_Count);
--- 7678,7684 ----
          and then not (Is_Array_Type (Typ) and then Has_Init_Expression (N))
        then
           declare
!             PS_Count, SS_Count : Nat;
           begin
              Count_Default_Sized_Task_Stacks (Typ, PS_Count, SS_Count);
              Increment_Primary_Stack_Count (PS_Count);
*************** package body Exp_Ch3 is
*** 9158,9164 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Object_Declaration;
  
     ---------------------------------
--- 9239,9245 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Object_Declaration;
  
     ---------------------------------
*************** package body Exp_Ch3 is
*** 9420,9426 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_Tagged_Root;
  
     ------------------------------
--- 9501,9507 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_Tagged_Root;
  
     ------------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch4.adb gcc-16-20250706/gcc/ada/exp_ch4.adb
*** gcc-16-20250629/gcc/ada/exp_ch4.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch4.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Ch4 is
*** 177,188 ****
     --  integer type. This is a case where top level processing is required to
     --  handle overflow checks in subtrees.
  
-    procedure Fixup_Universal_Fixed_Operation (N : Node_Id);
-    --  N is a N_Op_Divide or N_Op_Multiply node whose result is universal
-    --  fixed. We do not have such a type at runtime, so the purpose of this
-    --  routine is to find the real type by looking up the tree. We also
-    --  determine if the operation must be rounded.
- 
     procedure Get_First_Index_Bounds (T : Entity_Id; Lo, Hi : out Uint);
     --  T is an array whose index bounds are all known at compile time. Return
     --  the value of the low and high bounds of the first index of T.
--- 177,182 ----
*************** package body Exp_Ch4 is
*** 240,245 ****
--- 234,243 ----
     --  skipped if the operation is done in Bignum mode but that's fine, since
     --  the Bignum call takes care of everything.
  
+    function New_Assign_Copy (N : Node_Id; Expr : Node_Id) return Node_Id;
+    --  N is an assignment statement. Return a copy of N with the same name but
+    --  expression changed to Expr and perform a couple of adjustments.
+ 
     procedure Narrow_Large_Operation (N : Node_Id);
     --  Try to compute the result of a large operation in a narrower type than
     --  its nominal type. This is mainly aimed at getting rid of operations done
*************** package body Exp_Ch4 is
*** 434,440 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Build_Boolean_Array_Proc_Call;
  
     ---------------------------------
--- 432,438 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Build_Boolean_Array_Proc_Call;
  
     ---------------------------------
*************** package body Exp_Ch4 is
*** 727,733 ****
           --  adjust after the assignment but, in either case, we do not
           --  finalize before since the target is newly allocated memory.
  
!          if Nkind (Exp) = N_Function_Call then
              Set_No_Ctrl_Actions (Assign);
           else
              Set_No_Finalize_Actions (Assign);
--- 725,731 ----
           --  adjust after the assignment but, in either case, we do not
           --  finalize before since the target is newly allocated memory.
  
!          if Back_End_Return_Slot and then Nkind (Exp) = N_Function_Call then
              Set_No_Ctrl_Actions (Assign);
           else
              Set_No_Finalize_Actions (Assign);
*************** package body Exp_Ch4 is
*** 869,878 ****
        --  as qualified expression must be rewritten into the form expected by
        --  Expand_Container_Aggregate, resp. Two_Pass_Aggregate_Expansion.
  
!       if Nkind (Exp) = N_Aggregate
!         and then (Has_Aspect (T, Aspect_Aggregate)
!                    or else Is_Two_Pass_Aggregate (Exp))
!       then
           Temp := Make_Temporary (Loc, 'P', N);
           Set_Analyzed (Exp, False);
           Insert_Action (N,
--- 867,873 ----
        --  as qualified expression must be rewritten into the form expected by
        --  Expand_Container_Aggregate, resp. Two_Pass_Aggregate_Expansion.
  
!       if Is_Container_Aggregate (Exp) or else Is_Two_Pass_Aggregate (Exp) then
           Temp := Make_Temporary (Loc, 'P', N);
           Set_Analyzed (Exp, False);
           Insert_Action (N,
*************** package body Exp_Ch4 is
*** 1241,1247 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_Allocator_Expression;
  
     -----------------------------
--- 1236,1242 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_Allocator_Expression;
  
     -----------------------------
*************** package body Exp_Ch4 is
*** 2469,2489 ****
  
           declare
              Op : constant Entity_Id := Find_Primitive_Eq (Comp_Type);
           begin
!             if Warn_On_Ignored_Equality
!               and then Present (Op)
                and then not In_Predefined_Unit (Base_Type (Comp_Type))
                and then not Is_Intrinsic_Subprogram (Op)
              then
                 pragma Assert
                   (Is_First_Subtype (Outer_Type)
                     or else Is_Generic_Actual_Type (Outer_Type));
!                Error_Msg_Node_2 := Comp_Type;
!                Error_Msg_N
!                  ("?_q?""="" for type & uses predefined ""="" for }",
!                   Outer_Type);
!                Error_Msg_Sloc := Sloc (Op);
!                Error_Msg_N ("\?_q?""="" # is ignored here", Outer_Type);
              end if;
           end;
  
--- 2464,2483 ----
  
           declare
              Op : constant Entity_Id := Find_Primitive_Eq (Comp_Type);
+ 
           begin
!             if Present (Op)
                and then not In_Predefined_Unit (Base_Type (Comp_Type))
                and then not Is_Intrinsic_Subprogram (Op)
              then
                 pragma Assert
                   (Is_First_Subtype (Outer_Type)
                     or else Is_Generic_Actual_Type (Outer_Type));
! 
!                Warn_On_Ignored_Equality_Operator
!                  (Typ      => Outer_Type,
!                   Comp_Typ => Comp_Type,
!                   Loc      => Sloc (Op));
              end if;
           end;
  
*************** package body Exp_Ch4 is
*** 5073,5079 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Allocator;
  
     -----------------------
--- 5067,5073 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Allocator;
  
     -----------------------
*************** package body Exp_Ch4 is
*** 5191,5196 ****
--- 5185,5192 ----
        --  expansion until the (immediate) parent is rewritten as a return
        --  statement (or is already the return statement). Likewise if it is
        --  in the context of an object declaration that can be optimized.
+       --  Likewise if it is in the context of a regular agggregate and the
+       --  type should not be copied.
  
        if not Expansion_Delayed (N) then
           declare
*************** package body Exp_Ch4 is
*** 5198,5203 ****
--- 5194,5201 ----
           begin
              if Nkind (Uncond_Par) = N_Simple_Return_Statement
                or else Is_Optimizable_Declaration (Uncond_Par)
+               or else (Parent_Is_Regular_Aggregate (Uncond_Par)
+                         and then not Is_Copy_Type (Typ))
              then
                 Delay_Conditional_Expressions_Between (N, Uncond_Par);
              end if;
*************** package body Exp_Ch4 is
*** 5377,5393 ****
              if Optimize_Assignment_Stmt then
                 --  We directly copy the parent node to preserve its flags
  
!                Stmts := New_List (New_Copy (Par));
!                Set_Sloc       (First (Stmts), Alt_Loc);
!                Set_Name       (First (Stmts), New_Copy_Tree (Name (Par)));
!                Set_Expression (First (Stmts), Alt_Expr);
! 
!                --  If the expression is itself a conditional expression whose
!                --  expansion has been delayed, analyze it again and expand it.
! 
!                if Is_Delayed_Conditional_Expression (Alt_Expr) then
!                   Unanalyze_Delayed_Conditional_Expression (Alt_Expr);
!                end if;
  
              --  Generate:
              --    return AX;
--- 5375,5381 ----
              if Optimize_Assignment_Stmt then
                 --  We directly copy the parent node to preserve its flags
  
!                Stmts := New_List (New_Assign_Copy (Par, Alt_Expr));
  
              --  Generate:
              --    return AX;
*************** package body Exp_Ch4 is
*** 5805,5812 ****
        --  expansion until the (immediate) parent is rewritten as a return
        --  statement (or is already the return statement). Likewise if it is
        --  in the context of an object declaration that can be optimized.
!       --  Note that this deals with the case of the elsif part of the if
!       --  expression, if it exists.
  
        if not Expansion_Delayed (N) then
           declare
--- 5793,5801 ----
        --  expansion until the (immediate) parent is rewritten as a return
        --  statement (or is already the return statement). Likewise if it is
        --  in the context of an object declaration that can be optimized.
!       --  Likewise if it is in the context of a regular agggregate and the
!       --  type should not be copied. Note that this deals with the case of
!       --  the elsif part of the if expression, if it exists.
  
        if not Expansion_Delayed (N) then
           declare
*************** package body Exp_Ch4 is
*** 5814,5819 ****
--- 5803,5810 ----
           begin
              if Nkind (Uncond_Par) = N_Simple_Return_Statement
                or else Is_Optimizable_Declaration (Uncond_Par)
+               or else (Parent_Is_Regular_Aggregate (Uncond_Par)
+                         and then not Is_Copy_Type (Typ))
              then
                 Delay_Conditional_Expressions_Between (N, Uncond_Par);
              end if;
*************** package body Exp_Ch4 is
*** 5916,5941 ****
  
           --  We directly copy the parent node to preserve its flags
  
!          New_Then := New_Copy (Par);
!          Set_Sloc       (New_Then, Sloc (Thenx));
!          Set_Name       (New_Then, New_Copy_Tree (Name (Par)));
!          Set_Expression (New_Then, Relocate_Node (Thenx));
! 
!          --  If the expression is itself a conditional expression whose
!          --  expansion has been delayed, analyze it again and expand it.
! 
!          if Is_Delayed_Conditional_Expression (Expression (New_Then)) then
!             Unanalyze_Delayed_Conditional_Expression (Expression (New_Then));
!          end if;
! 
!          New_Else := New_Copy (Par);
!          Set_Sloc       (New_Else, Sloc (Elsex));
!          Set_Name       (New_Else, New_Copy_Tree (Name (Par)));
!          Set_Expression (New_Else, Relocate_Node (Elsex));
! 
!          if Is_Delayed_Conditional_Expression (Expression (New_Else)) then
!             Unanalyze_Delayed_Conditional_Expression (Expression (New_Else));
!          end if;
  
           If_Stmt :=
             Make_Implicit_If_Statement (N,
--- 5907,5914 ----
  
           --  We directly copy the parent node to preserve its flags
  
!          New_Then := New_Assign_Copy (Par, Relocate_Node (Thenx));
!          New_Else := New_Assign_Copy (Par, Relocate_Node (Elsex));
  
           If_Stmt :=
             Make_Implicit_If_Statement (N,
*************** package body Exp_Ch4 is
*** 7785,7791 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Null;
  
     ---------------------
--- 7758,7764 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Null;
  
     ---------------------
*************** package body Exp_Ch4 is
*** 9170,9176 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Op_Expon;
  
     --------------------
--- 9143,9149 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Op_Expon;
  
     --------------------
*************** package body Exp_Ch4 is
*** 11312,11322 ****
        -----------------------------------
  
        procedure Handle_Changed_Representation is
!          Temp : Entity_Id;
           Decl : Node_Id;
-          Odef : Node_Id;
           N_Ix : Node_Id;
!          Cons : List_Id;
  
        begin
           --  Nothing else to do if no change of representation
--- 11285,11296 ----
        -----------------------------------
  
        procedure Handle_Changed_Representation is
!          Cons : List_Id;
           Decl : Node_Id;
           N_Ix : Node_Id;
!          Odef : Node_Id;
!          Stmt : Node_Id;
!          Temp : Entity_Id;
  
        begin
           --  Nothing else to do if no change of representation
*************** package body Exp_Ch4 is
*** 11459,11477 ****
                  Defining_Identifier => Temp,
                  Object_Definition   => Odef);
  
!             Set_No_Initialization (Decl, True);
  
              --  Insert required actions. It is essential to suppress checks
              --  since we have suppressed default initialization, which means
              --  that the variable we create may have no discriminants.
  
!             Insert_Actions (N,
!               New_List (
!                 Decl,
!                 Make_Assignment_Statement (Loc,
!                   Name       => New_Occurrence_Of (Temp, Loc),
!                   Expression => Relocate_Node (N))),
!                 Suppress => All_Checks);
  
              Rewrite (N, New_Occurrence_Of (Temp, Loc));
              return;
--- 11433,11456 ----
                  Defining_Identifier => Temp,
                  Object_Definition   => Odef);
  
!             --  The temporary need not be initialized
! 
!             Set_No_Initialization (Decl);
! 
!             Stmt :=
!               Make_Assignment_Statement (Loc,
!                 Name       => New_Occurrence_Of (Temp, Loc),
!                 Expression => Relocate_Node (N));
! 
!             --  And, therefore, cannot be finalized
! 
!             Set_No_Finalize_Actions (Stmt);
  
              --  Insert required actions. It is essential to suppress checks
              --  since we have suppressed default initialization, which means
              --  that the variable we create may have no discriminants.
  
!             Insert_Actions (N, New_List (Decl, Stmt), Suppress => All_Checks);
  
              Rewrite (N, New_Occurrence_Of (Temp, Loc));
              return;
*************** package body Exp_Ch4 is
*** 13594,13600 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Insert_Dereference_Action;
  
     --------------------------------
--- 13573,13579 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Insert_Dereference_Action;
  
     --------------------------------
*************** package body Exp_Ch4 is
*** 14223,14228 ****
--- 14202,14240 ----
        end if;
     end Narrow_Large_Operation;
  
+    ---------------------
+    -- New_Assign_Copy --
+    ---------------------
+ 
+    function New_Assign_Copy (N : Node_Id; Expr : Node_Id) return Node_Id is
+       New_N : constant Node_Id := New_Copy (N);
+ 
+    begin
+       Set_Sloc       (New_N, Sloc (Expr));
+       Set_Name       (New_N, New_Copy_Tree (Name (N)));
+       Set_Expression (New_N, Expr);
+ 
+       --  The result of a function call need not be adjusted if it has
+       --  already been adjusted in the called function.
+ 
+       if No_Finalize_Actions (New_N)
+         and then Back_End_Return_Slot
+         and then Nkind (Expr) = N_Function_Call
+       then
+          Set_No_Finalize_Actions (New_N, False);
+          Set_No_Ctrl_Actions (New_N);
+       end if;
+ 
+       --  If the expression is itself a conditional expression whose
+       --  expansion has been delayed, analyze it again and expand it.
+ 
+       if Is_Delayed_Conditional_Expression (Expr) then
+          Unanalyze_Delayed_Conditional_Expression (Expr);
+       end if;
+ 
+       return New_N;
+    end New_Assign_Copy;
+ 
     --------------------------------
     -- Optimize_Length_Comparison --
     --------------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch4.ads gcc-16-20250706/gcc/ada/exp_ch4.ads
*** gcc-16-20250629/gcc/ada/exp_ch4.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch4.ads	Sun Jul  6 22:32:09 2025
*************** package Exp_Ch4 is
*** 124,127 ****
--- 124,133 ----
     --  have special circuitry in Expand_N_Type_Conversion to promote both of
     --  the operands to type Integer.
  
+    procedure Fixup_Universal_Fixed_Operation (N : Node_Id);
+    --  N is a N_Op_Divide or N_Op_Multiply node whose result is universal
+    --  fixed. We do not have such a type at runtime, so the purpose of this
+    --  routine is to find the real type by looking up the tree. We also
+    --  determine if the operation must be rounded.
+ 
  end Exp_Ch4;
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch5.adb gcc-16-20250706/gcc/ada/exp_ch5.adb
*** gcc-16-20250629/gcc/ada/exp_ch5.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch5.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Ch5 is
*** 190,195 ****
--- 190,198 ----
     --  specification and Container is either the Container (for OF) or the
     --  iterator (for IN).
  
+    procedure Expand_Loop_Flow_Statement (N : N_Loop_Flow_Statement_Id);
+    --  Common processing for expansion of "loop flow" statements
+ 
     procedure Expand_Predicated_Loop (N : Node_Id);
     --  Expand for loop over predicated subtype
  
*************** package body Exp_Ch5 is
*** 280,293 ****
            Statements => Stats,
            End_Label  => Empty);
  
!       --  If the contruct has a specified loop name, preserve it in the new
!       --  loop, for possible use in exit statements.
  
!       if Present (Identifier (N))
!         and then Comes_From_Source (Identifier (N))
!       then
!          Set_Identifier (New_Loop, Identifier (N));
!       end if;
     end Build_Formal_Container_Iteration;
  
     ------------------------------
--- 283,293 ----
            Statements => Stats,
            End_Label  => Empty);
  
!       --  Preserve the construct's loop name in the new loop, for possible use
!       --  in exit statements.
  
!       pragma Assert (Present (Identifier (N)));
!       Set_Identifier (New_Loop, Identifier (N));
     end Build_Formal_Container_Iteration;
  
     ------------------------------
*************** package body Exp_Ch5 is
*** 1154,1160 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_Assign_Array;
  
     ------------------------------
--- 1154,1160 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_Assign_Array;
  
     ------------------------------
*************** package body Exp_Ch5 is
*** 3455,3461 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Assignment_Statement;
  
     ------------------------------
--- 3455,3461 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Assignment_Statement;
  
     ------------------------------
*************** package body Exp_Ch5 is
*** 4425,4440 ****
        end;
     end Expand_N_Case_Statement;
  
     -----------------------------
     -- Expand_N_Exit_Statement --
     -----------------------------
  
-    --  The only processing required is to deal with a possible C/Fortran
-    --  boolean value used as the condition for the exit statement.
- 
     procedure Expand_N_Exit_Statement (N : Node_Id) is
     begin
!       Adjust_Condition (Condition (N));
     end Expand_N_Exit_Statement;
  
     ----------------------------------
--- 4425,4522 ----
        end;
     end Expand_N_Case_Statement;
  
+    ---------------------------------
+    -- Expand_N_Continue_Statement --
+    ---------------------------------
+ 
+    procedure Expand_N_Continue_Statement (N : Node_Id) is
+       X : constant Node_Id := Call_Or_Target_Loop (N);
+ 
+       Loc : constant Source_Ptr := Sloc (N);
+ 
+       Label : E_Label_Id;
+    begin
+       if No (X) then
+          return;
+       end if;
+ 
+       if Nkind (X) = N_Procedure_Call_Statement then
+          Replace (N, X);
+          Analyze (N);
+          return;
+       end if;
+ 
+       Expand_Loop_Flow_Statement (N);
+ 
+       declare
+          L : constant E_Loop_Id := Call_Or_Target_Loop (N);
+          M : constant Node_Id := Continue_Mark (L);
+          A : constant Node_Id := Next (M);
+       begin
+          if not (Present (A) and then Nkind (A) = N_Label) then
+             --  This is the first continue statement that is expanded for this
+             --  loop; we set up the label that the goto statement will target.
+             declare
+                P : constant Node_Id := Atree.Node_Parent (L);
+ 
+                Decl_List : constant List_Id :=
+                  (if Nkind (P) = N_Implicit_Label_Declaration
+                   then List_Containing (P)
+                   else Declarations (Parent (Parent (P))));
+ 
+                Label_Entity : constant Entity_Id :=
+                  Make_Defining_Identifier
+                    (Loc, New_External_Name (Chars (L), 'C'));
+                Label_Id     : constant N_Identifier_Id :=
+                  Make_Identifier (Loc, Chars (Label_Entity));
+                Label_Node   : constant N_Label_Id :=
+                  Make_Label (Loc, Label_Id);
+                Label_Decl   : constant N_Implicit_Label_Declaration_Id :=
+                  Make_Implicit_Label_Declaration
+                    (Loc, Label_Entity, Label_Node);
+             begin
+                Mutate_Ekind (Label_Entity, E_Label);
+                Set_Etype (Label_Entity, Standard_Void_Type);
+ 
+                Set_Entity (Label_Id, Label_Entity);
+                Set_Etype (Label_Id, Standard_Void_Type);
+ 
+                Insert_After (Node => Label_Node, After => M);
+ 
+                Append (Node => Label_Decl, To => Decl_List);
+ 
+                Label := Label_Entity;
+             end;
+          else
+             --  Some other continue statement for this loop was expanded
+             --  already, so we can reuse the label that is already set up.
+             Label := Entity (Identifier (A));
+          end if;
+       end;
+ 
+       declare
+          C       : constant Opt_N_Subexpr_Id := Condition (N);
+          Goto_St : constant N_Goto_Statement_Id :=
+            Make_Goto_Statement (Loc, New_Occurrence_Of (Label, Loc));
+ 
+          New_St : constant Node_Id :=
+            (if Present (C)
+             then Make_If_Statement (Sloc (N), C, New_List (Goto_St))
+             else Goto_St);
+       begin
+          Set_Parent (New_St, Parent (N));
+          Replace (N, New_St);
+       end;
+ 
+    end Expand_N_Continue_Statement;
+ 
     -----------------------------
     -- Expand_N_Exit_Statement --
     -----------------------------
  
     procedure Expand_N_Exit_Statement (N : Node_Id) is
     begin
!       Expand_Loop_Flow_Statement (N);
     end Expand_N_Exit_Statement;
  
     ----------------------------------
*************** package body Exp_Ch5 is
*** 5756,5762 ****
        Loc    : constant Source_Ptr := Sloc (N);
        Scheme : constant Node_Id    := Iteration_Scheme (N);
        Stmt   : Node_Id;
- 
     begin
        --  Delete null loop
  
--- 5838,5843 ----
*************** package body Exp_Ch5 is
*** 5980,5987 ****
        --       ...
        --    end loop
  
!       elsif Present (Scheme)
!         and then Present (Condition_Actions (Scheme))
          and then Present (Condition (Scheme))
        then
           declare
--- 6061,6067 ----
        --       ...
        --    end loop
  
!       elsif Present (Condition_Actions (Scheme))
          and then Present (Condition (Scheme))
        then
           declare
*************** package body Exp_Ch5 is
*** 6013,6021 ****
  
        --  Here to deal with iterator case
  
!       elsif Present (Scheme)
!         and then Present (Iterator_Specification (Scheme))
!       then
           Expand_Iterator_Loop (N);
  
           --  An iterator loop may generate renaming declarations for elements
--- 6093,6099 ----
  
        --  Here to deal with iterator case
  
!       elsif Present (Iterator_Specification (Scheme)) then
           Expand_Iterator_Loop (N);
  
           --  An iterator loop may generate renaming declarations for elements
*************** package body Exp_Ch5 is
*** 6046,6051 ****
--- 6124,6141 ----
        Process_Statements_For_Controlled_Objects (Stmt);
     end Expand_N_Loop_Statement;
  
+    --------------------------------
+    -- Expand_Loop_Flow_Statement --
+    --------------------------------
+ 
+    --  The only processing required is to deal with a possible C/Fortran
+    --  boolean value used as the condition for the statement.
+ 
+    procedure Expand_Loop_Flow_Statement (N : N_Loop_Flow_Statement_Id) is
+    begin
+       Adjust_Condition (Condition (N));
+    end Expand_Loop_Flow_Statement;
+ 
     ----------------------------
     -- Expand_Predicated_Loop --
     ----------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch5.ads gcc-16-20250706/gcc/ada/exp_ch5.ads
*** gcc-16-20250629/gcc/ada/exp_ch5.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch5.ads	Sun Jul  6 22:32:09 2025
*************** package Exp_Ch5 is
*** 31,36 ****
--- 31,37 ----
     procedure Expand_N_Assignment_Statement      (N : Node_Id);
     procedure Expand_N_Block_Statement           (N : Node_Id);
     procedure Expand_N_Case_Statement            (N : Node_Id);
+    procedure Expand_N_Continue_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);
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch6.adb gcc-16-20250706/gcc/ada/exp_ch6.adb
*** gcc-16-20250629/gcc/ada/exp_ch6.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch6.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Ch6 is
*** 287,296 ****
  
     --  This expansion is necessary in all the cases where the constant object
     --  denoted by the call needs finalization in the current subprogram, which
!    --  excludes return statements, and is not identified with another object
!    --  that will be finalized, which excludes (statically) declared objects,
!    --  dynamically allocated objects, and targets of assignments that are done
!    --  directly (without intermediate temporaries).
  
     procedure Expand_Non_Function_Return (N : Node_Id);
     --  Expand a simple return statement found in a procedure body, entry body,
--- 287,297 ----
  
     --  This expansion is necessary in all the cases where the constant object
     --  denoted by the call needs finalization in the current subprogram, which
!    --  excludes simple return statements, and is not identified with another
!    --  object that will be finalized, which excludes (statically) declared
!    --  objects, dynamically allocated objects, components of aggregates, and
!    --  targets of assignments that are done directly (without intermediate
!    --  temporaries).
  
     procedure Expand_Non_Function_Return (N : Node_Id);
     --  Expand a simple return statement found in a procedure body, entry body,
*************** package body Exp_Ch6 is
*** 5365,5371 ****
        --  to copy/readjust/finalize, we can just pass the value through (see
        --  Expand_N_Simple_Return_Statement), and thus no attachment is needed.
        --  Note that simple return statements are distributed into conditional
!       --  expressions but we may be invoked before this distribution is done.
  
        if Nkind (Uncond_Par) = N_Simple_Return_Statement then
           return;
--- 5366,5372 ----
        --  to copy/readjust/finalize, we can just pass the value through (see
        --  Expand_N_Simple_Return_Statement), and thus no attachment is needed.
        --  Note that simple return statements are distributed into conditional
!       --  expressions, but we may be invoked before this distribution is done.
  
        if Nkind (Uncond_Par) = N_Simple_Return_Statement then
           return;
*************** package body Exp_Ch6 is
*** 5386,5394 ****
           end if;
  
        --  Note that object declarations are also distributed into conditional
!       --  expressions but we may be invoked before this distribution is done.
  
!       elsif Nkind (Uncond_Par) = N_Object_Declaration then
           return;
        end if;
  
--- 5387,5400 ----
           end if;
  
        --  Note that object declarations are also distributed into conditional
!       --  expressions, but we may be invoked before this distribution is done.
!       --  However that's not the case for the declarations of return objects,
!       --  see the twin Is_Optimizable_Declaration predicates that are present
!       --  in Expand_N_Case_Expression and Expand_N_If_Expression of Exp_Ch4.
  
!       elsif Nkind (Uncond_Par) = N_Object_Declaration
!         and then not Is_Return_Object (Defining_Identifier (Uncond_Par))
!       then
           return;
        end if;
  
*************** package body Exp_Ch6 is
*** 5402,5407 ****
--- 5408,5423 ----
           return;
        end if;
  
+       --  Another optimization: if the returned value is used to initialize the
+       --  component of an aggregate, then no need to copy/readjust/finalize, we
+       --  can initialize it in place. Note that assignments for aggregates are
+       --  also distributed into conditional expressions, but we may be invoked
+       --  before this distribution is done.
+ 
+       if Parent_Is_Regular_Aggregate (Uncond_Par) then
+          return;
+       end if;
+ 
        --  Avoid expansion to catch the error when the function call is on the
        --  left-hand side of an assignment. Likewise if it is on the right-hand
        --  side and no controlling actions will be performed for the assignment,
*************** package body Exp_Ch6 is
*** 5754,5760 ****
  
     exception
        when RE_Not_Available =>
!          return;
     end Expand_N_Simple_Return_Statement;
  
     ------------------------------
--- 5770,5776 ----
  
     exception
        when RE_Not_Available =>
!          null;
     end Expand_N_Simple_Return_Statement;
  
     ------------------------------
*************** package body Exp_Ch6 is
*** 9565,9573 ****
        --  such build-in-place functions, primitive or not.
  
        return not Restriction_Active (No_Finalization)
!         and then ((Needs_Finalization (Typ)
!                     and then not Has_Relaxed_Finalization (Typ))
!                   or else Is_Tagged_Type (Typ))
          and then not Has_Foreign_Convention (Typ);
     end Needs_BIP_Collection;
  
--- 9581,9588 ----
        --  such build-in-place functions, primitive or not.
  
        return not Restriction_Active (No_Finalization)
!         and then (Needs_Finalization (Typ) or else Is_Tagged_Type (Typ))
!         and then not Has_Relaxed_Finalization (Typ)
          and then not Has_Foreign_Convention (Typ);
     end Needs_BIP_Collection;
  
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_ch7.adb gcc-16-20250706/gcc/ada/exp_ch7.adb
*** gcc-16-20250629/gcc/ada/exp_ch7.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_ch7.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Ch7 is
*** 436,442 ****
  
     procedure Build_Record_Deep_Procs (Typ : Entity_Id);
     --  Build the deep Initialize/Adjust/Finalize for a record Typ with
!    --  Has_Component_Component set and store them using the TSS mechanism.
  
     --------------------------------
     -- Transient Scope Management --
--- 436,442 ----
  
     procedure Build_Record_Deep_Procs (Typ : Entity_Id);
     --  Build the deep Initialize/Adjust/Finalize for a record Typ with
!    --  Has_Controlled_Component set and store them using the TSS mechanism.
  
     --------------------------------
     -- Transient Scope Management --
*************** package body Exp_Ch7 is
*** 696,701 ****
--- 696,710 ----
     --  Set the Finalize_Address primitive for the object that has been
     --  attached to a finalization Master_Node.
  
+    function Shift_Address_For_Descriptor
+      (Addr   : Node_Id;
+       Typ    : Entity_Id;
+       Op_Nam : Name_Id) return Node_Id
+      with Pre => Is_Array_Type (Typ)
+                    and then not Is_Constrained (Typ)
+                    and then Op_Nam in Name_Op_Add | Name_Op_Subtract;
+    --  Add to Addr, or subtract from Addr, the size of the descriptor of Typ
+ 
     ----------------------------------
     -- Attach_Object_To_Master_Node --
     ----------------------------------
*************** package body Exp_Ch7 is
*** 2466,2472 ****
           --  Local variables
  
           Decl    : Node_Id;
-          Expr    : Node_Id;
           Obj_Id  : Entity_Id;
           Obj_Typ : Entity_Id;
           Pack_Id : Entity_Id;
--- 2475,2480 ----
*************** package body Exp_Ch7 is
*** 2516,2522 ****
              elsif Nkind (Decl) = N_Object_Declaration then
                 Obj_Id  := Defining_Identifier (Decl);
                 Obj_Typ := Base_Type (Etype (Obj_Id));
-                Expr    := Expression (Decl);
  
                 --  Bypass any form of processing for objects which have their
                 --  finalization disabled. This applies only to objects at the
--- 2524,2529 ----
*************** package body Exp_Ch7 is
*** 2572,2592 ****
                    Processing_Actions
                      (Decl, Strict => not Has_Relaxed_Finalization (Obj_Typ));
  
!                --  The object is of the form:
!                --    Obj : Access_Typ := Non_BIP_Function_Call'reference;
! 
!                --    Obj : Access_Typ :=
!                --            BIP_Function_Call (BIPalloc => 2, ...)'reference;
  
                 elsif Is_Access_Type (Obj_Typ)
!                  and then Needs_Finalization
!                             (Available_View (Designated_Type (Obj_Typ)))
!                  and then Present (Expr)
!                  and then
!                    (Is_Secondary_Stack_BIP_Func_Call (Expr)
!                      or else
!                        (Is_Non_BIP_Func_Call (Expr)
!                          and then not Is_Related_To_Func_Return (Obj_Id)))
                 then
                    Processing_Actions
                      (Decl,
--- 2579,2588 ----
                    Processing_Actions
                      (Decl, Strict => not Has_Relaxed_Finalization (Obj_Typ));
  
!                --  The object is an access-to-controlled that must be finalized
  
                 elsif Is_Access_Type (Obj_Typ)
!                  and then Is_Finalizable_Access (Decl)
                 then
                    Processing_Actions
                      (Decl,
*************** package body Exp_Ch7 is
*** 5275,5280 ****
--- 5271,5283 ----
              Obj_Typ          : Entity_Id;
  
           begin
+             --  Ignored Ghost objects do not need any cleanup actions because
+             --  they will not appear in the final tree.
+ 
+             if Is_Ignored_Ghost_Entity (Obj_Id) then
+                return;
+             end if;
+ 
              --  If the object needs to be exported to the outer finalizer,
              --  create the declaration of the Master_Node for the object,
              --  which will later be picked up by Build_Finalizer.
*************** package body Exp_Ch7 is
*** 5457,5463 ****
  
        --  Finalization calls are inserted after the target
  
!       if Present (Act_After) then
           Last_Obj := Last (Act_After);
           Insert_List_After (Target, Act_After);
        else
--- 5460,5466 ----
  
        --  Finalization calls are inserted after the target
  
!       if Is_Non_Empty_List (Act_After) then
           Last_Obj := Last (Act_After);
           Insert_List_After (Target, Act_After);
        else
*************** package body Exp_Ch7 is
*** 5552,5586 ****
        --  an object with a dope vector (see Make_Finalize_Address_Stmts).
        --  This is achieved by setting Is_Constr_Array_Subt_With_Bounds,
        --  but the address of the object is still that of its elements,
!       --  so we need to shift it.
  
        if Is_Array_Type (Utyp)
          and then not Is_Constrained (First_Subtype (Utyp))
        then
-          --  Shift the address from the start of the elements to the
-          --  start of the dope vector:
- 
-          --    V - (Utyp'Descriptor_Size / Storage_Unit)
- 
           Obj_Addr :=
!            Make_Function_Call (Loc,
!              Name                   =>
!                Make_Expanded_Name (Loc,
!                  Chars => Name_Op_Subtract,
!                  Prefix =>
!                    New_Occurrence_Of
!                      (RTU_Entity (System_Storage_Elements), Loc),
!                  Selector_Name =>
!                    Make_Identifier (Loc, Name_Op_Subtract)),
!              Parameter_Associations => New_List (
!                Obj_Addr,
!                Make_Op_Divide (Loc,
!                  Left_Opnd  =>
!                    Make_Attribute_Reference (Loc,
!                      Prefix         => New_Occurrence_Of (Utyp, Loc),
!                      Attribute_Name => Name_Descriptor_Size),
!                  Right_Opnd =>
!                    Make_Integer_Literal (Loc, System_Storage_Unit))));
        end if;
  
        return Obj_Addr;
--- 5555,5568 ----
        --  an object with a dope vector (see Make_Finalize_Address_Stmts).
        --  This is achieved by setting Is_Constr_Array_Subt_With_Bounds,
        --  but the address of the object is still that of its elements,
!       --  so we need to shift it back to skip the dope vector.
  
        if Is_Array_Type (Utyp)
          and then not Is_Constrained (First_Subtype (Utyp))
        then
           Obj_Addr :=
!            Shift_Address_For_Descriptor
!              (Obj_Addr, First_Subtype (Utyp), Name_Op_Subtract);
        end if;
  
        return Obj_Addr;
*************** package body Exp_Ch7 is
*** 7848,7860 ****
  
           when Initialize_Case =>
              if Is_Controlled (Typ) then
!                return New_List (
!                  Make_Procedure_Call_Statement (Loc,
!                    Name                   =>
!                      New_Occurrence_Of
!                        (Find_Controlled_Prim_Op (Typ, Name_Initialize), Loc),
!                    Parameter_Associations => New_List (
!                      Make_Identifier (Loc, Name_V))));
              else
                 return Empty_List;
              end if;
--- 7830,7852 ----
  
           when Initialize_Case =>
              if Is_Controlled (Typ) then
!                declare
!                   Intlz : constant Entity_Id :=
!                     Find_Controlled_Prim_Op (Typ, Name_Initialize);
!                begin
!                   if Present (Intlz) then
!                      return
!                        New_List
!                          (Make_Procedure_Call_Statement
!                             (Loc,
!                              Name                   =>
!                                New_Occurrence_Of (Intlz, Loc),
!                              Parameter_Associations =>
!                                New_List (Make_Identifier (Loc, Name_V))));
!                   else
!                      return Empty_List;
!                   end if;
!                end;
              else
                 return Empty_List;
              end if;
*************** package body Exp_Ch7 is
*** 7914,7925 ****
        if Is_Untagged_Derivation (Typ) then
           if Is_Protected_Type (Typ) then
              Utyp := Corresponding_Record_Type (Root_Type (Base_Type (Typ)));
-          else
-             Utyp := Underlying_Type (Root_Type (Base_Type (Typ)));
  
!             if Is_Protected_Type (Utyp) then
!                Utyp := Corresponding_Record_Type (Utyp);
!             end if;
           end if;
  
           Ref := Unchecked_Convert_To (Utyp, Ref);
--- 7906,7921 ----
        if Is_Untagged_Derivation (Typ) then
           if Is_Protected_Type (Typ) then
              Utyp := Corresponding_Record_Type (Root_Type (Base_Type (Typ)));
  
!          else
!             declare
!                Root : constant Entity_Id :=
!                  Underlying_Type (Root_Type (Base_Type (Typ)));
!             begin
!                if Is_Protected_Type (Root) then
!                   Utyp := Corresponding_Record_Type (Root);
!                end if;
!             end;
           end if;
  
           Ref := Unchecked_Convert_To (Utyp, Ref);
*************** package body Exp_Ch7 is
*** 8189,8194 ****
--- 8185,8194 ----
        Ptr_Typ   : Entity_Id;
  
     begin
+       --  Array types: picking the (unconstrained) base type as designated type
+       --  requires allocating the bounds alongside the data, so we only do this
+       --  when the first subtype itself was declared as unconstrained.
+ 
        if Is_Array_Type (Typ) then
           if Is_Constrained (First_Subtype (Typ)) then
              Desig_Typ := First_Subtype (Typ);
*************** package body Exp_Ch7 is
*** 8284,8346 ****
        --  lays in front of the elements and then use a thin pointer to perform
        --  the address-to-access conversion.
  
!       if Is_Array_Type (Typ)
!         and then not Is_Constrained (First_Subtype (Typ))
!       then
!          declare
!             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,
!               Make_Attribute_Definition_Clause (Loc,
!                 Name       => New_Occurrence_Of (Ptr_Typ, Loc),
!                 Chars      => Name_Size,
!                 Expression =>
!                   Make_Integer_Literal (Loc, System_Address_Size)));
! 
!             --  Generate:
!             --    Dnn : constant Storage_Offset :=
!             --            Desig_Typ'Descriptor_Size / Storage_Unit;
! 
!             Dope_Id := Make_Temporary (Loc, 'D');
! 
!             Append_To (Decls,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Dope_Id,
!                 Constant_Present    => True,
!                 Object_Definition   =>
!                   New_Occurrence_Of (RTE (RE_Storage_Offset), Loc),
!                 Expression          =>
!                   Make_Op_Divide (Loc,
!                     Left_Opnd  =>
!                       Make_Attribute_Reference (Loc,
!                         Prefix         => New_Occurrence_Of (Desig_Typ, Loc),
!                         Attribute_Name => Name_Descriptor_Size),
!                     Right_Opnd =>
!                       Make_Integer_Literal (Loc, System_Storage_Unit))));
  
!             --  Shift the address from the start of the dope vector to the
!             --  start of the elements:
!             --
!             --    V + Dnn
  
!             Obj_Expr :=
!               Make_Function_Call (Loc,
!                 Name                   =>
!                   Make_Expanded_Name (Loc,
!                     Chars => Name_Op_Add,
!                     Prefix =>
!                       New_Occurrence_Of
!                         (RTU_Entity (System_Storage_Elements), Loc),
!                     Selector_Name =>
!                       Make_Identifier (Loc, Name_Op_Add)),
!                 Parameter_Associations => New_List (
!                   Obj_Expr,
!                   New_Occurrence_Of (Dope_Id, Loc)));
!          end;
        end if;
  
        Fin_Call :=
--- 8284,8301 ----
        --  lays in front of the elements and then use a thin pointer to perform
        --  the address-to-access conversion.
  
!       if Is_Array_Type (Typ) and then not Is_Constrained (Desig_Typ) then
!          Obj_Expr :=
!            Shift_Address_For_Descriptor (Obj_Expr, Desig_Typ, Name_Op_Add);
  
!          --  Ensure that Ptr_Typ is a thin pointer; generate:
!          --    for Ptr_Typ'Size use System.Address'Size;
  
!          Append_To (Decls,
!            Make_Attribute_Definition_Clause (Loc,
!              Name       => New_Occurrence_Of (Ptr_Typ, Loc),
!              Chars      => Name_Size,
!              Expression => Make_Integer_Literal (Loc, System_Address_Size)));
        end if;
  
        Fin_Call :=
*************** package body Exp_Ch7 is
*** 8918,8923 ****
--- 8873,8915 ----
        return Scope_Stack.Table (Scope_Stack.Last).Node_To_Be_Wrapped;
     end Node_To_Be_Wrapped;
  
+    ----------------------------------
+    -- Shift_Address_For_Descriptor --
+    ----------------------------------
+ 
+    function Shift_Address_For_Descriptor
+      (Addr   : Node_Id;
+       Typ    : Entity_Id;
+       Op_Nam : Name_Id) return Node_Id
+    is
+       Loc   : constant Source_Ptr := Sloc (Addr);
+       Dummy : constant Entity_Id  := RTE (RE_Storage_Offset);
+       --  Make sure System_Storage_Elements is loaded for RTU_Entity
+ 
+    begin
+       --  Generate:
+       --    Addr +/- (Typ'Descriptor_Size / Storage_Unit)
+ 
+       return
+         Make_Function_Call (Loc,
+           Name                   =>
+             Make_Expanded_Name (Loc,
+               Chars  => Op_Nam,
+               Prefix =>
+                 New_Occurrence_Of
+                   (RTU_Entity (System_Storage_Elements), Loc),
+               Selector_Name => Make_Identifier (Loc, Op_Nam)),
+           Parameter_Associations => New_List (
+             Addr,
+             Make_Op_Divide (Loc,
+               Left_Opnd  =>
+                 Make_Attribute_Reference (Loc,
+                   Prefix         => New_Occurrence_Of (Typ, Loc),
+                   Attribute_Name => Name_Descriptor_Size),
+               Right_Opnd =>
+                 Make_Integer_Literal (Loc, System_Storage_Unit))));
+    end Shift_Address_For_Descriptor;
+ 
     ----------------------------
     -- Store_Actions_In_Scope --
     ----------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_imgv.adb gcc-16-20250706/gcc/ada/exp_imgv.adb
*** gcc-16-20250629/gcc/ada/exp_imgv.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_imgv.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Imgv is
*** 1631,1637 ****
                 Name => New_Occurrence_Of (RTE (Vid), Loc),
                 Parameter_Associations => Args)));
  
-          Set_Etype (N, Btyp);
           Analyze_And_Resolve (N, Btyp);
           return;
  
--- 1631,1636 ----
*************** package body Exp_Imgv is
*** 1640,1662 ****
              Num : constant Uint := Norm_Num (Small_Value (Rtyp));
              Den : constant Uint := Norm_Den (Small_Value (Rtyp));
              Max : constant Uint := UI_Max (Num, Den);
-             Min : constant Uint := UI_Min (Num, Den);
              Siz : constant Uint := Esize (Rtyp);
  
           begin
              if Siz <= 32
                and then Max <= Uint_2 ** 31
!               and then (Min = Uint_1 or else Max <= Uint_2 ** 27)
              then
                 Vid := RE_Value_Fixed32;
              elsif Siz <= 64
                and then Max <= Uint_2 ** 63
!               and then (Min = Uint_1 or else Max <= Uint_2 ** 59)
              then
                 Vid := RE_Value_Fixed64;
              elsif System_Max_Integer_Size = 128
                and then Max <= Uint_2 ** 127
!               and then (Min = Uint_1 or else Max <= Uint_2 ** 123)
              then
                 Vid := RE_Value_Fixed128;
              else
--- 1639,1660 ----
              Num : constant Uint := Norm_Num (Small_Value (Rtyp));
              Den : constant Uint := Norm_Den (Small_Value (Rtyp));
              Max : constant Uint := UI_Max (Num, Den);
              Siz : constant Uint := Esize (Rtyp);
  
           begin
              if Siz <= 32
                and then Max <= Uint_2 ** 31
!               and then (Num = Uint_1 or else Max <= Uint_2 ** 27)
              then
                 Vid := RE_Value_Fixed32;
              elsif Siz <= 64
                and then Max <= Uint_2 ** 63
!               and then (Num = Uint_1 or else Max <= Uint_2 ** 59)
              then
                 Vid := RE_Value_Fixed64;
              elsif System_Max_Integer_Size = 128
                and then Max <= Uint_2 ** 127
!               and then (Num = Uint_1 or else Max <= Uint_2 ** 123)
              then
                 Vid := RE_Value_Fixed128;
              else
*************** package body Exp_Imgv is
*** 1676,1682 ****
                       Name => New_Occurrence_Of (RTE (Vid), Loc),
                       Parameter_Associations => Args)));
  
-                Set_Etype (N, Btyp);
                 Analyze_And_Resolve (N, Btyp);
                 return;
              end if;
--- 1674,1679 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_put_image.adb gcc-16-20250706/gcc/ada/exp_put_image.adb
*** gcc-16-20250629/gcc/ada/exp_put_image.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_put_image.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Put_Image is
*** 695,711 ****
             Put_Image_Base_Type
               (Get_Corresponding_Mutably_Tagged_Type_If_Present (Etype (C)));
        begin
!          if Ekind (C) /= E_Void then
!             Append_To (Clist,
!               Make_Attribute_Reference (Loc,
!                 Prefix         => New_Occurrence_Of (Component_Typ, Loc),
!                 Attribute_Name => Name_Put_Image,
!                 Expressions    => New_List (
!                   Make_Identifier (Loc, Name_S),
!                   Make_Selected_Component (Loc,
!                     Prefix        => Make_Identifier (Loc, Name_V),
!                     Selector_Name => New_Occurrence_Of (C, Loc)))));
!          end if;
        end Append_Component_Attr;
  
        -------------------------------
--- 695,709 ----
             Put_Image_Base_Type
               (Get_Corresponding_Mutably_Tagged_Type_If_Present (Etype (C)));
        begin
!          Append_To (Clist,
!            Make_Attribute_Reference (Loc,
!              Prefix         => New_Occurrence_Of (Component_Typ, Loc),
!              Attribute_Name => Name_Put_Image,
!              Expressions    => New_List (
!                Make_Identifier (Loc, Name_S),
!                Make_Selected_Component (Loc,
!                  Prefix        => Make_Identifier (Loc, Name_V),
!                  Selector_Name => New_Occurrence_Of (C, Loc)))));
        end Append_Component_Attr;
  
        -------------------------------
*************** package body Exp_Put_Image is
*** 944,952 ****
  
           --  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);
  
--- 942,979 ----
  
           --  Generate Put_Images for the discriminants of the type
  
!          declare
!             Discrim_Specs : List_Id := Discriminant_Specifications (Type_Decl);
!             Partial_View  : Entity_Id;
!          begin
!             if Present (First (Discrim_Specs))
!               and then Ekind (Defining_Identifier (First (Discrim_Specs))) =
!                        E_Void
!             then
!                --  If the known discriminant part is repeated for the
!                --  completion of a private type declaration, then the
!                --  second copy is (by design) not analyzed. So we'd better
!                --  use the first copy instead.
! 
!                Partial_View := Incomplete_Or_Partial_View
!                                  (Defining_Identifier (Type_Decl));
! 
!                pragma Assert (Ekind (Partial_View) in
!                               E_Private_Type
!                                 | E_Limited_Private_Type
!                                 | E_Record_Type_With_Private);
! 
!                Discrim_Specs :=
!                  Discriminant_Specifications (Parent (Partial_View));
! 
!                pragma Assert (Present (First (Discrim_Specs)));
!                pragma Assert
!                  (Ekind (Defining_Identifier (First (Discrim_Specs))) /=
!                   E_Void);
!             end if;
! 
!             Append_List_To (Stms, Make_Component_Attributes (Discrim_Specs));
!          end;
  
           Rdef := Type_Definition (Type_Decl);
  
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_spark.adb gcc-16-20250706/gcc/ada/exp_spark.adb
*** gcc-16-20250629/gcc/ada/exp_spark.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_spark.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_SPARK is
*** 172,177 ****
--- 172,185 ----
           when N_Op_Ne =>
              Expand_SPARK_N_Op_Ne (N);
  
+          --  Resolution of type conversion relies on minimal expansion of
+          --  fixedpoint operations to insert the range check on their result.
+ 
+          when N_Op_Multiply | N_Op_Divide =>
+             if Etype (N) = Universal_Fixed then
+                Exp_Ch4.Fixup_Universal_Fixed_Operation (N);
+             end if;
+ 
           when N_Freeze_Entity =>
              --  Currently we only expand type freeze entities, so ignore other
              --  freeze entites, because it is expensive to create a suitable
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_tss.adb gcc-16-20250706/gcc/ada/exp_tss.adb
*** gcc-16-20250629/gcc/ada/exp_tss.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_tss.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Tss is
*** 504,516 ****
        Subp : Entity_Id;
  
     begin
!       if No (FN) then
!          return Empty;
! 
!       elsif No (TSS_Elist (FN)) then
!          return Empty;
! 
!       else
           Elmt := First_Elmt (TSS_Elist (FN));
           while Present (Elmt) loop
              if Is_TSS (Node (Elmt), Nam) then
--- 504,512 ----
        Subp : Entity_Id;
  
     begin
!       if Present (FN)
!         and then Present (TSS_Elist (FN))
!       then
           Elmt := First_Elmt (TSS_Elist (FN));
           while Present (Elmt) loop
              if Is_TSS (Node (Elmt), Nam) then
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_unst.adb gcc-16-20250706/gcc/ada/exp_unst.adb
*** gcc-16-20250629/gcc/ada/exp_unst.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_unst.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Unst is
*** 2305,2312 ****
              end if;
           end Adjust_One_Call;
        end loop Adjust_Calls;
- 
-       return;
     end Unnest_Subprogram;
  
     ------------------------
--- 2305,2310 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_util.adb gcc-16-20250706/gcc/ada/exp_util.adb
*** gcc-16-20250629/gcc/ada/exp_util.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_util.adb	Sun Jul  6 22:32:09 2025
*************** package body Exp_Util is
*** 167,172 ****
--- 167,175 ----
     --  Force evaluation of bounds of a slice, which may be given by a range
     --  or by a subtype indication with or without a constraint.
  
+    function Is_Expression_Of_Func_Return (N : Node_Id) return Boolean;
+    --  Return True if N is the expression of a function return
+ 
     function Is_Uninitialized_Aggregate
       (Exp : Node_Id;
        T   : Entity_Id) return Boolean;
*************** package body Exp_Util is
*** 1528,1558 ****
                    Ctrl_Type : constant Entity_Id
                      := Find_Dispatching_Type (Par_Subp);
  
!                   function Call_To_Parent_Dispatching_Op_Must_Be_Mapped
!                     (Call_Node : Node_Id) return Boolean;
                    --  If Call_Node is a call to a primitive function F of the
                    --  tagged type T associated with Par_Subp that either has
!                   --  any actuals that are controlling formals of Par_Subp,
                    --  or else the call to F is an actual parameter of an
                    --  enclosing call to a primitive of T that has any actuals
!                   --  that are controlling formals of Par_Subp (and recursively
!                   --  up the tree of enclosing function calls), returns True;
!                   --  otherwise returns False. Returning True implies that the
!                   --  call to F must be mapped to a call that instead targets
!                   --  the corresponding function F of the tagged type for which
!                   --  Subp is a primitive function.
  
!                   --------------------------------------------------
!                   -- Call_To_Parent_Dispatching_Op_Must_Be_Mapped --
!                   --------------------------------------------------
  
!                   function Call_To_Parent_Dispatching_Op_Must_Be_Mapped
!                     (Call_Node : Node_Id) return Boolean
                    is
                       pragma Assert (Nkind (Call_Node) = N_Function_Call);
  
                       Actual           : Node_Id := First_Actual (Call_Node);
!                      Actual_Or_Prefix : Node_Id;
  
                    begin
                       if Is_Entity_Name (Name (Call_Node))
--- 1531,1667 ----
                    Ctrl_Type : constant Entity_Id
                      := Find_Dispatching_Type (Par_Subp);
  
!                   function Must_Map_Call_To_Parent_Primitive
!                     (Call_Node     : Node_Id;
!                      Check_Parents : Boolean := True) return Boolean;
                    --  If Call_Node is a call to a primitive function F of the
                    --  tagged type T associated with Par_Subp that either has
!                   --  any actuals that involve controlling formals of Par_Subp,
                    --  or else the call to F is an actual parameter of an
                    --  enclosing call to a primitive of T that has any actuals
!                   --  that involve controlling formals of Par_Subp (and
!                   --  recursively up the tree of enclosing function calls),
!                   --  returns True; otherwise returns False. Returning True
!                   --  implies that the call to F must be mapped to a call
!                   --  that instead targets the corresponding function F of
!                   --  the tagged type for which Subp is a primitive function.
!                   --  Checks_Parent specifies whether this function should
!                   --  recursively check enclosing calls.
  
!                   ---------------------------------------
!                   -- Must_Map_Call_To_Parent_Primitive --
!                   ---------------------------------------
  
!                   function Must_Map_Call_To_Parent_Primitive
!                     (Call_Node     : Node_Id;
!                      Check_Parents : Boolean := True) return Boolean
                    is
                       pragma Assert (Nkind (Call_Node) = N_Function_Call);
  
                       Actual           : Node_Id := First_Actual (Call_Node);
! 
!                      function Expr_Has_Ctrl_Formal_Ref
!                        (Expr : Node_Id) return Boolean;
!                      --  Determines whether Expr is or contains a reference
!                      --  to a controlling formal and returns True if so. More
!                      --  specifically, if Expr is not directly a reference
!                      --  to a formal, it can be an access attribute or Old
!                      --  attribute whose immediate object prefix is such
!                      --  a reference (possibly through a chain of multiple
!                      --  such attributes); or else it can be a dereference
!                      --  of a controlling formal; or else it can be either
!                      --  a dependent expression of a conditional expression,
!                      --  or the expression of a declare expression that
!                      --  qualifies as such. Returns True if the expression
!                      --  satisifies one of those requirements; otherwise
!                      --  returns False.
! 
!                      ------------------------------
!                      -- Expr_Has_Ctrl_Formal_Ref --
!                      ------------------------------
! 
!                      function Expr_Has_Ctrl_Formal_Ref
!                        (Expr : Node_Id) return Boolean
!                      is
! 
!                         function Is_Controlling_Formal_Ref
!                           (N : Node_Id) return Boolean;
!                         --  Returns True if and only if N denotes a reference
!                         --  to a controlling formal declared for Par_Subp, or
!                         --  Subp as formals may have been rewritten before the
!                         --  test happens.
! 
!                         -------------------------------
!                         -- Is_Controlling_Formal_Ref --
!                         -------------------------------
! 
!                         function Is_Controlling_Formal_Ref
!                           (N : Node_Id) return Boolean
!                         is
!                         begin
!                            return Nkind (N) in N_Identifier | N_Expanded_Name
!                              and then Is_Formal (Entity (N))
!                              and then Is_Controlling_Formal (Entity (N))
!                              and then Scope (Entity (N)) in Par_Subp | Subp;
!                         end Is_Controlling_Formal_Ref;
! 
!                      --  Start of processing for Expr_Has_Ctrl_Formal_Ref
! 
!                      begin
!                         if (Nkind (Expr) = N_Attribute_Reference
!                              and then Attribute_Name (Expr)
!                                         in Name_Old
!                                          | Name_Access
!                                          | Name_Unchecked_Access
!                                          | Name_Unrestricted_Access)
!                           or else Nkind (Expr) = N_Explicit_Dereference
!                         then
!                            return Expr_Has_Ctrl_Formal_Ref (Prefix (Expr));
! 
!                         elsif Nkind (Expr) = N_If_Expression then
!                            declare
!                               Then_Expr : constant Node_Id :=
!                                 Pick (Expressions (Expr), 2);
!                               Else_Expr : constant Node_Id :=
!                                 Pick (Expressions (Expr), 3);
!                            begin
!                               return Expr_Has_Ctrl_Formal_Ref (Then_Expr)
!                                 or else Expr_Has_Ctrl_Formal_Ref (Else_Expr);
!                            end;
! 
!                         elsif Nkind (Expr) = N_Case_Expression then
!                            declare
!                               Case_Expr_Alt : Node_Id :=
!                                 First (Alternatives (Expr));
!                            begin
!                               while Present (Case_Expr_Alt) loop
!                                  if Expr_Has_Ctrl_Formal_Ref
!                                       (Expression (Case_Expr_Alt))
!                                  then
!                                     return True;
!                                  end if;
! 
!                                  Next (Case_Expr_Alt);
!                               end loop;
!                            end;
! 
!                            return False;
! 
!                         --  Case of a declare_expression
! 
!                         elsif Nkind (Expr) = N_Expression_With_Actions
!                           and then Comes_From_Source (Expr)
!                         then
!                            return Expr_Has_Ctrl_Formal_Ref (Expression (Expr));
! 
!                         --  All other cases must be references to a formal
! 
!                         else
!                            return Is_Controlling_Formal_Ref (Expr);
!                         end if;
!                      end Expr_Has_Ctrl_Formal_Ref;
! 
!                   --  Start of processing for Must_Map_Call_To_Parent_Primitive
  
                    begin
                       if Is_Entity_Name (Name (Call_Node))
*************** package body Exp_Util is
*** 1566,1599 ****
                       then
                          while Present (Actual) loop
  
!                            --  Account for 'Old and explicit dereferences,
!                            --  picking up the prefix object in those cases.
! 
!                            if (Nkind (Actual) = N_Attribute_Reference
!                                 and then Attribute_Name (Actual) = Name_Old)
!                              or else Nkind (Actual) = N_Explicit_Dereference
!                            then
!                               Actual_Or_Prefix := Prefix (Actual);
!                            else
!                               Actual_Or_Prefix := Actual;
!                            end if;
! 
!                            --  If at least one actual is a controlling formal
!                            --  parameter of a class-wide Pre/Post aspect's
!                            --  subprogram, the rule in RM 6.1.1(7) applies,
                             --  and we want to map the call to target the
                             --  corresponding function of the derived type.
  
!                            if Nkind (Actual_Or_Prefix)
!                                 in N_Identifier
!                                  | N_Expanded_Name
!                                  | N_Operator_Symbol
! 
!                              and then Is_Formal (Entity (Actual_Or_Prefix))
! 
!                              and then Is_Controlling_Formal
!                                         (Entity (Actual_Or_Prefix))
!                            then
                                return True;
  
                             --  RM 6.1.1(7) also applies to Result attributes
--- 1675,1689 ----
                       then
                          while Present (Actual) loop
  
!                            --  If at least one actual references a controlling
!                            --  formal parameter of a class-wide Pre/Post
!                            --  aspect's associated subprogram (including
!                            --  a direct prefix of an access attribute or
!                            --  dereference), the rule in RM 6.1.1(7) applies,
                             --  and we want to map the call to target the
                             --  corresponding function of the derived type.
  
!                            if Expr_Has_Ctrl_Formal_Ref (Actual) then
                                return True;
  
                             --  RM 6.1.1(7) also applies to Result attributes
*************** package body Exp_Util is
*** 1603,1617 ****
                               and then Has_Controlling_Result (Subp)
                             then
                                return True;
                             end if;
  
                             Next_Actual (Actual);
                          end loop;
  
!                         if Nkind (Parent (Call_Node)) = N_Function_Call then
!                            return
!                              Call_To_Parent_Dispatching_Op_Must_Be_Mapped
!                                (Parent (Call_Node));
                          end if;
  
                          return False;
--- 1693,1726 ----
                               and then Has_Controlling_Result (Subp)
                             then
                                return True;
+ 
+                            --  Recursively check any actuals that are function
+                            --  calls with controlling results.
+ 
+                            elsif Nkind (Actual) = N_Function_Call
+                              and then
+                                Has_Controlling_Result
+                                  (Entity (Name (Actual)))
+                              and then
+                                Must_Map_Call_To_Parent_Primitive
+                                  (Actual, Check_Parents => False)
+                            then
+                               return True;
                             end if;
  
                             Next_Actual (Actual);
                          end loop;
  
!                         --  Recursively check parents that are function calls,
!                         --  to handle cases like "F1 (F2, F3 (X))", where
!                         --  Call_Node is the call to F2, and we need to map
!                         --  F1, F2, and F3 due to the reference to formal X.
! 
!                         if Check_Parents
!                           and then Nkind (Parent (Call_Node)) = N_Function_Call
!                         then
!                            return Must_Map_Call_To_Parent_Primitive
!                                     (Parent (Call_Node));
                          end if;
  
                          return False;
*************** package body Exp_Util is
*** 1619,1625 ****
                       else
                          return False;
                       end if;
!                   end Call_To_Parent_Dispatching_Op_Must_Be_Mapped;
  
                 begin
                    --  If N's entity is in the map, then the entity is either
--- 1728,1734 ----
                       else
                          return False;
                       end if;
!                   end Must_Map_Call_To_Parent_Primitive;
  
                 begin
                    --  If N's entity is in the map, then the entity is either
*************** package body Exp_Util is
*** 1634,1641 ****
  
                    if not Is_Subprogram (Entity (N))
                      or else Nkind (Parent (N)) /= N_Function_Call
!                     or else
!                       Call_To_Parent_Dispatching_Op_Must_Be_Mapped (Parent (N))
                    then
                       Rewrite (N, New_Occurrence_Of (New_E, Sloc (N)));
                    end if;
--- 1743,1749 ----
  
                    if not Is_Subprogram (Entity (N))
                      or else Nkind (Parent (N)) /= N_Function_Call
!                     or else Must_Map_Call_To_Parent_Primitive (Parent (N))
                    then
                       Rewrite (N, New_Occurrence_Of (New_E, Sloc (N)));
                    end if;
*************** package body Exp_Util is
*** 6074,6091 ****
        --  now known to be protected, the finalization routine is the one
        --  defined on the corresponding record of the ancestor (corresponding
        --  records do not automatically inherit operations, but maybe they
!       --  should???)
  
!       if Is_Untagged_Derivation (Btyp) then
           if Is_Protected_Type (Btyp) then
              Utyp := Corresponding_Record_Type (Root_Type (Btyp));
  
           else
!             Utyp := Underlying_Type (Root_Type (Btyp));
! 
!             if Is_Protected_Type (Utyp) then
!                Utyp := Corresponding_Record_Type (Utyp);
!             end if;
           end if;
        end if;
  
--- 6182,6206 ----
        --  now known to be protected, the finalization routine is the one
        --  defined on the corresponding record of the ancestor (corresponding
        --  records do not automatically inherit operations, but maybe they
!       --  should???). This does not apply to array types, where every base
!       --  type has a finalization routine that depends on the first subtype.
  
!       if Is_Untagged_Derivation (Btyp) and then not Is_Array_Type (Btyp) then
           if Is_Protected_Type (Btyp) then
              Utyp := Corresponding_Record_Type (Root_Type (Btyp));
  
           else
!             declare
!                Root : constant Entity_Id := Underlying_Type (Root_Type (Btyp));
!             begin
!                if Is_Protected_Type (Root) then
!                   Utyp := Corresponding_Record_Type (Root);
!                else
!                   while No (TSS (Utyp, TSS_Finalize_Address)) loop
!                      Utyp := Underlying_Type (Base_Type (Etype (Utyp)));
!                   end loop;
!                end if;
!             end;
           end if;
        end if;
  
*************** package body Exp_Util is
*** 8058,8078 ****
              --  never climb up as far as the N_Expression_With_Actions itself.
  
              when N_Expression_With_Actions =>
!                if N = Expression (P) then
!                   if Is_Empty_List (Actions (P)) then
!                      Append_List_To (Actions (P), Ins_Actions);
!                      Analyze_List (Actions (P));
!                   else
!                      Insert_List_After_And_Analyze
!                        (Last (Actions (P)), Ins_Actions);
!                   end if;
! 
!                   return;
  
                 else
!                   raise Program_Error;
                 end if;
  
              --  Case of appearing in the condition of a while expression or
              --  elsif. We insert the actions into the Condition_Actions field.
              --  They will be moved further out when the while loop or elsif
--- 8173,8193 ----
              --  never climb up as far as the N_Expression_With_Actions itself.
  
              when N_Expression_With_Actions =>
!                if Is_List_Member (N) and then List_Containing (N) = Actions (P)
!                then
!                   raise Program_Error;
!                end if;
  
+                if Is_Empty_List (Actions (P)) then
+                   Append_List_To (Actions (P), Ins_Actions);
+                   Analyze_List (Actions (P));
                 else
!                   Insert_List_After_And_Analyze
!                     (Last (Actions (P)), Ins_Actions);
                 end if;
  
+                return;
+ 
              --  Case of appearing in the condition of a while expression or
              --  elsif. We insert the actions into the Condition_Actions field.
              --  They will be moved further out when the while loop or elsif
*************** package body Exp_Util is
*** 8200,8219 ****
                 elsif Nkind (Parent (P)) in N_Variant | N_Record_Definition then
                    null;
  
!                --  Do not insert freeze nodes within the loop generated for
!                --  an aggregate, because they may be elaborated too late for
!                --  subsequent use in the back end: within a package spec the
!                --  loop is part of the elaboration procedure and is only
!                --  elaborated during the second pass.
  
!                --  If the loop comes from source, or the entity is local to the
!                --  loop itself it must remain within.
  
!                elsif Nkind (Parent (P)) = N_Loop_Statement
!                  and then not Comes_From_Source (Parent (P))
                   and then Nkind (First (Ins_Actions)) = N_Freeze_Entity
!                  and then
!                    Scope (Entity (First (Ins_Actions))) /= Current_Scope
                 then
                    null;
  
--- 8315,8338 ----
                 elsif Nkind (Parent (P)) in N_Variant | N_Record_Definition then
                    null;
  
!                --  Do not insert freeze nodes within a block or loop generated
!                --  for an aggregate, because they may be elaborated too late
!                --  for subsequent use in the back end: within a package spec,
!                --  the block or loop is part of the elaboration procedure and
!                --  is only elaborated during the second pass.
  
!                --  If the block or loop comes from source, or the entity is
!                --  local to the block or loop itself, it must remain within.
  
!                elsif ((Nkind (Parent (P)) = N_Handled_Sequence_Of_Statements
!                         and then
!                           Nkind (Parent (Parent (P))) = N_Block_Statement
!                         and then not Comes_From_Source (Parent (Parent (P))))
!                       or else (Nkind (Parent (P)) = N_Loop_Statement
!                                 and then not Comes_From_Source (Parent (P))))
                   and then Nkind (First (Ins_Actions)) = N_Freeze_Entity
!                  and then not
!                    Within_Scope (Entity (First (Ins_Actions)), Current_Scope)
                 then
                    null;
  
*************** package body Exp_Util is
*** 8700,8705 ****
--- 8819,8838 ----
        end if;
     end Is_Captured_Function_Call;
  
+    -------------------------------------------------
+    -- Is_Constr_Array_Subt_Of_Unc_With_Controlled --
+    -------------------------------------------------
+ 
+    function Is_Constr_Array_Subt_Of_Unc_With_Controlled (Typ : Entity_Id)
+      return Boolean
+    is
+    begin
+       return Is_Array_Type (Typ)
+         and then Is_Constrained (Typ)
+         and then Has_Controlled_Component (Typ)
+         and then not Is_Constrained (First_Subtype (Typ));
+    end Is_Constr_Array_Subt_Of_Unc_With_Controlled;
+ 
     ------------------------------------------
     -- Is_Conversion_Or_Reference_To_Formal --
     ------------------------------------------
*************** package body Exp_Util is
*** 8743,8748 ****
--- 8876,8972 ----
          and then Nkind (Name (N)) = N_Explicit_Dereference;
     end Is_Expanded_Class_Wide_Interface_Object_Decl;
  
+    ----------------------------------
+    -- Is_Expression_Of_Func_Return --
+    ----------------------------------
+ 
+    function Is_Expression_Of_Func_Return (N : Node_Id) return Boolean is
+       Par : constant Node_Id := Parent (N);
+ 
+    begin
+       return Nkind (Par) = N_Simple_Return_Statement
+         or else (Nkind (Par) in N_Object_Declaration
+                               | N_Object_Renaming_Declaration
+                   and then Is_Return_Object (Defining_Entity (Par)));
+    end Is_Expression_Of_Func_Return;
+ 
+    ---------------------------
+    -- Is_Finalizable_Access --
+    ---------------------------
+ 
+    function Is_Finalizable_Access (Decl : Node_Id) return Boolean is
+       Obj   : constant Entity_Id := Defining_Identifier (Decl);
+       Typ   : constant Entity_Id := Base_Type (Etype (Obj));
+       Desig : constant Entity_Id := Available_View (Designated_Type (Typ));
+       Expr  : constant Node_Id   := Expression (Decl);
+ 
+       Secondary_Stack_Val : constant Uint :=
+         UI_From_Int (BIP_Allocation_Form'Pos (Secondary_Stack));
+ 
+       Actual : Node_Id;
+       Call   : Node_Id;
+       Formal : Node_Id;
+       Param  : Node_Id;
+ 
+    begin
+       --  The prerequisite is a reference to a controlled object
+ 
+       if No (Expr)
+         or else Nkind (Expr) /= N_Reference
+         or else not Needs_Finalization (Desig)
+       then
+          return False;
+       end if;
+ 
+       Call := Unqual_Conv (Prefix (Expr));
+ 
+       --  For a BIP function call, the only case where the return object needs
+       --  to be finalized through Obj is when it is allocated on the secondary
+       --  stack; when it is allocated in the caller, it is finalized directly,
+       --  and when it is allocated on the global heap or in a storage pool, it
+       --  is finalized through another mechanism.
+ 
+       --  Obj : Access_Typ :=
+       --    BIP_Function_Call (BIPalloc => Secondary_Stack, ...)'reference;
+ 
+       if Is_Build_In_Place_Function_Call (Call) then
+ 
+          --  Examine all parameter associations of the function call
+ 
+          Param := First (Parameter_Associations (Call));
+          while Present (Param) loop
+             if Nkind (Param) = N_Parameter_Association then
+                Formal := Selector_Name (Param);
+                Actual := Explicit_Actual_Parameter (Param);
+ 
+                --  A match for BIPalloc => Secondary_Stack has been found
+ 
+                if Is_Build_In_Place_Entity (Formal)
+                  and then BIP_Suffix_Kind (Formal) = BIP_Alloc_Form
+                  and then Nkind (Actual) = N_Integer_Literal
+                  and then Intval (Actual) = Secondary_Stack_Val
+                then
+                   return True;
+                end if;
+             end if;
+ 
+             Next (Param);
+          end loop;
+ 
+       --  For a non-BIP function call, the only case where the return object
+       --  need not be finalized is when it itself is going to be returned.
+ 
+       --  Obj : Typ := Non_BIP_Function_Call'reference;
+ 
+       elsif Nkind (Call) = N_Function_Call
+         and then not Is_Related_To_Func_Return (Obj)
+       then
+          return True;
+       end if;
+ 
+       return False;
+    end Is_Finalizable_Access;
+ 
     ------------------------------
     -- Is_Finalizable_Transient --
     ------------------------------
*************** package body Exp_Util is
*** 8754,8772 ****
        Obj_Id  : constant Entity_Id := Defining_Identifier (Decl);
        Obj_Typ : constant Entity_Id := Base_Type (Etype (Obj_Id));
  
-       function Initialized_By_Aliased_BIP_Func_Call
-         (Trans_Id : Entity_Id) return Boolean;
-       --  Determine whether transient object Trans_Id is initialized by a
-       --  build-in-place function call where the BIPalloc parameter either
-       --  does not exist or is Caller_Allocation, and BIPaccess is not null.
-       --  This case creates an aliasing between the returned value and the
-       --  value denoted by BIPaccess.
- 
-       function Initialized_By_Reference (Trans_Id : Entity_Id) return Boolean;
-       --  Determine whether transient object Trans_Id is initialized by a
-       --  reference to another object. This is the only case where we can
-       --  possibly finalize a transient object through an access value.
- 
        function Is_Aliased
          (Trans_Id   : Entity_Id;
           First_Stmt : Node_Id) return Boolean;
--- 8978,8983 ----
*************** package body Exp_Util is
*** 8792,8906 ****
        --  Return True if N is directly part of a build-in-place return
        --  statement.
  
-       ------------------------------------------
-       -- Initialized_By_Aliased_BIP_Func_Call --
-       ------------------------------------------
- 
-       function Initialized_By_Aliased_BIP_Func_Call
-         (Trans_Id : Entity_Id) return Boolean
-       is
-          Call : Node_Id := Expression (Parent (Trans_Id));
- 
-       begin
-          --  Build-in-place calls usually appear in 'reference format
- 
-          if Nkind (Call) = N_Reference then
-             Call := Prefix (Call);
-          end if;
- 
-          Call := Unqual_Conv (Call);
- 
-          --  We search for a formal with a matching suffix. We can't search
-          --  for the full name, because of the code at the end of Sem_Ch6.-
-          --  Create_Extra_Formals, which copies the Extra_Formals over to
-          --  the Alias of an instance, which will cause the formals to have
-          --  "incorrect" names. See also Exp_Ch6.Build_In_Place_Formal.
- 
-          if Is_Build_In_Place_Function_Call (Call) then
-             declare
-                Caller_Allocation_Val : constant Uint :=
-                  UI_From_Int (BIP_Allocation_Form'Pos (Caller_Allocation));
-                Access_Suffix         : constant String :=
-                  BIP_Formal_Suffix (BIP_Object_Access);
-                Alloc_Suffix          : constant String :=
-                  BIP_Formal_Suffix (BIP_Alloc_Form);
- 
-                function Has_Suffix (Name, Suffix : String) return Boolean;
-                --  Return True if Name has suffix Suffix
- 
-                ----------------
-                -- Has_Suffix --
-                ----------------
- 
-                function Has_Suffix (Name, Suffix : String) return Boolean is
-                   Len : constant Natural := Suffix'Length;
- 
-                begin
-                   return Name'Length > Len
-                     and then Name (Name'Last - Len + 1 .. Name'Last) = Suffix;
-                end Has_Suffix;
- 
-                Access_OK  : Boolean := False;
-                Alloc_OK   : Boolean := True;
-                Param      : Node_Id;
- 
-             begin
-                --  Examine all parameter associations of the function call
- 
-                Param := First (Parameter_Associations (Call));
- 
-                while Present (Param) loop
-                   if Nkind (Param) = N_Parameter_Association
-                     and then Nkind (Selector_Name (Param)) = N_Identifier
-                   then
-                      declare
-                         Actual : constant Node_Id :=
-                           Explicit_Actual_Parameter (Param);
-                         Formal : constant Node_Id :=
-                           Selector_Name (Param);
-                         Name   : constant String :=
-                           Get_Name_String (Chars (Formal));
- 
-                      begin
-                         --  A nonnull BIPaccess has been found
- 
-                         if Has_Suffix (Name, Access_Suffix)
-                           and then Nkind (Actual) /= N_Null
-                         then
-                            Access_OK := True;
- 
-                         --  A BIPalloc has been found
- 
-                         elsif Has_Suffix (Name, Alloc_Suffix)
-                           and then Nkind (Actual) = N_Integer_Literal
-                         then
-                            Alloc_OK := Intval (Actual) = Caller_Allocation_Val;
-                         end if;
-                      end;
-                   end if;
- 
-                   Next (Param);
-                end loop;
- 
-                return Access_OK and Alloc_OK;
-             end;
-          end if;
- 
-          return False;
-       end Initialized_By_Aliased_BIP_Func_Call;
- 
-       ------------------------------
-       -- Initialized_By_Reference --
-       ------------------------------
- 
-       function Initialized_By_Reference (Trans_Id : Entity_Id) return Boolean
-       is
-          Expr : constant Node_Id := Expression (Parent (Trans_Id));
- 
-       begin
-          return Present (Expr) and then Nkind (Expr) = N_Reference;
-       end Initialized_By_Reference;
- 
        ----------------
        -- Is_Aliased --
        ----------------
--- 9003,9008 ----
*************** package body Exp_Util is
*** 9006,9018 ****
  
           Stmt := First_Stmt;
           while Present (Stmt) loop
!             --  Transient objects initialized by a reference are finalized
!             --  (see Initialized_By_Reference above), so we must make sure
!             --  not to finalize the referenced object twice. And we cannot
!             --  finalize it at all if it is referenced by the nontransient
!             --  object serviced by the transient scope.
  
!             if Nkind (Stmt) = N_Object_Declaration then
                 Expr := Expression (Stmt);
  
                 --  Aliasing of the form:
--- 9108,9123 ----
  
           Stmt := First_Stmt;
           while Present (Stmt) loop
!             --  (Transient) objects initialized by a reference to another named
!             --  object are never finalized (see Is_Finalizable_Access), so we
!             --  need not worry about finalizing (transient) referenced objects
!             --  twice. Therefore, we only need to look at the nontransient
!             --  object serviced by the transient scope, if it exists and is
!             --  declared as a reference to another named object.
  
!             if Nkind (Stmt) = N_Object_Declaration
!               and then Stmt = N
!             then
                 Expr := Expression (Stmt);
  
                 --  Aliasing of the form:
*************** package body Exp_Util is
*** 9026,9033 ****
                    return True;
                 end if;
  
!             --  (Transient) renamings are never finalized so we need not bother
!             --  about finalizing transient renamed objects twice. Therefore, we
              --  we only need to look at the nontransient object serviced by the
              --  transient scope, if it exists and is declared as a renaming.
  
--- 9131,9138 ----
                    return True;
                 end if;
  
!             --  (Transient) renamings are never finalized so we need not worry
!             --  about finalizing (transient) renamed objects twice. Therefore,
              --  we only need to look at the nontransient object serviced by the
              --  transient scope, if it exists and is declared as a renaming.
  
*************** package body Exp_Util is
*** 9227,9238 ****
        function Is_Part_Of_BIP_Return_Statement (N : Node_Id) return Boolean is
           Subp    : constant Entity_Id := Current_Subprogram;
           Context : Node_Id;
        begin
           --  First check if N is part of a BIP function
  
!          if No (Subp)
!            or else not Is_Build_In_Place_Function (Subp)
!          then
              return False;
           end if;
  
--- 9332,9342 ----
        function Is_Part_Of_BIP_Return_Statement (N : Node_Id) return Boolean is
           Subp    : constant Entity_Id := Current_Subprogram;
           Context : Node_Id;
+ 
        begin
           --  First check if N is part of a BIP function
  
!          if No (Subp) or else not Is_Build_In_Place_Function (Subp) then
              return False;
           end if;
  
*************** package body Exp_Util is
*** 9256,9261 ****
--- 9360,9374 ----
     --  Start of processing for Is_Finalizable_Transient
  
     begin
+       --  If the node serviced by the transient context is a return statement,
+       --  then the finalization needs to be deferred to the generic machinery.
+ 
+       if Nkind (N) = N_Simple_Return_Statement
+         or else Is_Part_Of_BIP_Return_Statement (N)
+       then
+          return False;
+       end if;
+ 
        --  Handle access types
  
        if Is_Access_Type (Desig) then
*************** package body Exp_Util is
*** 9265,9298 ****
        return
          Ekind (Obj_Id) in E_Constant | E_Variable
            and then Needs_Finalization (Desig)
-           and then Nkind (N) /= N_Simple_Return_Statement
-           and then not Is_Part_Of_BIP_Return_Statement (N)
  
            --  Do not consider a transient object that was already processed
  
            and then not Is_Finalized_Transient (Obj_Id)
  
!           --  Do not consider renamed or 'reference-d transient objects because
!           --  the act of renaming extends the object's lifetime.
  
!           and then not Is_Aliased (Obj_Id, Decl)
  
!           --  If the transient object is of an access type, check that it is
!           --  initialized by a reference to another object.
  
            and then (not Is_Access_Type (Obj_Typ)
!                      or else Initialized_By_Reference (Obj_Id))
! 
!           --  Do not consider transient objects which act as indirect aliases
!           --  of build-in-place function results.
! 
!           and then not Initialized_By_Aliased_BIP_Func_Call (Obj_Id)
  
!           --  Do not consider iterators because those are treated as normal
!           --  controlled objects and are processed by the usual finalization
!           --  machinery. This avoids the double finalization of an iterator.
  
!           and then not Is_Iterator (Desig)
  
            --  Do not consider containers in the context of iterator loops. Such
            --  transient objects must exist for as long as the loop is around,
--- 9378,9404 ----
        return
          Ekind (Obj_Id) in E_Constant | E_Variable
            and then Needs_Finalization (Desig)
  
            --  Do not consider a transient object that was already processed
  
            and then not Is_Finalized_Transient (Obj_Id)
  
!           --  Do not consider iterators because those are treated as normal
!           --  controlled objects and are processed by the usual finalization
!           --  machinery. This avoids the double finalization of an iterator.
  
!           and then not Is_Iterator (Desig)
  
!           --  If the transient object is of an access type, check that it must
!           --  be finalized.
  
            and then (not Is_Access_Type (Obj_Typ)
!                      or else Is_Finalizable_Access (Decl))
  
!           --  Do not consider renamed transient objects because the act of
!           --  renaming extends the object's lifetime.
  
!           and then not Is_Aliased (Obj_Id, Decl)
  
            --  Do not consider containers in the context of iterator loops. Such
            --  transient objects must exist for as long as the loop is around,
*************** package body Exp_Util is
*** 9361,9382 ****
          and then Present (LSP_Subprogram (E));
     end Is_LSP_Wrapper;
  
-    --------------------------
-    -- Is_Non_BIP_Func_Call --
-    --------------------------
- 
-    function Is_Non_BIP_Func_Call (Expr : Node_Id) return Boolean is
-    begin
-       --  The expected call is of the format
-       --
-       --    Func_Call'reference
- 
-       return
-         Nkind (Expr) = N_Reference
-           and then Nkind (Prefix (Expr)) = N_Function_Call
-           and then not Is_Build_In_Place_Function_Call (Prefix (Expr));
-    end Is_Non_BIP_Func_Call;
- 
     ----------------------------------
     -- Is_Possibly_Unaligned_Object --
     ----------------------------------
--- 9467,9472 ----
*************** package body Exp_Util is
*** 9649,9669 ****
  
     function Is_Related_To_Func_Return (Id : Entity_Id) return Boolean is
        Expr : constant Node_Id := Related_Expression (Id);
     begin
        --  In the case of a function with a class-wide result that returns
        --  a call to a function with a specific result, we introduce a
        --  type conversion for the return expression. We do not want that
        --  type conversion to influence the result of this function.
  
!       return
!         Present (Expr)
!           and then Nkind (Unqual_Conv (Expr)) = N_Explicit_Dereference
!           and then (Nkind (Parent (Expr)) = N_Simple_Return_Statement
!                      or else
!                        (Nkind (Parent (Expr)) in N_Object_Declaration
!                                                | N_Object_Renaming_Declaration
!                          and then
!                         Is_Return_Object (Defining_Entity (Parent (Expr)))));
     end Is_Related_To_Func_Return;
  
     --------------------------------
--- 9739,9754 ----
  
     function Is_Related_To_Func_Return (Id : Entity_Id) return Boolean is
        Expr : constant Node_Id := Related_Expression (Id);
+ 
     begin
        --  In the case of a function with a class-wide result that returns
        --  a call to a function with a specific result, we introduce a
        --  type conversion for the return expression. We do not want that
        --  type conversion to influence the result of this function.
  
!       return Present (Expr)
!         and then Nkind (Unqual_Conv (Expr)) = N_Explicit_Dereference
!         and then Is_Expression_Of_Func_Return (Expr);
     end Is_Related_To_Func_Return;
  
     --------------------------------
*************** package body Exp_Util is
*** 9749,9803 ****
        end if;
     end Is_Renamed_Object;
  
-    --------------------------------------
-    -- Is_Secondary_Stack_BIP_Func_Call --
-    --------------------------------------
- 
-    function Is_Secondary_Stack_BIP_Func_Call (Expr : Node_Id) return Boolean is
-       Actual    : Node_Id;
-       Call      : Node_Id := Expr;
-       Formal    : Node_Id;
-       Param     : Node_Id;
- 
-    begin
-       --  Build-in-place calls usually appear in 'reference format. Note that
-       --  the accessibility check machinery may add an extra 'reference due to
-       --  side-effect removal.
- 
-       while Nkind (Call) = N_Reference loop
-          Call := Prefix (Call);
-       end loop;
- 
-       Call := Unqual_Conv (Call);
- 
-       if Is_Build_In_Place_Function_Call (Call) then
- 
-          --  Examine all parameter associations of the function call
- 
-          Param := First (Parameter_Associations (Call));
-          while Present (Param) loop
-             if Nkind (Param) = N_Parameter_Association then
-                Formal := Selector_Name (Param);
-                Actual := Explicit_Actual_Parameter (Param);
- 
-                --  A match for BIPalloc => 2 has been found
- 
-                if Is_Build_In_Place_Entity (Formal)
-                  and then BIP_Suffix_Kind (Formal) = BIP_Alloc_Form
-                  and then Nkind (Actual) = N_Integer_Literal
-                  and then Intval (Actual) = Uint_2
-                then
-                   return True;
-                end if;
-             end if;
- 
-             Next (Param);
-          end loop;
-       end if;
- 
-       return False;
-    end Is_Secondary_Stack_BIP_Func_Call;
- 
     ------------------------------
     -- Is_Secondary_Stack_Thunk --
     ------------------------------
--- 9834,9839 ----
*************** package body Exp_Util is
*** 12840,12857 ****
        --  Otherwise we generate a reference to the expression
  
        else
!          --  Special processing for function calls that return a limited type.
!          --  We need to build a declaration that will enable build-in-place
!          --  expansion of the call. This is not done if the context is already
!          --  an object declaration, to prevent infinite recursion.
  
!          --  This is relevant only in Ada 2005 mode. In Ada 95 programs we have
!          --  to accommodate functions returning limited objects by reference.
  
!          if Ada_Version >= Ada_2005
!            and then Nkind (Exp) = N_Function_Call
!            and then Is_Inherently_Limited_Type (Etype (Exp))
             and then Nkind (Parent (Exp)) /= N_Object_Declaration
           then
              declare
                 Obj  : constant Entity_Id := Make_Temporary (Loc, 'F', Exp);
--- 12876,12897 ----
        --  Otherwise we generate a reference to the expression
  
        else
!          --  Special processing for function calls with a result type that is
!          --  either BIP or a constrained array with controlled component and
!          --  an unconstrained first subtype, when the context is neither an
!          --  object declaration (to prevent infinite recursion) nor a function
!          --  return (to propagate the anonymous return object).
  
!          --  We need to build an object declaration to trigger build-in-place
!          --  expansion of the call in the former case, and addition of bounds
!          --  to the object in the latter case.
  
!          if Nkind (Exp) = N_Function_Call
!            and then (Is_Build_In_Place_Result_Type (Exp_Type)
!                       or else
!                      Is_Constr_Array_Subt_Of_Unc_With_Controlled (Exp_Type))
             and then Nkind (Parent (Exp)) /= N_Object_Declaration
+            and then not Is_Expression_Of_Func_Return (Exp)
           then
              declare
                 Obj  : constant Entity_Id := Make_Temporary (Loc, 'F', Exp);
*************** package body Exp_Util is
*** 13460,13466 ****
        Nested_Constructs : Boolean) return Boolean
     is
        Decl    : Node_Id;
-       Expr    : Node_Id;
        Obj_Id  : Entity_Id;
        Obj_Typ : Entity_Id;
        Pack_Id : Entity_Id;
--- 13500,13505 ----
*************** package body Exp_Util is
*** 13498,13504 ****
           elsif Nkind (Decl) = N_Object_Declaration then
              Obj_Id  := Defining_Identifier (Decl);
              Obj_Typ := Base_Type (Etype (Obj_Id));
-             Expr    := Expression (Decl);
  
              --  Bypass any form of processing for objects which have their
              --  finalization disabled. This applies only to objects at the
--- 13537,13542 ----
*************** package body Exp_Util is
*** 13552,13572 ****
              then
                 return True;
  
!             --  The object is of the form:
!             --    Obj : Access_Typ := Non_BIP_Function_Call'reference;
!             --
!             --    Obj : Access_Typ :=
!             --            BIP_Function_Call (BIPalloc => 2, ...)'reference;
  
              elsif Is_Access_Type (Obj_Typ)
!               and then Needs_Finalization
!                          (Available_View (Designated_Type (Obj_Typ)))
!               and then Present (Expr)
!               and then
!                 (Is_Secondary_Stack_BIP_Func_Call (Expr)
!                   or else
!                     (Is_Non_BIP_Func_Call (Expr)
!                       and then not Is_Related_To_Func_Return (Obj_Id)))
              then
                 return True;
  
--- 13590,13599 ----
              then
                 return True;
  
!             --  The object is an access-to-controlled that must be finalized
  
              elsif Is_Access_Type (Obj_Typ)
!               and then Is_Finalizable_Access (Decl)
              then
                 return True;
  
*************** package body Exp_Util is
*** 14575,14580 ****
--- 14602,14612 ----
           when N_Aggregate =>
              return Compile_Time_Known_Aggregate (N);
  
+          --  A reference is side-effect-free
+ 
+          when N_Reference =>
+             return True;
+ 
           --  We consider that anything else has side effects. This is a bit
           --  crude, but we are pretty close for most common cases, and we
           --  are certainly correct (i.e. we never return True when the
diff -Nrcpad gcc-16-20250629/gcc/ada/exp_util.ads gcc-16-20250706/gcc/ada/exp_util.ads
*** gcc-16-20250629/gcc/ada/exp_util.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/exp_util.ads	Sun Jul  6 22:32:09 2025
*************** package Exp_Util is
*** 816,821 ****
--- 816,826 ----
     --    Rnn : constant Ann := Func (...)'reference;
     --    Rnn.all
  
+    function Is_Constr_Array_Subt_Of_Unc_With_Controlled (Typ : Entity_Id)
+      return Boolean;
+    --  Return True if Typ is a constrained subtype of an array type with an
+    --  unconstrained first subtype and a controlled component type.
+ 
     function Is_Conversion_Or_Reference_To_Formal (N : Node_Id) return Boolean;
     --  Return True if N is a type conversion, or a dereference thereof, or a
     --  reference to a formal parameter.
*************** package Exp_Util is
*** 825,830 ****
--- 830,843 ----
     --  Determine if N is the expanded code for a class-wide interface type
     --  object declaration.
  
+    function Is_Finalizable_Access (Decl : Node_Id) return Boolean;
+    --  Determine whether declaration Decl denotes an access-to-controlled
+    --  object that must be finalized, i.e. both that the designated object
+    --  is controlled and that it must be finalized through this access, in
+    --  particular that it will not be also finalized directly. That is the
+    --  case only for objects initialized by a reference to a function call
+    --  that meet specific conditions.
+ 
     function Is_Finalizable_Transient
       (Decl : Node_Id;
        N    : Node_Id) return Boolean;
*************** package Exp_Util is
*** 851,859 ****
     --  preconditions or postconditions affected by overriding (AI12-0195).
     --  LSP stands for Liskov Substitution Principle.
  
-    function Is_Non_BIP_Func_Call (Expr : Node_Id) return Boolean;
-    --  Determine whether node Expr denotes a non build-in-place function call
- 
     function Is_Possibly_Unaligned_Object (N : Node_Id) return Boolean;
     --  Node N is an object reference. This function returns True if it is
     --  possible that the object may not be aligned according to the normal
--- 864,869 ----
*************** package Exp_Util is
*** 898,907 ****
     --  We consider that a (1 .. 2) is a renamed object since it is the prefix
     --  of the name in the renaming declaration.
  
-    function Is_Secondary_Stack_BIP_Func_Call (Expr : Node_Id) return Boolean;
-    --  Determine whether Expr denotes a build-in-place function which returns
-    --  its result on the secondary stack.
- 
     function Is_Secondary_Stack_Thunk (Id : Entity_Id) return Boolean;
     --  Determine whether Id denotes a secondary stack thunk
  
--- 908,913 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/expander.adb gcc-16-20250706/gcc/ada/expander.adb
*** gcc-16-20250629/gcc/ada/expander.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/expander.adb	Sun Jul  6 22:32:09 2025
*************** package body Expander is
*** 230,235 ****
--- 230,238 ----
                 when N_Conditional_Entry_Call =>
                    Expand_N_Conditional_Entry_Call (N);
  
+                when N_Continue_Statement =>
+                   Expand_N_Continue_Statement (N);
+ 
                 when N_Delay_Relative_Statement =>
                    Expand_N_Delay_Relative_Statement (N);
  
diff -Nrcpad gcc-16-20250629/gcc/ada/freeze.adb gcc-16-20250706/gcc/ada/freeze.adb
*** gcc-16-20250629/gcc/ada/freeze.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/freeze.adb	Sun Jul  6 22:32:09 2025
*************** package body Freeze is
*** 765,770 ****
--- 765,773 ----
        --  in fact constrained by non-static discriminant values. Could be made
        --  more precise ???
  
+       function Value_Known (Exp : Node_Id) return Boolean;
+       --  Return True if the value of expression Exp is known at compile time
+ 
        --------------------
        -- Set_Small_Size --
        --------------------
*************** package body Freeze is
*** 880,892 ****
                       High := Type_High_Bound (Etype (Index));
                    end if;
  
!                   if not Compile_Time_Known_Value (Low)
!                     or else not Compile_Time_Known_Value (High)
!                     or else Etype (Index) = Any_Type
!                   then
                       return False;
  
!                   else
                       Dim := Expr_Value (High) - Expr_Value (Low) + 1;
  
                       if Dim > Uint_0 then
--- 883,895 ----
                       High := Type_High_Bound (Etype (Index));
                    end if;
  
!                   if Etype (Index) = Any_Type then
                       return False;
  
!                   elsif Compile_Time_Known_Value (Low)
!                     and then Compile_Time_Known_Value (High)
!                   then
! 
                       Dim := Expr_Value (High) - Expr_Value (Low) + 1;
  
                       if Dim > Uint_0 then
*************** package body Freeze is
*** 894,899 ****
--- 897,908 ----
                       else
                          Size := Uint_0;
                       end if;
+ 
+                   elsif Value_Known (Low) and then Value_Known (High) then
+                      Size := Uint_0;
+ 
+                   else
+                      return False;
                    end if;
  
                    Next_Index (Index);
*************** package body Freeze is
*** 1160,1165 ****
--- 1169,1238 ----
           return True;
        end Static_Discriminated_Components;
  
+       -----------------
+       -- Value_Known --
+       -----------------
+ 
+       function Value_Known (Exp : Node_Id) return Boolean is
+       begin
+          --  This is the immediate case
+ 
+          if Compile_Time_Known_Value (Exp) then
+             return True;
+          end if;
+ 
+          --  The value may be known only to the back end, the typical example
+          --  being the alignment or the various sizes of composite types; in
+          --  the latter case, we may mutually recurse with Size_Known.
+ 
+          case Nkind (Exp) is
+             when N_Attribute_Reference =>
+                declare
+                   P : constant Node_Id := Prefix (Exp);
+ 
+                begin
+                   if not Is_Entity_Name (P)
+                     or else not Is_Type (Entity (P))
+                   then
+                      return False;
+                   end if;
+ 
+                   case Get_Attribute_Id (Attribute_Name (Exp)) is
+                      when Attribute_Alignment =>
+                         return True;
+ 
+                      when Attribute_Component_Size =>
+                         return Size_Known (Component_Type (Entity (P)));
+ 
+                      when Attribute_Object_Size
+                         | Attribute_Size
+                         | Attribute_Value_Size
+                      =>
+                         return Size_Known (Entity (P));
+ 
+                      when others =>
+                         return False;
+                   end case;
+                end;
+ 
+             when N_Binary_Op =>
+                return Value_Known (Left_Opnd (Exp))
+                  and then Value_Known (Right_Opnd (Exp));
+ 
+             when N_Qualified_Expression
+                | N_Type_Conversion
+                | N_Unchecked_Type_Conversion
+             =>
+                return Value_Known (Expression (Exp));
+ 
+             when N_Unary_Op =>
+                return Value_Known (Right_Opnd (Exp));
+ 
+             when others =>
+                return False;
+          end case;
+       end Value_Known;
+ 
     --  Start of processing for Check_Compile_Time_Size
  
     begin
*************** package body Freeze is
*** 1496,1507 ****
              New_Formal := Defining_Identifier (New_F_Spec);
  
              --  If the controlling argument is inherited, add conversion to
!             --  parent type for the call.
  
              if Is_Controlling_Formal (Formal) then
                 Append_To (Actuals,
!                  Make_Type_Conversion (Loc,
!                    New_Occurrence_Of (Etype (Formal), Loc),
                     New_Occurrence_Of (New_Formal, Loc)));
              else
                 Append_To (Actuals, New_Occurrence_Of (New_Formal, Loc));
--- 1569,1581 ----
              New_Formal := Defining_Identifier (New_F_Spec);
  
              --  If the controlling argument is inherited, add conversion to
!             --  parent type for the call. We make this an unchecked conversion
!             --  since the formal subtypes of the parent and derived subprograms
!             --  must conform, so checks should not be needed.
  
              if Is_Controlling_Formal (Formal) then
                 Append_To (Actuals,
!                  Unchecked_Convert_To (Etype (Formal),
                     New_Occurrence_Of (New_Formal, Loc)));
              else
                 Append_To (Actuals, New_Occurrence_Of (New_Formal, Loc));
*************** package body Freeze is
*** 5450,5458 ****
                       Set_Must_Be_On_Byte_Boundary (Rec);
  
                       --  Check for component clause that is inconsistent with
!                      --  the required byte boundary alignment.
  
!                      if Present (CC)
                         and then Normalized_First_Bit (Comp) mod
                                    System_Storage_Unit /= 0
                       then
--- 5524,5535 ----
                       Set_Must_Be_On_Byte_Boundary (Rec);
  
                       --  Check for component clause that is inconsistent with
!                      --  the required byte boundary alignment. Do not do this
!                      --  in CodePeer_Mode, as we do not have sufficient info
!                      --  on size and representation clauses.
  
!                      if not CodePeer_Mode
!                        and then Present (CC)
                         and then Normalized_First_Bit (Comp) mod
                                    System_Storage_Unit /= 0
                       then
diff -Nrcpad gcc-16-20250629/gcc/ada/frontend.adb gcc-16-20250706/gcc/ada/frontend.adb
*** gcc-16-20250629/gcc/ada/frontend.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/frontend.adb	Sun Jul  6 22:32:09 2025
*************** begin
*** 368,378 ****
        --  If we have restriction No_Exception_Propagation, and we did not have
        --  an explicit switch turning off Warn_On_Non_Local_Exception, then turn
        --  on this warning by default if we have encountered an exception
!       --  handler.
  
        if Restriction_Check_Required (No_Exception_Propagation)
          and then not No_Warn_On_Non_Local_Exception
          and then Exception_Handler_Encountered
        then
           Warn_On_Non_Local_Exception := True;
        end if;
--- 368,379 ----
        --  If we have restriction No_Exception_Propagation, and we did not have
        --  an explicit switch turning off Warn_On_Non_Local_Exception, then turn
        --  on this warning by default if we have encountered an exception
!       --  handler. We do not override the setting of GNATprove.
  
        if Restriction_Check_Required (No_Exception_Propagation)
          and then not No_Warn_On_Non_Local_Exception
          and then Exception_Handler_Encountered
+         and then not GNATprove_Mode
        then
           Warn_On_Non_Local_Exception := True;
        end if;
diff -Nrcpad gcc-16-20250629/gcc/ada/gcc-interface/Make-lang.in gcc-16-20250706/gcc/ada/gcc-interface/Make-lang.in
*** gcc-16-20250629/gcc/ada/gcc-interface/Make-lang.in	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gcc-interface/Make-lang.in	Sun Jul  6 22:32:09 2025
*************** GNAT_ADA_OBJS+= \
*** 531,536 ****
--- 531,537 ----
   ada/libgnat/s-bitops.o	\
   ada/libgnat/s-carun8.o	\
   ada/libgnat/s-casuti.o \
+  ada/libgnat/s-cautns.o \
   ada/libgnat/s-crtl.o	\
   ada/libgnat/s-conca2.o	\
   ada/libgnat/s-conca3.o	\
*************** GNATBIND_OBJS +=  \
*** 696,701 ****
--- 697,703 ----
   ada/libgnat/s-assert.o   \
   ada/libgnat/s-carun8.o   \
   ada/libgnat/s-casuti.o   \
+  ada/libgnat/s-cautns.o   \
   ada/libgnat/s-conca2.o   \
   ada/libgnat/s-conca3.o   \
   ada/libgnat/s-conca4.o   \
*************** check-ada-subtargets: check-acats-subtar
*** 1094,1100 ****
  # No ada-specific selftests
  selftest-ada:
  
! ACATSDIR = $(TESTSUITEDIR)/ada/acats-2
  ACATSCMD = run_acats.sh
  
  check_acats_numbers0:=1 2 3 4 5 6 7 8 9
--- 1096,1102 ----
  # No ada-specific selftests
  selftest-ada:
  
! ACATSDIR = $(TESTSUITEDIR)/ada/acats-4
  ACATSCMD = run_acats.sh
  
  check_acats_numbers0:=1 2 3 4 5 6 7 8 9
diff -Nrcpad gcc-16-20250629/gcc/ada/gcc-interface/Makefile.in gcc-16-20250706/gcc/ada/gcc-interface/Makefile.in
*** gcc-16-20250629/gcc/ada/gcc-interface/Makefile.in	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gcc-interface/Makefile.in	Sun Jul  6 22:32:09 2025
*************** GNATMAKE_OBJS = a-except.o ali.o ali-uti
*** 323,329 ****
   erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \
   gnatmake.o gnatvsn.o hostparm.o interfac.o i-c.o i-cstrin.o krunch.o lib.o \
   make.o makeusg.o make_util.o namet.o nlists.o opt.o osint.o osint-m.o \
!  output.o restrict.o rident.o s-exctab.o \
   s-secsta.o s-stalib.o s-stoele.o scans.o scng.o sdefault.o sfn_scan.o \
   s-purexc.o s-htable.o scil_ll.o sem_aux.o sinfo.o sinput.o sinput-c.o \
   snames.o stand.o stringt.o styleg.o stylesw.o system.o validsw.o \
--- 323,329 ----
   erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \
   gnatmake.o gnatvsn.o hostparm.o interfac.o i-c.o i-cstrin.o krunch.o lib.o \
   make.o makeusg.o make_util.o namet.o nlists.o opt.o osint.o osint-m.o \
!  output.o restrict.o rident.o s-exctab.o s-cautns.o \
   s-secsta.o s-stalib.o s-stoele.o scans.o scng.o sdefault.o sfn_scan.o \
   s-purexc.o s-htable.o scil_ll.o sem_aux.o sinfo.o sinput.o sinput-c.o \
   snames.o stand.o stringt.o styleg.o stylesw.o system.o validsw.o \
*************** gnatlib-shared:
*** 840,874 ****
  	     PICFLAG_FOR_TARGET="$(PICFLAG_FOR_TARGET)" \
  	     $(GNATLIB_SHARED)
  
- # When building a SJLJ runtime for VxWorks, we need to ensure that the extra
- # linker options needed for ZCX are not passed to prevent the inclusion of
- # useless objects and potential troubles from the presence of extra symbols
- # and references in some configurations.  The inhibition is performed by
- # commenting the pragma instead of deleting the line, as the latter might
- # result in getting multiple blank lines, hence possible style check errors.
- gnatlib-sjlj:
- 	$(MAKE) $(FLAGS_TO_PASS) \
- 	     EH_MECHANISM="" \
- 	     MULTISUBDIR="$(MULTISUBDIR)" \
- 	     THREAD_KIND="$(THREAD_KIND)" \
- 	     LN_S="$(LN_S)" \
- 	     ../stamp-gnatlib1-$(RTSDIR)
- 	sed \
- 	  -e 's/Frontend_Exceptions.*/Frontend_Exceptions       : constant Boolean := True;/' \
- 	  -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := False;/' \
- 	  $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
- 	$(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
- 	$(MAKE) $(FLAGS_TO_PASS) \
- 	     EH_MECHANISM="" \
- 	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- 	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
- 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- 	     FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
- 	     MULTISUBDIR="$(MULTISUBDIR)" \
- 	     THREAD_KIND="$(THREAD_KIND)" \
- 	     LN_S="$(LN_S)" \
- 	     gnatlib
- 
  gnatlib-zcx:
  	$(MAKE) $(FLAGS_TO_PASS) \
  	     EH_MECHANISM="-gcc" \
--- 840,845 ----
*************** gnatlib-zcx:
*** 877,883 ****
  	     LN_S="$(LN_S)" \
  	     ../stamp-gnatlib1-$(RTSDIR)
  	sed \
- 	  -e 's/Frontend_Exceptions.*/Frontend_Exceptions       : constant Boolean := False;/' \
  	  -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := True;/' \
  	  $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
  	$(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
--- 848,853 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/gcc-interface/decl.cc gcc-16-20250706/gcc/ada/gcc-interface/decl.cc
*** gcc-16-20250629/gcc/ada/gcc-interface/decl.cc	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gcc-interface/decl.cc	Sun Jul  6 22:32:09 2025
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 4502,4508 ****
  	  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).  */
--- 4502,4508 ----
  	  if (Known_Esize (gnat_entity))
  	    gnu_size
  	      = validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
! 			       VAR_DECL, false, false, NULL, NULL);
  
  	  /* ??? The test on Has_Size_Clause must be removed when "unknown" is
  	     no longer represented as Uint_0 (i.e. Use_New_Unknown_Rep).  */
*************** gnat_to_gnu_component_type (Entity_Id gn
*** 5444,5450 ****
    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
--- 5444,5450 ----
    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_component;
    unsigned int max_align;
  
    /* If an alignment is specified, use it as a cap on the component type
*************** gnat_to_gnu_component_type (Entity_Id gn
*** 5465,5480 ****
        && !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,
--- 5465,5486 ----
        && !TYPE_FAT_POINTER_P (gnu_type)
        && tree_fits_uhwi_p (TYPE_SIZE (gnu_type)))
      {
!       tree gnu_packable_type = make_packable_type (gnu_type, false, max_align);
!       if (gnu_packable_type != gnu_type)
! 	{
! 	  gnu_type = gnu_packable_type;
! 	  has_packed_component = true;
! 	}
!       else
! 	has_packed_component = false;
      }
    else
!     has_packed_component = is_bit_packed;
  
    /* Get and validate any specified Component_Size.  */
    gnu_comp_size
      = validate_size (Component_Size (gnat_array), gnu_type, gnat_array,
! 		     has_packed_component ? TYPE_DECL : VAR_DECL, true,
  		     Has_Component_Size_Clause (gnat_array), NULL, NULL);
  
    /* If the component type is a RECORD_TYPE that has a self-referential size,
*************** gnat_to_gnu_profile_type (Entity_Id gnat
*** 6016,6022 ****
    return gnu_type;
  }
  
! /* Return true if TYPE contains only integral data, recursively if need be.  */
  
  static bool
  type_contains_only_integral_data (tree type)
--- 6022,6029 ----
    return gnu_type;
  }
  
! /* Return true if TYPE contains only integral data, recursively if need be.
!    (integral data is to be understood as not floating-point data here).  */
  
  static bool
  type_contains_only_integral_data (tree type)
*************** type_contains_only_integral_data (tree t
*** 6036,6042 ****
        return type_contains_only_integral_data (TREE_TYPE (type));
  
      default:
!       return INTEGRAL_TYPE_P (type);
      }
  
    gcc_unreachable ();
--- 6043,6049 ----
        return type_contains_only_integral_data (TREE_TYPE (type));
  
      default:
!       return INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type);
      }
  
    gcc_unreachable ();
*************** gnat_to_gnu_subprog_type (Entity_Id gnat
*** 6414,6419 ****
--- 6421,6453 ----
  	 since structures are incomplete for the back-end.  */
        else if (Convention (gnat_subprog) != Convention_Stubbed)
  	{
+ 	  /* If we have two entries that may be returned in integer registers,
+ 	     the larger has power-of-2 size and the smaller is integer, then
+ 	     extend the smaller to this power-of-2 size to get a return type
+ 	     with power-of-2 size and no holes, again to speed up accesses.  */
+ 	  if (list_length (gnu_cico_field_list) == 2
+ 	      && gnu_cico_only_integral_type)
+ 	    {
+ 	      tree typ1 = TREE_TYPE (gnu_cico_field_list);
+ 	      tree typ2 = TREE_TYPE (DECL_CHAIN (gnu_cico_field_list));
+ 	      if (TREE_CODE (typ1) == INTEGER_TYPE
+ 		  && integer_pow2p (TYPE_SIZE (typ2))
+ 		  && compare_tree_int (TYPE_SIZE (typ2),
+ 				       MAX_FIXED_MODE_SIZE) <= 0
+ 		  && tree_int_cst_lt (TYPE_SIZE (typ1), TYPE_SIZE (typ2)))
+ 		TREE_TYPE (gnu_cico_field_list)
+ 		  = gnat_type_for_size (TREE_INT_CST_LOW (TYPE_SIZE (typ2)),
+ 					TYPE_UNSIGNED (typ1));
+ 	      else if (TREE_CODE (typ2) == INTEGER_TYPE
+ 		       && integer_pow2p (TYPE_SIZE (typ1))
+ 		       && compare_tree_int (TYPE_SIZE (typ1),
+ 					    MAX_FIXED_MODE_SIZE) <= 0
+ 		       && tree_int_cst_lt (TYPE_SIZE (typ2), TYPE_SIZE (typ1)))
+ 		TREE_TYPE (DECL_CHAIN (gnu_cico_field_list))
+ 		  = gnat_type_for_size (TREE_INT_CST_LOW (TYPE_SIZE (typ1)),
+ 					TYPE_UNSIGNED (typ2));
+ 	    }
+ 
  	  finish_record_type (gnu_cico_return_type,
  			      nreverse (gnu_cico_field_list),
  			      0, false);
*************** validate_size (Uint uint_size, tree gnu_
*** 9690,9695 ****
--- 9724,9743 ----
        return NULL_TREE;
      }
  
+   /* The size of stand-alone objects is always a multiple of the alignment,
+      but that's already enforced for elementary types by the front-end.  */
+   if (kind == VAR_DECL
+       && !component_p
+       && RECORD_OR_UNION_TYPE_P (gnu_type)
+       && !TYPE_FAT_POINTER_P (gnu_type)
+       && !integer_zerop (size_binop (TRUNC_MOD_EXPR, size,
+ 				     bitsize_int (TYPE_ALIGN (gnu_type)))))
+     {
+       post_error_ne_num ("size for& must be multiple of alignment ^",
+ 			 gnat_error_node, gnat_object, TYPE_ALIGN (gnu_type));
+       return NULL_TREE;
+     }
+ 
    return size;
  }
  
diff -Nrcpad gcc-16-20250629/gcc/ada/gcc-interface/trans.cc gcc-16-20250706/gcc/ada/gcc-interface/trans.cc
*** gcc-16-20250629/gcc/ada/gcc-interface/trans.cc	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gcc-interface/trans.cc	Sun Jul  6 22:32:09 2025
*************** static tree emit_check (tree, tree, int,
*** 257,263 ****
  static tree build_unary_op_trapv (enum tree_code, tree, tree, Node_Id);
  static tree build_binary_op_trapv (enum tree_code, tree, tree, tree, Node_Id);
  static tree convert_with_check (Entity_Id, tree, bool, bool, Node_Id);
! static bool addressable_p (tree, tree);
  static bool aliasable_p (tree, tree);
  static tree assoc_to_constructor (Entity_Id, Node_Id, tree);
  static tree pos_to_constructor (Node_Id, tree);
--- 257,263 ----
  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, bool);
  static bool aliasable_p (tree, tree);
  static tree assoc_to_constructor (Entity_Id, Node_Id, tree);
  static tree pos_to_constructor (Node_Id, tree);
*************** Subprogram_Body_to_gnu (Node_Id gnat_nod
*** 4049,4055 ****
  	    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);
  
--- 4049,4055 ----
  	    tree gnu_decl;
  
  	    /* Skip any entries that have been already filled in; they must
! 	       correspond to In Out parameters or previous Out parameters.  */
  	    while (gnu_cico_entry && TREE_VALUE (gnu_cico_entry))
  	      gnu_cico_entry = TREE_CHAIN (gnu_cico_entry);
  
*************** Subprogram_Body_to_gnu (Node_Id gnat_nod
*** 4059,4069 ****
  	    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);
  
--- 4059,4080 ----
  	    if (DECL_BY_REF_P (gnu_decl))
  	      gnu_decl = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_decl);
  
! 	    TREE_VALUE (gnu_cico_entry) = gnu_decl;
  	  }
+ 
+       /* Finally, ensure type consistency between TREE_PURPOSE and TREE_VALUE
+ 	 so that the assignment of the latter to the former can be done.  */
+       tree gnu_cico_entry = gnu_cico_list;
+       while (gnu_cico_entry)
+ 	{
+ 	  if (!VOID_TYPE_P (TREE_VALUE (gnu_cico_entry)))
+ 	    TREE_VALUE (gnu_cico_entry)
+ 	      = convert (TREE_TYPE (TREE_PURPOSE (gnu_cico_entry)),
+ 			 TREE_VALUE (gnu_cico_entry));
+ 	  gnu_cico_entry = TREE_CHAIN (gnu_cico_entry);
+ 	}
      }
+ 
    else
      vec_safe_push (gnu_return_label_stack, NULL_TREE);
  
*************** Subprogram_Body_to_gnu (Node_Id gnat_nod
*** 4161,4169 ****
  	    }
  	}
  
!       /* 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;
  
--- 4172,4184 ----
  	    }
  	}
  
!       /* Otherwise, if this is a procedure or a function that does not return
! 	 by invisible reference, we can do a direct block-copy out, but we do
! 	 not need to do it for a null initialization procedure when the _Init
! 	 parameter is not passed in since we would copy uninitialized bits.  */
!       else if (!(Is_Null_Init_Proc (gnat_subprog)
! 		 && list_length (gnu_cico_list) == 1
! 		 && TREE_CODE (TREE_VALUE (gnu_cico_list)) == VAR_DECL))
  	{
  	  tree gnu_retval;
  
*************** Call_to_gnu (Node_Id gnat_node, tree *gn
*** 4876,4881 ****
--- 4891,4898 ----
        tree gnu_formal = present_gnu_tree (gnat_formal)
  			? get_gnu_tree (gnat_formal) : NULL_TREE;
        tree gnu_actual_type = gnat_to_gnu_type (Etype (gnat_actual));
+       const bool is_init_proc
+ 	= Is_Entity_Name (gnat_subprog) && Is_Init_Proc (Entity (gnat_subprog));
        const bool in_param = (Ekind (gnat_formal) == E_In_Parameter);
        const bool is_true_formal_parm
  	= gnu_formal && TREE_CODE (gnu_formal) == PARM_DECL;
*************** Call_to_gnu (Node_Id gnat_node, tree *gn
*** 4925,4931 ****
  	 copy to avoid breaking strict aliasing rules.  */
        if (is_by_ref_formal_parm
  	  && (gnu_name_type = gnat_to_gnu_type (Etype (gnat_name)))
! 	  && (!addressable_p (gnu_name, gnu_name_type)
  	      || (node_is_type_conversion (gnat_actual)
  		  && (aliasing = !aliasable_p (gnu_name, gnu_actual_type)))))
  	{
--- 4942,4948 ----
  	 copy to avoid breaking strict aliasing rules.  */
        if (is_by_ref_formal_parm
  	  && (gnu_name_type = gnat_to_gnu_type (Etype (gnat_name)))
! 	  && (!addressable_p (gnu_name, gnu_name_type, is_init_proc)
  	      || (node_is_type_conversion (gnat_actual)
  		  && (aliasing = !aliasable_p (gnu_name, gnu_actual_type)))))
  	{
*************** Call_to_gnu (Node_Id gnat_node, tree *gn
*** 5051,5059 ****
  
  	  /* 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
--- 5068,5074 ----
  
  	  /* 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_init_proc)
  	    gnu_name = gnu_temp = create_temporary ("A", TREE_TYPE (gnu_name));
  
  	  /* Initialize it on the fly like for an implicit temporary in the
*************** gnat_to_gnu (Node_Id gnat_node)
*** 7590,7595 ****
--- 7605,7614 ----
  
      case N_Allocator:
        {
+ 	const Entity_Id gnat_desig_type
+ 	  = Designated_Type (Underlying_Type (Etype (gnat_node)));
+ 	const Entity_Id gnat_pool = Storage_Pool (gnat_node);
+ 
  	tree gnu_type, gnu_init;
  	bool ignore_init_type;
  
*************** gnat_to_gnu (Node_Id gnat_node)
*** 7608,7616 ****
  
  	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));
--- 7627,7632 ----
*************** gnat_to_gnu (Node_Id gnat_node)
*** 7637,7647 ****
  	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;
  
--- 7653,7676 ----
  	else
  	  gcc_unreachable ();
  
! 	/* If this is an array allocated with its bounds, use the thin pointer
! 	   as the result type to trigger the machinery in build_allocator, but
! 	   make sure not to do it for allocations on the return and secondary
! 	   stacks (see build_call_alloc_dealloc_proc for more details).  */
!         if (Is_Constr_Array_Subt_With_Bounds (gnat_desig_type)
! 	    && Is_Record_Type (Underlying_Type (Etype (gnat_pool)))
! 	    && !type_annotate_only)
! 	  {
! 	    tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_desig_type));
! 	    gnu_result_type
! 	      = build_pointer_type (TYPE_OBJECT_RECORD_TYPE (gnu_array));
! 	  }
! 	else
! 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
! 
  	return build_allocator (gnu_type, gnu_init, gnu_result_type,
  				Procedure_To_Call (gnat_node),
! 				gnat_pool, gnat_node, ignore_init_type);
        }
        break;
  
*************** gnat_to_gnu (Node_Id gnat_node)
*** 8577,8582 ****
--- 8606,8623 ----
  	  (void) gnat_to_gnu_entity (gnat_desig_type, NULL_TREE, false);
  
  	  gnu_ptr = gnat_to_gnu (gnat_temp);
+ 
+ 	  /* If this is an array allocated with its bounds, first convert to
+ 	     the thin pointer to trigger the special machinery below.  */
+ 	  if (Is_Constr_Array_Subt_With_Bounds (gnat_desig_type))
+ 	    {
+ 	      tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_desig_type));
+ 	      gnu_ptr
+ 		= convert (build_pointer_type
+ 			   (TYPE_OBJECT_RECORD_TYPE (gnu_array)),
+ 			   gnu_ptr);
+ 	    }
+ 
  	  gnu_ptr_type = TREE_TYPE (gnu_ptr);
  
  	  /* If this is a thin pointer, we must first dereference it to create
*************** convert_with_check (Entity_Id gnat_type,
*** 10353,10359 ****
     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 ***
  
--- 10394,10401 ----
     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.  COMPG is true when
!    the predicate is invoked for compiler-generated code.
  
     *** Notes on addressability issues in the Ada compiler ***
  
*************** convert_with_check (Entity_Id gnat_type,
*** 10410,10416 ****
     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
--- 10452,10458 ----
     generated to connect everything together.  */
  
  static bool
! addressable_p (tree gnu_expr, tree gnu_type, bool compg)
  {
    /* For an integral type, the size of the actual type of the object may not
       be greater than that of the expected type, otherwise an indirect access
*************** addressable_p (tree gnu_expr, tree gnu_t
*** 10471,10483 ****
  
      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))
--- 10513,10525 ----
  
      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, compg);
  
      case COND_EXPR:
        /* We accept &COND_EXPR as soon as both operands are addressable and
  	 expect the outcome to be the address of the selected operand.  */
!       return (addressable_p (TREE_OPERAND (gnu_expr, 1), NULL_TREE, compg)
! 	      && addressable_p (TREE_OPERAND (gnu_expr, 2), NULL_TREE, compg));
  
      case COMPONENT_REF:
        return (((!DECL_BIT_FIELD (TREE_OPERAND (gnu_expr, 1))
*************** addressable_p (tree gnu_expr, tree gnu_t
*** 10491,10513 ****
  		&& (DECL_ALIGN (TREE_OPERAND (gnu_expr, 1))
  		    >= default_field_alignment (TREE_OPERAND (gnu_expr, 1),
  						TREE_TYPE (gnu_expr))
! 		    /* We do not enforce this on strict-alignment platforms for
! 		       internal fields in order to keep supporting misalignment
! 		       of tagged types in legacy code.  */
  		    || (!STRICT_ALIGNMENT
! 			&& DECL_INTERNAL_P (TREE_OPERAND (gnu_expr, 1)))))
  	       /* 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:
        {
--- 10533,10558 ----
  		&& (DECL_ALIGN (TREE_OPERAND (gnu_expr, 1))
  		    >= default_field_alignment (TREE_OPERAND (gnu_expr, 1),
  						TREE_TYPE (gnu_expr))
! 		    /* But this was historically not enforced for targets that
! 		       do not require strict alignment, so we keep not doing
! 		       it for 1) internal fields in order to keep supporting
! 		       misalignment of tagged types and 2) compiler-generated
! 		       code in order to avoid creating useless temporaries.  */
  		    || (!STRICT_ALIGNMENT
! 			&& (DECL_INTERNAL_P (TREE_OPERAND (gnu_expr, 1))
! 			    || compg))))
  	       /* The field of a padding record is always addressable.  */
  	       || TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))))
! 	      && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE, compg));
  
      case ARRAY_REF:  case ARRAY_RANGE_REF:
      case REALPART_EXPR:  case IMAGPART_EXPR:
      case NOP_EXPR:
!       return addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE, compg);
  
      case CONVERT_EXPR:
        return (AGGREGATE_TYPE_P (TREE_TYPE (gnu_expr))
! 	      && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE, compg));
  
      case VIEW_CONVERT_EXPR:
        {
*************** addressable_p (tree gnu_expr, tree gnu_t
*** 10525,10531 ****
  			 || 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:
--- 10570,10577 ----
  			 || TYPE_ALIGN (inner_type) >= BIGGEST_ALIGNMENT
  			 || TYPE_ALIGN_OK (type)
  			 || TYPE_ALIGN_OK (inner_type))))
! 		&& addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE,
! 				  compg));
        }
  
      default:
diff -Nrcpad gcc-16-20250629/gcc/ada/gcc-interface/utils.cc gcc-16-20250706/gcc/ada/gcc-interface/utils.cc
*** gcc-16-20250629/gcc/ada/gcc-interface/utils.cc	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gcc-interface/utils.cc	Sun Jul  6 22:32:09 2025
*************** make_packable_type (tree type, bool in_r
*** 1225,1231 ****
       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);
--- 1225,1230 ----
*************** make_packable_type (tree type, bool in_r
*** 1240,1245 ****
--- 1239,1246 ----
        new_size = ceil_pow2 (size);
        new_align = MIN (new_size, BIGGEST_ALIGNMENT);
        SET_TYPE_ALIGN (new_type, new_align);
+       /* build_aligned_type needs to be able to adjust back the alignment.  */
+       TYPE_PACKED (new_type) = 0;
      }
    else
      {
*************** make_packable_type (tree type, bool in_r
*** 1261,1266 ****
--- 1262,1268 ----
        if (max_align > 0 && new_align > max_align)
  	new_align = max_align;
        SET_TYPE_ALIGN (new_type, MIN (align, new_align));
+       TYPE_PACKED (new_type) = 1;
      }
  
    TYPE_USER_ALIGN (new_type) = 1;
diff -Nrcpad gcc-16-20250629/gcc/ada/gen_il-fields.ads gcc-16-20250706/gcc/ada/gen_il-fields.ads
*** gcc-16-20250629/gcc/ada/gen_il-fields.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gen_il-fields.ads	Sun Jul  6 22:32:09 2025
*************** package Gen_IL.Fields is
*** 401,406 ****
--- 401,407 ----
        Synchronized_Present,
        Tagged_Present,
        Target,
+       Call_Or_Target_Loop,
        Target_Type,
        Task_Definition,
        Task_Present,
*************** package Gen_IL.Fields is
*** 473,478 ****
--- 474,480 ----
        Component_Type,
        Constructor_List,
        Constructor_Name,
+       Continue_Mark,
        Contract,
        Contract_Wrapper,
        Corresponding_Concurrent_Type,
diff -Nrcpad gcc-16-20250629/gcc/ada/gen_il-gen-gen_entities.adb gcc-16-20250706/gcc/ada/gen_il-gen-gen_entities.adb
*** gcc-16-20250629/gcc/ada/gen_il-gen-gen_entities.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gen_il-gen-gen_entities.adb	Sun Jul  6 22:32:09 2025
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 77,83 ****
          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),
--- 77,82 ----
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 1224,1231 ****
     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),
--- 1223,1232 ----
     Cc (E_Loop, Entity_Kind,
         --  A loop identifier, created by an explicit or implicit label on a
         --  loop statement.
!        (Sm (Continue_Mark, Node_Id),
!         Sm (First_Entity, Node_Id),
          Sm (First_Exit_Statement, Node_Id),
+         Sm (Has_Exit, Flag),
          Sm (Has_Loop_Entry_Attributes, Flag),
          Sm (Last_Entity, Node_Id),
          Sm (Renamed_Or_Alias, Node_Id),
diff -Nrcpad gcc-16-20250629/gcc/ada/gen_il-gen-gen_nodes.adb gcc-16-20250706/gcc/ada/gen_il-gen-gen_nodes.adb
*** gcc-16-20250629/gcc/ada/gen_il-gen-gen_nodes.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gen_il-gen-gen_nodes.adb	Sun Jul  6 22:32:09 2025
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 469,480 ****
         (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),
--- 469,475 ----
         (Sy (Subtype_Mark, Node_Id, Default_Empty),
          Sy (Expression, Node_Id, Default_Empty),
          Sm (Kill_Range_Check, Flag),
!         Sm (No_Truncation, Flag)));
  
     Cc (N_Subtype_Indication, N_Has_Etype,
         (Sy (Subtype_Mark, Node_Id, Default_Empty),
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 967,972 ****
--- 962,977 ----
          Sy (Is_Null_Loop, Flag),
          Sy (Suppress_Loop_Warnings, Flag)));
  
+    Ab (N_Loop_Flow_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Condition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Continue_Statement, N_Loop_Flow_Statement,
+        (Sm (Call_Or_Target_Loop, Node_Id)));
+ 
+    Cc (N_Exit_Statement, N_Loop_Flow_Statement,
+        (Sm (Next_Exit_Statement, Node_Id)));
+ 
     Cc (N_Null_Statement, N_Statement_Other_Than_Procedure_Call,
         (Sm (Next_Rep_Item, Node_Id)));
  
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 1012,1022 ****
         (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),
--- 1017,1022 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/gen_il-types.ads gcc-16-20250706/gcc/ada/gen_il-types.ads
*** gcc-16-20250629/gcc/ada/gen_il-types.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gen_il-types.ads	Sun Jul  6 22:32:09 2025
*************** package Gen_IL.Types is
*** 103,108 ****
--- 103,109 ----
        N_Is_Range,
        N_Multiplying_Operator,
        N_Later_Decl_Item,
+       N_Loop_Flow_Statement,
        N_Membership_Test,
        N_Numeric_Or_String_Literal,
        N_Op,
*************** package Gen_IL.Types is
*** 328,333 ****
--- 329,335 ----
        N_Code_Statement,
        N_Compound_Statement,
        N_Conditional_Entry_Call,
+       N_Continue_Statement,
        N_Delay_Relative_Statement,
        N_Delay_Until_Statement,
        N_Entry_Call_Statement,
diff -Nrcpad gcc-16-20250629/gcc/ada/ghost.adb gcc-16-20250706/gcc/ada/ghost.adb
*** gcc-16-20250629/gcc/ada/ghost.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/ghost.adb	Sun Jul  6 22:32:09 2025
*************** package body Ghost is
*** 67,83 ****
     -- Local subprograms --
     -----------------------
  
-    function Whole_Object_Ref (Ref : Node_Id) return Node_Id;
-    --  For a name that denotes an object, returns a name that denotes the whole
-    --  object, declared by an object declaration, formal parameter declaration,
-    --  etc. For example, for P.X.Comp (J), if P is a package X is a record
-    --  object, this returns P.X.
- 
-    function Ghost_Entity (Ref : Node_Id) return Entity_Id;
-    pragma Inline (Ghost_Entity);
-    --  Obtain the entity of a Ghost entity from reference Ref. Return Empty if
-    --  no such entity exists.
- 
     procedure Install_Ghost_Mode (Mode : Ghost_Mode_Type);
     pragma Inline (Install_Ghost_Mode);
     --  Install Ghost mode Mode as the Ghost mode in effect
--- 67,72 ----
*************** package body Ghost is
*** 787,793 ****
        Formal     : Entity_Id;
        Is_Default : Boolean := False)
     is
!       Actual_Obj : constant Entity_Id := Get_Enclosing_Deep_Object (Actual);
     begin
        if not Is_Ghost_Entity (Formal) then
           return;
--- 776,782 ----
        Formal     : Entity_Id;
        Is_Default : Boolean := False)
     is
!       Actual_Obj : constant Entity_Id := Get_Enclosing_Ghost_Entity (Actual);
     begin
        if not Is_Ghost_Entity (Formal) then
           return;
*************** package body Ghost is
*** 1085,1111 ****
        end if;
     end Check_Ghost_Type;
  
-    ------------------
-    -- Ghost_Entity --
-    ------------------
- 
-    function Ghost_Entity (Ref : Node_Id) return Entity_Id is
-       Obj_Ref : constant Node_Id := Ultimate_Prefix (Ref);
- 
-    begin
-       --  When the reference denotes a subcomponent, recover the related whole
-       --  object (SPARK RM 6.9(1)).
- 
-       if Is_Entity_Name (Obj_Ref) then
-          return Entity (Obj_Ref);
- 
-       --  Otherwise the reference cannot possibly denote a Ghost entity
- 
-       else
-          return Empty;
-       end if;
-    end Ghost_Entity;
- 
     --------------------------------
     -- Implements_Ghost_Interface --
     --------------------------------
--- 1074,1079 ----
*************** package body Ghost is
*** 1197,1203 ****
        --  entity.
  
        if Nkind (N) = N_Assignment_Statement then
!          Id := Ghost_Entity (Name (N));
  
           return Present (Id) and then Is_Ghost_Entity (Id);
        end if;
--- 1165,1171 ----
        --  entity.
  
        if Nkind (N) = N_Assignment_Statement then
!          Id := Get_Enclosing_Ghost_Entity (Name (N));
  
           return Present (Id) and then Is_Ghost_Entity (Id);
        end if;
*************** package body Ghost is
*** 1255,1261 ****
        --  A procedure call is Ghost when it invokes a Ghost procedure
  
        if Nkind (N) = N_Procedure_Call_Statement then
!          Id := Ghost_Entity (Name (N));
  
           return Present (Id) and then Is_Ghost_Entity (Id);
        end if;
--- 1223,1229 ----
        --  A procedure call is Ghost when it invokes a Ghost procedure
  
        if Nkind (N) = N_Procedure_Call_Statement then
!          Id := Get_Enclosing_Ghost_Entity (Name (N));
  
           return Present (Id) and then Is_Ghost_Entity (Id);
        end if;
*************** package body Ghost is
*** 1492,1520 ****
              end if;
  
              declare
!                Whole : constant Node_Id := Whole_Object_Ref (Lhs);
!                Id    : Entity_Id;
              begin
!                if Is_Entity_Name (Whole) then
!                   Id := Entity (Whole);
! 
!                   if Present (Id) then
!                      --  Left-hand side denotes a Checked ghost entity, so
!                      --  install the region.
  
!                      if Is_Checked_Ghost_Entity (Id) then
!                         Install_Ghost_Region (Check, N);
  
!                      --  Left-hand side denotes an Ignored ghost entity, so
!                      --  install the region, and mark the assignment statement
!                      --  as an ignored ghost assignment, so it will be removed
!                      --  later.
  
!                      elsif Is_Ignored_Ghost_Entity (Id) then
!                         Install_Ghost_Region (Ignore, N);
!                         Set_Is_Ignored_Ghost_Node (N);
!                         Record_Ignored_Ghost_Node (N);
!                      end if;
                    end if;
                 end if;
              end;
--- 1460,1482 ----
              end if;
  
              declare
!                Id : constant Entity_Id := Get_Enclosing_Ghost_Entity (Lhs);
              begin
!                if Present (Id) then
!                   --  Left-hand side denotes a Checked ghost entity, so install
!                   --  the region.
  
!                   if Is_Checked_Ghost_Entity (Id) then
!                      Install_Ghost_Region (Check, N);
  
!                   --  Left-hand side denotes an Ignored ghost entity, so
!                   --  install the region, and mark the assignment statement as
!                   --  an ignored ghost assignment, so it will be removed later.
  
!                   elsif Is_Ignored_Ghost_Entity (Id) then
!                      Install_Ghost_Region (Ignore, N);
!                      Set_Is_Ignored_Ghost_Node (N);
!                      Record_Ignored_Ghost_Node (N);
                    end if;
                 end if;
              end;
*************** package body Ghost is
*** 1782,1788 ****
        --  A procedure call becomes Ghost when the procedure being invoked is
        --  Ghost. Install the Ghost mode of the procedure.
  
!       Id := Ghost_Entity (Name (N));
  
        if Present (Id) then
           if Is_Checked_Ghost_Entity (Id) then
--- 1744,1750 ----
        --  A procedure call becomes Ghost when the procedure being invoked is
        --  Ghost. Install the Ghost mode of the procedure.
  
!       Id := Get_Enclosing_Ghost_Entity (Name (N));
  
        if Present (Id) then
           if Is_Checked_Ghost_Entity (Id) then
*************** package body Ghost is
*** 2096,2102 ****
        --  of the target.
  
        if Nkind (N) = N_Assignment_Statement then
!          Id := Ghost_Entity (Name (N));
  
           if Present (Id) then
              Set_Ghost_Mode_From_Entity (Id);
--- 2058,2064 ----
        --  of the target.
  
        if Nkind (N) = N_Assignment_Statement then
!          Id := Get_Enclosing_Ghost_Entity (Name (N));
  
           if Present (Id) then
              Set_Ghost_Mode_From_Entity (Id);
*************** package body Ghost is
*** 2135,2141 ****
        --  procedure being invoked.
  
        elsif Nkind (N) = N_Procedure_Call_Statement then
!          Id := Ghost_Entity (Name (N));
  
           if Present (Id) then
              Set_Ghost_Mode_From_Entity (Id);
--- 2097,2103 ----
        --  procedure being invoked.
  
        elsif Nkind (N) = N_Procedure_Call_Statement then
!          Id := Get_Enclosing_Ghost_Entity (Name (N));
  
           if Present (Id) then
              Set_Ghost_Mode_From_Entity (Id);
*************** package body Ghost is
*** 2157,2180 ****
        end if;
     end Set_Is_Ghost_Entity;
  
-    ----------------------
-    -- Whole_Object_Ref --
-    ----------------------
- 
-    function Whole_Object_Ref (Ref : Node_Id) return Node_Id is
-    begin
-       if Nkind (Ref) in N_Indexed_Component | N_Slice
-         or else (Nkind (Ref) = N_Selected_Component
-                    and then Is_Object_Reference (Prefix (Ref)))
-       then
-          if Is_Access_Type (Etype (Prefix (Ref))) then
-             return Ref;
-          else
-             return Whole_Object_Ref (Prefix (Ref));
-          end if;
-       else
-          return Ref;
-       end if;
-    end Whole_Object_Ref;
- 
  end Ghost;
--- 2119,2122 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/gnat1drv.adb gcc-16-20250706/gcc/ada/gnat1drv.adb
*** gcc-16-20250629/gcc/ada/gnat1drv.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gnat1drv.adb	Sun Jul  6 22:32:09 2025
*************** procedure Gnat1drv is
*** 982,988 ****
     --  Local variables
  
     Back_End_Mode : Back_End.Back_End_Mode_Type;
!    Ecode         : Exit_Code_Type;
  
     Main_Unit_Kind : Node_Kind;
     --  Kind of main compilation unit node
--- 982,988 ----
     --  Local variables
  
     Back_End_Mode : Back_End.Back_End_Mode_Type;
!    Ecode         : Exit_Code_Type := E_Success;
  
     Main_Unit_Kind : Node_Kind;
     --  Kind of main compilation unit node
*************** begin
*** 1169,1177 ****
        --  Exit with errors if the main source could not be parsed
  
        if Sinput.Main_Source_File <= No_Source_File then
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages;
!          Exit_Program (E_Errors);
        end if;
  
        Main_Unit_Node := Cunit (Main_Unit);
--- 1169,1178 ----
        --  Exit with errors if the main source could not be parsed
  
        if Sinput.Main_Source_File <= No_Source_File then
+          Ecode := E_Errors;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages (Ecode);
!          Exit_Program (Ecode);
        end if;
  
        Main_Unit_Node := Cunit (Main_Unit);
*************** begin
*** 1198,1206 ****
        Errout.Finalize (Last_Call => False);
  
        if Compilation_Errors then
           Treepr.Tree_Dump;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages;
           Namet.Finalize;
  
           --  Generate ALI file if specially requested
--- 1199,1208 ----
        Errout.Finalize (Last_Call => False);
  
        if Compilation_Errors then
+          Ecode := E_Errors;
           Treepr.Tree_Dump;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages (Ecode);
           Namet.Finalize;
  
           --  Generate ALI file if specially requested
*************** begin
*** 1209,1215 ****
              Write_ALI (Object => False);
           end if;
  
!          Exit_Program (E_Errors);
        end if;
  
        --  Case of no code required to be generated, exit indicating no error
--- 1211,1217 ----
              Write_ALI (Object => False);
           end if;
  
!          Exit_Program (Ecode);
        end if;
  
        --  Case of no code required to be generated, exit indicating no error
*************** begin
*** 1217,1223 ****
        if Original_Operating_Mode = Check_Syntax then
           Treepr.Tree_Dump;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages;
           Namet.Finalize;
           Check_Rep_Info;
  
--- 1219,1225 ----
        if Original_Operating_Mode = Check_Syntax then
           Treepr.Tree_Dump;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages (Ecode);
           Namet.Finalize;
           Check_Rep_Info;
  
*************** begin
*** 1350,1356 ****
              --  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;
--- 1352,1366 ----
              --  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, while indicating for the ALI file
!             --  generation that neither spec or body has elaboration code
!             --  (which in ordinary compilation is indicated in Gigi).
! 
!             Set_Has_No_Elaboration_Code (Main_Unit_Node);
! 
!             if Present (Library_Unit (Main_Unit_Node)) then
!                Set_Has_No_Elaboration_Code (Library_Unit (Main_Unit_Node));
!             end if;
  
              Ecode := E_Success;
              Back_End.Gen_Or_Update_Object_File;
*************** begin
*** 1407,1413 ****
  
           Post_Compilation_Validation_Checks;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages;
           Treepr.Tree_Dump;
  
           --  Generate ALI file if specially requested, or for missing subunits,
--- 1417,1423 ----
  
           Post_Compilation_Validation_Checks;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages (Ecode);
           Treepr.Tree_Dump;
  
           --  Generate ALI file if specially requested, or for missing subunits,
*************** begin
*** 1461,1467 ****
        then
           Post_Compilation_Validation_Checks;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages;
           Write_ALI (Object => False);
           Tree_Dump;
           Namet.Finalize;
--- 1471,1477 ----
        then
           Post_Compilation_Validation_Checks;
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages (Ecode);
           Write_ALI (Object => False);
           Tree_Dump;
           Namet.Finalize;
*************** begin
*** 1541,1547 ****
        --  representation information for List_Rep_Info).
  
        Errout.Finalize (Last_Call => True);
!       Errout.Output_Messages;
  
        --  Back annotation of representation info is not done in CodePeer and
        --  SPARK modes.
--- 1551,1558 ----
        --  representation information for List_Rep_Info).
  
        Errout.Finalize (Last_Call => True);
!       Errout.Output_Messages
!         ((if Compilation_Errors then E_Errors else E_Success));
  
        --  Back annotation of representation info is not done in CodePeer and
        --  SPARK modes.
*************** begin
*** 1557,1564 ****
        --  there will be no attempt to generate an object file.
  
        if Compilation_Errors then
           Treepr.Tree_Dump;
!          Exit_Program (E_Errors);
        end if;
  
        if not GNATprove_Mode then
--- 1568,1576 ----
        --  there will be no attempt to generate an object file.
  
        if Compilation_Errors then
+          Ecode := E_Errors;
           Treepr.Tree_Dump;
!          Exit_Program (Ecode);
        end if;
  
        if not GNATprove_Mode then
*************** begin
*** 1632,1638 ****
  exception
     when Unrecoverable_Error =>
        Errout.Finalize (Last_Call => True);
!       Errout.Output_Messages;
  
        Set_Standard_Error;
        Write_Str ("compilation abandoned");
--- 1644,1650 ----
  exception
     when Unrecoverable_Error =>
        Errout.Finalize (Last_Call => True);
!       Errout.Output_Messages (E_Errors);
  
        Set_Standard_Error;
        Write_Str ("compilation abandoned");
diff -Nrcpad gcc-16-20250629/gcc/ada/gnat_rm.texi gcc-16-20250706/gcc/ada/gnat_rm.texi
*** gcc-16-20250629/gcc/ada/gnat_rm.texi	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gnat_rm.texi	Sun Jul  6 22:32:09 2025
***************
*** 19,25 ****
  
  @copying
  @quotation
! GNAT Reference Manual , Jun 02, 2025
  
  AdaCore
  
--- 19,25 ----
  
  @copying
  @quotation
! GNAT Reference Manual , Jul 03, 2025
  
  AdaCore
  
*************** included in the section entitled @ref{1,
*** 76,82 ****
  * Interfacing to Other Languages:: 
  * Specialized Needs Annexes:: 
  * Implementation of Specific Ada Features:: 
! * Implementation of Ada 2012 Features:: 
  * GNAT language extensions:: 
  * Security Hardening Features:: 
  * Obsolescent Features:: 
--- 76,82 ----
  * Interfacing to Other Languages:: 
  * Specialized Needs Annexes:: 
  * Implementation of Specific Ada Features:: 
! * Implementation of Ada 2022 Features:: 
  * GNAT language extensions:: 
  * Security Hardening Features:: 
  * Obsolescent Features:: 
*************** Implementation Defined Aspects
*** 348,353 ****
--- 348,354 ----
  * Aspect Obsolescent:: 
  * Aspect Part_Of:: 
  * Aspect Persistent_BSS:: 
+ * Aspect Potentially_Invalid:: 
  * Aspect Predicate:: 
  * Aspect Program_Exit:: 
  * Aspect Pure_Function:: 
*************** Experimental Language Extensions
*** 929,934 ****
--- 930,936 ----
  * Inference of Dependent Types in Generic Instantiations:: 
  * External_Initialization Aspect:: 
  * Finally construct:: 
+ * Continue statement:: 
  
  Storage Model
  
*************** GNAT compiler.  It includes information
*** 1009,1015 ****
  characteristics of GNAT, including all the information required by
  Annex M of the Ada language standard.
  
! GNAT implements Ada 95, Ada 2005 and Ada 2012, and it may also be
  invoked in Ada 83 compatibility mode.
  By default, GNAT assumes Ada 2012,
  but you can override with a compiler switch
--- 1011,1017 ----
  characteristics of GNAT, including all the information required by
  Annex M of the Ada language standard.
  
! GNAT implements Ada 95, Ada 2005, Ada 2012 and Ada 2022, and it may also be
  invoked in Ada 83 compatibility mode.
  By default, GNAT assumes Ada 2012,
  but you can override with a compiler switch
*************** to GNAT’s implementation of machine co
*** 1114,1121 ****
  other features.
  
  @item 
! @ref{14,,Implementation of Ada 2012 Features}, describes the status of the
! GNAT implementation of the Ada 2012 language standard.
  
  @item 
  @ref{15,,Security Hardening Features} documents GNAT extensions aimed
--- 1116,1123 ----
  other features.
  
  @item 
! @ref{14,,Implementation of Ada 2022 Features}, describes the status of the
! GNAT implementation of the Ada 2022 language standard.
  
  @item 
  @ref{15,,Security Hardening Features} documents GNAT extensions aimed
*************** Syntax:
*** 7546,7558 ****
  pragma Short_Circuit_And_Or;
  @end example
  
! This configuration pragma causes any occurrence of the AND operator applied to
! operands of type Standard.Boolean to be short-circuited (i.e. the AND operator
! is treated as if it were AND THEN). Or is similarly treated as OR ELSE. This
! may be useful in the context of certification protocols requiring the use of
! short-circuited logical operators. If this configuration pragma occurs locally
! within the file being compiled, it applies only to the file being compiled.
  There is no requirement that all units in a partition use this option.
  
  @node Pragma Short_Descriptors,Pragma Side_Effects,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas
  @anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{ed}
--- 7548,7580 ----
  pragma Short_Circuit_And_Or;
  @end example
  
! This configuration pragma causes the predefined AND and OR operators of
! type Standard.Boolean to have short-circuit semantics. That is, they
! behave like AND THEN and OR ELSE; the right-hand side is not evaluated
! if the left-hand side determines the result. This may be useful in the
! context of certification protocols requiring the use of short-circuited
! logical operators.
! 
  There is no requirement that all units in a partition use this option.
+ However, mixing of short-circuit and non-short-circuit semantics can be
+ confusing. Therefore, the recommended use is to put the pragma in a
+ configuration file that applies to the whole program. Alternatively, if
+ you have a legacy library that should not use this pragma, you can put
+ it in a separate library project that does not use the pragma.
+ In any case, fine-grained mixing of the different semantics is not
+ recommended. If pragma @code{Short_Circuit_And_Or} is specified, then it
+ is illegal to rename the predefined Boolean AND and OR, or to pass
+ them to generic formal functions; this corresponds to the fact that
+ AND THEN and OR ELSE cannot be renamed nor passed as generic formal
+ functions.
+ 
+ Note that this pragma has no effect on other logical operators –
+ predefined operators of modular types, array-of-boolean types and types
+ derived from Standard.Boolean, nor user-defined operators.
+ 
+ See also the pragma @code{Unevaluated_Use_Of_Old} and the restriction
+ @code{No_Direct_Boolean_Operators}, which may be useful in conjunction
+ with @code{Short_Circuit_And_Or}.
  
  @node Pragma Short_Descriptors,Pragma Side_Effects,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas
  @anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{ed}
*************** or attribute definition clause.
*** 9535,9540 ****
--- 9557,9563 ----
  * Aspect Obsolescent:: 
  * Aspect Part_Of:: 
  * Aspect Persistent_BSS:: 
+ * Aspect Potentially_Invalid:: 
  * Aspect Predicate:: 
  * Aspect Program_Exit:: 
  * Aspect Pure_Function:: 
*************** delayed until the freeze point.
*** 10182,10188 ****
  
  This aspect is equivalent to @ref{bc,,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{15a}
  @section Aspect Persistent_BSS
  
--- 10205,10211 ----
  
  This aspect is equivalent to @ref{bc,,pragma Part_Of}.
  
! @node Aspect Persistent_BSS,Aspect Potentially_Invalid,Aspect Part_Of,Implementation Defined Aspects
  @anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{15a}
  @section Aspect Persistent_BSS
  
*************** This aspect is equivalent to @ref{bc,,pr
*** 10191,10198 ****
  
  This boolean aspect is equivalent to @ref{c0,,pragma Persistent_BSS}.
  
! @node Aspect Predicate,Aspect Program_Exit,Aspect Persistent_BSS,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{15b}
  @section Aspect Predicate
  
  
--- 10214,10231 ----
  
  This boolean aspect is equivalent to @ref{c0,,pragma Persistent_BSS}.
  
! @node Aspect Potentially_Invalid,Aspect Predicate,Aspect Persistent_BSS,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-potentially-invalid}@anchor{15b}
! @section Aspect Potentially_Invalid
! 
! 
! @geindex Potentially_Invalid
! 
! For the syntax and semantics of this aspect, see the SPARK 2014 Reference
! Manual, section 13.9.1.
! 
! @node Aspect Predicate,Aspect Program_Exit,Aspect Potentially_Invalid,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{15c}
  @section Aspect Predicate
  
  
*************** expression. It is also separately contro
*** 10206,10212 ****
  @code{Assertion_Policy}.
  
  @node Aspect Program_Exit,Aspect Pure_Function,Aspect Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{15c}
  @section Aspect Program_Exit
  
  
--- 10239,10245 ----
  @code{Assertion_Policy}.
  
  @node Aspect Program_Exit,Aspect Pure_Function,Aspect Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{15d}
  @section Aspect Program_Exit
  
  
*************** expression. It is also separately contro
*** 10215,10221 ****
  This boolean aspect is equivalent to @ref{d0,,pragma Program_Exit}.
  
  @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Program_Exit,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{15d}
  @section Aspect Pure_Function
  
  
--- 10248,10254 ----
  This boolean aspect is equivalent to @ref{d0,,pragma Program_Exit}.
  
  @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Program_Exit,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{15e}
  @section Aspect Pure_Function
  
  
*************** This boolean aspect is equivalent to @re
*** 10224,10230 ****
  This boolean aspect is equivalent to @ref{d5,,pragma Pure_Function}.
  
  @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{15e}
  @section Aspect Refined_Depends
  
  
--- 10257,10263 ----
  This boolean aspect is equivalent to @ref{d5,,pragma Pure_Function}.
  
  @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{15f}
  @section Aspect Refined_Depends
  
  
*************** This boolean aspect is equivalent to @re
*** 10233,10239 ****
  This aspect is equivalent to @ref{d9,,pragma Refined_Depends}.
  
  @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{15f}
  @section Aspect Refined_Global
  
  
--- 10266,10272 ----
  This aspect is equivalent to @ref{d9,,pragma Refined_Depends}.
  
  @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{160}
  @section Aspect Refined_Global
  
  
*************** This aspect is equivalent to @ref{d9,,pr
*** 10242,10248 ****
  This aspect is equivalent to @ref{db,,pragma Refined_Global}.
  
  @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{160}
  @section Aspect Refined_Post
  
  
--- 10275,10281 ----
  This aspect is equivalent to @ref{db,,pragma Refined_Global}.
  
  @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{161}
  @section Aspect Refined_Post
  
  
*************** This aspect is equivalent to @ref{db,,pr
*** 10251,10257 ****
  This aspect is equivalent to @ref{dd,,pragma Refined_Post}.
  
  @node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{161}
  @section Aspect Refined_State
  
  
--- 10284,10290 ----
  This aspect is equivalent to @ref{dd,,pragma Refined_Post}.
  
  @node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{162}
  @section Aspect Refined_State
  
  
*************** This aspect is equivalent to @ref{dd,,pr
*** 10260,10266 ****
  This aspect is equivalent to @ref{df,,pragma Refined_State}.
  
  @node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{162}
  @section Aspect Relaxed_Initialization
  
  
--- 10293,10299 ----
  This aspect is equivalent to @ref{df,,pragma Refined_State}.
  
  @node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{163}
  @section Aspect Relaxed_Initialization
  
  
*************** For the syntax and semantics of this asp
*** 10270,10276 ****
  Manual, section 6.10.
  
  @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{163}
  @section Aspect Remote_Access_Type
  
  
--- 10303,10309 ----
  Manual, section 6.10.
  
  @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{164}
  @section Aspect Remote_Access_Type
  
  
*************** Manual, section 6.10.
*** 10279,10294 ****
  This aspect is equivalent to @ref{e2,,pragma Remote_Access_Type}.
  
  @node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{164}
  @section Aspect Scalar_Storage_Order
  
  
  @geindex Scalar_Storage_Order
  
! This aspect is equivalent to a @ref{165,,attribute Scalar_Storage_Order}.
  
  @node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{166}
  @section Aspect Secondary_Stack_Size
  
  
--- 10312,10327 ----
  This aspect is equivalent to @ref{e2,,pragma Remote_Access_Type}.
  
  @node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{165}
  @section Aspect Scalar_Storage_Order
  
  
  @geindex Scalar_Storage_Order
  
! This aspect is equivalent to a @ref{166,,attribute Scalar_Storage_Order}.
  
  @node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{167}
  @section Aspect Secondary_Stack_Size
  
  
*************** This aspect is equivalent to a @ref{165,
*** 10297,10303 ****
  This aspect is equivalent to @ref{e8,,pragma Secondary_Stack_Size}.
  
  @node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{167}
  @section Aspect Shared
  
  
--- 10330,10336 ----
  This aspect is equivalent to @ref{e8,,pragma Secondary_Stack_Size}.
  
  @node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{168}
  @section Aspect Shared
  
  
*************** This boolean aspect is equivalent to @re
*** 10307,10313 ****
  and is thus a synonym for aspect @code{Atomic}.
  
  @node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{168}
  @section Aspect Side_Effects
  
  
--- 10340,10346 ----
  and is thus a synonym for aspect @code{Atomic}.
  
  @node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{169}
  @section Aspect Side_Effects
  
  
*************** and is thus a synonym for aspect @code{A
*** 10316,10322 ****
  This aspect is equivalent to @ref{ef,,pragma Side_Effects}.
  
  @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{169}
  @section Aspect Simple_Storage_Pool
  
  
--- 10349,10355 ----
  This aspect is equivalent to @ref{ef,,pragma Side_Effects}.
  
  @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{16a}
  @section Aspect Simple_Storage_Pool
  
  
*************** This aspect is equivalent to @ref{ef,,pr
*** 10325,10331 ****
  This aspect is equivalent to @ref{f2,,attribute Simple_Storage_Pool}.
  
  @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{16a}
  @section Aspect Simple_Storage_Pool_Type
  
  
--- 10358,10364 ----
  This aspect is equivalent to @ref{f2,,attribute Simple_Storage_Pool}.
  
  @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{16b}
  @section Aspect Simple_Storage_Pool_Type
  
  
*************** This aspect is equivalent to @ref{f2,,at
*** 10334,10340 ****
  This boolean aspect is equivalent to @ref{f1,,pragma Simple_Storage_Pool_Type}.
  
  @node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{16b}
  @section Aspect SPARK_Mode
  
  
--- 10367,10373 ----
  This boolean aspect is equivalent to @ref{f1,,pragma Simple_Storage_Pool_Type}.
  
  @node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{16c}
  @section Aspect SPARK_Mode
  
  
*************** may be specified for either or both of t
*** 10345,10351 ****
  of a subprogram or package.
  
  @node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{16c}
  @section Aspect Subprogram_Variant
  
  
--- 10378,10384 ----
  of a subprogram or package.
  
  @node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{16d}
  @section Aspect Subprogram_Variant
  
  
*************** For the syntax and semantics of this asp
*** 10355,10361 ****
  Manual, section 6.1.8.
  
  @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{16d}
  @section Aspect Suppress_Debug_Info
  
  
--- 10388,10394 ----
  Manual, section 6.1.8.
  
  @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{16e}
  @section Aspect Suppress_Debug_Info
  
  
*************** Manual, section 6.1.8.
*** 10364,10370 ****
  This boolean aspect is equivalent to @ref{102,,pragma Suppress_Debug_Info}.
  
  @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{16e}
  @section Aspect Suppress_Initialization
  
  
--- 10397,10403 ----
  This boolean aspect is equivalent to @ref{102,,pragma Suppress_Debug_Info}.
  
  @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{16f}
  @section Aspect Suppress_Initialization
  
  
*************** This boolean aspect is equivalent to @re
*** 10373,10379 ****
  This boolean aspect is equivalent to @ref{105,,pragma Suppress_Initialization}.
  
  @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{16f}
  @section Aspect Test_Case
  
  
--- 10406,10412 ----
  This boolean aspect is equivalent to @ref{105,,pragma Suppress_Initialization}.
  
  @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{170}
  @section Aspect Test_Case
  
  
*************** This boolean aspect is equivalent to @re
*** 10382,10388 ****
  This aspect is equivalent to @ref{109,,pragma Test_Case}.
  
  @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{170}
  @section Aspect Thread_Local_Storage
  
  
--- 10415,10421 ----
  This aspect is equivalent to @ref{109,,pragma Test_Case}.
  
  @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{171}
  @section Aspect Thread_Local_Storage
  
  
*************** This aspect is equivalent to @ref{109,,p
*** 10391,10397 ****
  This boolean aspect is equivalent to @ref{10b,,pragma Thread_Local_Storage}.
  
  @node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{171}
  @section Aspect Universal_Aliasing
  
  
--- 10424,10430 ----
  This boolean aspect is equivalent to @ref{10b,,pragma Thread_Local_Storage}.
  
  @node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{172}
  @section Aspect Universal_Aliasing
  
  
*************** This boolean aspect is equivalent to @re
*** 10400,10406 ****
  This boolean aspect is equivalent to @ref{116,,pragma Universal_Aliasing}.
  
  @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{172}
  @section Aspect Unmodified
  
  
--- 10433,10439 ----
  This boolean aspect is equivalent to @ref{116,,pragma Universal_Aliasing}.
  
  @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{173}
  @section Aspect Unmodified
  
  
*************** This boolean aspect is equivalent to @re
*** 10409,10415 ****
  This boolean aspect is equivalent to @ref{118,,pragma Unmodified}.
  
  @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{173}
  @section Aspect Unreferenced
  
  
--- 10442,10448 ----
  This boolean aspect is equivalent to @ref{118,,pragma Unmodified}.
  
  @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{174}
  @section Aspect Unreferenced
  
  
*************** parameters, which is in particular the o
*** 10422,10428 ****
  functions.
  
  @node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{174}
  @section Aspect Unreferenced_Objects
  
  
--- 10455,10461 ----
  functions.
  
  @node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{175}
  @section Aspect Unreferenced_Objects
  
  
*************** functions.
*** 10431,10437 ****
  This boolean aspect is equivalent to @ref{11c,,pragma Unreferenced_Objects}.
  
  @node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{175}
  @section Aspect User_Aspect
  
  
--- 10464,10470 ----
  This boolean aspect is equivalent to @ref{11c,,pragma Unreferenced_Objects}.
  
  @node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{176}
  @section Aspect User_Aspect
  
  
*************** replicating the set of aspect specificat
*** 10444,10459 ****
  pragma-defined aspect.
  
  @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{176}
  @section Aspect Value_Size
  
  
  @geindex Value_Size
  
! This aspect is equivalent to @ref{177,,attribute Value_Size}.
  
  @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{178}
  @section Aspect Volatile_Full_Access
  
  
--- 10477,10492 ----
  pragma-defined aspect.
  
  @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{177}
  @section Aspect Value_Size
  
  
  @geindex Value_Size
  
! This aspect is equivalent to @ref{178,,attribute Value_Size}.
  
  @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{179}
  @section Aspect Volatile_Full_Access
  
  
*************** This aspect is equivalent to @ref{177,,a
*** 10462,10468 ****
  This boolean aspect is equivalent to @ref{126,,pragma Volatile_Full_Access}.
  
  @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{179}
  @section Aspect Volatile_Function
  
  
--- 10495,10501 ----
  This boolean aspect is equivalent to @ref{126,,pragma Volatile_Full_Access}.
  
  @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{17a}
  @section Aspect Volatile_Function
  
  
*************** This boolean aspect is equivalent to @re
*** 10471,10477 ****
  This boolean aspect is equivalent to @ref{128,,pragma Volatile_Function}.
  
  @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{17a}
  @section Aspect Warnings
  
  
--- 10504,10510 ----
  This boolean aspect is equivalent to @ref{128,,pragma Volatile_Function}.
  
  @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{17b}
  @section Aspect Warnings
  
  
*************** where the first argument is @code{ON} or
*** 10482,10488 ****
  is the entity.
  
  @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top
! @anchor{gnat_rm/implementation_defined_attributes doc}@anchor{17b}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{17c}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}
  @chapter Implementation Defined Attributes
  
  
--- 10515,10521 ----
  is the entity.
  
  @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top
! @anchor{gnat_rm/implementation_defined_attributes doc}@anchor{17c}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{17d}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}
  @chapter Implementation Defined Attributes
  
  
*************** consideration, you should minimize the u
*** 10588,10594 ****
  @end menu
  
  @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{17d}
  @section Attribute Abort_Signal
  
  
--- 10621,10627 ----
  @end menu
  
  @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{17e}
  @section Attribute Abort_Signal
  
  
*************** completely outside the normal semantics
*** 10602,10608 ****
  intercept the abort exception).
  
  @node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{17e}
  @section Attribute Address_Size
  
  
--- 10635,10641 ----
  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{17f}
  @section Attribute Address_Size
  
  
*************** reference to System.Address’Size is no
*** 10618,10624 ****
  is a private type.
  
  @node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{17f}
  @section Attribute Asm_Input
  
  
--- 10651,10657 ----
  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{180}
  @section Attribute Asm_Input
  
  
*************** to be a static expression, and is the co
*** 10632,10641 ****
  value to be used as the input argument.  The possible values for the
  constant are the same as those used in the RTL, and are dependent on
  the configuration file used to built the GCC back end.
! @ref{180,,Machine Code Insertions}
  
  @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{181}
  @section Attribute Asm_Output
  
  
--- 10665,10674 ----
  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{181,,Machine Code Insertions}
  
  @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{182}
  @section Attribute Asm_Output
  
  
*************** result.  The possible values for constra
*** 10651,10660 ****
  the RTL, and are dependent on the configuration file used to build the
  GCC back end.  If there are no output operands, then this argument may
  either be omitted, or explicitly given as @code{No_Output_Operands}.
! @ref{180,,Machine Code Insertions}
  
  @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{182}
  @section Attribute Atomic_Always_Lock_Free
  
  
--- 10684,10693 ----
  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{181,,Machine Code Insertions}
  
  @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{183}
  @section Attribute Atomic_Always_Lock_Free
  
  
*************** result indicates whether atomic operatio
*** 10665,10671 ****
  for the given type.
  
  @node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{183}
  @section Attribute Bit
  
  
--- 10698,10704 ----
  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{184}
  @section Attribute Bit
  
  
*************** This attribute is designed to be compati
*** 10696,10702 ****
  and implementation of the @code{Bit} attribute.
  
  @node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{184}
  @section Attribute Bit_Position
  
  
--- 10729,10735 ----
  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{185}
  @section Attribute Bit_Position
  
  
*************** type `universal_integer'.  The value dep
*** 10711,10717 ****
  the containing record @code{R}.
  
  @node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{185}
  @section Attribute Code_Address
  
  
--- 10744,10750 ----
  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{186}
  @section Attribute Code_Address
  
  
*************** the same value as is returned by the cor
*** 10754,10760 ****
  attribute.
  
  @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{186}
  @section Attribute Compiler_Version
  
  
--- 10787,10793 ----
  attribute.
  
  @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{187}
  @section Attribute Compiler_Version
  
  
*************** prefix) yields a static string identifyi
*** 10765,10771 ****
  being used to compile the unit containing the attribute reference.
  
  @node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{187}
  @section Attribute Constrained
  
  
--- 10798,10804 ----
  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{188}
  @section Attribute Constrained
  
  
*************** record type without discriminants is alw
*** 10780,10786 ****
  compatible with older Ada compilers, including notably DEC Ada.
  
  @node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{188}
  @section Attribute Default_Bit_Order
  
  
--- 10813,10819 ----
  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{189}
  @section Attribute Default_Bit_Order
  
  
*************** as a @code{Pos} value (0 for @code{High_
*** 10797,10803 ****
  @code{Default_Bit_Order} in package @code{System}.
  
  @node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{189}
  @section Attribute Default_Scalar_Storage_Order
  
  
--- 10830,10836 ----
  @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{18a}
  @section Attribute Default_Scalar_Storage_Order
  
  
*************** equal to @code{Default_Bit_Order} if uns
*** 10814,10820 ****
  @code{System.Bit_Order} value. This is a static attribute.
  
  @node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{18a}
  @section Attribute Deref
  
  
--- 10847,10853 ----
  @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{18b}
  @section Attribute Deref
  
  
*************** a named access-to-@cite{typ} type, excep
*** 10827,10833 ****
  used on the left side of an assignment.
  
  @node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{18b}
  @section Attribute Descriptor_Size
  
  
--- 10860,10866 ----
  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{18c}
  @section Attribute Descriptor_Size
  
  
*************** since @code{Positive} has an alignment o
*** 10856,10862 ****
  which yields a size of 32 bits, i.e. including 16 bits of padding.
  
  @node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{18c}
  @section Attribute Elaborated
  
  
--- 10889,10895 ----
  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{18d}
  @section Attribute Elaborated
  
  
*************** units has been completed.  An exception
*** 10871,10877 ****
  elaboration, the value is always False for such units.
  
  @node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{18d}
  @section Attribute Elab_Body
  
  
--- 10904,10910 ----
  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{18e}
  @section Attribute Elab_Body
  
  
*************** e.g., if it is necessary to do selective
*** 10887,10893 ****
  error.
  
  @node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{18e}
  @section Attribute Elab_Spec
  
  
--- 10920,10926 ----
  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{18f}
  @section Attribute Elab_Spec
  
  
*************** Ada code, e.g., if it is necessary to do
*** 10903,10909 ****
  some error.
  
  @node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{18f}
  @section Attribute Elab_Subp_Body
  
  
--- 10936,10942 ----
  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{190}
  @section Attribute Elab_Subp_Body
  
  
*************** elaboration procedure by the binder in C
*** 10917,10923 ****
  otherwise.
  
  @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{190}
  @section Attribute Emax
  
  
--- 10950,10956 ----
  otherwise.
  
  @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{191}
  @section Attribute Emax
  
  
*************** the Ada 83 reference manual for an exact
*** 10930,10936 ****
  this attribute.
  
  @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{191}
  @section Attribute Enabled
  
  
--- 10963,10969 ----
  this attribute.
  
  @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{192}
  @section Attribute Enabled
  
  
*************** a @code{pragma Suppress} or @code{pragma
*** 10954,10960 ****
  the package or subprogram, controlling whether the check will be present.
  
  @node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{192}
  @section Attribute Enum_Rep
  
  
--- 10987,10993 ----
  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{193}
  @section Attribute Enum_Rep
  
  
*************** integer calculation is done at run time,
*** 10994,11000 ****
  may raise @code{Constraint_Error}.
  
  @node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{193}
  @section Attribute Enum_Val
  
  
--- 11027,11033 ----
  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{194}
  @section Attribute Enum_Val
  
  
*************** absence of an enumeration representation
*** 11020,11026 ****
  attribute (i.e., the result is static if the argument is static).
  
  @node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{194}
  @section Attribute Epsilon
  
  
--- 11053,11059 ----
  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{195}
  @section Attribute Epsilon
  
  
*************** the Ada 83 reference manual for an exact
*** 11033,11039 ****
  this attribute.
  
  @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{195}
  @section Attribute Fast_Math
  
  
--- 11066,11072 ----
  this attribute.
  
  @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{196}
  @section Attribute Fast_Math
  
  
*************** prefix) yields a static Boolean value th
*** 11044,11050 ****
  @code{Fast_Math} is active, and False otherwise.
  
  @node Attribute Finalization_Size,Attribute Fixed_Value,Attribute Fast_Math,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{196}
  @section Attribute Finalization_Size
  
  
--- 11077,11083 ----
  @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{197}
  @section Attribute Finalization_Size
  
  
*************** class-wide type whose tag denotes a type
*** 11062,11068 ****
  Note that only heap-allocated objects contain finalization data.
  
  @node Attribute Fixed_Value,Attribute From_Any,Attribute Finalization_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{197}
  @section Attribute Fixed_Value
  
  
--- 11095,11101 ----
  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{198}
  @section Attribute Fixed_Value
  
  
*************** This attribute is primarily intended for
*** 11089,11095 ****
  input-output functions for fixed-point values.
  
  @node Attribute From_Any,Attribute Has_Access_Values,Attribute Fixed_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{198}
  @section Attribute From_Any
  
  
--- 11122,11128 ----
  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{199}
  @section Attribute From_Any
  
  
*************** This internal attribute is used for the
*** 11099,11105 ****
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{199}
  @section Attribute Has_Access_Values
  
  
--- 11132,11138 ----
  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{19a}
  @section Attribute Has_Access_Values
  
  
*************** definitions.  If the attribute is applie
*** 11117,11123 ****
  indicates whether or not the corresponding actual type has access values.
  
  @node Attribute Has_Discriminants,Attribute Has_Tagged_Values,Attribute Has_Access_Values,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{19a}
  @section Attribute Has_Discriminants
  
  
--- 11150,11156 ----
  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{19b}
  @section Attribute Has_Discriminants
  
  
*************** definitions.  If the attribute is applie
*** 11133,11139 ****
  indicates whether or not the corresponding actual type has discriminants.
  
  @node Attribute Has_Tagged_Values,Attribute Img,Attribute Has_Discriminants,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{19b}
  @section Attribute Has_Tagged_Values
  
  
--- 11166,11172 ----
  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{19c}
  @section Attribute Has_Tagged_Values
  
  
*************** definitions. If the attribute is applied
*** 11150,11156 ****
  indicates whether or not the corresponding actual type has access values.
  
  @node Attribute Img,Attribute Initialized,Attribute Has_Tagged_Values,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{19c}
  @section Attribute Img
  
  
--- 11183,11189 ----
  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{19d}
  @section Attribute Img
  
  
*************** that returns the appropriate string when
*** 11180,11186 ****
  in an instantiation as a function parameter.
  
  @node Attribute Initialized,Attribute Integer_Value,Attribute Img,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{19d}
  @section Attribute Initialized
  
  
--- 11213,11219 ----
  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{19e}
  @section Attribute Initialized
  
  
*************** For the syntax and semantics of this att
*** 11190,11196 ****
  Manual, section 6.10.
  
  @node Attribute Integer_Value,Attribute Invalid_Value,Attribute Initialized,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{19e}
  @section Attribute Integer_Value
  
  
--- 11223,11229 ----
  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{19f}
  @section Attribute Integer_Value
  
  
*************** This attribute is primarily intended for
*** 11218,11224 ****
  standard input-output functions for fixed-point values.
  
  @node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{19f}
  @section Attribute Invalid_Value
  
  
--- 11251,11257 ----
  standard input-output functions for fixed-point values.
  
  @node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{1a0}
  @section Attribute Invalid_Value
  
  
*************** including the ability to modify the valu
*** 11232,11238 ****
  relevant environment variables at run time.
  
  @node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a0}
  @section Attribute Large
  
  
--- 11265,11271 ----
  relevant environment variables at run time.
  
  @node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a1}
  @section Attribute Large
  
  
*************** the Ada 83 reference manual for an exact
*** 11245,11251 ****
  this attribute.
  
  @node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a1}
  @section Attribute Library_Level
  
  
--- 11278,11284 ----
  this attribute.
  
  @node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a2}
  @section Attribute Library_Level
  
  
*************** end Gen;
*** 11271,11277 ****
  @end example
  
  @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a2}
  @section Attribute Loop_Entry
  
  
--- 11304,11310 ----
  @end example
  
  @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a3}
  @section Attribute Loop_Entry
  
  
*************** entry. This copy is not performed if the
*** 11304,11310 ****
  corresponding pragmas are ignored or disabled.
  
  @node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{1a3}
  @section Attribute Machine_Size
  
  
--- 11337,11343 ----
  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{1a4}
  @section Attribute Machine_Size
  
  
*************** This attribute is identical to the @code
*** 11314,11320 ****
  provided for compatibility with the DEC Ada 83 attribute of this name.
  
  @node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{1a4}
  @section Attribute Mantissa
  
  
--- 11347,11353 ----
  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{1a5}
  @section Attribute Mantissa
  
  
*************** the Ada 83 reference manual for an exact
*** 11327,11333 ****
  this attribute.
  
  @node Attribute Maximum_Alignment,Attribute Max_Integer_Size,Attribute Mantissa,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{1a5}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1a6}
  @section Attribute Maximum_Alignment
  
  
--- 11360,11366 ----
  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{1a6}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1a7}
  @section Attribute Maximum_Alignment
  
  
*************** for an object, guaranteeing that it is p
*** 11343,11349 ****
  cases.
  
  @node Attribute Max_Integer_Size,Attribute Mechanism_Code,Attribute Maximum_Alignment,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{1a7}
  @section Attribute Max_Integer_Size
  
  
--- 11376,11382 ----
  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{1a8}
  @section Attribute Max_Integer_Size
  
  
*************** prefix) provides the size of the largest
*** 11354,11360 ****
  the target. The result is a static constant.
  
  @node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Max_Integer_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1a8}
  @section Attribute Mechanism_Code
  
  
--- 11387,11393 ----
  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{1a9}
  @section Attribute Mechanism_Code
  
  
*************** by reference
*** 11385,11391 ****
  @end table
  
  @node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1a9}
  @section Attribute Null_Parameter
  
  
--- 11418,11424 ----
  @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{1aa}
  @section Attribute Null_Parameter
  
  
*************** There is no way of indicating this witho
*** 11410,11416 ****
  attribute.
  
  @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{157}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1aa}
  @section Attribute Object_Size
  
  
--- 11443,11449 ----
  attribute.
  
  @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{157}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1ab}
  @section Attribute Object_Size
  
  
*************** Similar additional checks are performed
*** 11480,11486 ****
  statically matching subtypes.
  
  @node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1ab}
  @section Attribute Old
  
  
--- 11513,11519 ----
  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{1ac}
  @section Attribute Old
  
  
*************** definition are allowed under control of
*** 11495,11501 ****
  implementation defined pragma @code{Unevaluated_Use_Of_Old}.
  
  @node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1ac}
  @section Attribute Passed_By_Reference
  
  
--- 11528,11534 ----
  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{1ad}
  @section Attribute Passed_By_Reference
  
  
*************** passed by copy in calls.  For scalar typ
*** 11511,11517 ****
  and is static.  For non-scalar types, the result is nonstatic.
  
  @node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1ad}
  @section Attribute Pool_Address
  
  
--- 11544,11550 ----
  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{1ae}
  @section Attribute Pool_Address
  
  
*************** For an object created by @code{new}, @co
*** 11533,11539 ****
  what is passed to @code{Allocate} and returned from @code{Deallocate}.
  
  @node Attribute Range_Length,Attribute Restriction_Set,Attribute Pool_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1ae}
  @section Attribute Range_Length
  
  
--- 11566,11572 ----
  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{1af}
  @section Attribute Range_Length
  
  
*************** applied to the index subtype of a one di
*** 11546,11552 ****
  same result as @code{Length} applied to the array itself.
  
  @node Attribute Restriction_Set,Attribute Result,Attribute Range_Length,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1af}
  @section Attribute Restriction_Set
  
  
--- 11579,11585 ----
  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{1b0}
  @section Attribute Restriction_Set
  
  
*************** Restrictions pragma, they are not analyz
*** 11616,11622 ****
  so they do not have a type.
  
  @node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b0}
  @section Attribute Result
  
  
--- 11649,11655 ----
  so they do not have a type.
  
  @node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b1}
  @section Attribute Result
  
  
*************** For a further discussion of the use of t
*** 11629,11635 ****
  see the description of pragma Postcondition.
  
  @node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b1}
  @section Attribute Round
  
  
--- 11662,11668 ----
  see the description of pragma Postcondition.
  
  @node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b2}
  @section Attribute Round
  
  
*************** also permits the use of the @code{'Round
*** 11640,11646 ****
  fixed point types.
  
  @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1b2}
  @section Attribute Safe_Emax
  
  
--- 11673,11679 ----
  fixed point types.
  
  @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1b3}
  @section Attribute Safe_Emax
  
  
*************** the Ada 83 reference manual for an exact
*** 11653,11659 ****
  this attribute.
  
  @node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1b3}
  @section Attribute Safe_Large
  
  
--- 11686,11692 ----
  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{1b4}
  @section Attribute Safe_Large
  
  
*************** the Ada 83 reference manual for an exact
*** 11666,11672 ****
  this attribute.
  
  @node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1b4}
  @section Attribute Safe_Small
  
  
--- 11699,11705 ----
  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{1b5}
  @section Attribute Safe_Small
  
  
*************** the Ada 83 reference manual for an exact
*** 11679,11685 ****
  this attribute.
  
  @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{165}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1b5}
  @section Attribute Scalar_Storage_Order
  
  
--- 11712,11718 ----
  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{166}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1b6}
  @section Attribute Scalar_Storage_Order
  
  
*************** Note that debuggers may be unable to dis
*** 11842,11848 ****
  components of a type for which the opposite storage order is specified.
  
  @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f2}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1b6}
  @section Attribute Simple_Storage_Pool
  
  
--- 11875,11881 ----
  components of a type for which the opposite storage order is specified.
  
  @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f2}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1b7}
  @section Attribute Simple_Storage_Pool
  
  
*************** as defined in section 13.11.2 of the Ada
*** 11905,11911 ****
  term `simple storage pool' is substituted for `storage pool'.
  
  @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1b7}
  @section Attribute Small
  
  
--- 11938,11944 ----
  term `simple storage pool' is substituted for `storage pool'.
  
  @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1b8}
  @section Attribute Small
  
  
*************** the Ada 83 reference manual for an exact
*** 11921,11927 ****
  this attribute when applied to floating-point types.
  
  @node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1b8}
  @section Attribute Small_Denominator
  
  
--- 11954,11960 ----
  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{1b9}
  @section Attribute Small_Denominator
  
  
*************** denominator in the representation of @co
*** 11934,11940 ****
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1b9}
  @section Attribute Small_Numerator
  
  
--- 11967,11973 ----
  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{1ba}
  @section Attribute Small_Numerator
  
  
*************** numerator in the representation of @code
*** 11947,11953 ****
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1ba}
  @section Attribute Storage_Unit
  
  
--- 11980,11986 ----
  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{1bb}
  @section Attribute Storage_Unit
  
  
*************** with coprime factors (i.e. as an irreduc
*** 11957,11963 ****
  prefix) provides the same value as @code{System.Storage_Unit}.
  
  @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1bb}
  @section Attribute Stub_Type
  
  
--- 11990,11996 ----
  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{1bc}
  @section Attribute Stub_Type
  
  
*************** unit @code{System.Partition_Interface}.
*** 11981,11987 ****
  an implicit dependency on this unit.
  
  @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1bc}
  @section Attribute System_Allocator_Alignment
  
  
--- 12014,12020 ----
  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{1bd}
  @section Attribute System_Allocator_Alignment
  
  
*************** with alignment too large or to enable a
*** 11998,12004 ****
  alignment request is larger than this value.
  
  @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1bd}
  @section Attribute Target_Name
  
  
--- 12031,12037 ----
  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{1be}
  @section Attribute Target_Name
  
  
*************** standard gcc target name without the ter
*** 12011,12017 ****
  example, GNAT 5.0 on windows yields “i586-pc-mingw32msv”).
  
  @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1be}
  @section Attribute To_Address
  
  
--- 12044,12050 ----
  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{1bf}
  @section Attribute To_Address
  
  
*************** modular manner (e.g., -1 means the same
*** 12034,12040 ****
  a 32 bits machine).
  
  @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1bf}
  @section Attribute To_Any
  
  
--- 12067,12073 ----
  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{1c0}
  @section Attribute To_Any
  
  
*************** This internal attribute is used for the
*** 12044,12050 ****
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1c0}
  @section Attribute Type_Class
  
  
--- 12077,12083 ----
  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{1c1}
  @section Attribute Type_Class
  
  
*************** applies to all concurrent types.  This a
*** 12074,12080 ****
  be compatible with the DEC Ada 83 attribute of the same name.
  
  @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1c1}
  @section Attribute Type_Key
  
  
--- 12107,12113 ----
  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{1c2}
  @section Attribute Type_Key
  
  
*************** about the type or subtype. This provides
*** 12086,12092 ****
  other implementations that support this attribute.
  
  @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1c2}
  @section Attribute TypeCode
  
  
--- 12119,12125 ----
  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{1c3}
  @section Attribute TypeCode
  
  
*************** This internal attribute is used for the
*** 12096,12102 ****
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1c3}
  @section Attribute Unconstrained_Array
  
  
--- 12129,12135 ----
  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{1c4}
  @section Attribute Unconstrained_Array
  
  
*************** still static, and yields the result of a
*** 12110,12116 ****
  generic actual.
  
  @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1c4}
  @section Attribute Universal_Literal_String
  
  
--- 12143,12149 ----
  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{1c5}
  @section Attribute Universal_Literal_String
  
  
*************** end;
*** 12138,12144 ****
  @end example
  
  @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1c5}
  @section Attribute Unrestricted_Access
  
  
--- 12171,12177 ----
  @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{1c6}
  @section Attribute Unrestricted_Access
  
  
*************** In general this is a risky approach. It
*** 12325,12331 ****
  of GNAT to another, so are best avoided if possible.
  
  @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1c6}
  @section Attribute Update
  
  
--- 12358,12364 ----
  of GNAT to another, so are best avoided if possible.
  
  @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1c7}
  @section Attribute Update
  
  
*************** A := A'Update ((1, 2) => 20, (3, 4) => 3
*** 12406,12412 ****
  which changes element (1,2) to 20 and (3,4) to 30.
  
  @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1c7}
  @section Attribute Valid_Value
  
  
--- 12439,12445 ----
  which changes element (1,2) to 20 and (3,4) to 30.
  
  @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1c8}
  @section Attribute Valid_Value
  
  
*************** a function that takes a String, and retu
*** 12418,12424 ****
  returns True if and only if @code{T'Value (S)} would not raise Constraint_Error.
  
  @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1c8}
  @section Attribute Valid_Scalars
  
  
--- 12451,12457 ----
  returns True if and only if @code{T'Value (S)} would not raise Constraint_Error.
  
  @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1c9}
  @section Attribute Valid_Scalars
  
  
*************** write a function with a single use of th
*** 12452,12458 ****
  function from multiple places.
  
  @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1c9}
  @section Attribute VADS_Size
  
  
--- 12485,12491 ----
  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{1ca}
  @section Attribute VADS_Size
  
  
*************** gives the result that would be obtained
*** 12472,12478 ****
  the corresponding type.
  
  @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{177}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1ca}
  @section Attribute Value_Size
  
  
--- 12505,12511 ----
  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{178}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1cb}
  @section Attribute Value_Size
  
  
*************** a value of the given subtype.  It is the
*** 12486,12492 ****
  but, unlike @code{Size}, may be set for non-first subtypes.
  
  @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1cb}
  @section Attribute Wchar_T_Size
  
  
--- 12519,12525 ----
  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{1cc}
  @section Attribute Wchar_T_Size
  
  
*************** primarily for constructing the definitio
*** 12498,12504 ****
  package @code{Interfaces.C}. The result is a static constant.
  
  @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1cc}
  @section Attribute Word_Size
  
  
--- 12531,12537 ----
  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{1cd}
  @section Attribute Word_Size
  
  
*************** prefix) provides the value @code{System.
*** 12509,12515 ****
  a static constant.
  
  @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1cd}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1ce}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}
  @chapter Standard and Implementation Defined Restrictions
  
  
--- 12542,12548 ----
  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{1ce}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1cf}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}
  @chapter Standard and Implementation Defined Restrictions
  
  
*************** language defined or GNAT-specific, are l
*** 12538,12544 ****
  @end menu
  
  @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1cf}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d0}
  @section Partition-Wide Restrictions
  
  
--- 12571,12577 ----
  @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{1d0}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d1}
  @section Partition-Wide Restrictions
  
  
*************** then all compilation units in the partit
*** 12631,12637 ****
  @end menu
  
  @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1d1}
  @subsection Immediate_Reclamation
  
  
--- 12664,12670 ----
  @end menu
  
  @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1d2}
  @subsection Immediate_Reclamation
  
  
*************** deallocation, any storage reserved at ru
*** 12643,12649 ****
  immediately reclaimed when the object no longer exists.
  
  @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1d2}
  @subsection Max_Asynchronous_Select_Nesting
  
  
--- 12676,12682 ----
  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{1d3}
  @subsection Max_Asynchronous_Select_Nesting
  
  
*************** detected at compile time. Violations of
*** 12655,12661 ****
  other than zero cause Storage_Error to be raised.
  
  @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1d3}
  @subsection Max_Entry_Queue_Length
  
  
--- 12688,12694 ----
  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{1d4}
  @subsection Max_Entry_Queue_Length
  
  
*************** compatibility purposes (and a warning wi
*** 12676,12682 ****
  warnings on obsolescent features are activated).
  
  @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1d4}
  @subsection Max_Protected_Entries
  
  
--- 12709,12715 ----
  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{1d5}
  @subsection Max_Protected_Entries
  
  
*************** bounds of every entry family of a protec
*** 12687,12693 ****
  defined by a discriminant of a subtype whose corresponding bound is static.
  
  @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1d5}
  @subsection Max_Select_Alternatives
  
  
--- 12720,12726 ----
  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{1d6}
  @subsection Max_Select_Alternatives
  
  
*************** defined by a discriminant of a subtype w
*** 12696,12702 ****
  [RM D.7] Specifies the maximum number of alternatives in a selective accept.
  
  @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1d6}
  @subsection Max_Storage_At_Blocking
  
  
--- 12729,12735 ----
  [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{1d7}
  @subsection Max_Storage_At_Blocking
  
  
*************** Storage_Size that can be retained by a b
*** 12707,12713 ****
  restriction causes Storage_Error to be raised.
  
  @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1d7}
  @subsection Max_Task_Entries
  
  
--- 12740,12746 ----
  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{1d8}
  @subsection Max_Task_Entries
  
  
*************** defined by a discriminant of a subtype w
*** 12720,12726 ****
  corresponding bound is static.
  
  @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1d8}
  @subsection Max_Tasks
  
  
--- 12753,12759 ----
  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{1d9}
  @subsection Max_Tasks
  
  
*************** time. Violations of this restriction wit
*** 12733,12739 ****
  Storage_Error to be raised.
  
  @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1d9}
  @subsection No_Abort_Statements
  
  
--- 12766,12772 ----
  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{1da}
  @subsection No_Abort_Statements
  
  
*************** Storage_Error to be raised.
*** 12743,12749 ****
  no calls to Task_Identification.Abort_Task.
  
  @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1da}
  @subsection No_Access_Parameter_Allocators
  
  
--- 12776,12782 ----
  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{1db}
  @subsection No_Access_Parameter_Allocators
  
  
*************** occurrences of an allocator as the actua
*** 12754,12760 ****
  parameter.
  
  @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1db}
  @subsection No_Access_Subprograms
  
  
--- 12787,12793 ----
  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{1dc}
  @subsection No_Access_Subprograms
  
  
*************** parameter.
*** 12764,12770 ****
  declarations of access-to-subprogram types.
  
  @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1dc}
  @subsection No_Allocators
  
  
--- 12797,12803 ----
  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{1dd}
  @subsection No_Allocators
  
  
*************** declarations of access-to-subprogram typ
*** 12774,12780 ****
  occurrences of an allocator.
  
  @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1dd}
  @subsection No_Anonymous_Allocators
  
  
--- 12807,12813 ----
  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{1de}
  @subsection No_Anonymous_Allocators
  
  
*************** occurrences of an allocator.
*** 12784,12790 ****
  occurrences of an allocator of anonymous access type.
  
  @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1de}
  @subsection No_Asynchronous_Control
  
  
--- 12817,12823 ----
  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{1df}
  @subsection No_Asynchronous_Control
  
  
*************** occurrences of an allocator of anonymous
*** 12794,12800 ****
  dependences on the predefined package Asynchronous_Task_Control.
  
  @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1df}
  @subsection No_Calendar
  
  
--- 12827,12833 ----
  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{1e0}
  @subsection No_Calendar
  
  
*************** dependences on the predefined package As
*** 12804,12810 ****
  dependences on package Calendar.
  
  @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1e0}
  @subsection No_Coextensions
  
  
--- 12837,12843 ----
  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{1e1}
  @subsection No_Coextensions
  
  
*************** dependences on package Calendar.
*** 12814,12820 ****
  coextensions. See 3.10.2.
  
  @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1e1}
  @subsection No_Default_Initialization
  
  
--- 12847,12853 ----
  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{1e2}
  @subsection No_Default_Initialization
  
  
*************** is to prohibit all cases of variables de
*** 12831,12837 ****
  initializer (including the case of OUT scalar parameters).
  
  @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1e2}
  @subsection No_Delay
  
  
--- 12864,12870 ----
  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{1e3}
  @subsection No_Delay
  
  
*************** initializer (including the case of OUT s
*** 12841,12847 ****
  delay statements and no semantic dependences on package Calendar.
  
  @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1e3}
  @subsection No_Dependence
  
  
--- 12874,12880 ----
  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{1e4}
  @subsection No_Dependence
  
  
*************** to support specific constructs of the la
*** 12884,12890 ****
  @end itemize
  
  @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1e4}
  @subsection No_Direct_Boolean_Operators
  
  
--- 12917,12923 ----
  @end itemize
  
  @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1e5}
  @subsection No_Direct_Boolean_Operators
  
  
*************** protocol requires the use of short-circu
*** 12897,12903 ****
  composite boolean operations.
  
  @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1e5}
  @subsection No_Dispatch
  
  
--- 12930,12936 ----
  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{1e6}
  @subsection No_Dispatch
  
  
*************** composite boolean operations.
*** 12907,12913 ****
  occurrences of @code{T'Class}, for any (tagged) subtype @code{T}.
  
  @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1e6}
  @subsection No_Dispatching_Calls
  
  
--- 12940,12946 ----
  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{1e7}
  @subsection No_Dispatching_Calls
  
  
*************** end Example;
*** 12968,12974 ****
  @end example
  
  @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1e7}
  @subsection No_Dynamic_Attachment
  
  
--- 13001,13007 ----
  @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{1e8}
  @subsection No_Dynamic_Attachment
  
  
*************** compatibility purposes (and a warning wi
*** 12987,12993 ****
  warnings on obsolescent features are activated).
  
  @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1e8}
  @subsection No_Dynamic_Priorities
  
  
--- 13020,13026 ----
  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{1e9}
  @subsection No_Dynamic_Priorities
  
  
*************** warnings on obsolescent features are act
*** 12996,13002 ****
  [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities.
  
  @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1e9}
  @subsection No_Entry_Calls_In_Elaboration_Code
  
  
--- 13029,13035 ----
  [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{1ea}
  @subsection No_Entry_Calls_In_Elaboration_Code
  
  
*************** restriction, the compiler can assume tha
*** 13008,13014 ****
  in a task can be executed at elaboration time.
  
  @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1ea}
  @subsection No_Enumeration_Maps
  
  
--- 13041,13047 ----
  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{1eb}
  @subsection No_Enumeration_Maps
  
  
*************** enumeration maps are used (that is Image
*** 13019,13025 ****
  to enumeration types).
  
  @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1eb}
  @subsection No_Exception_Handlers
  
  
--- 13052,13058 ----
  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{1ec}
  @subsection No_Exception_Handlers
  
  
*************** statement generated by the compiler). Th
*** 13044,13050 ****
  represents the line number in the source program where the raise occurs.
  
  @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1ec}
  @subsection No_Exception_Propagation
  
  
--- 13077,13083 ----
  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{1ed}
  @subsection No_Exception_Propagation
  
  
*************** the package GNAT.Current_Exception is no
*** 13061,13067 ****
  statements (raise with no operand) are not permitted.
  
  @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1ed}
  @subsection No_Exception_Registration
  
  
--- 13094,13100 ----
  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{1ee}
  @subsection No_Exception_Registration
  
  
*************** code is simplified by omitting the other
*** 13075,13081 ****
  of exceptions when they are declared.
  
  @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1ee}
  @subsection No_Exceptions
  
  
--- 13108,13114 ----
  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{1ef}
  @subsection No_Exceptions
  
  
*************** raise statements and no exception handle
*** 13086,13092 ****
  generation of language-defined run-time checks.
  
  @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1ef}
  @subsection No_Finalization
  
  
--- 13119,13125 ----
  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{1f0}
  @subsection No_Finalization
  
  
*************** object or a nested component, either dec
*** 13127,13133 ****
  deallocation of a controlled object no longer finalizes its contents.
  
  @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1f0}
  @subsection No_Fixed_Point
  
  
--- 13160,13166 ----
  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{1f1}
  @subsection No_Fixed_Point
  
  
*************** deallocation of a controlled object no l
*** 13137,13143 ****
  occurrences of fixed point types and operations.
  
  @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1f1}
  @subsection No_Floating_Point
  
  
--- 13170,13176 ----
  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{1f2}
  @subsection No_Floating_Point
  
  
*************** occurrences of fixed point types and ope
*** 13147,13153 ****
  occurrences of floating point types and operations.
  
  @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1f2}
  @subsection No_Implicit_Conditionals
  
  
--- 13180,13186 ----
  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{1f3}
  @subsection No_Implicit_Conditionals
  
  
*************** normal manner. Constructs generating imp
*** 13163,13169 ****
  of composite objects and the Max/Min attributes.
  
  @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1f3}
  @subsection No_Implicit_Dynamic_Code
  
  
--- 13196,13202 ----
  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{1f4}
  @subsection No_Implicit_Dynamic_Code
  
  
*************** foreign-language convention; primitive o
*** 13193,13199 ****
  types.
  
  @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1f4}
  @subsection No_Implicit_Heap_Allocations
  
  
--- 13226,13232 ----
  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{1f5}
  @subsection No_Implicit_Heap_Allocations
  
  
*************** types.
*** 13202,13208 ****
  [RM D.7] No constructs are allowed to cause implicit heap allocation.
  
  @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1f5}
  @subsection No_Implicit_Protected_Object_Allocations
  
  
--- 13235,13241 ----
  [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{1f6}
  @subsection No_Implicit_Protected_Object_Allocations
  
  
*************** types.
*** 13212,13218 ****
  protected object.
  
  @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1f6}
  @subsection No_Implicit_Task_Allocations
  
  
--- 13245,13251 ----
  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{1f7}
  @subsection No_Implicit_Task_Allocations
  
  
*************** protected object.
*** 13221,13227 ****
  [GNAT] No constructs are allowed to cause implicit heap allocation of a task.
  
  @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1f7}
  @subsection No_Initialize_Scalars
  
  
--- 13254,13260 ----
  [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{1f8}
  @subsection No_Initialize_Scalars
  
  
*************** code, and in particular eliminates dummy
*** 13233,13239 ****
  are otherwise generated for some record and array types.
  
  @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1f8}
  @subsection No_IO
  
  
--- 13266,13272 ----
  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{1f9}
  @subsection No_IO
  
  
*************** dependences on any of the library units
*** 13244,13250 ****
  Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO.
  
  @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1f9}
  @subsection No_Local_Allocators
  
  
--- 13277,13283 ----
  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{1fa}
  @subsection No_Local_Allocators
  
  
*************** occurrences of an allocator in subprogra
*** 13255,13261 ****
  and entry bodies.
  
  @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1fa}
  @subsection No_Local_Protected_Objects
  
  
--- 13288,13294 ----
  and entry bodies.
  
  @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1fb}
  @subsection No_Local_Protected_Objects
  
  
*************** and entry bodies.
*** 13265,13271 ****
  only declared at the library level.
  
  @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1fb}
  @subsection No_Local_Tagged_Types
  
  
--- 13298,13304 ----
  only declared at the library level.
  
  @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1fc}
  @subsection No_Local_Tagged_Types
  
  
*************** only declared at the library level.
*** 13275,13281 ****
  declared at the library level.
  
  @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1fc}
  @subsection No_Local_Timing_Events
  
  
--- 13308,13314 ----
  declared at the library level.
  
  @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1fd}
  @subsection No_Local_Timing_Events
  
  
*************** declared at the library level.
*** 13285,13291 ****
  declared at the library level.
  
  @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1fd}
  @subsection No_Long_Long_Integers
  
  
--- 13318,13324 ----
  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{1fe}
  @subsection No_Long_Long_Integers
  
  
*************** implicit base type is Long_Long_Integer,
*** 13297,13303 ****
  Long_Integer’Size.
  
  @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1fe}
  @subsection No_Multiple_Elaboration
  
  
--- 13330,13336 ----
  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{1ff}
  @subsection No_Multiple_Elaboration
  
  
*************** possible, including non-Ada main program
*** 13313,13319 ****
  permitted and will be diagnosed by the binder.
  
  @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1ff}
  @subsection No_Nested_Finalization
  
  
--- 13346,13352 ----
  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{200}
  @subsection No_Nested_Finalization
  
  
*************** permitted and will be diagnosed by the b
*** 13322,13328 ****
  [RM D.7] All objects requiring finalization are declared at the library level.
  
  @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{200}
  @subsection No_Protected_Type_Allocators
  
  
--- 13355,13361 ----
  [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{201}
  @subsection No_Protected_Type_Allocators
  
  
*************** permitted and will be diagnosed by the b
*** 13332,13338 ****
  expressions that attempt to allocate protected objects.
  
  @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{201}
  @subsection No_Protected_Types
  
  
--- 13365,13371 ----
  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{202}
  @subsection No_Protected_Types
  
  
*************** expressions that attempt to allocate pro
*** 13342,13348 ****
  declarations of protected types or protected objects.
  
  @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{202}
  @subsection No_Recursion
  
  
--- 13375,13381 ----
  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{203}
  @subsection No_Recursion
  
  
*************** declarations of protected types or prote
*** 13352,13358 ****
  part of its execution.
  
  @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{203}
  @subsection No_Reentrancy
  
  
--- 13385,13391 ----
  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{204}
  @subsection No_Reentrancy
  
  
*************** part of its execution.
*** 13362,13368 ****
  two tasks at the same time.
  
  @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{204}
  @subsection No_Relative_Delay
  
  
--- 13395,13401 ----
  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{205}
  @subsection No_Relative_Delay
  
  
*************** relative statements and prevents express
*** 13373,13379 ****
  appearing in source code.
  
  @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{205}
  @subsection No_Requeue_Statements
  
  
--- 13406,13412 ----
  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{206}
  @subsection No_Requeue_Statements
  
  
*************** compatibility purposes (and a warning wi
*** 13391,13397 ****
  warnings on oNobsolescent features are activated).
  
  @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{206}
  @subsection No_Secondary_Stack
  
  
--- 13424,13430 ----
  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{207}
  @subsection No_Secondary_Stack
  
  
*************** stack is used to implement functions ret
*** 13404,13410 ****
  secondary stacks for tasks (excluding the environment task) at run time.
  
  @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{207}
  @subsection No_Select_Statements
  
  
--- 13437,13443 ----
  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{208}
  @subsection No_Select_Statements
  
  
*************** secondary stacks for tasks (excluding th
*** 13414,13420 ****
  kind are permitted, that is the keyword @code{select} may not appear.
  
  @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{208}
  @subsection No_Specific_Termination_Handlers
  
  
--- 13447,13453 ----
  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{209}
  @subsection No_Specific_Termination_Handlers
  
  
*************** kind are permitted, that is the keyword
*** 13424,13430 ****
  or to Ada.Task_Termination.Specific_Handler.
  
  @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{209}
  @subsection No_Specification_of_Aspect
  
  
--- 13457,13463 ----
  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{20a}
  @subsection No_Specification_of_Aspect
  
  
*************** specification, attribute definition clau
*** 13435,13441 ****
  given aspect.
  
  @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{20a}
  @subsection No_Standard_Allocators_After_Elaboration
  
  
--- 13468,13474 ----
  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{20b}
  @subsection No_Standard_Allocators_After_Elaboration
  
  
*************** library items of the partition has compl
*** 13447,13453 ****
  is raised.
  
  @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{20b}
  @subsection No_Standard_Storage_Pools
  
  
--- 13480,13486 ----
  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{20c}
  @subsection No_Standard_Storage_Pools
  
  
*************** have an explicit Storage_Pool attribute
*** 13459,13465 ****
  user-defined storage pool.
  
  @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{20c}
  @subsection No_Stream_Optimizations
  
  
--- 13492,13498 ----
  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{20d}
  @subsection No_Stream_Optimizations
  
  
*************** due to their superior performance. When
*** 13472,13478 ****
  compiler performs all IO operations on a per-character basis.
  
  @node No_Streams,No_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{20d}
  @subsection No_Streams
  
  
--- 13505,13511 ----
  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{20e}
  @subsection No_Streams
  
  
*************** configuration pragmas to avoid exposing
*** 13499,13505 ****
  entire partition.
  
  @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{20e}
  @subsection No_Tagged_Type_Registration
  
  
--- 13532,13538 ----
  entire partition.
  
  @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{20f}
  @subsection No_Tagged_Type_Registration
  
  
*************** are declared. This restriction may be ne
*** 13514,13520 ****
  the No_Elaboration_Code restriction.
  
  @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{20f}
  @subsection No_Task_Allocators
  
  
--- 13547,13553 ----
  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{210}
  @subsection No_Task_Allocators
  
  
*************** the No_Elaboration_Code restriction.
*** 13524,13530 ****
  or types containing task subcomponents.
  
  @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{210}
  @subsection No_Task_At_Interrupt_Priority
  
  
--- 13557,13563 ----
  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{211}
  @subsection No_Task_At_Interrupt_Priority
  
  
*************** a consequence, the tasks are always crea
*** 13536,13542 ****
  that an interrupt priority.
  
  @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{211}
  @subsection No_Task_Attributes_Package
  
  
--- 13569,13575 ----
  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{212}
  @subsection No_Task_Attributes_Package
  
  
*************** compatibility purposes (and a warning wi
*** 13553,13559 ****
  warnings on obsolescent features are activated).
  
  @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{212}
  @subsection No_Task_Hierarchy
  
  
--- 13586,13592 ----
  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{213}
  @subsection No_Task_Hierarchy
  
  
*************** warnings on obsolescent features are act
*** 13563,13569 ****
  directly on the environment task of the partition.
  
  @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{213}
  @subsection No_Task_Termination
  
  
--- 13596,13602 ----
  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{214}
  @subsection No_Task_Termination
  
  
*************** directly on the environment task of the
*** 13572,13578 ****
  [RM D.7] Tasks that terminate are erroneous.
  
  @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{214}
  @subsection No_Tasking
  
  
--- 13605,13611 ----
  [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{215}
  @subsection No_Tasking
  
  
*************** and cause an error message to be output
*** 13585,13591 ****
  binder.
  
  @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{215}
  @subsection No_Terminate_Alternatives
  
  
--- 13618,13624 ----
  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{216}
  @subsection No_Terminate_Alternatives
  
  
*************** binder.
*** 13594,13600 ****
  [RM D.7] There are no selective accepts with terminate alternatives.
  
  @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{216}
  @subsection No_Unchecked_Access
  
  
--- 13627,13633 ----
  [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{217}
  @subsection No_Unchecked_Access
  
  
*************** binder.
*** 13604,13610 ****
  occurrences of the Unchecked_Access attribute.
  
  @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{217}
  @subsection No_Unchecked_Conversion
  
  
--- 13637,13643 ----
  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{218}
  @subsection No_Unchecked_Conversion
  
  
*************** occurrences of the Unchecked_Access attr
*** 13614,13620 ****
  dependences on the predefined generic function Unchecked_Conversion.
  
  @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{218}
  @subsection No_Unchecked_Deallocation
  
  
--- 13647,13653 ----
  dependences on the predefined generic function Unchecked_Conversion.
  
  @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{219}
  @subsection No_Unchecked_Deallocation
  
  
*************** dependences on the predefined generic fu
*** 13624,13630 ****
  dependences on the predefined generic procedure Unchecked_Deallocation.
  
  @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{219}
  @subsection No_Use_Of_Attribute
  
  
--- 13657,13663 ----
  dependences on the predefined generic procedure Unchecked_Deallocation.
  
  @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{21a}
  @subsection No_Use_Of_Attribute
  
  
*************** dependences on the predefined generic pr
*** 13634,13640 ****
  earlier versions of Ada.
  
  @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{21a}
  @subsection No_Use_Of_Entity
  
  
--- 13667,13673 ----
  earlier versions of Ada.
  
  @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{21b}
  @subsection No_Use_Of_Entity
  
  
*************** No_Use_Of_Entity => Ada.Text_IO.Put_Line
*** 13654,13660 ****
  @end example
  
  @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{21b}
  @subsection No_Use_Of_Pragma
  
  
--- 13687,13693 ----
  @end example
  
  @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{21c}
  @subsection No_Use_Of_Pragma
  
  
*************** No_Use_Of_Entity => Ada.Text_IO.Put_Line
*** 13664,13670 ****
  earlier versions of Ada.
  
  @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{21c}
  @subsection Pure_Barriers
  
  
--- 13697,13703 ----
  earlier versions of Ada.
  
  @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{21d}
  @subsection Pure_Barriers
  
  
*************** but still ensures absence of side effect
*** 13715,13721 ****
  during the evaluation of the barriers.
  
  @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{21d}
  @subsection Simple_Barriers
  
  
--- 13748,13754 ----
  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{21e}
  @subsection Simple_Barriers
  
  
*************** compatibility purposes (and a warning wi
*** 13734,13740 ****
  warnings on obsolescent features are activated).
  
  @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{21e}
  @subsection Static_Priorities
  
  
--- 13767,13773 ----
  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{21f}
  @subsection Static_Priorities
  
  
*************** are static, and that there are no depend
*** 13745,13751 ****
  @code{Ada.Dynamic_Priorities}.
  
  @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{21f}
  @subsection Static_Storage_Size
  
  
--- 13778,13784 ----
  @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{220}
  @subsection Static_Storage_Size
  
  
*************** are static, and that there are no depend
*** 13755,13761 ****
  in a Storage_Size pragma or attribute definition clause is static.
  
  @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{220}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{221}
  @section Program Unit Level Restrictions
  
  
--- 13788,13794 ----
  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{221}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{222}
  @section Program Unit Level Restrictions
  
  
*************** other compilation units in the partition
*** 13786,13792 ****
  @end menu
  
  @node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{222}
  @subsection No_Elaboration_Code
  
  
--- 13819,13825 ----
  @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{223}
  @subsection No_Elaboration_Code
  
  
*************** associated with the unit. This counter i
*** 13842,13848 ****
  before elaboration and to control multiple elaboration attempts.
  
  @node No_Dynamic_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{223}
  @subsection No_Dynamic_Accessibility_Checks
  
  
--- 13875,13881 ----
  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{224}
  @subsection No_Dynamic_Accessibility_Checks
  
  
*************** In all other cases, the level of T is as
*** 13891,13897 ****
  @end itemize
  
  @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{224}
  @subsection No_Dynamic_Sized_Objects
  
  
--- 13924,13930 ----
  @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{225}
  @subsection No_Dynamic_Sized_Objects
  
  
*************** access discriminants. It is often a good
*** 13909,13915 ****
  with No_Secondary_Stack.
  
  @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{225}
  @subsection No_Entry_Queue
  
  
--- 13942,13948 ----
  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{226}
  @subsection No_Entry_Queue
  
  
*************** checked at compile time.  A program exec
*** 13922,13928 ****
  is made to queue a second task on such an entry.
  
  @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{226}
  @subsection No_Implementation_Aspect_Specifications
  
  
--- 13955,13961 ----
  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{227}
  @subsection No_Implementation_Aspect_Specifications
  
  
*************** GNAT-defined aspects are present.  With
*** 13933,13939 ****
  aspects that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{227}
  @subsection No_Implementation_Attributes
  
  
--- 13966,13972 ----
  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{228}
  @subsection No_Implementation_Attributes
  
  
*************** attributes that can be used are those de
*** 13945,13951 ****
  Manual.
  
  @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{228}
  @subsection No_Implementation_Identifiers
  
  
--- 13978,13984 ----
  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{229}
  @subsection No_Implementation_Identifiers
  
  
*************** implementation-defined identifiers (mark
*** 13956,13962 ****
  occur within language-defined packages.
  
  @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{229}
  @subsection No_Implementation_Pragmas
  
  
--- 13989,13995 ----
  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{22a}
  @subsection No_Implementation_Pragmas
  
  
*************** GNAT-defined pragmas are present.  With
*** 13967,13973 ****
  pragmas that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{22a}
  @subsection No_Implementation_Restrictions
  
  
--- 14000,14006 ----
  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{22b}
  @subsection No_Implementation_Restrictions
  
  
*************** are present.  With this restriction, the
*** 13979,13985 ****
  that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{22b}
  @subsection No_Implementation_Units
  
  
--- 14012,14018 ----
  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{22c}
  @subsection No_Implementation_Units
  
  
*************** mention in the context clause of any imp
*** 13990,13996 ****
  of packages Ada, Interfaces, or System.
  
  @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{22c}
  @subsection No_Implicit_Aliasing
  
  
--- 14023,14029 ----
  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{22d}
  @subsection No_Implicit_Aliasing
  
  
*************** to be aliased, and in such cases, it can
*** 14005,14011 ****
  the standard attribute Unchecked_Access which is preferable.
  
  @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{22d}
  @subsection No_Implicit_Loops
  
  
--- 14038,14044 ----
  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{22e}
  @subsection No_Implicit_Loops
  
  
*************** arrays larger than about 5000 scalar com
*** 14022,14028 ****
  is set in the spec of a package, it will not apply to its body.
  
  @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{22e}
  @subsection No_Obsolescent_Features
  
  
--- 14055,14061 ----
  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{22f}
  @subsection No_Obsolescent_Features
  
  
*************** is set in the spec of a package, it will
*** 14032,14038 ****
  features are used, as defined in Annex J of the Ada Reference Manual.
  
  @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{22f}
  @subsection No_Wide_Characters
  
  
--- 14065,14071 ----
  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{230}
  @subsection No_Wide_Characters
  
  
*************** appear in the program (that is literals
*** 14046,14052 ****
  type @code{Character}).
  
  @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{230}
  @subsection Static_Dispatch_Tables
  
  
--- 14079,14085 ----
  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{231}
  @subsection Static_Dispatch_Tables
  
  
*************** type @code{Character}).
*** 14056,14062 ****
  associated with dispatch tables can be placed in read-only memory.
  
  @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{231}
  @subsection SPARK_05
  
  
--- 14089,14095 ----
  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{232}
  @subsection SPARK_05
  
  
*************** gnatprove -P project.gpr --mode=check_al
*** 14079,14085 ****
  @end example
  
  @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top
! @anchor{gnat_rm/implementation_advice doc}@anchor{232}@anchor{gnat_rm/implementation_advice id1}@anchor{233}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}
  @chapter Implementation Advice
  
  
--- 14112,14118 ----
  @end example
  
  @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top
! @anchor{gnat_rm/implementation_advice doc}@anchor{233}@anchor{gnat_rm/implementation_advice id1}@anchor{234}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}
  @chapter Implementation Advice
  
  
*************** case the text describes what GNAT does a
*** 14177,14183 ****
  @end menu
  
  @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{234}
  @section RM 1.1.3(20): Error Detection
  
  
--- 14210,14216 ----
  @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{235}
  @section RM 1.1.3(20): Error Detection
  
  
*************** or diagnosed at compile time.
*** 14194,14200 ****
  @geindex Child Units
  
  @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{235}
  @section RM 1.1.3(31): Child Units
  
  
--- 14227,14233 ----
  @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{236}
  @section RM 1.1.3(31): Child Units
  
  
*************** Followed.
*** 14210,14216 ****
  @geindex Bounded errors
  
  @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{236}
  @section RM 1.1.5(12): Bounded Errors
  
  
--- 14243,14249 ----
  @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{237}
  @section RM 1.1.5(12): Bounded Errors
  
  
*************** runtime.
*** 14227,14233 ****
  @geindex Pragmas
  
  @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice
! @anchor{gnat_rm/implementation_advice id2}@anchor{237}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{238}
  @section RM 2.8(16): Pragmas
  
  
--- 14260,14266 ----
  @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{238}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{239}
  @section RM 2.8(16): Pragmas
  
  
*************** that this advice not be followed.  For d
*** 14340,14346 ****
  @ref{7,,Implementation Defined Pragmas}.
  
  @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{239}
  @section RM 2.8(17-19): Pragmas
  
  
--- 14373,14379 ----
  @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{23a}
  @section RM 2.8(17-19): Pragmas
  
  
*************** replacing @code{library_items}.”
*** 14361,14374 ****
  @end itemize
  @end quotation
  
! See @ref{238,,RM 2.8(16); Pragmas}.
  
  @geindex Character Sets
  
  @geindex Alternative Character Sets
  
  @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{23a}
  @section RM 3.5.2(5): Alternative Character Sets
  
  
--- 14394,14407 ----
  @end itemize
  @end quotation
  
! See @ref{239,,RM 2.8(16); Pragmas}.
  
  @geindex Character Sets
  
  @geindex Alternative Character Sets
  
  @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{23b}
  @section RM 3.5.2(5): Alternative Character Sets
  
  
*************** there is no such restriction.
*** 14396,14402 ****
  @geindex Integer types
  
  @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{23b}
  @section RM 3.5.4(28): Integer Types
  
  
--- 14429,14435 ----
  @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{23c}
  @section RM 3.5.4(28): Integer Types
  
  
*************** are supported for convenient interface t
*** 14415,14421 ****
  types of the machine are easily available.
  
  @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{23c}
  @section RM 3.5.4(29): Integer Types
  
  
--- 14448,14454 ----
  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{23d}
  @section RM 3.5.4(29): Integer Types
  
  
*************** Followed.
*** 14431,14437 ****
  @geindex Enumeration values
  
  @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{23d}
  @section RM 3.5.5(8): Enumeration Values
  
  
--- 14464,14470 ----
  @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{23e}
  @section RM 3.5.5(8): Enumeration Values
  
  
*************** Followed.
*** 14451,14457 ****
  @geindex Float types
  
  @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{23e}
  @section RM 3.5.7(17): Float Types
  
  
--- 14484,14490 ----
  @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{23f}
  @section RM 3.5.7(17): Float Types
  
  
*************** is a software rather than a hardware for
*** 14481,14487 ****
  @geindex multidimensional
  
  @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration’Small,RM 3 5 7 17 Float Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{23f}
  @section RM 3.6.2(11): Multidimensional Arrays
  
  
--- 14514,14520 ----
  @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{240}
  @section RM 3.6.2(11): Multidimensional Arrays
  
  
*************** Followed.
*** 14499,14505 ****
  @geindex Duration'Small
  
  @node RM 9 6 30-31 Duration’Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{240}
  @section RM 9.6(30-31): Duration’Small
  
  
--- 14532,14538 ----
  @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{241}
  @section RM 9.6(30-31): Duration’Small
  
  
*************** it need not be the same time base as use
*** 14520,14526 ****
  Followed.
  
  @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration’Small,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{241}
  @section RM 10.2.1(12): Consistent Representation
  
  
--- 14553,14559 ----
  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{242}
  @section RM 10.2.1(12): Consistent Representation
  
  
*************** advice without severely impacting effici
*** 14542,14548 ****
  @geindex Exception information
  
  @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{242}
  @section RM 11.4.1(19): Exception Information
  
  
--- 14575,14581 ----
  @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{243}
  @section RM 11.4.1(19): Exception Information
  
  
*************** Pragma @code{Discard_Names}.
*** 14573,14579 ****
  @geindex suppression of
  
  @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{243}
  @section RM 11.5(28): Suppression of Checks
  
  
--- 14606,14612 ----
  @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{244}
  @section RM 11.5(28): Suppression of Checks
  
  
*************** Followed.
*** 14588,14594 ****
  @geindex Representation clauses
  
  @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{244}
  @section RM 13.1 (21-24): Representation Clauses
  
  
--- 14621,14627 ----
  @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{245}
  @section RM 13.1 (21-24): Representation Clauses
  
  
*************** Followed.
*** 14640,14646 ****
  @geindex Packed types
  
  @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{245}
  @section RM 13.2(6-8): Packed Types
  
  
--- 14673,14679 ----
  @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{246}
  @section RM 13.2(6-8): Packed Types
  
  
*************** subcomponent of the packed type.
*** 14671,14677 ****
  @geindex Address clauses
  
  @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{246}
  @section RM 13.3(14-19): Address Clauses
  
  
--- 14704,14710 ----
  @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{247}
  @section RM 13.3(14-19): Address Clauses
  
  
*************** Followed.
*** 14724,14730 ****
  @geindex Alignment clauses
  
  @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{247}
  @section RM 13.3(29-35): Alignment Clauses
  
  
--- 14757,14763 ----
  @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{248}
  @section RM 13.3(29-35): Alignment Clauses
  
  
*************** Followed.
*** 14781,14787 ****
  @geindex Size clauses
  
  @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{248}
  @section RM 13.3(42-43): Size Clauses
  
  
--- 14814,14820 ----
  @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{249}
  @section RM 13.3(42-43): Size Clauses
  
  
*************** object’s @code{Alignment} (if the @cod
*** 14799,14805 ****
  Followed.
  
  @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{249}
  @section RM 13.3(50-56): Size Clauses
  
  
--- 14832,14838 ----
  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{24a}
  @section RM 13.3(50-56): Size Clauses
  
  
*************** Followed.
*** 14850,14856 ****
  @geindex Component_Size clauses
  
  @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{24a}
  @section RM 13.3(71-73): Component Size Clauses
  
  
--- 14883,14889 ----
  @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{24b}
  @section RM 13.3(71-73): Component Size Clauses
  
  
*************** Followed.
*** 14884,14890 ****
  @geindex enumeration
  
  @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{24b}
  @section RM 13.4(9-10): Enumeration Representation Clauses
  
  
--- 14917,14923 ----
  @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{24c}
  @section RM 13.4(9-10): Enumeration Representation Clauses
  
  
*************** Followed.
*** 14906,14912 ****
  @geindex records
  
  @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{24c}
  @section RM 13.5.1(17-22): Record Representation Clauses
  
  
--- 14939,14945 ----
  @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{24d}
  @section RM 13.5.1(17-22): Record Representation Clauses
  
  
*************** and all mentioned features are implement
*** 14966,14972 ****
  @geindex Storage place attributes
  
  @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{24d}
  @section RM 13.5.2(5): Storage Place Attributes
  
  
--- 14999,15005 ----
  @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{24e}
  @section RM 13.5.2(5): Storage Place Attributes
  
  
*************** Followed.  There are no such components
*** 14986,14992 ****
  @geindex Bit ordering
  
  @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{24e}
  @section RM 13.5.3(7-8): Bit Ordering
  
  
--- 15019,15025 ----
  @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{24f}
  @section RM 13.5.3(7-8): Bit Ordering
  
  
*************** Followed.
*** 15004,15010 ****
  @geindex as private type
  
  @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{24f}
  @section RM 13.7(37): Address as Private
  
  
--- 15037,15043 ----
  @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{250}
  @section RM 13.7(37): Address as Private
  
  
*************** Followed.
*** 15022,15028 ****
  @geindex operations of
  
  @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{250}
  @section RM 13.7.1(16): Address Operations
  
  
--- 15055,15061 ----
  @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{251}
  @section RM 13.7.1(16): Address Operations
  
  
*************** operation raises @code{Program_Error}, s
*** 15040,15046 ****
  @geindex Unchecked conversion
  
  @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{251}
  @section RM 13.9(14-17): Unchecked Conversion
  
  
--- 15073,15079 ----
  @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{252}
  @section RM 13.9(14-17): Unchecked Conversion
  
  
*************** Followed.
*** 15084,15090 ****
  @geindex implicit
  
  @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{252}
  @section RM 13.11(23-25): Implicit Heap Usage
  
  
--- 15117,15123 ----
  @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{253}
  @section RM 13.11(23-25): Implicit Heap Usage
  
  
*************** Followed.
*** 15135,15141 ****
  @geindex Unchecked deallocation
  
  @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{253}
  @section RM 13.11.2(17): Unchecked Deallocation
  
  
--- 15168,15174 ----
  @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{254}
  @section RM 13.11.2(17): Unchecked Deallocation
  
  
*************** Followed.
*** 15150,15156 ****
  @geindex Stream oriented attributes
  
  @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{254}
  @section RM 13.13.2(1.6): Stream Oriented Attributes
  
  
--- 15183,15189 ----
  @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{255}
  @section RM 13.13.2(1.6): Stream Oriented Attributes
  
  
*************** scalar types. This XDR alternative can b
*** 15181,15187 ****
  @geindex Stream oriented attributes
  
  @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{255}
  @section RM A.1(52): Names of Predefined Numeric Types
  
  
--- 15214,15220 ----
  @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{256}
  @section RM A.1(52): Names of Predefined Numeric Types
  
  
*************** Followed.
*** 15199,15205 ****
  @geindex Ada.Characters.Handling
  
  @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{256}
  @section RM A.3.2(49): @code{Ada.Characters.Handling}
  
  
--- 15232,15238 ----
  @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{257}
  @section RM A.3.2(49): @code{Ada.Characters.Handling}
  
  
*************** Followed.  GNAT provides no such localiz
*** 15216,15222 ****
  @geindex Bounded-length strings
  
  @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{257}
  @section RM A.4.4(106): Bounded-Length String Handling
  
  
--- 15249,15255 ----
  @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{258}
  @section RM A.4.4(106): Bounded-Length String Handling
  
  
*************** Followed.  No implicit pointers or dynam
*** 15231,15237 ****
  @geindex Random number generation
  
  @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{258}
  @section RM A.5.2(46-47): Random Number Generation
  
  
--- 15264,15270 ----
  @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{259}
  @section RM A.5.2(46-47): Random Number Generation
  
  
*************** condition here to hold true.
*** 15260,15266 ****
  @geindex Get_Immediate
  
  @node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{259}
  @section RM A.10.7(23): @code{Get_Immediate}
  
  
--- 15293,15299 ----
  @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{25a}
  @section RM A.10.7(23): @code{Get_Immediate}
  
  
*************** this functionality.
*** 15284,15290 ****
  @geindex Containers
  
  @node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{25a}
  @section RM A.18: @code{Containers}
  
  
--- 15317,15323 ----
  @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{25b}
  @section RM A.18: @code{Containers}
  
  
*************** follow the implementation advice.
*** 15305,15311 ****
  @geindex Export
  
  @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{25b}
  @section RM B.1(39-41): Pragma @code{Export}
  
  
--- 15338,15344 ----
  @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{25c}
  @section RM B.1(39-41): Pragma @code{Export}
  
  
*************** Followed.
*** 15353,15359 ****
  @geindex Interfaces
  
  @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{25c}
  @section RM B.2(12-13): Package @code{Interfaces}
  
  
--- 15386,15392 ----
  @geindex Interfaces
  
  @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{25d}
  @section RM B.2(12-13): Package @code{Interfaces}
  
  
*************** Followed.  GNAT provides all the package
*** 15383,15389 ****
  @geindex interfacing with
  
  @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{25d}
  @section RM B.3(63-71): Interfacing with C
  
  
--- 15416,15422 ----
  @geindex interfacing with
  
  @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{25e}
  @section RM B.3(63-71): Interfacing with C
  
  
*************** Followed.
*** 15471,15477 ****
  @geindex interfacing with
  
  @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{25e}
  @section RM B.4(95-98): Interfacing with COBOL
  
  
--- 15504,15510 ----
  @geindex interfacing with
  
  @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{25f}
  @section RM B.4(95-98): Interfacing with COBOL
  
  
*************** Followed.
*** 15512,15518 ****
  @geindex interfacing with
  
  @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{25f}
  @section RM B.5(22-26): Interfacing with Fortran
  
  
--- 15545,15551 ----
  @geindex interfacing with
  
  @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{260}
  @section RM B.5(22-26): Interfacing with Fortran
  
  
*************** Followed.
*** 15563,15569 ****
  @geindex Machine operations
  
  @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{260}
  @section RM C.1(3-5): Access to Machine Operations
  
  
--- 15596,15602 ----
  @geindex Machine operations
  
  @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{261}
  @section RM C.1(3-5): Access to Machine Operations
  
  
*************** object that is specified as exported.”
*** 15598,15604 ****
  Followed.
  
  @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{261}
  @section RM C.1(10-16): Access to Machine Operations
  
  
--- 15631,15637 ----
  Followed.
  
  @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{262}
  @section RM C.1(10-16): Access to Machine Operations
  
  
*************** Followed on any target supporting such o
*** 15659,15665 ****
  @geindex Interrupt support
  
  @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{262}
  @section RM C.3(28): Interrupt Support
  
  
--- 15692,15698 ----
  @geindex Interrupt support
  
  @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{263}
  @section RM C.3(28): Interrupt Support
  
  
*************** of interrupt blocking.
*** 15677,15683 ****
  @geindex Protected procedure handlers
  
  @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{263}
  @section RM C.3.1(20-21): Protected Procedure Handlers
  
  
--- 15710,15716 ----
  @geindex Protected procedure handlers
  
  @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{264}
  @section RM C.3.1(20-21): Protected Procedure Handlers
  
  
*************** Followed.  Compile time warnings are giv
*** 15703,15709 ****
  @geindex Interrupts
  
  @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{264}
  @section RM C.3.2(25): Package @code{Interrupts}
  
  
--- 15736,15742 ----
  @geindex Interrupts
  
  @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{265}
  @section RM C.3.2(25): Package @code{Interrupts}
  
  
*************** Followed.
*** 15721,15727 ****
  @geindex Pre-elaboration requirements
  
  @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{265}
  @section RM C.4(14): Pre-elaboration Requirements
  
  
--- 15754,15760 ----
  @geindex Pre-elaboration requirements
  
  @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{266}
  @section RM C.4(14): Pre-elaboration Requirements
  
  
*************** Followed.  Executable code is generated
*** 15737,15743 ****
  to initialize large arrays.
  
  @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{266}
  @section RM C.5(8): Pragma @code{Discard_Names}
  
  
--- 15770,15776 ----
  to initialize large arrays.
  
  @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{267}
  @section RM C.5(8): Pragma @code{Discard_Names}
  
  
*************** Followed.
*** 15755,15761 ****
  @geindex Task_Attributes
  
  @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{267}
  @section RM C.7.2(30): The Package Task_Attributes
  
  
--- 15788,15794 ----
  @geindex Task_Attributes
  
  @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{268}
  @section RM C.7.2(30): The Package Task_Attributes
  
  
*************** Not followed.  This implementation is no
*** 15776,15782 ****
  @geindex Locking Policies
  
  @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{268}
  @section RM D.3(17): Locking Policies
  
  
--- 15809,15815 ----
  @geindex Locking Policies
  
  @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{269}
  @section RM D.3(17): Locking Policies
  
  
*************** whose names (@code{Inheritance_Locking}
*** 15793,15799 ****
  @geindex Entry queuing policies
  
  @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{269}
  @section RM D.4(16): Entry Queuing Policies
  
  
--- 15826,15832 ----
  @geindex Entry queuing policies
  
  @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{26a}
  @section RM D.4(16): Entry Queuing Policies
  
  
*************** Followed.  No such implementation-define
*** 15808,15814 ****
  @geindex Preemptive abort
  
  @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{26a}
  @section RM D.6(9-10): Preemptive Abort
  
  
--- 15841,15847 ----
  @geindex Preemptive abort
  
  @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{26b}
  @section RM D.6(9-10): Preemptive Abort
  
  
*************** Followed.
*** 15834,15840 ****
  @geindex Tasking restrictions
  
  @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{26b}
  @section RM D.7(21): Tasking Restrictions
  
  
--- 15867,15873 ----
  @geindex Tasking restrictions
  
  @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{26c}
  @section RM D.7(21): Tasking Restrictions
  
  
*************** pragma @code{Profile (Restricted)} for m
*** 15853,15859 ****
  @geindex monotonic
  
  @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{26c}
  @section RM D.8(47-49): Monotonic Time
  
  
--- 15886,15892 ----
  @geindex monotonic
  
  @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{26d}
  @section RM D.8(47-49): Monotonic Time
  
  
*************** Followed.
*** 15888,15894 ****
  @geindex PCS
  
  @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{26d}
  @section RM E.5(28-29): Partition Communication Subsystem
  
  
--- 15921,15927 ----
  @geindex PCS
  
  @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{26e}
  @section RM E.5(28-29): Partition Communication Subsystem
  
  
*************** should allow them to block until the cor
*** 15900,15907 ****
  returns.”
  @end quotation
  
! Followed by GLADE, a separately supplied PCS that can be used with
! GNAT.
  
  @quotation
  
--- 15933,15939 ----
  returns.”
  @end quotation
  
! A separately supplied PCS that can be used with GNAT when combined with the PolyORB product.
  
  @quotation
  
*************** should raise @code{Storage_Error} if it
*** 15910,15922 ****
  write the @code{Item} into the stream.”
  @end quotation
  
- Followed by GLADE, a separately supplied PCS that can be used with
- GNAT.
- 
  @geindex COBOL support
  
  @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{26e}
  @section RM F(7): COBOL Support
  
  
--- 15942,15951 ----
  write the @code{Item} into the stream.”
  @end quotation
  
  @geindex COBOL support
  
  @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{26f}
  @section RM F(7): COBOL Support
  
  
*************** Followed.
*** 15936,15942 ****
  @geindex Decimal radix support
  
  @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{26f}
  @section RM F.1(2): Decimal Radix Support
  
  
--- 15965,15971 ----
  @geindex Decimal radix support
  
  @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{270}
  @section RM F.1(2): Decimal Radix Support
  
  
*************** representations.
*** 15952,15958 ****
  @geindex Numerics
  
  @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{270}
  @section RM G: Numerics
  
  
--- 15981,15987 ----
  @geindex Numerics
  
  @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{271}
  @section RM G: Numerics
  
  
*************** Followed.
*** 15972,15978 ****
  @geindex Complex types
  
  @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{271}
  @section RM G.1.1(56-58): Complex Types
  
  
--- 16001,16007 ----
  @geindex Complex types
  
  @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{272}
  @section RM G.1.1(56-58): Complex Types
  
  
*************** Followed.
*** 16034,16040 ****
  @geindex Complex elementary functions
  
  @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{272}
  @section RM G.1.2(49): Complex Elementary Functions
  
  
--- 16063,16069 ----
  @geindex Complex elementary functions
  
  @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{273}
  @section RM G.1.2(49): Complex Elementary Functions
  
  
*************** Followed.
*** 16056,16062 ****
  @geindex Accuracy requirements
  
  @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{273}
  @section RM G.2.4(19): Accuracy Requirements
  
  
--- 16085,16091 ----
  @geindex Accuracy requirements
  
  @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{274}
  @section RM G.2.4(19): Accuracy Requirements
  
  
*************** Followed.
*** 16080,16086 ****
  @geindex complex arithmetic
  
  @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{274}
  @section RM G.2.6(15): Complex Arithmetic Accuracy
  
  
--- 16109,16115 ----
  @geindex complex arithmetic
  
  @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{275}
  @section RM G.2.6(15): Complex Arithmetic Accuracy
  
  
*************** Followed.
*** 16098,16104 ****
  @geindex Sequential elaboration policy
  
  @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{275}
  @section RM H.6(15/2): Pragma Partition_Elaboration_Policy
  
  
--- 16127,16133 ----
  @geindex Sequential elaboration policy
  
  @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{276}
  @section RM H.6(15/2): Pragma Partition_Elaboration_Policy
  
  
*************** immediately terminated.”
*** 16113,16119 ****
  Not followed.
  
  @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top
! @anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{276}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{277}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}
  @chapter Implementation Defined Characteristics
  
  
--- 16142,16148 ----
  Not followed.
  
  @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top
! @anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{277}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{278}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}
  @chapter Implementation Defined Characteristics
  
  
*************** may have been set by a call to @code{Ada
*** 16754,16764 ****
  “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 *
--- 16783,16789 ----
  “The mechanisms for building and running partitions.  See 10.2(24).”
  @end itemize
  
! GNAT itself supports programs with only a single partition. The PolyORB product (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 PolyORB user guide for details.
  
  
  @itemize *
*************** implementation.  See 10.2(28).”
*** 16779,16785 ****
  @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.
  
  
--- 16804,16810 ----
  @end itemize
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system. See the PolyORB user guide for
  further details.
  
  
*************** Implementation-defined assertion_aspect_
*** 16889,16895 ****
  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 *
--- 16914,16920 ----
  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 Disable and Suppressible.
  
  
  @itemize *
*************** When the @code{Pattern} parameter is not
*** 17407,17413 ****
  according to the syntax of regular expressions as defined in the
  @code{GNAT.Regexp} package.
  
! See @ref{278,,GNAT.Regexp (g-regexp.ads)}.
  
  
  @itemize *
--- 17432,17438 ----
  according to the syntax of regular expressions as defined in the
  @code{GNAT.Regexp} package.
  
! See @ref{279,,GNAT.Regexp (g-regexp.ads)}.
  
  
  @itemize *
*************** Unknown.
*** 18165,18172 ****
  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 *
--- 18190,18197 ----
  programs.  See E(5).”
  @end itemize
  
! The PolyORB product provides means creating and executing
! distributed programs. See the PolyORB user guide for further details.
  
  
  @itemize *
*************** distributed programs. See the GLADE refe
*** 18176,18182 ****
  inaccessible.  See E.1(7).”
  @end itemize
  
! See the GLADE reference manual for full details on such events.
  
  
  @itemize *
--- 18201,18207 ----
  inaccessible.  See E.1(7).”
  @end itemize
  
! See the PolyORB user guide for full details on such events.
  
  
  @itemize *
*************** See the GLADE reference manual for full
*** 18186,18192 ****
  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.
  
  
--- 18211,18217 ----
  shared resources between partitions in certain cases.  See E.1(11).”
  @end itemize
  
! See the PolyORB user guide for full details on these aspects of
  multi-partition execution.
  
  
*************** multi-partition execution.
*** 18197,18203 ****
  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.
  
  
--- 18222,18228 ----
  immediately aborted as a result of cancellation.  See E.4(13).”
  @end itemize
  
! See the PolyORB user guide for details on the effect of abort in
  a distributed application.
  
  
*************** System.RPC.Partition_ID’Last is Intege
*** 18216,18222 ****
  “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.
  
  
--- 18241,18247 ----
  “Implementation-defined interfaces in the PCS.  See E.5(26).”
  @end itemize
  
! See the PolyORB user guide for a full description of all
  implementation defined interfaces.
  
  
*************** Information on those subjects is not yet
*** 18505,18511 ****
  Execution is erroneous in that case.
  
  @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
! @anchor{gnat_rm/intrinsic_subprograms doc}@anchor{279}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}
  @chapter Intrinsic Subprograms
  
  
--- 18530,18536 ----
  Execution is erroneous in that case.
  
  @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
! @anchor{gnat_rm/intrinsic_subprograms doc}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{27b}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}
  @chapter Intrinsic Subprograms
  
  
*************** Ada standard does not require Ada compil
*** 18543,18549 ****
  @end menu
  
  @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id2}@anchor{27b}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{27c}
  @section Intrinsic Operators
  
  
--- 18568,18574 ----
  @end menu
  
  @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id2}@anchor{27c}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{27d}
  @section Intrinsic Operators
  
  
*************** It is also possible to specify such oper
*** 18574,18580 ****
  full views are appropriate arithmetic types.
  
  @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{27d}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{27e}
  @section Compilation_ISO_Date
  
  
--- 18599,18605 ----
  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{27e}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{27f}
  @section Compilation_ISO_Date
  
  
*************** application program should simply call t
*** 18588,18594 ****
  the current compilation (in local time format YYYY-MM-DD).
  
  @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{27f}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{280}
  @section Compilation_Date
  
  
--- 18613,18619 ----
  the current compilation (in local time format YYYY-MM-DD).
  
  @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{280}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{281}
  @section Compilation_Date
  
  
*************** Same as Compilation_ISO_Date, except the
*** 18598,18604 ****
  MMM DD YYYY.
  
  @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{281}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{282}
  @section Compilation_Time
  
  
--- 18623,18629 ----
  MMM DD YYYY.
  
  @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{282}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{283}
  @section Compilation_Time
  
  
*************** application program should simply call t
*** 18612,18618 ****
  the current compilation (in local time format HH:MM:SS).
  
  @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{283}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{284}
  @section Enclosing_Entity
  
  
--- 18637,18643 ----
  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{284}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{285}
  @section Enclosing_Entity
  
  
*************** application program should simply call t
*** 18626,18632 ****
  the current subprogram, package, task, entry, or protected subprogram.
  
  @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{285}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{286}
  @section Exception_Information
  
  
--- 18651,18657 ----
  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{286}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{287}
  @section Exception_Information
  
  
*************** so an application program should simply
*** 18640,18646 ****
  the exception information associated with the current exception.
  
  @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{287}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{288}
  @section Exception_Message
  
  
--- 18665,18671 ----
  the exception information associated with the current exception.
  
  @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{288}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{289}
  @section Exception_Message
  
  
*************** so an application program should simply
*** 18654,18660 ****
  the message associated with the current exception.
  
  @node Exception_Name,File,Exception_Message,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{289}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{28a}
  @section Exception_Name
  
  
--- 18679,18685 ----
  the message associated with the current exception.
  
  @node Exception_Name,File,Exception_Message,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{28a}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{28b}
  @section Exception_Name
  
  
*************** so an application program should simply
*** 18668,18674 ****
  the name of the current exception.
  
  @node File,Line,Exception_Name,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms file}@anchor{28b}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{28c}
  @section File
  
  
--- 18693,18699 ----
  the name of the current exception.
  
  @node File,Line,Exception_Name,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms file}@anchor{28c}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{28d}
  @section File
  
  
*************** application program should simply call t
*** 18682,18688 ****
  file.
  
  @node Line,Shifts and Rotates,File,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id11}@anchor{28d}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{28e}
  @section Line
  
  
--- 18707,18713 ----
  file.
  
  @node Line,Shifts and Rotates,File,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id11}@anchor{28e}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{28f}
  @section Line
  
  
*************** application program should simply call t
*** 18696,18702 ****
  source line.
  
  @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id12}@anchor{28f}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{290}
  @section Shifts and Rotates
  
  
--- 18721,18727 ----
  source line.
  
  @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id12}@anchor{290}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{291}
  @section Shifts and Rotates
  
  
*************** corresponding operator for modular type.
*** 18739,18745 ****
  number may change its sign bit to positive.
  
  @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id13}@anchor{291}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{292}
  @section Source_Location
  
  
--- 18764,18770 ----
  number may change its sign bit to positive.
  
  @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id13}@anchor{292}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{293}
  @section Source_Location
  
  
*************** application program should simply call t
*** 18753,18759 ****
  source file location.
  
  @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top
! @anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{293}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}
  @chapter Representation Clauses and Pragmas
  
  
--- 18778,18784 ----
  source file location.
  
  @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top
! @anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{295}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}
  @chapter Representation Clauses and Pragmas
  
  
*************** and this section describes the additiona
*** 18799,18805 ****
  @end menu
  
  @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{295}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{296}
  @section Alignment Clauses
  
  
--- 18824,18830 ----
  @end menu
  
  @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{297}
  @section Alignment Clauses
  
  
*************** For elementary types, the alignment is t
*** 18821,18827 ****
  objects of the type divided by @code{Storage_Unit},
  and the maximum alignment supported by the target.
  (This maximum alignment is given by the GNAT-specific attribute
! @code{Standard'Maximum_Alignment}; see @ref{1a5,,Attribute Maximum_Alignment}.)
  
  @geindex Maximum_Alignment attribute
  
--- 18846,18852 ----
  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{1a6,,Attribute Maximum_Alignment}.)
  
  @geindex Maximum_Alignment attribute
  
*************** assumption is non-portable, and other co
*** 18930,18936 ****
  alignments for the subtype @code{RS}.
  
  @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{297}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{298}
  @section Size Clauses
  
  
--- 18955,18961 ----
  alignments for the subtype @code{RS}.
  
  @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{299}
  @section Size Clauses
  
  
*************** if it is known that a Size value can be
*** 19007,19013 ****
  type Integer.
  
  @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{299}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{29a}
  @section Storage_Size Clauses
  
  
--- 19032,19038 ----
  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{29a}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{29b}
  @section Storage_Size Clauses
  
  
*************** Of course in practice, there will not be
*** 19080,19086 ****
  case of such an access declaration.
  
  @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{29b}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{29c}
  @section Size of Variant Record Objects
  
  
--- 19105,19111 ----
  case of such an access declaration.
  
  @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{29d}
  @section Size of Variant Record Objects
  
  
*************** the maximum size, regardless of the curr
*** 19190,19196 ****
  variant value.
  
  @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{29d}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{29e}
  @section Biased Representation
  
  
--- 19215,19221 ----
  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{29e}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{29f}
  @section Biased Representation
  
  
*************** biased representation can be used for al
*** 19228,19234 ****
  enumeration types for which a representation clause is given.
  
  @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{29f}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2a0}
  @section Value_Size and Object_Size Clauses
  
  
--- 19253,19259 ----
  enumeration types for which a representation clause is given.
  
  @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{2a0}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2a1}
  @section Value_Size and Object_Size Clauses
  
  
*************** definition clause forces biased represen
*** 19544,19550 ****
  warning can be turned off using @code{-gnatw.B}.
  
  @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{2a1}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2a2}
  @section Component_Size Clauses
  
  
--- 19569,19575 ----
  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{2a2}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2a3}
  @section Component_Size Clauses
  
  
*************** and a pragma Pack for the same array typ
*** 19592,19598 ****
  clauses are given, the pragma Pack will be ignored.
  
  @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{2a3}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2a4}
  @section Bit_Order Clauses
  
  
--- 19617,19623 ----
  clauses are given, the pragma Pack will be ignored.
  
  @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2a5}
  @section Bit_Order Clauses
  
  
*************** if desired.  The following section conta
*** 19698,19704 ****
  details regarding the issue of byte ordering.
  
  @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{2a5}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2a6}
  @section Effect of Bit_Order on Byte Ordering
  
  
--- 19723,19729 ----
  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{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2a7}
  @section Effect of Bit_Order on Byte Ordering
  
  
*************** to set the boolean constant @code{Master
*** 19955,19961 ****
  an appropriate manner.
  
  @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{2a7}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2a8}
  @section Pragma Pack for Arrays
  
  
--- 19980,19986 ----
  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{2a8}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2a9}
  @section Pragma Pack for Arrays
  
  
*************** Here 31-bit packing is achieved as requi
*** 20075,20081 ****
  since in this case the programmer intention is clear.
  
  @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2a9}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2aa}
  @section Pragma Pack for Records
  
  
--- 20100,20106 ----
  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{2aa}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2ab}
  @section Pragma Pack for Records
  
  
*************** array that is longer than 64 bits, so it
*** 20159,20165 ****
  boundary, and takes an integral number of bytes, i.e., 72 bits.
  
  @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2ab}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2ac}
  @section Record Representation Clauses
  
  
--- 20184,20190 ----
  boundary, and takes an integral number of bytes, i.e., 72 bits.
  
  @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2ac}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2ad}
  @section Record Representation Clauses
  
  
*************** end record;
*** 20238,20244 ****
  @end example
  
  @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2ad}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2ae}
  @section Handling of Records with Holes
  
  
--- 20263,20269 ----
  @end example
  
  @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2ae}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2af}
  @section Handling of Records with Holes
  
  
*************** for Hrec'Size use 64;
*** 20314,20320 ****
  @end example
  
  @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2af}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2b0}
  @section Enumeration Clauses
  
  
--- 20339,20345 ----
  @end example
  
  @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2b0}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2b1}
  @section Enumeration Clauses
  
  
*************** the overhead of converting representatio
*** 20357,20363 ****
  positional values, (i.e., the value delivered by the @code{Pos} attribute).
  
  @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2b1}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2b2}
  @section Address Clauses
  
  
--- 20382,20388 ----
  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{2b2}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2b3}
  @section Address Clauses
  
  
*************** then the program compiles without the wa
*** 20697,20703 ****
  the output @code{X was not clobbered}.
  
  @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2b3}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2b4}
  @section Use of Address Clauses for Memory-Mapped I/O
  
  
--- 20722,20728 ----
  the output @code{X was not clobbered}.
  
  @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2b4}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2b5}
  @section Use of Address Clauses for Memory-Mapped I/O
  
  
*************** provides the pragma @code{Volatile_Full_
*** 20755,20761 ****
  pragma @code{Atomic} and will give the additional guarantee.
  
  @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2b5}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2b6}
  @section Effect of Convention on Representation
  
  
--- 20780,20786 ----
  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{2b6}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2b7}
  @section Effect of Convention on Representation
  
  
*************** when one of these values is read, any no
*** 20833,20839 ****
  @end itemize
  
  @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2b7}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2b8}
  @section Conventions and Anonymous Access Types
  
  
--- 20858,20864 ----
  @end itemize
  
  @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2b8}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2b9}
  @section Conventions and Anonymous Access Types
  
  
*************** package ConvComp is
*** 20909,20915 ****
  @end example
  
  @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2b9}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2ba}
  @section Determining the Representations chosen by GNAT
  
  
--- 20934,20940 ----
  @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{2ba}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2bb}
  @section Determining the Representations chosen by GNAT
  
  
*************** generated by the compiler into the origi
*** 21061,21067 ****
  the actual representation to be used.
  
  @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top
! @anchor{gnat_rm/standard_library_routines doc}@anchor{2bb}@anchor{gnat_rm/standard_library_routines id1}@anchor{2bc}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}
  @chapter Standard Library Routines
  
  
--- 21086,21092 ----
  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{2bc}@anchor{gnat_rm/standard_library_routines id1}@anchor{2bd}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}
  @chapter Standard Library Routines
  
  
*************** For packages in Interfaces and System, a
*** 21888,21894 ****
  available in GNAT, see the Ada 2012 RM for full details.
  
  @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top
! @anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2bd}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}
  @chapter The Implementation of Standard I/O
  
  
--- 21913,21919 ----
  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{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2bf}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}
  @chapter The Implementation of Standard I/O
  
  
*************** these additional facilities are also des
*** 21940,21946 ****
  @end menu
  
  @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2bf}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2c0}
  @section Standard I/O Packages
  
  
--- 21965,21971 ----
  @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{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2c1}
  @section Standard I/O Packages
  
  
*************** flush the common I/O streams and in part
*** 22011,22017 ****
  elaborating the Ada code.
  
  @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2c1}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2c2}
  @section FORM Strings
  
  
--- 22036,22042 ----
  elaborating the Ada code.
  
  @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2c3}
  @section FORM Strings
  
  
*************** unrecognized keyword appears in a form s
*** 22037,22043 ****
  and not considered invalid.
  
  @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2c3}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2c4}
  @section Direct_IO
  
  
--- 22062,22068 ----
  and not considered invalid.
  
  @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2c5}
  @section Direct_IO
  
  
*************** There is no limit on the size of Direct_
*** 22056,22062 ****
  necessary to accommodate whatever records are written to the file.
  
  @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2c5}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2c6}
  @section Sequential_IO
  
  
--- 22081,22087 ----
  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{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2c7}
  @section Sequential_IO
  
  
*************** using Stream_IO, and this is the preferr
*** 22103,22109 ****
  above program fragment rewritten to use Stream_IO will work correctly.
  
  @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2c7}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2c8}
  @section Text_IO
  
  
--- 22128,22134 ----
  above program fragment rewritten to use Stream_IO will work correctly.
  
  @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2c9}
  @section Text_IO
  
  
*************** the file.
*** 22186,22192 ****
  @end menu
  
  @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2c9}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2ca}
  @subsection Stream Pointer Positioning
  
  
--- 22211,22217 ----
  @end menu
  
  @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2cb}
  @subsection Stream Pointer Positioning
  
  
*************** between two Ada files, then the differen
*** 22222,22228 ****
  situations.
  
  @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2cb}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2cc}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 22247,22253 ----
  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{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2cd}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** to read data past that end of
*** 22273,22279 ****
  file indication, until another end of file indication is entered.
  
  @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2cd}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2ce}
  @subsection Get_Immediate
  
  
--- 22298,22304 ----
  file indication, until another end of file indication is entered.
  
  @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2cf}
  @subsection Get_Immediate
  
  
*************** possible), it is undefined whether the F
*** 22291,22297 ****
  page mark.
  
  @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2cf}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2d0}
  @subsection Treating Text_IO Files as Streams
  
  
--- 22316,22322 ----
  page mark.
  
  @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2d1}
  @subsection Treating Text_IO Files as Streams
  
  
*************** skipped and the effect is similar to tha
*** 22307,22313 ****
  @code{Get_Immediate}.
  
  @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2d1}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2d2}
  @subsection Text_IO Extensions
  
  
--- 22332,22338 ----
  @code{Get_Immediate}.
  
  @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2d3}
  @subsection Text_IO Extensions
  
  
*************** the string is to be read.
*** 22335,22341 ****
  @end itemize
  
  @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2d3}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2d4}
  @subsection Text_IO Facilities for Unbounded Strings
  
  
--- 22360,22366 ----
  @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{2d4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2d5}
  @subsection Text_IO Facilities for Unbounded Strings
  
  
*************** files @code{a-szuzti.ads} and @code{a-sz
*** 22383,22389 ****
  @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings.
  
  @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2d5}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2d6}
  @section Wide_Text_IO
  
  
--- 22408,22414 ----
  @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{2d6}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2d7}
  @section Wide_Text_IO
  
  
*************** input also causes Constraint_Error to be
*** 22630,22641 ****
  @end menu
  
  @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2d7}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2d8}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2c8,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the
--- 22655,22666 ----
  @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{2d8}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2d9}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2c9,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the
*************** to a normal program using @code{Wide_Tex
*** 22654,22660 ****
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2d9}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2da}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 22679,22685 ----
  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{2da}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2db}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** treated as data characters), and @code{E
*** 22665,22671 ****
  it is possible to read beyond an end of file.
  
  @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2db}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2dc}
  @section Wide_Wide_Text_IO
  
  
--- 22690,22696 ----
  it is possible to read beyond an end of file.
  
  @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2dc}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2dd}
  @section Wide_Wide_Text_IO
  
  
*************** input also causes Constraint_Error to be
*** 22834,22845 ****
  @end menu
  
  @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2dd}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2de}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2c8,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the
--- 22859,22870 ----
  @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{2de}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2df}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2c9,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the
*************** to a normal program using @code{Wide_Wid
*** 22858,22864 ****
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2df}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2e0}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 22883,22889 ----
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2e0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2e1}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** treated as data characters), and @code{E
*** 22869,22875 ****
  it is possible to read beyond an end of file.
  
  @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2e1}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2e2}
  @section Stream_IO
  
  
--- 22894,22900 ----
  it is possible to read beyond an end of file.
  
  @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2e2}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2e3}
  @section Stream_IO
  
  
*************** manner described for stream attributes.
*** 22891,22897 ****
  @end itemize
  
  @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2e3}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2e4}
  @section Text Translation
  
  
--- 22916,22922 ----
  @end itemize
  
  @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2e4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2e5}
  @section Text Translation
  
  
*************** mode. (corresponds to_O_U16TEXT).
*** 22925,22931 ****
  @end itemize
  
  @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2e5}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2e6}
  @section Shared Files
  
  
--- 22950,22956 ----
  @end itemize
  
  @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2e6}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2e7}
  @section Shared Files
  
  
*************** heterogeneous input-output.  Although th
*** 22988,22994 ****
  for this purpose (using the stream attributes).
  
  @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2e7}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2e8}
  @section Filenames encoding
  
  
--- 23013,23019 ----
  for this purpose (using the stream attributes).
  
  @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2e8}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2e9}
  @section Filenames encoding
  
  
*************** platform. On the other Operating Systems
*** 23028,23034 ****
  UTF-8 natively.
  
  @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2e9}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2ea}
  @section File content encoding
  
  
--- 23053,23059 ----
  UTF-8 natively.
  
  @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2ea}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2eb}
  @section File content encoding
  
  
*************** Unicode 8-bit encoding
*** 23061,23067 ****
  This encoding is only supported on the Windows platform.
  
  @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2eb}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2ec}
  @section Open Modes
  
  
--- 23086,23092 ----
  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{2ec}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2ed}
  @section Open Modes
  
  
*************** subsequently requires switching from rea
*** 23164,23170 ****
  then the file is reopened in @code{r+} mode to permit the required operation.
  
  @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2ed}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2ee}
  @section Operations on C Streams
  
  
--- 23189,23195 ----
  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{2ee}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2ef}
  @section Operations on C Streams
  
  
*************** end Interfaces.C_Streams;
*** 23324,23330 ****
  @end example
  
  @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2ef}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2f0}
  @section Interfacing to C Streams
  
  
--- 23349,23355 ----
  @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{2f0}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2f1}
  @section Interfacing to C Streams
  
  
*************** imported from a C program, allowing an A
*** 23417,23423 ****
  existing C file.
  
  @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top
! @anchor{gnat_rm/the_gnat_library doc}@anchor{2f1}@anchor{gnat_rm/the_gnat_library id1}@anchor{2f2}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}
  @chapter The GNAT Library
  
  
--- 23442,23448 ----
  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{2f2}@anchor{gnat_rm/the_gnat_library id1}@anchor{2f3}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}
  @chapter The GNAT Library
  
  
*************** of GNAT, and will generate a warning mes
*** 23602,23608 ****
  @end menu
  
  @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2f3}@anchor{gnat_rm/the_gnat_library id2}@anchor{2f4}
  @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
  
  
--- 23627,23633 ----
  @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{2f4}@anchor{gnat_rm/the_gnat_library id2}@anchor{2f5}
  @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 23619,23625 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2f5}@anchor{gnat_rm/the_gnat_library id3}@anchor{2f6}
  @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads})
  
  
--- 23644,23650 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id3}@anchor{2f7}
  @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 23636,23642 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2f7}@anchor{gnat_rm/the_gnat_library id4}@anchor{2f8}
  @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads})
  
  
--- 23661,23667 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id4}@anchor{2f9}
  @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 23653,23659 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2f9}@anchor{gnat_rm/the_gnat_library id5}@anchor{2fa}
  @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads})
  
  
--- 23678,23684 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id5}@anchor{2fb}
  @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 23670,23676 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2fb}@anchor{gnat_rm/the_gnat_library id6}@anchor{2fc}
  @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads})
  
  
--- 23695,23701 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id6}@anchor{2fd}
  @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 23687,23693 ****
  (RM A.3.3(27)).
  
  @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2fd}@anchor{gnat_rm/the_gnat_library id7}@anchor{2fe}
  @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads})
  
  
--- 23712,23718 ----
  (RM A.3.3(27)).
  
  @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id7}@anchor{2ff}
  @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads})
  
  
*************** This child of @code{Ada.Containers} defi
*** 23699,23705 ****
  Indefinite_Holders that avoids heap allocation.
  
  @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2ff}@anchor{gnat_rm/the_gnat_library id8}@anchor{300}
  @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads})
  
  
--- 23724,23730 ----
  Indefinite_Holders that avoids heap allocation.
  
  @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id8}@anchor{301}
  @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads})
  
  
*************** provides a mechanism for obtaining envir
*** 23712,23718 ****
  where this concept makes sense.
  
  @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{301}@anchor{gnat_rm/the_gnat_library id9}@anchor{302}
  @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
  
  
--- 23737,23743 ----
  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{302}@anchor{gnat_rm/the_gnat_library id9}@anchor{303}
  @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
  
  
*************** to further calls to the subprograms in @
*** 23730,23736 ****
  will not see the removed argument.
  
  @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{303}@anchor{gnat_rm/the_gnat_library id10}@anchor{304}
  @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
  
  
--- 23755,23761 ----
  will not see the removed argument.
  
  @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id10}@anchor{305}
  @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
  
  
*************** Using a response file allow passing a se
*** 23750,23756 ****
  than the maximum allowed by the system on the command line.
  
  @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{305}@anchor{gnat_rm/the_gnat_library id11}@anchor{306}
  @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
  
  
--- 23775,23781 ----
  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{306}@anchor{gnat_rm/the_gnat_library id11}@anchor{307}
  @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 23765,23771 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{307}@anchor{gnat_rm/the_gnat_library id12}@anchor{308}
  @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
  
  
--- 23790,23796 ----
  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{308}@anchor{gnat_rm/the_gnat_library id12}@anchor{309}
  @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
  
  
*************** exception occurrence (@code{Null_Occurre
*** 23779,23785 ****
  an exception.
  
  @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{309}@anchor{gnat_rm/the_gnat_library id13}@anchor{30a}
  @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
  
  
--- 23804,23810 ----
  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{30a}@anchor{gnat_rm/the_gnat_library id13}@anchor{30b}
  @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
  
  
*************** exceptions (hence the name last chance),
*** 23793,23799 ****
  terminating the program. Note that this subprogram never returns.
  
  @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{30b}@anchor{gnat_rm/the_gnat_library id14}@anchor{30c}
  @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads})
  
  
--- 23818,23824 ----
  terminating the program. Note that this subprogram never returns.
  
  @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id14}@anchor{30d}
  @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads})
  
  
*************** give a traceback array of addresses base
*** 23806,23812 ****
  occurrence.
  
  @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{30d}@anchor{gnat_rm/the_gnat_library id15}@anchor{30e}
  @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads})
  
  
--- 23831,23837 ----
  occurrence.
  
  @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id15}@anchor{30f}
  @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 23821,23827 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{30f}@anchor{gnat_rm/the_gnat_library id16}@anchor{310}
  @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
  
  
--- 23846,23852 ----
  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{310}@anchor{gnat_rm/the_gnat_library id16}@anchor{311}
  @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 23836,23842 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{311}@anchor{gnat_rm/the_gnat_library id17}@anchor{312}
  @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads})
  
  
--- 23861,23867 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id17}@anchor{313}
  @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads})
  
  
*************** strings, avoiding the necessity for an i
*** 23853,23859 ****
  with ordinary strings.
  
  @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{313}@anchor{gnat_rm/the_gnat_library id18}@anchor{314}
  @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
  
  
--- 23878,23884 ----
  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{314}@anchor{gnat_rm/the_gnat_library id18}@anchor{315}
  @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
  
  
*************** wide strings, avoiding the necessity for
*** 23870,23876 ****
  with ordinary wide strings.
  
  @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{315}@anchor{gnat_rm/the_gnat_library id19}@anchor{316}
  @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
  
  
--- 23895,23901 ----
  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{316}@anchor{gnat_rm/the_gnat_library id19}@anchor{317}
  @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
  
  
*************** wide wide strings, avoiding the necessit
*** 23887,23893 ****
  with ordinary wide wide strings.
  
  @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{317}@anchor{gnat_rm/the_gnat_library id20}@anchor{318}
  @section @code{Ada.Task_Initialization} (@code{a-tasini.ads})
  
  
--- 23912,23918 ----
  with ordinary wide wide strings.
  
  @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id20}@anchor{319}
  @section @code{Ada.Task_Initialization} (@code{a-tasini.ads})
  
  
*************** parameterless procedures. Note that such
*** 23899,23905 ****
  those tasks activated after the handler is set.
  
  @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{319}@anchor{gnat_rm/the_gnat_library id21}@anchor{31a}
  @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads})
  
  
--- 23924,23930 ----
  those tasks activated after the handler is set.
  
  @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id21}@anchor{31b}
  @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 23914,23920 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{31b}@anchor{gnat_rm/the_gnat_library id22}@anchor{31c}
  @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads})
  
  
--- 23939,23945 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id22}@anchor{31d}
  @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads})
  
  
*************** execution (for example a standard input
*** 23929,23935 ****
  interactive).
  
  @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{31d}@anchor{gnat_rm/the_gnat_library id23}@anchor{31e}
  @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
  
  
--- 23954,23960 ----
  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{31e}@anchor{gnat_rm/the_gnat_library id23}@anchor{31f}
  @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
  
  
*************** This package provides subprograms that a
*** 23942,23948 ****
  Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{31f}@anchor{gnat_rm/the_gnat_library id24}@anchor{320}
  @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
  
  
--- 23967,23973 ----
  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{320}@anchor{gnat_rm/the_gnat_library id24}@anchor{321}
  @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
  
  
*************** extracted from a file opened on the Ada
*** 23957,23963 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{321}@anchor{gnat_rm/the_gnat_library id25}@anchor{322}
  @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads})
  
  
--- 23982,23988 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id25}@anchor{323}
  @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads})
  
  
*************** execution (for example a standard input
*** 23972,23978 ****
  interactive).
  
  @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{323}@anchor{gnat_rm/the_gnat_library id26}@anchor{324}
  @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
  
  
--- 23997,24003 ----
  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{324}@anchor{gnat_rm/the_gnat_library id26}@anchor{325}
  @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
  
  
*************** This package provides subprograms that a
*** 23985,23991 ****
  Wide_Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{325}@anchor{gnat_rm/the_gnat_library id27}@anchor{326}
  @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
  
  
--- 24010,24016 ----
  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{326}@anchor{gnat_rm/the_gnat_library id27}@anchor{327}
  @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
  
  
*************** extracted from a file opened on the Ada
*** 24000,24006 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{327}@anchor{gnat_rm/the_gnat_library id28}@anchor{328}
  @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads})
  
  
--- 24025,24031 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id28}@anchor{329}
  @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads})
  
  
*************** change during execution (for example a s
*** 24015,24021 ****
  redefined to be interactive).
  
  @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{329}@anchor{gnat_rm/the_gnat_library id29}@anchor{32a}
  @section @code{GNAT.Altivec} (@code{g-altive.ads})
  
  
--- 24040,24046 ----
  redefined to be interactive).
  
  @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id29}@anchor{32b}
  @section @code{GNAT.Altivec} (@code{g-altive.ads})
  
  
*************** definitions of constants and types commo
*** 24028,24034 ****
  binding.
  
  @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{32b}@anchor{gnat_rm/the_gnat_library id30}@anchor{32c}
  @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads})
  
  
--- 24053,24059 ----
  binding.
  
  @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id30}@anchor{32d}
  @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads})
  
  
*************** binding.
*** 24039,24045 ****
  This package provides the Vector/View conversion routines.
  
  @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{32d}@anchor{gnat_rm/the_gnat_library id31}@anchor{32e}
  @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
  
  
--- 24064,24070 ----
  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{32e}@anchor{gnat_rm/the_gnat_library id31}@anchor{32f}
  @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
  
  
*************** library. The hard binding is provided as
*** 24053,24059 ****
  is common to both bindings.
  
  @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{32f}@anchor{gnat_rm/the_gnat_library id32}@anchor{330}
  @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads})
  
  
--- 24078,24084 ----
  is common to both bindings.
  
  @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id32}@anchor{331}
  @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads})
  
  
*************** This package exposes the various vector
*** 24065,24071 ****
  to AltiVec facilities.
  
  @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{331}@anchor{gnat_rm/the_gnat_library id33}@anchor{332}
  @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads})
  
  
--- 24090,24096 ----
  to AltiVec facilities.
  
  @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id33}@anchor{333}
  @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads})
  
  
*************** vector elements and provides a simple wa
*** 24080,24086 ****
  objects.
  
  @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{333}@anchor{gnat_rm/the_gnat_library id34}@anchor{334}
  @section @code{GNAT.Array_Split} (@code{g-arrspl.ads})
  
  
--- 24105,24111 ----
  objects.
  
  @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id34}@anchor{335}
  @section @code{GNAT.Array_Split} (@code{g-arrspl.ads})
  
  
*************** an array wherever the separators appear,
*** 24093,24099 ****
  to the resulting slices.
  
  @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{335}@anchor{gnat_rm/the_gnat_library id35}@anchor{336}
  @section @code{GNAT.AWK} (@code{g-awk.ads})
  
  
--- 24118,24124 ----
  to the resulting slices.
  
  @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id35}@anchor{337}
  @section @code{GNAT.AWK} (@code{g-awk.ads})
  
  
*************** or more files containing formatted data.
*** 24108,24114 ****
  where each record is a line and a field is a data element in this line.
  
  @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{337}@anchor{gnat_rm/the_gnat_library id36}@anchor{338}
  @section @code{GNAT.Binary_Search} (@code{g-binsea.ads})
  
  
--- 24133,24139 ----
  where each record is a line and a field is a data element in this line.
  
  @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id36}@anchor{339}
  @section @code{GNAT.Binary_Search} (@code{g-binsea.ads})
  
  
*************** Allow binary search of a sorted array (o
*** 24120,24126 ****
  the generic does not reference the array directly).
  
  @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{339}@anchor{gnat_rm/the_gnat_library id37}@anchor{33a}
  @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
  
  
--- 24145,24151 ----
  the generic does not reference the array directly).
  
  @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id37}@anchor{33b}
  @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
  
  
*************** These associations can be specified usin
*** 24133,24139 ****
  line switch.
  
  @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{33b}@anchor{gnat_rm/the_gnat_library id38}@anchor{33c}
  @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
  
  
--- 24158,24164 ----
  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{33c}@anchor{gnat_rm/the_gnat_library id38}@anchor{33d}
  @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
  
  
*************** line switch.
*** 24144,24150 ****
  Provides routines giving hints to the branch predictor of the code generator.
  
  @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{33d}@anchor{gnat_rm/the_gnat_library id39}@anchor{33e}
  @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads})
  
  
--- 24169,24175 ----
  Provides routines giving hints to the branch predictor of the code generator.
  
  @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id39}@anchor{33f}
  @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads})
  
  
*************** useful directly or as parts of the imple
*** 24159,24165 ****
  such as mailboxes.
  
  @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{33f}@anchor{gnat_rm/the_gnat_library id40}@anchor{340}
  @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads})
  
  
--- 24184,24190 ----
  such as mailboxes.
  
  @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id40}@anchor{341}
  @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads})
  
  
*************** such as mailboxes.
*** 24172,24178 ****
  Provides a thread-safe asynchronous intertask mailbox communication facility.
  
  @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{341}@anchor{gnat_rm/the_gnat_library id41}@anchor{342}
  @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads})
  
  
--- 24197,24203 ----
  Provides a thread-safe asynchronous intertask mailbox communication facility.
  
  @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id41}@anchor{343}
  @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads})
  
  
*************** data items.  Exchange and comparison pro
*** 24187,24193 ****
  access-to-procedure values.
  
  @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{343}@anchor{gnat_rm/the_gnat_library id42}@anchor{344}
  @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
  
  
--- 24212,24218 ----
  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{344}@anchor{gnat_rm/the_gnat_library id42}@anchor{345}
  @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
  
  
*************** access-to-procedure values. This is an o
*** 24203,24209 ****
  compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable.
  
  @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{345}@anchor{gnat_rm/the_gnat_library id43}@anchor{346}
  @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads})
  
  
--- 24228,24234 ----
  compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable.
  
  @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id43}@anchor{347}
  @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads})
  
  
*************** if the procedures can be inlined, at the
*** 24219,24225 ****
  multiple instantiations.
  
  @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{347}@anchor{gnat_rm/the_gnat_library id44}@anchor{348}
  @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads})
  
  
--- 24244,24250 ----
  multiple instantiations.
  
  @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id44}@anchor{349}
  @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads})
  
  
*************** the encoding of the string. The routine
*** 24235,24241 ****
  sequences for various UCS input formats.
  
  @node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{349}@anchor{gnat_rm/the_gnat_library id45}@anchor{34a}
  @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads})
  
  
--- 24260,24266 ----
  sequences for various UCS input formats.
  
  @node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id45}@anchor{34b}
  @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads})
  
  
*************** General routines for swapping the bytes
*** 24249,24255 ****
  Machine-specific implementations are available in some cases.
  
  @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{34b}@anchor{gnat_rm/the_gnat_library id46}@anchor{34c}
  @section @code{GNAT.Calendar} (@code{g-calend.ads})
  
  
--- 24274,24280 ----
  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{34c}@anchor{gnat_rm/the_gnat_library id46}@anchor{34d}
  @section @code{GNAT.Calendar} (@code{g-calend.ads})
  
  
*************** Also provides conversion of @code{Ada.Ca
*** 24263,24269 ****
  C @code{timeval} format.
  
  @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{34d}@anchor{gnat_rm/the_gnat_library id47}@anchor{34e}
  @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
  
  
--- 24288,24294 ----
  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{34e}@anchor{gnat_rm/the_gnat_library id47}@anchor{34f}
  @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
  
  
*************** C @code{timeval} format.
*** 24274,24280 ****
  @geindex GNAT.Calendar.Time_IO (g-catiio.ads)
  
  @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{34f}@anchor{gnat_rm/the_gnat_library id48}@anchor{350}
  @section @code{GNAT.CRC32} (@code{g-crc32.ads})
  
  
--- 24299,24305 ----
  @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{350}@anchor{gnat_rm/the_gnat_library id48}@anchor{351}
  @section @code{GNAT.CRC32} (@code{g-crc32.ads})
  
  
*************** of this algorithm see
*** 24291,24297 ****
  Aug. 1988.  Sarwate, D.V.
  
  @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{351}@anchor{gnat_rm/the_gnat_library id49}@anchor{352}
  @section @code{GNAT.Case_Util} (@code{g-casuti.ads})
  
  
--- 24316,24322 ----
  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{352}@anchor{gnat_rm/the_gnat_library id49}@anchor{353}
  @section @code{GNAT.Case_Util} (@code{g-casuti.ads})
  
  
*************** without the overhead of the full casing
*** 24306,24312 ****
  in @code{Ada.Characters.Handling}.
  
  @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{353}@anchor{gnat_rm/the_gnat_library id50}@anchor{354}
  @section @code{GNAT.CGI} (@code{g-cgi.ads})
  
  
--- 24331,24337 ----
  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{354}@anchor{gnat_rm/the_gnat_library id50}@anchor{355}
  @section @code{GNAT.CGI} (@code{g-cgi.ads})
  
  
*************** builds a table whose index is the key an
*** 24321,24327 ****
  with this table.
  
  @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{355}@anchor{gnat_rm/the_gnat_library id51}@anchor{356}
  @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads})
  
  
--- 24346,24352 ----
  with this table.
  
  @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id51}@anchor{357}
  @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads})
  
  
*************** Common Gateway Interface (CGI).  It expo
*** 24336,24342 ****
  cookies (piece of information kept in the Web client software).
  
  @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{357}@anchor{gnat_rm/the_gnat_library id52}@anchor{358}
  @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads})
  
  
--- 24361,24367 ----
  cookies (piece of information kept in the Web client software).
  
  @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id52}@anchor{359}
  @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads})
  
  
*************** This is a package to help debugging CGI
*** 24348,24354 ****
  programs written in Ada.
  
  @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{359}@anchor{gnat_rm/the_gnat_library id53}@anchor{35a}
  @section @code{GNAT.Command_Line} (@code{g-comlin.ads})
  
  
--- 24373,24379 ----
  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{35a}@anchor{gnat_rm/the_gnat_library id53}@anchor{35b}
  @section @code{GNAT.Command_Line} (@code{g-comlin.ads})
  
  
*************** including the ability to scan for named
*** 24361,24367 ****
  and expand file names using wildcard notations.
  
  @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{35b}@anchor{gnat_rm/the_gnat_library id54}@anchor{35c}
  @section @code{GNAT.Compiler_Version} (@code{g-comver.ads})
  
  
--- 24386,24392 ----
  and expand file names using wildcard notations.
  
  @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id54}@anchor{35d}
  @section @code{GNAT.Compiler_Version} (@code{g-comver.ads})
  
  
*************** of the compiler if a consistent tool set
*** 24379,24385 ****
  of a partition).
  
  @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{35d}@anchor{gnat_rm/the_gnat_library id55}@anchor{35e}
  @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
  
  
--- 24404,24410 ----
  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{35e}@anchor{gnat_rm/the_gnat_library id55}@anchor{35f}
  @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
  
  
*************** of a partition).
*** 24390,24396 ****
  Provides a simple interface to handle Ctrl-C keyboard events.
  
  @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{35f}@anchor{gnat_rm/the_gnat_library id56}@anchor{360}
  @section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
  
  
--- 24415,24421 ----
  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{360}@anchor{gnat_rm/the_gnat_library id56}@anchor{361}
  @section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
  
  
*************** This is particularly useful in simulatin
*** 24407,24413 ****
  obtaining information about exceptions provided by Ada 83 compilers.
  
  @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{361}@anchor{gnat_rm/the_gnat_library id57}@anchor{362}
  @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads})
  
  
--- 24432,24438 ----
  obtaining information about exceptions provided by Ada 83 compilers.
  
  @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id57}@anchor{363}
  @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads})
  
  
*************** problems.
*** 24424,24430 ****
  See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}.
  
  @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{363}@anchor{gnat_rm/the_gnat_library id58}@anchor{364}
  @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads})
  
  
--- 24449,24455 ----
  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{364}@anchor{gnat_rm/the_gnat_library id58}@anchor{365}
  @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads})
  
  
*************** to and from string images of address val
*** 24437,24443 ****
  for hexadecimal literals.
  
  @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{365}@anchor{gnat_rm/the_gnat_library id59}@anchor{366}
  @section @code{GNAT.Decode_String} (@code{g-decstr.ads})
  
  
--- 24462,24468 ----
  for hexadecimal literals.
  
  @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id59}@anchor{367}
  @section @code{GNAT.Decode_String} (@code{g-decstr.ads})
  
  
*************** Useful in conjunction with Unicode chara
*** 24461,24467 ****
  preinstantiation for UTF-8. See next entry.
  
  @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{367}@anchor{gnat_rm/the_gnat_library id60}@anchor{368}
  @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads})
  
  
--- 24486,24492 ----
  preinstantiation for UTF-8. See next entry.
  
  @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id60}@anchor{369}
  @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads})
  
  
*************** preinstantiation for UTF-8. See next ent
*** 24482,24488 ****
  A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding.
  
  @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{369}@anchor{gnat_rm/the_gnat_library id61}@anchor{36a}
  @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
  
  
--- 24507,24513 ----
  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{36a}@anchor{gnat_rm/the_gnat_library id61}@anchor{36b}
  @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
  
  
*************** the current directory, making new direct
*** 24495,24501 ****
  directory.
  
  @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{36b}@anchor{gnat_rm/the_gnat_library id62}@anchor{36c}
  @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
  
  
--- 24520,24526 ----
  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{36c}@anchor{gnat_rm/the_gnat_library id62}@anchor{36d}
  @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
  
  
*************** A child unit of GNAT.Directory_Operation
*** 24507,24513 ****
  for iterating through directories.
  
  @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{36d}@anchor{gnat_rm/the_gnat_library id63}@anchor{36e}
  @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
  
  
--- 24532,24538 ----
  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{36e}@anchor{gnat_rm/the_gnat_library id63}@anchor{36f}
  @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
  
  
*************** dynamic instances of the hash table, whi
*** 24525,24531 ****
  @code{GNAT.HTable} creates a single instance of the hash table.
  
  @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{36f}@anchor{gnat_rm/the_gnat_library id64}@anchor{370}
  @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads})
  
  
--- 24550,24556 ----
  @code{GNAT.HTable} creates a single instance of the hash table.
  
  @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id64}@anchor{371}
  @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads})
  
  
*************** dynamic instances of the table, while an
*** 24545,24551 ****
  @code{GNAT.Table} creates a single instance of the table type.
  
  @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{371}@anchor{gnat_rm/the_gnat_library id65}@anchor{372}
  @section @code{GNAT.Encode_String} (@code{g-encstr.ads})
  
  
--- 24570,24576 ----
  @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{372}@anchor{gnat_rm/the_gnat_library id65}@anchor{373}
  @section @code{GNAT.Encode_String} (@code{g-encstr.ads})
  
  
*************** encoding method. Useful in conjunction w
*** 24567,24573 ****
  Note there is a preinstantiation for UTF-8. See next entry.
  
  @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{373}@anchor{gnat_rm/the_gnat_library id66}@anchor{374}
  @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads})
  
  
--- 24592,24598 ----
  Note there is a preinstantiation for UTF-8. See next entry.
  
  @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id66}@anchor{375}
  @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads})
  
  
*************** Note there is a preinstantiation for UTF
*** 24588,24594 ****
  A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding.
  
  @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{375}@anchor{gnat_rm/the_gnat_library id67}@anchor{376}
  @section @code{GNAT.Exception_Actions} (@code{g-excact.ads})
  
  
--- 24613,24619 ----
  A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding.
  
  @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id67}@anchor{377}
  @section @code{GNAT.Exception_Actions} (@code{g-excact.ads})
  
  
*************** for specific exceptions, or when any exc
*** 24601,24607 ****
  can be used for instance to force a core dump to ease debugging.
  
  @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{377}@anchor{gnat_rm/the_gnat_library id68}@anchor{378}
  @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads})
  
  
--- 24626,24632 ----
  can be used for instance to force a core dump to ease debugging.
  
  @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id68}@anchor{379}
  @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads})
  
  
*************** Provides an interface allowing to contro
*** 24615,24621 ****
  occurrences.
  
  @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id69}@anchor{37a}
  @section @code{GNAT.Exceptions} (@code{g-except.ads})
  
  
--- 24640,24646 ----
  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{37a}@anchor{gnat_rm/the_gnat_library id69}@anchor{37b}
  @section @code{GNAT.Exceptions} (@code{g-except.ads})
  
  
*************** predefined exceptions, and for example a
*** 24636,24642 ****
  @code{Constraint_Error} with a message from a pure subprogram.
  
  @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id70}@anchor{37c}
  @section @code{GNAT.Expect} (@code{g-expect.ads})
  
  
--- 24661,24667 ----
  @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{37c}@anchor{gnat_rm/the_gnat_library id70}@anchor{37d}
  @section @code{GNAT.Expect} (@code{g-expect.ads})
  
  
*************** It is not implemented for cross ports, a
*** 24652,24658 ****
  implemented for VxWorks or LynxOS.
  
  @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id71}@anchor{37e}
  @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
  
  
--- 24677,24683 ----
  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{37e}@anchor{gnat_rm/the_gnat_library id71}@anchor{37f}
  @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
  
  
*************** ports. It is not implemented for cross p
*** 24664,24670 ****
  in particular is not implemented for VxWorks or LynxOS.
  
  @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id72}@anchor{380}
  @section @code{GNAT.Float_Control} (@code{g-flocon.ads})
  
  
--- 24689,24695 ----
  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{380}@anchor{gnat_rm/the_gnat_library id72}@anchor{381}
  @section @code{GNAT.Float_Control} (@code{g-flocon.ads})
  
  
*************** library calls may cause this mode to be
*** 24678,24684 ****
  in this package can be used to reestablish the required mode.
  
  @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{381}@anchor{gnat_rm/the_gnat_library id73}@anchor{382}
  @section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
  
  
--- 24703,24709 ----
  in this package can be used to reestablish the required mode.
  
  @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id73}@anchor{383}
  @section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
  
  
*************** derived from Integer, Float or enumerati
*** 24693,24699 ****
  formatted string.
  
  @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{383}@anchor{gnat_rm/the_gnat_library id74}@anchor{384}
  @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads})
  
  
--- 24718,24724 ----
  formatted string.
  
  @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id74}@anchor{385}
  @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads})
  
  
*************** have a vector implementation that can be
*** 24711,24717 ****
  compiler when auto-vectorization is enabled.
  
  @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id75}@anchor{386}
  @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
  
  
--- 24736,24742 ----
  compiler when auto-vectorization is enabled.
  
  @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id75}@anchor{387}
  @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
  
  
*************** access-to-procedure values.  The algorit
*** 24725,24731 ****
  that performs approximately N*log(N) comparisons in the worst case.
  
  @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id76}@anchor{388}
  @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads})
  
  
--- 24750,24756 ----
  that performs approximately N*log(N) comparisons in the worst case.
  
  @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id76}@anchor{389}
  @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads})
  
  
*************** This differs from @code{GNAT.Heap_Sort}
*** 24741,24747 ****
  interface, but may be slightly more efficient.
  
  @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id77}@anchor{38a}
  @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
  
  
--- 24766,24772 ----
  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{38a}@anchor{gnat_rm/the_gnat_library id77}@anchor{38b}
  @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
  
  
*************** if the procedures can be inlined, at the
*** 24755,24761 ****
  multiple instantiations.
  
  @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id78}@anchor{38c}
  @section @code{GNAT.HTable} (@code{g-htable.ads})
  
  
--- 24780,24786 ----
  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{38c}@anchor{gnat_rm/the_gnat_library id78}@anchor{38d}
  @section @code{GNAT.HTable} (@code{g-htable.ads})
  
  
*************** data.  Provides two approaches, one a si
*** 24768,24774 ****
  allowing arbitrary dynamic hash tables.
  
  @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id79}@anchor{38e}
  @section @code{GNAT.IO} (@code{g-io.ads})
  
  
--- 24793,24799 ----
  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{38e}@anchor{gnat_rm/the_gnat_library id79}@anchor{38f}
  @section @code{GNAT.IO} (@code{g-io.ads})
  
  
*************** Standard_Input, and writing characters,
*** 24784,24790 ****
  Standard_Output or Standard_Error.
  
  @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id80}@anchor{390}
  @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
  
  
--- 24809,24815 ----
  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{390}@anchor{gnat_rm/the_gnat_library id80}@anchor{391}
  @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
  
  
*************** Provides some auxiliary functions for us
*** 24798,24804 ****
  for whether a file exists, and functions for reading a line of text.
  
  @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{391}@anchor{gnat_rm/the_gnat_library id81}@anchor{392}
  @section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
  
  
--- 24823,24829 ----
  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{392}@anchor{gnat_rm/the_gnat_library id81}@anchor{393}
  @section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
  
  
*************** Provides a general interface for using f
*** 24812,24818 ****
  providing program level synchronization.
  
  @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{393}@anchor{gnat_rm/the_gnat_library id82}@anchor{394}
  @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
  
  
--- 24837,24843 ----
  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{394}@anchor{gnat_rm/the_gnat_library id82}@anchor{395}
  @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
  
  
*************** The original implementation of @code{Ada
*** 24824,24830 ****
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{395}@anchor{gnat_rm/the_gnat_library id83}@anchor{396}
  @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
  
  
--- 24849,24855 ----
  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{396}@anchor{gnat_rm/the_gnat_library id83}@anchor{397}
  @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
  
  
*************** The original implementation of @code{Ada
*** 24836,24842 ****
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{397}@anchor{gnat_rm/the_gnat_library id84}@anchor{398}
  @section @code{GNAT.MD5} (@code{g-md5.ads})
  
  
--- 24861,24867 ----
  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{398}@anchor{gnat_rm/the_gnat_library id84}@anchor{399}
  @section @code{GNAT.MD5} (@code{g-md5.ads})
  
  
*************** the HMAC-MD5 message authentication func
*** 24849,24855 ****
  FIPS PUB 198.
  
  @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id85}@anchor{39a}
  @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
  
  
--- 24874,24880 ----
  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{39a}@anchor{gnat_rm/the_gnat_library id85}@anchor{39b}
  @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
  
  
*************** standard output or standard error files.
*** 24862,24868 ****
  output.
  
  @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id86}@anchor{39c}
  @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads})
  
  
--- 24887,24893 ----
  output.
  
  @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{39c}@anchor{gnat_rm/the_gnat_library id86}@anchor{39d}
  @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads})
  
  
*************** various logging purposes, including dupl
*** 24876,24882 ****
  Ada 83 implementation dependent extensions.
  
  @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id87}@anchor{39e}
  @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads})
  
  
--- 24901,24907 ----
  Ada 83 implementation dependent extensions.
  
  @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{39e}@anchor{gnat_rm/the_gnat_library id87}@anchor{39f}
  @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads})
  
  
*************** including a portable spawn procedure, an
*** 24892,24898 ****
  and error return codes.
  
  @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id88}@anchor{3a0}
  @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads})
  
  
--- 24917,24923 ----
  and error return codes.
  
  @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{3a0}@anchor{gnat_rm/the_gnat_library id88}@anchor{3a1}
  @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads})
  
  
*************** hashcode are in the same order. These ha
*** 24910,24916 ****
  convenient for use with realtime applications.
  
  @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id89}@anchor{3a2}
  @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads})
  
  
--- 24935,24941 ----
  convenient for use with realtime applications.
  
  @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{3a2}@anchor{gnat_rm/the_gnat_library id89}@anchor{3a3}
  @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads})
  
  
*************** however NOT suitable for situations requ
*** 24924,24930 ****
  randomness.
  
  @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{278}@anchor{gnat_rm/the_gnat_library id90}@anchor{3a3}
  @section @code{GNAT.Regexp} (@code{g-regexp.ads})
  
  
--- 24949,24955 ----
  randomness.
  
  @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{279}@anchor{gnat_rm/the_gnat_library id90}@anchor{3a4}
  @section @code{GNAT.Regexp} (@code{g-regexp.ads})
  
  
*************** simplest of the three pattern matching p
*** 24940,24946 ****
  suitable for ‘file globbing’ applications.
  
  @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{3a4}@anchor{gnat_rm/the_gnat_library id91}@anchor{3a5}
  @section @code{GNAT.Registry} (@code{g-regist.ads})
  
  
--- 24965,24971 ----
  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{3a5}@anchor{gnat_rm/the_gnat_library id91}@anchor{3a6}
  @section @code{GNAT.Registry} (@code{g-regist.ads})
  
  
*************** registry API, but at a lower level of ab
*** 24954,24960 ****
  package provided with the Win32Ada binding
  
  @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{3a6}@anchor{gnat_rm/the_gnat_library id92}@anchor{3a7}
  @section @code{GNAT.Regpat} (@code{g-regpat.ads})
  
  
--- 24979,24985 ----
  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{3a7}@anchor{gnat_rm/the_gnat_library id92}@anchor{3a8}
  @section @code{GNAT.Regpat} (@code{g-regpat.ads})
  
  
*************** from the original V7 style regular expre
*** 24969,24975 ****
  Henry Spencer (and binary compatible with this C library).
  
  @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3a8}@anchor{gnat_rm/the_gnat_library id93}@anchor{3a9}
  @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
  
  
--- 24994,25000 ----
  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{3a9}@anchor{gnat_rm/the_gnat_library id93}@anchor{3aa}
  @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
  
  
*************** full content to be processed is not load
*** 24983,24989 ****
  this interface usable for large files or socket streams.
  
  @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3aa}@anchor{gnat_rm/the_gnat_library id94}@anchor{3ab}
  @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads})
  
  
--- 25008,25014 ----
  this interface usable for large files or socket streams.
  
  @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id94}@anchor{3ac}
  @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads})
  
  
*************** Provides the capability to query the hig
*** 24995,25001 ****
  secondary stack.
  
  @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3ac}@anchor{gnat_rm/the_gnat_library id95}@anchor{3ad}
  @section @code{GNAT.Semaphores} (@code{g-semaph.ads})
  
  
--- 25020,25026 ----
  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{3ad}@anchor{gnat_rm/the_gnat_library id95}@anchor{3ae}
  @section @code{GNAT.Semaphores} (@code{g-semaph.ads})
  
  
*************** secondary stack.
*** 25006,25012 ****
  Provides classic counting and binary semaphores using protected types.
  
  @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3ae}@anchor{gnat_rm/the_gnat_library id96}@anchor{3af}
  @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads})
  
  
--- 25031,25037 ----
  Provides classic counting and binary semaphores using protected types.
  
  @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id96}@anchor{3b0}
  @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads})
  
  
*************** Provides a simple interface to send and
*** 25018,25024 ****
  port. This is only supported on GNU/Linux and Windows.
  
  @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3b0}@anchor{gnat_rm/the_gnat_library id97}@anchor{3b1}
  @section @code{GNAT.SHA1} (@code{g-sha1.ads})
  
  
--- 25043,25049 ----
  port. This is only supported on GNU/Linux and Windows.
  
  @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id97}@anchor{3b2}
  @section @code{GNAT.SHA1} (@code{g-sha1.ads})
  
  
*************** and RFC 3174, and the HMAC-SHA1 message
*** 25031,25037 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3b2}@anchor{gnat_rm/the_gnat_library id98}@anchor{3b3}
  @section @code{GNAT.SHA224} (@code{g-sha224.ads})
  
  
--- 25056,25062 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id98}@anchor{3b4}
  @section @code{GNAT.SHA224} (@code{g-sha224.ads})
  
  
*************** and the HMAC-SHA224 message authenticati
*** 25044,25050 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3b4}@anchor{gnat_rm/the_gnat_library id99}@anchor{3b5}
  @section @code{GNAT.SHA256} (@code{g-sha256.ads})
  
  
--- 25069,25075 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id99}@anchor{3b6}
  @section @code{GNAT.SHA256} (@code{g-sha256.ads})
  
  
*************** and the HMAC-SHA256 message authenticati
*** 25057,25063 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3b6}@anchor{gnat_rm/the_gnat_library id100}@anchor{3b7}
  @section @code{GNAT.SHA384} (@code{g-sha384.ads})
  
  
--- 25082,25088 ----
  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{3b7}@anchor{gnat_rm/the_gnat_library id100}@anchor{3b8}
  @section @code{GNAT.SHA384} (@code{g-sha384.ads})
  
  
*************** and the HMAC-SHA384 message authenticati
*** 25070,25076 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3b8}@anchor{gnat_rm/the_gnat_library id101}@anchor{3b9}
  @section @code{GNAT.SHA512} (@code{g-sha512.ads})
  
  
--- 25095,25101 ----
  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{3b9}@anchor{gnat_rm/the_gnat_library id101}@anchor{3ba}
  @section @code{GNAT.SHA512} (@code{g-sha512.ads})
  
  
*************** and the HMAC-SHA512 message authenticati
*** 25083,25089 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3ba}@anchor{gnat_rm/the_gnat_library id102}@anchor{3bb}
  @section @code{GNAT.Signals} (@code{g-signal.ads})
  
  
--- 25108,25114 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id102}@anchor{3bc}
  @section @code{GNAT.Signals} (@code{g-signal.ads})
  
  
*************** Provides the ability to manipulate the b
*** 25095,25101 ****
  targets.
  
  @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3bc}@anchor{gnat_rm/the_gnat_library id103}@anchor{3bd}
  @section @code{GNAT.Sockets} (@code{g-socket.ads})
  
  
--- 25120,25126 ----
  targets.
  
  @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id103}@anchor{3be}
  @section @code{GNAT.Sockets} (@code{g-socket.ads})
  
  
*************** on all native GNAT ports and on VxWorks
*** 25110,25116 ****
  the LynxOS cross port.
  
  @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3be}@anchor{gnat_rm/the_gnat_library id104}@anchor{3bf}
  @section @code{GNAT.Source_Info} (@code{g-souinf.ads})
  
  
--- 25135,25141 ----
  the LynxOS cross port.
  
  @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id104}@anchor{3c0}
  @section @code{GNAT.Source_Info} (@code{g-souinf.ads})
  
  
*************** subprograms yielding the date and time o
*** 25124,25130 ****
  C macros @code{__DATE__} and @code{__TIME__})
  
  @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3c0}@anchor{gnat_rm/the_gnat_library id105}@anchor{3c1}
  @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads})
  
  
--- 25149,25155 ----
  C macros @code{__DATE__} and @code{__TIME__})
  
  @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id105}@anchor{3c2}
  @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads})
  
  
*************** Provides a function for determining whet
*** 25136,25142 ****
  near misspelling of another string.
  
  @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3c2}@anchor{gnat_rm/the_gnat_library id106}@anchor{3c3}
  @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads})
  
  
--- 25161,25167 ----
  near misspelling of another string.
  
  @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id106}@anchor{3c4}
  @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads})
  
  
*************** determining whether one string is a plau
*** 25149,25155 ****
  string.
  
  @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3c4}@anchor{gnat_rm/the_gnat_library id107}@anchor{3c5}
  @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads})
  
  
--- 25174,25180 ----
  string.
  
  @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id107}@anchor{3c6}
  @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads})
  
  
*************** the SNOBOL4 dynamic pattern construction
*** 25165,25171 ****
  efficient algorithm developed by Robert Dewar for the SPITBOL system.
  
  @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3c6}@anchor{gnat_rm/the_gnat_library id108}@anchor{3c7}
  @section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
  
  
--- 25190,25196 ----
  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{3c7}@anchor{gnat_rm/the_gnat_library id108}@anchor{3c8}
  @section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
  
  
*************** useful for constructing arbitrary mappin
*** 25180,25186 ****
  the SNOBOL4 TABLE function.
  
  @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3c8}@anchor{gnat_rm/the_gnat_library id109}@anchor{3c9}
  @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads})
  
  
--- 25205,25211 ----
  the SNOBOL4 TABLE function.
  
  @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id109}@anchor{3ca}
  @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads})
  
  
*************** for type @code{Standard.Boolean}, giving
*** 25195,25201 ****
  string values.
  
  @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3ca}@anchor{gnat_rm/the_gnat_library id110}@anchor{3cb}
  @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads})
  
  
--- 25220,25226 ----
  string values.
  
  @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id110}@anchor{3cc}
  @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads})
  
  
*************** for type @code{Standard.Integer}, giving
*** 25212,25218 ****
  from string to integer values.
  
  @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3cc}@anchor{gnat_rm/the_gnat_library id111}@anchor{3cd}
  @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
  
  
--- 25237,25243 ----
  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{3cd}@anchor{gnat_rm/the_gnat_library id111}@anchor{3ce}
  @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
  
  
*************** a variable length string type, giving an
*** 25229,25235 ****
  maps from strings to strings.
  
  @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3ce}@anchor{gnat_rm/the_gnat_library id112}@anchor{3cf}
  @section @code{GNAT.SSE} (@code{g-sse.ads})
  
  
--- 25254,25260 ----
  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{3cf}@anchor{gnat_rm/the_gnat_library id112}@anchor{3d0}
  @section @code{GNAT.SSE} (@code{g-sse.ads})
  
  
*************** targets.  It exposes vector component ty
*** 25241,25247 ****
  introduction to the binding contents and use.
  
  @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3d0}@anchor{gnat_rm/the_gnat_library id113}@anchor{3d1}
  @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads})
  
  
--- 25266,25272 ----
  introduction to the binding contents and use.
  
  @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id113}@anchor{3d2}
  @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads})
  
  
*************** introduction to the binding contents and
*** 25250,25256 ****
  SSE vector types for use with SSE related intrinsics.
  
  @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3d2}@anchor{gnat_rm/the_gnat_library id114}@anchor{3d3}
  @section @code{GNAT.String_Hash} (@code{g-strhas.ads})
  
  
--- 25275,25281 ----
  SSE vector types for use with SSE related intrinsics.
  
  @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id114}@anchor{3d4}
  @section @code{GNAT.String_Hash} (@code{g-strhas.ads})
  
  
*************** Provides a generic hash function working
*** 25262,25268 ****
  type and the hash result type are parameters.
  
  @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3d4}@anchor{gnat_rm/the_gnat_library id115}@anchor{3d5}
  @section @code{GNAT.Strings} (@code{g-string.ads})
  
  
--- 25287,25293 ----
  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{3d5}@anchor{gnat_rm/the_gnat_library id115}@anchor{3d6}
  @section @code{GNAT.Strings} (@code{g-string.ads})
  
  
*************** Common String access types and related s
*** 25272,25278 ****
  defines a string access and an array of string access types.
  
  @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3d6}@anchor{gnat_rm/the_gnat_library id116}@anchor{3d7}
  @section @code{GNAT.String_Split} (@code{g-strspl.ads})
  
  
--- 25297,25303 ----
  defines a string access and an array of string access types.
  
  @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id116}@anchor{3d8}
  @section @code{GNAT.String_Split} (@code{g-strspl.ads})
  
  
*************** to the resulting slices. This package is
*** 25286,25292 ****
  @code{GNAT.Array_Split}.
  
  @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3d8}@anchor{gnat_rm/the_gnat_library id117}@anchor{3d9}
  @section @code{GNAT.Table} (@code{g-table.ads})
  
  
--- 25311,25317 ----
  @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{3d9}@anchor{gnat_rm/the_gnat_library id117}@anchor{3da}
  @section @code{GNAT.Table} (@code{g-table.ads})
  
  
*************** while an instantiation of @code{GNAT.Dyn
*** 25306,25312 ****
  used to define dynamic instances of the table.
  
  @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3da}@anchor{gnat_rm/the_gnat_library id118}@anchor{3db}
  @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
  
  
--- 25331,25337 ----
  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{3db}@anchor{gnat_rm/the_gnat_library id118}@anchor{3dc}
  @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
  
  
*************** single global task lock.  Appropriate fo
*** 25323,25329 ****
  between tasks is very rarely expected.
  
  @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3dc}@anchor{gnat_rm/the_gnat_library id119}@anchor{3dd}
  @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
  
  
--- 25348,25354 ----
  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{3dd}@anchor{gnat_rm/the_gnat_library id119}@anchor{3de}
  @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
  
  
*************** represents the current date and time in
*** 25338,25344 ****
  routine with minimal code and there are no dependencies on any other unit.
  
  @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3de}@anchor{gnat_rm/the_gnat_library id120}@anchor{3df}
  @section @code{GNAT.Threads} (@code{g-thread.ads})
  
  
--- 25363,25369 ----
  routine with minimal code and there are no dependencies on any other unit.
  
  @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id120}@anchor{3e0}
  @section @code{GNAT.Threads} (@code{g-thread.ads})
  
  
*************** further details if your program has thre
*** 25355,25361 ****
  environment which then accesses Ada code.
  
  @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3e0}@anchor{gnat_rm/the_gnat_library id121}@anchor{3e1}
  @section @code{GNAT.Traceback} (@code{g-traceb.ads})
  
  
--- 25380,25386 ----
  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{3e1}@anchor{gnat_rm/the_gnat_library id121}@anchor{3e2}
  @section @code{GNAT.Traceback} (@code{g-traceb.ads})
  
  
*************** Provides a facility for obtaining non-sy
*** 25367,25373 ****
  in various debugging situations.
  
  @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3e2}@anchor{gnat_rm/the_gnat_library id122}@anchor{3e3}
  @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
  
  
--- 25392,25398 ----
  in various debugging situations.
  
  @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id122}@anchor{3e4}
  @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
  
  
*************** in various debugging situations.
*** 25376,25382 ****
  @geindex Trace back facilities
  
  @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3e4}@anchor{gnat_rm/the_gnat_library id123}@anchor{3e5}
  @section @code{GNAT.UTF_32} (@code{g-utf_32.ads})
  
  
--- 25401,25407 ----
  @geindex Trace back facilities
  
  @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id123}@anchor{3e6}
  @section @code{GNAT.UTF_32} (@code{g-utf_32.ads})
  
  
*************** lower case to upper case fold routine co
*** 25395,25401 ****
  the Ada 2005 rules for identifier equivalence.
  
  @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3e6}@anchor{gnat_rm/the_gnat_library id124}@anchor{3e7}
  @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads})
  
  
--- 25420,25426 ----
  the Ada 2005 rules for identifier equivalence.
  
  @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id124}@anchor{3e8}
  @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads})
  
  
*************** near misspelling of another wide wide st
*** 25408,25414 ****
  using the UTF_32_String type defined in System.Wch_Cnv.
  
  @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e8}@anchor{gnat_rm/the_gnat_library id125}@anchor{3e9}
  @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads})
  
  
--- 25433,25439 ----
  using the UTF_32_String type defined in System.Wch_Cnv.
  
  @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e9}@anchor{gnat_rm/the_gnat_library id125}@anchor{3ea}
  @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads})
  
  
*************** Provides a function for determining whet
*** 25420,25426 ****
  near misspelling of another wide string.
  
  @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3ea}@anchor{gnat_rm/the_gnat_library id126}@anchor{3eb}
  @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
  
  
--- 25445,25451 ----
  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{3eb}@anchor{gnat_rm/the_gnat_library id126}@anchor{3ec}
  @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
  
  
*************** to the resulting slices. This package is
*** 25434,25440 ****
  @code{GNAT.Array_Split}.
  
  @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3ec}@anchor{gnat_rm/the_gnat_library id127}@anchor{3ed}
  @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads})
  
  
--- 25459,25465 ----
  @code{GNAT.Array_Split}.
  
  @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3ed}@anchor{gnat_rm/the_gnat_library id127}@anchor{3ee}
  @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads})
  
  
*************** Provides a function for determining whet
*** 25446,25452 ****
  near misspelling of another wide wide string.
  
  @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3ee}@anchor{gnat_rm/the_gnat_library id128}@anchor{3ef}
  @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads})
  
  
--- 25471,25477 ----
  near misspelling of another wide wide string.
  
  @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3ef}@anchor{gnat_rm/the_gnat_library id128}@anchor{3f0}
  @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads})
  
  
*************** to the resulting slices. This package is
*** 25460,25466 ****
  @code{GNAT.Array_Split}.
  
  @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id129}@anchor{3f0}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3f1}
  @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
  
  
--- 25485,25491 ----
  @code{GNAT.Array_Split}.
  
  @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id129}@anchor{3f1}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3f2}
  @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
  
  
*************** for use with either manually or automati
*** 25471,25477 ****
  to C libraries.
  
  @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id130}@anchor{3f2}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3f3}
  @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads})
  
  
--- 25496,25502 ----
  to C libraries.
  
  @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id130}@anchor{3f3}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3f4}
  @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads})
  
  
*************** This package is a binding for the most c
*** 25484,25490 ****
  on C streams.
  
  @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id131}@anchor{3f4}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3f5}
  @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
  
  
--- 25509,25515 ----
  on C streams.
  
  @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id131}@anchor{3f5}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3f6}
  @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
  
  
*************** from a packed decimal format compatible
*** 25499,25505 ****
  mainframes.
  
  @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id132}@anchor{3f6}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3f7}
  @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
  
  
--- 25524,25530 ----
  mainframes.
  
  @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id132}@anchor{3f7}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3f8}
  @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
  
  
*************** mainframes.
*** 25513,25519 ****
  This package provides a limited binding to the VxWorks API.
  
  @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id133}@anchor{3f8}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3f9}
  @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
  
  
--- 25538,25544 ----
  This package provides a limited binding to the VxWorks API.
  
  @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id133}@anchor{3f9}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3fa}
  @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
  
  
*************** function codes. A particular use of this
*** 25536,25542 ****
  to enable the use of Get_Immediate under VxWorks.
  
  @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id134}@anchor{3fa}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3fb}
  @section @code{System.Address_Image} (@code{s-addima.ads})
  
  
--- 25561,25567 ----
  to enable the use of Get_Immediate under VxWorks.
  
  @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id134}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3fc}
  @section @code{System.Address_Image} (@code{s-addima.ads})
  
  
*************** function that gives an (implementation d
*** 25552,25558 ****
  string which identifies an address.
  
  @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id135}@anchor{3fc}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3fd}
  @section @code{System.Assertions} (@code{s-assert.ads})
  
  
--- 25577,25583 ----
  string which identifies an address.
  
  @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id135}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3fe}
  @section @code{System.Assertions} (@code{s-assert.ads})
  
  
*************** by an run-time assertion failure, as wel
*** 25568,25574 ****
  is used internally to raise this assertion.
  
  @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id136}@anchor{3fe}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3ff}
  @section @code{System.Atomic_Counters} (@code{s-atocou.ads})
  
  
--- 25593,25599 ----
  is used internally to raise this assertion.
  
  @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id136}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{400}
  @section @code{System.Atomic_Counters} (@code{s-atocou.ads})
  
  
*************** on most targets, including all Alpha, AA
*** 25582,25588 ****
  x86, and x86_64 platforms.
  
  @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id137}@anchor{400}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{401}
  @section @code{System.Memory} (@code{s-memory.ads})
  
  
--- 25607,25613 ----
  x86, and x86_64 platforms.
  
  @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id137}@anchor{401}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{402}
  @section @code{System.Memory} (@code{s-memory.ads})
  
  
*************** calls to this unit may be made for low l
*** 25600,25606 ****
  example see the body of @code{GNAT.Tables}).
  
  @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id138}@anchor{402}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{403}
  @section @code{System.Multiprocessors} (@code{s-multip.ads})
  
  
--- 25625,25631 ----
  example see the body of @code{GNAT.Tables}).
  
  @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id138}@anchor{403}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{404}
  @section @code{System.Multiprocessors} (@code{s-multip.ads})
  
  
*************** in GNAT we also make it available in Ada
*** 25613,25619 ****
  technically an implementation-defined addition).
  
  @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id139}@anchor{404}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{405}
  @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
  
  
--- 25638,25644 ----
  technically an implementation-defined addition).
  
  @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id139}@anchor{405}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{406}
  @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
  
  
*************** in GNAT we also make it available in Ada
*** 25626,25632 ****
  technically an implementation-defined addition).
  
  @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id140}@anchor{406}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{407}
  @section @code{System.Partition_Interface} (@code{s-parint.ads})
  
  
--- 25651,25657 ----
  technically an implementation-defined addition).
  
  @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id140}@anchor{407}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{408}
  @section @code{System.Partition_Interface} (@code{s-parint.ads})
  
  
*************** technically an implementation-defined ad
*** 25636,25645 ****
  
  This package provides facilities for partition interfacing.  It
  is used primarily in a distribution context when using Annex E
! with @code{GLADE}.
  
  @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id141}@anchor{408}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{409}
  @section @code{System.Pool_Global} (@code{s-pooglo.ads})
  
  
--- 25661,25670 ----
  
  This package provides facilities for partition interfacing.  It
  is used primarily in a distribution context when using Annex E
! with @code{PolyORB}.
  
  @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id141}@anchor{409}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{40a}
  @section @code{System.Pool_Global} (@code{s-pooglo.ads})
  
  
*************** declared. It uses malloc/free to allocat
*** 25656,25662 ****
  do any automatic reclamation.
  
  @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id142}@anchor{40a}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{40b}
  @section @code{System.Pool_Local} (@code{s-pooloc.ads})
  
  
--- 25681,25687 ----
  do any automatic reclamation.
  
  @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id142}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{40c}
  @section @code{System.Pool_Local} (@code{s-pooloc.ads})
  
  
*************** a list of allocated blocks, so that all
*** 25673,25679 ****
  be freed automatically when the pool is finalized.
  
  @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id143}@anchor{40c}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{40d}
  @section @code{System.Restrictions} (@code{s-restri.ads})
  
  
--- 25698,25704 ----
  be freed automatically when the pool is finalized.
  
  @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id143}@anchor{40d}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{40e}
  @section @code{System.Restrictions} (@code{s-restri.ads})
  
  
*************** compiler determined information on which
*** 25689,25695 ****
  are violated by one or more packages in the partition.
  
  @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id144}@anchor{40e}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{40f}
  @section @code{System.Rident} (@code{s-rident.ads})
  
  
--- 25714,25720 ----
  are violated by one or more packages in the partition.
  
  @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id144}@anchor{40f}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{410}
  @section @code{System.Rident} (@code{s-rident.ads})
  
  
*************** since the necessary instantiation is inc
*** 25705,25711 ****
  package System.Restrictions.
  
  @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id145}@anchor{410}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{411}
  @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads})
  
  
--- 25730,25736 ----
  package System.Restrictions.
  
  @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id145}@anchor{411}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{412}
  @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads})
  
  
*************** stream attributes are applied to string
*** 25721,25727 ****
  package can be used directly by application programs.
  
  @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id146}@anchor{412}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{413}
  @section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
  
  
--- 25746,25752 ----
  package can be used directly by application programs.
  
  @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id146}@anchor{413}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{414}
  @section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
  
  
*************** also contains some related definitions f
*** 25734,25740 ****
  used by the compiler in connection with packed array types.
  
  @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id147}@anchor{414}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{415}
  @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
  
  
--- 25759,25765 ----
  used by the compiler in connection with packed array types.
  
  @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id147}@anchor{415}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{416}
  @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
  
  
*************** encoding method.  It uses definitions in
*** 25755,25761 ****
  package @code{System.Wch_Con}.
  
  @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id148}@anchor{416}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{417}
  @section @code{System.Wch_Con} (@code{s-wchcon.ads})
  
  
--- 25780,25786 ----
  package @code{System.Wch_Con}.
  
  @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id148}@anchor{417}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{418}
  @section @code{System.Wch_Con} (@code{s-wchcon.ads})
  
  
*************** in ordinary strings.  These definitions
*** 25767,25773 ****
  the package @code{System.Wch_Cnv}.
  
  @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top
! @anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{418}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{419}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}
  @chapter Interfacing to Other Languages
  
  
--- 25792,25798 ----
  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{419}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{41a}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}
  @chapter Interfacing to Other Languages
  
  
*************** provided.
*** 25785,25791 ****
  @end menu
  
  @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{41a}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{41b}
  @section Interfacing to C
  
  
--- 25810,25816 ----
  @end menu
  
  @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{41b}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{41c}
  @section Interfacing to C
  
  
*************** of the length corresponding to the @code
*** 25925,25931 ****
  @end itemize
  
  @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{41c}
  @section Interfacing to C++
  
  
--- 25950,25956 ----
  @end itemize
  
  @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{41d}
  @section Interfacing to C++
  
  
*************** builds an opaque @code{Type_Info_Ptr} to
*** 26142,26148 ****
  object at a given @code{System.Address}.
  
  @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{41d}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{41e}
  @section Interfacing to COBOL
  
  
--- 26167,26173 ----
  object at a given @code{System.Address}.
  
  @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{41e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{41f}
  @section Interfacing to COBOL
  
  
*************** Interfacing to COBOL is achieved as desc
*** 26150,26156 ****
  the Ada Reference Manual.
  
  @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{41f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{420}
  @section Interfacing to Fortran
  
  
--- 26175,26181 ----
  the Ada Reference Manual.
  
  @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{420}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{421}
  @section Interfacing to Fortran
  
  
*************** multi-dimensional array causes the array
*** 26160,26166 ****
  order as required for convenient interface to Fortran.
  
  @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{421}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{422}
  @section Interfacing to non-GNAT Ada code
  
  
--- 26185,26191 ----
  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{422}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{423}
  @section Interfacing to non-GNAT Ada code
  
  
*************** values or simple record types without va
*** 26184,26196 ****
  types with fixed bounds.
  
  @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top
! @anchor{gnat_rm/specialized_needs_annexes doc}@anchor{423}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{424}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}
  @chapter Specialized Needs Annexes
  
  
! Ada 95, Ada 2005, and Ada 2012 define a number of Specialized Needs Annexes, which are not
! required in all implementations.  However, as described in this chapter,
! GNAT implements all of these annexes:
  
  
  @table @asis
--- 26209,26219 ----
  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{424}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{425}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}
  @chapter Specialized Needs Annexes
  
  
! Ada 95, Ada 2005, Ada 2012, and Ada 2022 define a number of Specialized Needs Annexes, which are not required in all implementations.  However, as described in this chapter, GNAT implements all of these annexes:
  
  
  @table @asis
*************** The Real-Time Systems Annex is fully imp
*** 26206,26214 ****
  @item `Distributed Systems (Annex E)'
  
  Stub generation is fully implemented in the GNAT compiler.  In addition,
! a complete compatible PCS is available as part of the GLADE system,
! a separate product.  When the two
! products are used in conjunction, this annex is fully implemented.
  
  @item `Information Systems (Annex F)'
  
--- 26229,26236 ----
  @item `Distributed Systems (Annex E)'
  
  Stub generation is fully implemented in the GNAT compiler.  In addition,
! a complete compatible PCS is available as part of @code{PolyORB},
! a separate product. Note, that PolyORB is a deprecated product and will be eventually replaced with other technologies such as @code{RTI}.
  
  @item `Information Systems (Annex F)'
  
*************** The Safety and Security Annex (termed th
*** 26224,26231 ****
  in Ada 2005) is fully implemented.
  @end table
  
! @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top
! @anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{425}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}
  @chapter Implementation of Specific Ada Features
  
  
--- 26246,26253 ----
  in Ada 2005) is fully implemented.
  @end table
  
! @node Implementation of Specific Ada Features,Implementation of Ada 2022 Features,Specialized Needs Annexes,Top
! @anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}
  @chapter Implementation of Specific Ada Features
  
  
*************** facilities.
*** 26244,26250 ****
  @end menu
  
  @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{180}
  @section Machine Code Insertions
  
  
--- 26266,26272 ----
  @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{428}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{181}
  @section Machine Code Insertions
  
  
*************** according to normal visibility rules. In
*** 26412,26418 ****
  qualification is required.
  
  @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{429}
  @section GNAT Implementation of Tasking
  
  
--- 26434,26440 ----
  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{429}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{42a}
  @section GNAT Implementation of Tasking
  
  
*************** to compliance with the Real-Time Systems
*** 26428,26434 ****
  @end menu
  
  @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{42b}
  @subsection Mapping Ada Tasks onto the Underlying Kernel Threads
  
  
--- 26450,26456 ----
  @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{42b}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{42c}
  @subsection Mapping Ada Tasks onto the Underlying Kernel Threads
  
  
*************** support this functionality when the pare
*** 26497,26503 ****
  @geindex Forking a new process
  
  @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{42d}
  @subsection Ensuring Compliance with the Real-Time Annex
  
  
--- 26519,26525 ----
  @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{42d}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{42e}
  @subsection Ensuring Compliance with the Real-Time Annex
  
  
*************** placed at the end.
*** 26548,26554 ****
  @c Support_for_Locking_Policies
  
  @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{42e}
  @subsection Support for Locking Policies
  
  
--- 26570,26576 ----
  @c Support_for_Locking_Policies
  
  @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{42f}
  @subsection Support for Locking Policies
  
  
*************** then ceiling locking is used.
*** 26582,26588 ****
  Otherwise, the @code{Ceiling_Locking} policy is ignored.
  
  @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{42f}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{430}
  @section GNAT Implementation of Shared Passive Packages
  
  
--- 26604,26610 ----
  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{430}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{431}
  @section GNAT Implementation of Shared Passive Packages
  
  
*************** This is used to provide the required loc
*** 26680,26686 ****
  semantics for proper protected object synchronization.
  
  @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{431}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{432}
  @section Code Generation for Array Aggregates
  
  
--- 26702,26708 ----
  semantics for proper protected object synchronization.
  
  @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{433}
  @section Code Generation for Array Aggregates
  
  
*************** component values and static subtypes als
*** 26711,26717 ****
  @end menu
  
  @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{433}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{434}
  @subsection Static constant aggregates with static bounds
  
  
--- 26733,26739 ----
  @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{434}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{435}
  @subsection Static constant aggregates with static bounds
  
  
*************** Zero2: constant two_dim := (others => (o
*** 26758,26764 ****
  @end example
  
  @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{435}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{436}
  @subsection Constant aggregates with unconstrained nominal types
  
  
--- 26780,26786 ----
  @end example
  
  @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{437}
  @subsection Constant aggregates with unconstrained nominal types
  
  
*************** Cr_Unc : constant One_Unc := (12,24,36);
*** 26773,26779 ****
  @end example
  
  @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{437}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{438}
  @subsection Aggregates with static bounds
  
  
--- 26795,26801 ----
  @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{438}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{439}
  @subsection Aggregates with static bounds
  
  
*************** end loop;
*** 26801,26807 ****
  @end example
  
  @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{439}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{43a}
  @subsection Aggregates with nonstatic bounds
  
  
--- 26823,26829 ----
  @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{43a}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{43b}
  @subsection Aggregates with nonstatic bounds
  
  
*************** have to be applied to sub-arrays individ
*** 26812,26818 ****
  compatible subtypes.
  
  @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{43b}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{43c}
  @subsection Aggregates in assignment statements
  
  
--- 26834,26840 ----
  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{43c}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{43d}
  @subsection Aggregates in assignment statements
  
  
*************** a temporary (created either by the front
*** 26854,26860 ****
  that temporary will be copied onto the target.
  
  @node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{43d}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{43e}
  @section The Size of Discriminated Records with Default Discriminants
  
  
--- 26876,26882 ----
  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{43e}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{43f}
  @section The Size of Discriminated Records with Default Discriminants
  
  
*************** say) must be consistent, so it is impera
*** 26934,26940 ****
  remain invariant.
  
  @node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{43f}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{440}
  @section Image Values For Nonscalar Types
  
  
--- 26956,26962 ----
  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{440}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{441}
  @section Image Values For Nonscalar Types
  
  
*************** control of image text is required for so
*** 26954,26960 ****
  explicitly specified.
  
  @node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{441}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{442}
  @section Strict Conformance to the Ada Reference Manual
  
  
--- 26976,26982 ----
  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{442}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{443}
  @section Strict Conformance to the Ada Reference Manual
  
  
*************** machines that are not fully compliant wi
*** 26980,27010 ****
  behavior (although at the cost of a significant performance penalty), so
  infinite and NaN values are properly generated.
  
! @node Implementation of Ada 2012 Features,GNAT language extensions,Implementation of Specific Ada Features,Top
! @anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{443}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{444}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}
! @chapter Implementation of Ada 2012 Features
  
  
! @geindex Ada 2012 implementation status
  
! @geindex -gnat12 option (gcc)
  
! @geindex pragma Ada_2012
  
! @geindex configuration pragma Ada_2012
  
! @geindex Ada_2012 configuration pragma
  
! This chapter contains a complete list of Ada 2012 features that have been
! implemented.
! Generally, these features are only
! available if the `-gnat12' (Ada 2012 features enabled) option is set,
! which is the default behavior,
! or if the configuration pragma @code{Ada_2012} is used.
  
! However, new pragmas, attributes, and restrictions are
! unconditionally available, since the Ada 95 standard allows the addition of
! new pragmas, attributes, and restrictions (there are exceptions, which are
  documented in the individual descriptions), and also certain packages
  were made available in earlier versions of Ada.
  
--- 27002,27026 ----
  behavior (although at the cost of a significant performance penalty), so
  infinite and NaN values are properly generated.
  
! @node Implementation of Ada 2022 Features,GNAT language extensions,Implementation of Specific Ada Features,Top
! @anchor{gnat_rm/implementation_of_ada_2022_features doc}@anchor{444}@anchor{gnat_rm/implementation_of_ada_2022_features id1}@anchor{445}@anchor{gnat_rm/implementation_of_ada_2022_features implementation-of-ada-2022-features}@anchor{14}
! @chapter Implementation of Ada 2022 Features
  
  
! @geindex Ada 2022 implementation status
  
! @geindex -gnat22 option (gcc)
  
! @geindex pragma Ada_2022
  
! @geindex configuration pragma Ada_2022
  
! @geindex Ada_2022 configuration pragma
  
! This chapter contains a complete list of Ada 2022 features that have been
! implemented. Generally, these features are only available if the `-gnat22' (Ada 2022 features enabled) option is set, or if the configuration pragma @code{Ada_2022} is used.
  
! However, new pragmas, attributes, and restrictions are unconditionally available, since the Ada standard allows the addition of new pragmas, attributes, and restrictions (there are exceptions, which are
  documented in the individual descriptions), and also certain packages
  were made available in earlier versions of Ada.
  
*************** implemented the feature, or implemented
*** 27016,29153 ****
  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
! @indicateurl{http://www.ada-auth.org/ai05-summary.html}.
  
! @geindex AI-0002 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0002 Export C with unconstrained arrays (0000-00-00)'
  
! The compiler is not required to support exporting an Ada subprogram with
! convention C if there are parameters or a return type of an unconstrained
! array type (such as @code{String}). GNAT allows such declarations but
! generates warnings. It is possible, but complicated, to write the
! corresponding C code and certainly such code would be specific to GNAT and
! non-portable.
  
! RM References:  B.01 (17)   B.03 (62)   B.03 (71.1/2)
  @end itemize
  
! @geindex AI-0003 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0003 Qualified expressions as names (2010-07-11)'
  
! In Ada 2012, a qualified expression is considered to be syntactically a name,
! meaning that constructs such as @code{A'(F(X)).B} are now legal. This is
! useful in disambiguating some cases of overloading.
  
! RM References:  3.03 (11)   3.03 (21)   4.01 (2)   4.04 (7)   4.07 (3)
! 5.04 (7)
  @end itemize
  
! @geindex AI-0007 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0007 Stream read and private scalar types (0000-00-00)'
  
! The RM as written appeared to limit the possibilities of declaring read
! attribute procedures for private scalar types. This limitation was not
! intended, and has never been enforced by GNAT.
  
! RM References:  13.13.02 (50/2)   13.13.02 (51/2)
  @end itemize
  
! @geindex AI-0008 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0008 General access to constrained objects (0000-00-00)'
  
! The wording in the RM implied that if you have a general access to a
! constrained object, it could be used to modify the discriminants. This was
! obviously not intended. @code{Constraint_Error} should be raised, and GNAT
! has always done so in this situation.
  
! RM References:  3.03 (23)   3.10.02 (26/2)   4.01 (9)   6.04.01 (17)   8.05.01 (5/2)
  @end itemize
  
! @geindex AI-0009 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0009 Pragma Independent[_Components] (2010-07-23)'
  
! This AI introduces the new pragmas @code{Independent} and
! @code{Independent_Components},
! which control guaranteeing independence of access to objects and components.
! The AI also requires independence not unaffected by confirming rep clauses.
  
! RM References:  9.10 (1)   13.01 (15/1)   13.02 (9)   13.03 (13)   C.06 (2)
! C.06 (4)   C.06 (6)   C.06 (9)   C.06 (13)   C.06 (14)
  @end itemize
  
! @geindex AI-0012 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0012 Pack/Component_Size for aliased/atomic (2010-07-15)'
  
! It is now illegal to give an inappropriate component size or a pragma
! @code{Pack} that attempts to change the component size in the case of atomic
! or aliased components. Previously GNAT ignored such an attempt with a
! warning.
  
! RM References:  13.02 (6.1/2)   13.02 (7)   C.06 (10)   C.06 (11)   C.06 (21)
  @end itemize
  
! @geindex AI-0015 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0015 Constant return objects (0000-00-00)'
  
! The return object declared in an `extended_return_statement' may be
! declared constant. This was always intended, and GNAT has always allowed it.
  
! RM References:  6.05 (2.1/2)   3.03 (10/2)   3.03 (21)   6.05 (5/2)
! 6.05 (5.7/2)
  @end itemize
  
! @geindex AI-0017 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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.
  
! RM References:  13.14 (3/1)
  @end itemize
  
! @geindex AI-0019 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0019 Freezing of primitives for tagged types (0000-00-00)'
  
! The RM suggests that primitive subprograms of a specific tagged type are
! frozen when the tagged type is frozen. This would be an incompatible change
! and is not intended. GNAT has never attempted this kind of freezing and its
! behavior is consistent with the recommendation of this AI.
  
! RM References:  13.14 (2)   13.14 (3/1)   13.14 (8.1/1)   13.14 (10)   13.14 (14)   13.14 (15.1/2)
  @end itemize
  
! @geindex AI-0026 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0026 Missing rules for Unchecked_Union (2010-07-07)'
  
! Record representation clauses concerning Unchecked_Union types cannot mention
! the discriminant of the type. The type of a component declared in the variant
! part of an Unchecked_Union cannot be controlled, have controlled components,
! nor have protected or task parts. If an Unchecked_Union type is declared
! within the body of a generic unit or its descendants, then the type of a
! component declared in the variant part cannot be a formal private type or a
! formal private extension declared within the same generic unit.
  
! RM References:  7.06 (9.4/2)   B.03.03 (9/2)   B.03.03 (10/2)
  @end itemize
  
! @geindex AI-0030 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0030 Requeue on synchronized interfaces (2010-07-19)'
  
! Requeue is permitted to a protected, synchronized or task interface primitive
! providing it is known that the overriding operation is an entry. Otherwise
! the requeue statement has the same effect as a procedure call. Use of pragma
! @code{Implemented} provides a way to impose a static requirement on the
! overriding operation by adhering to one of the implementation kinds: entry,
! protected procedure or any of the above.
  
! RM References:  9.05 (9)   9.05.04 (2)   9.05.04 (3)   9.05.04 (5)
! 9.05.04 (6)   9.05.04 (7)   9.05.04 (12)
  @end itemize
  
! @geindex AI-0031 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0031 Add From parameter to Find_Token (2010-07-25)'
  
! A new version of @code{Find_Token} is added to all relevant string packages,
! with an extra parameter @code{From}. Instead of starting at the first
! character of the string, the search for a matching Token starts at the
! character indexed by the value of @code{From}.
! These procedures are available in all versions of Ada
! but if used in versions earlier than Ada 2012 they will generate a warning
! that an Ada 2012 subprogram is being used.
  
! RM References:  A.04.03 (16)   A.04.03 (67)   A.04.03 (68/1)   A.04.04 (51)
! A.04.05 (46)
  @end itemize
  
! @geindex AI-0032 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0032 Extended return for class-wide functions (0000-00-00)'
  
! If a function returns a class-wide type, the object of an extended return
! statement can be declared with a specific type that is covered by the class-
! wide type. This has been implemented in GNAT since the introduction of
! extended returns. Note AI-0103 complements this AI by imposing matching
! rules for constrained return types.
  
! RM References:  6.05 (5.2/2)   6.05 (5.3/2)   6.05 (5.6/2)   6.05 (5.8/2)
! 6.05 (8/2)
  @end itemize
  
! @geindex AI-0033 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0033 Attach/Interrupt_Handler in generic (2010-07-24)'
  
! Neither of these two pragmas may appear within a generic template, because
! the generic might be instantiated at other than the library level.
  
! RM References:  13.11.02 (16)   C.03.01 (7/2)   C.03.01 (8/2)
  @end itemize
  
! @geindex AI-0034 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0034 Categorization of limited views (0000-00-00)'
  
! The RM makes certain limited with clauses illegal because of categorization
! considerations, when the corresponding normal with would be legal. This is
! not intended, and GNAT has always implemented the recommended behavior.
  
! RM References:  10.02.01 (11/1)   10.02.01 (17/2)
  @end itemize
  
! @geindex AI-0035 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0035 Inconsistencies with Pure units (0000-00-00)'
  
! This AI remedies some inconsistencies in the legality rules for Pure units.
! Derived access types are legal in a pure unit (on the assumption that the
! rule for a zero storage pool size has been enforced on the ancestor type).
! The rules are enforced in generic instances and in subunits. GNAT has always
! implemented the recommended behavior.
  
! RM References:  10.02.01 (15.1/2)   10.02.01 (15.4/2)   10.02.01 (15.5/2)   10.02.01 (17/2)
  @end itemize
  
! @geindex AI-0037 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0037 Out-of-range box associations in aggregate (0000-00-00)'
  
! This AI confirms that an association of the form @code{Indx => <>} in an
! array aggregate must raise @code{Constraint_Error} if @code{Indx}
! is out of range. The RM specified a range check on other associations, but
! not when the value of the association was defaulted. GNAT has always inserted
! a constraint check on the index value.
  
! RM References:  4.03.03 (29)
  @end itemize
  
! @geindex AI-0038 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0038 Minor errors in Text_IO (0000-00-00)'
  
! These are minor errors in the description on three points. The intent on
! all these points has always been clear, and GNAT has always implemented the
! correct intended semantics.
  
! RM References:  A.10.05 (37)   A.10.07 (8/1)   A.10.07 (10)   A.10.07 (12)   A.10.08 (10)   A.10.08 (24)
  @end itemize
  
! @geindex AI-0039 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0039 Stream attributes cannot be dynamic (0000-00-00)'
  
! The RM permitted the use of dynamic expressions (such as @code{ptr.all})
! for stream attributes, but these were never useful and are now illegal. GNAT
! has always regarded such expressions as illegal.
  
! RM References:  13.03 (4)   13.03 (6)   13.13.02 (38/2)
  @end itemize
  
! @geindex AI-0040 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0040 Limited with clauses on descendant (0000-00-00)'
  
! This AI confirms that a limited with clause in a child unit cannot name
! an ancestor of the unit. This has always been checked in GNAT.
  
! RM References:  10.01.02 (20/2)
  @end itemize
  
! @geindex AI-0042 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0042 Overriding versus implemented-by (0000-00-00)'
  
! This AI fixes a wording gap in the RM. An operation of a synchronized
! interface can be implemented by a protected or task entry, but the abstract
! operation is not being overridden in the usual sense, and it must be stated
! separately that this implementation is legal. This has always been the case
! in GNAT.
  
! RM References:  9.01 (9.2/2)   9.04 (11.1/2)
  @end itemize
  
! @geindex AI-0043 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0043 Rules about raising exceptions (0000-00-00)'
  
! This AI covers various omissions in the RM regarding the raising of
! exceptions. GNAT has always implemented the intended semantics.
  
! RM References:  11.04.01 (10.1/2)   11 (2)
  @end itemize
  
! @geindex AI-0044 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0044 Restrictions on container instantiations (0000-00-00)'
  
! This AI places restrictions on allowed instantiations of generic containers.
! These restrictions are not checked by the compiler, so there is nothing to
! change in the implementation. This affects only the RM documentation.
  
! RM References:  A.18 (4/2)   A.18.02 (231/2)   A.18.03 (145/2)   A.18.06 (56/2)   A.18.08 (66/2)   A.18.09 (79/2)   A.18.26 (5/2)   A.18.26 (9/2)
  @end itemize
  
! @geindex AI-0046 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0046 Null exclusion match for full conformance (2010-07-17)'
  
! For full conformance, in the case of access parameters, the null exclusion
! must match (either both or neither must have @code{not null}).
  
! RM References:  6.03.02 (18)
  @end itemize
  
! @geindex AI-0050 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0050 Raising Constraint_Error early for function call (0000-00-00)'
  
! The implementation permissions for raising @code{Constraint_Error} early on a function call
! when it was clear an exception would be raised were over-permissive and allowed
! mishandling of discriminants in some cases. GNAT did
! not take advantage of these incorrect permissions in any case.
  
! RM References:  6.05 (24/2)
  @end itemize
  
! @geindex AI-0056 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0056 Index on null string returns zero (0000-00-00)'
  
! The wording in the Ada 2005 RM implied an incompatible handling of the
! @code{Index} functions, resulting in raising an exception instead of
! returning zero in some situations.
! This was not intended and has been corrected.
! GNAT always returned zero, and is thus consistent with this AI.
  
! RM References:  A.04.03 (56.2/2)   A.04.03 (58.5/2)
  @end itemize
  
! @geindex AI-0058 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0058 Abnormal completion of an extended return (0000-00-00)'
  
! The RM had some incorrect wording implying wrong treatment of abnormal
! completion in an extended return. GNAT has always implemented the intended
! correct semantics as described by this AI.
  
! RM References:  6.05 (22/2)
  @end itemize
  
! @geindex AI-0060 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0060 Extended definition of remote access types (0000-00-00)'
  
! This AI extends the definition of remote access types to include access
! to limited, synchronized, protected or task class-wide interface types.
! GNAT already implemented this extension.
  
! RM References:  A (4)   E.02.02 (9/1)   E.02.02 (9.2/1)   E.02.02 (14/2)   E.02.02 (18)
  @end itemize
  
! @geindex AI-0062 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0062 Null exclusions and deferred constants (0000-00-00)'
  
! A full constant may have a null exclusion even if its associated deferred
! constant does not. GNAT has always allowed this.
  
! RM References:  7.04 (6/2)   7.04 (7.1/2)
  @end itemize
  
! @geindex AI-0064 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0064 Redundant finalization rule (0000-00-00)'
  
! This is an editorial change only. The intended behavior is already checked
! by an existing ACATS test, which GNAT has always executed correctly.
  
! RM References:  7.06.01 (17.1/1)
  @end itemize
  
! @geindex AI-0065 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0065 Remote access types and external streaming (0000-00-00)'
  
! This AI clarifies the fact that all remote access types support external
! streaming. This fixes an obvious oversight in the definition of the
! language, and GNAT always implemented the intended correct rules.
  
! RM References:  13.13.02 (52/2)
  @end itemize
  
! @geindex AI-0070 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0070 Elaboration of interface types (0000-00-00)'
  
! This is an editorial change only, there are no testable consequences short of
! checking for the absence of generated code for an interface declaration.
  
! RM References:  3.09.04 (18/2)
  @end itemize
  
! @geindex AI-0072 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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
! this notion of task signalling.
  
! RM References:  9.10 (6.1/1)
  @end itemize
  
! @geindex AI-0073 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0073 Functions returning abstract types (2010-07-10)'
  
! This AI covers a number of issues regarding returning abstract types. In
! particular generic functions cannot have abstract result types or access
! result types designated an abstract type. There are some other cases which
! are detailed in the AI. Note that this binding interpretation has not been
! retrofitted to operate before Ada 2012 mode, since it caused a significant
! number of regressions.
  
! RM References:  3.09.03 (8)   3.09.03 (10)   6.05 (8/2)
  @end itemize
  
! @geindex AI-0076 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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)
  @end itemize
  
! @geindex AI-0077 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0077 Limited withs and scope of declarations (0000-00-00)'
  
! This AI clarifies that a declaration does not include a context clause,
! and confirms that it is illegal to have a context in which both a limited
! and a nonlimited view of a package are accessible. Such double visibility
! was always rejected by GNAT.
  
! RM References:  10.01.02 (12/2)   10.01.02 (21/2)   10.01.02 (22/2)
  @end itemize
  
! @geindex AI-0078 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0078 Relax Unchecked_Conversion alignment rules (0000-00-00)'
  
! In Ada 2012, compilers are required to support unchecked conversion where the
! target alignment is a multiple of the source alignment. GNAT always supported
! this case (and indeed all cases of differing alignments, doing copies where
! required if the alignment was reduced).
  
! RM References:  13.09 (7)
  @end itemize
  
! @geindex AI-0079 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0079 Allow other_format characters in source (2010-07-10)'
  
! Wide characters in the unicode category `other_format' are now allowed in
! source programs between tokens, but not within a token such as an identifier.
  
! RM References:  2.01 (4/2)   2.02 (7)
  @end itemize
  
! @geindex AI-0080 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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)
  @end itemize
  
! @geindex AI-0087 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0087 Actual for formal nonlimited derived type (2010-07-15)'
  
! The actual for a formal nonlimited derived type cannot be limited. In
! particular, a formal derived type that extends a limited interface but which
! is not explicitly limited cannot be instantiated with a limited type.
  
! RM References:  7.05 (5/2)   12.05.01 (5.1/2)
  @end itemize
  
! @geindex AI-0088 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0088 The value of exponentiation (0000-00-00)'
  
! This AI clarifies the equivalence rule given for the dynamic semantics of
! exponentiation: the value of the operation can be obtained by repeated
! multiplication, but the operation can be implemented otherwise (for example
! using the familiar divide-by-two-and-square algorithm, even if this is less
! accurate), and does not imply repeated reads of a volatile base.
  
! RM References:  4.05.06 (11)
  @end itemize
  
! @geindex AI-0091 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0091 Do not allow other_format in identifiers (0000-00-00)'
  
! Wide characters in the unicode category `other_format' are not permitted
! within  an identifier, since this can be a security problem. The error
! message for this case has been improved to be more specific, but GNAT has
! never allowed such characters to appear in identifiers.
  
! RM References:  2.03 (3.1/2)   2.03 (4/2)   2.03 (5/2)   2.03 (5.1/2)   2.03 (5.2/2)   2.03 (5.3/2)   2.09 (2/2)
  @end itemize
  
! @geindex AI-0093 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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
  
! @geindex AI-0095 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0095 Address of intrinsic subprograms (0000-00-00)'
  
! The prefix of @code{'Address} cannot statically denote a subprogram with
! convention @code{Intrinsic}. The use of the @code{Address} attribute raises
! @code{Program_Error} if the prefix denotes a subprogram with convention
! @code{Intrinsic}.
  
! RM References:  13.03 (11/1)
  @end itemize
  
! @geindex AI-0096 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0096 Deriving from formal private types (2010-07-20)'
  
! In general it is illegal for a type derived from a formal limited type to be
! nonlimited.  This AI makes an exception to this rule: derivation is legal
! if it appears in the private part of the generic, and the formal type is not
! tagged. If the type is tagged, the legality check must be applied to the
! private part of the package.
  
! RM References:  3.04 (5.1/2)   6.02 (7)
  @end itemize
  
! @geindex AI-0097 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0097 Treatment of abstract null extension (2010-07-19)'
  
! The RM as written implied that in some cases it was possible to create an
! object of an abstract type, by having an abstract extension inherit a non-
! abstract constructor from its parent type. This mistake has been corrected
! in GNAT and in the RM, and this construct is now illegal.
  
! RM References:  3.09.03 (4/2)
  @end itemize
  
! @geindex AI-0098 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0098 Anonymous subprogram access restrictions (0000-00-00)'
  
! An unintentional omission in the RM implied some inconsistent restrictions on
! the use of anonymous access to subprogram values. These restrictions were not
! intentional, and have never been enforced by GNAT.
  
! RM References:  3.10.01 (6)   3.10.01 (9.2/2)
  @end itemize
  
! @geindex AI-0099 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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
  
! @geindex AI-0100 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0100 Placement of pragmas  (2010-07-01)'
  
! This AI is an earlier version of AI-163. It simplifies the rules
! for legal placement of pragmas. In the case of lists that allow pragmas, if
! the list may have no elements, then the list may consist solely of pragmas.
  
! RM References:  2.08 (7)
  @end itemize
  
! @geindex AI-0102 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0102 Some implicit conversions are illegal (0000-00-00)'
  
! It is illegal to assign an anonymous access constant to an anonymous access
! variable. The RM did not have a clear rule to prevent this, but GNAT has
! always generated an error for this usage.
  
! RM References:  3.07 (16)   3.07.01 (9)   6.04.01 (6)   8.06 (27/2)
  @end itemize
  
! @geindex AI-0103 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0103 Static matching for extended return (2010-07-23)'
  
! If the return subtype of a function is an elementary type or a constrained
! type, the subtype indication in an extended return statement must match
! statically this return subtype.
  
! RM References:  6.05 (5.2/2)
  @end itemize
  
! @geindex AI-0104 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0104 Null exclusion and uninitialized allocator (2010-07-15)'
  
! The assignment @code{Ptr := new not null Some_Ptr;} will raise
! @code{Constraint_Error} because the default value of the allocated object is
! `null'. This useless construct is illegal in Ada 2012.
  
! RM References:  4.08 (2)
  @end itemize
  
! @geindex AI-0106 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0106 No representation pragmas on generic formals (0000-00-00)'
  
! The RM appeared to allow representation pragmas on generic formal parameters,
! but this was not intended, and GNAT has never permitted this usage.
  
! RM References:  13.01 (9.1/1)
  @end itemize
  
! @geindex AI-0108 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0108 Limited incomplete view and discriminants (0000-00-00)'
  
! This AI confirms that an incomplete type from a limited view does not have
! discriminants. This has always been the case in GNAT.
  
! RM References:  10.01.01 (12.3/2)
  @end itemize
  
! @geindex AI-0109 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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.13.02 (34/2)
  @end itemize
  
! @geindex AI-0112 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0112 Detection of duplicate pragmas (2010-07-24)'
  
! This AI concerns giving names to various representation aspects, but the
! practical effect is simply to make the use of duplicate
! @code{Atomic[_Components]},
! @code{Volatile[_Components]}, and
! @code{Independent[_Components]} pragmas illegal, and GNAT
! now performs this required check.
  
! RM References:  13.01 (8)
  @end itemize
  
! @geindex AI-0114 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0114 Classification of letters (0000-00-00)'
  
! The code points 170 (@code{FEMININE ORDINAL INDICATOR}),
! 181 (@code{MICRO SIGN}), and
! 186 (@code{MASCULINE ORDINAL INDICATOR}) are technically considered
! lower case letters by Unicode.
! However, they are not allowed in identifiers, and they
! return @code{False} to @code{Ada.Characters.Handling.Is_Letter/Is_Lower}.
! This behavior is consistent with that defined in Ada 95.
  
! RM References:  A.03.02 (59)   A.04.06 (7)
  @end itemize
  
! @geindex AI-0116 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0116 Alignment of class-wide objects (0000-00-00)'
  
! This AI requires that the alignment of a class-wide object be no greater
! than the alignment of any type in the class. GNAT has always followed this
! recommendation.
  
! RM References:  13.03 (29)   13.11 (16)
  @end itemize
  
! @geindex AI-0118 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0118 The association of parameter associations (0000-00-00)'
  
! This AI clarifies the rules for named associations in subprogram calls and
! generic instantiations. The rules have been in place since Ada 83.
  
! RM References:  6.04.01 (2)   12.03 (9)
  @end itemize
  
! @geindex AI-0120 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0120 Constant instance of protected object (0000-00-00)'
  
! This is an RM editorial change only. The section that lists objects that are
! constant failed to include the current instance of a protected object
! within a protected function. This has always been treated as a constant
! in GNAT.
  
! RM References:  3.03 (21)
  @end itemize
  
! @geindex AI-0122 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0122 Private with and children of generics (0000-00-00)'
  
! This AI clarifies the visibility of private children of generic units within
! instantiations of a parent. GNAT has always handled this correctly.
  
! RM References:  10.01.02 (12/2)
  @end itemize
  
! @geindex AI-0123 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0123 Composability of equality (2010-04-13)'
  
! Equality of untagged record composes, so that the predefined equality for a
! composite type that includes a component of some untagged record type
! @code{R} uses the equality operation of @code{R} (which may be user-defined
! or predefined). This makes the behavior of untagged records identical to that
! of tagged types in this respect.
  
! This change is an incompatibility with previous versions of Ada, but it
! corrects a non-uniformity that was often a source of confusion. Analysis of
! a large number of industrial programs indicates that in those rare cases
! where a composite type had an untagged record component with a user-defined
! equality, either there was no use of the composite equality, or else the code
! expected the same composability as for tagged types, and thus had a bug that
! would be fixed by this change.
  
! RM References:  4.05.02 (9.7/2)   4.05.02 (14)   4.05.02 (15)   4.05.02 (24)
! 8.05.04 (8)
  @end itemize
  
! @geindex AI-0125 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0125 Nonoverridable operations of an ancestor (2010-09-28)'
  
! In Ada 2012, the declaration of a primitive operation of a type extension
! or private extension can also override an inherited primitive that is not
! visible at the point of this declaration.
  
! RM References:  7.03.01 (6)   8.03 (23)   8.03.01 (5/2)   8.03.01 (6/2)
  @end itemize
  
! @geindex AI-0126 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0126 Dispatching with no declared operation (0000-00-00)'
  
! This AI clarifies dispatching rules, and simply confirms that dispatching
! executes the operation of the parent type when there is no explicitly or
! implicitly declared operation for the descendant type. This has always been
! the case in all versions of GNAT.
  
! RM References:  3.09.02 (20/2)   3.09.02 (20.1/2)   3.09.02 (20.2/2)
  @end itemize
  
! @geindex AI-0127 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0127 Adding Locale Capabilities (2010-09-29)'
  
! This package provides an interface for identifying the current locale.
  
! RM References:  A.19    A.19.01    A.19.02    A.19.03    A.19.05    A.19.06
! A.19.07    A.19.08    A.19.09    A.19.10    A.19.11    A.19.12    A.19.13
  @end itemize
  
! @geindex AI-0128 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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.02.03 (6)   6.06 (6)
  @end itemize
  
! @geindex AI-0129 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0129 Limited views and incomplete types (0000-00-00)'
  
! This AI clarifies the description of limited views: a limited view of a
! package includes only one view of a type that has an incomplete declaration
! and a full declaration (there is no possible ambiguity in a client package).
! This AI also fixes an omission: a nested package in the private part has no
! limited view. GNAT always implemented this correctly.
  
! RM References:  10.01.01 (12.2/2)   10.01.01 (12.3/2)
  @end itemize
  
! @geindex AI-0132 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0132 Placement of library unit pragmas (0000-00-00)'
  
! This AI fills a gap in the description of library unit pragmas. The pragma
! clearly must apply to a library unit, even if it does not carry the name
! of the enclosing unit. GNAT has always enforced the required check.
  
! RM References:  10.01.05 (7)
  @end itemize
  
! @geindex AI-0134 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0134 Profiles must match for full conformance (0000-00-00)'
  
! For full conformance, the profiles of anonymous-access-to-subprogram
! parameters must match. GNAT has always enforced this rule.
  
! RM References:  6.03.01 (18)
  @end itemize
  
! @geindex AI-0137 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0137 String encoding package (2010-03-25)'
  
! The packages @code{Ada.Strings.UTF_Encoding}, together with its child
! packages, @code{Conversions}, @code{Strings}, @code{Wide_Strings},
! and @code{Wide_Wide_Strings} have been
! implemented. These packages (whose documentation can be found in the spec
! files @code{a-stuten.ads}, @code{a-suenco.ads}, @code{a-suenst.ads},
! @code{a-suewst.ads}, @code{a-suezst.ads}) allow encoding and decoding of
! @code{String}, @code{Wide_String}, and @code{Wide_Wide_String}
! values using UTF coding schemes (including UTF-8, UTF-16LE, UTF-16BE, and
! UTF-16), as well as conversions between the different UTF encodings. With
! the exception of @code{Wide_Wide_Strings}, these packages are available in
! Ada 95 and Ada 2005 mode as well as Ada 2012 mode.
! The @code{Wide_Wide_Strings} package
! is available in Ada 2005 mode as well as Ada 2012 mode (but not in Ada 95
! mode since it uses @code{Wide_Wide_Character}).
  
! RM References:  A.04.11
  @end itemize
  
! @geindex AI-0139-2 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0139-2 Syntactic sugar for iterators (2010-09-29)'
  
! The new syntax for iterating over arrays and containers is now implemented.
! Iteration over containers is for now limited to read-only iterators. Only
! default iterators are supported, with the syntax: @code{for Elem of C}.
  
! RM References:  5.05
  @end itemize
  
! @geindex AI-0146 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0146 Type invariants (2009-09-21)'
  
! Type invariants may be specified for private types using the aspect notation.
! Aspect @code{Type_Invariant} may be specified for any private type,
! @code{Type_Invariant'Class} can
! only be specified for tagged types, and is inherited by any descendent of the
! tagged types. The invariant is a boolean expression that is tested for being
! true in the following situations: conversions to the private type, object
! declarations for the private type that are default initialized, and
! [`in'] `out'
! parameters and returned result on return from any primitive operation for
! the type that is visible to a client.
! GNAT defines the synonyms @code{Invariant} for @code{Type_Invariant} and
! @code{Invariant'Class} for @code{Type_Invariant'Class}.
  
! RM References:  13.03.03 (00)
  @end itemize
  
! @geindex AI-0147 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0147 Conditional expressions (2009-03-29)'
  
! Conditional expressions are permitted. The form of such an expression is:
  
! @example
! (if expr then expr @{elsif expr then expr@} [else expr])
! @end example
  
! The parentheses can be omitted in contexts where parentheses are present
! anyway, such as subprogram arguments and pragma arguments. If the `else'
! clause is omitted, `else' `True' is assumed;
! thus @code{(if A then B)} is a way to conveniently represent
! `(A implies B)' in standard logic.
  
! RM References:  4.03.03 (15)   4.04 (1)   4.04 (7)   4.05.07 (0)   4.07 (2)
! 4.07 (3)   4.09 (12)   4.09 (33)   5.03 (3)   5.03 (4)   7.05 (2.1/2)
  @end itemize
  
! @geindex AI-0152 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0152 Restriction No_Anonymous_Allocators (2010-09-08)'
  
! Restriction @code{No_Anonymous_Allocators} prevents the use of allocators
! where the type of the returned value is an anonymous access type.
  
! RM References:  H.04 (8/1)
  @end itemize
  
! @geindex AI-0157 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0157 Allocation/Deallocation from empty pool (2010-07-11)'
  
! Allocation and Deallocation from an empty storage pool (i.e. allocation or
! deallocation of a pointer for which a static storage size clause of zero
! has been given) is now illegal and is detected as such. GNAT
! previously gave a warning but not an error.
  
! RM References:  4.08 (5.3/2)   13.11.02 (4)   13.11.02 (17)
  @end itemize
  
! @geindex AI-0158 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0158 Generalizing membership tests (2010-09-16)'
  
! This AI extends the syntax of membership tests to simplify complex conditions
! that can be expressed as membership in a subset of values of any type. It
! introduces syntax for a list of expressions that may be used in loop contexts
! as well.
  
! RM References:  3.08.01 (5)   4.04 (3)   4.05.02 (3)   4.05.02 (5)   4.05.02 (27)
  @end itemize
  
! @geindex AI-0161 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0161 Restriction No_Default_Stream_Attributes (2010-09-11)'
  
! A new restriction @code{No_Default_Stream_Attributes} prevents the use of any
! of the default stream attributes for elementary types. If this restriction is
! in force, then it is necessary to provide explicit subprograms for any
! stream attributes used.
  
! RM References:  13.12.01 (4/2)   13.13.02 (40/2)   13.13.02 (52/2)
  @end itemize
  
! @geindex AI-0162 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0162 Incomplete type completed by partial view (2010-09-15)'
  
! Incomplete types are made more useful by allowing them to be completed by
! private types and private extensions.
  
! RM References:  3.10.01 (2.5/2)   3.10.01 (2.6/2)   3.10.01 (3)   3.10.01 (4/2)
  @end itemize
  
! @geindex AI-0163 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0163 Pragmas in place of null (2010-07-01)'
  
! A statement sequence may be composed entirely of pragmas. It is no longer
! necessary to add a dummy @code{null} statement to make the sequence legal.
  
! RM References:  2.08 (7)   2.08 (16)
  @end itemize
  
! @geindex AI-0171 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0171 Pragma CPU and Ravenscar Profile (2010-09-24)'
  
! A new package @code{System.Multiprocessors} is added, together with the
! definition of pragma @code{CPU} for controlling task affinity. A new no
! dependence restriction, on @code{System.Multiprocessors.Dispatching_Domains},
! is added to the Ravenscar profile.
  
! RM References:  D.13.01 (4/2)   D.16
  @end itemize
  
! @geindex AI-0173 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0173 Testing if tags represent abstract types (2010-07-03)'
  
! The function @code{Ada.Tags.Type_Is_Abstract} returns @code{True} if invoked
! with the tag of an abstract type, and @code{False} otherwise.
  
! RM References:  3.09 (7.4/2)   3.09 (12.4/2)
  @end itemize
  
! @geindex AI-0176 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0176 Quantified expressions (2010-09-29)'
  
! Both universally and existentially quantified expressions are implemented.
! They use the new syntax for iterators proposed in AI05-139-2, as well as
! the standard Ada loop syntax.
  
! RM References:  1.01.04 (12)   2.09 (2/2)   4.04 (7)   4.05.09 (0)
  @end itemize
  
! @geindex AI-0177 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0177 Parameterized expressions (2010-07-10)'
  
! The new Ada 2012 notion of parameterized expressions is implemented. The form
! is:
  
  @example
! function-specification is (expression)
  @end example
  
! This is exactly equivalent to the
! corresponding function body that returns the expression, but it can appear
! in a package spec. Note that the expression must be parenthesized.
  
! RM References:  13.11.01 (3/2)
  @end itemize
  
! @geindex AI-0178 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0178 Incomplete views are limited (0000-00-00)'
  
! This AI clarifies the role of incomplete views and plugs an omission in the
! RM. GNAT always correctly restricted the use of incomplete views and types.
  
! RM References:  7.05 (3/2)   7.05 (6/2)
  @end itemize
  
! @geindex AI-0179 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0179 Statement not required after label (2010-04-10)'
  
! It is not necessary to have a statement following a label, so a label
! can appear at the end of a statement sequence without the need for putting a
! null statement afterwards, but it is not allowable to have only labels and
! no real statements in a statement sequence.
  
! RM References:  5.01 (2)
  @end itemize
  
! @geindex AI-0181 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0181 Soft hyphen is a non-graphic character (2010-07-23)'
  
! From Ada 2005 on, soft hyphen is considered a non-graphic character, which
! means that it has a special name (@code{SOFT_HYPHEN}) in conjunction with the
! @code{Image} and @code{Value} attributes for the character types. Strictly
! speaking this is an inconsistency with Ada 95, but in practice the use of
! these attributes is so obscure that it will not cause problems.
  
! RM References:  3.05.02 (2/2)   A.01 (35/2)   A.03.03 (21)
  @end itemize
  
! @geindex AI-0182 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0182 Additional forms for' @code{Character'Value} `(0000-00-00)'
  
! This AI allows @code{Character'Value} to accept the string @code{'?'} where
! @code{?} is any character including non-graphic control characters. GNAT has
! always accepted such strings. It also allows strings such as
! @code{HEX_00000041} to be accepted, but GNAT does not take advantage of this
! permission and raises @code{Constraint_Error}, as is certainly still
! permitted.
  
! RM References:  3.05 (56/2)
  @end itemize
  
! @geindex AI-0183 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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
  
  
- @multitable {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxx} 
- @headitem
  
! Supported Aspect
  
! @tab
  
! Source
  
! @item
  
! @code{Ada_2005}
  
- @tab
  
! – GNAT
  
! @item
  
! @code{Ada_2012}
  
! @tab
  
! – GNAT
  
- @item
  
! @code{Address}
  
! @tab
  
! @item
  
! @code{Alignment}
  
! @tab
  
- @item
  
! @code{Atomic}
  
! @tab
  
! @item
  
! @code{Atomic_Components}
  
! @tab
  
- @item
  
! @code{Bit_Order}
  
! @tab
  
! @item
  
! @code{Component_Size}
  
! @tab
  
- @item
  
! @code{Contract_Cases}
  
! @tab
  
! – GNAT
  
! @item
  
! @code{Discard_Names}
  
- @tab
  
! @item
  
! @code{External_Tag}
  
! @tab
  
! @item
  
! @code{Favor_Top_Level}
  
- @tab
  
! – GNAT
  
! @item
  
! @code{Inline}
  
! @tab
  
! @item
  
- @code{Inline_Always}
  
! @tab
  
! – GNAT
  
! @item
  
! @code{Invariant}
  
! @tab
  
- – GNAT
  
! @item
  
! @code{Machine_Radix}
  
! @tab
  
! @item
  
! @code{No_Return}
  
- @tab
  
! @item
  
! @code{Object_Size}
  
! @tab
  
! – GNAT
  
! @item
  
- @code{Pack}
  
! @tab
  
! @item
  
! @code{Persistent_BSS}
  
! @tab
  
! – GNAT
  
- @item
  
! @code{Post}
  
! @tab
  
! @item
  
! @code{Pre}
  
! @tab
  
- @item
  
! @code{Predicate}
  
! @tab
  
! @item
  
! @code{Preelaborable_Initialization}
  
! @tab
  
- @item
  
! @code{Pure_Function}
  
! @tab
  
! – GNAT
  
! @item
  
! @code{Remote_Access_Type}
  
- @tab
  
! – GNAT
  
! @item
  
! @code{Shared}
  
! @tab
  
! – GNAT
  
- @item
  
! @code{Size}
  
! @tab
  
! @item
  
! @code{Storage_Pool}
  
! @tab
  
- @item
  
! @code{Storage_Size}
  
! @tab
  
! @item
  
! @code{Stream_Size}
  
! @tab
  
! @item
  
- @code{Suppress}
  
! @tab
  
! @item
  
! @code{Suppress_Debug_Info}
  
! @tab
  
! – GNAT
  
- @item
  
! @code{Test_Case}
  
! @tab
  
! – GNAT
  
! @item
  
! @code{Thread_Local_Storage}
  
- @tab
  
! – GNAT
  
! @item
  
! @code{Type_Invariant}
  
! @tab
  
! @item
  
- @code{Unchecked_Union}
  
! @tab
  
! @item
  
! @code{Universal_Aliasing}
  
! @tab
  
! – GNAT
  
- @item
  
! @code{Unmodified}
  
! @tab
  
! – GNAT
  
! @item
  
! @code{Unreferenced}
  
- @tab
  
! – GNAT
  
! @item
  
! @code{Unreferenced_Objects}
  
! @tab
  
! – GNAT
  
- @item
  
! @code{Unsuppress}
  
! @tab
  
! @item
  
! @code{Value_Size}
  
! @tab
  
- – GNAT
  
! @item
  
! @code{Volatile}
  
! @tab
  
! @item
  
! @code{Volatile_Components}
  
- @tab
  
! @item
  
! @code{Warnings}
  
! @tab
  
! – GNAT
  
! @end multitable
  
  
! @quotation
  
! Note that for aspects with an expression, e.g. @code{Size}, the expression is
! treated like a default expression (visibility is analyzed at the point of
! occurrence of the aspect, but evaluation of the expression occurs at the
! freeze point of the entity involved).
  
! RM References:  3.02.01 (3)   3.02.02 (2)   3.03.01 (2/2)   3.08 (6)
! 3.09.03 (1.1/2)   6.01 (2/2)   6.07 (2/2)   9.05.02 (2/2)   7.01 (3)   7.03
! (2)   7.03 (3)   9.01 (2/2)   9.01 (3/2)   9.04 (2/2)   9.04 (3/2)
! 9.05.02 (2/2)   11.01 (2)   12.01 (3)   12.03 (2/2)   12.04 (2/2)   12.05 (2)
! 12.06 (2.1/2)   12.06 (2.2/2)   12.07 (2)   13.01 (0.1/2)   13.03 (5/1)
! 13.03.01 (0)
! @end quotation
  
! @geindex AI-0185 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0185 Ada.Wide_[Wide_]Characters.Handling (2010-07-06)'
  
! Two new packages @code{Ada.Wide_[Wide_]Characters.Handling} provide
! classification functions for @code{Wide_Character} and
! @code{Wide_Wide_Character}, as well as providing
! case folding routines for @code{Wide_[Wide_]Character} and
! @code{Wide_[Wide_]String}.
  
! RM References:  A.03.05 (0)   A.03.06 (0)
  @end itemize
  
! @geindex AI-0188 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0188 Case expressions (2010-01-09)'
  
! Case expressions are permitted. This allows use of constructs such as:
  
  @example
! X := (case Y is when 1 => 2, when 2 => 3, when others => 31)
  @end example
  
! RM References:  4.05.07 (0)   4.05.08 (0)   4.09 (12)   4.09 (33)
  @end itemize
  
! @geindex AI-0189 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0189 No_Allocators_After_Elaboration (2010-01-23)'
  
! This AI introduces a new restriction @code{No_Allocators_After_Elaboration},
! which says that no dynamic allocation will occur once elaboration is
! completed.
! In general this requires a run-time check, which is not required, and which
! GNAT does not attempt. But the static cases of allocators in a task body or
! in the body of the main program are detected and flagged at compile or bind
! time.
  
! RM References:  D.07 (19.1/2)   H.04 (23.3/2)
  @end itemize
  
! @geindex AI-0190 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0190 pragma Default_Storage_Pool (2010-09-15)'
  
! This AI introduces a new pragma @code{Default_Storage_Pool}, which can be
! used to control storage pools globally.
! In particular, you can force every access
! type that is used for allocation (`new') to have an explicit storage pool,
! or you can declare a pool globally to be used for all access types that lack
! an explicit one.
  
! RM References:  D.07 (8)
  @end itemize
  
! @geindex AI-0193 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0193 Alignment of allocators (2010-09-16)'
  
! This AI introduces a new attribute @code{Max_Alignment_For_Allocation},
! analogous to @code{Max_Size_In_Storage_Elements}, but for alignment instead
! of size.
  
! RM References:  13.11 (16)   13.11 (21)   13.11.01 (0)   13.11.01 (1)
! 13.11.01 (2)   13.11.01 (3)
  @end itemize
  
! @geindex AI-0194 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0194 Value of Stream_Size attribute (0000-00-00)'
  
! The @code{Stream_Size} attribute returns the default number of bits in the
! stream representation of the given type.
! This value is not affected by the presence
! of stream subprogram attributes for the type. GNAT has always implemented
! this interpretation.
  
! RM References:  13.13.02 (1.2/2)
  @end itemize
  
! @geindex AI-0195 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0195 Invalid value handling is implementation defined (2010-07-03)'
  
! The handling of invalid values is now designated to be implementation
! defined. This is a documentation change only, requiring Annex M in the GNAT
! Reference Manual to document this handling.
! In GNAT, checks for invalid values are made
! only when necessary to avoid erroneous behavior. Operations like assignments
! which cannot cause erroneous behavior ignore the possibility of invalid
! values and do not do a check. The date given above applies only to the
! documentation change, this behavior has always been implemented by GNAT.
  
! RM References:  13.09.01 (10)
  @end itemize
  
! @geindex AI-0196 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0196 Null exclusion tests for out parameters (0000-00-00)'
  
! Null exclusion checks are not made for @code{out} parameters when
! evaluating the actual parameters. GNAT has never generated these checks.
  
! RM References:  6.04.01 (13)
  @end itemize
  
! @geindex AI-0198 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0198 Inheriting abstract operators  (0000-00-00)'
  
! This AI resolves a conflict between two rules involving inherited abstract
! operations and predefined operators. If a derived numeric type inherits
! an abstract operator, it overrides the predefined one. This interpretation
! was always the one implemented in GNAT.
  
! RM References:  3.09.03 (4/3)
  @end itemize
  
! @geindex AI-0199 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0199 Aggregate with anonymous access components (2010-07-14)'
  
! A choice list in a record aggregate can include several components of
! (distinct) anonymous access types as long as they have matching designated
! subtypes.
  
! RM References:  4.03.01 (16)
  @end itemize
  
! @geindex AI-0200 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0200 Mismatches in formal package declarations (0000-00-00)'
  
! This AI plugs a gap in the RM which appeared to allow some obviously intended
! illegal instantiations. GNAT has never allowed these instantiations.
  
! RM References:  12.07 (16)
  @end itemize
  
! @geindex AI-0201 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0201 Independence of atomic object components (2010-07-22)'
  
! If an Atomic object has a pragma @code{Pack} or a @code{Component_Size}
! attribute, then individual components may not be addressable by independent
! tasks. However, if the representation clause has no effect (is confirming),
! then independence is not compromised. Furthermore, in GNAT, specification of
! other appropriately addressable component sizes (e.g. 16 for 8-bit
! characters) also preserves independence. GNAT now gives very clear warnings
! both for the declaration of such a type, and for any assignment to its components.
  
! RM References:  9.10 (1/3)   C.06 (22/2)   C.06 (23/2)
  @end itemize
  
! @geindex AI-0203 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0203 Extended return cannot be abstract (0000-00-00)'
  
! A return_subtype_indication cannot denote an abstract subtype. GNAT has never
! permitted such usage.
  
! RM References:  3.09.03 (8/3)
  @end itemize
  
! @geindex AI-0205 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0205 Extended return declares visible name (0000-00-00)'
  
! This AI corrects a simple omission in the RM. Return objects have always
! been visible within an extended return statement.
  
! RM References:  8.03 (17)
  @end itemize
  
! @geindex AI-0206 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0206 Remote types packages and preelaborate (2010-07-24)'
  
! Remote types packages are now allowed to depend on preelaborated packages.
! This was formerly considered illegal.
  
! RM References:  E.02.02 (6)
  @end itemize
  
! @geindex AI-0207 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0207 Mode conformance and access constant (0000-00-00)'
  
! This AI confirms that access_to_constant indication must match for mode
! conformance. This was implemented in GNAT when the qualifier was originally
! introduced in Ada 2005.
  
! RM References:  6.03.01 (16/2)
  @end itemize
  
! @geindex AI-0208 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0208 Characteristics of incomplete views (0000-00-00)'
  
! The wording in the Ada 2005 RM concerning characteristics of incomplete views
! was incorrect and implied that some programs intended to be legal were now
! illegal. GNAT had never considered such programs illegal, so it has always
! implemented the intent of this AI.
  
! RM References:  3.10.01 (2.4/2)   3.10.01 (2.6/2)
  @end itemize
  
! @geindex AI-0210 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0210 Correct Timing_Events metric (0000-00-00)'
  
! This is a documentation only issue regarding wording of metric requirements,
! that does not affect the implementation of the compiler.
  
! RM References:  D.15 (24/2)
  @end itemize
  
! @geindex AI-0211 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0211 No_Relative_Delays forbids Set_Handler use (2010-07-09)'
  
! The restriction @code{No_Relative_Delays} forbids any calls to the subprogram
! @code{Ada.Real_Time.Timing_Events.Set_Handler}.
  
! RM References:  D.07 (5)   D.07 (10/2)   D.07 (10.4/2)   D.07 (10.7/2)
  @end itemize
  
! @geindex AI-0214 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0214 Defaulted discriminants for limited tagged (2010-10-01)'
  
! 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
  
! @geindex AI-0216 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0216 No_Task_Hierarchy forbids local tasks (0000-00-00)'
  
! It is clearly the intention that @code{No_Task_Hierarchy} is intended to
! forbid tasks declared locally within subprograms, or functions returning task
! objects, and that is the implementation that GNAT has always provided.
! However the language in the RM was not sufficiently clear on this point.
! Thus this is a documentation change in the RM only.
  
! RM References:  D.07 (3/3)
  @end itemize
  
! @geindex AI-0219 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `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)
  @end itemize
  
! @geindex AI-0220 (Ada 2012 feature)
  
  
  @itemize *
  
  @item 
! `AI-0220 Needed components for aggregates (0000-00-00)'
  
! This AI addresses a wording problem in the RM that appears to permit some
! complex cases of aggregates with nonstatic discriminants. GNAT has always
! implemented the intended semantics.
  
! RM References:  4.03.01 (17)
  @end itemize
  
! @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2012 Features,Top
! @anchor{gnat_rm/gnat_language_extensions doc}@anchor{445}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{446}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{447}
  @chapter GNAT language extensions
  
  
--- 27032,30428 ----
  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 2022.
  
! The section “RM references” lists all modified paragraphs in the Ada 2012 reference manual. The details of each modification as well as a complete description of the AIs may be found in
! @indicateurl{http://www.ada-auth.org/AI12-SUMMARY.HTML}.
  
! @geindex AI12-0001 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0001 Independence and Representation clauses for atomic objects (2019-11-27)'
  
! The compiler accepts packing clauses in all cases, even if they have effectively no influence on the layout. Types, where packing is essentially infeasible are, for instance atomic, aliased and by-reference types.
  
! RM references: 13.02 (6.1/2) 13.02 (7) 13.02 (8) 13.02 (9/3) C.06 (8.1/3)
! C.06 (10) C.06 (11) C.06 (21) C.06 (24)
  @end itemize
  
! @geindex AI12-0003 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0003 Specifying the standard storage pool (2020-06-25)'
  
! Allows the standard storage pool being specified with a @code{Default_Storage_Pool} pragma or aspect.
  
! RM references: 8.02 (11) 13.11.03 (1/3) 13.11.03 (3.1/3) 13.11.03 (4/3)
! 13.11.03 (4.1/3) 13.11.03 (5/3) 13.11.03 (6.2/3) 13.11.03
! (6.3/3)
  @end itemize
  
! @geindex AI12-0004 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0004 Normalization and allowed characters for identifiers (2020-06-11)'
  
! This AI clarifies that Ada identifiers containing characters which are not
! allowed in Normalization Form KC are illegal.
  
! RM references: 2.01 (4.1/3) 2.03 (4/3) A.03.02 (4/3) A.03.02 (32.5/3)
! A.03.05 (18/3) A.03.05 (51/3)
  @end itemize
  
! @geindex AI12-0020 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0020 ‘Image for all types (2020-03-30)'
  
! Put_Image prints out a human-readable representation of an object. The
! functionality in Ada2022 RM is fully implemented except the support for
! types in the @code{Remote_Types} packages.
  
! RM references: 4.10 (0) 3.05 (27.1/2) 3.05 (27.2/2) 3.05 (27.3/2) 3.05
! (27.4/2) 3.05 (27.5/2) 3.05 (27.6/2) 3.05 (27.7/2) 3.05 (28) 3.05
! (29) 3.05 (30/3) 3.05 (31) 3.05 (32) 3.05 (33/3) 3.05 (37.1/2)
! 3.05 (38) 3.05 (39) 3.05 (43/3) 3.05 (55/3) 3.05 (55.1/5) 3.05
! (55.2/4) 3.05 (55.3/4) 3.05 (55.4/4) 3.05 (59) H.04 (23) H.04 (23.8/2)
  @end itemize
  
! @geindex AI12-0022 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0022 Raise_Expressions (2013-01-27)'
  
! This feature allows you to write “raise NAME [with STRING]” in an
! expression to rise given exception. It is particularly useful in the case of
! assertions such as preconditions allowing to specify which exception a
! precondition raises if it fails.
  
! RM references: 4.04 (3/3) 11.02 (6) 11.03 (2/2) 11.03 (3) 11.03 (3.1/2)
! 11.03 (4/2) 11.04.01 (10.1/3)
  @end itemize
  
! @geindex AI12-0027 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0027 Access values should never designate unaliased components (2020-06-15)'
  
! AI12-0027 adds a requirement for a value conversion that converts from an array of unaliased components to an array of aliased components to make a copy. It defines such conversions to have a local accessibility, effectively preventing the possibility of unsafe accesses to unaliased components.
  
! RM references: 4.06 (24.17/3) 4.06 (24.21/2) 4.06 (58) 6.02 (10/3) 3.10.02 (10/3)
  @end itemize
  
! @geindex AI12-0028 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0028 Import of variadic C functions (2020-03-03)'
  
! Ada programs can now properly call variadic C functions by means of the
! conventions C_Variadic_<n>, for small integer values <n>.
  
! RM references: B.03 (1/3) B.03 (60.15/3) B.03 (75)
  @end itemize
  
! @geindex AI12-0030 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0030 Formal derived types and stream attribute availability (2020-08-21)'
  
! Corner cases involving streaming operations for formal derived limited types
! that are now defined to raise Program_Error. Before, behavior in these cases
! was undefined. Stream attribute availability is more precisely computed in cases where a derived type declaration occurs ahead of a streaming attribute specification for the parent type.
  
! RM references: 12.05.01 (21/3) 13.13.02 (49/2)
  @end itemize
  
! @geindex AI12-0031 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0031 All_Calls_Remote and indirect calls (0000-00-00)'
  
! Remote indirect calls (i.e., calls through a remote access-to-subprogram type)
! behave the same as remote direct calls.
  
! RM references: E.02.03 (19/3)
  @end itemize
  
! @geindex AI12-0032 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0032 Questions on ‘Old (2020-04-24)'
  
! AI12-0032 resolves several issues related to the ‘Old attribute. The GNAT
! compiler already implemented what the AI requires in most of those cases, but two having to do with static and dynamic checking of the accessibility level of the constant object implicitly declared for an ‘Old attribute reference were not yet implemented. Accessibility checking for these constants is now implemented as defined in the AI.
  
! RM references: 4.01.03 (9/3) 6.01.01 (22/3) 6.01.01 (26/3) 6.01.01 (35/3)
  @end itemize
  
! @geindex AI12-0033 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0033 Sets of CPUs when defining dispatching domains (0000-00-00)'
  
! The set of CPUs associated with a dispatching domain is no longer required
! to be a contiguous range of CPU values.
  
! RM references: D.16.01 (7/3) D.16.01 (9/3) D.16.01 (20/3) D.16.01 (23/3)
! D.16.01 (24/3) D.16.01 (26/3)
  @end itemize
  
! @geindex AI12-0035 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0035 Accessibility checks for indefinite elements of containers (0000-00-00)'
  
! If the element type for an instance of one of the indefinite container generics has an access discriminant, then accessibility checks (at run-time) prevent inserting a value into a container object if the value’s discriminant designates an object that is too short-lived (that is, if the designated object has an accessibility level that is deeper than that of the instance). Without this check, dangling references would be possible. GNAT handled this correctly already before this AI was issued.
  
! RM references: A.18 (5/3) A.18.11 (8/2) A.18.12 (7/2) A.18.13 (8/2)
! A.18.14 (8/2) A.18.15 (4/2) A.18.16 (4/2) A.18.17 (7/3) A.18.18
! (39/3) A.18.18 (47/3)
  @end itemize
  
! @geindex AI12-0036 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0036 The actual for an untagged formal derived type cannot be tagged (2019-10-21)'
  
! AI12-0036 is a binding interpretation that adds the following legality rule:
! The actual type for a formal derived type shall be tagged if and only if the
! formal derived type is a private extension. The check is implemented for all Ada dialects, not just Ada 2022.
  
! RM references: 12.05.01 (5.1/3)
  @end itemize
  
! @geindex AI12-0037 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0037 New types in Ada.Locales can’t be converted to/from strings (2016-09-10)'
  
! The type definitions for Language_Code and Country_Code are now using dynamic
! predicates.
  
! RM references: A.19 (4/3)
  @end itemize
  
! @geindex AI12-0039 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0039 Ambiguity in syntax for membership expression removed (0000-00-00)'
  
! An ambiguity in the syntax for membership expressions was resolved. For example, “A in B and C” can be parsed in only one way because of this AI.
  
! RM references: 4.04 (3/3) 4.04 (3.2/3) 4.05.02 (3.1/3) 4.05.02 (4) 4.05.02
! (4.1/3) 4.05.02 (27/3) 4.05.02 (27.1/3) 4.05.02 (28.1/3) 4.05.02
! (28.2/3) 4.05.02 (29/3) 4.05.02 (30/3) 4.05.02 (30.1/3) 4.05.02
! (30.2/3) 4.05.02 (30.3/3) 4.09 (11/3) 4.09 (32.6/3) 8.06 (27.1/3)
! 3.02.04 (17/3)
  @end itemize
  
! @geindex AI12-0040 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0040 Resolving the selecting_expression of a case_expression (0000-00-00)'
  
! The definition of “complete context” is corrected so that selectors of case expressions
! and of case statements are treated uniformly.
  
! RM references: 8.06 (9)
  @end itemize
  
! @geindex AI12-0041 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0041 Type_Invariant’Class for interface types (2016-12-12)'
  
! Subprogram calls within class-wide type invariant expressions get resolved
! as primitive operations instead of being dynamically dispatched.
  
! RM references: 7.03.02 (1/3) 7.03.02 (3/3)
  @end itemize
  
! @geindex AI12-0042 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0042 Type invariant checking rules (2020-06-05)'
  
! AI12-0042 adds rules for type invariants.
! Specifically, when inheriting a private dispatching operation when the ancestor operation is visible at the point of the type extension, the operation must be abstract or else overridden. In addition, for a class-wide view conversion from an object of a specific type T to which a type invariant applies, an invariant check is performed when the conversion is within the immediate scope of T.
  
! RM references: 7.03.02 (6/3) 7.03.02 (17/3) 7.03.02 (18/3) 7.03.02 (19/3)
! 7.03.02 (20/3)
  @end itemize
  
! @geindex AI12-0043 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0043 Details of the storage pool used when Storage_Size is specified (0000-00-00)'
  
! Clarify that a Storage_Size specification for an access type specifies both an upper bound and a lower bound (not just a lower bound) of the amount of storage allowed for allocated objects.
  
! RM references: 13.11 (18)
  @end itemize
  
! @geindex AI12-0044 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0044 Calling visible functions from type invariant expressions (2020-05-11)'
  
! AI05-0289-1 extends invariant checking to @cite{in} parameters. However, this makes
! it impossible to call a public function of the type from an invariant
! expression, as that public function will attempt to check the invariant,
! resulting in an infinite recursion.
  
! This AI specifies, that type-invariant checking is performed on parameters
! of mode @cite{in} upon return from procedure calls, but not of @cite{in}-mode
! parameters in functions.
! 
! RM references: 7.03.02 (19/3)
  @end itemize
  
! @geindex AI12-0045 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0045 Pre- and Postconditions are allowed on generic subprograms (2015-03-17)'
  
! The SPARK toolset now supports contracts on generic subprograms, packages and
! their respective bodies.
  
! RM references: 6.01.01 (1/3)
  @end itemize
  
! @geindex AI12-0046 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0046 Enforcing legality for anonymous access components in record aggregates (0000-00-00)'
  
! For a record aggregate of the form (X | Y => ….), any relevant legality rules are checked for both for X and Y.
  
! For example,
! 
! @example
! X : aliased constant String := ... ;
! type R is record
!   F1 : access constant String;
!   F2 : access String;
! end record;
! Obj : R := (F1 | F2 => X'Access); -- ok for F1, but illegal for F2
! @end example
! 
! RM references: 4.03.01 (16/3)
  @end itemize
  
! @geindex AI12-0047 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0047 Generalized iterators and discriminant-dependent components (0000-00-00)'
  
! Iterating over the elements of an array is subject to the same legality checks as renaming the array. For example, if an assignment to an enclosing discriminated object could cause an array object to cease to exist then we don’t allow renaming the array. So it is similarly not allowed to iterate over the elements of such an array.
  
! RM references: 5.05.02 (6/3)
  @end itemize
  
! @geindex AI12-0048 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0048 Default behavior of tasks on a multiprocessor with a specified dispatching policy (0000-00-00)'
  
! Clarify that if the user does not impose requirements about what CPUs a given task might execute on, then the implementation does not get to impose such requirements. This avoids potential problems with priority inversion.
  
! RM references: D.16.01 (30/3)
  @end itemize
  
! @geindex AI12-0049 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0049 Invariants need to be checked on the initialization of deferred constants (0000-00-00)'
  
! Invariant checking for deferred constants (and subcomponents thereof) is performed. Corrects a clear oversight in the previous RM wording.
  
! RM references: 7.03.02 (10/3)
  @end itemize
  
! @geindex AI12-0050 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0050 Conformance of quantified expressions (2016-07-22)'
  
! Compiler rejects a subprogram body when an expression for a boolean formal
! parameter includes a quantified expression, and the subprogram declaration
! contains a textual copy of the same.
  
! RM references: 6.03.01 (20) 6.03.01 (21)
  @end itemize
  
! @geindex AI12-0051 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0051 The Priority aspect can be specified when Attach_Handler is specified (0000-00-00)'
  
! Previous RM wording had two contradictory rules for determining (in some cases) the priority of a protected subprogram that is attached to an interrupt. The AI clarifies which one of the rules takes precedence.
  
! RM references: D.03 (10/3)
  @end itemize
  
! @geindex AI12-0052 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0052 Implicit objects are considered overlapping (0000-00-00)'
  
! Clarify that the rules about unsynchronized concurrent access apply as one would expect in the case of predefined routines that access Text_IO’s default input and default output files. There was no compiler changes needed to implement this.
  
! RM references: A (3/2) A.10.03 (21)
  @end itemize
  
! @geindex AI12-0054-2 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0054-2 Aspect Predicate_Failure (0000-00-00)'
  
! New aspect Predicate_Failure is defined.  A solution for the problem that a predicate like
  
! @example
! subtype Open_File is File with Dynamic_Predicate =\> Is_Open (Open_File) or else (raise File_Not_Open);
! @end example
! 
! does the wrong thing in the case of a membership test.
! 
! RM references: 3.02.04 (14/3) 3.02.04 (31/3) 3.02.04 (35/3)
  @end itemize
  
! @geindex AI12-0055 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0055 All properties of a usage profile are defined by pragmas (2020-06-09)'
  
! AI12-0055 allows the use of the No_Dynamic_CPU_Assignment restriction in pragmas Restrictions and Restrictions_Warnings.
  
! RM references: D.07 (10/3) D.13 (6/3) D.13 (8/3) D.13 (10/3)
  @end itemize
  
! @geindex AI12-0059 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0059 Object_Size attribute (2019-12-02)'
  
! AI12-0059 brings GNAT-defined attribute Object_Size to Ada standard
! and clarifies its semantics. Given that the attribute already existed in
! GNAT compiler, the feature is supported for all language versions.
  
! RM references: 4.09.01 (2/3) 13.01 (14) 13.01 (23) 13.03 (9/3) 13.03
! (50/2) 13.03 (51) 13.03 (52) 13.03 (58)
  @end itemize
  
! @geindex AI12-0061 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0061 Iterated component associations in array aggregates (2016-09-01)'
  
! Ada issue AI12-061 introduces a new construct in array aggregates allowing
! component associations to be parameterized by a loop variable, for example:
  
! @example
! Array (1 .. 10) of Integer :=
!   (for I in 1 .. 10 => I ** 2);
! type Matrix is
! array
!   (Positive range <>, Positive range <>) of Float;
! G : constant Matrix
! :=
!   (for I in 1 .. 4 =>
!       (for J in 1 .. 4 =>
!           (if I=J then
! 1.0 else 0.0))); -- Identity matrix
! @end example
! 
! The expression in such an association can also be a function that returns a
! limited type, and the range can be specified by the ‘others’ choice.
! 
! RM references: 4.03.03 (5/2) 4.03.03 (6) 4.03.03 (17/3) 4.03.03 (20)
! 4.03.03 (23.1/4) 4.03.03 (32/3) 4.03.03 (43) 3.01 (6/3) 3.03 (6)
! 3.03 (18.1/3) 3.03.01 (23/3) 5.05 (6) 8.01 (2.1/4)
  @end itemize
  
! @geindex AI12-0062 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0062 Raise exception with failing string function (0000-00-00)'
  
! Clarify that if raising exception E1 is accompanied with a String-valued
! expression whose evaluation raises exception E2, then E2 is what gets propagated.
  
! RM references: 11.03 (4/2)
  @end itemize
  
! @geindex AI12-0065 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0065 Descendants of incomplete views (0000-00-00)'
  
! This AI is a clarification of potentially confusing wording.  GNAT correctly handles the example given in AARM 7.3.1(5.b-5.d), which illustrates the topic of this AI.
  
! RM references: 7.03.01 (5.2/3)
  @end itemize
  
! @geindex AI12-0067 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0067 Accessibility level of explicitly aliased parameters of procedures and entries (0000-00-00)'
  
! The AI fixes a case where the intent was fairly obvious but the RM wording failed to mention a case (with the result that the accessibility level of an explicitly aliased parameter of a procedure or entry was undefined even though the intent was clear).
  
! RM references: 3.10.02 (7/3)
  @end itemize
  
! @geindex AI12-0068 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0068 Predicates and the current instance of a subtype (2020-05-06)'
  
! AI12-0068 is a binding interpretation that defines the current instance name in a type or subtype aspect to be a value rather than an object. This affects
! attributes whose prefix is a current instance in predicates, type invariants, and @code{Default_Initial_Condition} aspects. In particular, in the case of the @code{Constrained} attribute the value will always be True, and formerly legal attributes that require an object as their prefix (such as @code{Size}, @code{Access}, @code{Address}, etc.) are illegal when applied to a current instance in type and subtype aspects.
  
! RM references: 8.06 (17/3)
  @end itemize
  
! @geindex AI12-0069 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0069 Inconsistency in Tree container definition (0000-00-00)'
  
! The description of how iteration over a Tree container’s elements was contradictory in some cases regarding whether a cursor designating the Root node is included in the iteration. This contradiction was resolved. In the “!ACATS Test” section of the AI, it says that if an implementation were to get this wrong then almost any attempt to iterate over any tree would fail at runtime.
  
! RM references: A.18.10 (153/3) A.18.10 (155/3) A.18.10 (157/3) A.18.10 (159/3)
  @end itemize
  
! @geindex AI12-0070 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0070 9.3(2) does not work for anonymous access types (0000-00-00)'
  
! The RM contained some old wording about the master of an allocated object that only made sense for named access types. The AI clarifies the wording to clearly state the scope of validity and ensures that the paragraph does not contradict 3.10.2’s rules for anonymous access  types.
  
! RM references: 3.10.02 (13.1/3) 9.03 (2)
  @end itemize
  
! @geindex AI12-0071 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0071 Order of evaluation when multiple predicates apply (2015-08-10)'
  
! AI12-0071 specifies the semantics of multiple/inherited predicates on a
! single subtype.
  
! RM references: 3.02.04 (4/3) 3.02.04 (6/3) 3.02.04 (30/3) 3.02.04 (31/3)
! 3.02.04 (32/3) 3.02.04 (33/3) 3.02.04 (35/3) 3.05.05 (7.1/3)
! 3.05.05 (7.2/3) 3.05.05 (7.3/3) 3.08.01 (10.1/3) 3.08.01 (15/3)
! 4.05.02 (29/3) 4.05.02 (30/3) 4.06 (51/3) 4.09.01 (10/3) 5.04
! (7/3) 5.05 (9/3) 13.09.02 (3/3) 13.09.02 (12)
  @end itemize
  
! @geindex AI12-0072 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0072 Missing rules for Discard_Names aspect (0000-00-00)'
  
! Clarify that Discard_Names is an aspect, not just a pragma.
  
! RM references: C.05 (1) C.05 (5) C.05 (7/2) C.05 (8)
  @end itemize
  
! @geindex AI12-0073 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0073 Synchronous Barriers are not allowed with Ravenscar (2020-02-24)'
  
! Ada 2022 adds (as a binding interpretation) a @code{No_Dependence =>
! Ada.Synchronous_Barriers} restriction to the Ravenscar profile.
  
! RM references: D.13 (6/3)
  @end itemize
  
! @geindex AI12-0074 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0074 View conversions and out parameters passed by copy (2020-03-26)'
  
! This Ada 2022 AI makes illegal some cases of out parameters whose type has a
! @code{Default_Value} aspect.
  
! RM references: 4.06 (56) 6.04.01 (6.25/3) 6.04.01 (13.1/3)
  @end itemize
  
! @geindex AI12-0075 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0075 Static expression functions (2020-04-13)'
  
! Ada 2022 defines a new aspect @code{Static} that can be specified on expression
! functions. Such an expression function can be called in contexts requiring static expressions when the actual parameters are all static, allowing for greater abstraction in complex static expressions.
  
! RM references: 4.09 (21) 6.08 (3/4) 6.08 (5/4) 6.08 (6/4) 7.03.02 (8.2/5)
! 7.03.02 (15/4) 7.03.02 (16/4) 7.03.02 (17/4) 7.03.02 (19/4)
! 7.03.02 (20/5)
  @end itemize
  
! @geindex AI12-0076 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0076 Variable state in pure packages (0000-00-00)'
  
! Defines an obscure constant-modifying construct to be erroneous. The issue is that the current instance of a type is a variable object, so the following is legal:
  
! @example
!   type T;
!   type T_Ref (Access_To_Variable : access T) is null record;
!   type T is limited record
!      Self : T_Ref (T'Access);
!      Int : Integer;
!   end record;
! 
!   Obj : constant T := (Self => <>, Int => 123);
! begin
!   Obj.Self.Access_To_Variable.Int := 456; -- modifying a component of a constant
! @end example
! 
! In cases where constancy is really needed (e.g., for an object declared in a Pure context), such a case needs to be erroneous.
! 
! RM references: 10.02.01 (17/3) E.02.02 (17/2)
  @end itemize
  
! @geindex AI12-0077 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0077 Has_Same_Storage on objects of size zero (2020-03-30)'
  
! This binding interpretation requires the Has_Same_Storage attribute
! to return always @cite{false} for objects that have a size of zero.
  
! RM references: 13.03 (73.4/3)
  @end itemize
  
! @geindex AI12-0078 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0078 Definition of node for tree container is confusing (0000-00-00)'
  
! Clarifies the expected behavior in processing tree containers.
  
! RM references: A.18.10 (2/3) A.18.10 (3/3)
  @end itemize
  
! @geindex AI12-0081 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0081 Real-time aspects need to specify when they are evaluated (0000-00-00)'
  
! Clarify the point at which Priority and Interrupt_Priority aspect expressions are evaluated.
  
! RM references: D.01 (17/3) D.16 (9/3)
  @end itemize
  
! @geindex AI12-0084 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0084 Box expressions in array aggregates (2014-12-15)'
  
! This AI addresses an issue where compiler used to fail to initialize
! components of a multidimensional aggregates with box initialization when
! scalar components have a specified default value. The AI clarifies that
! in an array aggregate with box (i.e., @code{<>}) component values, the
! @code{Default_Component_Value} of the array type (if any) should not be ignored.
  
! RM references: 4.03.03 (23.1/2)
  @end itemize
  
! @geindex AI12-0085 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0085 Missing aspect cases for Remote_Types (0000-00-00)'
  
! A distributed systems annex (Annex E) clarification. Aspect specifications
! that are forbidden using attribute definition clause syntax are also forbidden
! using aspect_specification syntax.
  
! RM references: E.02.02 (17/2)
  @end itemize
  
! @geindex AI12-0086 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0086 Aggregates and variant parts (2019-08-14)'
  
! In Ada 2012, a discriminant value that governs an active variant part in an
! aggregate had to be static. AI12-0086 relaxes this restriction: If the subtype of the discriminant value is a static subtype all of whose values select the same variant, then the expression for the discriminant is allowed to be nonstatic.
  
! RM references: 4.03.01 (17/3) 4.03.01 (19/3)
  @end itemize
  
! @geindex AI12-0088 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0088 UTF_Encoding.Conversions and overlong characters on input (0000-00-00)'
  
! Clarify that overlong characters are acceptable on input even if we never generate them as output.
  
! RM references: A.04.11 (54/3) A.04.11 (55/3)
  @end itemize
  
! @geindex AI12-0089 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0089 Accessibility rules need to take into account that a generic function is not a (0000-00-00)'
  
! Fix cases in RM wording where the accessibility rules for a function failed to take into account the fact that a generic function is not a function. For example, a generic function with an explicitly aliased parameter should be able to return references to that parameter in the same ways that a (non-generic) function can. The previous wording did not allow that.
  
! RM references: 3.10.02 (7/3) 3.10.02 (19.2/3) 3.10.02 (19.3/3) 6.05 (4/3)
  @end itemize
  
! @geindex AI12-0093 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0093 Iterator with indefinite cursor (0000-00-00)'
  
! A clarification that confirms what GNAT is already doing.
  
! RM references: 5.05.02 (8/3) 5.05.02 (10/3)
  @end itemize
  
! @geindex AI12-0094 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0094 An access_definition should be a declarative region (0000-00-00)'
  
! Fixes wording omission in the RM, confirming that the behaviour of GNAT is
! correct.
  
! RM references: 8.03 (2) 8.03 (26/3)
  @end itemize
  
! @geindex AI12-0095 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0095 Generic formal types and constrained partial views (0000-00-00)'
  
! Deciding whether an actual parameter corresponding to an explicitly aliased formal parameter is legal depends on (among other things) whether the parameter type has a constrained partial view. The AI clarifies how this compile-time checking works in the case of a generic formal type (assume the best in the spec and recheck each instance, assume the worst in a generic body).
  
! RM references: 3.10.02 (27.2/3) 4.06 (24.16/2) 6.04.01 (6.2/3) 12.05.01 (15)
  @end itemize
  
! @geindex AI12-0096 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0096 The exception raised when a subtype conversion fails a predicate check (0000-00-00)'
  
! Clarify that the Predicate_Failure aspect works the same in a subtype conversion as in any other context.
  
! RM references: 4.06 (57/3)
  @end itemize
  
! @geindex AI12-0097 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0097 Tag of the return object of a simple return expression (0000-00-00)'
  
! Clarify wording about the tag of a function result in the case of a simple (i.e. not extended) return statement in a function with a class-wide result type.
  
! RM references: 6.05 (8/3)
  @end itemize
  
! @geindex AI12-0098 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0098 Problematic examples for ATC (0000-00-00)'
  
! The AI clarifies reference manual examples, there is no compiler impact.
  
! RM references: 9.07.04 (13)
  @end itemize
  
! @geindex AI12-0099 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0099 Wording problems with predicates (2020-05-04)'
  
! When extending a task or protected type from an ancestor interface subtype with  a predicate, a link error can occur due to the compiler failing to generate the predicate-checking function. This AI clarifies the requirement for such predicate inheritance for concurrent types.
  
! RM references: 3.02.04 (4/4) 3.02.04 (12/3) 3.02.04 (20/3)
  @end itemize
  
! @geindex AI12-0100 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0100 A qualified expression makes a predicate check (2020-02-17)'
  
! The compiler now enforces predicate checks on qualified expressions when the
! qualifying subtype imposes a predicate.
  
! RM references: 4.07 (4)
  @end itemize
  
! @geindex AI12-0101 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0101 Incompatibility of hidden untagged record equality (2019-10-31)'
  
! AI12-0101 is a binding interpretation that removes a legality rule that
! prohibited the declaration of a primitive equality function for a private type in the private part of its enclosing package (either before or after the completion of the type) when the type is completed as an untagged record type. Such declarations are now accepted in Ada 2012 and later Ada versions.
  
! As a consequence of this work, some cases where the implementation of AI05-0123 was incomplete were corrected.
! More specifically, if a user-defined equality operator is present for an untagged record type in an Ada 2012 program, that user-defined equality operator will be (correctly) executed in some difficult-to-characterize cases where the predefined component-by-component comparison was previously being (incorrectly) executed. This can arise, for example, in the case of the predefined equality operation for an enclosing composite type that has a component of the user-defined primitive equality op’s operand type.
! This correction means that the impact of this change is not limited solely to code that was previously rejected at compile time.
! 
! RM references: 4.05.02 (9.8/3)
  @end itemize
  
! @geindex AI12-0102 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0102 Stream_IO.File_Type has Preelaborable_Initialization (0000-00-00)'
  
! Modifies the declaration of one type in a predefined package. GNAT’s version of @code{Ada.Streams.Stream_IO} already had this modification (the @code{Preelaborable__Initialization} pragma).
  
! RM references: A.12.01 (5)
! @end itemize
  
! @geindex AI12-0103 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0103 Expression functions that are completions in package specifications (0000-00-00)'
! 
! Clarifies that expression functions that are completions do not cause “general”  freeze-everybody-in-sight freezing like a subprogram body.
! 
! RM references: 13.14 (3/3) 13.14 (5/3)
  @end itemize
  
! @geindex AI12-0104 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0104 Overriding an aspect is undefined (0000-00-00)'
  
! A clarification of the wording in RM, no compiler impact.
  
! RM references: 4.01.06 (4/3) 4.01.06 (17/3)
  @end itemize
  
! @geindex AI12-0105 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0105 Pre and Post are not allowed on any subprogram completion (0000-00-00)'
  
! Language-defined aspects (e.g., @code{Post}) cannot be specified as part of the completion of  a subprogram declaration. Fix a hole in the RM wording to clarify that this general rule applies even in the special cases where the completion is either an expression function or a null procedure.
  
! RM references: 13.01.01 (18/3)
  @end itemize
  
! @geindex AI12-0106 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0106 Write’Class aspect (0000-00-00)'
  
! Clarify that the syntax used in an ACATS test BDD2005 for specifying a class-wide streaming aspect is correct.
  
! RM references: 13.01.01 (28/3) 13.13.02 (38/3)
  @end itemize
  
! @geindex AI12-0107 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0107 A prefixed view of a By_Protected_Procedure interface has convention protected (2020-06-05)'
  
! A prefixed view of a subprogram with aspect Synchronization set to
! By_Protected_Procedure has convention protected.
  
! RM references: 6.03.01 (10.1/2) 6.03.01 (12) 6.03.01 (13)
  @end itemize
  
! @geindex AI12-0109 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0109 Representation of untagged derived types (2019-11-12)'
  
! Ada disallows a nonconforming specification of a type-related representation
! aspect of an untagged by-reference type. The motivation for this rule is to ensure that a parent type and a later type derived from the parent agree with respect to such aspects. AI12-0109 disallows a construct that otherwise could be used to get around this rule: an aspect specification for the parent type that occurs after the declaration of the derived type.
  
! RM references: 13.01 (10/3)
  @end itemize
  
! @geindex AI12-0110 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0110 Tampering checks are performed first (2020-04-14)'
  
! AI12-0110 requires tampering checks in the containers library to be
! performed first, before any other checks.
  
! RM references: A.18.02 (97.1/3) A.18.03 (69.1/3) A.18.04 (15.1/3) A.18.07
! (14.1/3) A.18.10 (90/3) A.18.18 (35/3)
  @end itemize
  
! @geindex AI12-0112 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0112 Contracts for container operations (0000-00-00)'
  
! A representation change replacing english descriptions of contracts for
! operations on predefined container types with pre/post-conditions. No compiler
! impact.
  
! RM references: A.18.02 (99/3) 11.04.02 (23.1/3) 11.05 (23) 11.05 (26) A
! (4) A.18 (10)
  @end itemize
  
! @geindex AI12-0114 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0114 Overlapping objects designated by access parameters are not thread-safe (0000-00-00)'
  
! There are rules saying that concurrent calls to predefined subprograms don’t interfere with each other unless actual parameters overlap. The AI clarifies that such an interference is also possible if overlapping objects are reachable via access dereferencing from actual parameters of the two calls.
  
! RM references: A (3/2)
  @end itemize
  
! @geindex AI12-0116 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0116 Private types and predicates (0000-00-00)'
  
! Clarify that the same aspect cannot be specified twice for the same type. @code{Dynamic_Predicate}, for example, can be specified on either the partial view of a type or on the completion in the private part, but not on both.
  
! RM references: 13.01 (9/3) 13.01 (9.1/3)
  @end itemize
  
! @geindex AI12-0117 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0117 Restriction No_Tasks_Unassigned_To_CPU (2020-06-12)'
  
! This AI adds a restriction No_Tasks_Unassigned_To_CPU to provide safe
! use of Ravenscar.
  
! The CPU aspect is specified for the environment task. No CPU aspect is
! specified to be statically equal to @code{Not_A_Specific_CPU}. If aspect CPU
! is specified (dynamically) to the value @code{Not_A_Specific_CPU}, then
! Program_Error is raised. If Set_CPU or @code{Delay_Until_And_Set_CPU} are called
! with the CPU parameter equal to @code{Not_A_Specific_CPU}, then @code{Program_Error} is raised.
! 
! RM references: D.07 (10.8/3)
  @end itemize
  
! @geindex AI12-0120 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0120 Legality and exceptions of generalized loop iteration (0000-00-00)'
  
! Clarify that the expansion-based definition of generalized loop iteration
! includes legality checking. If the expansion would be illegal (for example,
! because of passing a constant actual parameter in a call when the mode of
! the corresponding formal parameter is in-out), then the loop is illegal too.
  
! RM references: 5.05.02 (6.1/4) 5.05.02 (10/3) 5.05.02 (13/3)
! @end itemize
  
! @geindex AI12-0121 (Ada 2022 feature)
  
! 
! @itemize *
! 
! @item 
! `AI12-0121 Stream-oriented aspects (0000-00-00)'
! 
! Clarify that streaming-oriented aspects (e.g., Read) can be specified using
! aspect_specification syntax, not just via an attribute definition clause.
! 
! RM references: 13.13.02 (38/3)
  @end itemize
  
! @geindex AI12-0124 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0124 Add Object’Image (2017-03-24)'
  
! The corrigendum of Ada 2012 extends attribute @code{'Image following} the syntax for the GNAT @code{'Img} attribute. This AI fixes a gap in the earlier implementation, which did not recognize function calls and attributes that are functions as valid object prefixes.
  
! RM references: 3.05 (55/3)
  @end itemize
  
! @geindex AI12-0125-3 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0125-3 Add @@ as an abbreviation for the LHS of an assignment (2016-11-11)'
  
! This AI introduces the use of the character ‘@@’ as an abbreviation for the left-hand side of an assignment statement, usable anywhere within the expression on the right-hand side. To use this feature the compilation flag -gnat2022 must be specified.
  
! RM references: 5.02.01 (0) 2.02 (9) 3.03 (21.1/3) 4.01 (2/3) 8.06 (9/4)
  @end itemize
  
! @geindex AI12-0127 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0127 Partial aggregate notation (2016-10-12)'
  
! This AI describes a new constructor for aggregates, in terms of an existing record or array object, and a series of component-wise modifications of its value, given by named associations for the modified components. To use this feature the compilation flag @code{-gnat2022} must be specified.
  
! RM references: 4.03 (2) 4.03 (3/2) 4.03 (4) 4.03.01 (9) 4.03.01 (15/3)
! 4.03.01 (16/4) 4.03.01 (17/5) 4.03.01 (17.1/2) 4.03.03 (4) 4.03.03
! (14) 4.03.03 (17/5) 4.03.04 (0) 7.05 (2.6/2)
  @end itemize
  
! @geindex AI12-0128 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0128 Exact size access to parts of composite atomic objects (2019-11-24)'
  
! According to this AI, the compiler generates full access to atomic composite objects even if the access is only partial in the source code. To use this feature the compilation flag @code{-gnat2022} must be specified.
  
! RM references: C.06 (13.2/3) C.06 (19) C.06 (20) C.06 (22/2) C.06 (25/4)
  @end itemize
  
! @geindex AI12-0129 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0129 Make protected objects more protecting (2020-07-01)'
  
! A new aspect Exclusive_Functions has been added to the language to force the
! use of read/write locks on protected functions when needed.
  
! RM references: 9.05.01 (2) 9.05.01 (4) 9.05.01 (5) 9.05.01 (7) 9.05.03
! (15) 9.05.03 (23)
  @end itemize
  
! @geindex AI12-0130 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0130 All I/O packages should have Flush (2016-07-03)'
  
! The Flush routine has been added for the @code{Sequential_IO} and @code{Direct_IO} standard packages in the Ada 2012 COR.1:2016. The Flush routine here is equivalent to the one found in @code{Text_IO}. The @code{Flush} procedure synchronizes the external file with the internal file (by flushing any internal buffers) without closing the file.
  
! RM references: A.08.01 (10) A.08.02 (28/3) A.08.04 (10) A.10.03 (21)
! A.12.01 (28/2) A.12.01 (28.6/1)
  @end itemize
  
! @geindex AI12-0131 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0131 Inherited Pre’Class when unspecified on initial subprogram (0000-00-00)'
  
! If T1 is a tagged type with a primitive P that has no class-wide precondition,
! and if T2 is an extension of T1 which overrides the inherited primitive P, then that overriding P is not allowed to have a class-wide precondition. Allowing it would be ineffective except in corner cases where it would be confusing.
  
! RM references: 6.01.01 (17/3) 6.01.01 (18/3)
  @end itemize
  
! @geindex AI12-0132 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0132 Freezing of renames-as-body (2020-06-13)'
  
! This AI clarifies that a renames-as-body freezes the expression of any
! expression function that it renames.
  
! RM references: 13.14 (5/3)
  @end itemize
  
! @geindex AI12-0133 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0133 Type invariants and default initialized objects (0000-00-00)'
  
! Clarify that invariant checking for a default-initialized object is performed regardless of where the object is declared (in particular, even when the full view of the type is visible).
  
! RM references: 7.03.02 (10.3/3)
  @end itemize
  
! @geindex AI12-0135 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0135 Enumeration types should be eligible for convention C (0000-00-00)'
  
! Ada previously allowed but did not require supporting specifying convention C for an enumeration type. Now it is required that an implementation shall support it.
! 
! RM references: B.01 (14/3) B.01 (41/3) B.03 (65)
! @end itemize
! 
! @geindex AI12-0136 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0136 Language-defined packages and aspect Default_Storage_Pool (0000-00-00)'
! 
! Clarify that the effect of specifying Default_Storage_Pool for an instance of a predefined generic is implementation-defined. No compiler impact.
! 
! RM references: 13.11.03 (5/3)
! @end itemize
! 
! @geindex AI12-0137 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0137 Incomplete views and access to class-wide types (0000-00-00)'
! 
! If the designated type of an access type is incomplete when the access type is declared, then we have rules about whether we get a complete view when a value of the access type is dereferenced. Clarify that analogous rules apply if the designated type is class-wide.
! 
! RM references: 3.10.01 (2.1/2)
! @end itemize
! 
! @geindex AI12-0138 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0138 Iterators of formal derived types (2021-02-11)'
! 
! AI12-0138 specifies the legality rules for confirming specifications of
! nonoverridable aspects. This completes the legality checks for aspect @code{Implicit_Dereference} and simplifies the checks for those aspects that are inherited operations.
! 
! RM references: 13.01.01 (18/4) 13.01.01 (34/3) 4.01.05 (6/3) 4.01.06 (5/3)
! 4.01.06 (6/3) 4.01.06 (7/3) 4.01.06 (8/3) 4.01.06 (9/3) 5.05.01 (11/3)
! @end itemize
! 
! @geindex AI12-0140 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0140 Access to unconstrained partial view when full view is constrained (0000-00-00)'
! 
! Clarify some confusion about about whether what matters when checking whether designated subtypes statically match is the view of the designated type that is currently available v.s. the view that was available when the access type was declared.
! 
! RM references: 3.02 (7/2) 7.03.01 (5/1)
! @end itemize
! 
! @geindex AI12-0143 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0143 Using an entry index of a family in a precondition (2022-04-05)'
! 
! Ada 2022 adds the @code{Index} attribute, which allows the use of the entry family index of an entry call within preconditions and post-conditions.
! 
! RM references: 6.01.01 (30/3) 9.05.04 (5/3)
! @end itemize
! 
! @geindex AI12-0144 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0144 Make Discrete_Random more flexible (2020-01-31)'
! 
! A new function Random with First/Last parameters is provided in the
! @code{Ada.Numerics.Discrete_Random} package.
! 
! RM references: A.05.02 (20) A.05.02 (32) A.05.02 (41) A.05.02 (42)
! @end itemize
! 
! @geindex AI12-0145 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0145 Pool_of_Subpool returns null when called too early (0000-00-00)'
! 
! Clarify that if you ask for the pool of a subpool (by calling @code{Pool_Of_Subpool}) before @code{Set_Pool_of_Subpool} is called, then the result is null.
! 
! RM references: 13.11.04 (20/3)
! @end itemize
! 
! @geindex AI12-0147 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0147 Expression functions and null procedures can be declared in a protected_body (2015-03-05)'
! 
! AI12-0147 specifies that null procedures and expression functions are now
! allowed in protected bodies.
! 
! RM references: 9.04 (8/1)
! @end itemize
! 
! @geindex AI12-0149 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0149 Type invariants are checked for functions returning access-to-type (0000-00-00)'
! 
! Extend the rule saying that @code{Type_Invariant} checks are performed for access-to-T parameters (where T has a specified @code{Type_Invariant}) so that the rule also applies to function results.
! 
! RM references: 7.03.02 (19.3/4)
! @end itemize
! 
! @geindex AI12-0150 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0150 Class-wide type invariants and statically bound calls (0000-00-00)'
! 
! The same approach used in AI12-0113 to ensure that contract-related calls associated with a call to a subprogram “match” with respect to dispatching also applies to @code{Type_Invariant} checking.
! 
! RM references: 7.03.02 (3/3) 7.03.02 (5/3) 7.03.02 (9/3) 7.03.02 (22/3)
! @end itemize
! 
! @geindex AI12-0154 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0154 Aspects of library units (0000-00-00)'
! 
! Clarify that an aspect_specification for a library unit is equivalent to a corresponding aspect-specifying pragma.
! 
! RM references: 13.01.01 (32/3)
! @end itemize
! 
! @geindex AI12-0156 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0156 Use subtype_indication in generalized iterators (0000-00-00)'
! 
! For iterating over an array, we already allow (but do not require) explicitly providing a subtype indication in an iterator_specification. Tee AI generalizes this to handle the case where the element type of the array is of an anonymous access type. This also allows (but does not require) explicitly naming the cursor subtype in a generalized iterator.
! The main motivation for allowing these new cases is improving readability by making it easy to infer the (sub)type of the iteration object just by looking at the loop.
! 
! RM references: 5.05.02 (2/3) 5.05.02 (5/4) 5.05.02 (7/3) 3.10.02 (11.1/2)
! @end itemize
! 
! @geindex AI12-0157 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0157 Missing rules for expression functions (0000-00-00)'
! 
! Clarify that an expression function behaves like a single-return-statement
! function in more cases: it can return an aggregate without extra parens, the expression has an applicable index constraint, and the same accessibility rules apply in both cases.
! 
! For instance, the code below is legal:
  
  @example
! subtype S is String (1 .. 10);
! function f return S is (others => '?');
  @end example
  
! RM references: 3.10.02 (19.2/4) 3.10.02 (19.3/4) 4.03.03 (11/2) 6.08 (2/3)
! 6.08 (3/3) 6.08 (5/3) 6.08 (6/3) 6.08 (7/3) 7.05 (2.9/3) 13.14
! (5.1/4) 13.14 (5.2/4) 13.14 (8/3) 13.14 (10.1/3) 13.14 (10.2/3)
! 13.14 (10.3/3)
! @end itemize
  
! @geindex AI12-0160 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0160 Adding an indexing aspect to an indexable container type (0000-00-00)'
! 
! If the parent type of a derived type has exactly one of the two indexing aspects (that is, constant_indexing and variable_indexing) specified, then the derived type cannot have a specification for the other one.
! 
! RM references: 4.01.06 (6/4) 4.01.06 (9/4) 3.06 (22.2/3)
  @end itemize
  
! @geindex AI12-0162 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0162 Memberships and Unchecked_Unions (0000-00-00)'
  
! Clarify that membership tests for unchecked_union types work consistently when
! testing membership in more than one subtype (X in AA | BB | CC)  as when
! testing for one.
  
! RM references: B.03.03 (25/2)
  @end itemize
  
! @geindex AI12-0164 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0164 Max_Entry_Queue_Length aspect for entries (2019-06-11)'
  
! AI12-0164 defines pragma and aspect @code{Max_Entry_Queue_Length} in addition
! to the GNAT-specific equivalents @code{Max_Queue_Length} and @code{Max_Entry_Queue_Depth}.
  
! RM references: D.04 (16)
  @end itemize
  
! @geindex AI12-0165 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0165 Operations of class-wide types and formal abstract subprograms (2021-10-19)'
  
! Ada 2022 specifies that when the controlling type of a formal abstract
! subprogram declaration is a formal type, and the actual type is a class-wide type T’Class, the actual subprogram can be an implicitly declared subprogram corresponding to a primitive operation of type T.
  
! RM references: 12.06 (8.5/2)
  @end itemize
  
! @geindex AI12-0166 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0166 External calls to protected functions that appear to be internal calls (2016-11-15)'
  
! According to this AI, the compiler rejects a call to a protected operation when the call appears within a precondition for another protected operation.
  
! RM references: 6.01.01 (34/3) 9.05 (3/3) 9.05 (7.1/3)
  @end itemize
  
! @geindex AI12-0167 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0167 Type_Invariants and tagged-type View Conversions (0000-00-00)'
  
! This AI clarifies that no invariant check is performed in a case where an invariant-violating value is assigned to a component. This confirms the current compiler behavior.
! 
! RM references: 7.03.02 (9/4)
  @end itemize
  
+ @geindex AI12-0168 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0168 Freezing of generic instantiations of generics with bodies (0000-00-00)'
  
! Adjust freezing rules to be compatible with AI12-0103-1. The change confirms the current compiler behavior.
  
! RM references: 13.14 (3/4)
! @end itemize
  
! @geindex AI12-0169 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0169 Aspect specifications for entry bodies (0000-00-00)'
  
! Change syntax to allow aspect specifications for implementation-defined aspects on entry bodies. The change doesn’t influence any of the language-defined aspects and is solely required for SPARK.
  
! RM references: 9.05.02 (5)
! @end itemize
  
! @geindex AI12-0170 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0170 Abstract subprogram calls in class-wide precondition expressions (2020-07-06)'
  
! This AI specifies rules for calls to abstract functions within class-wide preconditions and postconditions.
  
! RM references: 3.09.03 (7) 6.01.01 (7/4) 6.01.01 (18/4) 6.01.01 (18.2/4)
! @end itemize
  
! @geindex AI12-0172 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0172 Raise expressions in limited contexts (2019-07-29)'
  
! The compiler has been enhanced to support the use of raise expressions in
! limited contexts.
  
! RM references: 7.05 (2.1/3)
! @end itemize
  
! @geindex AI12-0173 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0173 Expression of an extended return statement (0000-00-00)'
  
! Fix the wording related to expression of an extended return statement that was made ambiguous by changes of syntax in other AI’s. No compiler changes involved.
  
! RM references: 6.05 (3/2) 6.05 (5/3)
! @end itemize
  
! @geindex AI12-0174 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0174 Aggregates of Unchecked_Unions using named notation (0000-00-00)'
  
! In many cases, it is illegal to name a discriminant of an unchecked_union type.  Relax this rule to allow the use of named notation in an aggregate of an unchecked_union type.
  
! RM references: B.03.03 (9/3)
! @end itemize
  
! @geindex AI12-0175 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0175 Preelaborable packages with address clauses (2020-03-20)'
  
! The compiler nows accepts calls to certain functions that are essentially unchecked conversions in preelaborated library units. To use this feature the compilation flag @code{-gnat2022} must be specified.
  
! RM references: 10.02.01 (7)
! @end itemize
  
! @geindex AI12-0179 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0179 Failure of postconditions of language-defined units (0000-00-00)'
  
! A clarification that expressing postconditions for predefined units via RM wording or via @code{Post} aspect specifications are equivalent. In particular, the expression in such a @code{Post} aspect specification should not yield False. No implementation changes needed.
  
! RM references: 1.01.03 (17/3) 11.04.02 (23.1/3)
! @end itemize
  
! @geindex AI12-0180 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0180 Using protected subprograms and entries within an invariant (2020-06-22)'
  
! AI12-0180 makes entries and protected subprograms directly visible within Invariant aspects of a task or protected type.
  
! RM references: 13.01.01 (12/3)
! @end itemize
  
! @geindex AI12-0181 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0181 Self-referencing representation aspects (0000-00-00)'
  
! Clarify that a name or expression which freezes an entity cannot occur in an aspect specification for that entity.
  
! RM references: 13.01 (9/4) 13.01 (9.1/4) 13.14 (19)
! @end itemize
  
! @geindex AI12-0182 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0182 Pre’Class and protected operations (0000-00-00)'
  
! Confirm that Pre’Class and Post’Class cannot be specified for a protected operation. No language change.
  
! RM references: 13.01.01 (16/3)
! @end itemize
  
! @geindex AI12-0184 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0184 Long Long C Data Types (2020-01-30)'
  
! Two new types @code{long_long} and @code{unsigned_long_long} are introduced in the package @code{Interfaces.C}.
  
! RM references: B.03 (71.3/3)
! @end itemize
  
! @geindex AI12-0185 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0185 Resolution of postcondition-specific attributes (0000-00-00)'
  
! Clarify resolution rules for @code{'Old} and @code{'Result} attribute references to match original intent.
  
! RM references: 6.01.01 (7/4) 6.01.01 (8/3) 6.01.01 (26.10/4) 6.01.01 (29/3)
! @end itemize
  
! @geindex AI12-0186 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0186 Profile freezing for the Access attribute (0000-00-00)'
  
! Clarify that the use of Some_Subprogram’Access does not freeze the profile of Some_Subprogram.
  
! RM references: 13.14 (15)
! @end itemize
  
! @geindex AI12-0187 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0187 Stable properties of abstract data types (2020-11-04)'
  
! Ada 2022 defines a new aspect, @code{Stable_Properties}, for use in
! generating additional postcondition checks for subprograms.
  
! RM references: 7.03.04 (0) 13.01.01 (4/3)
! @end itemize
  
! @geindex AI12-0191 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0191 Clarify “part” for type invariants (0000-00-00)'
  
! Clarify that for purposes of determining whether an invariant check is required for a “part” of an object, we do not look at “parts” which do not correspond to “parts” of the nominal type of the object. For example, if we have a parameter Param of a tagged type T1 (or equivalently of type T1’Class), and type T2 is an extension of T1 which declares a component Foo, and T1’Class (Param)’Tag = T2’Tag, then no invariant check is performed for Param’s Foo component (or any subcomponent thereof).
  
! RM references: 3.03 (23/5) 3.09.01 (4.1/2) 6.08 (5.8/5) 7.03.02 (8.3/5)
! 7.03.02 (8.4/5) 7.03.02 (8.5/5) 7.03.02 (8.6/5) 7.03.02 (8.7/5)
! 7.03.02 (8.8/5) 7.03.02 (8.9/5) 7.03.02 (8.10/5) 7.03.02 (8.11/5)
! 7.03.02 (8.12/5) 7.03.02 (10.1/4) 7.03.02 (15/5) 7.03.02 (17/4)
! 7.03.02 (18/4) 7.03.02 (19/4) 13.13.02 (9/3)
! @end itemize
  
! @geindex AI12-0192 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0192 “requires late initialization” and protected types (2020-03-11)'
  
! This AI clarifies that components of a protected type require late initialization when their initialization references (implicitly) the current instance of the type.
  
! RM references: 3.03.01 (8.1/2)
! @end itemize
  
! @geindex AI12-0194 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0194 Language-defined aspects and entry bodies (0000-00-00)'
  
! The AI Includes entry bodies on the list of bodies for which no language-defined aspects can be specified (although specifying an implementation-defined aspect may be allowed).
  
! A wording change, no implementation impact.
  
! RM references: 13.01.01 (17/3)
! @end itemize
  
! @geindex AI12-0195 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0195 Inheriting body but overriding precondition or postcondition (2021-08-11)'
  
! Ada 2022 specifies that if a primitive with a class-wide precondition or
! postcondition is inherited, and some primitive function called in the class-wide precondition or postcondition is overridden, then a dispatching call to the first primitive with a controlling operand that has the tag of the overriding type is required to check both the interpretation using the overriding function and the interpretation using the original overridden function.
  
! RM references: 6.01.01 (38/4)
! @end itemize
  
! @geindex AI12-0196 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0196 Concurrent access to Ada container libraries (0000-00-00)'
  
! Clarify that parallel execution of operations which use cursors to refer to different elements of the same container does not violate the rules about erroneous concurrent access in some cases. That is, if C1 and C2 are cursors that refer to different elements of some container, then it is ok to concurrently execute an operation that is passed C1 and which accesses one element of the container, with another operation (perhaps the same operation, perhaps not) that is passed C2 and which accesses another element of the container.
  
! RM references: A.18 (2/2) A.18.02 (125/2) A.18.02 (133/3) A.18.02 (135/3)
! A.18.03 (81/3) A.18.04 (36/3) A.18.07 (34/2) A.18.10 (116/3)
! @end itemize
  
! @geindex AI12-0198 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0198 Potentially unevaluated components of array aggregates (2020-05-13)'
  
! Ada 2022 enforces the detection of components that belong to a nonstatic or
! null range of index values of an array aggregate.
  
! RM references: 6.01.01 (22.1/4)
! @end itemize
  
! @geindex AI12-0199 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0199 Abstract subprogram calls in class-wide invariant expressions (0000-00-00)'
  
! Class-wide type invariants do not apply to abstract types, to avoid various
! problems. Define the notion of a “corresponding expression” for a class-wide
! type invariant, replacing references to components as appropriate, taking into
! account rules for corresponding and specified discriminants when applying them
! to a nonabstract descendant.
  
! RM references: 7.03.02 (5/4) 7.03.02 (8/3)
! @end itemize
  
! @geindex AI12-0201 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0201 Missing operations of static string types (2020-02-25)'
  
! Relational operators and type conversions of static string types are now static in Ada 2022.
  
! RM references: 4.09 (9) 4.09 (19) 4.09 (20) 4.09 (24)
! @end itemize
  
! @geindex AI12-0203 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0203 Overriding a nonoverridable aspect (0000-00-00)'
  
! A corner case wording clarification that has no impact on compilers.
  
! RM references: 4.01.05 (5.1/4) 4.01.05 (7/3)
! @end itemize
  
! @geindex AI12-0204 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0204 Renaming of a prefixed view (2020-02-24)'
  
! AI12-0204 clarifies that the prefix of a prefixed view that is renamed or
! passed as a formal subprogram must be renameable as an object.
  
! RM references: 8.05.04 (5.2/2) 12.06 (8.3/2) 4.01.03 (13.1/2) 4.01.06 (9/5)
! @end itemize
  
! @geindex AI12-0205 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0205 Defaults for generic formal types (2021-04-01)'
  
! AI12-0205 specifies syntax and semantics that provide defaults for formal types of generic units. The legality rules guarantee that the default subtype_mark that is specified for a formal type would be a legal actual in any instantiation of the generic unit.
  
! RM references: 12.03 (7/3) 12.03 (10) 12.05 (2.1/3) 12.05 (2.2/3) 12.05 (7/2)
! @end itemize
  
! @geindex AI12-0206 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0206 Nonoverridable should allow arbitrary kinds of aspects (0000-00-00)'
  
! A non-overridable aspect can have a value other than a name; for example, @code{Max_Entry_Queue_Length} is non-overridable and it has a scalar value.
! Part of adding support for @code{Max_Entry_Queue_Length} (which is already supported by GNAT).
  
! RM references: 13.01.01 (18.2/4) 13.01.01 (18.3/4) 13.01.01 (18.6/4)
! @end itemize
  
! @geindex AI12-0207 (Ada 2022 feature)
  
  
! @itemize *
  
! @item 
! `AI12-0207 Convention of anonymous access types (2020-02-01)'
  
! The convention of anonymous access elements of arrays now have the same convention as the array instead of convention Ada.
  
! RM references: 6.03.01 (13.1/3) B.01 (19) B.01 (21/3)
! @end itemize
! 
! @geindex AI12-0208 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0208 Predefined Big numbers support (0000-00-00)'
  
! Add predefined package @code{Ada.Numerics.Big_Numbers}.
  
! RM references: A.05.05 (0) A.05.06 (0) A.05.07 (0)
  @end itemize
  
! @geindex AI12-0211 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0211 Interface types and inherited nonoverridable aspects (2020-08-24)'
  
! AI12-0211 introduces two new legality rules for Ada 2022. The first says that
! if a nonoverridable aspect is explicitly specified for a type that also inherits that aspect from another type (an ancestor or a progenitor), then the explicit aspect specification shall be confirming. The second says that if a type inherits a nonoverridable aspect from two different sources (this can only occur if at least one of the two is an interface type), then the two sources shall agree with respect to the given aspect. This AI is a binding interpretation, so these checks are performed even for earlier Ada versions. Because of compatibility concerns, an escape mechanism for suppressing these legality checks is provided: these new checks always pass if the @code{-gnatd.M} switch (relaxed RM semantics) is specified.
! 
! RM references: 13.01.01 (18.3/5) 13.01.01 (18.4/4)
! @end itemize
! 
! @geindex AI12-0212 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0212 Container aggregates; generalized array aggregates (0000-00-00)'
! 
! The AI defines a new feature: generalized array aggregates that already exists in GNAT.
! 
! RM references: 4.03.05 (0) 1.01.04 (12) 1.01.04 (13) 2.01 (15) 2.02 (9/5)
! 3.07.01 (3) 3.08.01 (4) 4.03 (2/5) 4.03 (3/5) 4.03.01 (5) 4.03.03
! (3/2) 4.03.03 (4/5) 4.03.03 (5.1/5) 4.03.03 (9) 4.03.03 (17/5)
! 4.03.03 (21) 4.03.03 (23.2/5) 4.03.03 (26) 4.03.03 (27) 4.03.03
! (31) 4.03.04 (4/5) 4.04 (3.1/3) 11.02 (3) 13.01.01 (5/3)
! 13.01.01 (7/3) A.18.02 (8/3) A.18.02 (14/2) A.18.02 (47/2) A.18.02
! (175/2) A.18.03 (6/3) A.18.05 (3/3) A.18.06 (4/3) A.18.08 (3/3)
! A.18.09 (4/3)
! @end itemize
! 
! @geindex AI12-0216 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0216 6.4.1(6.16-17/3) should never apply to composite objects (0000-00-00)'
! 
! Fix wording so that parameter passing cases where there isn’t really any aliasing problems or evaluation order dependency are classified as acceptable.
! 
! No compiler impact.
! 
! RM references: 6.04.01 (6.17/3)
! @end itemize
! 
! @geindex AI12-0217 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0217 Rules regarding restrictions on the use of the Old attribute are too strict (2020-03-25)'
! 
! AI12-0217 loosens the rules regarding what is allowed as the prefix of a ‘Old
! attribute reference. In particular, a prefix is now only required to “statically name” (as opposed to the previous “statically denote”) an object. This means that components of composite objects that previously would have been illegal are now legal prefixes.
! 
! RM references: 6.01.01 (24/3) 6.01.01 (27/3)
! @end itemize
! 
! @geindex AI12-0220 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0220 Pre/Post for access-to-subprogram types (2020-04-14)'
! 
! Contract aspects can now be specified for access-to-subprogram types, as
! defined for Ada 2022 in this AI.
! 
! RM references: 6.01.01 (1/4) 6.01.01 (2/3) 6.01.01 (4/3) 6.01.01 (19/3)
! 6.01.01 (28/3) 6.01.01 (29/3) 6.01.01 (39/3) 13.01.01 (12/5)
! @end itemize
! 
! @geindex AI12-0222 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0222 Representation aspects and private types (0000-00-00)'
! 
! Clarify that the rule against specifying a representation aspect for a type before the type is completely defined also applies in the case where aspect_specification syntax is used (not just in the case where a pragma or some other kind of representation item is used).
! 
! GNAT already implements this.
! 
! RM references: 13.01 (9/5) 13.01 (9.1/4) 13.01 (9.2/5)
! @end itemize
! 
! @geindex AI12-0225 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0225 Prefix of Obj’Image (0000-00-00)'
! 
! Clarify some Object vs. Value corner cases to allow names that do not denote objects in more contexts, such as a qualified expression as a prefix of an Image attribute.
! 
! RM references: 3.05 (55.1/4)
! @end itemize
! 
! @geindex AI12-0226 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0226 Make objects more consistent (0000-00-00)'
! 
! Allow value conversions as objects. For instance this example becomes legal: @code{Long_Integer (Duration'Last)'Image}.
! 
! RM references: 3.03 (11.1/3) 3.03 (21.1/3) 3.03 (23.8/5) 4.06 (58.1/4)
! 4.06 (58.3/4)
! @end itemize
! 
! @geindex AI12-0227 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0227 Evaluation of nonstatic universal expressions when no operators are involved (0000-00-00)'
! 
! Nonstatic universal integer expressions are always evaluated at runtime as values of type root_integer; similarly, nonstatic universal real expressions are always evaluated at runtime as values of type root_real.
! This AI corrects a wording oversight. Previously, the above was only true if a call to operator was involved. With this change it is true in all cases.
! 
! No compiler impact.
! 
! RM references: 4.04 (10) 8.06 (29)
! @end itemize
! 
! @geindex AI12-0228 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0228 Properties of qualified expressions used as names (2020-02-19)'
! 
! This AI clarifies that properties of a qualified object pass through a
! qualified expression used as a name. Specifically, “aliased” and “known to be
! constrained” are not changed by a qualified expression.
! 
! RM references: 3.03 (23.7/3) 3.10 (9/3)
! @end itemize
! 
! @geindex AI12-0231 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0231 Null_Task_Id and Activation_Is_Complete (0000-00-00)'
! 
! Add @code{Activation_Is_Complete} to the list of functions that raise P_E if passed @code{Null_Task_Id}, correcting an oversight.
! 
! RM references: C.07.01 (15)
! @end itemize
! 
! @geindex AI12-0232 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0232 Rules for pure generic bodies (0000-00-00)'
! 
! Clarify the rules for a generic body nested in a pure library unit.
! 
! RM references: 10.02.01 (9/3) 10.02.01 (15.1/3) 10.02.01 (15.5/3)
! @end itemize
! 
! @geindex AI12-0233 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0233 Pre’Class for hidden operations of private types (0000-00-00)'
! 
! Clarify how @code{Pre'Class} checking interacts with private-part overriding of inherited subprograms. A class-wide precondition can be checked at runtime even if it is specified in a private part that the caller cannot see into.
! 
! RM references: 6.01.01 (38/4)
! @end itemize
! 
! @geindex AI12-0234 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0234 Compare-and-swap for atomic objects (0000-00-00)'
! 
! New predefined units for atomic operations (@code{System.Atomic_Operations} and child units thereof).
! 
! RM references: C.06.01 (0) C.06.02 (0)
! @end itemize
! 
! @geindex AI12-0235 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0235 System.Storage_Pools should be pure (0000-00-00)'
! 
! Change the predefined package System.Storage_Pools from preelaborated to pure.
! 
! RM references: 13.11 (5)
! @end itemize
! 
! @geindex AI12-0236 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0236 declare expressions (2020-04-08)'
! 
! A @code{declare expression} allows constant objects and renamings to be
! declared within an expression.
! 
! RM references: 2.08 (6) 3.09.02 (3) 3.10.02 (9.1/3) 3.10.02 (16.1/3)
! 3.10.02 (32.2/3) 4.03.02 (5.4/3) 4.03.03 (15.1/3) 4.04 (7/3)
! 4.05.09 (0) 6.02 (10/4) 7.05 (2.1/5) 8.01 (2.1/4)
! @end itemize
! 
! @geindex AI12-0237 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0237 Getting the representation of an enumeration value (2020-01-31)'
! 
! The GNAT-specific attributes @code{Enum_Rep} and @code{Enum_Val} have been standardized and are now also supported as Ada 2022 attributes.
! 
! RM references: 13.04 (10) 13.04 (11/3)
! @end itemize
! 
! @geindex AI12-0242 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0242 Shorthand Reduction Expressions for Objects (0000-00-00)'
! 
! Allow reduction expressions to iterate over an an array or an iterable object without having to explicitly create a value sequence.
! 
! This allows, for instance, writing @code{A'Reduce("+", 0)} instead of the equivalent (but more verbose) @code{[for Value of A => Value]'Reduce("+", 0);}.
! 
! RM references: 4.05.10 (0) 4.01.04 (6)
! @end itemize
! 
! @geindex AI12-0247 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0247 Potentially Blocking goes too far for Detect_Blocking (0000-00-00)'
! 
! During a protected action, a call on a subprogram that contains a potentially blocking operation is considered a bounded error (so raising P_E is optional).
! This rule imposed an unreasonable implementation burden.
! The new rule introduced by this AI allows ignoring (i.e., not detecting) the problem until execution of a potentially blocking operation is actually attempted.
! 
! RM references: 9.05 (55/5) 9.05 (56/5) 9.05.01 (18/5) H.05 (5/2)
! @end itemize
! 
! @geindex AI12-0249 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0249 User-defined numeric literals (2020-04-07)'
! 
! Compiler support is added for three new aspects (@code{Integer_Literal}, @code{Real_Literal}, and @code{String_Literal}) as described in AI12-0249 (for @code{Integer_Literal} and @code{Real_Literal}), AI12-0295 (for  @code{String_Literal}), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined
! aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
! 
! RM references: 4.02 (9) 4.02.01 (0) 4.09 (3)
! @end itemize
! 
! @geindex AI12-0250 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0250 Iterator Filters (2020-05-19)'
! 
! This AI defines Ada 2022 feature of iterator filters, which can be
! applied to loop parameter specifications and iterator specifications.
! 
! RM references: 4.03.03 (21) 4.03.03 (26) 4.03.03 (31) 4.03.05 (0) 4.05.10
! (0) 5.05 (4) 5.05 (7) 5.05 (9/4) 5.05 (9.1/4) 5.05 (10)
! 5.05.02 (2/3) 5.05.02 (10/3) 5.05.02 (11/3)
! @end itemize
! 
! @geindex AI12-0252 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0252 Duplicate interrupt handlers under Ravenscar (2018-07-05)'
! 
! Ada Issue AI12-0252 requires that the runtime shall terminate with a
! Program_Error when more than one interrupt handler is attached to the same interrupt and the restriction No_Dynamic_Attachment is in effect.
! 
! RM references: C.03.01 (13)
! @end itemize
! 
! @geindex AI12-0256 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0256 Aspect No_Controlled_Parts (2021-01-26)'
! 
! The compiler now supports the Ada 2022 aspect No_Controlled_Parts (see
! AI12-0256). When specified for a type, this aspect requires that the type and any of its ancestors must not have any controlled parts.
! 
! RM references: H.04.01 (0) 13.01.01 (18.7/5)
! @end itemize
! 
! @geindex AI12-0258 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0258 Containers and controlled element types (0000-00-00)'
! 
! Most predefined containers are allowed to defer finalization of container elements until the finalization of the container. This allows implementation flexibility  but  causes problems in some cases. AI12-0258 tightens up the rules for the indefinite containers to say that finalization happens earlier - if a client needs the tighter finalization guarantees, then it can use the indefinite containers (even if the element subtype in question is definite). Other solutions involving the holder generic are also possible.
! 
! GNAT implements these tighter element finalization requirements for instances of the indefinite container generics.
! 
! RM references: A.18 (10/4)
! @end itemize
! 
! @geindex AI12-0259 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0259 Lower bound of strings returned from Ada.Command_Line (0000-00-00)'
! 
! Specify that the low-bound of a couple of predefined String-valued functions will always be one.
! 
! RM references: A.15 (14) A.15 (16/3)
! @end itemize
! 
! @geindex AI12-0260 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0260 Functions Is_Basic and To_Basic in Wide_Characters.Handling (2020-04-01)'
! 
! AI12-0260 is implemented for Ada 2022, providing the new functions @code{Is_Basic} and @code{To_Basic} in package @code{Ada.Wide_Characters.Handling}.
! 
! RM references: 1.02 (8/3) A.03.05 (8/3) A.03.05 (20/3) A.03.05 (21/3)
! A.03.05 (33/3) A.03.05 (61/3)
! @end itemize
! 
! @geindex AI12-0261 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0261 Conflict in “private with” rules (0000-00-00)'
! 
! If a library unit is only visible at some point because of a “private with”, there are legality rules about a name denoting that entity. The AI cleans up the wording so that it captures the intent in a corner case involving a private-child library-unit subprogram. The previous wording incorrectly caused this case to be illegal.
! 
! RM references: 10.01.02 (12/3) 10.01.02 (13/2) 10.01.02 (14/2) 10.01.02
! (15/2) 10.01.02 (16/2)
! @end itemize
! 
! @geindex AI12-0262 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0262 Map-Reduce attribute (0000-00-00)'
! 
! The AI defines Reduction Expressions to allow the programmer to apply the
! Map-Reduce paradigm to map/transform a set of values to a new set of values,
! and then summarize/reduce the transformed values into a single result value.
! 
! RM references: 4.01.04 (1) 4.01.04 (6) 4.01.04 (11) 4.05.10 (0)
! @end itemize
! 
! @geindex AI12-0263 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0263 Update references to ISO/IEC 10646 (0000-00-00)'
! 
! Change RM references to ISO/IEC 10646:2011 to instead refer to ISO/IEC 10646:2017. No compiler impact.
! 
! RM references: 1.01.04 (14.2/3) 2.01 (1/3) 2.01 (3.1/3) 2.01 (4/3) 2.01
! (4.1/5) 2.01 (5/3) 2.01 (15/3) 2.01 (4.1/5) 2.01 (5/3) 2.03
! (4.1/5) 2.03 (5/3) 3.05.02 (2/3) 3.05.02 (3/3) 3.05.02 (4/3) A.01
! (36.1/3) A.01 (36.2/3) A.03.02 (32.6/5) A.03.05 (51.2/5) A.03.05
! (55/3) A.03.05 (59/3) A.04.10 (3/3) B.05 (21/5)
! @end itemize
! 
! @geindex AI12-0264 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0264 Overshifting and overrotating (0000-00-00)'
! 
! Clarify Shift and Rotate op behavior with large shift/rotate amounts.
! 
! RM references: B.02 (9)
! @end itemize
! 
! @geindex AI12-0265 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0265 Default_Initial_Condition for types (2020-11-13)'
! 
! The aspect @code{Default_Initial_Condition}, originally proposed by SPARK and
! supported in GNAT, is now also included in Ada 2022. One change from the
! original implementation is that when the aspect is specified on ancestor types of a derived type, the ancestors’ check expressions also apply to the derived type.
! @code{Default_Initial_Condition} checks are also now applied in cases of default
! initialization of components, allocators, ancestor parts of extension aggregates, and box associations of aggregates.
! 
! RM references: 7.03.03 (0) 1.01.03 (17.1/5) 11.04.02 (23.2/5) 11.04.02 (23.3/5)
! @end itemize
! 
! @geindex AI12-0269 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0269 Aspect No_Return for functions reprise (2020-03-19)'
! 
! This amendment has been implemented under the @code{-gnat2022} switch, and the
! compiler now accepts the aspect/pragma No_Return for functions and generic
! functions.
! 
! RM references: 6.05.01 (0) 6.05.01 (1/3) 6.05.01 (3.1/3) 6.05.01 (3.4/3)
! 6.05.01 (5/2) 6.05.01 (6/2) 6.05.01 (7/2) J.15.02 (2/3) J.15.02
! (3/3) J.15.02 (4/3)
! @end itemize
! 
! @geindex AI12-0272 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0272 (part 1) Pre/Postconditions for formal subprograms (0000-00-00)'
! 
! Pre and Post aspects can be specified for a generic formal subprogram. @code{Default_Initial_Condition} can be specified for a generic formal private type.
! 
! GNAT implements this with an exception of the part related to @code{Default_Initial_Condition}.
! 
! RM references: 6.01.01 (1/5) 6.01.01 (39/5) 7.03.03 (1/5) 7.03.03 (2/5)
! 7.03.03 (8/5) 7.03.04 (5/5) F.01 (1)
! @end itemize
! 
! @geindex AI12-0275 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0275 Make subtype_mark optional in object renames (2020-01-28)'
! 
! AI12-0275 allows object renamings to be declared without an explicit
! subtype_mark or access_definition. This feature can be used by compiling
! with the switch @code{-gnat2022}.
! 
! RM references: 8.05.01 (2/3) 8.05.01 (3/2)
! @end itemize
! 
! @geindex AI12-0277 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0277 The meaning of “accessibility level of the body of F” (0000-00-00)'
! 
! Clarify that the only time that an explicitly aliased formal parameter has different accessibility properties than an aliased part of a “normal” parameter is for the accessibility checking associated with a return statement.
! 
! RM references: 3.10.02 (19.2/4)
! @end itemize
! 
! @geindex AI12-0278 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0278 Implicit conversions of anonymous return types (0000-00-00)'
! 
! If a call to a function with an anonymous-access-type result is converted to a named access type, it doesn’t matter whether the conversion is implicit or explicit. the AI fixes hole where the previous rules didn’t cover the implicit conversion case.
! 
! RM references: 3.10.02 (10.3/3)
! @end itemize
! 
! @geindex AI12-0279 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0279 Nonpreemptive dispatching needs more dispatching points (2020-04-17)'
! 
! Ada 2022 defines a new aspect @cite{Yield} that can be specified in the declaration of a noninstance subprogram (including a generic formal subprogram), a generic subprogram, or an entry, to ensure that the associated subprogram has at least one task dispatching point during each invocation.
! 
! RM references: D.02.01 (1.5/2) D.02.01 (7/5)
! @end itemize
! 
! @geindex AI12-0280-2 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0280-2 Making ‘Old more flexible (2020-07-24)'
! 
! For Ada 2022, AI12-0280-2 relaxes Ada’s restrictions on ‘Old attribute
! references whose attribute prefix does not statically name an entity. Previously, it was required that such an attribute reference must be unconditionally evaluated when the postcondition is evaluated; with the new rule, conditional evaluation is permitted if the relevant conditions can be evaluated upon entry to the subprogram with the same results as evaluation at the time of the postcondition’s evaluation. In this case, the ‘Old attribute prefix is evaluated conditionally (more specifically, the prefix is evaluated only if the result of that evaluation is going to be referenced later when the
! postcondition is evaluated).
! 
! RM references: 6.01.01 (20/3) 6.01.01 (21/3) 6.01.01 (22/3) 6.01.01
! (22.1/4) 6.01.01 (22.2/5) 6.01.01 (23/3) 6.01.01 (24/3) 6.01.01
! (26/4) 6.01.01 (27/5) 6.01.01 (39/5)
! @end itemize
! 
! @geindex AI12-0282 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0282 Atomic, Volatile, and Independent generic formal types (0000-00-00)'
! 
! The AI specifies that the aspects @code{Atomic}, @code{Volatile}, @code{Independent}, @code{Atomic_Components}, @code{Volatile_Components}, and @code{Independent_Components} are specifiable for generic formal types. The actual type must have a matching specification.
! 
! RM references: C.06 (6.1/3) C.06 (6.3/3) C.06 (6.5/3) C.06 (6.8/3) C.06
! (12/3) C.06 (12.1/3) C.06 (21/4)
! @end itemize
! 
! @geindex AI12-0285 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0285 Syntax for Stable_Properties aspects (0000-00-00)'
! 
! The AI establishes the required named notation for a Stable_Properties aspect specification in order to avoid syntactic ambiguities.
! 
! With the old syntax, an example like
  
  @example
! type Ugh is ...
!    with Stable_Properties =\> Foo, Bar, Nonblocking, Pack;
  @end example
  
! was problematic; @code{Nonblocking} and @code{Pack} are other aspects, while @code{Foo} and @code{Bar} are @code{Stable_Properties} functions. With the clarified syntax, the example above shall be written as:
! 
! @example
! type Ugh is ...
!   with Stable_Properties => (Foo, Bar), Nonblocking, Pack;
! @end example
! 
! RM references: 7.03.04 (2/5) 7.03.04 (3/5) 7.03.04 (4/5) 7.03.04 (6/5)
! 7.03.04 (7/5) 7.03.04 (9/5) 7.03.04 (10/5) 7.03.04 (14/5) 13.01.01 (4/5)
  @end itemize
  
! @geindex AI12-0287 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0287 Legality Rules for null exclusions in renaming are too fierce (2020-02-17)'
  
! The null exclusion legality rules for generic formal object matching and object renaming now only apply to generic formal objects with mode in out.
  
! RM references: 8.05.01 (4.4/2) 8.05.01 (4.5/2) 8.05.01 (4.6/2) 8.05.04
! (4.2/2) 12.04 (8.3/2) 12.04 (8.4/2) 12.04 (8.5/2) 12.04 (8.2/5)
! 12.06 (8.2/5)
  @end itemize
  
! @geindex AI12-0289 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0289 Implicitly null excluding anonymous access types and conformance (2020-06-09)'
  
! AI12-0289 is implemented for Ada 2022, allowing safer use of access parameters
! when the partial view of the designated type is untagged, but the full view is
! tagged.
  
! RM references: 3.10 (26)
  @end itemize
  
! @geindex AI12-0290 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0290 Restriction Pure_Barriers (2020-02-18)'
  
! The GNAT implementation of the Pure_Barriers restriction has
! been updated to match the Ada RM’s definition as specified
! in this AI. Some constructs that were accepted by the previous
! implementation are now rejected, and vice versa. In
! particular, the use of a component of a component of a
! protected record in a barrier expression, as in “when
! Some_Component.Another_Component =>”, formerly was (at least
! in some cases) not considered to be a violation of the
! Pure_Barriers restriction; that is no longer the case.
  
! RM references: D.07 (2) D.07 (10.10/4)
  @end itemize
  
! @geindex AI12-0291 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0291 Jorvik Profile (2020-02-19)'
  
! The Jorvik profile is now implemented, as defined in this AI.
! For Ada 2012 and earlier versions of Ada, Jorvik is an implementation-defined
! profile whose definition matches its Ada 2022 definition.
  
! RM references: D.13 (0) D.13 (1/3) D.13 (4/3) D.13 (6/4) D.13 (9/3) D.13
! (10/3) D.13 (11/4) D.13 (12/4)
  @end itemize
  
! @geindex AI12-0293 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0293 Add predefined FIFO_Streams packages (0000-00-00)'
  
! The AI adds @code{Ada.Streams.Storage} and its two subunits @code{Bounded} and @code{Unbounded}.
  
! RM references: 13.13.01 (1) 13.13.01 (9) 13.13.01 (9.1/1)
  @end itemize
  
! @geindex AI12-0295 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0295 User-defined string  (2020-04-07)'
  
! Compiler support is added for three new aspects (@code{Integer_Literal}, @code{Real_Literal}, and @code{String_Literal}) as described in AI12-0249 (for @code{Integer_Literal} and @code{Real_Literal}), AI12-0295 (for @code{String_Literal}), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
  
! RM references: 4.02 (6) 4.02 (10) 4.02 (11) 3.06.03 (1) 4.02.01 (0) 4.09 (26/3)
  @end itemize
  
! @geindex AI12-0301 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0301 Predicates should be checked like constraints for types with Default_Value (2020-02-25)'
  
! This AI clarifies that predicate checks apply for objects that are initialized
! by default and that are of a type that has any components whose subtypes specify @code{Default_Value} or @code{Default_Component_Value}.
  
! RM references: 3.02.04 (31/4)
  @end itemize
  
! @geindex AI12-0304 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0304 Image attributes of language-defined types (2020-07-07)'
  
! According to this AI, @code{Put_Image} (and therefore @code{'Image}) is provided for
! the containers and for unbounded strings.
  
! RM references: 4.10 (0)
  @end itemize
  
! @geindex AI12-0306 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0306 Split null array aggregates from positional array aggregates (0000-00-00)'
  
! The AI clarifies the wording of the references RM paragraphs without introducing any language changes.
  
! RM references: 4.03.03 (2) 4.03.03 (3/2) 4.03.03 (9/5) 4.03.03 (26/5)
! 4.03.03 (26.1/5) 4.03.03 (33/3) 4.03.03 (38) 4.03.03 (39) 4.03.03 (42)
  @end itemize
  
! @geindex AI12-0307 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0307 Resolution of aggregates (2020-08-13)'
  
! The proposed new syntax for aggregates in Ada 2022 uses square brackets as
! delimiters, and in particular allows @code{[]} as a notation for empty array and container aggregates. This syntax is currently available as an experimental feature under the @code{-gnatX} flag.
  
! RM references: 4.03 (3/5)
  @end itemize
  
! @geindex AI12-0309 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0309 Missing checks for pragma Suppress (0000-00-00)'
  
! The AI includes some previously overlooked run-time checks in the list of checks that are potentially suppressed via a pragma @code{Suppress}. For example, AI12-0251-1 adds a check that the number of chunks in a chunk_specification is not zero or negative. Clarify that suppressing @code{Program_Error_Check} suppresses that check too.
  
! RM references: 11.05 (10) 11.05 (19) 11.05 (20) 11.05 (22) 11.05 (24)
  @end itemize
  
! @geindex AI12-0311 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0311 Suppressing client-side assertions for language-defined units (0000-00-00)'
  
! The AI defines some new assertion policies that can be given as arguments in a Suppress pragma (e.g., Calendar_Assertion_Check). GNAT recognizes and ignores those new policies, the checks are not implemented.
  
! RM references: 11.04.02 (23.5/5) 11.05 (23) 11.05 (26)
  @end itemize
  
! @geindex AI12-0315 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0315 Image Attributes subclause improvements (0000-00-00)'
  
! Clarify that a named number or similar can be the prefix of an Image attribute reference.
  
! RM references: 4.10 (0)
  @end itemize
  
! @geindex AI12-0318 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0318 No_IO should apply to Ada.Directories (2020-01-31)'
  
! The restriction No_IO now applies to and prevents the use of the
! @code{Ada.Directories package}.
  
! RM references: H.04 (20/2) H.04 (24/3)
  @end itemize
  
! @geindex AI12-0321 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0321 Support for Arithmetic Atomic Operations and Test and Set (0000-00-00)'
  
! The AI adds some predefined atomic operations, e.g. package System.`@w{`}Atomic_Operations.Test_And_Set`@w{`}.
  
! RM references: C.06.03 (0) C.06.04 (0)
  @end itemize
  
! @geindex AI12-0325 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0325 Various issues with user-defined literals (2020-04-07)'
  
! Compiler support is added for three new aspects (@code{Integer_Literal}, @code{Real_Literal}, and @code{String_Literal}) as described in AI12-0249 (for @code{Integer_Literal} and @code{Real_Literal}), AI12-0295 (for @code{String_Literal}), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
  
! RM references: 4.02 (6) 4.02 (10) 4.02 (11) 4.02.01 (0)
  @end itemize
  
! @geindex AI12-0329 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0329 Naming of FIFO_Streams packages (0000-00-00)'
  
! The AI changes the name of predefined package @code{Ada.Streams.FIFO_Streams} to @code{Ada.Streams.Storage}.
  
! RM references: 13.13.01 (9/5) 13.13.01 (9.1/5)
  @end itemize
  
! @geindex AI12-0331 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0331 Order of finalization of a subpool (0000-00-00)'
  
! Clarify that when a subpool is being finalized, objects allocated from that subpool are finalized before (not after) they cease to exist (i.e. object’s storage has been reclaimed).
  
! RM references: 13.11.05 (5/3) 13.11.05 (6/3) 13.11.05 (7/3) 13.11.05
! (7.1/4) 13.11.05 (8/3) 13.11.05 (9/3)
  @end itemize
  
! @geindex AI12-0333 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0333 Predicate checks on out parameters (0000-00-00)'
  
! If a view conversion is passed as an actual parameter corresponding to an out-mode formal parameter, and if the subtype of the formal parameter has a predicate, then no predicate check associated with the conversion is performed.
  
! RM references: 3.02.04 (31/5) 4.06 (51/4) 6.04.01 (14)
  @end itemize
  
! @geindex AI12-0335 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0335 Dynamic accessibility check needed for some requeue targets (0000-00-00)'
  
! Define a new runtime accessibility check for a corner case involving requeue statements.
  
! RM references: 9.05.04 (7/4)
  @end itemize
  
! @geindex AI12-0336 (Ada 2022 feature)
  
  
  @itemize *
  
  @item 
! `AI12-0336 Meaning of Time_Offset (0000-00-00)'
  
! The AI introduces changes to the predefined package @code{Ada.Calendar.Time_Zones}.
  
! RM references: 9.06.01 (6/2) 9.06.01 (35/2) 9.06.01 (40/2) 9.06.01 (41/2)
! 9.06.01 (42/3) 9.06.01 (90/2) 9.06.01 (91/2)
  @end itemize
  
! @geindex AI12-0337 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0337 Simple_Name(“/”) in Ada.Directories (0000-00-00)'
! 
! Clarify behavior of subprograms in the predefined package @code{Ada.Directories}. In particular, Simple_Name (“/”) should return “/” on Unix-like systems.
! 
! RM references: A.16 (47/2) A.16 (74/2) A.16 (82/3)
! @end itemize
! 
! @geindex AI12-0338 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0338 Type invariant checking and incomplete types (0000-00-00)'
! 
! Clarify that type invariants for type T are not checked for incomplete types whose completion is not available, even if that completion has components of type T.
! 
! RM references: 7.03.02 (20/5)
! @end itemize
! 
! @geindex AI12-0339 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0339 Empty function for Container aggregates (2020-08-06)'
! 
! To provide uniform support for container aggregates, all standard container
! libraries have been enhanced with a function Empty, to be used when initializing an aggregate prior to inserting the specified elements in the object being constructed. All products have been updated to remove the ambiguities that may have arisen from previous uses of entities named Empty in our sources, and the expansion of container aggregates uses Empty wherever needed.
! 
! RM references: A.18.02 (8/5) A.18.02 (12.3/5) A.18.02 (78.2/5) A.18.02
! (98.6/5) A.18.03 (6/5) A.18.03 (10.2/5) A.18.03 (50.2/5) A.18.05
! (3/5) A.18.05 (7.2/5) A.18.05 (37.3/5) A.18.05 (46/2) A.18.06
! (4/5) A.18.06 (8.2/5) A.18.06 (51.4/5) A.18.08 (3/5) A.18.08
! (8.1/5) A.18.08 (59.2/5) A.18.08 (68/2) A.18.09 (4/5) A.18.09
! (9.1/5) A.18.09 (74.2/5) A.18.10 (15.2/5) A.18.18 (8.1/5) A.18.19
! (6.1/5) A.18.20 (6/3) A.18.21 (6/3) A.18.22 (6/3) A.18.23 (6/3)
! A.18.24 (6/3) A.18.25 (8/3)
! @end itemize
! 
! @geindex AI12-0340 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0340 Put_Image should use a Text_Buffer (0000-00-00)'
! 
! Add a new predefined package Ada.Strings.Text_Buffers (along with child units) and change the definition of Put_Image attribute to refer to it.
! 
! RM references: A.04.12 (0) 4.10 (3.1/5) 4.10 (3.2/5) 4.10 (6/5) 4.10
! (25.2/5) 4.10 (28/5) 4.10 (31/5) 4.10 (41/5) H.04 (23.2/5) H.04 (23.11/5)
! @end itemize
! 
! @geindex AI12-0342 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0342 Various issues with user-defined literals (part 2) (2020-04-07)'
! 
! Compiler support is added for three new aspects (@code{Integer_Literal}, @code{Real_Literal},  and @code{String_Literal}) as described in AI12-0249 (for @code{Integer_Literal} and @code{Real_Literal}), AI12-0295 (for @code{String_Literal}), and in two follow-up AIs (AI12-0325 and AI12-0342). For pre-Ada 2022 versions of Ada, these are treated as implementation-defined aspects. Some implementation work remains, particularly in the interactions between these aspects and tagged types.
! 
! RM references: 4.02.01 (0) 3.09.02 (1/2) 6.03.01 (22)
! @end itemize
! 
! @geindex AI12-0343 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0343 Return Statement Checks (2020-04-02)'
! 
! This binding interpretation has been implemented and the accessibility,
! predicate, and tag checks prescribed by RM 6.5 are now performed at the appropriate points, as required by this AI.
! 
! RM references: 6.05 (5.12/5) 6.05 (8/4) 6.05 (8.1/3) 6.05 (21/3)
! @end itemize
! 
! @geindex AI12-0345 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0345 Dynamic accessibility of explicitly aliased parameters (0000-00-00)'
! 
! Further clarify (after AI12-0277) accessibility rules for explicitly aliased parameters.
! 
! RM references: 3.10.02 (5) 3.10.02 (7/4) 3.10.02 (10.5/3) 3.10.02 (13.4/4)
! 3.10.02 (19.2/5) 3.10.02 (21)
! @end itemize
! 
! @geindex AI12-0350 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0350 Swap for Indefinite_Holders (0000-00-00)'
! 
! Add a @code{Swap} procedure to the predefined package
! @code{Ada.Containers.Indefinite_Holders}. The AI also contains implementation advice for @code{Ada.Containers.Bounded_Indefinite_Holders}, a package that is not implemented by GNAT.
! 
! RM references: A.18.18 (22/5) A.18.18 (67/5) A.18.18 (73/3) A.18.32 (13/5)
! @end itemize
! 
! @geindex AI12-0351 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0351 Matching for actuals for formal derived types (2020-04-03)'
! 
! This binding interpretation requires the compiler to checks
! that an actual subtype in a generic parameter association of an instantiation is statically compatible (even when the actual is unconstrained) with the ancestor of an associated nondiscriminated generic formal derived type.
! 
! RM references: 12.05.01 (7) 12.05.01 (8)
! @end itemize
! 
! @geindex AI12-0352 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0352 Early derivation and equality of untagged types (2020-07-09)'
! 
! AI12-0352 clarifies that declaring a user-defined primitive equality operation for a record type T is illegal if it occurs after a type has been derived from T.
! 
! RM references: 4.05.02 (9.8/4)
! @end itemize
! 
! @geindex AI12-0356 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0356 Root_Storage_Pool_With_Subpools should have Preelaborable_Initialization (0000-00-00)'
! 
! Add Preelaborable_Initialization pragmas for predefined types @code{Root_Storage_Pool_With_Subpools} and @code{Root_Subpool}.
! 
! RM references: 13.11.04 (4/3) 13.11.04 (5/3)
! @end itemize
! 
! @geindex AI12-0363 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0363 Fixes for Atomic and Volatile (2020-09-08)'
! 
! This amendment has been implemented under the @code{-gnat2022} switch and the compiler now supports the @code{Full_Access_Only} aspect, which is mostly equivalent to GNAT’s @code{Volatile_Full_Access}.
! 
! RM references: 3.10.02 (26/3) 9.10 (1/5) C.06 (6.4/3) C.06 (6.10/3) C.06
! (8.1/4) C.06 (12/5) C.06 (12.1/5) C.06 (13.3/5) C.06 (19.1/5)
! @end itemize
! 
! @geindex AI12-0364 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0364 Add a modular atomic arithmetic package (0000-00-00)'
! 
! Generalize support for atomic integer operations to extend to modular types. Add new predefined generic package,
! @code{System.Atomic_Operations.Modular_Arithmetic}.
! 
! RM references: C.06.05 (0) C.06.04 (1/5) C.06.04 (2/5) C.06.04 (3/5)
! C.06.04 (9/5)
! @end itemize
! 
! @geindex AI12-0366 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0366 Changes to Big_Integer and Big_Real (0000-00-00)'
! 
! Simplify @code{Big_Integer `@w{`}and `@w{`}Big_Real} specs by eliminating explicit support for creating “invalid” values. No more
! @code{Optional_Big_[Integer,Real]} types.
! 
! RM references: A.05.06 (0) A.05.07 (0)
! @end itemize
! 
! @geindex AI12-0367 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0367 Glitches in aspect specifications (0000-00-00)'
! 
! The AI clarifies a few wording omissions. For example, a specified Small value for a fixed point type has to be positive.
! 
! RM references: 3.05.09 (8/2) 3.05.10 (2/1) 13.01 (9.1/5) 13.14 (10)
! @end itemize
! 
! @geindex AI12-0368 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0368 Declare expressions can be static (2020-05-30)'
! 
! AI12-0368 allows declare expressions to be static in Ada 2022.
! 
! RM references: 4.09 (8) 4.09 (12.1/3) 4.09 (17) 6.01.01 (24.2/5) 6.01.01
! (24.3/5) 6.01.01 (24.4/5) 6.01.01 (24.5/5) C.04 (9)
! @end itemize
! 
! @geindex AI12-0369 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0369 Relaxing barrier restrictions (2020-03-25)'
! 
! The definitions of the @code{Simple_Barriers} and @code{Pure_Barriers} restrictions were modified by this AI, replacing uses of “statically denotes” with “statically names”. This means that in many cases (but not all) a barrier expression that references a subcomponent of a component of the protected type while subject to either of the two restrictions is now allowed; with the previous restriction definitions, such a barrier expression would not have been legal.
! 
! RM references: D.07 (1.3/5) D.07 (10.12/5)
! @end itemize
! 
! @geindex AI12-0372 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0372 Static accessibility of “master of the call” (0000-00-00)'
! 
! Add an extra compile-time accessibility check for explicitly aliased parameters needed to prevent dangling references.
! 
! RM references: 3.10.02 (10.5/5) 3.10.02 (19.3/4) 6.04.01 (6.4/3)
! @end itemize
! 
! @geindex AI12-0373 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0373 Bunch of fixes (0000-00-00)'
! 
! Small clarifications to various RM entries with minor impact on compiler implementation.
! 
! RM references: 3.01 (1) 4.02 (4) 4.02 (8/2) 4.02.01 (3/5) 4.02.01 (4/5)
! 4.02.01 (5/5) 4.09 (17.3/5) 6.01.01 (41/5) 8.05.04 (4/3) 13.01.01
! (4/3) 13.01.01 (11/3) 13.14 (3/5)
! @end itemize
! 
! @geindex AI12-0376 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0376 Representation changes finally allowed for untagged derived types (0000-00-00)'
! 
! A change of representation for a derived type is allowed in some previously-illegal cases where a change of representation is required to implement a call to a derived subprogram.
! 
! RM references: 13.01 (10/4)
! @end itemize
! 
! @geindex AI12-0377 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0377 View conversions and out parameters of types with Default_Value revisited (2020-06-17)'
! 
! This AI clarifies that an actual of an out parameter that is a view conversion
! is illegal if either the target or operand type has Default_Value specified while the other does not.
! 
! RM references: 6.04.01 (5.1/4) 6.04.01 (5.2/4) 6.04.01 (5.3/4) 6.04.01
! (13.1/4) 6.04.01 (13.2/4) 6.04.01 (13.3/4) 6.04.01 (13.4/4) 6.04.01 (15/3)
! @end itemize
! 
! @geindex AI12-0381 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0381 Tag of a delta aggregate (0000-00-00)'
! 
! In the case of a delta aggregate of a specific tagged type, the tag of the aggregate comes from the specific type (as opposed to somehow from the base object).
! 
! RM references: 4.03.04 (14/5)
! @end itemize
! 
! @geindex AI12-0382 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0382 Loosen type-invariant overriding requirement of AI12-0042-1 (0000-00-00)'
! 
! The AI relaxes some corner-case legality rules about type invariants that were added by AI12-0042-1.
! 
! RM references: 7.3.2(6.1/4)
! @end itemize
! 
! @geindex AI12-0383 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0383 Renaming values (2020-06-17)'
! 
! This AI allow names that denote values rather than objects to nevertheless be
! renamed using an object renaming.
! 
! RM references: 8.05.01 (1) 8.05.01 (4) 8.05.01 (4.1/2) 8.05.01 (6/2) 8.05.01 (8)
! @end itemize
! 
! @geindex AI12-0384-2 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0384-2 Fixups for Put_Image and Text_Buffers (2021-04-29)'
! 
! In GNAT’s initial implementation of the Ada 2022 @code{Put_Image} aspect and
! attribute, buffering was performed using a GNAT-defined package,
! @code{Ada.Strings.Text_Output}. Ada 2022 requires a different package, Ada.`@w{`}Strings.Text_Buffers`@w{`}, for this role, and that package is now provided, and the older package is eliminated.
! 
! RM references: 4.10 (0) A.04.12 (0)
! @end itemize
! 
! @geindex AI12-0385 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0385 Predefined shifts and rotates should be static (0000-00-00)'
! 
! This AI allows Shift and Rotate operations in static expressions. GNAT implements this AI partially.
! 
! RM references: 4.09 (20)
! @end itemize
! 
! @geindex AI12-0389 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0389 Ignoring unrecognized aspects (2020-10-08)'
! 
! Two new restrictions, @code{No_Unrecognized_Aspects} and @code{No_Unrecognized_Pragmas}, are available to make the compiler emit error messages on unrecognized pragmas and aspects.
! 
! RM references: 13.01.01 (38/3) 13.12.01 (6.3/3)
! @end itemize
! 
! @geindex AI12-0394 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0394 Named Numbers and User-Defined Numeric Literals (2020-10-05)'
! 
! Ada 2022 allows using integer named numbers with types that have an
! @code{Integer_Literal} aspect. Similarly, real named numbers may now be used with types that have a @code{Real_Literal} aspect with an overloading that takes two strings, to be used in particular  with
! @code{Ada.Numerics.Big_Numbers.Big_Reals}.
! 
! RM references: 3.03.02 (3) 4.02.01 (4/5) 4.02.01 (8/5) 4.02.01 (12/5)
! 4.02.01 (13/5) 4.09 (5)
! @end itemize
! 
! @geindex AI12-0395 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0395 Allow aspect_specifications on formal parameters (0000-00-00)'
! 
! Change syntax rules to allow aspect_specifications on formal parameters, if an implementation if an implementation wants to define one. Currently, GNAT doesn’t define any such aspect_specifications.
! 
! RM references: 6.01 (15/3)
! @end itemize
! 
! @geindex AI12-0397 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0397 Default_Initial_Condition applied to derived type (2020-12-09)'
! 
! The compiler now implements the rules for resolving @code{Default_Initial_Condition}
! expressions that involve references to the current instance of types with the aspect, as specified by this AI. The type of the current instance is defined to be like a formal derived type, so for a derived type that inherits the aspect, a call passing the current instance to a primitive means that the call will resolve to invoke the corresponding primitive of the descendant type. This also now permits calls to abstract primitives to occur within the aspect expression of an abstract type.
! 
! RM references: 7.03.03 (3/5) 7.03.03 (6/5) 7.03.03 (8/5)
! @end itemize
! 
! @geindex AI12-0398 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0398 Most declarations should have aspect specifications (2020-11-19)'
! 
! It is now possible to specify aspects for discriminant specifications, extended return object declarations, and entry index specifications. This is an extension added for Ada 2022 by this AI.
! 
! RM references: 3.07 (5/2) 6.03.01 (25) 6.05 (2.1/3) 9.05.02 (8)
! @end itemize
! 
! @geindex AI12-0399 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0399 Aspect specification for Preelaborable_Initialization (0000-00-00)'
! 
! Semantics-preserving presentation change. Replace @code{Preelaborable_Initialization} pragmas with equivalent aspect specs in the listed predefined packages. GNAT follows the guidance of this AI partially.
! 
! RM references: 9.05 (53/5) 3.09 (6/5) 7.06 (5/2) 7.06 (7/2) 11.04.01 (2/5)
! 11.04.01 (3/2) 13.11 (6/2) 13.11.04 (4/5) 13.11.04 (5/5) 13.13.01
! (3/2) A.04.02 (4/2) A.04.02 (20/2) A.04.05 (4/2) A.04.07 (4/2)
! A.04.07 (20/2) A.04.08 (4/2) A.04.08 (20/2) A.12.01 (5/4) A.18.02
! (8/5) A.18.02 (9/2) A.18.02 (79.2/5) A.18.02 (79.3/5) A.18.03
! (6/5) A.18.03 (7/2) A.18.03 (50.2/5) A.18.03 (50.3/5) A.18.05
! (3/5) A.18.05 (4/2) A.18.05 (37.3/5) A.18.05 (37.4/5) A.18.06
! (4/5) A.18.06 (5/2) A.18.06 (51.4/5) A.18.06 (51.5/5) A.18.08
! (3/5) A.18.08 (4/2) A.18.08 (58.2/5) A.18.08 (58.3/5) A.18.09
! (4/5) A.18.09 (5/2) A.18.09 (74.2/5) A.18.09 (74.3/5) A.18.10
! (8/5) A.18.10 (9/3) A.18.10 (70.2/5) A.18.10 (70.3/5) A.18.18
! (6/5) B.03.01 (5/2) C.07.01 (2/5) G.01.01 (4/2)
! @end itemize
! 
! @geindex AI12-0400 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0400 Ambiguities associated with Vector Append and container aggregates (0000-00-00)'
! 
! Change the names of subprograms in the predefined Vector containers from @code{Append} to @code{Append_Vector} and from @code{Prepend} to @code{Prepend_Vector} in order to resolve some ambiguity problems. GNAT adds the subprograms with new names but also keeps the old ones for backward compatibility.
! 
! RM references: A.18.02 (8/5) A.18.02 (36/5) A.18.02 (37/5) A.18.02 (38/5)
! A.18.02 (44/5) A.18.02 (46/5) A.18.02 (47/5) A.18.02 (58/5)
! A.18.02 (79.2/5) A.18.02 (150/5) A.18.02 (151/5) A.18.02 (152/5)
! A.18.02 (153/5) A.18.02 (154/5) A.18.02 (155/5) A.18.02 (156/5)
! A.18.02 (168/5) A.18.02 (169/5) A.18.02 (172/5) A.18.02 (173/5)
! A.18.02 (174/5) A.18.02 (175.1/5) A.18.03 (23/5) A.18.03 (23.1/5)
! A.18.03 (58.2/5) A.18.03 (96/5) A.18.03 (97.1/5)
! @end itemize
! 
! @geindex AI12-0401 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0401 Renaming of qualified expression of variable (2020-10-31)'
! 
! Ada 2022 AI12-0401 restricts renaming of a qualified expression to cases where
! the operand is a constant, or the target subtype statically matches the nominal subtype of the operand, or is unconstrained with no predicates, to prevent setting variables to values outside their range or constraints.
! 
! RM references: 3.03 (23.2/3) 8.05.01 (4.7/5) 8.05.01 (5/3)
! @end itemize
! 
! @geindex AI12-0409 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0409 Preelaborable_Initialization and bounded containers (2021-06-23)'
! 
! As defined by this AI, the @code{Preelaborable_Initializatio} aspect now has a
! corresponding attribute of the same name. Types declared within a generic package specification are permitted to specify the expression of a @code{Prelaborable_Initialization} aspect by including one or more references to the attribute applied to a formal private or formal derived type conjoined by @code{and} operators. This permits the full type of a private type with such an aspect expression to have components of the named formal types, and such a type will have preelaborable initialization in an instance when the
! actual types for all referenced formal types have preelaborable initialization.
! 
! RM references: 10.02.01 (4.1/2) 10.02.01 (4.2/2) 10.02.01 (11.1/2)
! 10.02.01 (11.2/2) 10.02.01 (11.6/2) 10.02.01 (11.7/2) 10.02.01
! (11.8/2) 13.01 (11/3) A.18.19 (5/5) A.18.20 (5/5) A.18.21 (5/5)
! A.18.22 (5/5) A.18.23 (5/5) A.18.24 (5/5) A.18.25 (5/5) A.18.32
! (6/5) J.15.14 (0)
! @end itemize
! 
! @geindex AI12-0411 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0411 Add “bool” to Interfaces.C (0000-00-00)'
! 
! RM references: B.03 (13) B.03 (43/2) B.03 (65.1/4)
! @end itemize
! 
! @geindex AI12-0412 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0412 Abstract Pre/Post’Class on primitive of abstract type (2021-05-19)'
! 
! In Ada 2022, by AI12-0412, it’s legal to specify Pre’Class and Post’Class
! aspects on nonabstract primitive subprograms of an abstract type, but if the
! expression of such an aspect is nonstatic, then it’s illegal to make a nondispatching call to such a primitive, to apply @code{'Access} to it, or to pass such a primitive as an actual subprogram for a concrete formal subprogram in a generic instantiation.
! 
! RM references: 6.01.01 (18.2/4)
! @end itemize
! 
! @geindex AI12-0413 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0413 Reemergence of “=” when defined to be abstract (0000-00-00)'
! 
! The AI clarifies rules about operator reemergence in instances, and nondispatching calls to abstract subprograms.
! 
! RM references: 3.09.03 (7) 4.05.02 (14.1/3) 4.05.02 (24.1/3) 12.05 (8/3)
! @end itemize
! 
! @geindex AI12-0423 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0423 Aspect inheritance fixups (0000-00-00)'
! 
! Clarify that the No_Return aspect behaves as one would expect for an inherited subprogram and that inheritance works as one would expect for a multi-part aspect whose value is specified via an aggregate (e.g., the Aggregate aspect).
! 
! RM references: 6.05.01 (3.3/3) 13.01 (15.7/5) 13.01 (15.8/5)
! @end itemize
! 
! @geindex AI12-0432 (Ada 2022 feature)
! 
! 
! @itemize *
! 
! @item 
! `AI12-0432 View conversions of assignments and predicate checks (2021-05-05)'
! 
! When a predicate applies to a tagged type, a view conversion to that type
! normally requires a predicate check. However, as specified by AI12-0432, when the view conversion appears as the target of an assignment, a predicate check is not applied to the object in the conversion.
! 
! RM references: 3.02.04 (31/5) 4.06 (51.1/5)
! @end itemize
! 
! @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2022 Features,Top
! @anchor{gnat_rm/gnat_language_extensions doc}@anchor{446}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{447}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{448}
  @chapter GNAT language extensions
  
  
*************** These features might be removed or heavi
*** 29179,29185 ****
  @end menu
  
  @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{448}
  @section How to activate the extended GNAT Ada superset
  
  
--- 30454,30460 ----
  @end menu
  
  @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{449}
  @section How to activate the extended GNAT Ada superset
  
  
*************** for use in playground experiments.
*** 29220,29226 ****
  @end cartouche
  
  @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{449}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6a}
  @section Curated Extensions
  
  
--- 30495,30501 ----
  @end cartouche
  
  @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{44a}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6a}
  @section Curated Extensions
  
  
*************** Features activated via @code{-gnatX} or
*** 29241,29247 ****
  @end menu
  
  @node Local Declarations Without Block,Deep delta Aggregates,,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{44a}
  @subsection Local Declarations Without Block
  
  
--- 30516,30522 ----
  @end menu
  
  @node Local Declarations Without Block,Deep delta Aggregates,,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{44b}
  @subsection Local Declarations Without Block
  
  
*************** And as such the second `@w{`}A`@w{`} dec
*** 29334,29340 ****
  @end cartouche
  
  @node Deep delta Aggregates,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{44b}
  @subsection Deep delta Aggregates
  
  
--- 30609,30615 ----
  @end cartouche
  
  @node Deep delta Aggregates,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{44c}
  @subsection Deep delta Aggregates
  
  
*************** The syntax of delta aggregates in the ex
*** 29356,29362 ****
  @end menu
  
  @node Syntax,Legality Rules,,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions syntax}@anchor{44c}
  @subsubsection Syntax
  
  
--- 30631,30637 ----
  @end menu
  
  @node Syntax,Legality Rules,,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions syntax}@anchor{44d}
  @subsubsection Syntax
  
  
*************** array_subcomponent_choice ::=
*** 29402,29408 ****
  @end example
  
  @node Legality Rules,Dynamic Semantics,Syntax,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{44d}
  @subsubsection Legality Rules
  
  
--- 30677,30683 ----
  @end example
  
  @node Legality Rules,Dynamic Semantics,Syntax,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{44e}
  @subsubsection Legality Rules
  
  
*************** the object denoted by the base_expressio
*** 29439,29445 ****
  @end enumerate
  
  @node Dynamic Semantics,Examples,Legality Rules,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{44e}
  @subsubsection Dynamic Semantics
  
  
--- 30714,30720 ----
  @end enumerate
  
  @node Dynamic Semantics,Examples,Legality Rules,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{44f}
  @subsubsection Dynamic Semantics
  
  
*************** and assigned to the corresponding subcom
*** 29496,29502 ****
  @end itemize
  
  @node Examples,,Dynamic Semantics,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions examples}@anchor{44f}
  @subsubsection Examples
  
  
--- 30771,30777 ----
  @end itemize
  
  @node Examples,,Dynamic Semantics,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions examples}@anchor{450}
  @subsubsection Examples
  
  
*************** end;
*** 29524,29530 ****
  @end example
  
  @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Deep delta Aggregates,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{450}
  @subsection Fixed lower bounds for array types and subtypes
  
  
--- 30799,30805 ----
  @end example
  
  @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Deep delta Aggregates,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{451}
  @subsection Fixed lower bounds for array types and subtypes
  
  
*************** lower bound of unconstrained array forma
*** 29575,29581 ****
  ranges with static fixed lower bounds.
  
  @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{451}
  @subsection Prefixed-view notation for calls to primitive subprograms of untagged types
  
  
--- 30850,30856 ----
  ranges with static fixed lower bounds.
  
  @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{452}
  @subsection Prefixed-view notation for calls to primitive subprograms of untagged types
  
  
*************** pragma Assert (V.Nth_Element(1) = 42);
*** 29625,29631 ****
  @end example
  
  @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{452}
  @subsection Expression defaults for generic formal functions
  
  
--- 30900,30906 ----
  @end example
  
  @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{453}
  @subsection Expression defaults for generic formal functions
  
  
*************** If the default is used (i.e. there is no
*** 29656,29662 ****
  then calls to Copy in the instance will simply return Item.
  
  @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{453}
  @subsection String interpolation
  
  
--- 30931,30937 ----
  then calls to Copy in the instance will simply return Item.
  
  @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{454}
  @subsection String interpolation
  
  
*************** a double quote is " and an open brace is
*** 29823,29829 ****
  @end example
  
  @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{454}
  @subsection Constrained attribute for generic objects
  
  
--- 31098,31104 ----
  @end example
  
  @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{455}
  @subsection Constrained attribute for generic objects
  
  
*************** The @code{Constrained} attribute is perm
*** 29831,29837 ****
  result indicates whether the corresponding actual is constrained.
  
  @node Static aspect on intrinsic functions,First Controlling Parameter,Constrained attribute for generic objects,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{455}
  @subsection @code{Static} aspect on intrinsic functions
  
  
--- 31106,31112 ----
  result indicates whether the corresponding actual is constrained.
  
  @node Static aspect on intrinsic functions,First Controlling Parameter,Constrained attribute for generic objects,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{456}
  @subsection @code{Static} aspect on intrinsic functions
  
  
*************** and the compiler will evaluate some of t
*** 29840,29846 ****
  particular the @code{Shift_Left} and @code{Shift_Right} intrinsics.
  
  @node First Controlling Parameter,,Static aspect on intrinsic functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{456}
  @subsection First Controlling Parameter
  
  
--- 31115,31121 ----
  particular the @code{Shift_Left} and @code{Shift_Right} intrinsics.
  
  @node First Controlling Parameter,,Static aspect on intrinsic functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{457}
  @subsection First Controlling Parameter
  
  
*************** The result of a function is never a cont
*** 29940,29946 ****
  @end itemize
  
  @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6b}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{457}
  @section Experimental Language Extensions
  
  
--- 31215,31221 ----
  @end itemize
  
  @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6b}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{458}
  @section Experimental Language Extensions
  
  
*************** Features activated via @code{-gnatX0} or
*** 29960,29970 ****
  * Inference of Dependent Types in Generic Instantiations:: 
  * External_Initialization Aspect:: 
  * Finally construct:: 
  
  @end menu
  
  @node Conditional when constructs,Implicit With,,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{458}
  @subsection Conditional when constructs
  
  
--- 31235,31246 ----
  * Inference of Dependent Types in Generic Instantiations:: 
  * External_Initialization Aspect:: 
  * Finally construct:: 
+ * Continue statement:: 
  
  @end menu
  
  @node Conditional when constructs,Implicit With,,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{459}
  @subsection Conditional when constructs
  
  
*************** end;
*** 30033,30039 ****
  @end example
  
  @node Implicit With,Storage Model,Conditional when constructs,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{459}
  @subsection Implicit With
  
  
--- 31309,31315 ----
  @end example
  
  @node Implicit With,Storage Model,Conditional when constructs,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{45a}
  @subsection Implicit With
  
  
*************** end;
*** 30050,30056 ****
  @end example
  
  @node Storage Model,Attribute Super,Implicit With,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{45a}
  @subsection Storage Model
  
  
--- 31326,31332 ----
  @end example
  
  @node Storage Model,Attribute Super,Implicit With,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{45b}
  @subsection Storage Model
  
  
*************** memory models, in particular to support
*** 30067,30073 ****
  @end menu
  
  @node Aspect Storage_Model_Type,Aspect Designated_Storage_Model,,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{45b}
  @subsubsection Aspect Storage_Model_Type
  
  
--- 31343,31349 ----
  @end menu
  
  @node Aspect Storage_Model_Type,Aspect Designated_Storage_Model,,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{45c}
  @subsubsection Aspect Storage_Model_Type
  
  
*************** end CUDA_Memory;
*** 30201,30207 ****
  @end example
  
  @node Aspect Designated_Storage_Model,Legacy Storage Pools,Aspect Storage_Model_Type,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{45c}
  @subsubsection Aspect Designated_Storage_Model
  
  
--- 31477,31483 ----
  @end example
  
  @node Aspect Designated_Storage_Model,Legacy Storage Pools,Aspect Storage_Model_Type,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{45d}
  @subsubsection Aspect Designated_Storage_Model
  
  
*************** begin
*** 30279,30285 ****
  @end example
  
  @node Legacy Storage Pools,,Aspect Designated_Storage_Model,Storage Model
! @anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{45d}
  @subsubsection Legacy Storage Pools
  
  
--- 31555,31561 ----
  @end example
  
  @node Legacy Storage Pools,,Aspect Designated_Storage_Model,Storage Model
! @anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{45e}
  @subsubsection Legacy Storage Pools
  
  
*************** type Acc is access Integer_Array with St
*** 30330,30336 ****
  can still be accepted as a shortcut for the new syntax.
  
  @node Attribute Super,Simpler Accessibility Model,Storage Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{45e}
  @subsection Attribute Super
  
  
--- 31606,31612 ----
  can still be accepted as a shortcut for the new syntax.
  
  @node Attribute Super,Simpler Accessibility Model,Storage Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{45f}
  @subsection Attribute Super
  
  
*************** end;
*** 30365,30371 ****
  @end example
  
  @node Simpler Accessibility Model,Case pattern matching,Attribute Super,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{45f}
  @subsection Simpler Accessibility Model
  
  
--- 31641,31647 ----
  @end example
  
  @node Simpler Accessibility Model,Case pattern matching,Attribute Super,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{460}
  @subsection Simpler Accessibility Model
  
  
*************** All of the refined rules are compatible
*** 30396,30402 ****
  @end menu
  
  @node Stand-alone objects,Subprogram parameters,,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{460}
  @subsubsection Stand-alone objects
  
  
--- 31672,31678 ----
  @end menu
  
  @node Stand-alone objects,Subprogram parameters,,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{461}
  @subsubsection Stand-alone objects
  
  
*************** of the RM 4.6 rule “The accessibility
*** 30444,30450 ****
  statically deeper than that of the target type …”.
  
  @node Subprogram parameters,Function results,Stand-alone objects,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{461}
  @subsubsection Subprogram parameters
  
  
--- 31720,31726 ----
  statically deeper than that of the target type …”.
  
  @node Subprogram parameters,Function results,Stand-alone objects,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{462}
  @subsubsection Subprogram parameters
  
  
*************** end;
*** 30537,30543 ****
  @end example
  
  @node Function results,,Subprogram parameters,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions function-results}@anchor{462}
  @subsubsection Function results
  
  
--- 31813,31819 ----
  @end example
  
  @node Function results,,Subprogram parameters,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions function-results}@anchor{463}
  @subsubsection Function results
  
  
*************** end;
*** 30665,30671 ****
  @end example
  
  @node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler Accessibility Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{463}
  @subsection Case pattern matching
  
  
--- 31941,31947 ----
  @end example
  
  @node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler Accessibility Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{464}
  @subsection Case pattern matching
  
  
*************** message generated in such cases is usual
*** 30795,30875 ****
  case statement with composite selector type”.
  
  @node Mutably Tagged Types with Size’Class Aspect,Generalized Finalization,Case pattern matching,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{464}
  @subsection Mutably Tagged Types with Size’Class Aspect
  
  
! The @code{Size'Class} aspect can be applied to a tagged type to specify a size
! constraint for the type and its descendants. When this aspect is specified
! on a tagged type, the class-wide type of that type is considered to be a
! “mutably tagged” type - meaning that objects of the class-wide type can have
! their tag changed by assignment from objects with a different tag.
! 
! Example:
! 
! @example
! type Base is tagged null record
!     with Size'Class => 16 * 8;  -- Size in bits (128 bits, or 16 bytes)
! 
! type Derived_Type is new Base with record
!    Data_Field : Integer;
! end record;  -- ERROR if Derived_Type exceeds 16 bytes
! @end example
! 
! Class-wide types with a specified @code{Size'Class} can be used as the type of
! array components, record components, and stand-alone objects.
  
! @example
! Inst : Base'Class;
! type Array_of_Base is array (Positive range <>) of Base'Class;
! @end example
  
! If the @code{Size'Class} aspect is specified for a type @code{T}, then every
! specific descendant of @code{T} [redundant: (including @code{T})]
  
  
! @itemize -
  
  @item 
  shall have a Size that does not exceed the specified value; and
  
  @item 
! shall be undiscriminated; and
  
  @item 
! shall have no composite subcomponent whose subtype is subject to a
! dynamic constraint; and
  
  @item 
! shall have no interface progenitors; and
  
  @item 
  shall not have a tagged partial view other than a private extension; and
  
  @item 
! shall not have a statically deeper accessibility level than that of @code{T}.
  @end itemize
  
! In addition to the places where Legality Rules normally apply (see 12.3),
! these legality rules apply also in the private part and in the body of an
! instance of a generic unit.
  
! For any subtype @code{S} that is a subtype of a descendant of @code{T}, @code{S'Class'Size} is
! defined to yield the specified value [redundant:,  although @code{S'Class'Size} is
! not a static expression].
  
! A class-wide descendant of a type with a specified @code{Size'Class} aspect is
! defined to be a “mutably tagged” type. Any subtype of a mutably tagged type is,
! by definition, a definite subtype (RM 3.3 notwithstanding). Default
! initialization of an object of such a definite subtype proceeds as for the
! corresponding specific type, except that @code{Program_Error} is raised if the
! specific type is abstract. [In particular, the initial tag of the object is
! that of the corresponding specific type.]
  
! An object of a tagged type is defined to be “tag-constrained” if it is
  
  
! @itemize -
  
  @item 
  an object whose type is not mutably tagged; or
--- 32071,32181 ----
  case statement with composite selector type”.
  
  @node Mutably Tagged Types with Size’Class Aspect,Generalized Finalization,Case pattern matching,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{465}
  @subsection Mutably Tagged Types with Size’Class Aspect
  
  
! For a specific tagged nonformal type T that satisfies some conditions
! described later in this section, the universal-integer-valued type-related
! representation aspect @code{Size'Class} may be specified; any such specified
! aspect value shall be static.
  
! Specifying this aspect imposes an upper bound on the sizes of all specific
! descendants of T (including T itself). T’Class (but not T) is then said to be
! a “mutably tagged” type - meaning that T’Class is a definite subtype and that
! the tag of a variable of type T’Class may be modified by assignment in some
! cases described later in this section. An inherited @code{Size'Class} aspect
! value may be overridden, but not with a larger value.
  
! If the @code{Size'Class} aspect is specified for a type T, then every specific
! descendant of T (including T itself)
  
  
! @itemize *
  
  @item 
  shall have a Size that does not exceed the specified value; and
  
  @item 
! shall have a (possibly inherited) @code{Size'Class} aspect that does not exceed
! the specifed value; and
  
  @item 
! shall be undiscriminated; and
  
  @item 
! shall have no composite subcomponent whose subtype is subject to a nonstatic
! constraint; and
  
  @item 
  shall not have a tagged partial view other than a private extension; and
  
  @item 
! shall not be a descendant of an interface type; and
! 
! @item 
! shall not have a statically deeper accessibility level than that of T.
  @end itemize
  
! If the @code{Size'Class} aspect is not specified for a type T (either explicitly
! or by inheritance), then it shall not be specified for any descendant of T.
  
! Example:
  
! @example
! type Root_Type is tagged null record with Size'Class => 16 * 8;
  
! type Derived_Type is new Root_Type with record
!    Stuff : Some_Type;
! end record;  -- ERROR if Derived_Type exceeds 16 bytes
! @end example
  
+ Because any subtype of a mutably tagged type is definite, it can be used as a
+ component subtype for enclosing array or record types, as the subtype of a
+ default-initialized stand-alone object, or as the subtype of an uninitialized
+ allocator, as in this example:
  
! @example
! Obj : Root_Type'Class;
! type Array_of_Roots is array (Positive range <>) of Root_Type'Class;
! @end example
! 
! Default initialization of an object of such a definite subtype proceeds as
! for the corresponding specific type, except that Program_Error is raised if
! the specific type is abstract. In particular, the initial tag of the object
! is that of the corresponding specific type.
! 
! There is a general design principle that if a type has a tagged partial view,
! then the type’s @code{Size'Class} aspect (or lack thereof) should be determinable
! by looking only at the partial view. That provides the motivation for the
! rules of the next two paragraphs.
! 
! If a type has a tagged partial view, then a @code{Size'Class} aspect specification
! may be provided only at the point of the partial view declaration (in other
! words, no such aspect specification may be provided when the full view of
! the type is declared). All of the above rules (in particular, the rule that
! an overriding @code{Size'Class} aspect value shall not be larger than the
! overridden inherited value) are also enforced when the full view (which may
! have a different ancestor type than that of the partial view) is declared.
! If a partial view for a type inherits a @code{Size'Class} aspect value and does
! not override that value with an explicit aspect specification, then the
! (static) aspect values inherited by the partial view and by the full view
! shall be equal.
! 
! An actual parameter of an instantiation whose corresponding formal parameter
! is a formal tagged private type shall not be either mutably tagged or the
! corresponding specific type of a mutably tagged type.
! 
! For the legality rules in this section, the RM 12.3(11) rule about legality
! checking in the visible part and formal part of an instance is extended (in
! the same way that it is extended in many other places in the RM) to include
! the private part of an instance.
! 
! An object (or a view thereof) of a tagged type is defined to be
! “tag-constrained” if it is
! 
! 
! @itemize *
  
  @item 
  an object whose type is not mutably tagged; or
*************** a constant object; or
*** 30881,30932 ****
  a view conversion of a tag-constrained object; or
  
  @item 
! a formal @code{in out} or @code{out} parameter whose corresponding
! actual parameter is tag-constrained.
  @end itemize
  
! In the case of an assignment to a tagged variable that
! is not tag-constrained, no check is performed that the tag of the value of
! the expression is the same as that of the target (RM 5.2 notwithstanding).
  Instead, the tag of the target object becomes that of the source object of
! the assignment.
  An assignment to a composite object similarly copies the tags of any
! subcomponents of the source object that have a mutably-tagged type.
! 
! The @code{Constrained} attribute is defined for any name denoting an object of a
! mutably tagged type (RM 3.7.2 notwithstanding). In this case, the Constrained
! attribute yields the value True if the object is tag-constrained and False
! otherwise.
  
! Renaming is not allowed (see 8.5.1) for a type conversion having an operand of
! a mutably tagged type @code{MT} and a target type @code{TT} such that @code{TT'Class}
! does not cover @code{MT}, nor for any part of such an object, nor for any slice
! of such an object. This rule also applies in any context where a name is
! required to be one for which “renaming is allowed” (for example, see RM 12.4).
  
! A name denoting a view of a variable of a mutably tagged type shall not
! occur as an operative constituent of the prefix of a name denoting a
! prefixed view of a callable entity, except as the callee name in a call to
! the callable entity.
  
! For a type conversion between two general access types, either both or neither
! of the designated types shall be mutably tagged. For an @code{Access} (or
! @code{Unchecked_Access}) attribute reference, the designated type of the type of the
! attribute reference and the type of the prefix of the attribute shall either
! both or neither be mutably tagged.
  
  The execution of a construct is erroneous if the construct has a constituent
  that is a name denoting a subcomponent of a tagged object and the object’s
! tag is changed by this execution between evaluating the name and the last use
! (within this execution) of the subcomponent denoted by the name.
  
! If the type of a formal parameter is a specific tagged type then the execution
  of the call is erroneous if the tag of the actual is changed while the formal
! parameter exists (that is, before leaving the corresponding callable
! construct).
  
  @node Generalized Finalization,No_Raise aspect,Mutably Tagged Types with Size’Class Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{465}
  @subsection Generalized Finalization
  
  
--- 32187,32248 ----
  a view conversion of a tag-constrained object; or
  
  @item 
! a view conversion to a type that is not a descendant of the operand’s
! type; or
! 
! @item 
! a formal in out or out parameter whose corresponding actual parameter is
! tag-constrained; or
! 
! @item 
! a dereference of an access value.
  @end itemize
  
! In the case of an assignment to a tagged variable that is not
! tag-constrained, no check is performed that the tag of the value
! of the expression is the same as that of the target (RM 5.2 notwithstanding).
  Instead, the tag of the target object becomes that of the source object of
! the assignment. Note that the tag of an object of a mutably tagged type MT
! will always be the tag of some specific type that is a descendant of MT.
  An assignment to a composite object similarly copies the tags of any
! subcomponents of the source object that have a mutably tagged type.
  
! The Constrained attribute is defined for any name denoting an object of a
! mutably tagged type (RM 3.7.2 notwithstanding). In this case, the
! Constrained attribute yields the value True if the object is
! tag-constrained and False otherwise.
  
! Renaming is not allowed (see RM 8.5.1) for a type conversion having an operand
! of a mutably tagged type MT and a target type TT such that TT (or its
! corresponding specific type if TT is class-wide) is not an ancestor of MT
! (this is sometimes called a “downward” conversion), nor for any part of
! such an object, nor for any slice of any part of such an object. This
! rule also applies in any context where a name is required to be one for
! which “renaming is allowed” (for example, see RM 12.4).
! [This is analogous to the way that renaming is not allowed for a
! discriminant-dependent component of an unconstrained variable.]
  
! A name denoting a view of a variable of a mutably tagged type shall not occur
! as an operative constituent of the prefix of a name denoting a prefixed
! view of a callable entity, except as the callee name in a call to the
! callable entity. This disallows, for example, renaming such a prefixed view,
! passing the prefixed view name as a generic actual parameter, or using the
! prefixed view name as the prefix of an attribute.
  
  The execution of a construct is erroneous if the construct has a constituent
  that is a name denoting a subcomponent of a tagged object and the object’s
! tag is changed by this execution between evaluating the name and the last
! use (within this execution) of the subcomponent denoted by the name.
! This is analogous to the RM 3.7.2(4) rule about discriminant-dependent
! subcomponents.
  
! If the type of a formal parameter is a specific tagged type, then the execution
  of the call is erroneous if the tag of the actual is changed while the formal
! parameter exists (that is, before leaving the corresponding callable construct).
! This is analogous to the RM 6.4.1(18) rule about discriminated parameters.
  
  @node Generalized Finalization,No_Raise aspect,Mutably Tagged Types with Size’Class Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{466}
  @subsection Generalized Finalization
  
  
*************** in this case.
*** 30997,31003 ****
  
  @item 
  The @code{Adjust} and @code{Finalize} procedures are automatically considered as
! having the @ref{466,,No_Raise aspect} specified for them. In particular, the
  compiler has permission to enforce none of the guarantees specified by the
  RM 7.6.1 (14/1) and subsequent subclauses.
  @end itemize
--- 32313,32319 ----
  
  @item 
  The @code{Adjust} and @code{Finalize} procedures are automatically considered as
! having the @ref{467,,No_Raise aspect} specified for them. In particular, the
  compiler has permission to enforce none of the guarantees specified by the
  RM 7.6.1 (14/1) and subsequent subclauses.
  @end itemize
*************** end P;
*** 31058,31064 ****
  @end menu
  
  @node Finalizable tagged types,Composite types,,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{467}
  @subsubsection Finalizable tagged types
  
  
--- 32374,32380 ----
  @end menu
  
  @node Finalizable tagged types,Composite types,,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{468}
  @subsubsection Finalizable tagged types
  
  
*************** dispatching whenever it makes sense, i.e
*** 31068,31074 ****
  class-wide type and the class includes at least one finalizable tagged type.
  
  @node Composite types,Interoperability with controlled types,Finalizable tagged types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{468}
  @subsubsection Composite types
  
  
--- 32384,32390 ----
  class-wide type and the class includes at least one finalizable tagged type.
  
  @node Composite types,Interoperability with controlled types,Finalizable tagged types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{469}
  @subsubsection Composite types
  
  
*************** in order to call the primitives of their
*** 31078,31084 ****
  the same as for controlled components of composite types.
  
  @node Interoperability with controlled types,,Composite types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{469}
  @subsubsection Interoperability with controlled types
  
  
--- 32394,32400 ----
  the same as for controlled components of composite types.
  
  @node Interoperability with controlled types,,Composite types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{46a}
  @subsubsection Interoperability with controlled types
  
  
*************** versa, but the stricter dynamic semantic
*** 31088,31094 ****
  types, is applied in this case.
  
  @node No_Raise aspect,Inference of Dependent Types in Generic Instantiations,Generalized Finalization,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions id3}@anchor{46a}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{466}
  @subsection No_Raise aspect
  
  
--- 32404,32410 ----
  types, is applied in this case.
  
  @node No_Raise aspect,Inference of Dependent Types in Generic Instantiations,Generalized Finalization,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions id3}@anchor{46b}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{467}
  @subsection No_Raise aspect
  
  
*************** be raised during the execution of the su
*** 31098,31104 ****
  this execution and @code{Program_Error} is propagated to the caller.
  
  @node Inference of Dependent Types in Generic Instantiations,External_Initialization Aspect,No_Raise aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{46b}
  @subsection Inference of Dependent Types in Generic Instantiations
  
  
--- 32414,32420 ----
  this execution and @code{Program_Error} is propagated to the caller.
  
  @node Inference of Dependent Types in Generic Instantiations,External_Initialization Aspect,No_Raise aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{46c}
  @subsection Inference of Dependent Types in Generic Instantiations
  
  
*************** package Int_Array_Operations is new Arra
*** 31175,31181 ****
  @end example
  
  @node External_Initialization Aspect,Finally construct,Inference of Dependent Types in Generic Instantiations,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{46c}
  @subsection External_Initialization Aspect
  
  
--- 32491,32497 ----
  @end example
  
  @node External_Initialization Aspect,Finally construct,Inference of Dependent Types in Generic Instantiations,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{46d}
  @subsection External_Initialization Aspect
  
  
*************** The maximum size of loaded files is limi
*** 31215,31222 ****
  @end quotation
  @end cartouche
  
! @node Finally construct,,External_Initialization Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{46d}
  @subsection Finally construct
  
  
--- 32531,32538 ----
  @end quotation
  @end cartouche
  
! @node Finally construct,Continue statement,External_Initialization Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{46e}
  @subsection Finally construct
  
  
*************** This feature is similar to the one with
*** 31233,31239 ****
  @end menu
  
  @node Syntax<2>,Legality Rules<2>,,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id4}@anchor{46e}
  @subsubsection Syntax
  
  
--- 32549,32555 ----
  @end menu
  
  @node Syntax<2>,Legality Rules<2>,,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id4}@anchor{46f}
  @subsubsection Syntax
  
  
*************** handled_sequence_of_statements ::=
*** 31248,31254 ****
  @end example
  
  @node Legality Rules<2>,Dynamic Semantics<2>,Syntax<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id5}@anchor{46f}
  @subsubsection Legality Rules
  
  
--- 32564,32570 ----
  @end example
  
  @node Legality Rules<2>,Dynamic Semantics<2>,Syntax<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id5}@anchor{470}
  @subsubsection Legality Rules
  
  
*************** to be transferred outside the finally pa
*** 31258,31264 ****
  Goto & exit where the target is outside of the finally’s @code{sequence_of_statements} are forbidden
  
  @node Dynamic Semantics<2>,,Legality Rules<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id6}@anchor{470}
  @subsubsection Dynamic Semantics
  
  
--- 32574,32580 ----
  Goto & exit where the target is outside of the finally’s @code{sequence_of_statements} are forbidden
  
  @node Dynamic Semantics<2>,,Legality Rules<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id6}@anchor{471}
  @subsubsection Dynamic Semantics
  
  
*************** Abort/ATC (asynchronous transfer of cont
*** 31272,31279 ****
  execution, that is the finally block must be executed in full even if the containing task is
  aborted, or if the control is transferred out of the block.
  
  @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top
! @anchor{gnat_rm/security_hardening_features doc}@anchor{471}@anchor{gnat_rm/security_hardening_features id1}@anchor{472}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15}
  @chapter Security Hardening Features
  
  
--- 32588,32613 ----
  execution, that is the finally block must be executed in full even if the containing task is
  aborted, or if the control is transferred out of the block.
  
+ @node Continue statement,,Finally construct,Experimental Language Extensions
+ @anchor{gnat_rm/gnat_language_extensions continue-statement}@anchor{472}
+ @subsection Continue statement
+ 
+ 
+ The @code{continue} keyword makes it possible to stop execution of a loop iteration
+ and continue with the next one. A continue statement has the same syntax
+ (except “exit” is replaced with “continue”), static semantics, and legality
+ rules as an exit statement. The difference is in the dynamic semantics: where an
+ exit statement would cause a transfer of control that completes the (implicitly
+ or explicitly) specified loop_statement, a continue statement would instead
+ cause a transfer of control that completes only the current iteration of that
+ loop_statement, like a goto statement targeting a label following the last
+ statement in the sequence of statements of the specified loop_statement.
+ 
+ Note that @code{continue} is a keyword but it is not a reserved word. This is a
+ configuration that does not exist in standard Ada.
+ 
  @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top
! @anchor{gnat_rm/security_hardening_features doc}@anchor{473}@anchor{gnat_rm/security_hardening_features id1}@anchor{474}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15}
  @chapter Security Hardening Features
  
  
*************** change.
*** 31295,31301 ****
  @end menu
  
  @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{473}
  @section Register Scrubbing
  
  
--- 32629,32635 ----
  @end menu
  
  @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{475}
  @section Register Scrubbing
  
  
*************** programming languages, see @cite{Using t
*** 31331,31337 ****
  @c Stack Scrubbing:
  
  @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{474}
  @section Stack Scrubbing
  
  
--- 32665,32671 ----
  @c Stack Scrubbing:
  
  @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{476}
  @section Stack Scrubbing
  
  
*************** Bar_Callable_Ptr.
*** 31475,31481 ****
  @c Hardened Conditionals:
  
  @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{475}
  @section Hardened Conditionals
  
  
--- 32809,32815 ----
  @c Hardened Conditionals:
  
  @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{477}
  @section Hardened Conditionals
  
  
*************** be used with other programming languages
*** 31565,31571 ****
  @c Hardened Booleans:
  
  @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{476}
  @section Hardened Booleans
  
  
--- 32899,32905 ----
  @c Hardened Booleans:
  
  @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{478}
  @section Hardened Booleans
  
  
*************** and more details on that attribute, see
*** 31626,31632 ****
  @c Control Flow Redundancy:
  
  @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{477}
  @section Control Flow Redundancy
  
  
--- 32960,32966 ----
  @c Control Flow Redundancy:
  
  @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{479}
  @section Control Flow Redundancy
  
  
*************** see @cite{Using the GNU Compiler Collect
*** 31794,31800 ****
  can be used with other programming languages supported by GCC.
  
  @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
! @anchor{gnat_rm/obsolescent_features doc}@anchor{478}@anchor{gnat_rm/obsolescent_features id1}@anchor{479}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16}
  @chapter Obsolescent Features
  
  
--- 33128,33134 ----
  can be used with other programming languages supported by GCC.
  
  @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
! @anchor{gnat_rm/obsolescent_features doc}@anchor{47a}@anchor{gnat_rm/obsolescent_features id1}@anchor{47b}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16}
  @chapter Obsolescent Features
  
  
*************** compatibility purposes.
*** 31813,31819 ****
  @end menu
  
  @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{47a}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{47b}
  @section pragma No_Run_Time
  
  
--- 33147,33153 ----
  @end menu
  
  @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{47c}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{47d}
  @section pragma No_Run_Time
  
  
*************** preferred usage is to use an appropriate
*** 31826,31832 ****
  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{47c}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{47d}
  @section pragma Ravenscar
  
  
--- 33160,33166 ----
  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{47e}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{47f}
  @section pragma Ravenscar
  
  
*************** The pragma @code{Ravenscar} has exactly
*** 31835,31841 ****
  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{47e}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{47f}
  @section pragma Restricted_Run_Time
  
  
--- 33169,33175 ----
  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{480}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{481}
  @section pragma Restricted_Run_Time
  
  
*************** preferred since the Ada 2005 pragma @cod
*** 31845,31851 ****
  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{480}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{481}
  @section pragma Task_Info
  
  
--- 33179,33185 ----
  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{482}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{483}
  @section pragma Task_Info
  
  
*************** in the spec of package System.Task_Info
*** 31871,31877 ****
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{482}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{483}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
--- 33205,33211 ----
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{484}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{485}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
*************** to support the @code{Task_Info} pragma.
*** 31881,31887 ****
  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{484}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{485}
  @chapter Compatibility and Porting Guide
  
  
--- 33215,33221 ----
  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{486}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{487}
  @chapter Compatibility and Porting Guide
  
  
*************** applications developed in other Ada envi
*** 31903,31909 ****
  @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{486}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{487}
  @section Writing Portable Fixed-Point Declarations
  
  
--- 33237,33243 ----
  @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{488}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{489}
  @section Writing Portable Fixed-Point Declarations
  
  
*************** If you follow this scheme you will be gu
*** 32025,32037 ****
  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{488}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{489}
  @section Compatibility with Ada 83
  
  
! @geindex Compatibility (between Ada 83 and Ada 95 / Ada 2005 / Ada 2012)
  
! Ada 95 and the subsequent revisions Ada 2005 and Ada 2012
  are highly upwards compatible with Ada 83.  In
  particular, the design intention was that the difficulties associated
  with moving from Ada 83 to later versions of the standard should be no greater
--- 33359,33371 ----
  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{48a}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{48b}
  @section Compatibility with Ada 83
  
  
! @geindex Compatibility (between Ada 83 and Ada 95 / Ada 2005 / Ada 2012 / Ada 2022)
  
! Ada 95 and the subsequent revisions Ada 2005, Ada 2012, Ada 2022
  are highly upwards compatible with Ada 83.  In
  particular, the design intention was that the difficulties associated
  with moving from Ada 83 to later versions of the standard should be no greater
*************** following subsections treat the most lik
*** 32053,32059 ****
  @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{48a}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{48b}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
--- 33387,33393 ----
  @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{48c}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{48d}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
*************** the fix is usually simply to add the @co
*** 32153,32159 ****
  @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{48c}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{48d}
  @subsection More deterministic semantics
  
  
--- 33487,33493 ----
  @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{48e}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{48f}
  @subsection More deterministic semantics
  
  
*************** which open select branches are executed.
*** 32181,32187 ****
  @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{48e}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{48f}
  @subsection Changed semantics
  
  
--- 33515,33521 ----
  @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{490}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{491}
  @subsection Changed semantics
  
  
*************** covers only the restricted range.
*** 32223,32229 ****
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{490}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{491}
  @subsection Other language compatibility issues
  
  
--- 33557,33563 ----
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{492}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{493}
  @subsection Other language compatibility issues
  
  
*************** include @code{pragma Interface} and the
*** 32256,32262 ****
  @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{492}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{493}
  @section Compatibility between Ada 95 and Ada 2005
  
  
--- 33590,33596 ----
  @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{494}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{495}
  @section Compatibility between Ada 95 and Ada 2005
  
  
*************** can declare a function returning a value
*** 32328,32334 ****
  @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{494}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{495}
  @section Implementation-dependent characteristics
  
  
--- 33662,33668 ----
  @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{496}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{497}
  @section Implementation-dependent characteristics
  
  
*************** transition from certain Ada 83 compilers
*** 32351,32357 ****
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{496}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{497}
  @subsection Implementation-defined pragmas
  
  
--- 33685,33691 ----
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{498}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{499}
  @subsection Implementation-defined pragmas
  
  
*************** avoiding compiler rejection of units tha
*** 32373,32379 ****
  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{498}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{499}
  @subsection Implementation-defined attributes
  
  
--- 33707,33713 ----
  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{49a}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{49b}
  @subsection Implementation-defined attributes
  
  
*************** Ada 83, GNAT supplies the attributes @co
*** 32387,32393 ****
  @code{Type_Class}.
  
  @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{49a}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{49b}
  @subsection Libraries
  
  
--- 33721,33727 ----
  @code{Type_Class}.
  
  @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{49c}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{49d}
  @subsection Libraries
  
  
*************** be preferable to retrofit the applicatio
*** 32416,32422 ****
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{49c}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{49d}
  @subsection Elaboration order
  
  
--- 33750,33756 ----
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{49e}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{49f}
  @subsection Elaboration order
  
  
*************** pragmas either globally (as an effect of
*** 32452,32458 ****
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{49e}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{49f}
  @subsection Target-specific aspects
  
  
--- 33786,33792 ----
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4a0}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4a1}
  @subsection Target-specific aspects
  
  
*************** such an Ada 83 application is being port
*** 32462,32474 ****
  example where the byte endianness has changed) then you will need to
  carefully examine the program logic; the porting effort will heavily depend
  on the robustness of the original design.  Moreover, Ada 95 (and thus
! Ada 2005 and Ada 2012) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT’s approach to these issues is described in @ref{4a0,,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{4a1}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4a2}
  @section Compatibility with Other Ada Systems
  
  
--- 33796,33808 ----
  example where the byte endianness has changed) then you will need to
  carefully examine the program logic; the porting effort will heavily depend
  on the robustness of the original design.  Moreover, Ada 95 (and thus
! Ada 2005, Ada 2012, and Ada 2022) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT’s approach to these issues is described in @ref{4a2,,Representation Clauses}.
  
  @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4a3}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4a4}
  @section Compatibility with Other Ada Systems
  
  
*************** far beyond this minimal set, as describe
*** 32511,32517 ****
  @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{4a3}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4a0}
  @section Representation Clauses
  
  
--- 33845,33851 ----
  @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{4a5}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4a2}
  @section Representation Clauses
  
  
*************** with thin pointers.
*** 32604,32610 ****
  @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{4a4}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4a5}
  @section Compatibility with HP Ada 83
  
  
--- 33938,33944 ----
  @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{4a6}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4a7}
  @section Compatibility with HP Ada 83
  
  
*************** extension of package System.
*** 32634,32640 ****
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{4a6}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4a7}
  @chapter GNU Free Documentation License
  
  
--- 33968,33974 ----
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{4a8}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4a9}
  @chapter GNU Free Documentation License
  
  
diff -Nrcpad gcc-16-20250629/gcc/ada/gnat_ugn.texi gcc-16-20250706/gcc/ada/gnat_ugn.texi
*** gcc-16-20250629/gcc/ada/gnat_ugn.texi	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gnat_ugn.texi	Sun Jul  6 22:32:09 2025
***************
*** 19,25 ****
  
  @copying
  @quotation
! GNAT User's Guide for Native Platforms , Jun 02, 2025
  
  AdaCore
  
--- 19,25 ----
  
  @copying
  @quotation
! GNAT User's Guide for Native Platforms , Jun 27, 2025
  
  AdaCore
  
*************** GNAT and Program Execution
*** 334,339 ****
--- 334,340 ----
  * Performing Dimensionality Analysis in GNAT:: 
  * Stack Related Facilities:: 
  * Memory Management Issues:: 
+ * Sanitizers for Ada:: 
  
  Running and Debugging Ada Programs
  
*************** Memory Management Issues
*** 415,420 ****
--- 416,427 ----
  * Some Useful Memory Pools:: 
  * The GNAT Debug Pool Facility:: 
  
+ Sanitizers for Ada
+ 
+ * AddressSanitizer:: 
+ * UndefinedBehaviorSanitizer:: 
+ * Sanitizers in mixed-language applications:: 
+ 
  Platform-Specific Information
  
  * Run-Time Libraries:: 
*************** file with @code{gprconfig} and using it
*** 17657,17662 ****
--- 17664,17672 ----
  can determine from the first line of the @code{.ali} file
  which version of GNAT built that file because it contains either
  @code{GNAT} or @code{GNAT-LLVM}.
+ 
+ You can also explicitly select GNAT LLVM in your existing GPR project
+ file by adding @code{for Toolchain_Name("Ada") use "GNAT_LLVM";}
  @end itemize
  
  
*************** This chapter covers several topics:
*** 18354,18359 ****
--- 18364,18372 ----
  
  @item 
  @ref{151,,Memory Management Issues}
+ 
+ @item 
+ @ref{152,,Sanitizers for Ada}
  @end itemize
  
  @menu
*************** This chapter covers several topics:
*** 18364,18374 ****
  * Performing Dimensionality Analysis in GNAT:: 
  * Stack Related Facilities:: 
  * Memory Management Issues:: 
  
  @end menu
  
  @node Running and Debugging Ada Programs,Profiling,,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id2}@anchor{14b}@anchor{gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs}@anchor{152}
  @section Running and Debugging Ada Programs
  
  
--- 18377,18388 ----
  * Performing Dimensionality Analysis in GNAT:: 
  * Stack Related Facilities:: 
  * Memory Management Issues:: 
+ * Sanitizers for Ada:: 
  
  @end menu
  
  @node Running and Debugging Ada Programs,Profiling,,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id2}@anchor{14b}@anchor{gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs}@anchor{153}
  @section Running and Debugging Ada Programs
  
  
*************** the incorrect user program.
*** 18422,18428 ****
  @end menu
  
  @node The GNAT Debugger GDB,Running GDB,,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{153}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{154}
  @subsection The GNAT Debugger GDB
  
  
--- 18436,18442 ----
  @end menu
  
  @node The GNAT Debugger GDB,Running GDB,,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{154}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{155}
  @subsection The GNAT Debugger GDB
  
  
*************** the debugging information and can respon
*** 18480,18486 ****
  variables and more generally to report on the state of execution.
  
  @node Running GDB,Introduction to GDB Commands,The GNAT Debugger GDB,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id4}@anchor{155}@anchor{gnat_ugn/gnat_and_program_execution running-gdb}@anchor{156}
  @subsection Running GDB
  
  
--- 18494,18500 ----
  variables and more generally to report on the state of execution.
  
  @node Running GDB,Introduction to GDB Commands,The GNAT Debugger GDB,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id4}@anchor{156}@anchor{gnat_ugn/gnat_and_program_execution running-gdb}@anchor{157}
  @subsection Running GDB
  
  
*************** exactly as if the debugger were not pres
*** 18507,18513 ****
  describes some of the additional commands that you can give 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{157}@anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{158}
  @subsection Introduction to GDB Commands
  
  
--- 18521,18527 ----
  describes some of the additional commands that you can give 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{158}@anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{159}
  @subsection Introduction to GDB Commands
  
  
*************** characters need be typed to disambiguate
*** 18721,18727 ****
  @code{breakpoint}).
  
  @node Using Ada Expressions,Calling User-Defined Subprograms,Introduction to GDB Commands,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id6}@anchor{159}@anchor{gnat_ugn/gnat_and_program_execution using-ada-expressions}@anchor{15a}
  @subsection Using Ada Expressions
  
  
--- 18735,18741 ----
  @code{breakpoint}).
  
  @node Using Ada Expressions,Calling User-Defined Subprograms,Introduction to GDB Commands,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id6}@anchor{15a}@anchor{gnat_ugn/gnat_and_program_execution using-ada-expressions}@anchor{15b}
  @subsection Using Ada Expressions
  
  
*************** their packages, regardless of context. W
*** 18759,18765 ****
  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{15b}@anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{15c}
  @subsection Calling User-Defined Subprograms
  
  
--- 18773,18779 ----
  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{15c}@anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{15d}
  @subsection Calling User-Defined Subprograms
  
  
*************** elements directly from GDB, you can writ
*** 18818,18824 ****
  the elements in the format you desire.
  
  @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{15d}@anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{15e}
  @subsection Using the `next' Command in a Function
  
  
--- 18832,18838 ----
  the elements in the format you desire.
  
  @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{15e}@anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{15f}
  @subsection Using the `next' Command in a Function
  
  
*************** The value returned is always that from t
*** 18841,18847 ****
  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{15f}@anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{160}
  @subsection Stopping When Ada Exceptions Are Raised
  
  
--- 18855,18861 ----
  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{160}@anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{161}
  @subsection Stopping When Ada Exceptions Are Raised
  
  
*************** argument, prints out only those exceptio
*** 18898,18904 ****
  @geindex Tasks (in gdb)
  
  @node Ada Tasks,Debugging Generic Units,Stopping When Ada Exceptions Are Raised,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution ada-tasks}@anchor{161}@anchor{gnat_ugn/gnat_and_program_execution id10}@anchor{162}
  @subsection Ada Tasks
  
  
--- 18912,18918 ----
  @geindex Tasks (in gdb)
  
  @node Ada Tasks,Debugging Generic Units,Stopping When Ada Exceptions Are Raised,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution ada-tasks}@anchor{162}@anchor{gnat_ugn/gnat_and_program_execution id10}@anchor{163}
  @subsection Ada Tasks
  
  
*************** see @cite{Debugging with GDB}.
*** 18985,18991 ****
  @geindex Generics
  
  @node Debugging Generic Units,Remote Debugging with gdbserver,Ada Tasks,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution debugging-generic-units}@anchor{163}@anchor{gnat_ugn/gnat_and_program_execution id11}@anchor{164}
  @subsection Debugging Generic Units
  
  
--- 18999,19005 ----
  @geindex Generics
  
  @node Debugging Generic Units,Remote Debugging with gdbserver,Ada Tasks,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution debugging-generic-units}@anchor{164}@anchor{gnat_ugn/gnat_and_program_execution id11}@anchor{165}
  @subsection Debugging Generic Units
  
  
*************** variables, as you do for other units.
*** 19045,19051 ****
  @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{165}@anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{166}
  @subsection Remote Debugging with gdbserver
  
  
--- 19059,19065 ----
  @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{166}@anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{167}
  @subsection Remote Debugging with gdbserver
  
  
*************** x86_64-linux.
*** 19104,19110 ****
  @geindex Abnormal Termination or Failure to Terminate
  
  @node GNAT Abnormal Termination or Failure to Terminate,Naming Conventions for GNAT Source Files,Remote Debugging with gdbserver,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate}@anchor{167}@anchor{gnat_ugn/gnat_and_program_execution id13}@anchor{168}
  @subsection GNAT Abnormal Termination or Failure to Terminate
  
  
--- 19118,19124 ----
  @geindex Abnormal Termination or Failure to Terminate
  
  @node GNAT Abnormal Termination or Failure to Terminate,Naming Conventions for GNAT Source Files,Remote Debugging with gdbserver,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate}@anchor{168}@anchor{gnat_ugn/gnat_and_program_execution id13}@anchor{169}
  @subsection GNAT Abnormal Termination or Failure to Terminate
  
  
*************** Finally, you can start
*** 19159,19165 ****
  @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{154,,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} back end, indicates the source line at
--- 19173,19179 ----
  @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{155,,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} back end, indicates the source line at
*************** the source file.
*** 19168,19174 ****
  @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{169}@anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{16a}
  @subsection Naming Conventions for GNAT Source Files
  
  
--- 19182,19188 ----
  @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{16a}@anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{16b}
  @subsection Naming Conventions for GNAT Source Files
  
  
*************** the other @code{.c} files are modificati
*** 19258,19264 ****
  @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{16b}@anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{16c}
  @subsection Getting Internal Debugging Information
  
  
--- 19272,19278 ----
  @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{16c}@anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{16d}
  @subsection Getting Internal Debugging Information
  
  
*************** are replaced with run-time calls.
*** 19286,19292 ****
  @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{16d}@anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{16e}
  @subsection Stack Traceback
  
  
--- 19300,19306 ----
  @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{16e}@anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{16f}
  @subsection Stack Traceback
  
  
*************** is enabled and no exception is raised du
*** 19315,19321 ****
  @end menu
  
  @node Non-Symbolic Traceback,Symbolic Traceback,,Stack Traceback
! @anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{16f}@anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{170}
  @subsubsection Non-Symbolic Traceback
  
  
--- 19329,19335 ----
  @end menu
  
  @node Non-Symbolic Traceback,Symbolic Traceback,,Stack Traceback
! @anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{170}@anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{171}
  @subsubsection Non-Symbolic Traceback
  
  
*************** addresses need to be specified in C form
*** 19637,19643 ****
  @geindex symbolic
  
  @node Symbolic Traceback,,Non-Symbolic Traceback,Stack Traceback
! @anchor{gnat_ugn/gnat_and_program_execution id18}@anchor{171}@anchor{gnat_ugn/gnat_and_program_execution symbolic-traceback}@anchor{172}
  @subsubsection Symbolic Traceback
  
  
--- 19651,19657 ----
  @geindex symbolic
  
  @node Symbolic Traceback,,Non-Symbolic Traceback,Stack Traceback
! @anchor{gnat_ugn/gnat_and_program_execution id18}@anchor{172}@anchor{gnat_ugn/gnat_and_program_execution symbolic-traceback}@anchor{173}
  @subsubsection Symbolic Traceback
  
  
*************** traceback, which will also be printed if
*** 19756,19762 ****
  terminates the program.
  
  @node Pretty-Printers for the GNAT runtime,,Stack Traceback,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id19}@anchor{173}@anchor{gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime}@anchor{174}
  @subsection Pretty-Printers for the GNAT runtime
  
  
--- 19770,19776 ----
  terminates the program.
  
  @node Pretty-Printers for the GNAT runtime,,Stack Traceback,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id19}@anchor{174}@anchor{gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime}@anchor{175}
  @subsection Pretty-Printers for the GNAT runtime
  
  
*************** for more information.
*** 19865,19871 ****
  @geindex Profiling
  
  @node Profiling,Improving Performance,Running and Debugging Ada Programs,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{175}@anchor{gnat_ugn/gnat_and_program_execution profiling}@anchor{14c}
  @section Profiling
  
  
--- 19879,19885 ----
  @geindex Profiling
  
  @node Profiling,Improving Performance,Running and Debugging Ada Programs,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{176}@anchor{gnat_ugn/gnat_and_program_execution profiling}@anchor{14c}
  @section Profiling
  
  
*************** This section describes how to use the @c
*** 19881,19887 ****
  @end menu
  
  @node Profiling an Ada Program with gprof,,,Profiling
! @anchor{gnat_ugn/gnat_and_program_execution id21}@anchor{176}@anchor{gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof}@anchor{177}
  @subsection Profiling an Ada Program with gprof
  
  
--- 19895,19901 ----
  @end menu
  
  @node Profiling an Ada Program with gprof,,,Profiling
! @anchor{gnat_ugn/gnat_and_program_execution id21}@anchor{177}@anchor{gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof}@anchor{178}
  @subsection Profiling an Ada Program with gprof
  
  
*************** to interpret the results.
*** 19936,19942 ****
  @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{178}@anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{179}
  @subsubsection Compilation for profiling
  
  
--- 19950,19956 ----
  @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{179}@anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{17a}
  @subsubsection Compilation for profiling
  
  
*************** Note that on Windows, @code{gprof} does
*** 19967,19973 ****
  the @code{-no-pie} switch to the linker flags to disable PIE.
  
  @node Program execution,Running gprof,Compilation for profiling,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{17a}@anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{17b}
  @subsubsection Program execution
  
  
--- 19981,19987 ----
  the @code{-no-pie} switch to the linker flags to disable PIE.
  
  @node Program execution,Running gprof,Compilation for profiling,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{17b}@anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{17c}
  @subsubsection Program execution
  
  
*************** generated in the directory where the pro
*** 19982,19988 ****
  already exists, it will be overwritten by running the program.
  
  @node Running gprof,Interpretation of profiling results,Program execution,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{17c}@anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{17d}
  @subsubsection Running gprof
  
  
--- 19996,20002 ----
  already exists, it will be overwritten by running the program.
  
  @node Running gprof,Interpretation of profiling results,Program execution,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{17d}@anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{17e}
  @subsubsection Running gprof
  
  
*************** switch.
*** 20094,20100 ****
  @end table
  
  @node Interpretation of profiling results,,Running gprof,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id25}@anchor{17e}@anchor{gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results}@anchor{17f}
  @subsubsection Interpretation of profiling results
  
  
--- 20108,20114 ----
  @end table
  
  @node Interpretation of profiling results,,Running gprof,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id25}@anchor{17f}@anchor{gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results}@anchor{180}
  @subsubsection Interpretation of profiling results
  
  
*************** and the subprograms that it calls. It al
*** 20111,20117 ****
  spent in each of those callers and called subprograms.
  
  @node Improving Performance,Overflow Check Handling in GNAT,Profiling,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{14d}@anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{180}
  @section Improving Performance
  
  
--- 20125,20131 ----
  spent in each of those callers and called subprograms.
  
  @node Improving Performance,Overflow Check Handling in GNAT,Profiling,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{14d}@anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{181}
  @section Improving Performance
  
  
*************** which can reduce the size of program exe
*** 20132,20138 ****
  @end menu
  
  @node Performance Considerations,Text_IO Suggestions,,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{181}@anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{182}
  @subsection Performance Considerations
  
  
--- 20146,20152 ----
  @end menu
  
  @node Performance Considerations,Text_IO Suggestions,,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{182}@anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{183}
  @subsection Performance Considerations
  
  
*************** some guidelines on debugging optimized c
*** 20193,20199 ****
  @end menu
  
  @node Controlling Run-Time Checks,Use of Restrictions,,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{183}@anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{184}
  @subsubsection Controlling Run-Time Checks
  
  
--- 20207,20213 ----
  @end menu
  
  @node Controlling Run-Time Checks,Use of Restrictions,,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{184}@anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{185}
  @subsubsection Controlling Run-Time Checks
  
  
*************** remove checks) or @code{pragma Unsuppres
*** 20245,20251 ****
  checks) in your program source.
  
  @node Use of Restrictions,Optimization Levels,Controlling Run-Time Checks,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id29}@anchor{185}@anchor{gnat_ugn/gnat_and_program_execution use-of-restrictions}@anchor{186}
  @subsubsection Use of Restrictions
  
  
--- 20259,20265 ----
  checks) in your program source.
  
  @node Use of Restrictions,Optimization Levels,Controlling Run-Time Checks,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id29}@anchor{186}@anchor{gnat_ugn/gnat_and_program_execution use-of-restrictions}@anchor{187}
  @subsubsection Use of Restrictions
  
  
*************** this, it also means you can write code w
*** 20281,20287 ****
  possibility of an immediate abort at any point.
  
  @node Optimization Levels,Debugging Optimized Code,Use of Restrictions,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id30}@anchor{187}@anchor{gnat_ugn/gnat_and_program_execution optimization-levels}@anchor{f0}
  @subsubsection Optimization Levels
  
  
--- 20295,20301 ----
  possibility of an immediate abort at any point.
  
  @node Optimization Levels,Debugging Optimized Code,Use of Restrictions,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id30}@anchor{188}@anchor{gnat_ugn/gnat_and_program_execution optimization-levels}@anchor{f0}
  @subsubsection Optimization Levels
  
  
*************** since it often results in larger executa
*** 20427,20433 ****
  See further discussion of this point in @ref{104,,Inlining of Subprograms}.
  
  @node Debugging Optimized Code,Inlining of Subprograms,Optimization Levels,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution debugging-optimized-code}@anchor{188}@anchor{gnat_ugn/gnat_and_program_execution id31}@anchor{189}
  @subsubsection Debugging Optimized Code
  
  
--- 20441,20447 ----
  See further discussion of this point in @ref{104,,Inlining of Subprograms}.
  
  @node Debugging Optimized Code,Inlining of Subprograms,Optimization Levels,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution debugging-optimized-code}@anchor{189}@anchor{gnat_ugn/gnat_and_program_execution id31}@anchor{18a}
  @subsubsection Debugging Optimized Code
  
  
*************** on the resulting executable,
*** 20555,20561 ****
  which removes both debugging information and global symbols.
  
  @node Inlining of Subprograms,Floating Point Operations,Debugging Optimized Code,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id32}@anchor{18a}@anchor{gnat_ugn/gnat_and_program_execution inlining-of-subprograms}@anchor{104}
  @subsubsection Inlining of Subprograms
  
  
--- 20569,20575 ----
  which removes both debugging information and global symbols.
  
  @node Inlining of Subprograms,Floating Point Operations,Debugging Optimized Code,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id32}@anchor{18b}@anchor{gnat_ugn/gnat_and_program_execution inlining-of-subprograms}@anchor{104}
  @subsubsection Inlining of Subprograms
  
  
*************** indeed you should use @code{-O3} only if
*** 20699,20705 ****
  improves performance for your program.
  
  @node Floating Point Operations,Vectorization of loops,Inlining of Subprograms,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution floating-point-operations}@anchor{18b}@anchor{gnat_ugn/gnat_and_program_execution id33}@anchor{18c}
  @subsubsection Floating Point Operations
  
  
--- 20713,20719 ----
  improves performance for your program.
  
  @node Floating Point Operations,Vectorization of loops,Inlining of Subprograms,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution floating-point-operations}@anchor{18c}@anchor{gnat_ugn/gnat_and_program_execution id33}@anchor{18d}
  @subsubsection Floating Point Operations
  
  
*************** Note that the ABI has the same form for
*** 20746,20752 ****
  so you can mix units compiled with and without these switches.
  
  @node Vectorization of loops,Other Optimization Switches,Floating Point Operations,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id34}@anchor{18d}@anchor{gnat_ugn/gnat_and_program_execution vectorization-of-loops}@anchor{18e}
  @subsubsection Vectorization of loops
  
  
--- 20760,20766 ----
  so you can mix units compiled with and without these switches.
  
  @node Vectorization of loops,Other Optimization Switches,Floating Point Operations,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id34}@anchor{18e}@anchor{gnat_ugn/gnat_and_program_execution vectorization-of-loops}@anchor{18f}
  @subsubsection Vectorization of loops
  
  
*************** omit the non-vectorized version of the l
*** 20902,20908 ****
  This is also currently only supported by the GCC back end.
  
  @node Other Optimization Switches,Optimization and Strict Aliasing,Vectorization of loops,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{18f}@anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{190}
  @subsubsection Other Optimization Switches
  
  
--- 20916,20922 ----
  This is also currently only supported by the GCC back end.
  
  @node Other Optimization Switches,Optimization and Strict Aliasing,Vectorization of loops,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{190}@anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{191}
  @subsubsection Other Optimization Switches
  
  
*************** full details of these switches, see the
*** 20919,20925 ****
  the `Hardware Models and Configurations' 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{191}@anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{e7}
  @subsubsection Optimization and Strict Aliasing
  
  
--- 20933,20939 ----
  the `Hardware Models and Configurations' 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{192}@anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{e7}
  @subsubsection Optimization and Strict Aliasing
  
  
*************** review any uses of unchecked conversion,
*** 21213,21219 ****
  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{192}@anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{193}
  @subsubsection Aliased Variables and Optimization
  
  
--- 21227,21233 ----
  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{193}@anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{194}
  @subsubsection Aliased Variables and Optimization
  
  
*************** avoid code such as this if possible beca
*** 21273,21279 ****
  functin as you expect with all compilers.
  
  @node Atomic Variables and Optimization,Passive Task Optimization,Aliased Variables and Optimization,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization}@anchor{194}@anchor{gnat_ugn/gnat_and_program_execution id38}@anchor{195}
  @subsubsection Atomic Variables and Optimization
  
  
--- 21287,21293 ----
  functin as you expect with all compilers.
  
  @node Atomic Variables and Optimization,Passive Task Optimization,Aliased Variables and Optimization,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization}@anchor{195}@anchor{gnat_ugn/gnat_and_program_execution id38}@anchor{196}
  @subsubsection Atomic Variables and Optimization
  
  
*************** such synchronization code is not require
*** 21354,21360 ****
  useful to disable it.
  
  @node Passive Task Optimization,,Atomic Variables and Optimization,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{196}@anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{197}
  @subsubsection Passive Task Optimization
  
  
--- 21368,21374 ----
  useful to disable it.
  
  @node Passive Task Optimization,,Atomic Variables and Optimization,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{197}@anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{198}
  @subsubsection Passive Task Optimization
  
  
*************** that typically clients of the tasks who
*** 21399,21405 ****
  to be modified, only the task definitions themselves.
  
  @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{198}@anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{199}
  @subsection @code{Text_IO} Suggestions
  
  
--- 21413,21419 ----
  to be modified, only the task definitions themselves.
  
  @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{199}@anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{19a}
  @subsection @code{Text_IO} Suggestions
  
  
*************** of the standard output file or change th
*** 21422,21428 ****
  be buffered using @code{Interfaces.C_Streams.setvbuf}.
  
  @node Reducing Size of Executables with Unused Subprogram/Data Elimination,,Text_IO Suggestions,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution id41}@anchor{19a}@anchor{gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination}@anchor{19b}
  @subsection Reducing Size of Executables with Unused Subprogram/Data Elimination
  
  
--- 21436,21442 ----
  be buffered using @code{Interfaces.C_Streams.setvbuf}.
  
  @node Reducing Size of Executables with Unused Subprogram/Data Elimination,,Text_IO Suggestions,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution id41}@anchor{19b}@anchor{gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination}@anchor{19c}
  @subsection Reducing Size of Executables with Unused Subprogram/Data Elimination
  
  
*************** your executable just by setting options
*** 21439,21445 ****
  @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{19c}@anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{19d}
  @subsubsection About unused subprogram/data elimination
  
  
--- 21453,21459 ----
  @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{19d}@anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{19e}
  @subsubsection About unused subprogram/data elimination
  
  
*************** architecture and on all cross platforms
*** 21453,21459 ****
  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{19e}@anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{19f}
  @subsubsection Compilation options
  
  
--- 21467,21473 ----
  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{19f}@anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{1a0}
  @subsubsection Compilation options
  
  
*************** eliminate the unused code and data of th
*** 21494,21500 ****
  executable.
  
  @node Example of unused subprogram/data elimination,,Compilation options,Reducing Size of Executables with Unused Subprogram/Data Elimination
! @anchor{gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination}@anchor{1a0}@anchor{gnat_ugn/gnat_and_program_execution id44}@anchor{1a1}
  @subsubsection Example of unused subprogram/data elimination
  
  
--- 21508,21514 ----
  executable.
  
  @node Example of unused subprogram/data elimination,,Compilation options,Reducing Size of Executables with Unused Subprogram/Data Elimination
! @anchor{gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination}@anchor{1a1}@anchor{gnat_ugn/gnat_and_program_execution id44}@anchor{1a2}
  @subsubsection Example of unused subprogram/data elimination
  
  
*************** appropriate switches.
*** 21564,21570 ****
  @geindex Checks (overflow)
  
  @node Overflow Check Handling in GNAT,Performing Dimensionality Analysis in GNAT,Improving Performance,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id45}@anchor{14e}@anchor{gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat}@anchor{1a2}
  @section Overflow Check Handling in GNAT
  
  
--- 21578,21584 ----
  @geindex Checks (overflow)
  
  @node Overflow Check Handling in GNAT,Performing Dimensionality Analysis in GNAT,Improving Performance,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id45}@anchor{14e}@anchor{gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat}@anchor{1a3}
  @section Overflow Check Handling in GNAT
  
  
*************** This section explains how to control the
*** 21580,21586 ****
  @end menu
  
  @node Background,Management of Overflows in GNAT,,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution background}@anchor{1a3}@anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{1a4}
  @subsection Background
  
  
--- 21594,21600 ----
  @end menu
  
  @node Background,Management of Overflows in GNAT,,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution background}@anchor{1a4}@anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{1a5}
  @subsection Background
  
  
*************** exception raised because of the intermed
*** 21706,21712 ****
  would prefer this precondition to be considered @code{True} at run time).
  
  @node Management of Overflows in GNAT,Specifying the Desired Mode,Background,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id47}@anchor{1a5}@anchor{gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat}@anchor{1a6}
  @subsection Management of Overflows in GNAT
  
  
--- 21720,21726 ----
  would prefer this precondition to be considered @code{True} at run time).
  
  @node Management of Overflows in GNAT,Specifying the Desired Mode,Background,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id47}@anchor{1a6}@anchor{gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat}@anchor{1a7}
  @subsection Management of Overflows in GNAT
  
  
*************** out in the normal manner (with infinite
*** 21820,21826 ****
  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{1a7}@anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{ec}
  @subsection Specifying the Desired Mode
  
  
--- 21834,21840 ----
  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{1a8}@anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{ec}
  @subsection Specifying the Desired Mode
  
  
*************** equivalent to @code{-gnato11}, causing a
*** 21944,21950 ****
  to be computed using the base 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{1a8}@anchor{gnat_ugn/gnat_and_program_execution id49}@anchor{1a9}
  @subsection Default Settings
  
  
--- 21958,21964 ----
  to be computed using the base 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{1a9}@anchor{gnat_ugn/gnat_and_program_execution id49}@anchor{1aa}
  @subsection Default Settings
  
  
*************** checking but has no effect on the method
*** 21968,21974 ****
  intermediate results.
  
  @node Implementation Notes,,Default Settings,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id50}@anchor{1aa}@anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{1ab}
  @subsection Implementation Notes
  
  
--- 21982,21988 ----
  intermediate results.
  
  @node Implementation Notes,,Default Settings,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id50}@anchor{1ab}@anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{1ac}
  @subsection Implementation Notes
  
  
*************** platforms for which @code{Long_Long_Inte
*** 22016,22022 ****
  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{14f}@anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{1ac}
  @section Performing Dimensionality Analysis in GNAT
  
  
--- 22030,22036 ----
  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{14f}@anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{1ad}
  @section Performing Dimensionality Analysis in GNAT
  
  
*************** package Mks_Numerics is new
*** 22419,22425 ****
  @end quotation
  
  @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{150}@anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{1ad}
  @section Stack Related Facilities
  
  
--- 22433,22439 ----
  @end quotation
  
  @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{150}@anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{1ae}
  @section Stack Related Facilities
  
  
*************** particular, it deals with dynamic and st
*** 22435,22441 ****
  @end menu
  
  @node Stack Overflow Checking,Static Stack Usage Analysis,,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution id53}@anchor{1ae}@anchor{gnat_ugn/gnat_and_program_execution stack-overflow-checking}@anchor{e8}
  @subsection Stack Overflow Checking
  
  
--- 22449,22455 ----
  @end menu
  
  @node Stack Overflow Checking,Static Stack Usage Analysis,,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution id53}@anchor{1af}@anchor{gnat_ugn/gnat_and_program_execution stack-overflow-checking}@anchor{e8}
  @subsection Stack Overflow Checking
  
  
*************** When using the LLVM back end, this switc
*** 22483,22489 ****
  checking, but just checks for very large local dynamic allocations.
  
  @node Static Stack Usage Analysis,Dynamic Stack Usage Analysis,Stack Overflow Checking,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution id54}@anchor{1af}@anchor{gnat_ugn/gnat_and_program_execution static-stack-usage-analysis}@anchor{e9}
  @subsection Static Stack Usage Analysis
  
  
--- 22497,22503 ----
  checking, but just checks for very large local dynamic allocations.
  
  @node Static Stack Usage Analysis,Dynamic Stack Usage Analysis,Stack Overflow Checking,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution id54}@anchor{1b0}@anchor{gnat_ugn/gnat_and_program_execution static-stack-usage-analysis}@anchor{e9}
  @subsection Static Stack Usage Analysis
  
  
*************** consistent with that in the file documen
*** 22535,22541 ****
  This is not supported by the LLVM back end.
  
  @node Dynamic Stack Usage Analysis,,Static Stack Usage Analysis,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{117}@anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{1b0}
  @subsection Dynamic Stack Usage Analysis
  
  
--- 22549,22555 ----
  This is not supported by the LLVM back end.
  
  @node Dynamic Stack Usage Analysis,,Static Stack Usage Analysis,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{117}@anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{1b1}
  @subsection Dynamic Stack Usage Analysis
  
  
*************** This is not suppored by the LLVM back en
*** 22619,22626 ****
  The package @code{GNAT.Task_Stack_Usage} provides facilities to get
  stack-usage reports at run time. See its body for the details.
  
! @node Memory Management Issues,,Stack Related Facilities,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id56}@anchor{151}@anchor{gnat_ugn/gnat_and_program_execution memory-management-issues}@anchor{1b1}
  @section Memory Management Issues
  
  
--- 22633,22640 ----
  The package @code{GNAT.Task_Stack_Usage} provides facilities to get
  stack-usage reports at run time. See its body for the details.
  
! @node Memory Management Issues,Sanitizers for Ada,Stack Related Facilities,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id56}@anchor{151}@anchor{gnat_ugn/gnat_and_program_execution memory-management-issues}@anchor{1b2}
  @section Memory Management Issues
  
  
*************** incorrect uses of access values (includi
*** 22636,22642 ****
  @end menu
  
  @node Some Useful Memory Pools,The GNAT Debug Pool Facility,,Memory Management Issues
! @anchor{gnat_ugn/gnat_and_program_execution id57}@anchor{1b2}@anchor{gnat_ugn/gnat_and_program_execution some-useful-memory-pools}@anchor{1b3}
  @subsection Some Useful Memory Pools
  
  
--- 22650,22656 ----
  @end menu
  
  @node Some Useful Memory Pools,The GNAT Debug Pool Facility,,Memory Management Issues
! @anchor{gnat_ugn/gnat_and_program_execution id57}@anchor{1b3}@anchor{gnat_ugn/gnat_and_program_execution some-useful-memory-pools}@anchor{1b4}
  @subsection Some Useful Memory Pools
  
  
*************** for T1'Storage_Size use 10_000;
*** 22718,22724 ****
  @end quotation
  
  @node The GNAT Debug Pool Facility,,Some Useful Memory Pools,Memory Management Issues
! @anchor{gnat_ugn/gnat_and_program_execution id58}@anchor{1b4}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility}@anchor{1b5}
  @subsection The GNAT Debug Pool Facility
  
  
--- 22732,22738 ----
  @end quotation
  
  @node The GNAT Debug Pool Facility,,Some Useful Memory Pools,Memory Management Issues
! @anchor{gnat_ugn/gnat_and_program_execution id58}@anchor{1b5}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility}@anchor{1b6}
  @subsection The GNAT Debug Pool Facility
  
  
*************** Debug Pool info:
*** 22877,22887 ****
  @end quotation
  
  
  @c -- Non-breaking space in running text
  @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{1b6}@anchor{gnat_ugn/platform_specific_information id1}@anchor{1b7}@anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{e}
  @chapter Platform-Specific Information
  
  
--- 22891,23305 ----
  @end quotation
  
  
+ @node Sanitizers for Ada,,Memory Management Issues,GNAT and Program Execution
+ @anchor{gnat_ugn/gnat_and_program_execution id63}@anchor{152}@anchor{gnat_ugn/gnat_and_program_execution sanitizers-for-ada}@anchor{1b7}
+ @section Sanitizers for Ada
+ 
+ 
+ @geindex Sanitizers
+ 
+ This section explains how to use sanitizers with Ada code. Sanitizers offer code
+ instrumentation and run-time libraries that detect certain memory issues and
+ undefined behaviors during execution. They provide dynamic analysis capabilities
+ useful for debugging and testing.
+ 
+ While many sanitizer capabilities overlap with Ada’s built-in runtime checks,
+ they are particularly valuable for identifying issues that arise from unchecked
+ features or low-level operations.
+ 
+ @menu
+ * AddressSanitizer:: 
+ * UndefinedBehaviorSanitizer:: 
+ * Sanitizers in mixed-language applications:: 
+ 
+ @end menu
+ 
+ @node AddressSanitizer,UndefinedBehaviorSanitizer,,Sanitizers for Ada
+ @anchor{gnat_ugn/gnat_and_program_execution addresssanitizer}@anchor{1b8}@anchor{gnat_ugn/gnat_and_program_execution id64}@anchor{1b9}
+ @subsection AddressSanitizer
+ 
+ 
+ @geindex AddressSanitizer
+ 
+ @geindex ASan
+ 
+ @geindex -fsanitize=address
+ 
+ AddressSanitizer (aka ASan) is a memory error detector activated with the
+ @code{-fsanitize=address} switch. Note that many of the typical memory errors,
+ such as use after free or buffer overflow, are detected by Ada’s @code{Access_Check}
+ and @code{Index_Check}.
+ 
+ It can detect the following types of problems:
+ 
+ 
+ @itemize *
+ 
+ @item 
+ Wrong memory overlay
+ 
+ A memory overlay is a situation in which an object of one type is placed at the
+ same memory location as a distinct object of a different type, thus overlaying
+ one object over the other in memory. When there is an overflow because the
+ objects do not overlap (like in the following example), the sanitizer can signal
+ it.
+ 
+ @quotation
+ 
+ @example
+ procedure Wrong_Size_Overlay is
+    type Block is array (Natural range <>) of Integer;
+ 
+    Block4 : aliased Block := (1 .. 4 => 4);
+    Block5 : Block (1 .. 5) with Address => Block4'Address;
+ begin
+    Block5 (Block5'Last) := 5;  --  Outside the object
+ end Wrong_Size_Overlay;
+ @end example
+ @end quotation
+ 
+ If the code is built with the @code{-fsanitize=address} and @code{-g} options,
+ the following error is shown at execution time:
+ 
+ @quotation
+ 
+ @example
+ ...
+ SUMMARY: AddressSanitizer: stack-buffer-overflow wrong_size_overlay.adb:7 in _ada_wrong_size_overlay
+ ...
+ @end example
+ @end quotation
+ 
+ @item 
+ Buffer overflow
+ 
+ Ada’s @code{Index_Check} detects buffer overflows caused by out-of-bounds array
+ access. If run-time checks are disabled, the sanitizer can still detect such
+ overflows at execution time the same way as it signalled the previous wrong
+ memory overlay. Note that if both the Ada run-time checks and the sanitizer
+ are enabled, the Ada run-time exception takes precedence.
+ 
+ @quotation
+ 
+ @example
+ procedure Buffer_Overrun is
+    Size : constant := 100;
+    Buffer : array (1 .. Size) of Integer := (others => 0);
+    Wrong_Index : Integer := Size + 1 with Export;
+ begin
+    -- Access outside the boundaries
+    Put_Line ("Value: " & Integer'Image (Buffer (Wrong_Index)));
+ end Buffer_Overrun;
+ @end example
+ @end quotation
+ 
+ @item 
+ Use after lifetime
+ 
+ Ada’s @code{Accessibility_Check} helps prevent use-after-return and
+ use-after-scope errors by enforcing lifetime rules. When these checks are
+ bypassed using @code{Unchecked_Access}, sanitizers can still detect such
+ violations during execution.
+ 
+ @quotation
+ 
+ @example
+ with Ada.Text_IO; use Ada.Text_IO;
+ 
+ procedure Use_After_Return is
+    type Integer_Access is access all Integer;
+    Ptr : Integer_Access;
+ 
+    procedure Inner;
+ 
+    procedure Inner is
+       Local : aliased Integer := 42;
+    begin
+       Ptr := Local'Unchecked_Access;
+    end Inner;
+ 
+ begin
+    Inner;
+    --  Accessing Local after it has gone out of scope
+    Put_Line ("Value: " & Integer'Image (Ptr.all));
+ end Use_After_Return;
+ @end example
+ @end quotation
+ 
+ If the code is built with the @code{-fsanitize=address} and @code{-g}
+ options, the following error is shown at execution time:
+ 
+ @quotation
+ 
+ @example
+ ...
+ ==1793927==ERROR: AddressSanitizer: stack-use-after-return on address 0xf6fa1a409060 at pc 0xb20b6cb6cac0 bp 0xffffcc89c8b0 sp 0xffffcc89c8c8
+ READ of size 4 at 0xf6fa1a409060 thread T0
+     #0 0xb20b6cb6cabc in _ada_use_after_return use_after_return.adb:18
+     ...
+ 
+ Address 0xf6fa1a409060 is located in stack of thread T0 at offset 32 in frame
+     #0 0xb20b6cb6c794 in use_after_return__inner use_after_return.adb:9
+ 
+   This frame has 1 object(s):
+     [32, 36) 'local' (line 10) <== Memory access at offset 32 is inside this variable
+ SUMMARY: AddressSanitizer: stack-use-after-return use_after_return.adb:18 in _ada_use_after_return
+ ...
+ @end example
+ @end quotation
+ 
+ @item 
+ Memory leak
+ 
+ A memory leak happens when a program allocates memory from the heap but fails
+ to release it after it is no longer needed and loses all references to it like
+ in the following example.
+ 
+ @quotation
+ 
+ @example
+ procedure Memory_Leak is
+    type Integer_Access is access Integer;
+ 
+    procedure Allocate is
+       Ptr : Integer_Access := new Integer'(42);
+    begin
+       null;
+    end Allocate;
+ begin
+    --  Memory leak occurs in the following procedure
+   Allocate;
+ end Memory_Leak;
+ @end example
+ @end quotation
+ 
+ If the code is built with the @code{-fsanitize=address} and @code{-g}
+ options, the following error is emitted at execution time showing the
+ location of the offending allocation.
+ 
+ @quotation
+ 
+ @example
+ ==1810634==ERROR: LeakSanitizer: detected memory leaks
+ 
+ Direct leak of 4 byte(s) in 1 object(s) allocated from:
+     #0 0xe3cbee4bb4a8 in __interceptor_malloc asan_malloc_linux.cpp:69
+     #1 0xc15bb25d0af8 in __gnat_malloc (memory_leak+0x10af8) (BuildId: f5914a6eac10824f81d512de50b514e7d5f733be)
+     #2 0xc15bb25c9060 in memory_leak__allocate memory_leak.adb:5
+     ...
+ 
+ SUMMARY: AddressSanitizer: 4 byte(s) leaked in 1 allocation(s).
+ @end example
+ @end quotation
+ @end itemize
+ 
+ @node UndefinedBehaviorSanitizer,Sanitizers in mixed-language applications,AddressSanitizer,Sanitizers for Ada
+ @anchor{gnat_ugn/gnat_and_program_execution id65}@anchor{1ba}@anchor{gnat_ugn/gnat_and_program_execution undefinedbehaviorsanitizer}@anchor{1bb}
+ @subsection UndefinedBehaviorSanitizer
+ 
+ 
+ @geindex UndefinedBehaviorSanitizer
+ 
+ @geindex UBSan
+ 
+ @geindex -fsanitize=undefined
+ 
+ UndefinedBehaviorSanitizer (aka UBSan) modifies the program at compile-time to
+ catch various kinds of undefined behavior during program execution.
+ 
+ Different sanitize options (@code{-fsanitize=alignment,float-cast-overflow,signed-integer-overflow})
+ detect the following types of problems:
+ 
+ 
+ @itemize *
+ 
+ @item 
+ Wrong alignment
+ 
+ The @code{-fsanitize=alignment} flag (included also in
+ @code{-fsanitize=undefined}) enables run-time checks for misaligned memory
+ accesses, ensuring that objects are accessed at addresses that conform to the
+ alignment constraints of their declared types. Violations may lead to crashes
+ or performance penalties on certain architectures.
+ 
+ In the following example:
+ 
+ @quotation
+ 
+ @example
+ with Ada.Text_IO; use Ada.Text_IO;
+ with System.Storage_Elements; use System.Storage_Elements;
+ 
+ procedure Misaligned_Address is
+    type Aligned_Integer is new Integer with
+      Alignment => 4;  -- Ensure 4-byte alignment
+ 
+    Reference : Aligned_Integer := 42;  -- Properly aligned object
+ 
+    -- Create a misaligned object by modifying the address manually
+    Misaligned : Aligned_Integer with Address => Reference'Address + 1;
+ 
+ begin
+    -- This causes undefined behavior or an alignment exception on strict architectures
+    Put_Line ("Misaligned Value: " & Aligned_Integer'Image (Misaligned));
+ end Misaligned_Address;
+ @end example
+ @end quotation
+ 
+ If the code is built with the @code{-fsanitize=alignment} and @code{-g}
+ options, the following error is shown at execution time.
+ 
+ @quotation
+ 
+ @example
+ misaligned_address.adb:15:51: runtime error: load of misaligned address 0xffffd836dd45 for type 'volatile misaligned_address__aligned_integer', which requires 4 byte alignment
+ @end example
+ @end quotation
+ 
+ @item 
+ Signed integer overflow
+ 
+ Ada performs range checks at runtime in arithmetic operation on signed integers
+ to ensure the value is within the target type’s bounds. If this check is removed,
+ the @code{-fsanitize=signed-integer-overflow} flag (included also in
+ @code{-fsanitize=undefined}) enables run-time checks for signed integer
+ overflows.
+ 
+ In the following example:
+ 
+ @quotation
+ 
+ @example
+ procedure Signed_Integer_Overflow is
+    type Small_Int is range -128 .. 127;
+    X, Y, Z : Small_Int with Export;
+ begin
+    X := 100;
+    Y := 50;
+    -- This addition will exceed 127, causing an overflow
+    Z := X + Y;
+ end Signed_Integer_Overflow;
+ @end example
+ @end quotation
+ 
+ If the code is built with the @code{-fsanitize=signed-integer-overflow} and
+ @code{-g} options, the following error is shown at execution time.
+ 
+ @quotation
+ 
+ @example
+ signed_integer_overflow.adb:8:11: runtime error: signed integer overflow: 100 + 50 cannot be represented in type 'signed_integer_overflow__small_int'
+ @end example
+ @end quotation
+ 
+ @item 
+ Float to integer overflow
+ 
+ When converting a floating-point value to an integer type, Ada performs a range
+ check at runtime to ensure the value is within the target type’s bounds. If this
+ check is removed, the sanitizer can detect overflows in conversions from
+ floating point to integer types.
+ 
+ In the following code:
+ 
+ @quotation
+ 
+ @example
+ procedure Float_Cast_Overflow is
+    Flt : Float := Float'Last with Export;
+    Int : Integer;
+ begin
+    Int := Integer (Flt); --  Overflow
+ end Float_Cast_Overflow;
+ @end example
+ @end quotation
+ 
+ If the code is built with the @code{-fsanitize=float-cast-overflow} and
+ @code{-g} options, the following error is shown at execution time.
+ 
+ @quotation
+ 
+ @example
+ float_cast_overflow.adb:5:20: runtime error: 3.40282e+38 is outside the range of representable values of type 'integer'
+ @end example
+ @end quotation
+ @end itemize
+ 
+ @node Sanitizers in mixed-language applications,,UndefinedBehaviorSanitizer,Sanitizers for Ada
+ @anchor{gnat_ugn/gnat_and_program_execution sanitizers-in-mixed-language-applications}@anchor{1bc}
+ @subsection Sanitizers in mixed-language applications
+ 
+ 
+ Most of the checks performed by sanitizers operate at a global level, which
+ means they can detect issues even when they span across language boundaries.
+ This applies notably to:
+ 
+ 
+ @itemize *
+ 
+ @item 
+ All checks performed by the AddressSanitizer: wrong memory overlays, buffer
+ overflows, uses after lifetime, memory leaks. These checks apply globally,
+ regardless of where the objects are allocated or defined, or where they are
+ destroyed
+ 
+ @item 
+ Wrong alignment checks performed by the UndefinedBehaviorSanitizer. It will
+ check whether an object created in a given language is accessed in another
+ with an incompatible alignment
+ @end itemize
+ 
+ An interesting case that highlights the benefit of global sanitization is a
+ buffer overflow caused by a mismatch in language bindings. Consider the
+ following C function, which allocates an array of 4 characters:
+ 
+ @quotation
+ 
+ @example
+ char *get_str (void) @{
+    char *str = malloc (4 * sizeof (char));
+ @}
+ @end example
+ @end quotation
+ 
+ This function is then bound to Ada code, which incorrectly assumes the buffer
+ is of size 5:
+ 
+ @quotation
+ 
+ @example
+ type Buffer is array (1 .. 5) of Character;
+ 
+ function Get_Str return access Buffer
+    with Import => True, Convention => C, External_Name => "get_str";
+ 
+ Str : access Buffer := Get_Str;
+ Ch  : Character     := S (S'Last);  -- Detected by AddressSanitizer as erroneous
+ @end example
+ @end quotation
+ 
+ On the Ada side, accessing @code{Str (5)} appears valid because the array type
+ declares five elements. However, the actual memory allocated in C only holds
+ four. This mismatch is not detectable by Ada run-time checks, because Ada has
+ no visibility into how the memory was allocated.
+ 
+ However, the AddressSanitizer will detect the heap buffer overflow at runtime,
+ halting execution and providing a clear diagnostic:
+ 
+ @quotation
+ 
+ @example
+ ...
+ SUMMARY: AddressSanitizer: heap-buffer-overflow buffer_overflow.adb:20 in _ada_buffer_overflow
+ ...
+ @end example
+ @end quotation
+ 
  @c -- Non-breaking space in running text
  @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{1bd}@anchor{gnat_ugn/platform_specific_information id1}@anchor{1be}@anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{e}
  @chapter Platform-Specific Information
  
  
*************** related to the GNAT implementation on sp
*** 22899,22905 ****
  @end menu
  
  @node Run-Time Libraries,Specifying a Run-Time Library,,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id2}@anchor{1b8}@anchor{gnat_ugn/platform_specific_information run-time-libraries}@anchor{1b9}
  @section Run-Time Libraries
  
  
--- 23317,23323 ----
  @end menu
  
  @node Run-Time Libraries,Specifying a Run-Time Library,,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id2}@anchor{1bf}@anchor{gnat_ugn/platform_specific_information run-time-libraries}@anchor{1c0}
  @section Run-Time Libraries
  
  
*************** are supplied on various GNAT platforms.
*** 22960,22966 ****
  @end menu
  
  @node Summary of Run-Time Configurations,,,Run-Time Libraries
! @anchor{gnat_ugn/platform_specific_information id3}@anchor{1ba}@anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{1bb}
  @subsection Summary of Run-Time Configurations
  
  
--- 23378,23384 ----
  @end menu
  
  @node Summary of Run-Time Configurations,,,Run-Time Libraries
! @anchor{gnat_ugn/platform_specific_information id3}@anchor{1c1}@anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{1c2}
  @subsection Summary of Run-Time Configurations
  
  
*************** ZCX
*** 23060,23066 ****
  
  
  @node Specifying a Run-Time Library,GNU/Linux Topics,Run-Time Libraries,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id4}@anchor{1bc}@anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{1bd}
  @section Specifying a Run-Time Library
  
  
--- 23478,23484 ----
  
  
  @node Specifying a Run-Time Library,GNU/Linux Topics,Run-Time Libraries,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id4}@anchor{1c3}@anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{1c4}
  @section Specifying a Run-Time Library
  
  
*************** by using the @code{--RTS} switch, e.g.,
*** 23153,23159 ****
  @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{1be}@anchor{gnat_ugn/platform_specific_information id5}@anchor{1bf}
  @section GNU/Linux Topics
  
  
--- 23571,23577 ----
  @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{1c5}@anchor{gnat_ugn/platform_specific_information id5}@anchor{1c6}
  @section GNU/Linux Topics
  
  
*************** This section describes topics that are s
*** 23168,23174 ****
  @end menu
  
  @node Required Packages on GNU/Linux,Position Independent Executable PIE Enabled by Default on Linux,,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information id6}@anchor{1c0}@anchor{gnat_ugn/platform_specific_information required-packages-on-gnu-linux}@anchor{1c1}
  @subsection Required Packages on GNU/Linux
  
  
--- 23586,23592 ----
  @end menu
  
  @node Required Packages on GNU/Linux,Position Independent Executable PIE Enabled by Default on Linux,,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information id6}@anchor{1c7}@anchor{gnat_ugn/platform_specific_information required-packages-on-gnu-linux}@anchor{1c8}
  @subsection Required Packages on GNU/Linux
  
  
*************** Other GNU/Linux distributions might choo
*** 23205,23211 ****
  for those packages.
  
  @node Position Independent Executable PIE Enabled by Default on Linux,Choosing the Scheduling Policy with GNU/Linux,Required Packages on GNU/Linux,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information pie-enabled-by-default-on-linux}@anchor{1c2}@anchor{gnat_ugn/platform_specific_information position-independent-executable-pie-enabled-by-default-on-linux}@anchor{1c3}
  @subsection Position Independent Executable (PIE) Enabled by Default on Linux
  
  
--- 23623,23629 ----
  for those packages.
  
  @node Position Independent Executable PIE Enabled by Default on Linux,Choosing the Scheduling Policy with GNU/Linux,Required Packages on GNU/Linux,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information pie-enabled-by-default-on-linux}@anchor{1c9}@anchor{gnat_ugn/platform_specific_information position-independent-executable-pie-enabled-by-default-on-linux}@anchor{1ca}
  @subsection Position Independent Executable (PIE) Enabled by Default on Linux
  
  
*************** and linked with @code{-pie}).
*** 23253,23261 ****
  @geindex SCHED_RR scheduling policy
  
  @geindex SCHED_OTHER scheduling policy
! @anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-gnu-linux}@anchor{1c4}
  @node Choosing the Scheduling Policy with GNU/Linux,A GNU/Linux Debug Quirk,Position Independent Executable PIE Enabled by Default on Linux,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information id7}@anchor{1c5}
  @subsection Choosing the Scheduling Policy with GNU/Linux
  
  
--- 23671,23679 ----
  @geindex SCHED_RR scheduling policy
  
  @geindex SCHED_OTHER scheduling policy
! @anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-gnu-linux}@anchor{1cb}
  @node Choosing the Scheduling Policy with GNU/Linux,A GNU/Linux Debug Quirk,Position Independent Executable PIE Enabled by Default on Linux,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information id7}@anchor{1cc}
  @subsection Choosing the Scheduling Policy with GNU/Linux
  
  
*************** but not on the host machine running the
*** 23313,23319 ****
  have sufficient priviledge for running the container image.
  
  @node A GNU/Linux Debug Quirk,,Choosing the Scheduling Policy with GNU/Linux,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk}@anchor{1c6}@anchor{gnat_ugn/platform_specific_information id8}@anchor{1c7}
  @subsection A GNU/Linux Debug Quirk
  
  
--- 23731,23737 ----
  have sufficient priviledge for running the container image.
  
  @node A GNU/Linux Debug Quirk,,Choosing the Scheduling Policy with GNU/Linux,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk}@anchor{1cd}@anchor{gnat_ugn/platform_specific_information id8}@anchor{1ce}
  @subsection A GNU/Linux Debug Quirk
  
  
*************** the symptoms most commonly observed.
*** 23333,23339 ****
  @geindex Windows
  
  @node Microsoft Windows Topics,Mac OS Topics,GNU/Linux Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id9}@anchor{1c8}@anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{1c9}
  @section Microsoft Windows Topics
  
  
--- 23751,23757 ----
  @geindex Windows
  
  @node Microsoft Windows Topics,Mac OS Topics,GNU/Linux Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id9}@anchor{1cf}@anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{1d0}
  @section Microsoft Windows Topics
  
  
*************** platforms.
*** 23355,23361 ****
  @end menu
  
  @node Using GNAT on Windows,Using a network installation of GNAT,,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id10}@anchor{1ca}@anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{1cb}
  @subsection Using GNAT on Windows
  
  
--- 23773,23779 ----
  @end menu
  
  @node Using GNAT on Windows,Using a network installation of GNAT,,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id10}@anchor{1d1}@anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{1d2}
  @subsection Using GNAT on Windows
  
  
*************** different GNAT products.
*** 23434,23440 ****
  @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{1cc}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{1cd}
  @subsection Using a network installation of GNAT
  
  
--- 23852,23858 ----
  @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{1d3}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{1d4}
  @subsection Using a network installation of GNAT
  
  
*************** transfer of large amounts of data across
*** 23461,23467 ****
  a 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{1ce}@anchor{gnat_ugn/platform_specific_information id12}@anchor{1cf}
  @subsection CONSOLE and WINDOWS subsystems
  
  
--- 23879,23885 ----
  a 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{1d5}@anchor{gnat_ugn/platform_specific_information id12}@anchor{1d6}
  @subsection CONSOLE and WINDOWS subsystems
  
  
*************** $ gnatmake winprog -largs -mwindows
*** 23486,23492 ****
  @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{1d0}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{1d1}
  @subsection Temporary Files
  
  
--- 23904,23910 ----
  @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{1d7}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{1d8}
  @subsection Temporary Files
  
  
*************** environments where you may not have writ
*** 23524,23530 ****
  directories.
  
  @node Disabling Command Line Argument Expansion,Choosing the Scheduling Policy with Windows,Temporary Files,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information disabling-command-line-argument-expansion}@anchor{1d2}
  @subsection Disabling Command Line Argument Expansion
  
  
--- 23942,23948 ----
  directories.
  
  @node Disabling Command Line Argument Expansion,Choosing the Scheduling Policy with Windows,Temporary Files,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information disabling-command-line-argument-expansion}@anchor{1d9}
  @subsection Disabling Command Line Argument Expansion
  
  
*************** Ada.Command_Line.Argument (1) -> "'*.txt
*** 23595,23601 ****
  @end example
  
  @node Choosing the Scheduling Policy with Windows,Windows Socket Timeouts,Disabling Command Line Argument Expansion,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-windows}@anchor{1d3}@anchor{gnat_ugn/platform_specific_information id14}@anchor{1d4}
  @subsection Choosing the Scheduling Policy with Windows
  
  
--- 24013,24019 ----
  @end example
  
  @node Choosing the Scheduling Policy with Windows,Windows Socket Timeouts,Disabling Command Line Argument Expansion,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-windows}@anchor{1da}@anchor{gnat_ugn/platform_specific_information id14}@anchor{1db}
  @subsection Choosing the Scheduling Policy with Windows
  
  
*************** in @code{system.ads}. For more informati
*** 23613,23619 ****
  refer to Microsoft documentation.
  
  @node Windows Socket Timeouts,Mixed-Language Programming on Windows,Choosing the Scheduling Policy with Windows,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information windows-socket-timeouts}@anchor{1d5}
  @subsection Windows Socket Timeouts
  
  
--- 24031,24037 ----
  refer to Microsoft documentation.
  
  @node Windows Socket Timeouts,Mixed-Language Programming on Windows,Choosing the Scheduling Policy with Windows,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information windows-socket-timeouts}@anchor{1dc}
  @subsection Windows Socket Timeouts
  
  
*************** socket timeout shorter than 500 ms. If a
*** 23661,23667 ****
  operations.
  
  @node Mixed-Language Programming on Windows,Windows Specific Add-Ons,Windows Socket Timeouts,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id15}@anchor{1d6}@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{1d7}
  @subsection Mixed-Language Programming on Windows
  
  
--- 24079,24085 ----
  operations.
  
  @node Mixed-Language Programming on Windows,Windows Specific Add-Ons,Windows Socket Timeouts,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id15}@anchor{1dd}@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{1de}
  @subsection Mixed-Language Programming on Windows
  
  
*************** to use the Microsoft tools for your C++
*** 23683,23694 ****
  You can encapsulate your C++ code in a DLL to be linked with your Ada
  application. In this case, use the Microsoft or other environment to
  build the DLL and use GNAT to build your executable
! (@ref{1d8,,Using DLLs with GNAT}).
  
  @item 
  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{1d9,,Building DLLs with GNAT Project files}) and use the Microsoft
  or other environment to build your executable.
  @end itemize
  
--- 24101,24112 ----
  You can encapsulate your C++ code in a DLL to be linked with your Ada
  application. In this case, use the Microsoft or other environment to
  build the DLL and use GNAT to build your executable
! (@ref{1df,,Using DLLs with GNAT}).
  
  @item 
  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{1e0,,Building DLLs with GNAT Project files}) and use the Microsoft
  or other environment to build your executable.
  @end itemize
  
*************** native SEH support is used.
*** 23745,23751 ****
  @end menu
  
  @node Windows Calling Conventions,Introduction to Dynamic Link Libraries DLLs,,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id16}@anchor{1da}@anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{1db}
  @subsubsection Windows Calling Conventions
  
  
--- 24163,24169 ----
  @end menu
  
  @node Windows Calling Conventions,Introduction to Dynamic Link Libraries DLLs,,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id16}@anchor{1e1}@anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{1e2}
  @subsubsection Windows Calling Conventions
  
  
*************** are available for Windows:
*** 23790,23796 ****
  @end menu
  
  @node C Calling Convention,Stdcall Calling Convention,,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{1dc}@anchor{gnat_ugn/platform_specific_information id17}@anchor{1dd}
  @subsubsection @code{C} Calling Convention
  
  
--- 24208,24214 ----
  @end menu
  
  @node C Calling Convention,Stdcall Calling Convention,,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{1e3}@anchor{gnat_ugn/platform_specific_information id17}@anchor{1e4}
  @subsubsection @code{C} Calling Convention
  
  
*************** the @code{External_Name} with a leading
*** 23832,23841 ****
  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{1de,,Stdcall Calling Convention}).
  
  @node Stdcall Calling Convention,Win32 Calling Convention,C Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information id18}@anchor{1df}@anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{1de}
  @subsubsection @code{Stdcall} Calling Convention
  
  
--- 24250,24259 ----
  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{1e5,,Stdcall Calling Convention}).
  
  @node Stdcall Calling Convention,Win32 Calling Convention,C Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information id18}@anchor{1e6}@anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{1e5}
  @subsubsection @code{Stdcall} Calling Convention
  
  
*************** Note that to ease building cross-platfor
*** 23933,23939 ****
  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 id19}@anchor{1e0}@anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{1e1}
  @subsubsection @code{Win32} Calling Convention
  
  
--- 24351,24357 ----
  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 id19}@anchor{1e7}@anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{1e8}
  @subsubsection @code{Win32} Calling Convention
  
  
*************** This convention, which is GNAT-specific,
*** 23941,23947 ****
  @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{1e2}@anchor{gnat_ugn/platform_specific_information id20}@anchor{1e3}
  @subsubsection @code{DLL} Calling Convention
  
  
--- 24359,24365 ----
  @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{1e9}@anchor{gnat_ugn/platform_specific_information id20}@anchor{1ea}
  @subsubsection @code{DLL} Calling Convention
  
  
*************** This convention, which is GNAT-specific,
*** 23949,23955 ****
  @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 id21}@anchor{1e4}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{1e5}
  @subsubsection Introduction to Dynamic Link Libraries (DLLs)
  
  
--- 24367,24373 ----
  @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 id21}@anchor{1eb}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{1ec}
  @subsubsection Introduction to Dynamic Link Libraries (DLLs)
  
  
*************** As a side note, an interesting differenc
*** 24033,24042 ****
  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{1e6,,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 id22}@anchor{1e7}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{1d8}
  @subsubsection Using DLLs with GNAT
  
  
--- 24451,24460 ----
  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{1ed,,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 id22}@anchor{1ee}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{1df}
  @subsubsection Using DLLs with GNAT
  
  
*************** example a fictitious DLL called @code{AP
*** 24127,24133 ****
  @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{1e8}@anchor{gnat_ugn/platform_specific_information id23}@anchor{1e9}
  @subsubsection Creating an Ada Spec for the DLL Services
  
  
--- 24545,24551 ----
  @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{1ef}@anchor{gnat_ugn/platform_specific_information id23}@anchor{1f0}
  @subsubsection Creating an Ada Spec for the DLL Services
  
  
*************** end API;
*** 24167,24173 ****
  @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{1ea}@anchor{gnat_ugn/platform_specific_information id24}@anchor{1eb}
  @subsubsection Creating an Import Library
  
  
--- 24585,24591 ----
  @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{1f1}@anchor{gnat_ugn/platform_specific_information id24}@anchor{1f2}
  @subsubsection Creating an Import Library
  
  
*************** as in this case it is possible to link d
*** 24181,24187 ****
  DLL. Otherwise read on.
  
  @geindex Definition file
! @anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{1e6}
  @subsubheading The Definition File
  
  
--- 24599,24605 ----
  DLL. Otherwise read on.
  
  @geindex Definition file
! @anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{1ed}
  @subsubheading The Definition File
  
  
*************** EXPORTS
*** 24229,24245 ****
  @end table
  
  Note that you must specify the correct suffix (@code{@@@var{nn}})
! (see @ref{1db,,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{1ec}
  @subsubheading Creating a Definition File Automatically
  
  
  You can automatically create the definition file @code{API.def}
! (see @ref{1e6,,The Definition File}) from a DLL.
  To do that, use the @code{dlltool} program as follows:
  
  @quotation
--- 24647,24663 ----
  @end table
  
  Note that you must specify the correct suffix (@code{@@@var{nn}})
! (see @ref{1e2,,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{1f3}
  @subsubheading Creating a Definition File Automatically
  
  
  You can automatically create the definition file @code{API.def}
! (see @ref{1ed,,The Definition File}) from a DLL.
  To do that, use the @code{dlltool} program as follows:
  
  @quotation
*************** $ dlltool API.dll -z API.def --export-al
*** 24249,24255 ****
  @end example
  
  Note that if some routines in the DLL have the @code{Stdcall} convention
! (@ref{1db,,Windows Calling Conventions}) with stripped @code{@@@var{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.
  
--- 24667,24673 ----
  @end example
  
  Note that if some routines in the DLL have the @code{Stdcall} convention
! (@ref{1e2,,Windows Calling Conventions}) with stripped @code{@@@var{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.
  
*************** tells you what symbol is expected. You t
*** 24274,24286 ****
  definition file and add the right suffix.
  @end itemize
  @end quotation
! @anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{1ed}
  @subsubheading GNAT-Style Import Library
  
  
  To create a static import library from @code{API.dll} with the GNAT tools,
  you should create the @code{.def} file and use the @code{gnatdll} tool
! (see @ref{1ee,,Using gnatdll}) as follows:
  
  @quotation
  
--- 24692,24704 ----
  definition file and add the right suffix.
  @end itemize
  @end quotation
! @anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{1f4}
  @subsubheading GNAT-Style Import Library
  
  
  To create a static import library from @code{API.dll} with the GNAT tools,
  you should create the @code{.def} file and use the @code{gnatdll} tool
! (see @ref{1f5,,Using gnatdll}) as follows:
  
  @quotation
  
*************** definition file name is @code{xyz.def},
*** 24296,24310 ****
  be @code{libxyz.a}. Note that in the previous example, the switch
  @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{1ee,,Using gnatdll} for more information about @code{gnatdll}).
  @end quotation
! @anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{1ef}
  @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{1d7,,Mixed-Language Programming on Windows}).
  
  To create a Microsoft-style import library for @code{API.dll} you
  should create the @code{.def} file, then build the actual import library using
--- 24714,24728 ----
  be @code{libxyz.a}. Note that in the previous example, the switch
  @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{1f5,,Using gnatdll} for more information about @code{gnatdll}).
  @end quotation
! @anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{1f6}
  @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{1de,,Mixed-Language Programming on Windows}).
  
  To create a Microsoft-style import library for @code{API.dll} you
  should create the @code{.def} file, then build the actual import library using
*************** See the Microsoft documentation for furt
*** 24328,24334 ****
  @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{1d9}@anchor{gnat_ugn/platform_specific_information id25}@anchor{1f0}
  @subsubsection Building DLLs with GNAT Project files
  
  
--- 24746,24752 ----
  @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{1e0}@anchor{gnat_ugn/platform_specific_information id25}@anchor{1f7}
  @subsubsection Building DLLs with GNAT Project files
  
  
*************** when inside the @code{DllMain} routine w
*** 24344,24350 ****
  of shared libraries, so you can’t 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{1f1}@anchor{gnat_ugn/platform_specific_information id26}@anchor{1f2}
  @subsubsection Building DLLs with GNAT
  
  
--- 24762,24768 ----
  of shared libraries, so you can’t 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{1f8}@anchor{gnat_ugn/platform_specific_information id26}@anchor{1f9}
  @subsubsection Building DLLs with GNAT
  
  
*************** $ gcc -shared -shared-libgcc -o api.dll
*** 24375,24381 ****
  It’s important to note that in this case all symbols found in the
  object files are automatically exported. You can restrict
  the set of symbols to export by passing to @code{gcc} a definition
! file (see @ref{1e6,,The Definition File}).
  For example:
  
  @example
--- 24793,24799 ----
  It’s important to note that in this case all symbols found in the
  object files are automatically exported. You can restrict
  the set of symbols to export by passing to @code{gcc} a definition
! file (see @ref{1ed,,The Definition File}).
  For example:
  
  @example
*************** $ gnatmake main -Iapilib -bargs -shared
*** 24413,24419 ****
  @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{1f3}@anchor{gnat_ugn/platform_specific_information id27}@anchor{1f4}
  @subsubsection Building DLLs with gnatdll
  
  
--- 24831,24837 ----
  @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{1fa}@anchor{gnat_ugn/platform_specific_information id27}@anchor{1fb}
  @subsubsection Building DLLs with gnatdll
  
  
*************** $ gnatmake main -Iapilib -bargs -shared
*** 24421,24428 ****
  @geindex building
  
  Note that it is preferred to use GNAT Project files
! (@ref{1d9,,Building DLLs with GNAT Project files}) or the built-in GNAT
! DLL support (@ref{1f1,,Building DLLs with GNAT}) 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
--- 24839,24846 ----
  @geindex building
  
  Note that it is preferred to use GNAT Project files
! (@ref{1e0,,Building DLLs with GNAT Project files}) or the built-in GNAT
! DLL support (@ref{1f8,,Building DLLs with GNAT}) 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:
*** 24438,24457 ****
  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{1f5,,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{1f6,,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} (also generated by @code{gnatbind}) to perform the
! finalization of the Ada code in the DLL (@ref{1f7,,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.
  
--- 24856,24875 ----
  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{1fc,,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{1fd,,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} (also generated by @code{gnatbind}) to perform the
! finalization of the Ada code in the DLL (@ref{1fe,,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
*** 24461,24471 ****
  
  @item 
  You must provide a definition file listing the exported entities
! (@ref{1e6,,The Definition File}).
  
  @item 
  Finally, you must use @code{gnatdll} to produce the DLL and the import
! library (@ref{1ee,,Using gnatdll}).
  @end itemize
  
  Note that a relocatable DLL stripped using the @code{strip}
--- 24879,24889 ----
  
  @item 
  You must provide a definition file listing the exported entities
! (@ref{1ed,,The Definition File}).
  
  @item 
  Finally, you must use @code{gnatdll} to produce the DLL and the import
! library (@ref{1f5,,Using gnatdll}).
  @end itemize
  
  Note that a relocatable DLL stripped using the @code{strip}
*************** chapter of the `GPRbuild User’s Guide'
*** 24485,24491 ****
  @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{1f8}
  @subsubsection Limitations When Using Ada DLLs from Ada
  
  
--- 24903,24909 ----
  @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{1ff}
  @subsubsection Limitations When Using Ada DLLs from Ada
  
  
*************** It is completely safe to exchange plain
*** 24506,24512 ****
  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{1f5}@anchor{gnat_ugn/platform_specific_information id28}@anchor{1f9}
  @subsubsection Exporting Ada Entities
  
  
--- 24924,24930 ----
  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{1fc}@anchor{gnat_ugn/platform_specific_information id28}@anchor{200}
  @subsubsection Exporting Ada Entities
  
  
*************** end API;
*** 24606,24615 ****
  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{1fa,,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{1f6}@anchor{gnat_ugn/platform_specific_information id29}@anchor{1fb}
  @subsubsection Ada DLLs and Elaboration
  
  
--- 25024,25033 ----
  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{201,,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{1fd}@anchor{gnat_ugn/platform_specific_information id29}@anchor{202}
  @subsubsection Ada DLLs and Elaboration
  
  
*************** the Ada elaboration routine @code{adaini
*** 24627,24633 ****
  (@ref{7f,,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{1ee,,Using gnatdll}).
  
  When a DLL is loaded, Windows systematically invokes a routine called
  @code{DllMain}. It should therefore be possible to call @code{adainit}
--- 25045,25051 ----
  (@ref{7f,,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{1f5,,Using gnatdll}).
  
  When a DLL is loaded, Windows systematically invokes a routine called
  @code{DllMain}. It should therefore be possible to call @code{adainit}
*************** time), which means that the GNAT run-tim
*** 24640,24646 ****
  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{1f7}@anchor{gnat_ugn/platform_specific_information id30}@anchor{1fc}
  @subsubsection Ada DLLs and Finalization
  
  
--- 25058,25064 ----
  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{1fe}@anchor{gnat_ugn/platform_specific_information id30}@anchor{203}
  @subsubsection Ada DLLs and Finalization
  
  
*************** routine @code{adafinal} generated by the
*** 24655,24664 ****
  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{1ee,,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{1fd}@anchor{gnat_ugn/platform_specific_information id31}@anchor{1fe}
  @subsubsection Creating a Spec for Ada DLLs
  
  
--- 25073,25082 ----
  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{1f5,,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{204}@anchor{gnat_ugn/platform_specific_information id31}@anchor{205}
  @subsubsection Creating a Spec for Ada DLLs
  
  
*************** end API;
*** 24716,24722 ****
  @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{1fa}@anchor{gnat_ugn/platform_specific_information id32}@anchor{1ff}
  @subsubsection Creating the Definition File
  
  
--- 25134,25140 ----
  @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{201}@anchor{gnat_ugn/platform_specific_information id32}@anchor{206}
  @subsubsection Creating the Definition File
  
  
*************** EXPORTS
*** 24752,24758 ****
  @end quotation
  
  @node Using gnatdll,,Creating the Definition File,Creating a Spec for Ada DLLs
! @anchor{gnat_ugn/platform_specific_information id33}@anchor{200}@anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{1ee}
  @subsubsection Using @code{gnatdll}
  
  
--- 25170,25176 ----
  @end quotation
  
  @node Using gnatdll,,Creating the Definition File,Creating a Spec for Ada DLLs
! @anchor{gnat_ugn/platform_specific_information id33}@anchor{207}@anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{1f5}
  @subsubsection Using @code{gnatdll}
  
  
*************** asks @code{gnatlink} to generate the rou
*** 24956,24962 ****
  is loaded into memory.
  
  @item 
! uses @code{dlltool} (see @ref{201,,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.
--- 25374,25380 ----
  is loaded into memory.
  
  @item 
! uses @code{dlltool} (see @ref{208,,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
*** 24994,25000 ****
  $ gnatlink api api.exp -o api.dll -mdll
  @end example
  @end itemize
! @anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{201}
  @subsubheading Using @code{dlltool}
  
  
--- 25412,25418 ----
  $ gnatlink api api.exp -o api.dll -mdll
  @end example
  @end itemize
! @anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{208}
  @subsubheading Using @code{dlltool}
  
  
*************** DLL in the static import library generat
*** 25052,25058 ****
  @item @code{-k}
  
  Kill @code{@@@var{nn}} from exported names
! (@ref{1db,,Windows Calling Conventions}
  for a discussion about @code{Stdcall}-style symbols).
  @end table
  
--- 25470,25476 ----
  @item @code{-k}
  
  Kill @code{@@@var{nn}} from exported names
! (@ref{1e2,,Windows Calling Conventions}
  for a discussion about @code{Stdcall}-style symbols).
  @end table
  
*************** Use @code{assembler-name} as the assembl
*** 25108,25114 ****
  @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{202}@anchor{gnat_ugn/platform_specific_information id34}@anchor{203}
  @subsubsection GNAT and Windows Resources
  
  
--- 25526,25532 ----
  @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{209}@anchor{gnat_ugn/platform_specific_information id34}@anchor{20a}
  @subsubsection GNAT and Windows Resources
  
  
*************** the corresponding Microsoft documentatio
*** 25200,25206 ****
  @end menu
  
  @node Building Resources,Compiling Resources,,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information building-resources}@anchor{204}@anchor{gnat_ugn/platform_specific_information id35}@anchor{205}
  @subsubsection Building Resources
  
  
--- 25618,25624 ----
  @end menu
  
  @node Building Resources,Compiling Resources,,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information building-resources}@anchor{20b}@anchor{gnat_ugn/platform_specific_information id35}@anchor{20c}
  @subsubsection Building Resources
  
  
*************** complete description of the resource scr
*** 25220,25226 ****
  the Microsoft documentation.
  
  @node Compiling Resources,Using Resources,Building Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{206}@anchor{gnat_ugn/platform_specific_information id36}@anchor{207}
  @subsubsection Compiling Resources
  
  
--- 25638,25644 ----
  the Microsoft documentation.
  
  @node Compiling Resources,Using Resources,Building Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{20d}@anchor{gnat_ugn/platform_specific_information id36}@anchor{20e}
  @subsubsection Compiling Resources
  
  
*************** $ windres -i myres.res -o myres.o
*** 25262,25268 ****
  @end quotation
  
  @node Using Resources,,Compiling Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information id37}@anchor{208}@anchor{gnat_ugn/platform_specific_information using-resources}@anchor{209}
  @subsubsection Using Resources
  
  
--- 25680,25686 ----
  @end quotation
  
  @node Using Resources,,Compiling Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information id37}@anchor{20f}@anchor{gnat_ugn/platform_specific_information using-resources}@anchor{210}
  @subsubsection Using Resources
  
  
*************** $ gnatmake myprog -largs myres.o
*** 25282,25288 ****
  @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{20a}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{20b}
  @subsubsection Using GNAT DLLs from Microsoft Visual Studio Applications
  
  
--- 25700,25706 ----
  @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{211}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{212}
  @subsubsection Using GNAT DLLs from Microsoft Visual Studio Applications
  
  
*************** $ gprbuild -p mylib.gpr
*** 25317,25323 ****
  @item 
  Produce a @code{.def} file for the symbols you need to interface
  with, either by hand or automatically with possibly some manual
! adjustments (see @ref{1ec,,Creating Definition File Automatically}):
  @end enumerate
  
  @quotation
--- 25735,25741 ----
  @item 
  Produce a @code{.def} file for the symbols you need to interface
  with, either by hand or automatically with possibly some manual
! adjustments (see @ref{1f3,,Creating Definition File Automatically}):
  @end enumerate
  
  @quotation
*************** $ dlltool libmylib.dll -z libmylib.def -
*** 25334,25340 ****
  Make sure that MSVS command-line tools are accessible on the path.
  
  @item 
! Create the Microsoft-style import library (see @ref{1ef,,MSVS-Style Import Library}):
  @end enumerate
  
  @quotation
--- 25752,25758 ----
  Make sure that MSVS command-line tools are accessible on the path.
  
  @item 
! Create the Microsoft-style import library (see @ref{1f6,,MSVS-Style Import Library}):
  @end enumerate
  
  @quotation
*************** the @code{.exe}.
*** 25377,25383 ****
  @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{20c}@anchor{gnat_ugn/platform_specific_information id38}@anchor{20d}
  @subsubsection Debugging a DLL
  
  
--- 25795,25801 ----
  @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{213}@anchor{gnat_ugn/platform_specific_information id38}@anchor{214}
  @subsubsection Debugging a DLL
  
  
*************** debugger compatible with the tools suite
*** 25414,25420 ****
  @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 id39}@anchor{20e}@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{20f}
  @subsubsection Program and DLL Both Built with GCC/GNAT
  
  
--- 25832,25838 ----
  @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 id39}@anchor{215}@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{216}
  @subsubsection Program and DLL Both Built with GCC/GNAT
  
  
*************** the process. Let’s suppose the main pr
*** 25424,25430 ****
  @code{ada_main} and in the DLL there’s an entry point named
  @code{ada_dll}.
  
! The DLL (@ref{1e5,,Introduction to Dynamic Link Libraries (DLLs)}) and
  program must have been built with the debugging information (see the GNAT
  @code{-g} switch). Here are the step-by-step instructions for debugging it:
  
--- 25842,25848 ----
  @code{ada_main} and in the DLL there’s an entry point named
  @code{ada_dll}.
  
! The DLL (@ref{1ec,,Introduction to Dynamic Link Libraries (DLLs)}) and
  program must have been built with the debugging information (see the GNAT
  @code{-g} switch). Here are the step-by-step instructions for debugging it:
  
*************** Set a breakpoint inside the DLL
*** 25461,25470 ****
  
  At this stage, a breakpoint is set inside the DLL. From there on
  you can use standard @code{GDB} commands to debug the whole program
! (@ref{152,,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 id40}@anchor{210}@anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{211}
  @subsubsection Program Built with Foreign Tools and DLL Built with GCC/GNAT
  
  
--- 25879,25888 ----
  
  At this stage, a breakpoint is set inside the DLL. From there on
  you can use standard @code{GDB} commands to debug the whole program
! (@ref{153,,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 id40}@anchor{217}@anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{218}
  @subsubsection Program Built with Foreign Tools and DLL Built with GCC/GNAT
  
  
*************** case, for example, for some C code built
*** 25481,25487 ****
  there’s a DLL named @code{test.dll} containing an Ada entry point named
  @code{ada_dll}.
  
! The DLL (see @ref{1e5,,Introduction to Dynamic Link Libraries (DLLs)}) must have
  been built with debugging information (see the GNAT @code{-g} switch).
  
  @subsubheading Debugging the DLL Directly
--- 25899,25905 ----
  there’s a DLL named @code{test.dll} containing an Ada entry point named
  @code{ada_dll}.
  
! The DLL (see @ref{1ec,,Introduction to Dynamic Link Libraries (DLLs)}) must have
  been built with debugging information (see the GNAT @code{-g} switch).
  
  @subsubheading Debugging the DLL Directly
*************** Continue the program.
*** 25548,25554 ****
  This runs the program until it reaches the breakpoint that you’ve
  set. From that point, you can use standard @code{GDB} commands to debug
  a program as described in
! (@ref{152,,Running and Debugging Ada Programs}).
  @end itemize
  
  You can also debug the DLL by attaching @code{GDB} to a running process.
--- 25966,25972 ----
  This runs the program until it reaches the breakpoint that you’ve
  set. From that point, you can use standard @code{GDB} commands to debug
  a program as described in
! (@ref{153,,Running and Debugging Ada Programs}).
  @end itemize
  
  You can also debug the DLL by attaching @code{GDB} to a running process.
*************** Continue process execution.
*** 25618,25627 ****
  This last step will resume the process execution and stop at
  the breakpoint we have set. From there you can use standard
  @code{GDB} commands to debug a program, as described in
! @ref{152,,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 id41}@anchor{212}@anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{12b}
  @subsubsection Setting Stack Size from @code{gnatlink}
  
  
--- 26036,26045 ----
  This last step will resume the process execution and stop at
  the breakpoint we have set. From there you can use standard
  @code{GDB} commands to debug a program, as described in
! @ref{153,,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 id41}@anchor{219}@anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{12b}
  @subsubsection Setting Stack Size from @code{gnatlink}
  
  
*************** because the comma is a separator for thi
*** 25665,25671 ****
  @end itemize
  
  @node Setting Heap Size from gnatlink,,Setting Stack Size from gnatlink,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id42}@anchor{213}@anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{12c}
  @subsubsection Setting Heap Size from @code{gnatlink}
  
  
--- 26083,26089 ----
  @end itemize
  
  @node Setting Heap Size from gnatlink,,Setting Stack Size from gnatlink,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id42}@anchor{21a}@anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{12c}
  @subsubsection Setting Heap Size from @code{gnatlink}
  
  
*************** because the comma is a separator for thi
*** 25698,25704 ****
  @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{214}@anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{215}
  @subsection Windows Specific Add-Ons
  
  
--- 26116,26122 ----
  @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{21b}@anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{21c}
  @subsection Windows Specific Add-Ons
  
  
*************** This section describes the Windows speci
*** 25711,25717 ****
  @end menu
  
  @node Win32Ada,wPOSIX,,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information id43}@anchor{216}@anchor{gnat_ugn/platform_specific_information win32ada}@anchor{217}
  @subsubsection Win32Ada
  
  
--- 26129,26135 ----
  @end menu
  
  @node Win32Ada,wPOSIX,,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information id43}@anchor{21d}@anchor{gnat_ugn/platform_specific_information win32ada}@anchor{21e}
  @subsubsection Win32Ada
  
  
*************** gprbuild p.gpr
*** 25742,25748 ****
  @end quotation
  
  @node wPOSIX,,Win32Ada,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information id44}@anchor{218}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{219}
  @subsubsection wPOSIX
  
  
--- 26160,26166 ----
  @end quotation
  
  @node wPOSIX,,Win32Ada,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information id44}@anchor{21f}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{220}
  @subsubsection wPOSIX
  
  
*************** gprbuild p.gpr
*** 25775,25781 ****
  @end quotation
  
  @node Mac OS Topics,,Microsoft Windows Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id45}@anchor{21a}@anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{21b}
  @section Mac OS Topics
  
  
--- 26193,26199 ----
  @end quotation
  
  @node Mac OS Topics,,Microsoft Windows Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id45}@anchor{221}@anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{222}
  @section Mac OS Topics
  
  
*************** platform.
*** 25790,25796 ****
  @end menu
  
  @node Codesigning the Debugger,,,Mac OS Topics
! @anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{21c}
  @subsection Codesigning the Debugger
  
  
--- 26208,26214 ----
  @end menu
  
  @node Codesigning the Debugger,,,Mac OS Topics
! @anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{223}
  @subsection Codesigning the Debugger
  
  
*************** installed GNAT.  Also, be sure that user
*** 25872,25878 ****
  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{21d}@anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{f}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{21e}
  @chapter Example of Binder Output File
  
  
--- 26290,26296 ----
  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{224}@anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{f}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{225}
  @chapter Example of Binder Output File
  
  
*************** elaboration code in your own application
*** 26622,26628 ****
  @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{21f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{10}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{220}
  @chapter Elaboration Order Handling in GNAT
  
  
--- 27040,27046 ----
  @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{226}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{10}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{227}
  @chapter Elaboration Order Handling in GNAT
  
  
*************** GNAT, either automatically or with expli
*** 26652,26658 ****
  @end menu
  
  @node Elaboration Code,Elaboration Order,,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{221}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{222}
  @section Elaboration Code
  
  
--- 27070,27076 ----
  @end menu
  
  @node Elaboration Code,Elaboration Order,,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{228}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{229}
  @section Elaboration Code
  
  
*************** elaborated.
*** 26801,26807 ****
  @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{223}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{224}
  @section Elaboration Order
  
  
--- 27219,27225 ----
  @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{22a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{22b}
  @section Elaboration Order
  
  
*************** however a compiler may not always find s
*** 26971,26977 ****
  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{225}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{226}
  @section Checking the Elaboration Order
  
  
--- 27389,27395 ----
  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{22c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{22d}
  @section Checking the Elaboration Order
  
  
*************** order.
*** 27032,27038 ****
  @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{227}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{228}
  @section Controlling the Elaboration Order in Ada
  
  
--- 27450,27456 ----
  @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{22e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{22f}
  @section Controlling the Elaboration Order in Ada
  
  
*************** is that the program continues to stay in
*** 27361,27367 ****
  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{229}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{22a}
  @section Controlling the Elaboration Order in GNAT
  
  
--- 27779,27785 ----
  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{230}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{231}
  @section Controlling the Elaboration Order in GNAT
  
  
*************** that in this mode, GNAT may not diagnose
*** 27492,27498 ****
  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{22b}@anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{22c}
  @section Mixing Elaboration Models
  
  
--- 27910,27916 ----
  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{232}@anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{233}
  @section Mixing Elaboration Models
  
  
*************** warning:   "y.ads" which has static elab
*** 27539,27545 ****
  You can suppress these warnings by specifying 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{22d}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{22e}
  @section ABE Diagnostics
  
  
--- 27957,27963 ----
  You can suppress these warnings by specifying 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{234}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{235}
  @section ABE Diagnostics
  
  
*************** declaration @code{Safe} because the body
*** 27646,27652 ****
  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{22f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics}@anchor{230}
  @section SPARK Diagnostics
  
  
--- 28064,28070 ----
  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{236}@anchor{gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics}@anchor{237}
  @section SPARK Diagnostics
  
  
*************** rules.
*** 27672,27678 ****
  @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{231}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{232}
  @section Elaboration Circularities
  
  
--- 28090,28096 ----
  @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{238}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{239}
  @section Elaboration Circularities
  
  
*************** This section enumerates various tactics
*** 27772,27778 ****
  @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{233}@anchor{gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities}@anchor{234}
  @section Resolving Elaboration Circularities
  
  
--- 28190,28196 ----
  @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{23a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities}@anchor{23b}
  @section Resolving Elaboration Circularities
  
  
*************** Use the relaxed dynamic-elaboration mode
*** 28043,28049 ****
  @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{235}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{236}
  @section Elaboration-related Compiler Switches
  
  
--- 28461,28467 ----
  @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{23c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{23d}
  @section Elaboration-related Compiler Switches
  
  
*************** checks. The example above will still fai
*** 28224,28230 ****
  @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{237}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{238}
  @section Summary of Procedures for Elaboration Control
  
  
--- 28642,28648 ----
  @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{23e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{23f}
  @section Summary of Procedures for Elaboration Control
  
  
*************** Use the relaxed dynamic elaboration mode
*** 28282,28288 ****
  @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{239}@anchor{gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order}@anchor{23a}
  @section Inspecting the Chosen Elaboration Order
  
  
--- 28700,28706 ----
  @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{240}@anchor{gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order}@anchor{241}
  @section Inspecting the Chosen Elaboration Order
  
  
*************** gdbstr (body)
*** 28425,28431 ****
  @end quotation
  
  @node Inline Assembler,GNU Free Documentation License,Elaboration Order Handling in GNAT,Top
! @anchor{gnat_ugn/inline_assembler doc}@anchor{23b}@anchor{gnat_ugn/inline_assembler id1}@anchor{23c}@anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{11}
  @chapter Inline Assembler
  
  
--- 28843,28849 ----
  @end quotation
  
  @node Inline Assembler,GNU Free Documentation License,Elaboration Order Handling in GNAT,Top
! @anchor{gnat_ugn/inline_assembler doc}@anchor{242}@anchor{gnat_ugn/inline_assembler id1}@anchor{243}@anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{11}
  @chapter Inline Assembler
  
  
*************** and assembly language programming.
*** 28484,28490 ****
  @end menu
  
  @node Basic Assembler Syntax,A Simple Example of Inline Assembler,,Inline Assembler
! @anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{23d}@anchor{gnat_ugn/inline_assembler id2}@anchor{23e}
  @section Basic Assembler Syntax
  
  
--- 28902,28908 ----
  @end menu
  
  @node Basic Assembler Syntax,A Simple Example of Inline Assembler,,Inline Assembler
! @anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{244}@anchor{gnat_ugn/inline_assembler id2}@anchor{245}
  @section Basic Assembler Syntax
  
  
*************** Intel: Destination first; for example @c
*** 28600,28606 ****
  
  
  @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{23f}@anchor{gnat_ugn/inline_assembler id3}@anchor{240}
  @section A Simple Example of Inline Assembler
  
  
--- 29018,29024 ----
  
  
  @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{246}@anchor{gnat_ugn/inline_assembler id3}@anchor{247}
  @section A Simple Example of Inline Assembler
  
  
*************** If there are no errors, @code{as} genera
*** 28749,28755 ****
  @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{241}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{242}
  @section Output Variables in Inline Assembler
  
  
--- 29167,29173 ----
  @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{248}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{249}
  @section Output Variables in Inline Assembler
  
  
*************** end Get_Flags_3;
*** 29116,29122 ****
  @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{243}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{244}
  @section Input Variables in Inline Assembler
  
  
--- 29534,29540 ----
  @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{24a}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{24b}
  @section Input Variables in Inline Assembler
  
  
*************** _increment__incr.1:
*** 29205,29211 ****
  @end quotation
  
  @node Inlining Inline Assembler Code,Other Asm Functionality,Input Variables in Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id6}@anchor{245}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{246}
  @section Inlining Inline Assembler Code
  
  
--- 29623,29629 ----
  @end quotation
  
  @node Inlining Inline Assembler Code,Other Asm Functionality,Input Variables in Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id6}@anchor{24c}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{24d}
  @section Inlining Inline Assembler Code
  
  
*************** movl %esi,%eax
*** 29276,29282 ****
  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{247}@anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{248}
  @section Other @code{Asm} Functionality
  
  
--- 29694,29700 ----
  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{24e}@anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{24f}
  @section Other @code{Asm} Functionality
  
  
*************** and @code{Volatile}, which inhibits unwa
*** 29291,29297 ****
  @end menu
  
  @node The Clobber Parameter,The Volatile Parameter,,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler id8}@anchor{249}@anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{24a}
  @subsection The @code{Clobber} Parameter
  
  
--- 29709,29715 ----
  @end menu
  
  @node The Clobber Parameter,The Volatile Parameter,,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler id8}@anchor{250}@anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{251}
  @subsection The @code{Clobber} Parameter
  
  
*************** Use ‘register’ name @code{memory} if
*** 29355,29361 ****
  @end itemize
  
  @node The Volatile Parameter,,The Clobber Parameter,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler id9}@anchor{24b}@anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{24c}
  @subsection The @code{Volatile} Parameter
  
  
--- 29773,29779 ----
  @end itemize
  
  @node The Volatile Parameter,,The Clobber Parameter,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler id9}@anchor{252}@anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{253}
  @subsection The @code{Volatile} Parameter
  
  
*************** to @code{True} only if the compiler’s
*** 29391,29397 ****
  problems.
  
  @node GNU Free Documentation License,Index,Inline Assembler,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{24d}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{24e}
  @chapter GNU Free Documentation License
  
  
--- 29809,29815 ----
  problems.
  
  @node GNU Free Documentation License,Index,Inline Assembler,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{254}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{255}
  @chapter GNU Free Documentation License
  
  
diff -Nrcpad gcc-16-20250629/gcc/ada/gnatls.adb gcc-16-20250706/gcc/ada/gnatls.adb
*** gcc-16-20250629/gcc/ada/gnatls.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/gnatls.adb	Sun Jul  6 22:32:09 2025
*************** procedure Gnatls is
*** 117,123 ****
  
     Also_Predef       : Boolean := False;  --  -a
     Dependable        : Boolean := False;  --  -d
-    License           : Boolean := False;  --  -l
     Very_Verbose_Mode : Boolean := False;  --  -V
     --  Command line flags
  
--- 117,122 ----
*************** procedure Gnatls is
*** 188,196 ****
     procedure Usage;
     --  Print usage message
  
-    procedure Output_License_Information;
-    --  Output license statement, and if not found, output reference to COPYING
- 
     function Image (Restriction : Restriction_Id) return String;
     --  Returns the capitalized image of Restriction
  
--- 187,192 ----
*************** procedure Gnatls is
*** 881,900 ****
        return Normalize_Pathname (Path);
     end Normalize;
  
-    --------------------------------
-    -- Output_License_Information --
-    --------------------------------
- 
-    procedure Output_License_Information is
-    begin
-       case Build_Type is
-          when others =>
-             Write_Str ("Please refer to file COPYING in your distribution"
-                      & " for license terms.");
-             Write_Eol;
-       end case;
-    end Output_License_Information;
- 
     -------------------
     -- Output_Object --
     -------------------
--- 877,882 ----
*************** procedure Gnatls is
*** 1794,1800 ****
                 when 'o' => Reset_Print; Print_Object := True;
                 when 'v' => Verbose_Mode              := True;
                 when 'd' => Dependable                := True;
-                when 'l' => License                   := True;
                 when 'V' => Very_Verbose_Mode         := True;
  
                 when others => OK := False;
--- 1776,1781 ----
*************** procedure Gnatls is
*** 1948,1958 ****
                                 "depend");
        Write_Eol;
  
-       --  Line for -l
- 
-       Write_Str ("  -l         output license information");
-       Write_Eol;
- 
        --  Line for -v
  
        Write_Str ("  -v         verbose output, full path and unit " &
--- 1929,1934 ----
*************** begin
*** 2048,2068 ****
        Next_Arg := Next_Arg + 1;
     end loop Scan_Args;
  
-    --  If -l (output license information) is given, it must be the only switch
- 
-    if License then
-       if Arg_Count = 2 then
-          Output_License_Information;
- 
-       else
-          Set_Standard_Error;
-          Write_Str ("Can't use -l with another switch");
-          Write_Eol;
-          Try_Help;
-          Exit_Program (E_Fatal);
-       end if;
-    end if;
- 
     --  Handle --RTS switch
  
     if RTS_Specified /= null then
--- 2024,2029 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/init.c gcc-16-20250706/gcc/ada/init.c
*** gcc-16-20250629/gcc/ada/init.c	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/init.c	Sun Jul  6 22:32:09 2025
***************
*** 47,52 ****
--- 47,53 ----
  #ifdef __vxworks
  #include "vxWorks.h"
  #include "version.h" /* for _WRS_VXWORKS_MAJOR */
+ #include <string.h> /* for strncmp */
  #endif
  
  #ifdef __ANDROID__
diff -Nrcpad gcc-16-20250629/gcc/ada/inline.adb gcc-16-20250706/gcc/ada/inline.adb
*** gcc-16-20250629/gcc/ada/inline.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/inline.adb	Sun Jul  6 22:32:09 2025
*************** package body Inline is
*** 3397,3406 ****
        --  If the function body is a single expression, replace call with
        --  expression, else insert block appropriately.
  
-       procedure Rewrite_Procedure_Call (N : Node_Id; Blk : Node_Id);
-       --  If procedure body has no local variables, inline body without
-       --  creating block, otherwise rewrite call with block.
- 
        ---------------------
        -- Make_Exit_Label --
        ---------------------
--- 3397,3402 ----
*************** package body Inline is
*** 3785,3819 ****
           end if;
        end Rewrite_Function_Call;
  
-       ----------------------------
-       -- Rewrite_Procedure_Call --
-       ----------------------------
- 
-       procedure Rewrite_Procedure_Call (N : Node_Id; Blk : Node_Id) is
-          HSS : constant Node_Id := Handled_Statement_Sequence (Blk);
- 
-       begin
-          --  If there is a transient scope for N, this will be the scope of the
-          --  actions for N, and the statements in Blk need to be within this
-          --  scope. For example, they need to have visibility on the constant
-          --  declarations created for the formals.
- 
-          --  If N needs no transient scope, and if there are no declarations in
-          --  the inlined body, we can do a little optimization and insert the
-          --  statements for the body directly after N, and rewrite N to a
-          --  null statement, instead of rewriting N into a full-blown block
-          --  statement.
- 
-          if not Scope_Is_Transient
-            and then Is_Empty_List (Declarations (Blk))
-          then
-             Insert_List_After (N, Statements (HSS));
-             Rewrite (N, Make_Null_Statement (Loc));
-          else
-             Rewrite (N, Blk);
-          end if;
-       end Rewrite_Procedure_Call;
- 
     --  Start of processing for Expand_Inlined_Call
  
     begin
--- 3781,3786 ----
*************** package body Inline is
*** 4273,4279 ****
        end;
  
        if Ekind (Subp) = E_Procedure then
!          Rewrite_Procedure_Call (N, Blk);
  
        else
           Rewrite_Function_Call (N, Blk);
--- 4240,4246 ----
        end;
  
        if Ekind (Subp) = E_Procedure then
!          Rewrite (N, Blk);
  
        else
           Rewrite_Function_Call (N, Blk);
diff -Nrcpad gcc-16-20250629/gcc/ada/json_utils.adb gcc-16-20250706/gcc/ada/json_utils.adb
*** gcc-16-20250629/gcc/ada/json_utils.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/json_utils.adb	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --               D I A G N O S T I C S . J S O N _ U T I L S                --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                           J S O N _ U T I L S                            --
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
diff -Nrcpad gcc-16-20250629/gcc/ada/json_utils.ads gcc-16-20250706/gcc/ada/json_utils.ads
*** gcc-16-20250629/gcc/ada/json_utils.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/json_utils.ads	Sun Jul  6 22:32:09 2025
***************
*** 2,8 ****
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --               D I A G N O S T I C S . J S O N _ U T I L S                --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
--- 2,8 ----
  --                                                                          --
  --                         GNAT COMPILER COMPONENTS                         --
  --                                                                          --
! --                           J S O N _ U T I L S                            --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
***************
*** 22,27 ****
--- 22,28 ----
  -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  --                                                                          --
  ------------------------------------------------------------------------------
+ 
  with Types; use Types;
  
  package JSON_Utils is
diff -Nrcpad gcc-16-20250629/gcc/ada/krunch.adb gcc-16-20250706/gcc/ada/krunch.adb
*** gcc-16-20250629/gcc/ada/krunch.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/krunch.adb	Sun Jul  6 22:32:09 2025
*************** begin
*** 271,276 ****
           Buffer (Len) := Buffer (J);
        end if;
     end loop;
- 
-    return;
  end Krunch;
--- 271,274 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/layout.adb gcc-16-20250706/gcc/ada/layout.adb
*** gcc-16-20250629/gcc/ada/layout.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/layout.adb	Sun Jul  6 22:32:09 2025
*************** package body Layout is
*** 227,235 ****
     procedure Layout_Object (E : Entity_Id) is
        pragma Unreferenced (E);
     begin
!       --  Nothing to do for now, assume backend does the layout
! 
!       return;
     end Layout_Object;
  
     -----------------
--- 227,233 ----
     procedure Layout_Object (E : Entity_Id) is
        pragma Unreferenced (E);
     begin
!       null; -- Nothing to do for now, assume backend does the layout
     end Layout_Object;
  
     -----------------
diff -Nrcpad gcc-16-20250629/gcc/ada/lib-xref-spark_specific.adb gcc-16-20250706/gcc/ada/lib-xref-spark_specific.adb
*** gcc-16-20250629/gcc/ada/lib-xref-spark_specific.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/lib-xref-spark_specific.adb	Sun Jul  6 22:32:09 2025
*************** package body SPARK_Specific is
*** 258,263 ****
--- 258,270 ----
                 Context := Defining_Entity (Context);
                 exit;
  
+             when N_Subunit =>
+                Context := Corresponding_Stub (Context);
+ 
+             when N_Body_Stub =>
+                Context := Corresponding_Spec_Of_Stub (Context);
+                exit;
+ 
              when others =>
                 Context := Parent (Context);
           end case;
diff -Nrcpad gcc-16-20250629/gcc/ada/lib.adb gcc-16-20250706/gcc/ada/lib.adb
*** gcc-16-20250629/gcc/ada/lib.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/lib.adb	Sun Jul  6 22:32:09 2025
*************** package body Lib is
*** 1062,1068 ****
     -----------------------------
  
     function Increment_Serial_Number return Nat is
!       TSN : Int renames Units.Table (Current_Sem_Unit).Serial_Number;
     begin
        TSN := TSN + 1;
        return TSN;
--- 1062,1068 ----
     -----------------------------
  
     function Increment_Serial_Number return Nat is
!       TSN : Nat renames Units.Table (Current_Sem_Unit).Serial_Number;
     begin
        TSN := TSN + 1;
        return TSN;
*************** package body Lib is
*** 1223,1229 ****
     -------------------------------
  
     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
  
--- 1223,1229 ----
     -------------------------------
  
     procedure Synchronize_Serial_Number (SN : Nat) is
!       TSN : Nat renames Units.Table (Current_Sem_Unit).Serial_Number;
     begin
        --  We should not be trying to synchronize downward
  
diff -Nrcpad gcc-16-20250629/gcc/ada/lib.ads gcc-16-20250706/gcc/ada/lib.ads
*** gcc-16-20250629/gcc/ada/lib.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/lib.ads	Sun Jul  6 22:32:09 2025
*************** private
*** 852,858 ****
        Source_Index           : Source_File_Index;
        Cunit                  : Node_Id;
        Cunit_Entity           : Entity_Id;
!       Dependency_Num         : Int;
        Ident_String           : Node_Id;
        Main_Priority          : Int;
        Main_CPU               : Int;
--- 852,858 ----
        Source_Index           : Source_File_Index;
        Cunit                  : Node_Id;
        Cunit_Entity           : Entity_Id;
!       Dependency_Num         : Nat;
        Ident_String           : Node_Id;
        Main_Priority          : Int;
        Main_CPU               : Int;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnarl/s-tassta.adb gcc-16-20250706/gcc/ada/libgnarl/s-tassta.adb
*** gcc-16-20250629/gcc/ada/libgnarl/s-tassta.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnarl/s-tassta.adb	Sun Jul  6 22:32:09 2025
*************** package body System.Tasking.Stages is
*** 133,138 ****
--- 133,143 ----
     --  Different code is used at master completion, in Terminate_Dependents,
     --  due to a need for tighter synchronization with the master.
  
+    function Get_Stack_Base (Self_ID : Task_Id) return System.Address;
+    --  Get the stack base of Self.
+    --
+    --  If the stack base cannot be determined, then Null_Address is returned.
+ 
     ----------------------
     -- Abort_Dependents --
     ----------------------
*************** package body System.Tasking.Stages is
*** 1113,1119 ****
              --  Address of the base of the stack
  
           begin
!             Stack_Base := Self_ID.Common.Compiler_Data.Pri_Stack_Info.Base;
  
              if Stack_Base = Null_Address then
  
--- 1118,1124 ----
              --  Address of the base of the stack
  
           begin
!             Stack_Base := Get_Stack_Base (Self_ID);
  
              if Stack_Base = Null_Address then
  
*************** package body System.Tasking.Stages is
*** 1139,1145 ****
                (Self_ID.Common.Analyzer,
                 Self_ID.Common.Task_Image (1 .. Self_ID.Common.Task_Image_Len),
                 Natural (Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size),
!                SSE.To_Integer (Stack_Base),
                 Pattern_Size);
              STPO.Unlock_RTS;
              Fill_Stack (Self_ID.Common.Analyzer);
--- 1144,1150 ----
                (Self_ID.Common.Analyzer,
                 Self_ID.Common.Task_Image (1 .. Self_ID.Common.Task_Image_Len),
                 Natural (Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size),
!                Stack_Base,
                 Pattern_Size);
              STPO.Unlock_RTS;
              Fill_Stack (Self_ID.Common.Analyzer);
*************** package body System.Tasking.Stages is
*** 1966,1971 ****
--- 1971,1985 ----
        System.Task_Primitives.Operations.Finalize_TCB (T);
     end Vulnerable_Free_Task;
  
+    --------------------
+    -- Get_Stack_Base --
+    --------------------
+ 
+    --  Get_Stack_Base is architecture-specific
+ 
+    function Get_Stack_Base (Self_ID : Task_Id) return System.Address
+    is separate;
+ 
  --  Package elaboration code
  
  begin
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnarl/s-tsgsba.adb gcc-16-20250706/gcc/ada/libgnarl/s-tsgsba.adb
*** gcc-16-20250629/gcc/ada/libgnarl/s-tsgsba.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/ada/libgnarl/s-tsgsba.adb	Sun Jul  6 22:32:09 2025
***************
*** 0 ****
--- 1,40 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
+ --                                                                          --
+ -- S Y S T E M . T A S K I N G . S T A G E S . G E T _ S T A C K _ B A S E  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2025, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- As a special exception under Section 7 of GPL version 3, you are granted --
+ -- additional permissions described in the GCC Runtime Library Exception,   --
+ -- version 3.1, as published by the Free Software Foundation.               --
+ --                                                                          --
+ -- You should have received a copy of the GNU General Public License and    --
+ -- a copy of the GCC Runtime Library Exception along with this program;     --
+ -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+ -- <http://www.gnu.org/licenses/>.                                          --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the default version for most platforms which tries to get the
+ --  stack base from the compiler info. It returns Null_Address if the stack
+ --  base is not available.
+ 
+ separate (System.Tasking.Stages)
+ function Get_Stack_Base (Self_ID : Task_Id) return System.Address is
+ begin
+    return Self_ID.Common.Compiler_Data.Pri_Stack_Info.Base;
+ end Get_Stack_Base;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnarl/s-tsgsba__cheri.adb gcc-16-20250706/gcc/ada/libgnarl/s-tsgsba__cheri.adb
*** gcc-16-20250629/gcc/ada/libgnarl/s-tsgsba__cheri.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/ada/libgnarl/s-tsgsba__cheri.adb	Sun Jul  6 22:32:09 2025
***************
*** 0 ****
--- 1,49 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
+ --                                                                          --
+ -- S Y S T E M . T A S K I N G . S T A G E S . G E T _ S T A C K _ B A S E  --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --         Copyright (C) 1992-2025, Free Software Foundation, Inc.          --
+ --                                                                          --
+ -- GNARL is free software; you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- As a special exception under Section 7 of GPL version 3, you are granted --
+ -- additional permissions described in the GCC Runtime Library Exception,   --
+ -- version 3.1, as published by the Free Software Foundation.               --
+ --                                                                          --
+ -- You should have received a copy of the GNU General Public License and    --
+ -- a copy of the GCC Runtime Library Exception along with this program;     --
+ -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+ -- <http://www.gnu.org/licenses/>.                                          --
+ --                                                                          --
+ -- GNARL was developed by the GNARL team at Florida State University.       --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ with Interfaces.CHERI;
+ 
+ --  This is the version for CHERI targets where we can derive the stack base
+ --  from the upper bound of the capability stack pointer (CSP).
+ 
+ separate (System.Tasking.Stages)
+ function Get_Stack_Base (Self_ID : Task_Id) return System.Address is
+    pragma Unreferenced (Self_ID);
+ 
+    use type SSE.Integer_Address;
+ 
+    CSP : constant System.Address := Interfaces.CHERI.Get_CSP;
+ begin
+    return Interfaces.CHERI.Capability_With_Address
+             (Cap  => CSP,
+              Addr => Interfaces.CHERI.Get_Base (CSP) +
+                        SSE.Integer_Address
+                          (Interfaces.CHERI.Get_Length (CSP)));
+ end Get_Stack_Base;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-except.adb gcc-16-20250706/gcc/ada/libgnat/a-except.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-except.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-except.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Exceptions is
*** 450,455 ****
--- 450,457 ----
       (File : System.Address; Line : Integer);
     procedure Rcheck_CE_Tag_Check
       (File : System.Address; Line : Integer);
+    procedure Rcheck_PE_Abstract_Type_Component
+      (File : System.Address; Line : Integer);
     procedure Rcheck_PE_Access_Before_Elaboration
       (File : System.Address; Line : Integer);
     procedure Rcheck_PE_Accessibility_Check
*************** package body Ada.Exceptions is
*** 542,547 ****
--- 544,551 ----
                    "__gnat_rcheck_CE_Range_Check");
     pragma Export (C, Rcheck_CE_Tag_Check,
                    "__gnat_rcheck_CE_Tag_Check");
+    pragma Export (C, Rcheck_PE_Abstract_Type_Component,
+                   "__gnat_rcheck_PE_Abstract_Type_Component");
     pragma Export (C, Rcheck_PE_Access_Before_Elaboration,
                    "__gnat_rcheck_PE_Access_Before_Elaboration");
     pragma Export (C, Rcheck_PE_Accessibility_Check,
*************** package body Ada.Exceptions is
*** 620,625 ****
--- 624,630 ----
     pragma No_Return (Rcheck_CE_Partition_Check);
     pragma No_Return (Rcheck_CE_Range_Check);
     pragma No_Return (Rcheck_CE_Tag_Check);
+    pragma No_Return (Rcheck_PE_Abstract_Type_Component);
     pragma No_Return (Rcheck_PE_Access_Before_Elaboration);
     pragma No_Return (Rcheck_PE_Accessibility_Check);
     pragma No_Return (Rcheck_PE_Address_Of_Intrinsic);
*************** package body Ada.Exceptions is
*** 683,688 ****
--- 688,695 ----
                               "expected_throw");
     pragma Machine_Attribute (Rcheck_CE_Tag_Check,
                               "expected_throw");
+    pragma Machine_Attribute (Rcheck_PE_Abstract_Type_Component,
+                              "expected_throw");
     pragma Machine_Attribute (Rcheck_PE_Access_Before_Elaboration,
                               "expected_throw");
     pragma Machine_Attribute (Rcheck_PE_Accessibility_Check,
*************** package body Ada.Exceptions is
*** 775,780 ****
--- 782,789 ----
                               "strub", "callable");
     pragma Machine_Attribute (Rcheck_CE_Tag_Check,
                               "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Abstract_Type_Component,
+                              "strub", "callable");
     pragma Machine_Attribute (Rcheck_PE_Access_Before_Elaboration,
                               "strub", "callable");
     pragma Machine_Attribute (Rcheck_PE_Accessibility_Check,
*************** package body Ada.Exceptions is
*** 885,890 ****
--- 894,901 ----
     Rmsg_36 : constant String := "stream operation not allowed"     & NUL;
     Rmsg_37 : constant String := "build-in-place mismatch"          & NUL;
     Rmsg_38 : constant String := "raise check failed"               & NUL;
+    Rmsg_39 : constant String := "initialization of abstract type"  &
+                                 " component not allowed"           & NUL;
  
     ---------
     -- AAA --
*************** package body Ada.Exceptions is
*** 1471,1476 ****
--- 1482,1494 ----
        Raise_Constraint_Error_Msg (File, Line, 0, Rmsg_13'Address);
     end Rcheck_CE_Tag_Check;
  
+    procedure Rcheck_PE_Abstract_Type_Component
+      (File : System.Address; Line : Integer)
+    is
+    begin
+       Raise_Program_Error_Msg (File, Line, Rmsg_39'Address);
+    end Rcheck_PE_Abstract_Type_Component;
+ 
     procedure Rcheck_PE_Access_Before_Elaboration
       (File : System.Address; Line : Integer)
     is
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-ngelfu.adb gcc-16-20250706/gcc/ada/libgnat/a-ngelfu.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-ngelfu.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-ngelfu.adb	Sun Jul  6 22:32:09 2025
*************** is
*** 965,971 ****
  
        P, Q, R : Float_Type'Base;
        Y : constant Float_Type'Base := abs X;
-       G : constant Float_Type'Base := Y * Y;
  
        Float_Type_Digits_15_Or_More : constant Boolean :=
          Float_Type'Digits > 14;
--- 965,970 ----
*************** is
*** 983,992 ****
        elsif Y < Half_Ln3
          and then Float_Type_Digits_15_Or_More
        then
!          P := (P2 * G + P1) * G + P0;
!          Q := ((Q3 * G + Q2) * G + Q1) * G + Q0;
!          R := G * (P / Q);
!          return X + X * R;
  
        else
           return Aux.Tanh (X);
--- 982,995 ----
        elsif Y < Half_Ln3
          and then Float_Type_Digits_15_Or_More
        then
!          declare
!             G : constant Float_Type'Base := Y * Y;
!          begin
!             P := (P2 * G + P1) * G + P0;
!             Q := ((Q3 * G + Q2) * G + Q1) * G + Q0;
!             R := G * (P / Q);
!             return X + X * R;
!          end;
  
        else
           return Aux.Tanh (X);
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-strsup.adb gcc-16-20250706/gcc/ada/libgnat/a-strsup.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-strsup.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-strsup.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Strings.Superbounded wi
*** 755,761 ****
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From - 1 > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
--- 755,761 ----
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
*************** package body Ada.Strings.Superbounded wi
*** 784,790 ****
        if Num_Delete <= 0 then
           return;
  
!       elsif From - 1 > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
--- 784,790 ----
        if Num_Delete <= 0 then
           return;
  
!       elsif From > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-strsup.ads gcc-16-20250706/gcc/ada/libgnat/a-strsup.ads
*** gcc-16-20250629/gcc/ada/libgnat/a-strsup.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-strsup.ads	Sun Jul  6 22:32:09 2025
***************
*** 42,51 ****
  --  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;
--- 42,52 ----
  --  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,
!                          Ghost_Predicate => Ignore);
  
  with Ada.Strings.Maps; use type Ada.Strings.Maps.Character_Mapping_Function;
  with Ada.Strings.Search;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-stwisu.adb gcc-16-20250706/gcc/ada/libgnat/a-stwisu.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-stwisu.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-stwisu.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Strings.Wide_Superbound
*** 753,759 ****
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
--- 753,759 ----
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
*************** package body Ada.Strings.Wide_Superbound
*** 782,788 ****
        if Num_Delete <= 0 then
           return;
  
!       elsif From > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
--- 782,788 ----
        if Num_Delete <= 0 then
           return;
  
!       elsif From > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-stzsup.adb gcc-16-20250706/gcc/ada/libgnat/a-stzsup.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-stzsup.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-stzsup.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Strings.Wide_Wide_Super
*** 754,760 ****
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
--- 754,760 ----
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
*************** package body Ada.Strings.Wide_Wide_Super
*** 783,789 ****
        if Num_Delete <= 0 then
           return;
  
!       elsif From > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
--- 783,789 ----
        if Num_Delete <= 0 then
           return;
  
!       elsif From > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-tifiio.adb gcc-16-20250706/gcc/ada/libgnat/a-tifiio.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-tifiio.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-tifiio.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Text_IO.Fixed_IO with S
*** 194,202 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**31)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**31)
-            or else
            (Num'Base'Small_Numerator <= 2**27
              and then Num'Base'Small_Denominator <= 2**27));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 194,199 ----
*************** package body Ada.Text_IO.Fixed_IO with S
*** 223,231 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**63)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**63)
-            or else
            (Num'Base'Small_Numerator <= 2**59
              and then Num'Base'Small_Denominator <= 2**59));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 220,225 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-tifiio__128.adb gcc-16-20250706/gcc/ada/libgnat/a-tifiio__128.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-tifiio__128.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-tifiio__128.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Text_IO.Fixed_IO with S
*** 201,209 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**31)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**31)
-            or else
            (Num'Base'Small_Numerator <= 2**27
              and then Num'Base'Small_Denominator <= 2**27));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 201,206 ----
*************** package body Ada.Text_IO.Fixed_IO with S
*** 230,238 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**63)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**63)
-            or else
            (Num'Base'Small_Numerator <= 2**59
              and then Num'Base'Small_Denominator <= 2**59));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 227,232 ----
*************** package body Ada.Text_IO.Fixed_IO with S
*** 259,267 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**127)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**127)
-            or else
            (Num'Base'Small_Numerator <= 2**123
              and then Num'Base'Small_Denominator <= 2**123));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 253,258 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-wtfiio.adb gcc-16-20250706/gcc/ada/libgnat/a-wtfiio.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-wtfiio.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-wtfiio.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 73,81 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**31)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**31)
-            or else
            (Num'Base'Small_Numerator <= 2**27
              and then Num'Base'Small_Denominator <= 2**27));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 73,78 ----
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 102,110 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**63)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**63)
-            or else
            (Num'Base'Small_Numerator <= 2**59
              and then Num'Base'Small_Denominator <= 2**59));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 99,104 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-wtfiio__128.adb gcc-16-20250706/gcc/ada/libgnat/a-wtfiio__128.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-wtfiio__128.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-wtfiio__128.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 80,88 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**31)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**31)
-            or else
            (Num'Base'Small_Numerator <= 2**27
              and then Num'Base'Small_Denominator <= 2**27));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 80,85 ----
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 109,117 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**63)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**63)
-            or else
            (Num'Base'Small_Numerator <= 2**59
              and then Num'Base'Small_Denominator <= 2**59));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 106,111 ----
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 138,146 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**127)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**127)
-            or else
            (Num'Base'Small_Numerator <= 2**123
              and then Num'Base'Small_Denominator <= 2**123));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 132,137 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-ztfiio.adb gcc-16-20250706/gcc/ada/libgnat/a-ztfiio.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-ztfiio.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-ztfiio.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 73,81 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**31)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**31)
-            or else
            (Num'Base'Small_Numerator <= 2**27
              and then Num'Base'Small_Denominator <= 2**27));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 73,78 ----
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 102,110 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**63)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**63)
-            or else
            (Num'Base'Small_Numerator <= 2**59
              and then Num'Base'Small_Denominator <= 2**59));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 99,104 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/a-ztfiio__128.adb gcc-16-20250706/gcc/ada/libgnat/a-ztfiio__128.adb
*** gcc-16-20250629/gcc/ada/libgnat/a-ztfiio__128.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/a-ztfiio__128.adb	Sun Jul  6 22:32:09 2025
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 81,89 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**31)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**31)
-            or else
            (Num'Base'Small_Numerator <= 2**27
              and then Num'Base'Small_Denominator <= 2**27));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 81,86 ----
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 110,118 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**63)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**63)
-            or else
            (Num'Base'Small_Numerator <= 2**59
              and then Num'Base'Small_Denominator <= 2**59));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 107,112 ----
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 139,147 ****
           ((Num'Base'Small_Numerator = 1
              and then Num'Base'Small_Denominator <= 2**127)
             or else
-           (Num'Base'Small_Denominator = 1
-             and then Num'Base'Small_Numerator <= 2**127)
-            or else
            (Num'Base'Small_Numerator <= 2**123
              and then Num'Base'Small_Denominator <= 2**123));
     --  These conditions are derived from the prerequisites of System.Value_F
--- 133,138 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/i-cpoint.adb gcc-16-20250706/gcc/ada/libgnat/i-cpoint.adb
*** gcc-16-20250629/gcc/ada/libgnat/i-cpoint.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/i-cpoint.adb	Sun Jul  6 22:32:09 2025
*************** package body Interfaces.C.Pointers is
*** 148,154 ****
        S : Pointer := Source;
  
     begin
!       if Source = null or Target = null then
           raise Dereference_Error;
        end if;
  
--- 148,154 ----
        S : Pointer := Source;
  
     begin
!       if Source = null or else Target = null then
           raise Dereference_Error;
        end if;
  
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/i-cstrin.ads gcc-16-20250706/gcc/ada/libgnat/i-cstrin.ads
*** gcc-16-20250629/gcc/ada/libgnat/i-cstrin.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/i-cstrin.ads	Sun Jul  6 22:32:09 2025
*************** is
*** 100,105 ****
--- 100,116 ----
  
     --  The Value functions copy the contents of a chars_ptr object
     --  into a char_array/String.
+    --  There is a guard for a storage error on an object declaration for
+    --  an array type with a modular index type with the size of
+    --  Long_Long_Integer. The special processing is needed in this case
+    --  to compute reliably the size of the object, and eventually, to
+    --  raise Storage_Error, when wrap-around arithmetic might compute
+    --  a meangingless size for the object.
+    --
+    --  The guard raises Storage_Error when
+    --
+    --    (Arr'Last / 2 - Arr'First / 2) > (2 ** 30)
+    --
     function Value (Item : chars_ptr) return char_array with
       Pre    => Item /= Null_Ptr,
       Global => (Input => C_Memory);
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-casuti.adb gcc-16-20250706/gcc/ada/libgnat/s-casuti.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-casuti.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-casuti.adb	Sun Jul  6 22:32:09 2025
*************** is
*** 36,62 ****
     -- To_Lower --
     --------------
  
-    function To_Lower (A : Character) return Character is
-       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
-          return Character'Val (A_Val + 16#20#);
-       else
-          return A;
-       end if;
-    end To_Lower;
- 
-    procedure To_Lower (A : in out String) is
-    begin
-       for J in A'Range loop
-          A (J) := To_Lower (A (J));
-       end loop;
-    end To_Lower;
- 
     function To_Lower (A : String) return String is
        Result : String := A;
     begin
--- 36,41 ----
*************** is
*** 68,88 ****
     -- To_Mixed --
     --------------
  
-    procedure To_Mixed (A : in out String) is
-       Ucase : Boolean := True;
- 
-    begin
-       for J in A'Range loop
-          if Ucase then
-             A (J) := To_Upper (A (J));
-          else
-             A (J) := To_Lower (A (J));
-          end if;
- 
-          Ucase := A (J) = '_';
-       end loop;
-    end To_Mixed;
- 
     function To_Mixed (A : String) return String is
        Result : String := A;
     begin
--- 47,52 ----
*************** is
*** 94,120 ****
     -- To_Upper --
     --------------
  
-    function To_Upper (A : Character) return Character is
-       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
-          return Character'Val (A_Val - 16#20#);
-       else
-          return A;
-       end if;
-    end To_Upper;
- 
-    procedure To_Upper (A : in out String) is
-    begin
-       for J in A'Range loop
-          A (J) := To_Upper (A (J));
-       end loop;
-    end To_Upper;
- 
     function To_Upper (A : String) return String is
        Result : String := A;
     begin
--- 58,63 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-casuti.ads gcc-16-20250706/gcc/ada/libgnat/s-casuti.ads
*** gcc-16-20250629/gcc/ada/libgnat/s-casuti.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-casuti.ads	Sun Jul  6 22:32:09 2025
***************
*** 40,73 ****
  --  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
--- 40,69 ----
  --  contract cases should not be executed at runtime as well, in order not to
  --  slow down the execution of these functions.
  
+ --  The portion of this package that does not require use of the secondary
+ --  stack (so all the subprograms except functions that return String)
+ --  has been moved into a sibling package, Case_Util_NSS. See comments there.
+ --  Clients who don't care about avoiding secondary stack usage can
+ --  continue to use this package and are unaffected by this reorganization.
+ 
  pragma Assertion_Policy (Pre            => Ignore,
                           Post           => Ignore,
                           Contract_Cases => Ignore,
                           Ghost          => Ignore);
  
+ with System.Case_Util_NSS;
+ 
  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
!      renames Case_Util_NSS.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 Case_Util_NSS.To_Upper;
  
     function To_Upper (A : String) return String
     with
*************** is
*** 78,100 ****
     --  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
--- 74,85 ----
     --  Folds all characters of string A to upper case
  
     function To_Lower (A : Character) return Character
!      renames Case_Util_NSS.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 Case_Util_NSS.To_Lower;
  
     function To_Lower (A : String) return String
     with
*************** is
*** 105,119 ****
     --  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
--- 90,96 ----
     --  Folds all characters of string A to lower case
  
     procedure To_Mixed (A : in out String)
!      renames Case_Util_NSS.To_Mixed;
  
     function To_Mixed (A : String) return String
     with
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-cautns.adb gcc-16-20250706/gcc/ada/libgnat/s-cautns.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-cautns.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/ada/libgnat/s-cautns.adb	Sun Jul  6 22:32:09 2025
***************
*** 0 ****
--- 1,127 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                 S Y S T E M . C A S E _ U T I L _ N S S                  --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --                     Copyright (C) 1995-2025, AdaCore                     --
+ --                                                                          --
+ -- GNAT is 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.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  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_NSS
+   with SPARK_Mode
+ is
+    --------------
+    -- To_Lower --
+    --------------
+ 
+    function To_Lower (A : Character) return Character is
+       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
+          return Character'Val (A_Val + 16#20#);
+       else
+          return A;
+       end if;
+    end To_Lower;
+ 
+    procedure To_Lower (A : in out String) is
+    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;
+ 
+    --------------
+    -- To_Mixed --
+    --------------
+ 
+    procedure To_Mixed (A : in out String) is
+       Ucase : Boolean := True;
+ 
+    begin
+       for J in A'Range loop
+          if Ucase then
+             A (J) := To_Upper (A (J));
+          else
+             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;
+ 
+    --------------
+    -- To_Upper --
+    --------------
+ 
+    function To_Upper (A : Character) return Character is
+       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
+          return Character'Val (A_Val - 16#20#);
+       else
+          return A;
+       end if;
+    end To_Upper;
+ 
+    procedure To_Upper (A : in out String) is
+    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;
+ 
+ end System.Case_Util_NSS;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-cautns.ads gcc-16-20250706/gcc/ada/libgnat/s-cautns.ads
*** gcc-16-20250629/gcc/ada/libgnat/s-cautns.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/ada/libgnat/s-cautns.ads	Sun Jul  6 22:32:09 2025
***************
*** 0 ****
--- 1,106 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                 S Y S T E M . C A S E _ U T I L _ N S S                  --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1995-2025, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- 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.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  The No_Secondary_Stack portion of System.Case_Util. Some of the functions
+ --  provided in System.Case_Util make use of the secondary stack, and some
+ --  do not. Lumping them all together makes even the non-secondary-stack
+ --  portion of the package unusable in cases where references to
+ --  secondary-stack-related code must be avoided (for example, if linking with
+ --  a reduced version of the runtimes where that code is missing). That's a
+ --  problem in some cases, so Case_Util is split into two parts. The first
+ --  part (named Case_Util_NSS) is a subset of the original version which
+ --  does not use the secondary stack; the second part presents the same
+ --  complete interface to users as before, but avoids code duplication by
+ --  renaming entities out of the first part.
+ --
+ --  See comments in s-casuti.ads for further explanations (e.g., of
+ --  the Assertion_Policy specified here).
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
+ package System.Case_Util_NSS
+   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_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)));
+ 
+    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))));
+ 
+ end System.Case_Util_NSS;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-excdeb.adb gcc-16-20250706/gcc/ada/libgnat/s-excdeb.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-excdeb.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-excdeb.adb	Sun Jul  6 22:32:09 2025
*************** package body System.Exceptions_Debug is
*** 69,75 ****
     procedure Local_Raise (Excep : System.Address) is
        pragma Warnings (Off, Excep);
     begin
!       return;
     end Local_Raise;
  
  end System.Exceptions_Debug;
--- 69,75 ----
     procedure Local_Raise (Excep : System.Address) is
        pragma Warnings (Off, Excep);
     begin
!       null;
     end Local_Raise;
  
  end System.Exceptions_Debug;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-stausa.adb gcc-16-20250706/gcc/ada/libgnat/s-stausa.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-stausa.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-stausa.adb	Sun Jul  6 22:32:09 2025
*************** package body System.Stack_Usage is
*** 188,194 ****
        --  allocated byte on the stack.
     begin
        if Parameters.Stack_Grows_Down then
!          if Analyzer.Stack_Base - Stack_Address (Analyzer.Pattern_Size) >
                To_Stack_Address (Current_Stack_Level'Address) - Guard
           then
              --  No room for a pattern
--- 188,195 ----
        --  allocated byte on the stack.
     begin
        if Parameters.Stack_Grows_Down then
!          if To_Stack_Address (Analyzer.Stack_Base) -
!               Stack_Address (Analyzer.Pattern_Size) >
                To_Stack_Address (Current_Stack_Level'Address) - Guard
           then
              --  No room for a pattern
*************** package body System.Stack_Usage is
*** 198,219 ****
           end if;
  
           Analyzer.Pattern_Limit :=
!            Analyzer.Stack_Base - Stack_Address (Analyzer.Pattern_Size);
  
!          if Analyzer.Stack_Base >
                To_Stack_Address (Current_Stack_Level'Address) - Guard
           then
              --  Reduce pattern size to prevent local frame overwrite
  
              Analyzer.Pattern_Size :=
                Integer (To_Stack_Address (Current_Stack_Level'Address) - Guard
!                          - Analyzer.Pattern_Limit);
           end if;
  
!          Analyzer.Pattern_Overlay_Address :=
!            To_Address (Analyzer.Pattern_Limit);
        else
!          if Analyzer.Stack_Base + Stack_Address (Analyzer.Pattern_Size) <
                To_Stack_Address (Current_Stack_Level'Address) + Guard
           then
              --  No room for a pattern
--- 199,220 ----
           end if;
  
           Analyzer.Pattern_Limit :=
!            Analyzer.Stack_Base - Storage_Offset (Analyzer.Pattern_Size);
  
!          if To_Stack_Address (Analyzer.Stack_Base) >
                To_Stack_Address (Current_Stack_Level'Address) - Guard
           then
              --  Reduce pattern size to prevent local frame overwrite
  
              Analyzer.Pattern_Size :=
                Integer (To_Stack_Address (Current_Stack_Level'Address) - Guard
!                          - To_Stack_Address (Analyzer.Pattern_Limit));
           end if;
  
!          Analyzer.Pattern_Overlay_Address := Analyzer.Pattern_Limit;
        else
!          if To_Stack_Address (Analyzer.Stack_Base) +
!               Stack_Address (Analyzer.Pattern_Size) <
                To_Stack_Address (Current_Stack_Level'Address) + Guard
           then
              --  No room for a pattern
*************** package body System.Stack_Usage is
*** 223,244 ****
           end if;
  
           Analyzer.Pattern_Limit :=
!            Analyzer.Stack_Base + Stack_Address (Analyzer.Pattern_Size);
  
!          if Analyzer.Stack_Base <
             To_Stack_Address (Current_Stack_Level'Address) + Guard
           then
              --  Reduce pattern size to prevent local frame overwrite
  
              Analyzer.Pattern_Size :=
                Integer
!                 (Analyzer.Pattern_Limit -
                    (To_Stack_Address (Current_Stack_Level'Address) + Guard));
           end if;
  
           Analyzer.Pattern_Overlay_Address :=
!            To_Address (Analyzer.Pattern_Limit -
!                          Stack_Address (Analyzer.Pattern_Size));
        end if;
  
        --  Declare and fill the pattern buffer
--- 224,244 ----
           end if;
  
           Analyzer.Pattern_Limit :=
!            Analyzer.Stack_Base + Storage_Offset (Analyzer.Pattern_Size);
  
!          if To_Stack_Address (Analyzer.Stack_Base) <
             To_Stack_Address (Current_Stack_Level'Address) + Guard
           then
              --  Reduce pattern size to prevent local frame overwrite
  
              Analyzer.Pattern_Size :=
                Integer
!                 (To_Stack_Address (Analyzer.Pattern_Limit) -
                    (To_Stack_Address (Current_Stack_Level'Address) + Guard));
           end if;
  
           Analyzer.Pattern_Overlay_Address :=
!            Analyzer.Pattern_Limit - Storage_Offset (Analyzer.Pattern_Size);
        end if;
  
        --  Declare and fill the pattern buffer
*************** package body System.Stack_Usage is
*** 270,276 ****
       (Analyzer         : in out Stack_Analyzer;
        Task_Name        : String;
        Stack_Size       : Natural;
!       Stack_Base       : Stack_Address;
        Pattern_Size     : Natural;
        Pattern          : Interfaces.Unsigned_32 := 16#DEAD_BEEF#)
     is
--- 270,276 ----
       (Analyzer         : in out Stack_Analyzer;
        Task_Name        : String;
        Stack_Size       : Natural;
!       Stack_Base       : System.Address;
        Pattern_Size     : Natural;
        Pattern          : Interfaces.Unsigned_32 := 16#DEAD_BEEF#)
     is
*************** package body System.Stack_Usage is
*** 332,341 ****
  
        if Parameters.Stack_Grows_Down then
           Analyzer.Topmost_Touched_Mark :=
!            Analyzer.Pattern_Limit + Stack_Address (Analyzer.Pattern_Size);
        else
           Analyzer.Topmost_Touched_Mark :=
!            Analyzer.Pattern_Limit - Stack_Address (Analyzer.Pattern_Size);
        end if;
  
        if Analyzer.Pattern_Size = 0 then
--- 332,341 ----
  
        if Parameters.Stack_Grows_Down then
           Analyzer.Topmost_Touched_Mark :=
!            Analyzer.Pattern_Limit + Storage_Offset (Analyzer.Pattern_Size);
        else
           Analyzer.Topmost_Touched_Mark :=
!            Analyzer.Pattern_Limit - Storage_Offset (Analyzer.Pattern_Size);
        end if;
  
        if Analyzer.Pattern_Size = 0 then
*************** package body System.Stack_Usage is
*** 349,356 ****
        if System.Parameters.Stack_Grows_Down then
           for J in Stack'Range loop
              if Stack (J) /= Analyzer.Pattern then
!                Analyzer.Topmost_Touched_Mark :=
!                  To_Stack_Address (Stack (J)'Address);
                 exit;
              end if;
           end loop;
--- 349,355 ----
        if System.Parameters.Stack_Grows_Down then
           for J in Stack'Range loop
              if Stack (J) /= Analyzer.Pattern then
!                Analyzer.Topmost_Touched_Mark := Stack (J)'Address;
                 exit;
              end if;
           end loop;
*************** package body System.Stack_Usage is
*** 358,365 ****
        else
           for J in reverse Stack'Range loop
              if Stack (J) /= Analyzer.Pattern then
!                Analyzer.Topmost_Touched_Mark :=
!                  To_Stack_Address (Stack (J)'Address);
                 exit;
              end if;
           end loop;
--- 357,363 ----
        else
           for J in reverse Stack'Range loop
              if Stack (J) /= Analyzer.Pattern then
!                Analyzer.Topmost_Touched_Mark := Stack (J)'Address;
                 exit;
              end if;
           end loop;
*************** package body System.Stack_Usage is
*** 514,521 ****
           Result.Value := Analyzer.Stack_Size;
  
        else
!          Result.Value := Stack_Size (Analyzer.Topmost_Touched_Mark,
!                                      Analyzer.Stack_Base);
        end if;
  
        if Analyzer.Result_Id in Result_Array'Range then
--- 512,520 ----
           Result.Value := Analyzer.Stack_Size;
  
        else
!          Result.Value :=
!            Stack_Size (To_Stack_Address (Analyzer.Topmost_Touched_Mark),
!                        To_Stack_Address (Analyzer.Stack_Base));
        end if;
  
        if Analyzer.Result_Id in Result_Array'Range then
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-stausa.ads gcc-16-20250706/gcc/ada/libgnat/s-stausa.ads
*** gcc-16-20250629/gcc/ada/libgnat/s-stausa.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-stausa.ads	Sun Jul  6 22:32:09 2025
*************** package System.Stack_Usage is
*** 230,236 ****
       (Analyzer         : in out Stack_Analyzer;
        Task_Name        : String;
        Stack_Size       : Natural;
!       Stack_Base       : Stack_Address;
        Pattern_Size     : Natural;
        Pattern          : Interfaces.Unsigned_32 := 16#DEAD_BEEF#);
     --  Should be called before any use of a Stack_Analyzer, to initialize it.
--- 230,236 ----
       (Analyzer         : in out Stack_Analyzer;
        Task_Name        : String;
        Stack_Size       : Natural;
!       Stack_Base       : System.Address;
        Pattern_Size     : Natural;
        Pattern          : Interfaces.Unsigned_32 := 16#DEAD_BEEF#);
     --  Should be called before any use of a Stack_Analyzer, to initialize it.
*************** private
*** 287,293 ****
        Task_Name : String (1 .. Task_Name_Length);
        --  Name of the task
  
!       Stack_Base : Stack_Address;
        --  Address of the base of the stack, as given by the caller of
        --  Initialize_Analyzer.
  
--- 287,293 ----
        Task_Name : String (1 .. Task_Name_Length);
        --  Name of the task
  
!       Stack_Base : System.Address;
        --  Address of the base of the stack, as given by the caller of
        --  Initialize_Analyzer.
  
*************** private
*** 300,309 ****
        Pattern : Pattern_Type;
        --  Pattern used to recognize untouched memory
  
!       Pattern_Limit : Stack_Address;
        --  Bound of the pattern area farthest to the base
  
!       Topmost_Touched_Mark : Stack_Address;
        --  Topmost address of the pattern area whose value it is pointing
        --  at has been modified during execution. If the systematic error are
        --  compensated, it is the topmost value of the stack pointer during
--- 300,309 ----
        Pattern : Pattern_Type;
        --  Pattern used to recognize untouched memory
  
!       Pattern_Limit : System.Address;
        --  Bound of the pattern area farthest to the base
  
!       Topmost_Touched_Mark : System.Address;
        --  Topmost address of the pattern area whose value it is pointing
        --  at has been modified during execution. If the systematic error are
        --  compensated, it is the topmost value of the stack pointer during
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-trasym__dwarf.adb gcc-16-20250706/gcc/ada/libgnat/s-trasym__dwarf.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-trasym__dwarf.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-trasym__dwarf.adb	Sun Jul  6 22:32:09 2025
*************** package body System.Traceback.Symbolic i
*** 479,485 ****
  
     exception
        when others =>
!          return;
     end Module_Symbolic_Traceback;
  
     -------------------------------------
--- 479,485 ----
  
     exception
        when others =>
!          null;
     end Module_Symbolic_Traceback;
  
     -------------------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-valrea.adb gcc-16-20250706/gcc/ada/libgnat/s-valrea.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-valrea.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-valrea.adb	Sun Jul  6 22:32:09 2025
*************** package body System.Val_Real is
*** 49,55 ****
     Precision_Limit : constant Uns := 2**Num'Machine_Mantissa - 1;
     --  See below for the rationale
  
!    package Impl is new Value_R (Uns, 2, Precision_Limit, Round => False);
  
     subtype Base_T is Unsigned range 2 .. 16;
  
--- 49,56 ----
     Precision_Limit : constant Uns := 2**Num'Machine_Mantissa - 1;
     --  See below for the rationale
  
!    package Impl is new Value_R (Uns, 2, Precision_Limit);
!    --  We do not use the Extra digits for floating-point types
  
     subtype Base_T is Unsigned range 2 .. 16;
  
*************** package body System.Val_Real is
*** 90,96 ****
          when others => raise Program_Error);
     --  Return the exponent of a power of 2
  
!    function Integer_to_Real
       (Str   : String;
        Val   : Impl.Value_Array;
        Base  : Unsigned;
--- 91,97 ----
          when others => raise Program_Error);
     --  Return the exponent of a power of 2
  
!    function Integer_To_Real
       (Str   : String;
        Val   : Impl.Value_Array;
        Base  : Unsigned;
*************** package body System.Val_Real is
*** 105,114 ****
     --  Return Num'Scaling (5.0**Exp, -S) as a double number where Exp > Maxexp
  
     ---------------------
!    -- Integer_to_Real --
     ---------------------
  
!    function Integer_to_Real
       (Str   : String;
        Val   : Impl.Value_Array;
        Base  : Unsigned;
--- 106,115 ----
     --  Return Num'Scaling (5.0**Exp, -S) as a double number where Exp > Maxexp
  
     ---------------------
!    -- Integer_To_Real --
     ---------------------
  
!    function Integer_To_Real
       (Str   : String;
        Val   : Impl.Value_Array;
        Base  : Unsigned;
*************** package body System.Val_Real is
*** 213,219 ****
  
        --  Compute the final value by applying the scaling, if any
  
!       if (Val (1) = 0 and then Val (2) = 0) or else S = 0 then
           R_Val := Double_Real.To_Single (D_Val);
  
        else
--- 214,220 ----
  
        --  Compute the final value by applying the scaling, if any
  
!       if Val (1) = 0 or else S = 0 then
           R_Val := Double_Real.To_Single (D_Val);
  
        else
*************** package body System.Val_Real is
*** 313,319 ****
  
     exception
        when Constraint_Error => Bad_Value (Str);
!    end Integer_to_Real;
  
     -------------------
     -- Large_Powfive --
--- 314,320 ----
  
     exception
        when Constraint_Error => Bad_Value (Str);
!    end Integer_To_Real;
  
     -------------------
     -- Large_Powfive --
*************** package body System.Val_Real is
*** 456,462 ****
     begin
        Val := Impl.Scan_Raw_Real (Str, Ptr, Max, Base, Scale, Extra, Minus);
  
!       return Integer_to_Real (Str, Val, Base, Scale, Minus);
     end Scan_Real;
  
     ----------------
--- 457,463 ----
     begin
        Val := Impl.Scan_Raw_Real (Str, Ptr, Max, Base, Scale, Extra, Minus);
  
!       return Integer_To_Real (Str, Val, Base, Scale, Minus);
     end Scan_Real;
  
     ----------------
*************** package body System.Val_Real is
*** 473,479 ****
     begin
        Val := Impl.Value_Raw_Real (Str, Base, Scale, Extra, Minus);
  
!       return Integer_to_Real (Str, Val, Base, Scale, Minus);
     end Value_Real;
  
  end System.Val_Real;
--- 474,480 ----
     begin
        Val := Impl.Value_Raw_Real (Str, Base, Scale, Extra, Minus);
  
!       return Integer_To_Real (Str, Val, Base, Scale, Minus);
     end Value_Real;
  
  end System.Val_Real;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-valued.adb gcc-16-20250706/gcc/ada/libgnat/s-valued.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-valued.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-valued.adb	Sun Jul  6 22:32:09 2025
*************** package body System.Value_D is
*** 38,45 ****
     pragma Assert (Int'Size <= Uns'Size);
     --  We need an unsigned type large enough to represent the mantissa
  
!    package Impl is new Value_R (Uns, 1, 2**(Int'Size - 1), Round => False);
!    --  We do not use the Extra digit for decimal fixed-point types, except to
     --  effectively ensure that overflow is detected near the boundaries.
  
     function Integer_to_Decimal
--- 38,45 ----
     pragma Assert (Int'Size <= Uns'Size);
     --  We need an unsigned type large enough to represent the mantissa
  
!    package Impl is new Value_R (Uns, 1, 2**(Int'Size - 1));
!    --  We do not use the Extra digits for decimal fixed-point types, except to
     --  effectively ensure that overflow is detected near the boundaries.
  
     function Integer_to_Decimal
*************** package body System.Value_D is
*** 47,53 ****
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra  : Unsigned;
        Minus  : Boolean;
        Scale  : Integer) return Int;
     --  Convert the real value from integer to decimal representation
--- 47,53 ----
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra2 : Unsigned;
        Minus  : Boolean;
        Scale  : Integer) return Int;
     --  Convert the real value from integer to decimal representation
*************** package body System.Value_D is
*** 61,67 ****
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra  : Unsigned;
        Minus  : Boolean;
        Scale  : Integer) return Int
     is
--- 61,67 ----
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra2 : Unsigned;
        Minus  : Boolean;
        Scale  : Integer) return Int
     is
*************** package body System.Value_D is
*** 75,81 ****
        --  updated to contain the remaining power in the computation. Note that
        --  Factor is expected to be positive in this context.
  
!       function Unsigned_To_Signed (Val : Uns) return Int;
        --  Convert an integer value from unsigned to signed representation
  
        -----------------
--- 75,81 ----
        --  updated to contain the remaining power in the computation. Note that
        --  Factor is expected to be positive in this context.
  
!       function To_Signed (Val : Uns) return Int;
        --  Convert an integer value from unsigned to signed representation
  
        -----------------
*************** package body System.Value_D is
*** 102,112 ****
           return Result;
        end Safe_Expont;
  
!       ------------------------
!       -- Unsigned_To_Signed --
!       ------------------------
  
!       function Unsigned_To_Signed (Val : Uns) return Int is
        begin
           --  Deal with overflow cases, and also with largest negative number
  
--- 102,112 ----
           return Result;
        end Safe_Expont;
  
!       ---------------
!       -- To_Signed --
!       ---------------
  
!       function To_Signed (Val : Uns) return Int is
        begin
           --  Deal with overflow cases, and also with largest negative number
  
*************** package body System.Value_D is
*** 127,157 ****
           else
              return Int (Val);
           end if;
!       end Unsigned_To_Signed;
  
        --  Local variables
  
!       E : Uns := Uns (Extra);
  
     begin
        --  If the base of the value is 10 or its scaling factor is zero, then
        --  add the scales (they are defined in the opposite sense) and apply
        --  the result to the value, checking for overflow in the process.
  
!       if Base = 10 or else ScaleB = 0 then
!          declare
!             S : Integer := ScaleB + Scale;
!             V : Uns     := Val;
! 
           begin
              while S < 0 loop
                 V := V / 10;
                 S := S + 1;
              end loop;
  
              while S > 0 loop
!                if V <= (Uns'Last - E) / 10 then
!                   V := V * 10 + E;
                    S := S - 1;
                    E := 0;
                 else
--- 127,169 ----
           else
              return Int (Val);
           end if;
!       end To_Signed;
  
        --  Local variables
  
!       V : Uns      := Val;
!       S : Integer  := ScaleB;
!       E : Unsigned := Extra2 / Base;
  
     begin
+       --  The implementation of Value_R uses fully symmetric arithmetics
+       --  but here we cannot handle 2**(Int'Size - 1) if Minus is not set.
+ 
+       if V = 2**(Int'Size - 1) and then not Minus then
+          E := Unsigned (V rem Uns (Base));
+          V := V / Uns (Base);
+          S := S + 1;
+       end if;
+ 
        --  If the base of the value is 10 or its scaling factor is zero, then
        --  add the scales (they are defined in the opposite sense) and apply
        --  the result to the value, checking for overflow in the process.
  
!       if Base = 10 or else S = 0 then
           begin
+             S := S + Scale;
+ 
              while S < 0 loop
+                if V = 0 then
+                   exit;
+                end if;
                 V := V / 10;
                 S := S + 1;
              end loop;
  
              while S > 0 loop
!                if V <= (Uns'Last - Uns (E)) / 10 then
!                   V := V * 10 + Uns (E);
                    S := S - 1;
                    E := 0;
                 else
*************** package body System.Value_D is
*** 159,165 ****
                 end if;
              end loop;
  
!             return Unsigned_To_Signed (V);
           end;
  
        --  If the base of the value is not 10, use a scaled divide operation
--- 171,177 ----
                 end if;
              end loop;
  
!             return To_Signed (V);
           end;
  
        --  If the base of the value is not 10, use a scaled divide operation
*************** package body System.Value_D is
*** 167,176 ****
  
        else
           declare
!             B : constant Int     := Int (Base);
!             S : constant Integer := ScaleB;
! 
!             V : Uns := Val;
  
              Y, Z, Q, R : Int;
  
--- 179,185 ----
  
        else
           declare
!             B : constant Int := Int (Base);
  
              Y, Z, Q, R : Int;
  
*************** package body System.Value_D is
*** 186,192 ****
                    Z := Safe_Expont (B, LS, 10 ** Integer'Max (0, -Scale));
  
                    for J in 1 .. LS loop
!                      V := V / Uns (B);
                    end loop;
                 end;
  
--- 195,204 ----
                    Z := Safe_Expont (B, LS, 10 ** Integer'Max (0, -Scale));
  
                    for J in 1 .. LS loop
!                      if V = 0 then
!                         exit;
!                      end if;
!                      V := V / Uns (Base);
                    end loop;
                 end;
  
*************** package body System.Value_D is
*** 201,208 ****
                    Z := 10 ** Integer'Max (0, -Scale);
  
                    for J in 1 .. LS loop
!                      if V <= (Uns'Last - E) / Uns (B) then
!                         V := V * Uns (B) + E;
                          E := 0;
                       else
                          Bad_Value (Str);
--- 213,220 ----
                    Z := 10 ** Integer'Max (0, -Scale);
  
                    for J in 1 .. LS loop
!                      if V <= (Uns'Last - Uns (E)) / Uns (Base) then
!                         V := V * Uns (Base) + Uns (E);
                          E := 0;
                       else
                          Bad_Value (Str);
*************** package body System.Value_D is
*** 216,224 ****
                 raise Program_Error;
              end if;
  
!             --  Perform a scaled divide operation with rounding to match 'Image
  
!             Scaled_Divide (Unsigned_To_Signed (V), Y, Z, Q, R, Round => True);
  
              return Q;
           end;
--- 228,236 ----
                 raise Program_Error;
              end if;
  
!             --  Perform a scaled divide operation with truncation
  
!             Scaled_Divide (To_Signed (V), Y, Z, Q, R, Round => False);
  
              return Q;
           end;
*************** package body System.Value_D is
*** 238,254 ****
        Max   : Integer;
        Scale : Integer) return Int
     is
!       Base  : Unsigned;
!       Scl   : Impl.Scale_Array;
!       Extra : Unsigned;
!       Minus : Boolean;
!       Val   : Impl.Value_Array;
  
     begin
!       Val := Impl.Scan_Raw_Real (Str, Ptr, Max, Base, Scl, Extra, Minus);
  
        return
!         Integer_to_Decimal (Str, Val (1), Base, Scl (1), Extra, Minus, Scale);
     end Scan_Decimal;
  
     -------------------
--- 250,266 ----
        Max   : Integer;
        Scale : Integer) return Int
     is
!       Base   : Unsigned;
!       Scl    : Impl.Scale_Array;
!       Extra2 : Unsigned;
!       Minus  : Boolean;
!       Val    : Impl.Value_Array;
  
     begin
!       Val := Impl.Scan_Raw_Real (Str, Ptr, Max, Base, Scl, Extra2, Minus);
  
        return
!         Integer_to_Decimal (Str, Val (1), Base, Scl (1), Extra2, Minus, Scale);
     end Scan_Decimal;
  
     -------------------
*************** package body System.Value_D is
*** 256,272 ****
     -------------------
  
     function Value_Decimal (Str : String; Scale : Integer) return Int is
!       Base  : Unsigned;
!       Scl   : Impl.Scale_Array;
!       Extra : Unsigned;
!       Minus : Boolean;
!       Val   : Impl.Value_Array;
  
     begin
!       Val := Impl.Value_Raw_Real (Str, Base, Scl, Extra, Minus);
  
        return
!         Integer_to_Decimal (Str, Val (1), Base, Scl (1), Extra, Minus, Scale);
     end Value_Decimal;
  
  end System.Value_D;
--- 268,284 ----
     -------------------
  
     function Value_Decimal (Str : String; Scale : Integer) return Int is
!       Base   : Unsigned;
!       Scl    : Impl.Scale_Array;
!       Extra2 : Unsigned;
!       Minus  : Boolean;
!       Val    : Impl.Value_Array;
  
     begin
!       Val := Impl.Value_Raw_Real (Str, Base, Scl, Extra2, Minus);
  
        return
!         Integer_to_Decimal (Str, Val (1), Base, Scl (1), Extra2, Minus, Scale);
     end Value_Decimal;
  
  end System.Value_D;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-valuef.adb gcc-16-20250706/gcc/ada/libgnat/s-valuef.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-valuef.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-valuef.adb	Sun Jul  6 22:32:09 2025
*************** with System.Value_R;
*** 36,60 ****
  package body System.Value_F is
  
     --  The prerequisite of the implementation is that the computation of the
!    --  operands of the scaled divide does not unduly overflow when the small
!    --  is neither an integer nor the reciprocal of an integer, which means
!    --  that its numerator and denominator must be both not larger than the
!    --  smallest divide 2**(Int'Size - 1) / Base where Base ranges over the
!    --  supported values for the base of the literal. Given that the largest
!    --  supported base is 16, this gives a limit of 2**(Int'Size - 5).
  
     pragma Assert (Int'Size <= Uns'Size);
     --  We need an unsigned type large enough to represent the mantissa
  
!    package Impl is new Value_R (Uns, 1, 2**(Int'Size - 1), Round => True);
!    --  We use the Extra digit for ordinary fixed-point types
  
     function Integer_To_Fixed
       (Str    : String;
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra  : Unsigned;
        Minus  : Boolean;
        Num    : Int;
        Den    : Int) return Int;
--- 36,61 ----
  package body System.Value_F is
  
     --  The prerequisite of the implementation is that the computation of the
!    --  operands of the scaled divide does not unduly overflow, which means
!    --  that the numerator and the denominator of the small must be both not
!    --  larger than the smallest divide 2**(Int'Size - 1) / Base where Base
!    --  ranges over the supported values for the base of the literal, except
!    --  when the numerator is 1, in which case up to 2**(Int'Size - 1) is
!    --  permitted for the denominator. Given that the largest supported base
!    --  is 16, this gives a limit of 2**(Int'Size - 5) in the general case.
  
     pragma Assert (Int'Size <= Uns'Size);
     --  We need an unsigned type large enough to represent the mantissa
  
!    package Impl is new Value_R (Uns, 1, 2**(Int'Size - 1));
!    --  We use the Extra digits for ordinary fixed-point types
  
     function Integer_To_Fixed
       (Str    : String;
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra2 : Unsigned;
        Minus  : Boolean;
        Num    : Int;
        Den    : Int) return Int;
*************** package body System.Value_F is
*** 79,101 ****
  
     --  Of course N1 = N2 + 1 holds, which means both that Val may not contain
     --  enough significant bits to represent all the values of the type and that
!    --  1 extra decimal digit contains the information for the missing bits.
  
     --  Therefore the actual computation to be performed is
  
!    --    V = (Val * Base + Extra) * (Base ** (ScaleB - 1)) / (Num / Den)
  
!    --  using two steps of scaled divide if Extra is positive and ScaleB too
  
!    --    (1)  Val * (Den * (Base ** ScaleB)) = Q1 * Num + R1
  
!    --    (2)  Extra * (Den * (Base ** ScaleB)) = Q2 * -Base + R2
  
!    --  which yields after dividing (1) by Num and (2) by Num * Base and summing
  
!    --    V = Q1 + (R1 - Q2) / Num + R2 / (Num * Base)
  
!    --  but we get rid of the third term by using a rounding divide for (2).
  
     --  This works only if Den * (Base ** ScaleB) does not overflow for inputs
     --  corresponding to 'Image. Let S = Num / Den, B = Base and N the scale in
--- 80,104 ----
  
     --  Of course N1 = N2 + 1 holds, which means both that Val may not contain
     --  enough significant bits to represent all the values of the type and that
!    --  1 extra decimal digit contains the information for the missing bits. But
!    --  in practice we need 2 extra decimal digits to avoid multiple roundings.
  
     --  Therefore the actual computation to be performed is
  
!    --    V = (Val * Base ** 2 + Extra2) * (Base ** (ScaleB - 2)) / (Num / Den)
  
!    --  using two steps of scaled divide if Extra2 is positive and ScaleB too
  
!    --    (1a)  Val * (Den * (Base ** ScaleB)) = Q1 * Num + R1
  
!    --    (2a)  Extra2 * (Den * (Base ** ScaleB)) = Q2 * Base ** 2 + R2
  
!    --  which yields after dividing (1a) by Num and (2a) by Num * (Base ** 2)
!    --  and summing
  
!    --    V = Q1 + (Q2 + R1) / Num + R2 / (Num * (Base ** 2))
  
!    --  but we get rid of the third term by using a rounding divide for (2a).
  
     --  This works only if Den * (Base ** ScaleB) does not overflow for inputs
     --  corresponding to 'Image. Let S = Num / Den, B = Base and N the scale in
*************** package body System.Value_F is
*** 113,129 ****
  
     --  which means that the product does not overflow if Num <= 2**(M-1) / B.
  
!    --  On the other hand, if Extra is positive and ScaleB negative, the above
     --  two steps are
  
     --   (1b)  Val * Den = Q1 * (Num * (Base ** -ScaleB)) + R1
  
!    --   (2b)  Extra * Den = Q2 * -Base + R2
  
     --  which yields after dividing (1b) by Num * (Base ** -ScaleB) and (2b) by
!    --  Num * (Base ** (1 - ScaleB)) and summing
  
!    --    V = Q1 + (R1 - Q2) / (Num * (Base ** -ScaleB)) + R2 / ...
  
     --  but we get rid of the third term by using a rounding divide for (2b).
  
--- 116,132 ----
  
     --  which means that the product does not overflow if Num <= 2**(M-1) / B.
  
!    --  On the other hand, if Extra2 is positive and ScaleB negative, the above
     --  two steps are
  
     --   (1b)  Val * Den = Q1 * (Num * (Base ** -ScaleB)) + R1
  
!    --   (2b)  Extra2 * Den = Q2 * Base ** 2 + R2
  
     --  which yields after dividing (1b) by Num * (Base ** -ScaleB) and (2b) by
!    --  Num * (Base ** (2 - ScaleB)) and summing
  
!    --    V = Q1 + (Q2 + R1) / (Num * (Base ** -ScaleB)) + R2 / (Num * (...))
  
     --  but we get rid of the third term by using a rounding divide for (2b).
  
*************** package body System.Value_F is
*** 133,138 ****
--- 136,144 ----
     --    Num * (Base ** -ScaleB) <= Num * (B ** N) < Den * B
  
     --  which means that the product does not overflow if Den <= 2**(M-1) / B.
+    --  Moreover, if 2**(M-1) / B < Den <= 2**(M-1), we can add 1 to ScaleB and
+    --  divide Val by B while preserving the rightmost B-digit of Val in Extra2
+    --  without changing the computation when Num = 1.
  
     ----------------------
     -- Integer_To_Fixed --
*************** package body System.Value_F is
*** 143,157 ****
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra  : Unsigned;
        Minus  : Boolean;
        Num    : Int;
        Den    : Int) return Int
     is
        pragma Assert (Base in 2 .. 16);
  
!       pragma Assert (Extra < Base);
!       --  Accept only one extra digit after those used for Val
  
        pragma Assert (Num < 0 and then Den < 0);
        --  Accept only negative numbers to allow -2**(Int'Size - 1)
--- 149,163 ----
        Val    : Uns;
        Base   : Unsigned;
        ScaleB : Integer;
!       Extra2 : Unsigned;
        Minus  : Boolean;
        Num    : Int;
        Den    : Int) return Int
     is
        pragma Assert (Base in 2 .. 16);
  
!       pragma Assert (Extra2 < Base ** 2);
!       --  Accept only two extra digits after those used for Val
  
        pragma Assert (Num < 0 and then Den < 0);
        --  Accept only negative numbers to allow -2**(Int'Size - 1)
*************** package body System.Value_F is
*** 169,175 ****
        --  updated to contain the remaining power in the computation. Note that
        --  Factor is expected to be negative in this context.
  
!       function Unsigned_To_Signed (Val : Uns) return Int;
        --  Convert an integer value from unsigned to signed representation
  
        -----------------
--- 175,181 ----
        --  updated to contain the remaining power in the computation. Note that
        --  Factor is expected to be negative in this context.
  
!       function To_Signed (Val : Uns) return Int;
        --  Convert an integer value from unsigned to signed representation
  
        -----------------
*************** package body System.Value_F is
*** 196,206 ****
           return Result;
        end Safe_Expont;
  
!       ------------------------
!       -- Unsigned_To_Signed --
!       ------------------------
  
!       function Unsigned_To_Signed (Val : Uns) return Int is
        begin
           --  Deal with overflow cases, and also with largest negative number
  
--- 202,212 ----
           return Result;
        end Safe_Expont;
  
!       ---------------
!       -- To_Signed --
!       ---------------
  
!       function To_Signed (Val : Uns) return Int is
        begin
           --  Deal with overflow cases, and also with largest negative number
  
*************** package body System.Value_F is
*** 221,235 ****
           else
              return Int (Val);
           end if;
!       end Unsigned_To_Signed;
  
        --  Local variables
  
        B : constant Int := Int (Base);
  
!       V : Uns     := Val;
!       S : Integer := ScaleB;
!       E : Uns     := Uns (Extra);
  
        Y, Z, Q1, R1, Q2, R2 : Int;
  
--- 227,241 ----
           else
              return Int (Val);
           end if;
!       end To_Signed;
  
        --  Local variables
  
        B : constant Int := Int (Base);
  
!       V : Uns      := Val;
!       S : Integer  := ScaleB;
!       E : Unsigned := Extra2;
  
        Y, Z, Q1, R1, Q2, R2 : Int;
  
*************** package body System.Value_F is
*** 238,245 ****
        --  but here we cannot handle 2**(Int'Size - 1) if Minus is not set.
  
        if V = 2**(Int'Size - 1) and then not Minus then
!          E := V rem Uns (B);
!          V := V / Uns (B);
           S := S + 1;
        end if;
  
--- 244,251 ----
        --  but here we cannot handle 2**(Int'Size - 1) if Minus is not set.
  
        if V = 2**(Int'Size - 1) and then not Minus then
!          E := Unsigned (V rem Uns (Base)) * Base + E / Base;
!          V := V / Uns (Base);
           S := S + 1;
        end if;
  
*************** package body System.Value_F is
*** 248,254 ****
        --  raised during the computation. The only real concern is the exponent.
  
        --  If S is too negative, then drop trailing digits, but preserve the
!       --  last dropped digit, until V saturates to 0.
  
        if S < 0 then
           declare
--- 254,260 ----
        --  raised during the computation. The only real concern is the exponent.
  
        --  If S is too negative, then drop trailing digits, but preserve the
!       --  last two dropped digits, until V saturates to 0.
  
        if S < 0 then
           declare
*************** package body System.Value_F is
*** 263,270 ****
                    E := 0;
                    exit;
                 end if;
!                E := V rem Uns (B);
!                V := V / Uns (B);
              end loop;
           end;
  
--- 269,276 ----
                    E := 0;
                    exit;
                 end if;
!                E := Unsigned (V rem Uns (Base)) * Base + E / Base;
!                V := V / Uns (Base);
              end loop;
           end;
  
*************** package body System.Value_F is
*** 279,287 ****
              Z := Num;
  
              for J in 1 .. LS loop
!                if V <= (Uns'Last - E) / Uns (B) then
!                   V := V * Uns (B) + E;
!                   E := 0;
                 else
                    Bad_Value (Str);
                 end if;
--- 285,293 ----
              Z := Num;
  
              for J in 1 .. LS loop
!                if V <= (Uns'Last - Uns (E / Base)) / Uns (Base) then
!                   V := V * Uns (Base) + Uns (E / Base);
!                   E := (E rem Base) * Base;
                 else
                    Bad_Value (Str);
                 end if;
*************** package body System.Value_F is
*** 301,308 ****
        --  sign of the first operand and the sign of the remainder the opposite.
  
        if E > 0 then
!          Scaled_Divide (Unsigned_To_Signed (V), Y, Z, Q1, R1, Round => False);
!          Scaled_Divide (Unsigned_To_Signed (E), Y, -B, Q2, R2, Round => True);
  
           --  Avoid an overflow during the subtraction. Note that Q2 is smaller
           --  than Y and R1 smaller than Z in magnitude, so it is safe to take
--- 307,314 ----
        --  sign of the first operand and the sign of the remainder the opposite.
  
        if E > 0 then
!          Scaled_Divide (To_Signed (V), Y, Z, Q1, R1, Round => False);
!          Scaled_Divide (To_Signed (Uns (E)), Y, -B**2, Q2, R2, Round => True);
  
           --  Avoid an overflow during the subtraction. Note that Q2 is smaller
           --  than Y and R1 smaller than Z in magnitude, so it is safe to take
*************** package body System.Value_F is
*** 329,335 ****
           return Q1 + Q2;
  
        else
!          Scaled_Divide (Unsigned_To_Signed (V), Y, Z, Q1, R1, Round => True);
  
           return Q1;
        end if;
--- 335,341 ----
           return Q1 + Q2;
  
        else
!          Scaled_Divide (To_Signed (V), Y, Z, Q1, R1, Round => True);
  
           return Q1;
        end if;
*************** package body System.Value_F is
*** 349,365 ****
        Num : Int;
        Den : Int) return Int
     is
!       Base  : Unsigned;
!       Scl   : Impl.Scale_Array;
!       Extra : Unsigned;
!       Minus : Boolean;
!       Val   : Impl.Value_Array;
  
     begin
!       Val := Impl.Scan_Raw_Real (Str, Ptr, Max, Base, Scl, Extra, Minus);
  
        return
!         Integer_To_Fixed (Str, Val (1), Base, Scl (1), Extra, Minus, Num, Den);
     end Scan_Fixed;
  
     -----------------
--- 355,371 ----
        Num : Int;
        Den : Int) return Int
     is
!       Bas    : Unsigned;
!       Scl    : Impl.Scale_Array;
!       Extra2 : Unsigned;
!       Minus  : Boolean;
!       Val    : Impl.Value_Array;
  
     begin
!       Val := Impl.Scan_Raw_Real (Str, Ptr, Max, Bas, Scl, Extra2, Minus);
  
        return
!         Integer_To_Fixed (Str, Val (1), Bas, Scl (1), Extra2, Minus, Num, Den);
     end Scan_Fixed;
  
     -----------------
*************** package body System.Value_F is
*** 371,387 ****
        Num : Int;
        Den : Int) return Int
     is
!       Base  : Unsigned;
!       Scl   : Impl.Scale_Array;
!       Extra : Unsigned;
!       Minus : Boolean;
!       Val   : Impl.Value_Array;
  
     begin
!       Val := Impl.Value_Raw_Real (Str, Base, Scl, Extra, Minus);
  
        return
!         Integer_To_Fixed (Str, Val (1), Base, Scl (1), Extra, Minus, Num, Den);
     end Value_Fixed;
  
  end System.Value_F;
--- 377,393 ----
        Num : Int;
        Den : Int) return Int
     is
!       Bas    : Unsigned;
!       Scl    : Impl.Scale_Array;
!       Extra2 : Unsigned;
!       Minus  : Boolean;
!       Val    : Impl.Value_Array;
  
     begin
!       Val := Impl.Value_Raw_Real (Str, Bas, Scl, Extra2, Minus);
  
        return
!         Integer_To_Fixed (Str, Val (1), Bas, Scl (1), Extra2, Minus, Num, Den);
     end Value_Fixed;
  
  end System.Value_F;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-valuen.ads gcc-16-20250706/gcc/ada/libgnat/s-valuen.ads
*** gcc-16-20250629/gcc/ada/libgnat/s-valuen.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-valuen.ads	Sun Jul  6 22:32:09 2025
***************
*** 30,37 ****
  ------------------------------------------------------------------------------
  
  --  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
  
--- 30,37 ----
  ------------------------------------------------------------------------------
  
  --  This package is used to compute the Value attribute for enumeration types
! --  other than those in package Standard. See unit Exp_Imgv for details of the
! --  format of constructed image tables.
  
  generic
  
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-valuer.adb gcc-16-20250706/gcc/ada/libgnat/s-valuer.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-valuer.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-valuer.adb	Sun Jul  6 22:32:09 2025
*************** package body System.Value_R is
*** 42,55 ****
     function As_Digit (C : Character) return Char_As_Digit;
     --  Given a character return the digit it represents
  
-    procedure Round_Extra
-      (Digit : Char_As_Digit;
-       Base  : Unsigned;
-       Value : in out Uns;
-       Scale : in out Integer;
-       Extra : in out Char_As_Digit);
-    --  Round the triplet (Value, Scale, Extra) according to Digit in Base
- 
     procedure Scan_Decimal_Digits
        (Str            : String;
         Index          : in out Integer;
--- 42,47 ----
*************** package body System.Value_R is
*** 59,65 ****
         Value          : in out Value_Array;
         Scale          : in out Scale_Array;
         N              : in out Positive;
!        Extra          : in out Char_As_Digit;
         Base_Violation : in out Boolean);
     --  Scan the decimal part of a real (i.e. after decimal separator)
     --
--- 51,57 ----
         Value          : in out Value_Array;
         Scale          : in out Scale_Array;
         N              : in out Positive;
!        Extra2         : in out Unsigned;
         Base_Violation : in out Boolean);
     --  Scan the decimal part of a real (i.e. after decimal separator)
     --
*************** package body System.Value_R is
*** 68,74 ****
     --
     --  For each digit parsed, Value = Value * Base + Digit and Scale is
     --  decremented by 1. If precision limit is reached, remaining digits are
!    --  still parsed but ignored, except for the first which is stored in Extra.
     --
     --  Base_Violation is set to True if a digit found is not part of the Base
     --
--- 60,67 ----
     --
     --  For each digit parsed, Value = Value * Base + Digit and Scale is
     --  decremented by 1. If precision limit is reached, remaining digits are
!    --  still parsed but ignored, except for the first two of them which are
!    --  stored in Extra2.
     --
     --  Base_Violation is set to True if a digit found is not part of the Base
     --
*************** package body System.Value_R is
*** 83,89 ****
         Value          : out Value_Array;
         Scale          : out Scale_Array;
         N              : out Positive;
!        Extra          : out Char_As_Digit;
         Base_Violation : in out Boolean);
     --  Scan the integral part of a real (i.e. before decimal separator)
     --
--- 76,83 ----
         Value          : out Value_Array;
         Scale          : out Scale_Array;
         N              : out Positive;
!        Extra2         : out Unsigned;
!        Extra2_Filled  : out Boolean;
         Base_Violation : in out Boolean);
     --  Scan the integral part of a real (i.e. before decimal separator)
     --
*************** package body System.Value_R is
*** 93,99 ****
     --  For each digit parsed, either Value := Value * Base + Digit or Scale
     --  is incremented by 1 if precision limit is reached, in which case the
     --  remaining digits are still parsed but ignored, except for the first
!    --  which is stored in Extra.
     --
     --  Base_Violation is set to True if a digit found is not part of the Base
     --
--- 87,93 ----
     --  For each digit parsed, either Value := Value * Base + Digit or Scale
     --  is incremented by 1 if precision limit is reached, in which case the
     --  remaining digits are still parsed but ignored, except for the first
!    --  two of them which are stored in Extra2 if Extra2_Filled is True.
     --
     --  Base_Violation is set to True if a digit found is not part of the Base
     --
*************** package body System.Value_R is
*** 119,167 ****
        end case;
     end As_Digit;
  
-    -----------------
-    -- Round_Extra --
-    -----------------
- 
-    procedure Round_Extra
-      (Digit : Char_As_Digit;
-       Base  : Unsigned;
-       Value : in out Uns;
-       Scale : in out Integer;
-       Extra : in out Char_As_Digit)
-    is
-       pragma Assert (Base in 2 .. 16);
- 
-       B : constant Uns := Uns (Base);
- 
-    begin
-       --  Beware that Base may be odd
- 
-       if 2 * Unsigned (Digit) >= Base then
- 
-          --  If Extra is maximum, round Value
- 
-          if Extra = Base - 1 then
- 
-             --  If Value is maximum, scale it up
- 
-             if Value = Precision_Limit then
-                Extra := Char_As_Digit (Value mod B);
-                Value := Value / B;
-                Scale := Scale + 1;
-                Round_Extra (Digit, Base, Value, Scale, Extra);
- 
-             else
-                Extra := 0;
-                Value := Value + 1;
-             end if;
- 
-          else
-             Extra := Extra + 1;
-          end if;
-       end if;
-    end Round_Extra;
- 
     -------------------------
     -- Scan_Decimal_Digits --
     -------------------------
--- 113,118 ----
*************** package body System.Value_R is
*** 175,181 ****
         Value          : in out Value_Array;
         Scale          : in out Scale_Array;
         N              : in out Positive;
!        Extra          : in out Char_As_Digit;
         Base_Violation : in out Boolean)
  
     is
--- 126,132 ----
         Value          : in out Value_Array;
         Scale          : in out Scale_Array;
         N              : in out Positive;
!        Extra2         : in out Unsigned;
         Base_Violation : in out Boolean)
  
     is
*************** package body System.Value_R is
*** 194,201 ****
        --  to Precision_Limit.
  
        Precision_Limit_Just_Reached : Boolean;
!       --  Set to True if Precision_Limit_Reached was just set to True, but only
!       --  used when Round is True.
  
        Digit : Char_As_Digit;
        --  The current digit
--- 145,151 ----
        --  to Precision_Limit.
  
        Precision_Limit_Just_Reached : Boolean;
!       --  Set to True if Precision_Limit_Reached was just set to True
  
        Digit : Char_As_Digit;
        --  The current digit
*************** package body System.Value_R is
*** 207,223 ****
        --  Number of trailing zeros at a given point
  
     begin
!       --  If initial Scale is not 0 then it means that Precision_Limit was
        --  reached during scanning of the integral part.
  
        if Scale (Data_Index'Last) > 0 then
           Precision_Limit_Reached := True;
        else
!          Extra := 0;
           Precision_Limit_Reached := False;
-       end if;
- 
-       if Round then
           Precision_Limit_Just_Reached := False;
        end if;
  
--- 157,172 ----
        --  Number of trailing zeros at a given point
  
     begin
!       --  If initial Scale is not 0, then this means that Precision_Limit was
        --  reached during scanning of the integral part.
  
        if Scale (Data_Index'Last) > 0 then
           Precision_Limit_Reached := True;
+          Precision_Limit_Just_Reached := True;
+ 
        else
!          Extra2 := 0;
           Precision_Limit_Reached := False;
           Precision_Limit_Just_Reached := False;
        end if;
  
*************** package body System.Value_R is
*** 231,258 ****
        Digit := As_Digit (Str (Index));
  
        loop
!          --  Check if base is correct. If the base is not specified, the digit
!          --  E or e cannot be considered as a base violation as it can be used
!          --  for exponentiation.
  
           if Digit >= Base then
!             if Base_Specified then
!                Base_Violation := True;
!             elsif Digit = E_Digit then
!                return;
!             else
!                Base_Violation := True;
!             end if;
           end if;
  
           --  If precision limit has been reached, just ignore any remaining
           --  digits for the computation of Value and Scale, but store the
!          --  first in Extra and use the second to round Extra. The scanning
!          --  should continue only to assess the validity of the string.
  
           if Precision_Limit_Reached then
!             if Round and then Precision_Limit_Just_Reached then
!                Round_Extra (Digit, Base, Value (N), Scale (N), Extra);
                 Precision_Limit_Just_Reached := False;
              end if;
  
--- 180,206 ----
        Digit := As_Digit (Str (Index));
  
        loop
!          --  If the base is not explicitly specified, 'e' or 'E' marks the
!          --  beginning of the exponent part.
! 
!          if not Base_Specified and then Digit = E_Digit then
!             return;
!          end if;
! 
!          --  Check that Digit is a valid digit with respect to Base
  
           if Digit >= Base then
!             Base_Violation := True;
           end if;
  
           --  If precision limit has been reached, just ignore any remaining
           --  digits for the computation of Value and Scale, but store the
!          --  first two digits in Extra2. The scanning should continue only
!          --  to assess the validity of the string.
  
           if Precision_Limit_Reached then
!             if Precision_Limit_Just_Reached then
!                Extra2 := Extra2 + Digit;
                 Precision_Limit_Just_Reached := False;
              end if;
  
*************** package body System.Value_R is
*** 275,285 ****
                       Scale (N) := Scale (N - 1) - 1;
  
                    else
!                      Extra := 0;
                       Precision_Limit_Reached := True;
-                      if Round and then J = Trailing_Zeros then
-                         Round_Extra (Digit, Base, Value (N), Scale (N), Extra);
-                      end if;
  
                       exit;
                    end if;
--- 223,230 ----
                       Scale (N) := Scale (N - 1) - 1;
  
                    else
!                      Extra2 := (if J = Trailing_Zeros then Digit else 0);
                       Precision_Limit_Reached := True;
  
                       exit;
                    end if;
*************** package body System.Value_R is
*** 318,328 ****
                    Scale (N) := Scale (N - 1) - 1;
  
                 else
!                   Extra := Digit;
                    Precision_Limit_Reached := True;
!                   if Round then
!                      Precision_Limit_Just_Reached := True;
!                   end if;
                 end if;
              end if;
           end if;
--- 263,271 ----
                    Scale (N) := Scale (N - 1) - 1;
  
                 else
!                   Extra2 := Digit * Base;
                    Precision_Limit_Reached := True;
!                   Precision_Limit_Just_Reached := True;
                 end if;
              end if;
           end if;
*************** package body System.Value_R is
*** 341,350 ****
  
              --  Underscore is only allowed if followed by a digit
  
!             if Digit = Underscore and Index + 1 <= Max then
  
                 Digit := As_Digit (Str (Index + 1));
!                if Digit in Valid_Digit then
                    Index := Index + 1;
                 else
                    return;
--- 284,295 ----
  
              --  Underscore is only allowed if followed by a digit
  
!             if Digit = Underscore and then Index + 1 <= Max then
  
                 Digit := As_Digit (Str (Index + 1));
!                if Digit in Valid_Digit and then
!                   (Digit /= E_Digit or else Base > E_Digit)
!                then
                    Index := Index + 1;
                 else
                    return;
*************** package body System.Value_R is
*** 372,378 ****
         Value          : out Value_Array;
         Scale          : out Scale_Array;
         N              : out Positive;
!        Extra          : out Char_As_Digit;
         Base_Violation : in out Boolean)
     is
        pragma Assert (Base in 2 .. 16);
--- 317,324 ----
         Value          : out Value_Array;
         Scale          : out Scale_Array;
         N              : out Positive;
!        Extra2         : out Unsigned;
!        Extra2_Filled  : out Boolean;
         Base_Violation : in out Boolean)
     is
        pragma Assert (Base in 2 .. 16);
*************** package body System.Value_R is
*** 388,395 ****
        --  to Precision_Limit.
  
        Precision_Limit_Just_Reached : Boolean;
!       --  Set to True if Precision_Limit_Reached was just set to True, but only
!       --  used when Round is True.
  
        Digit : Char_As_Digit;
        --  The current digit
--- 334,340 ----
        --  to Precision_Limit.
  
        Precision_Limit_Just_Reached : Boolean;
!       --  Set to True if Precision_Limit_Reached was just set to True
  
        Digit : Char_As_Digit;
        --  The current digit
*************** package body System.Value_R is
*** 398,415 ****
        --  Temporary
  
     begin
!       --  Initialize N, Value, Scale and Extra
  
        N := 1;
        Value := (others => 0);
        Scale := (others => 0);
!       Extra := 0;
  
        Precision_Limit_Reached := False;
! 
!       if Round then
!          Precision_Limit_Just_Reached := False;
!       end if;
  
        pragma Assert (Max <= Str'Last);
  
--- 343,358 ----
        --  Temporary
  
     begin
!       --  Initialize N, Value, Scale, Extra2 and Extra2_Filled
  
        N := 1;
        Value := (others => 0);
        Scale := (others => 0);
!       Extra2 := 0;
!       Extra2_Filled := False;
  
        Precision_Limit_Reached := False;
!       Precision_Limit_Just_Reached := False;
  
        pragma Assert (Max <= Str'Last);
  
*************** package body System.Value_R is
*** 419,448 ****
        Digit := As_Digit (Str (Index));
  
        loop
!          --  Check if base is correct. If the base is not specified, the digit
!          --  E or e cannot be considered as a base violation as it can be used
!          --  for exponentiation.
  
           if Digit >= Base then
!             if Base_Specified then
!                Base_Violation := True;
!             elsif Digit = E_Digit then
!                return;
!             else
!                Base_Violation := True;
!             end if;
           end if;
  
           --  If precision limit has been reached, just ignore any remaining
           --  digits for the computation of Value and Scale, but store the
!          --  first in Extra and use the second to round Extra. The scanning
!          --  should continue only to assess the validity of the string.
  
           if Precision_Limit_Reached then
              Scale (N) := Scale (N) + 1;
  
!             if Round and then Precision_Limit_Just_Reached then
!                Round_Extra (Digit, Base, Value (N), Scale (N), Extra);
                 Precision_Limit_Just_Reached := False;
              end if;
  
--- 362,391 ----
        Digit := As_Digit (Str (Index));
  
        loop
!          --  If the base is not explicitly specified, 'e' or 'E' marks the
!          --  beginning of the exponent part.
! 
!          if not Base_Specified and then Digit = E_Digit then
!             return;
!          end if;
! 
!          --  Check that Digit is a valid digit with respect to Base
  
           if Digit >= Base then
!             Base_Violation := True;
           end if;
  
           --  If precision limit has been reached, just ignore any remaining
           --  digits for the computation of Value and Scale, but store the
!          --  first two digits in Extra2. The scanning should continue only
!          --  to assess the validity of the string.
  
           if Precision_Limit_Reached then
              Scale (N) := Scale (N) + 1;
  
!             if Precision_Limit_Just_Reached then
!                Extra2 := Extra2 + Digit;
!                Extra2_Filled := True;
                 Precision_Limit_Just_Reached := False;
              end if;
  
*************** package body System.Value_R is
*** 467,477 ****
                 Value (N) := Uns (Digit);
  
              else
!                Extra := Digit;
                 Precision_Limit_Reached := True;
!                if Round then
!                   Precision_Limit_Just_Reached := True;
!                end if;
                 Scale (N) := Scale (N) + 1;
              end if;
           end if;
--- 410,418 ----
                 Value (N) := Uns (Digit);
  
              else
!                Extra2 := Digit * Base;
                 Precision_Limit_Reached := True;
!                Precision_Limit_Just_Reached := True;
                 Scale (N) := Scale (N) + 1;
              end if;
           end if;
*************** package body System.Value_R is
*** 496,504 ****
              --  Next character is not a digit. In that case stop scanning
              --  unless the next chracter is an underscore followed by a digit.
  
!             if Digit = Underscore and Index + 1 <= Max then
                 Digit := As_Digit (Str (Index + 1));
!                if Digit in Valid_Digit then
                    Index := Index + 1;
                 else
                    return;
--- 437,447 ----
              --  Next character is not a digit. In that case stop scanning
              --  unless the next chracter is an underscore followed by a digit.
  
!             if Digit = Underscore and then Index + 1 <= Max then
                 Digit := As_Digit (Str (Index + 1));
!                if Digit in Valid_Digit and then
!                   (Digit /= E_Digit or else Base > E_Digit)
!                then
                    Index := Index + 1;
                 else
                    return;
*************** package body System.Value_R is
*** 515,527 ****
     -------------------
  
     function Scan_Raw_Real
!      (Str   : String;
!       Ptr   : not null access Integer;
!       Max   : Integer;
!       Base  : out Unsigned;
!       Scale : out Scale_Array;
!       Extra : out Unsigned;
!       Minus : out Boolean) return Value_Array
     is
        pragma Assert (Max <= Str'Last);
  
--- 458,470 ----
     -------------------
  
     function Scan_Raw_Real
!      (Str    : String;
!       Ptr    : not null access Integer;
!       Max    : Integer;
!       Base   : out Unsigned;
!       Scale  : out Scale_Array;
!       Extra2 : out Unsigned;
!       Minus  : out Boolean) return Value_Array
     is
        pragma Assert (Max <= Str'Last);
  
*************** package body System.Value_R is
*** 536,541 ****
--- 479,487 ----
        --  If True some digits where not in the base. The real is still scanned
        --  till the end even if an error will be raised.
  
+       Extra2_Filled : Boolean;
+       --  True if Extra2 has been filled
+ 
        N : Positive;
        --  Index number of the current part
  
*************** package body System.Value_R is
*** 585,591 ****
  
           Scan_Integral_Digits
             (Str, Index, Max, Base, False, Value, Scale, N,
!             Char_As_Digit (Extra), Base_Violation);
  
        --  A dot is allowed only if followed by a digit (RM 3.5(39.8))
  
--- 531,537 ----
  
           Scan_Integral_Digits
             (Str, Index, Max, Base, False, Value, Scale, N,
!             Extra2, Extra2_Filled, Base_Violation);
  
        --  A dot is allowed only if followed by a digit (RM 3.5(39.8))
  
*************** package body System.Value_R is
*** 598,604 ****
           N := 1;
           Value := (others => 0);
           Scale := (others => 0);
!          Extra := 0;
  
        else
           Bad_Value (Str);
--- 544,551 ----
           N := 1;
           Value := (others => 0);
           Scale := (others => 0);
!          Extra2 := 0;
!          Extra2_Filled := False;
  
        else
           Bad_Value (Str);
*************** package body System.Value_R is
*** 648,654 ****
  
           Scan_Integral_Digits
             (Str, Index, Max, Base, Base_Char /= ASCII.NUL, Value, Scale,
!             N, Char_As_Digit (Extra), Base_Violation);
        end if;
  
        --  Do we have a dot?
--- 595,601 ----
  
           Scan_Integral_Digits
             (Str, Index, Max, Base, Base_Char /= ASCII.NUL, Value, Scale,
!             N, Extra2, Extra2_Filled, Base_Violation);
        end if;
  
        --  Do we have a dot?
*************** package body System.Value_R is
*** 673,681 ****
        if After_Point then
           pragma Assert (Index <= Max);
  
!          Scan_Decimal_Digits
!            (Str, Index, Max, Base, Base_Char /= ASCII.NUL, Value, Scale,
!             N, Char_As_Digit (Extra), Base_Violation);
        end if;
  
        --  If an explicit base was specified ensure that the delimiter is found
--- 620,641 ----
        if After_Point then
           pragma Assert (Index <= Max);
  
!          --  If Extra2 has been filled, we are done with it
! 
!          if Extra2_Filled then
!             declare
!                Dummy : Unsigned := 0;
!             begin
!                Scan_Decimal_Digits
!                  (Str, Index, Max, Base, Base_Char /= ASCII.NUL, Value, Scale,
!                   N, Dummy, Base_Violation);
!             end;
! 
!          else
!             Scan_Decimal_Digits
!               (Str, Index, Max, Base, Base_Char /= ASCII.NUL, Value, Scale,
!                N, Extra2, Base_Violation);
!          end if;
        end if;
  
        --  If an explicit base was specified ensure that the delimiter is found
*************** package body System.Value_R is
*** 723,733 ****
     --------------------
  
     function Value_Raw_Real
!      (Str   : String;
!       Base  : out Unsigned;
!       Scale : out Scale_Array;
!       Extra : out Unsigned;
!       Minus : out Boolean) return Value_Array
     is
        P : aliased Integer;
        V : Value_Array;
--- 683,693 ----
     --------------------
  
     function Value_Raw_Real
!      (Str    : String;
!       Base   : out Unsigned;
!       Scale  : out Scale_Array;
!       Extra2 : out Unsigned;
!       Minus  : out Boolean) return Value_Array
     is
        P : aliased Integer;
        V : Value_Array;
*************** package body System.Value_R is
*** 741,754 ****
           declare
              subtype NT is String (1 .. Str'Length);
           begin
!             return Value_Raw_Real (NT (Str), Base, Scale, Extra, Minus);
           end;
        end if;
  
        --  Normal case
  
        P := Str'First;
!       V := Scan_Raw_Real (Str, P'Access, Str'Last, Base, Scale, Extra, Minus);
        Scan_Trailing_Blanks (Str, P);
  
        return V;
--- 701,714 ----
           declare
              subtype NT is String (1 .. Str'Length);
           begin
!             return Value_Raw_Real (NT (Str), Base, Scale, Extra2, Minus);
           end;
        end if;
  
        --  Normal case
  
        P := Str'First;
!       V := Scan_Raw_Real (Str, P'Access, Str'Last, Base, Scale, Extra2, Minus);
        Scan_Trailing_Blanks (Str, P);
  
        return V;
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-valuer.ads gcc-16-20250706/gcc/ada/libgnat/s-valuer.ads
*** gcc-16-20250629/gcc/ada/libgnat/s-valuer.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-valuer.ads	Sun Jul  6 22:32:09 2025
*************** generic
*** 45,53 ****
     Precision_Limit : Uns;
     --  Precision limit for each part of the value
  
-    Round : Boolean;
-    --  If Parts = 1, True if the extra digit must be rounded
- 
  package System.Value_R is
     pragma Preelaborate;
  
--- 45,50 ----
*************** package System.Value_R is
*** 61,73 ****
     --  The value split into parts
  
     function Scan_Raw_Real
!      (Str   : String;
!       Ptr   : not null access Integer;
!       Max   : Integer;
!       Base  : out Unsigned;
!       Scale : out Scale_Array;
!       Extra : out Unsigned;
!       Minus : out Boolean) return Value_Array;
     --  This function scans the string starting at Str (Ptr.all) for a valid
     --  real literal according to the syntax described in (RM 3.5(43)). The
     --  substring scanned extends no further than Str (Max). There are three
--- 58,70 ----
     --  The value split into parts
  
     function Scan_Raw_Real
!      (Str    : String;
!       Ptr    : not null access Integer;
!       Max    : Integer;
!       Base   : out Unsigned;
!       Scale  : out Scale_Array;
!       Extra2 : out Unsigned;
!       Minus  : out Boolean) return Value_Array;
     --  This function scans the string starting at Str (Ptr.all) for a valid
     --  real literal according to the syntax described in (RM 3.5(43)). The
     --  substring scanned extends no further than Str (Max). There are three
*************** package System.Value_R is
*** 75,91 ****
     --
     --  If a valid real is found after scanning past any initial spaces, then
     --  Ptr.all is updated past the last character of the real (but trailing
!    --  spaces are not scanned out) and the Base, Scale, Extra and Minus out
     --  parameters are set; if Val is the result of the call, then the real
     --  represented by the literal is equal to
     --
!    --    (Val (1) * Base + Extra) * (Base ** (Scale (1) - 1))
     --
     --  when Parts = 1 and
     --
     --    Sum [Val (N) * (Base ** Scale (N)), N in 1 .. Parts]
     --
!    --  when Parts > 1, with the negative sign if Minus is true.
     --
     --  If no valid real is found, then Ptr.all points either to an initial
     --  non-blank character, or to Max + 1 if the field is all spaces and the
--- 72,89 ----
     --
     --  If a valid real is found after scanning past any initial spaces, then
     --  Ptr.all is updated past the last character of the real (but trailing
!    --  spaces are not scanned out) and the Base, Scale, Extra2 and Minus out
     --  parameters are set; if Val is the result of the call, then the real
     --  represented by the literal is equal to
     --
!    --    (Val (1) * Base ** 2 + Extra2) * (Base ** (Scale (1) - 2))
     --
     --  when Parts = 1 and
     --
     --    Sum [Val (N) * (Base ** Scale (N)), N in 1 .. Parts]
     --
!    --  when Parts > 1, with the negative sign if Minus is true. Note that
!    --  Val (1) cannot be zero unless Val is entirely filled with zero.
     --
     --  If no valid real is found, then Ptr.all points either to an initial
     --  non-blank character, or to Max + 1 if the field is all spaces and the
*************** package System.Value_R is
*** 108,118 ****
     --  case is not supported. Most such cases are eliminated by the caller.
  
     function Value_Raw_Real
!      (Str   : String;
!       Base  : out Unsigned;
!       Scale : out Scale_Array;
!       Extra : out Unsigned;
!       Minus : out Boolean) return Value_Array;
     --  Used in computing X'Value (Str) where X is a real type. Str is the
     --  string argument of the attribute. Constraint_Error is raised if the
     --  string is malformed.
--- 106,116 ----
     --  case is not supported. Most such cases are eliminated by the caller.
  
     function Value_Raw_Real
!      (Str    : String;
!       Base   : out Unsigned;
!       Scale  : out Scale_Array;
!       Extra2 : out Unsigned;
!       Minus  : out Boolean) return Value_Array;
     --  Used in computing X'Value (Str) where X is a real type. Str is the
     --  string argument of the attribute. Constraint_Error is raised if the
     --  string is malformed.
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/s-valuti.adb gcc-16-20250706/gcc/ada/libgnat/s-valuti.adb
*** gcc-16-20250629/gcc/ada/libgnat/s-valuti.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/s-valuti.adb	Sun Jul  6 22:32:09 2025
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with System.Case_Util; use System.Case_Util;
  
  package body System.Val_Util
    with SPARK_Mode
--- 29,35 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with System.Case_Util_NSS; use System.Case_Util_NSS;
  
  package body System.Val_Util
    with SPARK_Mode
diff -Nrcpad gcc-16-20250629/gcc/ada/libgnat/system-linux-loongarch.ads gcc-16-20250706/gcc/ada/libgnat/system-linux-loongarch.ads
*** gcc-16-20250629/gcc/ada/libgnat/system-linux-loongarch.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/libgnat/system-linux-loongarch.ads	Sun Jul  6 22:32:09 2025
*************** private
*** 139,145 ****
     Always_Compatible_Rep     : constant Boolean := False;
     Suppress_Standard_Library : constant Boolean := False;
     Use_Ada_Main_Program_Name : constant Boolean := False;
-    Frontend_Exceptions       : constant Boolean := False;
     ZCX_By_Default            : constant Boolean := True;
  
  end System;
--- 139,144 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/mutably_tagged.adb gcc-16-20250706/gcc/ada/mutably_tagged.adb
*** gcc-16-20250629/gcc/ada/mutably_tagged.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/mutably_tagged.adb	Sun Jul  6 22:32:10 2025
*************** with Sinfo.Nodes;    use Sinfo.Nodes;
*** 40,45 ****
--- 40,46 ----
  with Sinfo.Utils;    use Sinfo.Utils;
  with Stringt;        use Stringt;
  with Tbuild;         use Tbuild;
+ with Uintp;          use Uintp;
  
  package body Mutably_Tagged is
  
*************** package body Mutably_Tagged is
*** 205,225 ****
        Mut_Tag_Typ : Entity_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (New_Typ);
     begin
!       --  Generate a string literal for New_Typ's name which is needed for
!       --  printing within the Compile_Time_Error.
  
        Get_Decoded_Name_String (Chars (New_Typ));
        Set_Casing (Mixed_Case);
  
-       --  Build a pragma Compile_Time_Error to force the backend to
-       --  preform appropriate sizing checks.
- 
-       --  Generate:
-       --    pragma Compile_Time_Error
-       --             (New_Typ'Size < Mut_Tag_Typ'Size,
-       --              "class size for by-reference type ""New_Typ"" too small")
- 
        return
          Make_Pragma (Loc,
            Chars                        => Name_Compile_Time_Error,
--- 206,246 ----
        Mut_Tag_Typ : Entity_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (New_Typ);
+ 
+       CW_Size : constant Uint := RM_Size (Mut_Tag_Typ);
+ 
+       function To_Mixed_Case (S : String) return String;
+       --  convert string to mixed case
+ 
+       -------------------
+       -- To_Mixed_Case --
+       -------------------
+ 
+       function To_Mixed_Case (S : String) return String is
+          Buf : Bounded_String;
+       begin
+          Append (Buf, S);
+          Set_Casing (Buf, Mixed_Case);
+          return +Buf;
+       end To_Mixed_Case;
+ 
+    --  Start of processing for Make_CW_Size_Compile_Check
+ 
     begin
!       --  Build a Compile_Time_Error pragma in order to defer the
!       --  (compile-time) size check until after the back end has
!       --  determined sizes.
!       --
!       --  It would be nice if we could somehow include the value of
!       --  New_Type'Size in the error message, but it is not clear how to
!       --  accomplish that with the current FE/BE interfaces.
! 
!       --  Get New_Typ's name (in mixed case) into the name buffer;
!       --  this is used immediately afterwards in the Make_Pragma call.
  
        Get_Decoded_Name_String (Chars (New_Typ));
        Set_Casing (Mixed_Case);
  
        return
          Make_Pragma (Loc,
            Chars                        => Name_Compile_Time_Error,
*************** package body Mutably_Tagged is
*** 233,251 ****
                        Prefix         =>
                          New_Occurrence_Of (New_Typ, Loc)),
                    Right_Opnd =>
!                     Make_Integer_Literal (Loc,
!                       RM_Size (Mut_Tag_Typ))))),
               Make_Pragma_Argument_Association (Loc,
                 Expression =>
- 
-                  --  Is it possible to print the size of New_Typ via
-                  --  Validate_Compile_Time_Warning_Or_Error after the back-end
-                  --  has run to generate the error message manually ???
- 
                   Make_String_Literal (Loc,
!                    "class size for by-reference type """
!                    & To_String (String_From_Name_Buffer)
!                    & """ too small"))));
     end Make_CW_Size_Compile_Check;
  
     ------------------------------------
--- 254,271 ----
                        Prefix         =>
                          New_Occurrence_Of (New_Typ, Loc)),
                    Right_Opnd =>
!                     Make_Integer_Literal (Loc, CW_Size)))),
               Make_Pragma_Argument_Association (Loc,
                 Expression =>
                   Make_String_Literal (Loc,
!                    To_String (String_From_Name_Buffer)
!                      & "'Size exceeds "
!                      & To_Mixed_Case (
!                          To_String (Fully_Qualified_Name_String
!                                      (Find_Specific_Type (Mut_Tag_Typ),
!                                       Append_NUL => False)))
!                      & "'Size'Class limit of "
!                      & UI_Image (CW_Size)))));
     end Make_CW_Size_Compile_Check;
  
     ------------------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/par-ch5.adb gcc-16-20250706/gcc/ada/par-ch5.adb
*** gcc-16-20250629/gcc/ada/par-ch5.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/par-ch5.adb	Sun Jul  6 22:32:10 2025
*************** package body Ch5 is
*** 32,37 ****
--- 32,38 ----
  
     function P_Case_Statement                     return Node_Id;
     function P_Case_Statement_Alternative         return Node_Id;
+    function P_Continue_Statement                 return Node_Id;
     function P_Exit_Statement                     return Node_Id;
     function P_Goto_Statement                     return Node_Id;
     function P_If_Statement                       return Node_Id;
*************** package body Ch5 is
*** 76,81 ****
--- 77,85 ----
     procedure Then_Scan;
     --  Scan past THEN token, testing for illegal junk after it
  
+    procedure Parse_Loop_Flow_Statement (N : N_Loop_Flow_Statement_Id);
+    --  Common processing for Parse_Continue_Statement and Parse_Exit_Statement.
+ 
     ---------------------------------
     -- 5.1  Sequence of Statements --
     ---------------------------------
*************** package body Ch5 is
*** 511,516 ****
--- 515,527 ----
                         P_Assignment_Statement (Id_Node));
                       Statement_Required := False;
  
+                   elsif Block_Label = Name_Continue
+                     and then Token in Tok_Semicolon | Tok_When | Tok_Identifier
+                   then
+                      Restore_Scan_State (Scan_State_Label); -- to Id
+                      Append_To (Statement_List, P_Continue_Statement);
+                      Statement_Required := False;
+ 
                    --  Check common case of procedure call, another case that
                    --  we want to speed up as much as possible.
  
*************** package body Ch5 is
*** 1995,2040 ****
  
     begin
        Exit_Node := New_Node (N_Exit_Statement, Token_Ptr);
-       Scan; -- past EXIT
- 
-       if Token = Tok_Identifier then
-          Set_Name (Exit_Node, P_Qualified_Simple_Name);
- 
-       elsif Style_Check then
-          --  This EXIT has no name, so check that
-          --  the innermost loop is unnamed too.
- 
-          Check_No_Exit_Name :
-          for J in reverse 1 .. Scope.Last loop
-             if Scopes (J).Etyp = E_Loop then
-                if Present (Scopes (J).Labl)
-                  and then Comes_From_Source (Scopes (J).Labl)
-                then
-                   --  Innermost loop in fact had a name, style check fails
- 
-                   Style.No_Exit_Name (Scopes (J).Labl);
-                end if;
  
!                exit Check_No_Exit_Name;
!             end if;
!          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);
  
!       --  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 (Exit_Node, P_Expression_No_Right_Paren);
!       end if;
  
!       TF_Semicolon;
!       return Exit_Node;
!    end P_Exit_Statement;
  
     -------------------------
     -- 5.8  Goto Statement --
--- 2006,2029 ----
  
     begin
        Exit_Node := New_Node (N_Exit_Statement, Token_Ptr);
  
!       Parse_Loop_Flow_Statement (Exit_Node);
  
!       return Exit_Node;
!    end P_Exit_Statement;
  
!    --------------------------------------
!    -- GNAT-specific Continue Statement --
!    --------------------------------------
  
!    function P_Continue_Statement return Node_Id is
!       Continue_Node : constant Node_Id :=
!         New_Node (N_Continue_Statement, Token_Ptr);
!    begin
!       Parse_Loop_Flow_Statement (Continue_Node);
  
!       return Continue_Node;
!    end P_Continue_Statement;
  
     -------------------------
     -- 5.8  Goto Statement --
*************** package body Ch5 is
*** 2395,2398 ****
--- 2384,2431 ----
        end if;
     end Then_Scan;
  
+    -------------------------------
+    -- Parse_Loop_Flow_Statement --
+    -------------------------------
+ 
+    procedure Parse_Loop_Flow_Statement (N : N_Loop_Flow_Statement_Id) is
+    begin
+       Scan; -- past EXIT or CONTINUE
+ 
+       if Token = Tok_Identifier then
+          Set_Name (N, P_Qualified_Simple_Name);
+       elsif Style_Check and then Nkind (N) = N_Exit_Statement then
+          --  This statement has no name, so check that
+          --  the innermost loop is unnamed too.
+ 
+          Check_No_Exit_Name :
+          for J in reverse 1 .. Scope.Last loop
+             if Scopes (J).Etyp = E_Loop then
+                if Present (Scopes (J).Labl)
+                  and then Comes_From_Source (Scopes (J).Labl)
+                then
+                   --  Innermost loop in fact had a name, style check fails
+ 
+                   Style.No_Exit_Name (Scopes (J).Labl);
+                end if;
+ 
+                exit Check_No_Exit_Name;
+             end if;
+          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 (N, P_Condition);
+ 
+       --  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 (N, P_Expression_No_Right_Paren);
+       end if;
+ 
+       TF_Semicolon;
+    end Parse_Loop_Flow_Statement;
  end Ch5;
diff -Nrcpad gcc-16-20250629/gcc/ada/par-endh.adb gcc-16-20250706/gcc/ada/par-endh.adb
*** gcc-16-20250629/gcc/ada/par-endh.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/par-endh.adb	Sun Jul  6 22:32:10 2025
*************** package body Endh is
*** 300,306 ****
              else
                 End_Labl := Scopes (Scope.Last).Labl;
  
!                if End_Labl > Empty_Or_Error then
  
                    --  The task here is to construct a designator from the
                    --  opening label, with the components all marked as not
--- 300,306 ----
              else
                 End_Labl := Scopes (Scope.Last).Labl;
  
!                if End_Labl not in Empty | Error then
  
                    --  The task here is to construct a designator from the
                    --  opening label, with the components all marked as not
*************** package body Endh is
*** 658,665 ****
              Scan; -- past junk token on same line
           end loop;
        end if;
- 
-       return;
     end End_Skip;
  
     --------------------
--- 658,663 ----
*************** package body Endh is
*** 921,927 ****
  
        --  Suppress message if error was posted on opening label
  
!       if Error_Msg_Node_1 > Empty_Or_Error
          and then Error_Posted (Error_Msg_Node_1)
        then
           return;
--- 919,925 ----
  
        --  Suppress message if error was posted on opening label
  
!       if Error_Msg_Node_1 not in Empty | Error
          and then Error_Posted (Error_Msg_Node_1)
        then
           return;
diff -Nrcpad gcc-16-20250629/gcc/ada/par-tchk.adb gcc-16-20250706/gcc/ada/par-tchk.adb
*** gcc-16-20250629/gcc/ada/par-tchk.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/par-tchk.adb	Sun Jul  6 22:32:10 2025
*************** package body Tchk is
*** 513,519 ****
  
        Error_Msg_AP -- CODEFIX
          ("|missing "";""");
-       return;
     end T_Semicolon;
  
     ------------
--- 513,518 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/par-util.adb gcc-16-20250706/gcc/ada/par-util.adb
*** gcc-16-20250629/gcc/ada/par-util.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/par-util.adb	Sun Jul  6 22:32:10 2025
*************** package body Util is
*** 176,189 ****
     procedure Check_Future_Keyword is
     begin
        --  Ada 2005 (AI-284): Compiling in Ada 95 mode we warn that INTERFACE,
!       --  OVERRIDING, and SYNCHRONIZED are new reserved words.
  
        if Ada_Version = Ada_95
          and then Warn_On_Ada_2005_Compatibility
        then
!          if Token_Name in Name_Overriding | Name_Synchronized
!            or else (Token_Name = Name_Interface
!                      and then Prev_Token /= Tok_Pragma)
           then
              Error_Msg_N ("& is a reserved word in Ada 2005?y?", Token_Node);
           end if;
--- 176,192 ----
     procedure Check_Future_Keyword is
     begin
        --  Ada 2005 (AI-284): Compiling in Ada 95 mode we warn that INTERFACE,
!       --  OVERRIDING, and SYNCHRONIZED are new reserved words. We make an
!       --  exception if INTERFACE is used in the context of the GNAT-specific
!       --  pragma Interface, since we accept that pragma regardless of the Ada
!       --  version.
  
        if Ada_Version = Ada_95
          and then Warn_On_Ada_2005_Compatibility
        then
!          if Token_Name in Ada_2005_Reserved_Words
!            and then not (Token_Name = Name_Interface
!                          and then Prev_Token = Tok_Pragma)
           then
              Error_Msg_N ("& is a reserved word in Ada 2005?y?", Token_Node);
           end if;
*************** package body Util is
*** 194,206 ****
        if Ada_Version in Ada_95 .. Ada_2005
          and then Warn_On_Ada_2012_Compatibility
        then
!          if Token_Name = Name_Some then
              Error_Msg_N ("& is a reserved word in Ada 2012?y?", Token_Node);
           end if;
        end if;
  
        if Ada_Version < Ada_With_All_Extensions then
!          if Token_Name = Name_Finally then
              Error_Msg_N
                ("& is a reserved word with all extensions enabled?",
                 Token_Node);
--- 197,209 ----
        if Ada_Version in Ada_95 .. Ada_2005
          and then Warn_On_Ada_2012_Compatibility
        then
!          if Token_Name in Ada_2012_Reserved_Words then
              Error_Msg_N ("& is a reserved word in Ada 2012?y?", Token_Node);
           end if;
        end if;
  
        if Ada_Version < Ada_With_All_Extensions then
!          if Token_Name in GNAT_Extensions_Reserved_Words then
              Error_Msg_N
                ("& is a reserved word with all extensions enabled?",
                 Token_Node);
diff -Nrcpad gcc-16-20250629/gcc/ada/prepcomp.adb gcc-16-20250706/gcc/ada/prepcomp.adb
*** gcc-16-20250629/gcc/ada/prepcomp.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/prepcomp.adb	Sun Jul  6 22:32:10 2025
*************** package body Prepcomp is
*** 545,551 ****
  
        if Total_Errors_Detected > T then
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages;
           Fail ("errors found in preprocessing data file """
                 & Get_Name_String (N) & """");
        end if;
--- 545,551 ----
  
        if Total_Errors_Detected > T then
           Errout.Finalize (Last_Call => True);
!          Errout.Output_Messages (E_Fatal);
           Fail ("errors found in preprocessing data file """
                 & Get_Name_String (N) & """");
        end if;
*************** package body Prepcomp is
*** 668,674 ****
  
              if T /= Total_Errors_Detected then
                 Errout.Finalize (Last_Call => True);
!                Errout.Output_Messages;
                 Fail ("errors found in definition file """
                       & Get_Name_String (N)
                       & """");
--- 668,674 ----
  
              if T /= Total_Errors_Detected then
                 Errout.Finalize (Last_Call => True);
!                Errout.Output_Messages (E_Fatal);
                 Fail ("errors found in definition file """
                       & Get_Name_String (N)
                       & """");
diff -Nrcpad gcc-16-20250629/gcc/ada/repinfo.adb gcc-16-20250706/gcc/ada/repinfo.adb
*** gcc-16-20250629/gcc/ada/repinfo.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/repinfo.adb	Sun Jul  6 22:32:10 2025
*************** package body Repinfo is
*** 533,543 ****
                       List_Type_Info (E);
                    end if;
  
!                --  Note that formals are not annotated so we skip them here
  
                 elsif Ekind (E) in E_Constant
                                  | E_Loop_Parameter
                                  | E_Variable
                 then
                    if List_Representation_Info >= 2 then
                       List_Object_Info (E);
--- 533,545 ----
                       List_Type_Info (E);
                    end if;
  
!                --  Formals and renamings are not annotated, so we skip them
!                --  here.
  
                 elsif Ekind (E) in E_Constant
                                  | E_Loop_Parameter
                                  | E_Variable
+                  and then Nkind (Parent (E)) /= N_Object_Renaming_Declaration
                 then
                    if List_Representation_Info >= 2 then
                       List_Object_Info (E);
*************** package body Repinfo is
*** 1237,1251 ****
           function First_Comp_Or_Discr (Ent : Entity_Id) return Entity_Id is
  
              function Is_Placed_Before (C1, C2 : Entity_Id) return Boolean;
!             --  Return True if component C1 is placed before component C2
  
              ----------------------
              -- Is_Placed_Before --
              ----------------------
  
              function Is_Placed_Before (C1, C2 : Entity_Id) return Boolean is
              begin
!                return Known_Static_Component_Bit_Offset (C1)
                   and then Known_Static_Component_Bit_Offset (C2)
                   and then
                     Component_Bit_Offset (C1) < Component_Bit_Offset (C2);
--- 1239,1263 ----
           function First_Comp_Or_Discr (Ent : Entity_Id) return Entity_Id is
  
              function Is_Placed_Before (C1, C2 : Entity_Id) return Boolean;
!             --  Return True if components C1 and C2 are in the same component
!             --  list and component C1 is placed before component C2 in there.
  
              ----------------------
              -- Is_Placed_Before --
              ----------------------
  
              function Is_Placed_Before (C1, C2 : Entity_Id) return Boolean is
+                L1 : constant Node_Id := Parent (Parent (C1));
+                L2 : constant Node_Id := Parent (Parent (C2));
+ 
              begin
!                --  Discriminants and top-level components are considered to be
!                --  in the same list, although this is not syntactically true.
! 
!                return (L1 = L2
!                         or else (Nkind (Parent (L1)) /= N_Variant
!                                   and then Nkind (Parent (L2)) /= N_Variant))
!                  and then Known_Static_Component_Bit_Offset (C1)
                   and then Known_Static_Component_Bit_Offset (C2)
                   and then
                     Component_Bit_Offset (C1) < Component_Bit_Offset (C2);
diff -Nrcpad gcc-16-20250629/gcc/ada/sem.adb gcc-16-20250706/gcc/ada/sem.adb
*** gcc-16-20250629/gcc/ada/sem.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem is
*** 192,197 ****
--- 192,200 ----
           when N_Conditional_Entry_Call =>
              Analyze_Conditional_Entry_Call (N);
  
+          when N_Continue_Statement =>
+             Analyze_Continue_Statement (N);
+ 
           when N_Delay_Alternative =>
              Analyze_Delay_Alternative (N);
  
*************** package body Sem is
*** 1398,1404 ****
             Prev     => Global_Suppress_Stack_Top,
             Next     => Suppress_Stack_Entries);
        Suppress_Stack_Entries := Global_Suppress_Stack_Top;
-       return;
     end Push_Global_Suppress_Stack_Entry;
  
     -------------------------------------
--- 1401,1406 ----
*************** package body Sem is
*** 1419,1426 ****
             Prev     => Local_Suppress_Stack_Top,
             Next     => Suppress_Stack_Entries);
        Suppress_Stack_Entries := Local_Suppress_Stack_Top;
- 
-       return;
     end Push_Local_Suppress_Stack_Entry;
  
     ---------------
--- 1421,1426 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_aggr.adb gcc-16-20250706/gcc/ada/sem_aggr.adb
*** gcc-16-20250629/gcc/ada/sem_aggr.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_aggr.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Aggr is
*** 6355,6361 ****
                 & "has unknown discriminants", N, Typ);
           end if;
  
!          if Has_Unknown_Discriminants (Typ)
             and then Present (Underlying_Record_View (Typ))
           then
              Discrim := First_Discriminant (Underlying_Record_View (Typ));
--- 6355,6366 ----
                 & "has unknown discriminants", N, Typ);
           end if;
  
!          --  Mutably tagged class-wide types do not have discriminants;
!          --  however, all class-wide types are considered to have unknown
!          --  discriminants.
! 
!          if not Is_Mutably_Tagged_Type (Typ)
!            and then Has_Unknown_Discriminants (Typ)
             and then Present (Underlying_Record_View (Typ))
           then
              Discrim := First_Discriminant (Underlying_Record_View (Typ));
*************** package body Sem_Aggr is
*** 6427,6433 ****
        --  STEP 4: Set the Etype of the record aggregate
  
        if Has_Discriminants (Typ)
!         or else (Has_Unknown_Discriminants (Typ)
                    and then Present (Underlying_Record_View (Typ)))
        then
           Build_Constrained_Itype (N, Typ, New_Assoc_List);
--- 6432,6444 ----
        --  STEP 4: Set the Etype of the record aggregate
  
        if Has_Discriminants (Typ)
! 
!          --  Handle types with unknown discriminants, excluding mutably tagged
!          --  class-wide types because, although they do not have discriminants,
!          --  all class-wide types are considered to have unknown discriminants.
! 
!         or else (not Is_Mutably_Tagged_Type (Typ)
!                   and then Has_Unknown_Discriminants (Typ)
                    and then Present (Underlying_Record_View (Typ)))
        then
           Build_Constrained_Itype (N, Typ, New_Assoc_List);
*************** package body Sem_Aggr is
*** 6598,6604 ****
              if Null_Present (Record_Def) then
                 null;
  
!             elsif not Has_Unknown_Discriminants (Typ) then
                 Gather_Components
                   (Base_Type (Typ),
                    Component_List (Record_Def),
--- 6609,6621 ----
              if Null_Present (Record_Def) then
                 null;
  
!             --  Explicitly add here mutably class-wide types because they do
!             --  not have discriminants; however, all class-wide types are
!             --  considered to have unknown discriminants.
! 
!             elsif not Has_Unknown_Discriminants (Typ)
!               or else Is_Mutably_Tagged_Type (Typ)
!             then
                 Gather_Components
                   (Base_Type (Typ),
                    Component_List (Record_Def),
*************** package body Sem_Aggr is
*** 6784,6789 ****
--- 6801,6811 ----
                    Set_Has_Self_Reference (N);
  
                 elsif Needs_Simple_Initialization (Ctyp)
+ 
+                   --  Mutably tagged class-wide type components are initialized
+                   --  by the expander calling their IP subprogram.
+ 
+                  or else Is_Mutably_Tagged_CW_Equivalent_Type (Ctyp)
                   or else Has_Non_Null_Base_Init_Proc (Ctyp)
                   or else not Expander_Active
                 then
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_attr.adb gcc-16-20250706/gcc/ada/sem_attr.adb
*** gcc-16-20250629/gcc/ada/sem_attr.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_attr.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Attr is
*** 1448,1456 ****
                 null;
  
              --  Attribute 'Result is allowed to appear in aspect
!             --  Relaxed_Initialization (SPARK RM 6.10).
  
!             elsif Prag_Nam = Name_Relaxed_Initialization
                and then Aname = Name_Result
              then
                 null;
--- 1448,1457 ----
                 null;
  
              --  Attribute 'Result is allowed to appear in aspect
!             --  Relaxed_Initialization (SPARK RM 6.10) and Potentially_Invalid.
  
!             elsif (Prag_Nam = Name_Relaxed_Initialization
!                      or else Prag_Nam = Name_Potentially_Invalid)
                and then Aname = Name_Result
              then
                 null;
*************** package body Sem_Attr is
*** 7766,7772 ****
        when Bad_Attribute =>
           Set_Analyzed (N);
           Set_Etype (N, Any_Type);
-          return;
     end Analyze_Attribute;
  
     --------------------
--- 7767,7772 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_aux.ads gcc-16-20250706/gcc/ada/sem_aux.ads
*** gcc-16-20250629/gcc/ada/sem_aux.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_aux.ads	Sun Jul  6 22:32:10 2025
*************** package Sem_Aux is
*** 105,111 ****
     --  this is equivalent to First_Entity. The exception arises for tagged
     --  types, where the tag itself is prepended to the front of the entity
     --  chain, so the First_Discriminant function steps past the tag if it is
!    --  present.  When called on a private type with unknown discriminants, the
     --  function always returns Empty.
  
     --  WARNING: There is a matching C declaration of this subprogram in fe.h
--- 105,111 ----
     --  this is equivalent to First_Entity. The exception arises for tagged
     --  types, where the tag itself is prepended to the front of the entity
     --  chain, so the First_Discriminant function steps past the tag if it is
!    --  present. When called on a private type with unknown discriminants, the
     --  function always returns Empty.
  
     --  WARNING: There is a matching C declaration of this subprogram in fe.h
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch10.adb gcc-16-20250706/gcc/ada/sem_ch10.adb
*** gcc-16-20250629/gcc/ada/sem_ch10.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch10.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch10 is
*** 1491,1496 ****
--- 1491,1500 ----
                  --  No checks required if no separate spec
  
                  or else Acts_As_Spec (N)
+ 
+                 --  No checked needed for ignored ghost units
+ 
+                 or else Is_Ignored_Ghost_Entity (Spec_Id)
                )
              then
                 --  This is a case where we only need the entity for checking to
*************** package body Sem_Ch10 is
*** 3295,3301 ****
              --  the renamed unit, and the renaming declaration itself has not
              --  been analyzed.
  
!             Analyze (Parent (Parent (Entity (Pref))));
              pragma Assert (Renamed_Entity (Entity (Pref)) = Par_Name);
              Par_Name := Entity (Pref);
           end if;
--- 3299,3305 ----
              --  the renamed unit, and the renaming declaration itself has not
              --  been analyzed.
  
!             Semantics (Parent (Parent (Entity (Pref))));
              pragma Assert (Renamed_Entity (Entity (Pref)) = Par_Name);
              Par_Name := Entity (Pref);
           end if;
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch12.adb gcc-16-20250706/gcc/ada/sem_ch12.adb
*** gcc-16-20250629/gcc/ada/sem_ch12.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch12.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch12 is
*** 3171,3177 ****
           end if;
        end if;
  
!       if Subtype_Mark (Def) <= Empty_Or_Error then
           pragma Assert (Serious_Errors_Detected > 0);
           --  avoid passing bad argument to Entity
           return;
--- 3171,3177 ----
           end if;
        end if;
  
!       if Subtype_Mark (Def) in Empty | Error then
           pragma Assert (Serious_Errors_Detected > 0);
           --  avoid passing bad argument to Entity
           return;
*************** package body Sem_Ch12 is
*** 6704,6709 ****
--- 6704,6710 ----
  
              elsif Nkind (Parent (N)) = N_Compilation_Unit then
                 Rewrite (N, Unit (Parent (N)));
+                Move_Aspects (From => Original_Node (N), To => N);
                 Set_Unit (Parent (N), N);
              end if;
  
*************** package body Sem_Ch12 is
*** 6712,6717 ****
--- 6713,6719 ----
  
           elsif Nkind (Parent (N)) = N_Compilation_Unit then
              Rewrite (N, Unit (Parent (N)));
+             Move_Aspects (From => Original_Node (N), To => N);
              Set_Unit (Parent (N), N);
           end if;
  
*************** package body Sem_Ch12 is
*** 11129,11141 ****
        begin
           --  If this parent of the child instance is a top-level unit,
           --  then record the unit and its visibility for later resetting in
!          --  Remove_Parent. We exclude units that are generic instances, as we
!          --  only want to record this information for the ultimate top-level
!          --  noninstance parent (is that always correct???).
  
!          if Scope (Par) = Standard_Standard
!            and then not Is_Generic_Instance (Par)
!          then
              Parent_Unit_Visible := Is_Immediately_Visible (Par);
              Instance_Parent_Unit := Par;
           end if;
--- 11131,11139 ----
        begin
           --  If this parent of the child instance is a top-level unit,
           --  then record the unit and its visibility for later resetting in
!          --  Remove_Parent.
  
!          if Scope (Par) = Standard_Standard then
              Parent_Unit_Visible := Is_Immediately_Visible (Par);
              Instance_Parent_Unit := Par;
           end if;
*************** package body Sem_Ch12 is
*** 16336,16374 ****
                    Install_Private_Declarations (P);
                 end if;
  
!             --  If the ultimate parent is a top-level unit recorded in
!             --  Instance_Parent_Unit, then reset its visibility to what it was
!             --  before instantiation. (It's not clear what the purpose is of
!             --  testing whether Scope (P) is In_Open_Scopes, but that test was
!             --  present before the ultimate parent test was added.???)
  
!             elsif not In_Open_Scopes (Scope (P))
!               or else (P = Instance_Parent_Unit
!                         and then not Parent_Unit_Visible)
!             then
!                Set_Is_Immediately_Visible (P, False);
  
!             --  If the current scope is itself an instantiation of a generic
!             --  nested within P, and we are in the private part of body of this
!             --  instantiation, restore the full views of P, that were removed
!             --  in End_Package_Scope above. This obscure case can occur when a
!             --  subunit of a generic contains an instance of a child unit of
!             --  its generic parent unit.
  
!             elsif S = Current_Scope and then Is_Generic_Instance (S)
!               and then (In_Package_Body (S) or else In_Private_Part (S))
!             then
!                declare
!                   Par : constant Entity_Id :=
!                           Generic_Parent (Package_Specification (S));
!                begin
!                   if Present (Par)
!                     and then P = Scope (Par)
!                   then
!                      Set_In_Private_Part (P);
!                      Install_Private_Declarations (P);
!                   end if;
!                end;
              end if;
           end loop;
  
--- 16334,16376 ----
                    Install_Private_Declarations (P);
                 end if;
  
!             else
!                --  If the ultimate parent is a top-level unit recorded in
!                --  Instance_Parent_Unit, then reset its visibility to what
!                --  it was before instantiation. (It's not clear what the
!                --  purpose is of testing whether Scope (P) is In_Open_Scopes,
!                --  but that test was present before the ultimate parent test
!                --  was added.???)
  
!                if not In_Open_Scopes (Scope (P))
!                  or else (P = Instance_Parent_Unit
!                            and then not Parent_Unit_Visible)
!                then
!                   Set_Is_Immediately_Visible (P, False);
!                end if;
  
!                --  If the current scope is itself an instantiation of a generic
!                --  nested within P, and we are in the private part of body of
!                --  the instantiation, restore the full views of P, which were
!                --  removed in End_Package_Scope above. This obscure case can
!                --  occur when a subunit of a generic contains an instance of
!                --  a child unit of its generic parent unit.
  
!                if S = Current_Scope and then Is_Generic_Instance (S)
!                  and then (In_Package_Body (S) or else In_Private_Part (S))
!                then
!                   declare
!                      Par : constant Entity_Id :=
!                              Generic_Parent (Package_Specification (S));
!                   begin
!                      if Present (Par)
!                        and then P = Scope (Par)
!                      then
!                         Set_In_Private_Part (P);
!                         Install_Private_Declarations (P);
!                      end if;
!                   end;
!                end if;
              end if;
           end loop;
  
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch13.adb gcc-16-20250706/gcc/ada/sem_ch13.adb
*** gcc-16-20250629/gcc/ada/sem_ch13.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch13.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch13 is
*** 1930,1935 ****
--- 1930,1938 ----
              procedure Analyze_Aspect_Implicit_Dereference;
              --  Perform analysis of the Implicit_Dereference aspects
  
+             procedure Analyze_Aspect_Potentially_Invalid;
+             --  Perform analysis of aspect Potentially_Invalid
+ 
              procedure Analyze_Aspect_Relaxed_Initialization;
              --  Perform analysis of aspect Relaxed_Initialization
  
*************** package body Sem_Ch13 is
*** 2297,2302 ****
--- 2300,2566 ----
  
              end Analyze_Aspect_Implicit_Dereference;
  
+             ----------------------------------------
+             -- Analyze_Aspect_Potentially_Invalid --
+             ----------------------------------------
+ 
+             procedure Analyze_Aspect_Potentially_Invalid is
+                procedure Analyze_Aspect_Parameter
+                  (Subp_Id : Entity_Id;
+                   Param   : Node_Id;
+                   Seen    : in out Elist_Id);
+                --  Analyze parameter that appears in the expression of the
+                --  aspect Potentially_Invalid.
+ 
+                ------------------------------
+                -- Analyze_Aspect_Parameter --
+                ------------------------------
+ 
+                procedure Analyze_Aspect_Parameter
+                  (Subp_Id : Entity_Id;
+                   Param   : Node_Id;
+                   Seen    : in out Elist_Id)
+                is
+                begin
+                   --  Set name of the aspect for error messages
+                   Error_Msg_Name_1 := Nam;
+ 
+                   --  The potentially invalid parameter is a formal parameter
+ 
+                   if Nkind (Param) in N_Identifier | N_Expanded_Name then
+                      Analyze (Param);
+ 
+                      declare
+                         Item : constant Entity_Id := Entity (Param);
+                      begin
+                         --  It must be a formal of the analyzed subprogram
+ 
+                         if Scope (Item) = Subp_Id then
+ 
+                            pragma Assert (Is_Formal (Item));
+ 
+                            --  It must not have scalar type
+ 
+                            if Is_Scalar_Type (Underlying_Type (Etype (Item)))
+                            then
+                               Error_Msg_N ("illegal aspect % item", Param);
+                               Error_Msg_N
+                                 ("\item must not have scalar type", Param);
+                            end if;
+ 
+                            --  Detect duplicated items
+ 
+                            if Contains (Seen, Item) then
+                               Error_Msg_N ("duplicate aspect % item", Param);
+                            else
+                               Append_New_Elmt (Item, Seen);
+                            end if;
+                         else
+                            Error_Msg_N ("illegal aspect % item", Param);
+                         end if;
+                      end;
+ 
+                   --  The potentially invalid parameter is the function's
+                   --  Result attribute.
+ 
+                   elsif Is_Attribute_Result (Param) then
+                      Analyze (Param);
+ 
+                      declare
+                         Pref : constant Node_Id := Prefix (Param);
+                      begin
+                         if Present (Pref)
+                           and then
+                             Nkind (Pref) in N_Identifier | N_Expanded_Name
+                           and then
+                             Entity (Pref) = Subp_Id
+                         then
+                            --  Detect duplicated items
+ 
+                            if Contains (Seen, Subp_Id) then
+                               Error_Msg_N ("duplicate aspect % item", Param);
+                            else
+                               Append_New_Elmt (Entity (Pref), Seen);
+                            end if;
+ 
+                         else
+                            Error_Msg_N ("illegal aspect % item", Param);
+                         end if;
+                      end;
+                   else
+                      Error_Msg_N ("illegal aspect % item", Param);
+                   end if;
+                end Analyze_Aspect_Parameter;
+ 
+                --  Local variables
+ 
+                Seen : Elist_Id := No_Elist;
+                --  Items that appear in the potentially invalid aspect
+                --  expression of a subprogram; for detecting duplicates.
+ 
+                Restore_Scope : Boolean;
+                --  Will be set to True if we need to restore the scope table
+                --  after analyzing the aspect expression.
+ 
+             --  Start of processing for Analyze_Aspect_Potentially_Invalid
+ 
+             begin
+                --  Set name of the aspect for error messages
+                Error_Msg_Name_1 := Nam;
+ 
+                --  Annotation of a variable; no aspect expression is allowed
+ 
+                if Ekind (E) = E_Variable then
+                   if Present (Expr) then
+                      Error_Msg_N ("illegal aspect % expression", Expr);
+                   end if;
+ 
+                --  Annotation of a constant; no aspect expression is allowed.
+                --  For a deferred constant, the aspect must be attached to the
+                --  partial view.
+ 
+                elsif Ekind (E) = E_Constant then
+                   if Present (Incomplete_Or_Partial_View (E)) then
+                      Error_Msg_N
+                        ("aspect % must apply to deferred constant", N);
+ 
+                   elsif Present (Expr) then
+                      Error_Msg_N ("illegal aspect % expression", Expr);
+                   end if;
+ 
+                --  Annotation of a subprogram; aspect expression is required
+ 
+                elsif Is_Subprogram_Or_Entry (E)
+                  or else Is_Generic_Subprogram (E)
+                then
+ 
+                   --  Not allowed for renaming declarations. Examine the
+                   --  original node because a subprogram renaming may have been
+                   --  rewritten as a body.
+ 
+                   if Nkind (Original_Node (N)) in N_Renaming_Declaration then
+                      Error_Msg_N
+                        ("aspect % not allowed for renaming declaration",
+                         Aspect);
+                   end if;
+ 
+                   if Present (Expr) then
+ 
+                      --  If we analyze subprogram body that acts as its own
+                      --  spec, then the subprogram itself and its formals are
+                      --  already installed; otherwise, we need to install them,
+                      --  as they must be visible when analyzing the aspect
+                      --  expression.
+ 
+                      if In_Open_Scopes (E) then
+                         Restore_Scope := False;
+                      else
+                         Restore_Scope := True;
+                         Push_Scope (E);
+ 
+                         --  Only formals of the subprogram itself can appear
+                         --  in Potentially_Invalid aspect expression, not
+                         --  formals of the enclosing generic unit. (This is
+                         --  different than in Precondition or Depends aspects,
+                         --  where both kinds of formals are allowed.)
+ 
+                         Install_Formals (E);
+                      end if;
+ 
+                      --  Aspect expression is either an aggregate with list of
+                      --  parameters (and possibly the Result attribute for a
+                      --  function).
+ 
+                      if Nkind (Expr) = N_Aggregate then
+ 
+                         --  Component associations in the aggregate must be a
+                         --  parameter name followed by a static boolean
+                         --  expression.
+ 
+                         if Present (Component_Associations (Expr)) then
+                            declare
+                               Assoc : Node_Id :=
+                                 First (Component_Associations (Expr));
+                            begin
+                               while Present (Assoc) loop
+                                  if List_Length (Choices (Assoc)) = 1 then
+                                     Analyze_Aspect_Parameter
+                                       (E, First (Choices (Assoc)), Seen);
+ 
+                                     if Inside_A_Generic then
+                                        Preanalyze_And_Resolve
+                                          (Expression (Assoc), Any_Boolean);
+                                     else
+                                        Analyze_And_Resolve
+                                          (Expression (Assoc), Any_Boolean);
+                                     end if;
+ 
+                                     if not Is_OK_Static_Expression
+                                       (Expression (Assoc))
+                                     then
+                                        Error_Msg_Name_1 := Nam;
+                                        Flag_Non_Static_Expr
+                                          ("expression of aspect % " &
+                                           "must be static!", Aspect);
+                                     end if;
+ 
+                                  else
+                                     Error_Msg_Name_1 := Nam;
+                                     Error_Msg_N
+                                       ("illegal aspect % expression", Expr);
+                                  end if;
+                                  Next (Assoc);
+                               end loop;
+                            end;
+                         end if;
+ 
+                         --  Expressions of the aggregate are parameter names
+ 
+                         if Present (Expressions (Expr)) then
+                            declare
+                               Param : Node_Id := First (Expressions (Expr));
+ 
+                            begin
+                               while Present (Param) loop
+                                  Analyze_Aspect_Parameter (E, Param, Seen);
+                                  Next (Param);
+                               end loop;
+                            end;
+                         end if;
+ 
+                         --  Mark the aggregate expression itself as analyzed;
+                         --  its subexpressions were marked when they themselves
+                         --  were analyzed.
+ 
+                         Set_Analyzed (Expr);
+ 
+                      --  Otherwise, it is a single name of a subprogram
+                      --  parameter (or possibly the Result attribute for
+                      --  a function).
+ 
+                      else
+                         Analyze_Aspect_Parameter (E, Expr, Seen);
+                      end if;
+ 
+                      if Restore_Scope then
+                         End_Scope;
+                      end if;
+ 
+                   --  For instances of Ada.Unchecked_Conversion, allow a
+                   --  parameterless aspect, as the 'Result attribute is not
+                   --  defined there.
+ 
+                   elsif Is_Unchecked_Conversion_Instance (E) then
+                      null;
+                   else
+                      Error_Msg_N ("missing expression for aspect %", N);
+                   end if;
+ 
+                else
+                   Error_Msg_N ("inappropriate entity for aspect %", E);
+                end if;
+             end Analyze_Aspect_Potentially_Invalid;
+ 
              -------------------------------------------
              -- Analyze_Aspect_Relaxed_Initialization --
              -------------------------------------------
*************** package body Sem_Ch13 is
*** 4075,4080 ****
--- 4339,4350 ----
  
                    goto Continue;
  
+                --  Potentially_Invalid
+ 
+                when Aspect_Potentially_Invalid =>
+                   Analyze_Aspect_Potentially_Invalid;
+                   goto Continue;
+ 
                 --  SPARK_Mode
  
                 when Aspect_SPARK_Mode =>
*************** package body Sem_Ch13 is
*** 4364,4369 ****
--- 4634,4640 ----
  
                 when Aspect_Designated_Storage_Model =>
                    if not All_Extensions_Allowed then
+                      Error_Msg_Name_1 := Nam;
                       Error_Msg_GNAT_Extension ("aspect %", Loc);
                       goto Continue;
  
*************** package body Sem_Ch13 is
*** 8591,8596 ****
--- 8862,8904 ----
              Num_Repped_Components   : Nat := 0;
              Num_Unrepped_Components : Nat := 0;
  
+             function Unchecked_Union_Pragma_Pending return Boolean;
+             --  Return True in the corner case of an Unchecked_Union pragma
+             --  occuring after the record representation clause (which
+             --  means that Is_Unchecked_Union will return False for Rectype,
+             --  even though it would return True if called later after the
+             --  pragma is analyzed).
+ 
+             ------------------------------------
+             -- Unchecked_Union_Pragma_Pending --
+             ------------------------------------
+ 
+             function Unchecked_Union_Pragma_Pending return Boolean is
+                Decl_List_Element : Node_Id := N;
+                Pragma_Arg : Node_Id;
+             begin
+                while Present (Decl_List_Element) loop
+                   if Nkind (Decl_List_Element) = N_Pragma
+                     and then Get_Pragma_Id (Decl_List_Element) =
+                              Pragma_Unchecked_Union
+                     and then not Is_Empty_List (Pragma_Argument_Associations
+                                                   (Decl_List_Element))
+                   then
+                      Pragma_Arg := Get_Pragma_Arg
+                                      (First (Pragma_Argument_Associations
+                                                (Decl_List_Element)));
+                      if Nkind (Pragma_Arg) = N_Identifier
+                        and then Chars (Pragma_Arg) = Chars (Rectype)
+                      then
+                         return True;
+                      end if;
+                   end if;
+ 
+                   Next (Decl_List_Element);
+                end loop;
+                return False;
+             end Unchecked_Union_Pragma_Pending;
+ 
           begin
              --  First count number of repped and unrepped components
  
*************** package body Sem_Ch13 is
*** 8629,8636 ****
                      --  Ignore discriminant in unchecked union, since it is
                      --  not there, and cannot have a component clause.
  
!                     and then (not Is_Unchecked_Union (Rectype)
!                                or else Ekind (Comp) /= E_Discriminant)
                    then
                       Error_Msg_Sloc := Sloc (Comp);
                       Error_Msg_NE
--- 8937,8946 ----
                      --  Ignore discriminant in unchecked union, since it is
                      --  not there, and cannot have a component clause.
  
!                     and then (Ekind (Comp) /= E_Discriminant
!                               or else not (Is_Unchecked_Union (Rectype)
!                                            or else
!                                              Unchecked_Union_Pragma_Pending))
                    then
                       Error_Msg_Sloc := Sloc (Comp);
                       Error_Msg_NE
*************** package body Sem_Ch13 is
*** 9986,9991 ****
--- 10296,10307 ----
        --  Includes a call to the predicate function for type T in Expr if
        --  Predicate_Function (T) is non-empty.
  
+       function Has_Source_Predicate (T : Entity_Id) return Boolean;
+       --  Return True if one of the 3 predicate aspects is specified
+       --  explicitly (either via a pragma or an aspect specification, but
+       --  not implicitly via propagation from some other type/subtype via
+       --  RM 3.2.4(5)) for the type/subtype T.
+ 
        procedure Replace_Current_Instance_References
          (N : Node_Id; Typ, New_Entity : Entity_Id);
        --  Replace all references to Typ in the tree rooted at N with
*************** package body Sem_Ch13 is
*** 10202,10207 ****
--- 10518,10558 ----
           end loop;
        end Add_Predicates;
  
+       --------------------------
+       -- Has_Source_Predicate --
+       --------------------------
+ 
+       function Has_Source_Predicate (T : Entity_Id) return Boolean is
+          Rep_Item : Node_Id := First_Rep_Item (T);
+       begin
+          while Present (Rep_Item) loop
+             case Nkind (Rep_Item) is
+                when N_Pragma =>
+                   if Get_Pragma_Id (Rep_Item) = Pragma_Predicate
+                     and then T = Entity (Expression
+                       (First (Pragma_Argument_Associations (Rep_Item))))
+                   then
+                      return True;
+                   end if;
+ 
+                when N_Aspect_Specification =>
+                   if Get_Aspect_Id (Rep_Item) in
+                        Aspect_Static_Predicate
+                          | Aspect_Dynamic_Predicate | Aspect_Predicate
+                     and then Entity (Rep_Item) = T
+                   then
+                      return True;
+                   end if;
+ 
+                when others =>
+                   null;
+             end case;
+ 
+             Next_Rep_Item (Rep_Item);
+          end loop;
+          return False;
+       end Has_Source_Predicate;
+ 
        -----------------------------------------
        -- Replace_Current_Instance_References --
        -----------------------------------------
*************** package body Sem_Ch13 is
*** 10245,10250 ****
--- 10596,10616 ----
        --  context where expansion and tests are enabled.
  
        SId := Predicate_Function (Typ);
+ 
+       --  When declaring a subtype S whose "predecessor" subtype PS (that is,
+       --  the subtype denoted by the subtype_mark in the declaration of S)
+       --  already has a predicate function, do not confuse that existing
+       --  function for PS with the function we need to build for S if
+       --  Has_Source_Predicate returns True for S.
+ 
+       if Present (SId)
+         and then Nkind (Parent (Typ)) = N_Subtype_Declaration
+         and then Etype (First_Entity (SId)) /= Typ
+         and then Has_Source_Predicate (Typ)
+       then
+          SId := Empty;
+       end if;
+ 
        if not Has_Predicates (Typ)
          or else (Present (SId) and then Has_Completion (SId))
          or else
*************** package body Sem_Ch13 is
*** 11080,11103 ****
     ----------------------------------
  
     procedure Check_Aspect_At_Freeze_Point (ASN : Node_Id) is
-       Ident : constant Node_Id := Identifier (ASN);
-       --  Identifier (use Entity field to save expression)
- 
        Expr : constant Node_Id := Expression (ASN);
-       --  For cases where using Entity (Identifier) doesn't work
  
!       A_Id : constant Aspect_Id := Get_Aspect_Id (Chars (Ident));
  
        T : Entity_Id := Empty;
        --  Type required for preanalyze call
  
     begin
!       --  On entry to this procedure, Entity (Ident) contains a copy of the
!       --  original expression from the aspect, saved for this purpose.
! 
!       --  On exit from this procedure Entity (Ident) is unchanged, still
!       --  containing that copy, but Expression (Ident) is a preanalyzed copy
!       --  of the expression, preanalyzed just after the freeze point.
  
        --  Make a copy of the expression to be preanalyzed
  
--- 11446,11461 ----
     ----------------------------------
  
     procedure Check_Aspect_At_Freeze_Point (ASN : Node_Id) is
        Expr : constant Node_Id := Expression (ASN);
  
!       A_Id : constant Aspect_Id := Get_Aspect_Id (Chars (Identifier (ASN)));
  
        T : Entity_Id := Empty;
        --  Type required for preanalyze call
  
     begin
!       --  On exit from this procedure, Expression (ASN) is a copy of the
!       --  original expression, preanalyzed just after the freeze point.
  
        --  Make a copy of the expression to be preanalyzed
  
*************** package body Sem_Ch13 is
*** 11435,11440 ****
--- 11793,11799 ----
              | Aspect_Part_Of
              | Aspect_Post
              | Aspect_Postcondition
+             | Aspect_Potentially_Invalid
              | Aspect_Pre
              | Aspect_Precondition
              | Aspect_Program_Exit
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch13.ads gcc-16-20250706/gcc/ada/sem_ch13.ads
*** gcc-16-20250629/gcc/ada/sem_ch13.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch13.ads	Sun Jul  6 22:32:10 2025
*************** package Sem_Ch13 is
*** 43,50 ****
  
     procedure Analyze_Aspect_Specifications (N : Node_Id; E : Entity_Id);
     --  This procedure is called to analyze aspect specifications for node N. E
!    --  is the corresponding entity declared by the declaration node N. Callers
!    --  should check that Has_Aspects (N) is True before calling this routine.
  
     procedure Analyze_Aspects_On_Subprogram_Body_Or_Stub (N : Node_Id);
     --  Analyze the aspect specifications of [generic] subprogram body or stub
--- 43,49 ----
  
     procedure Analyze_Aspect_Specifications (N : Node_Id; E : Entity_Id);
     --  This procedure is called to analyze aspect specifications for node N. E
!    --  is the corresponding entity declared by the declaration node N.
  
     procedure Analyze_Aspects_On_Subprogram_Body_Or_Stub (N : Node_Id);
     --  Analyze the aspect specifications of [generic] subprogram body or stub
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch3.adb gcc-16-20250706/gcc/ada/sem_ch3.adb
*** gcc-16-20250629/gcc/ada/sem_ch3.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch3.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch3 is
*** 4163,4169 ****
  
        procedure Check_Return_Subtype_Indication (Obj_Decl : Node_Id) is
           Obj_Id  : constant Entity_Id := Defining_Identifier (Obj_Decl);
!          Obj_Typ : constant Entity_Id := Etype (Obj_Id);
           Func_Id : constant Entity_Id := Return_Applies_To (Scope (Obj_Id));
           R_Typ   : constant Entity_Id := Etype (Func_Id);
           Indic   : constant Node_Id   :=
--- 4163,4169 ----
  
        procedure Check_Return_Subtype_Indication (Obj_Decl : Node_Id) is
           Obj_Id  : constant Entity_Id := Defining_Identifier (Obj_Decl);
!          Obj_Typ : Entity_Id := Etype (Obj_Id);
           Func_Id : constant Entity_Id := Return_Applies_To (Scope (Obj_Id));
           R_Typ   : constant Entity_Id := Etype (Func_Id);
           Indic   : constant Node_Id   :=
*************** package body Sem_Ch3 is
*** 4199,4204 ****
--- 4199,4213 ----
              return;
           end if;
  
+          --  The return object type could have been rewritten into a
+          --  constrained type, so for the legality checks that follow we need
+          --  to recover the nominal unconstrained type.
+ 
+          if Is_Constr_Subt_For_U_Nominal (Obj_Typ) then
+             Obj_Typ := Entity (Original_Node (Object_Definition (Obj_Decl)));
+             pragma Assert (not Is_Constrained (Obj_Typ));
+          end if;
+ 
           --  "return access T" case; check that the return statement also has
           --  "access T", and that the subtypes statically match:
           --   if this is an access to subprogram the signatures must match.
*************** package body Sem_Ch3 is
*** 4267,4273 ****
  
              --  AI05-103: for elementary types, subtypes must statically match
  
!             if Is_Constrained (R_Typ) or else Is_Access_Type (R_Typ) then
                 if not Subtypes_Statically_Match (Obj_Typ, R_Typ) then
                    Error_No_Match (Indic);
                 end if;
--- 4276,4282 ----
  
              --  AI05-103: for elementary types, subtypes must statically match
  
!             if Is_Elementary_Type (R_Typ) then
                 if not Subtypes_Statically_Match (Obj_Typ, R_Typ) then
                    Error_No_Match (Indic);
                 end if;
*************** package body Sem_Ch3 is
*** 4283,4295 ****
              --  code is expanded on the basis of the base type (see subprogram
              --  Stream_Base_Type).
  
!             elsif Nkind (Indic) = N_Subtype_Indication
!               and then not Subtypes_Statically_Compatible (Obj_Typ, R_Typ)
                and then not Is_TSS (Func_Id, TSS_Stream_Input)
              then
                 Error_Msg_N
                   ("result subtype must be statically compatible with the " &
!                   "function result type", Indic);
  
                 if not Predicates_Compatible (Obj_Typ, R_Typ) then
                    Error_Msg_NE
--- 4292,4303 ----
              --  code is expanded on the basis of the base type (see subprogram
              --  Stream_Base_Type).
  
!             elsif not Subtypes_Statically_Compatible (Obj_Typ, R_Typ)
                and then not Is_TSS (Func_Id, TSS_Stream_Input)
              then
                 Error_Msg_N
                   ("result subtype must be statically compatible with the " &
!                   "function result subtype", Indic);
  
                 if not Predicates_Compatible (Obj_Typ, R_Typ) then
                    Error_Msg_NE
*************** package body Sem_Ch3 is
*** 5328,5344 ****
           else
              Validate_Controlled_Object (Id);
           end if;
  
!          --  If the type of a constrained array has an unconstrained first
!          --  subtype, its Finalize_Address primitive expects the address of
!          --  an object with a dope vector (see Make_Finalize_Address_Stmts).
  
!          if Is_Array_Type (Etype (Id))
!            and then Is_Constrained (Etype (Id))
!            and then not Is_Constrained (First_Subtype (Etype (Id)))
!          then
!             Set_Is_Constr_Array_Subt_With_Bounds (Etype (Id));
!          end if;
        end if;
  
        if Has_Task (Etype (Id)) then
--- 5336,5349 ----
           else
              Validate_Controlled_Object (Id);
           end if;
+       end if;
  
!       --  If the type of a constrained array has an unconstrained first
!       --  subtype, its Finalize_Address primitive expects the address of
!       --  an object with a dope vector (see Make_Finalize_Address_Stmts).
  
!       if Is_Constr_Array_Subt_Of_Unc_With_Controlled (Etype (Id)) then
!          Set_Is_Constr_Array_Subt_With_Bounds (Etype (Id));
        end if;
  
        if Has_Task (Etype (Id)) then
*************** package body Sem_Ch3 is
*** 5737,5742 ****
--- 5742,5766 ----
        Id : constant Entity_Id := Defining_Identifier (N);
        T  : Entity_Id;
  
+       procedure Copy_Parent_Attributes;
+       --  Copy fields that don't depend on the type kind from the subtype
+       --  denoted by the subtype mark.
+ 
+       ----------------------------
+       -- Copy_Parent_Attributes --
+       ----------------------------
+ 
+       procedure Copy_Parent_Attributes is
+       begin
+          Set_Etype (Id, Base_Type (T));
+          Set_Is_Volatile (Id, Is_Volatile (T));
+          Set_Treat_As_Volatile (Id, Treat_As_Volatile (T));
+          Set_Is_Generic_Type (Id, Is_Generic_Type (Base_Type (T)));
+          Set_Convention (Id, Convention (T));
+       end Copy_Parent_Attributes;
+ 
+    --  Start of processing for Analyze_Subtype_Declaration
+ 
     begin
        Generate_Definition (Id);
        Set_Is_Pure (Id, Is_Pure (Current_Scope));
*************** package body Sem_Ch3 is
*** 5803,5815 ****
           T := Full_View (T);
        end if;
  
-       --  Inherit common attributes
- 
-       Set_Is_Volatile       (Id, Is_Volatile       (T));
-       Set_Treat_As_Volatile (Id, Treat_As_Volatile (T));
-       Set_Is_Generic_Type   (Id, Is_Generic_Type   (Base_Type (T)));
-       Set_Convention        (Id, Convention        (T));
- 
        --  If ancestor has predicates then so does the subtype, and in addition
        --  we must delay the freeze to properly arrange predicate inheritance.
  
--- 5827,5832 ----
*************** package body Sem_Ch3 is
*** 5849,5864 ****
        --  semantic attributes must be established here.
  
        if Nkind (Subtype_Indication (N)) /= N_Subtype_Indication then
-          Set_Etype (Id, Base_Type (T));
- 
           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));
--- 5866,5881 ----
        --  semantic attributes must be established here.
  
        if Nkind (Subtype_Indication (N)) /= N_Subtype_Indication then
           case Ekind (T) is
              when Array_Kind =>
                 Mutate_Ekind                  (Id, E_Array_Subtype);
+                Copy_Parent_Attributes;
                 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);
+                Copy_Parent_Attributes;
                 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
*** 5871,5876 ****
--- 5888,5894 ----
  
              when Enumeration_Kind =>
                 Mutate_Ekind             (Id, E_Enumeration_Subtype);
+                Copy_Parent_Attributes;
                 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));
*************** package body Sem_Ch3 is
*** 5880,5885 ****
--- 5898,5904 ----
  
              when Ordinary_Fixed_Point_Kind =>
                 Mutate_Ekind          (Id, E_Ordinary_Fixed_Point_Subtype);
+                Copy_Parent_Attributes;
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Small_Value          (Id, Small_Value        (T));
                 Set_Delta_Value          (Id, Delta_Value        (T));
*************** package body Sem_Ch3 is
*** 5889,5894 ****
--- 5908,5914 ----
  
              when Float_Kind =>
                 Mutate_Ekind             (Id, E_Floating_Point_Subtype);
+                Copy_Parent_Attributes;
                 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
*** 5898,5903 ****
--- 5918,5924 ----
  
              when Signed_Integer_Kind =>
                 Mutate_Ekind             (Id, E_Signed_Integer_Subtype);
+                Copy_Parent_Attributes;
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
*************** package body Sem_Ch3 is
*** 5905,5910 ****
--- 5926,5932 ----
  
              when Modular_Integer_Kind =>
                 Mutate_Ekind             (Id, E_Modular_Integer_Subtype);
+                Copy_Parent_Attributes;
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
*************** package body Sem_Ch3 is
*** 5912,5917 ****
--- 5934,5940 ----
  
              when Class_Wide_Kind =>
                 Mutate_Ekind             (Id, E_Class_Wide_Subtype);
+                Copy_Parent_Attributes;
                 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
*** 5929,5934 ****
--- 5952,5958 ----
                 | E_Record_Type
              =>
                 Mutate_Ekind             (Id, E_Record_Subtype);
+                Copy_Parent_Attributes;
  
                 --  Subtype declarations introduced for formal type parameters
                 --  in generic instantiations should inherit the Size value of
*************** package body Sem_Ch3 is
*** 5980,5985 ****
--- 6004,6010 ----
  
              when Private_Kind =>
                 Mutate_Ekind           (Id, Subtype_Kind (Ekind        (T)));
+                Copy_Parent_Attributes;
                 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
*** 6043,6048 ****
--- 6068,6074 ----
  
              when Access_Kind =>
                 Mutate_Ekind          (Id, E_Access_Subtype);
+                Copy_Parent_Attributes;
                 Set_Is_Constrained    (Id, Is_Constrained        (T));
                 Set_Is_Access_Constant
                                       (Id, Is_Access_Constant    (T));
*************** package body Sem_Ch3 is
*** 6066,6071 ****
--- 6092,6098 ----
  
              when Concurrent_Kind =>
                 Mutate_Ekind             (Id, Subtype_Kind (Ekind   (T)));
+                Copy_Parent_Attributes;
                 Set_Corresponding_Record_Type (Id,
                                           Corresponding_Record_Type (T));
                 Set_First_Entity         (Id, First_Entity          (T));
*************** package body Sem_Ch3 is
*** 6094,6099 ****
--- 6121,6127 ----
                    --  subtypes for Ada 2012 extended use of incomplete types.
  
                    Mutate_Ekind           (Id, E_Incomplete_Subtype);
+                   Copy_Parent_Attributes;
                    Set_Is_Tagged_Type     (Id, Is_Tagged_Type (T));
                    Set_Private_Dependents (Id, New_Elmt_List);
  
*************** package body Sem_Ch3 is
*** 6134,6139 ****
--- 6162,6169 ----
           --  declared entity inherits predicates from the parent.
  
           Inherit_Predicate_Flags (Id, T);
+       else
+          Copy_Parent_Attributes;
        end if;
  
        if Etype (Id) = Any_Type then
*************** package body Sem_Ch3 is
*** 14860,14865 ****
--- 14890,14896 ----
        Set_Etype             (T_Sub, Corr_Rec);
        Set_Has_Discriminants (T_Sub, Has_Discriminants (Prot_Subt));
        Set_Is_Tagged_Type    (T_Sub, Is_Tagged_Type (Corr_Rec));
+       Set_Class_Wide_Type   (T_Sub, Class_Wide_Type (Corr_Rec));
        Set_Is_Constrained    (T_Sub, True);
        Set_First_Entity      (T_Sub, First_Entity (Corr_Rec));
        Set_Last_Entity       (T_Sub, Last_Entity  (Corr_Rec));
*************** package body Sem_Ch3 is
*** 19136,19143 ****
        --  Otherwise we have a subtype mark without a constraint
  
        elsif Error_Posted (S) then
!          --  Don't rewrite if S is Empty or Error
!          if S > Empty_Or_Error then
              Rewrite (S, New_Occurrence_Of (Any_Id, Sloc (S)));
           end if;
           return Any_Type;
--- 19167,19173 ----
        --  Otherwise we have a subtype mark without a constraint
  
        elsif Error_Posted (S) then
!          if S not in Empty | Error then
              Rewrite (S, New_Occurrence_Of (Any_Id, Sloc (S)));
           end if;
           return Any_Type;
*************** package body Sem_Ch3 is
*** 21071,21077 ****
  
        --  If no range was given, set a dummy range
  
!       if RRS <= Empty_Or_Error then
           Low_Val  := -Small_Val;
           High_Val := Small_Val;
  
--- 21101,21107 ----
  
        --  If no range was given, set a dummy range
  
!       if RRS in Empty | Error then
           Low_Val  := -Small_Val;
           High_Val := Small_Val;
  
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch4.adb gcc-16-20250706/gcc/ada/sem_ch4.adb
*** gcc-16-20250629/gcc/ada/sem_ch4.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch4.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch4 is
*** 594,601 ****
           --  part of the allocator. It is fully analyzed and resolved when
           --  the allocator is resolved with the context type.
  
-          Set_Etype  (E, Type_Id);
- 
        --  Case where allocator has a subtype indication
  
        else
--- 594,599 ----
*************** package body Sem_Ch4 is
*** 836,841 ****
--- 834,847 ----
           Error_Msg_N ("cannot allocate abstract object", E);
        end if;
  
+       --  If the type of a constrained array has an unconstrained first
+       --  subtype, its Finalize_Address primitive expects the address of
+       --  an object with a dope vector (see Make_Finalize_Address_Stmts).
+ 
+       if Is_Constr_Array_Subt_Of_Unc_With_Controlled (Type_Id) then
+          Set_Is_Constr_Array_Subt_With_Bounds (Type_Id);
+       end if;
+ 
        Set_Etype (N, Acc_Type);
  
        --  If this is an allocator for the return stack, then no restriction may
*************** package body Sem_Ch4 is
*** 10909,10914 ****
--- 10915,10924 ----
     --  Start of processing for Try_Object_Operation
  
     begin
+       if Is_Class_Wide_Equivalent_Type (Obj_Type) then
+          Obj_Type := Corresponding_Mutably_Tagged_Type (Obj_Type);
+       end if;
+ 
        Analyze_Expression (Obj);
  
        --  Analyze the actuals if node is known to be a subprogram call
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch5.adb gcc-16-20250706/gcc/ada/sem_ch5.adb
*** gcc-16-20250629/gcc/ada/sem_ch5.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch5.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch5 is
*** 90,95 ****
--- 90,101 ----
     --  messages. This variable is recursively saved on entry to processing the
     --  construct, and restored on exit.
  
+    function Analyze_Loop_Flow_Statement
+      (N : N_Loop_Flow_Statement_Id) return Opt_E_Loop_Id;
+    --  Perform analysis that is common to continue statements and exit
+    --  statements. On success, the return value is the entity of the loop
+    --  referenced by the statement.
+ 
     function Has_Sec_Stack_Call (N : Node_Id) return Boolean;
     --  N is the node for an arbitrary construct. This function searches the
     --  construct N to see if it contains a function call that returns on the
*************** package body Sem_Ch5 is
*** 1663,1780 ****
        end if;
     end Analyze_Case_Statement;
  
!    ----------------------------
!    -- Analyze_Exit_Statement --
!    ----------------------------
  
!    --  If the exit includes a name, it must be the name of a currently open
!    --  loop. Otherwise there must be an innermost open loop on the stack, to
!    --  which the statement implicitly refers.
  
!    --  Additionally, in SPARK mode:
  
!    --    The exit can only name the closest enclosing loop;
  
!    --    An exit with a when clause must be directly contained in a loop;
  
!    --    An exit without a when clause must be directly contained in an
!    --    if-statement with no elsif or else, which is itself directly contained
!    --    in a loop. The exit must be the last statement in the if-statement.
  
!    procedure Analyze_Exit_Statement (N : Node_Id) is
!       Target   : constant Node_Id := Name (N);
!       Cond     : constant Node_Id := Condition (N);
!       Scope_Id : Entity_Id := Empty;  -- initialize to prevent warning
!       U_Name   : Entity_Id;
!       Kind     : Entity_Kind;
  
!    begin
!       if No (Cond) then
!          Check_Unreachable_Code (N);
!       end if;
  
!       if Present (Target) then
!          Analyze (Target);
!          U_Name := Entity (Target);
  
!          if not In_Open_Scopes (U_Name) or else Ekind (U_Name) /= E_Loop then
!             Error_Msg_N ("invalid loop name in exit statement", N);
!             return;
  
!          else
!             Set_Has_Exit (U_Name);
!          end if;
  
!       else
!          U_Name := Empty;
!       end if;
  
!       for J in reverse 0 .. Scope_Stack.Last loop
!          Scope_Id := Scope_Stack.Table (J).Entity;
!          Kind := Ekind (Scope_Id);
  
!          if Kind = E_Loop and then (No (Target) or else Scope_Id = U_Name) then
!             Set_Has_Exit (Scope_Id);
!             exit;
  
!          elsif Kind = E_Block
!            or else Kind = E_Loop
!            or else Kind = E_Return_Statement
!          then
!             null;
  
!          else
!             Error_Msg_N
!               ("cannot exit from program unit or accept statement", N);
!             return;
!          end if;
!       end loop;
  
!       Finally_Legality_Check : declare
!          --  The following value can actually be a block statement due to
!          --  expansion, but we call it Target_Loop_Statement because it was
!          --  originally a loop statement.
!          Target_Loop_Statement : constant Node_Id :=
!            (if Present (U_Name) then Label_Construct ((Parent (U_Name)))
!             else Empty);
  
!          X : Node_Id := N;
!       begin
!          while Present (X) loop
!             if Nkind (X) = N_Loop_Statement
!               and then (No (Target_Loop_Statement)
!                         or else X = Target_Loop_Statement)
!             then
!                exit;
!             elsif Nkind (Parent (X)) = N_Handled_Sequence_Of_Statements
!               and then Is_List_Member (X)
!               and then List_Containing (X) = Finally_Statements (Parent (X))
!             then
!                Error_Msg_N ("cannot exit out of finally part", N);
!                exit;
!             end if;
!             X := Parent (X);
!          end loop;
!       end Finally_Legality_Check;
  
!       --  Verify that if present the condition is a Boolean expression
  
!       if Present (Cond) then
!          Analyze_And_Resolve (Cond, Any_Boolean);
!          Check_Unset_Reference (Cond);
!       end if;
  
!       --  Chain exit statement to associated loop entity
  
!       Set_Next_Exit_Statement  (N, First_Exit_Statement (Scope_Id));
!       Set_First_Exit_Statement (Scope_Id, N);
  
!       --  Since the exit may take us out of a loop, any previous assignment
!       --  statement is not useless, so clear last assignment indications. It
!       --  is OK to keep other current values, since if the exit statement
!       --  does not exit, then the current values are still valid.
  
!       Kill_Current_Values (Last_Assignment_Only => True);
     end Analyze_Exit_Statement;
  
     ----------------------------
--- 1669,1809 ----
        end if;
     end Analyze_Case_Statement;
  
!    --------------------------------
!    -- Analyze_Continue_Statement --
!    --------------------------------
  
!    procedure Analyze_Continue_Statement (N : Node_Id) is
!       Ignore_Errors_On_Entry : constant Boolean := Get_Ignore_Errors;
  
!       Loc : constant Source_Ptr := Sloc (N);
  
!       Nam : constant Node_Id := Name (N);
!       Cond : constant Node_Id := Condition (N);
  
!       function Make_Call return N_Procedure_Call_Statement_Id;
!       --  Build a node that corresponds to the procedure call interpretation of
!       --  N.
  
!       function Make_Stmt return N_Continue_Statement_Id;
!       --  Build a node that corresponds to the continue statement
!       --  interpretation of N.
  
!       function Make_Call return N_Procedure_Call_Statement_Id is
!       begin
!          return
!            Make_Procedure_Call_Statement
!              (Loc, Make_Identifier (Loc, Name_Continue));
!       end Make_Call;
  
!       function Make_Stmt return N_Continue_Statement_Id is
!       begin
!          return Make_Continue_Statement (Loc, Nam, Cond);
!       end Make_Stmt;
  
!       Continue_Is_Available : constant Boolean :=
!         Ada_Version = Ada_With_All_Extensions;
  
!       Maybe_Procedure_Call : constant Boolean :=
!         No (Name (N)) and then No (Condition (N));
!    begin
!       if Maybe_Procedure_Call and then Continue_Is_Available then
!          --  This is the tricky case. The idea is to do a kind of overload
!          --  resolution of a procedure call, but with "continue statement" as
!          --  an additional possible interpretation. To achieve this, we
!          --  temporarily replace N with a procedure call statement and analyze
!          --  it in "ignore errors" mode.
!          Replace (N, Make_Call);
!          Set_Ignore_Errors (True);
!          Analyze (N);
!          Set_Ignore_Errors (Ignore_Errors_On_Entry);
  
!          declare
!             C : constant N_Procedure_Call_Statement_Id := New_Copy (N);
!             --  C is the result of our procedure call interpretation analysis
!          begin
!             --  We restore N to a continue statement
!             Replace (N, Make_Stmt);
  
!             if Is_Overloaded (Name (C)) then
!                --  There are multiple valid procedure call interpretations; we
!                --  don't mention the possible interpretation as a continue
!                --  statement for now. It might be possible to add this in the
!                --  future.
  
!                Set_Call_Or_Target_Loop (N, Make_Call);
!             elsif Etype (C) = Any_Type then
!                --  There is no valid procedure call interpretation. We go for
!                --  the continue statement interpretation. It might not be valid
!                --  either, but we make the assumption that the user meant to
!                --  write a continue statement and not a procedure call and emit
!                --  error messages accordingly.
  
!                Set_Call_Or_Target_Loop (N, Analyze_Loop_Flow_Statement (N));
!             else
!                --  There is a unique valid procedure call interpretation. We
!                --  test whether the interpretation as a continue statement is
!                --  valid.
  
!                declare
!                   L : Opt_E_Loop_Id;
!                begin
!                   Set_Ignore_Errors (True);
!                   L := Analyze_Loop_Flow_Statement (N);
!                   Set_Ignore_Errors (Ignore_Errors_On_Entry);
  
!                   if Present (L) then
!                      --  If the continue statement interpretation makes sense,
!                      --  we post an ad hoc ambiguity error.
!                      Error_Msg_N
!                        ("ambiguity between continue statement and call", N);
!                   else
!                      Set_Call_Or_Target_Loop (N, Make_Call);
!                   end if;
!                end;
!             end if;
!          end;
!       elsif Maybe_Procedure_Call then
!          Set_Call_Or_Target_Loop (N, Make_Call);
!       elsif Continue_Is_Available then
!          Set_Call_Or_Target_Loop (N, Analyze_Loop_Flow_Statement (N));
!       else
!          Error_Msg_GNAT_Extension
!            (Extension         => "continue",
!             Loc               => Sloc (N),
!             Is_Core_Extension => False);
!       end if;
!    end Analyze_Continue_Statement;
  
!    ----------------------------
!    -- Analyze_Exit_Statement --
!    ----------------------------
  
!    --  If the exit includes a name, it must be the name of a currently open
!    --  loop. Otherwise there must be an innermost open loop on the stack, to
!    --  which the statement implicitly refers.
  
!    --  Additionally, in SPARK mode:
  
!    --    The exit can only name the closest enclosing loop;
  
!    --    An exit with a when clause must be directly contained in a loop;
  
!    --    An exit without a when clause must be directly contained in an
!    --    if-statement with no elsif or else, which is itself directly contained
!    --    in a loop. The exit must be the last statement in the if-statement.
  
!    procedure Analyze_Exit_Statement (N : Node_Id) is
!       L : constant Opt_E_Loop_Id := Analyze_Loop_Flow_Statement (N);
!    begin
!       if Present (L) then
!          Set_Has_Exit (L);
  
!          --  Chain exit statement to associated loop entity
! 
!          Set_Next_Exit_Statement (N, First_Exit_Statement (L));
!          Set_First_Exit_Statement (L, N);
!       end if;
     end Analyze_Exit_Statement;
  
     ----------------------------
*************** package body Sem_Ch5 is
*** 3149,3154 ****
--- 3178,3184 ----
     --  Start of processing for Analyze_Loop_Parameter_Specification
  
     begin
+       Mutate_Ekind (Id, E_Loop_Parameter);
        Enter_Name (Id);
  
        --  We always consider the loop variable to be referenced, since the loop
*************** package body Sem_Ch5 is
*** 3254,3260 ****
                 --  subsequent analysis of the condition in a quantified
                 --  expression.
  
-                Mutate_Ekind (Id, E_Loop_Parameter);
                 return;
              end;
  
--- 3284,3289 ----
*************** package body Sem_Ch5 is
*** 3317,3323 ****
           Make_Index (DS, N);
        end if;
  
-       Mutate_Ekind (Id, E_Loop_Parameter);
        Set_Etype (Id, Etype (DS));
  
        Set_Is_Not_Self_Hidden (Id);
--- 3346,3351 ----
*************** package body Sem_Ch5 is
*** 3561,3570 ****
     ----------------------------
  
     procedure Analyze_Loop_Statement (N : Node_Id) is
- 
-       --  The following exception is raised by routine Prepare_Loop_Statement
-       --  to avoid further analysis of a transformed loop.
- 
        procedure Prepare_Loop_Statement
          (Iter            : Node_Id;
           Stop_Processing : out Boolean);
--- 3589,3594 ----
*************** package body Sem_Ch5 is
*** 4002,4007 ****
--- 4026,4043 ----
           Set_Has_Created_Identifier (N);
        end if;
  
+       if No (Continue_Mark (Ent)) then
+          --  If Continue_Mark wasn't set on the loop entity, we know that N
+          --  does not come from the expansion of iterators that append
+          --  statements to advance the loop, so right after the last statement
+          --  in the list is where continue statements must jump to.
+          Set_Continue_Mark (Ent, Last (Statements (N)));
+       else
+          --  Otherwise, N somehow derives from another loop statement, the
+          --  analysis of which set Continue_Mark adequately already.
+          null;
+       end if;
+ 
        --  Determine whether the loop statement must be transformed prior to
        --  analysis, and if so, perform it. This early modification is needed
        --  when:
*************** package body Sem_Ch5 is
*** 4211,4216 ****
--- 4247,4351 ----
        end if;
     end Analyze_Loop_Statement;
  
+    ---------------------------------
+    -- Analyze_Loop_Flow_Statement --
+    ---------------------------------
+ 
+    function Analyze_Loop_Flow_Statement
+      (N : N_Loop_Flow_Statement_Id) return Opt_E_Loop_Id
+    is
+       Target   : constant Node_Id := Name (N);
+       Cond     : constant Node_Id := Condition (N);
+       Scope_Id : Entity_Id := Empty;
+       U_Name   : Entity_Id;
+       Kind     : Entity_Kind;
+ 
+       S : constant String := Loop_Flow_Keyword (N);
+    begin
+       if No (Cond) then
+          Check_Unreachable_Code (N);
+       end if;
+ 
+       if Present (Target) then
+          Analyze (Target);
+          U_Name := Entity (Target);
+ 
+          if not In_Open_Scopes (U_Name) or else Ekind (U_Name) /= E_Loop then
+             Error_Msg_N ("invalid loop name in " & S & " statement", N);
+             return Empty;
+          end if;
+ 
+       else
+          U_Name := Empty;
+       end if;
+ 
+       for J in reverse 0 .. Scope_Stack.Last loop
+          Scope_Id := Scope_Stack.Table (J).Entity;
+          Kind := Ekind (Scope_Id);
+ 
+          if Kind = E_Loop and then (No (Target) or else Scope_Id = U_Name) then
+             exit;
+ 
+          elsif Kind = E_Block
+            or else Kind = E_Loop
+            or else Kind = E_Return_Statement
+          then
+             null;
+ 
+          else
+             Error_Msg_N
+               ("cannot " & S & " from program unit or accept statement", N);
+             return Empty;
+          end if;
+       end loop;
+ 
+       Finally_Legality_Check :
+       declare
+          --  The following value can actually be a block statement due to
+          --  expansion, but we call it Target_Loop_Statement because it was
+          --  originally a loop statement.
+          Target_Loop_Statement : constant Node_Id :=
+            (if Present (U_Name)
+             then Label_Construct ((Parent (U_Name)))
+             else Empty);
+ 
+          X : Node_Id := N;
+       begin
+          while Present (X) loop
+             if Nkind (X) = N_Loop_Statement
+               and then (No (Target_Loop_Statement)
+                         or else X = Target_Loop_Statement)
+             then
+                exit;
+             elsif Nkind (Parent (X)) = N_Handled_Sequence_Of_Statements
+               and then Is_List_Member (X)
+               and then List_Containing (X) = Finally_Statements (Parent (X))
+             then
+                Error_Msg_N ("cannot " & S & " out of finally part", N);
+                exit;
+             end if;
+             X := Parent (X);
+          end loop;
+       end Finally_Legality_Check;
+ 
+       --  Verify that if present the condition is a Boolean expression
+ 
+       if Present (Cond) then
+          Analyze_And_Resolve (Cond, Any_Boolean);
+          Check_Unset_Reference (Cond);
+       end if;
+ 
+       --  Since the statement may take us out of the current iteration of the
+       --  loop, any previous assignment statement is not useless, so clear last
+       --  assignment indications. It is OK to keep other current values, since
+       --  if the statement does not stop the current iteration, then the
+       --  current values are still valid.
+ 
+       Kill_Current_Values (Last_Assignment_Only => True);
+ 
+       return Scope_Id;
+    end Analyze_Loop_Flow_Statement;
+ 
     ----------------------------
     -- Analyze_Null_Statement --
     ----------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch5.ads gcc-16-20250706/gcc/ada/sem_ch5.ads
*** gcc-16-20250629/gcc/ada/sem_ch5.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch5.ads	Sun Jul  6 22:32:10 2025
*************** package Sem_Ch5 is
*** 31,36 ****
--- 31,37 ----
     procedure Analyze_Block_Statement              (N : Node_Id);
     procedure Analyze_Case_Statement               (N : Node_Id);
     procedure Analyze_Compound_Statement           (N : Node_Id);
+    procedure Analyze_Continue_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);
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch6.adb gcc-16-20250706/gcc/ada/sem_ch6.adb
*** gcc-16-20250629/gcc/ada/sem_ch6.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch6.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch6 is
*** 6425,6436 ****
  
           elsif Has_Delayed_Freeze (T) and then not Is_Frozen (T) then
              Set_Has_Delayed_Freeze (Designator);
- 
-          elsif Is_Access_Type (T)
-            and then Has_Delayed_Freeze (Designated_Type (T))
-            and then not Is_Frozen (Designated_Type (T))
-          then
-             Set_Has_Delayed_Freeze (Designator);
           end if;
        end Possible_Freeze;
  
--- 6425,6430 ----
*************** package body Sem_Ch6 is
*** 6457,6462 ****
--- 6451,6463 ----
           Next_Formal (F);
        end loop;
  
+       --  RM 13.14 (15.1/6): the primitive subprograms of a tagged type are
+       --  frozen at the place where the type is frozen.
+ 
+       if Is_Dispatching_Operation (Designator) then
+          Set_Has_Delayed_Freeze (Designator);
+       end if;
+ 
        --  Mark functions that return by reference. Note that it cannot be done
        --  for delayed_freeze subprograms because the underlying returned type
        --  may not be known yet (for private types).
*************** package body Sem_Ch6 is
*** 7830,7836 ****
           end if;
  
           Overridden_Subp := Candidate;
-          return;
        end;
     end Check_Synchronized_Overriding;
  
--- 7831,7836 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch6.ads gcc-16-20250706/gcc/ada/sem_ch6.ads
*** gcc-16-20250629/gcc/ada/sem_ch6.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch6.ads	Sun Jul  6 22:32:10 2025
*************** package Sem_Ch6 is
*** 64,72 ****
     --  respective counterparts.
  
     procedure Check_Delayed_Subprogram (Designator : Entity_Id);
!    --  Designator can be a E_Subprogram_Type, E_Procedure or E_Function. If a
!    --  type in its profile depends on a private type without a full
!    --  declaration, indicate that the subprogram or type is delayed.
  
     procedure Check_Formal_Subprogram_Conformance
       (New_Id  : Entity_Id;
--- 64,71 ----
     --  respective counterparts.
  
     procedure Check_Delayed_Subprogram (Designator : Entity_Id);
!    --  Designator can be a E_Subprogram_Type, E_Procedure or E_Function. Set
!    --  Has_Delayed_Freeze on Designator if its freezing needs to be delayed.
  
     procedure Check_Formal_Subprogram_Conformance
       (New_Id  : Entity_Id;
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_ch8.adb gcc-16-20250706/gcc/ada/sem_ch8.adb
*** gcc-16-20250629/gcc/ada/sem_ch8.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_ch8.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Ch8 is
*** 4270,4275 ****
--- 4270,4309 ----
           Local_Restrict.Check_Actual_Subprogram_For_Instance
             (Actual_Subp_Name => Nam, Formal_Subp => Formal_Spec);
        end if;
+ 
+       --  If pragma Short_Circuit_And_Or is specified, then we give an error
+       --  for renaming an operator that is made short circuit.
+       --  For example, this is illegal:
+       --
+       --      function My_And (X, Y: Boolean) return Boolean renames "and";
+       --
+       --  if "and" denotes the usual predefined Boolean operator. Otherwise,
+       --  the semantics are confusing (sometimes short circuit, and sometimes
+       --  not, for calls to My_And). If we ever relax this rule, we will need
+       --  to clean up that run-time semantics.
+ 
+       if Short_Circuit_And_Or
+         and then Chars (Old_S) in Name_Op_And | Name_Op_Or
+         and then In_Extended_Main_Source_Unit (N)
+         and then Etype (Old_S) = Standard_Boolean
+         and then Is_Intrinsic_Subprogram (Old_S)
+       then
+          if Comes_From_Source (N) then
+             Error_Msg_N
+               ("pragma Short_Circuit_And_Or disallows renaming of " &
+                "operator", N);
+ 
+          --  Same error in case of an instantiation with My_And => "and"
+ 
+          elsif Present (Corresponding_Formal_Spec (N)) then
+             Error_Msg_N
+               ("pragma Short_Circuit_And_Or disallows passing of " &
+                "operator as a generic actual", N);
+ 
+          else
+             raise Program_Error;
+          end if;
+       end if;
     end Analyze_Subprogram_Renaming;
  
     -------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_disp.adb gcc-16-20250706/gcc/ada/sem_disp.adb
*** gcc-16-20250629/gcc/ada/sem_disp.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_disp.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Disp is
*** 587,593 ****
        Formal                 : Entity_Id;
        Control                : Node_Id := Empty;
        Func                   : Entity_Id;
!       Subp_Entity            : Entity_Id;
  
        Indeterm_Ctrl_Type : Entity_Id := Empty;
        --  Type of a controlling formal whose actual is a tag-indeterminate call
--- 587,593 ----
        Formal                 : Entity_Id;
        Control                : Node_Id := Empty;
        Func                   : Entity_Id;
!       Subp_Entity            : constant Entity_Id := Entity (Name (N));
  
        Indeterm_Ctrl_Type : Entity_Id := Empty;
        --  Type of a controlling formal whose actual is a tag-indeterminate call
*************** package body Sem_Disp is
*** 968,974 ****
        --  Find a controlling argument, if any
  
        if Present (Parameter_Associations (N)) then
-          Subp_Entity := Entity (Name (N));
  
           Actual := First_Actual (N);
           Formal := First_Formal (Subp_Entity);
--- 968,973 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_elab.adb gcc-16-20250706/gcc/ada/sem_elab.adb
*** gcc-16-20250629/gcc/ada/sem_elab.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_elab.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Elab is
*** 15236,15242 ****
              end if;
  
              Body_Decl := Unit_Declaration_Node (Body_Id);
!             Region    := Find_Early_Call_Region (Body_Decl);
  
              --  The freeze node appears prior to the early call region of the
              --  primitive body.
--- 15236,15250 ----
              end if;
  
              Body_Decl := Unit_Declaration_Node (Body_Id);
! 
!             --  For subprogram bodies in subunits we check where the subprogram
!             --  body stub is declared.
! 
!             if Nkind (Parent (Body_Decl)) = N_Subunit then
!                Body_Decl := Corresponding_Stub (Parent (Body_Decl));
!             end if;
! 
!             Region := Find_Early_Call_Region (Body_Decl);
  
              --  The freeze node appears prior to the early call region of the
              --  primitive body.
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_elim.adb gcc-16-20250706/gcc/ada/sem_elim.adb
*** gcc-16-20250629/gcc/ada/sem_elim.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_elim.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Elim is
*** 713,720 ****
        <<Continue>>
           Elmt := Elmt.Homonym;
        end loop;
- 
-       return;
     end Check_Eliminated;
  
     -------------------------------------
--- 713,718 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_eval.adb gcc-16-20250706/gcc/ada/sem_eval.adb
*** gcc-16-20250629/gcc/ada/sem_eval.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_eval.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Eval is
*** 3997,4003 ****
        --  Otherwise the result depends on the right operand
  
        Fold_Uint (N, Expr_Value (Right), Rstat);
-       return;
     end Eval_Short_Circuit;
  
     ----------------
--- 3997,4002 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_prag.adb gcc-16-20250706/gcc/ada/sem_prag.adb
*** gcc-16-20250629/gcc/ada/sem_prag.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_prag.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Prag is
*** 21370,21377 ****
           --  pragma No_Component_Reordering [([Entity =>] type_LOCAL_NAME)];
  
           when Pragma_No_Component_Reordering => No_Comp_Reordering : declare
!             E    : Entity_Id;
!             E_Id : Node_Id;
  
           begin
              GNAT_Pragma;
--- 21370,21377 ----
           --  pragma No_Component_Reordering [([Entity =>] type_LOCAL_NAME)];
  
           when Pragma_No_Component_Reordering => No_Comp_Reordering : declare
!             Typ     : Entity_Id;
!             Type_Id : Node_Id;
  
           begin
              GNAT_Pragma;
*************** package body Sem_Prag is
*** 21384,21402 ****
              else
                 Check_Optional_Identifier (Arg2, Name_Entity);
                 Check_Arg_Is_Local_Name (Arg1);
!                E_Id := Get_Pragma_Arg (Arg1);
  
!                if Etype (E_Id) = Any_Type then
                    return;
                 end if;
  
!                E := Entity (E_Id);
! 
!                if not Is_Record_Type (E) then
                    Error_Pragma_Arg ("pragma% requires record type", Arg1);
                 end if;
  
!                Set_No_Reordering (Base_Type (E));
              end if;
           end No_Comp_Reordering;
  
--- 21384,21403 ----
              else
                 Check_Optional_Identifier (Arg2, Name_Entity);
                 Check_Arg_Is_Local_Name (Arg1);
!                Type_Id := Get_Pragma_Arg (Arg1);
  
!                Find_Type (Type_Id);
!                Typ := Entity (Type_Id);
! 
!                if Typ = Any_Type then
                    return;
                 end if;
  
!                if not Is_Record_Type (Typ) then
                    Error_Pragma_Arg ("pragma% requires record type", Arg1);
                 end if;
  
!                Set_No_Reordering (Base_Type (Typ));
              end if;
           end No_Comp_Reordering;
  
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_res.adb gcc-16-20250706/gcc/ada/sem_res.adb
*** gcc-16-20250629/gcc/ada/sem_res.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_res.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Res is
*** 12463,12478 ****
           Orig_N := Original_Node (Expression (Orig_N));
           Orig_T := Target_Typ;
  
-          --  If the node is part of a larger expression, the Target_Type
-          --  may not be the original type of the node if the context is a
-          --  condition. Recover original type to see if conversion is needed.
- 
-          if Is_Boolean_Type (Orig_T)
-           and then Nkind (Parent (N)) in N_Op
-          then
-             Orig_T := Etype (Parent (N));
-          end if;
- 
           --  If we have an entity name, then give the warning if the entity
           --  is the right type, or if it is a loop parameter covered by the
           --  original type (that's needed because loop parameters have an
--- 12463,12468 ----
*************** package body Sem_Res is
*** 12548,12553 ****
--- 12538,12553 ----
              then
                 null;
  
+             --  Do not warn if original source-level conversion was
+             --  between two different types.
+ 
+             elsif Nkind (Original_Node (N)) = N_Type_Conversion
+               and then
+                 Base_Type (Etype (Subtype_Mark (Original_Node (N))))
+                   /= Base_Type (Etype (Expression (Original_Node (N))))
+             then
+                null;
+ 
              --  Here we give the redundant conversion warning. If it is an
              --  entity, give the name of the entity in the message. If not,
              --  just mention the expression.
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_util.adb gcc-16-20250706/gcc/ada/sem_util.adb
*** gcc-16-20250629/gcc/ada/sem_util.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_util.adb	Sun Jul  6 22:32:10 2025
*************** with Sem_Attr;       use Sem_Attr;
*** 52,57 ****
--- 52,58 ----
  with Sem_Cat;        use Sem_Cat;
  with Sem_Ch6;        use Sem_Ch6;
  with Sem_Ch8;        use Sem_Ch8;
+ with Sem_Ch12;       use Sem_Ch12;
  with Sem_Ch13;       use Sem_Ch13;
  with Sem_Dim;        use Sem_Dim;
  with Sem_Disp;       use Sem_Disp;
*************** package body Sem_Util is
*** 2176,2181 ****
--- 2177,2183 ----
        Def_Id      : Entity_Id;
        Btyp        : Entity_Id := Base_Type (Typ);
  
+       Predicated_Parent_Used : Boolean := False;
     begin
        --  The Related_Node better be here or else we won't be able to
        --  attach new itypes to a node in the tree.
*************** package body Sem_Util is
*** 2190,2195 ****
--- 2192,2216 ----
          and then Present (Underlying_Type (Btyp))
        then
           Btyp := Underlying_Type (Btyp);
+ 
+       --  If a predicate has been specified for an unconstrained
+       --  ancestor subtype, then that ancestor subtype needs to also
+       --  be an ancestor subtype for the subtype we are building so that
+       --  we don't lose the predicate. It is somewhat ugly here to have
+       --  to replicate the precondition for Predicated_Parent.
+ 
+       elsif Typ in E_Array_Subtype_Id
+                    | E_Record_Subtype_Id
+                    | E_Record_Subtype_With_Private_Id
+         and then Present (Predicated_Parent (Typ))
+       then
+          --  Assert that the following assignment is only changing the
+          --  subtype, not the type.
+ 
+          pragma Assert (Base_Type (Predicated_Parent (Typ)) = Btyp);
+ 
+          Btyp := Predicated_Parent (Typ);
+          Predicated_Parent_Used := True;
        end if;
  
        Indic :=
*************** package body Sem_Util is
*** 2211,2217 ****
  
        Analyze (Subtyp_Decl, Suppress => All_Checks);
  
!       if Is_Itype (Def_Id) and then Has_Predicates (Typ) then
           Inherit_Predicate_Flags (Def_Id, Typ);
  
           --  Indicate where the predicate function may be found
--- 2232,2241 ----
  
        Analyze (Subtyp_Decl, Suppress => All_Checks);
  
!       if Is_Itype (Def_Id)
!         and then Has_Predicates (Typ)
!         and then not Predicated_Parent_Used
!       then
           Inherit_Predicate_Flags (Def_Id, Typ);
  
           --  Indicate where the predicate function may be found
*************** package body Sem_Util is
*** 2686,2691 ****
--- 2710,2724 ----
  
                    Append_Unique_Elmt (N, Identifiers_List);
                 end if;
+ 
+             --  Skip attribute references created by the compiler, typically
+             --  'Constrained applied to one of the writable actuals, to avoid
+             --  spurious errors.
+ 
+             elsif Nkind (N) = N_Attribute_Reference
+               and then not Comes_From_Source (N)
+             then
+                return Skip;
              end if;
  
              return OK;
*************** package body Sem_Util is
*** 10229,10291 ****
            Strval => String_From_Name_Buffer);
     end Get_Default_External_Name;
  
!    --------------------------
!    -- Get_Enclosing_Object --
!    --------------------------
  
!    function Get_Enclosing_Object (N : Node_Id) return Entity_Id is
     begin
        if Is_Entity_Name (N) then
           return Entity (N);
        else
           case Nkind (N) is
!             when N_Indexed_Component
                 | N_Selected_Component
                 | N_Slice
              =>
!                --  If not generating code, a dereference may be left implicit.
!                --  In thoses cases, return Empty.
  
!                if Is_Access_Type (Etype (Prefix (N))) then
!                   return Empty;
!                else
!                   return Get_Enclosing_Object (Prefix (N));
!                end if;
  
!             when N_Type_Conversion =>
!                return Get_Enclosing_Object (Expression (N));
  
              when others =>
                 return Empty;
           end case;
        end if;
!    end Get_Enclosing_Object;
  
!    -------------------------------
!    -- Get_Enclosing_Deep_Object --
!    -------------------------------
  
!    function Get_Enclosing_Deep_Object (N : Node_Id) return Entity_Id is
     begin
        if Is_Entity_Name (N) then
           return Entity (N);
        else
           case Nkind (N) is
!             when N_Explicit_Dereference
!                | N_Indexed_Component
                 | N_Selected_Component
                 | N_Slice
              =>
!                return Get_Enclosing_Deep_Object (Prefix (N));
  
!             when N_Type_Conversion =>
!                return Get_Enclosing_Deep_Object (Expression (N));
  
              when others =>
                 return Empty;
           end case;
        end if;
!    end Get_Enclosing_Deep_Object;
  
     ---------------------------
     -- Get_Enum_Lit_From_Pos --
--- 10262,10330 ----
            Strval => String_From_Name_Buffer);
     end Get_Default_External_Name;
  
!    --------------------------------
!    -- Get_Enclosing_Ghost_Entity --
!    --------------------------------
  
!    function Get_Enclosing_Ghost_Entity (N : Node_Id) return Entity_Id is
     begin
        if Is_Entity_Name (N) then
           return Entity (N);
        else
           case Nkind (N) is
!             when N_Attribute_Reference
!                | N_Explicit_Dereference
!                | N_Indexed_Component
                 | N_Selected_Component
                 | N_Slice
              =>
!                return Get_Enclosing_Ghost_Entity (Prefix (N));
  
!             when N_Function_Call =>
!                return Get_Called_Entity (N);
  
!             --  We are interested in the target type, because if it is ghost,
!             --  then the object is ghost as well and if it is non-ghost, then
!             --  its expression can't be ghost.
! 
!             when N_Qualified_Expression
!                | N_Type_Conversion
!                | N_Unchecked_Type_Conversion
!             =>
!                return Entity (Subtype_Mark (N));
  
              when others =>
                 return Empty;
           end case;
        end if;
!    end Get_Enclosing_Ghost_Entity;
  
!    --------------------------
!    -- Get_Enclosing_Object --
!    --------------------------
  
!    function Get_Enclosing_Object (N : Node_Id) return Entity_Id is
     begin
        if Is_Entity_Name (N) then
           return Entity (N);
        else
           case Nkind (N) is
!             when N_Indexed_Component
                 | N_Selected_Component
                 | N_Slice
              =>
!                return Get_Enclosing_Object (Prefix (N));
  
!             when N_Type_Conversion
!                | N_Unchecked_Type_Conversion
!             =>
!                return Get_Enclosing_Object (Expression (N));
  
              when others =>
                 return Empty;
           end case;
        end if;
!    end Get_Enclosing_Object;
  
     ---------------------------
     -- Get_Enum_Lit_From_Pos --
*************** package body Sem_Util is
*** 12799,12804 ****
--- 12838,12987 ----
        return False;
     end Has_Overriding_Initialize;
  
+    -----------------------------
+    -- Has_Potentially_Invalid --
+    -----------------------------
+ 
+    function Has_Potentially_Invalid (E : Entity_Id) return Boolean is
+ 
+       function Denotes_Invalid_Parameter
+         (Expr  : Node_Id;
+          Param : Entity_Id)
+          return Boolean;
+       --  Returns True iff expression Expr denotes a formal parameter or
+       --  function Param (through its attribute Result).
+ 
+       -------------------------------
+       -- Denotes_Invalid_Parameter --
+       -------------------------------
+ 
+       function Denotes_Invalid_Parameter
+         (Expr  : Node_Id;
+          Param : Entity_Id) return Boolean is
+       begin
+          if Nkind (Expr) in N_Identifier | N_Expanded_Name then
+             return Entity (Expr) = Param;
+          else
+             pragma Assert (Is_Attribute_Result (Expr));
+             return Entity (Prefix (Expr)) = Param;
+          end if;
+       end Denotes_Invalid_Parameter;
+ 
+    --  Start of processing for Has_Potentially_Invalid
+ 
+    begin
+       --  When analyzing, we checked all syntax legality rules for the aspect
+       --  Potentially_Invalid, but didn't store the property anywhere (e.g. as
+       --  an Einfo flag). To query the property we look directly at the AST,
+       --  but now without any syntactic checks.
+ 
+       case Ekind (E) is
+          --  Constants have this aspect attached directly; for deferred
+          --  constants, the aspect is attached to the partial view.
+ 
+          when E_Constant =>
+             return Has_Aspect (E, Aspect_Potentially_Invalid);
+ 
+          --  Variables have this aspect attached directly
+ 
+          when E_Variable =>
+             return Has_Aspect (E, Aspect_Potentially_Invalid);
+ 
+          when Formal_Kind
+             | E_Function
+          =>
+             --  Instances of Ada.Unchecked_Conversion is a special case. Look
+             --  for the aspect on the generic instance. The aspect necessarily
+             --  applies to the function result.
+ 
+             if Is_Unchecked_Conversion_Instance (E) then
+                declare
+                   Wrapper_Pkg : constant Node_Id :=
+                     Defining_Unit_Name (Parent (Subprogram_Spec (E)));
+                   pragma Assert (Is_Wrapper_Package (Wrapper_Pkg));
+                   Instance    : constant Entity_Id := Defining_Unit_Name
+                     (Get_Unit_Instantiation_Node (Wrapper_Pkg));
+                begin
+                   return Has_Aspect (Instance, Aspect_Potentially_Invalid);
+                end;
+             end if;
+ 
+             --  Formal parameters and functions have the Potentially_Invalid
+             --  aspect attached to the subprogram entity and must be listed in
+             --  the aspect expression.
+ 
+             declare
+                Subp_Id     : Entity_Id;
+                Aspect_Expr : Node_Id;
+                Param_Expr  : Node_Id;
+                Assoc       : Node_Id;
+ 
+             begin
+                if Is_Formal (E) then
+                   Subp_Id := Scope (E);
+                else
+                   Subp_Id := E;
+                end if;
+ 
+                if Has_Aspect (Subp_Id, Aspect_Potentially_Invalid) then
+                   Aspect_Expr :=
+                     Find_Value_Of_Aspect
+                       (Subp_Id, Aspect_Potentially_Invalid);
+ 
+                   --  Aspect expression is either an aggregate with an optional
+                   --  Boolean expression (which defaults to True), e.g.:
+                   --
+                   --    function F (X : Integer) return Integer
+                   --      with Potentially_Invalid => (X => True, F'Result);
+ 
+                   if Nkind (Aspect_Expr) = N_Aggregate then
+ 
+                      if Present (Component_Associations (Aspect_Expr)) then
+                         Assoc := First (Component_Associations (Aspect_Expr));
+ 
+                         while Present (Assoc) loop
+                            if Denotes_Invalid_Parameter
+                              (First (Choices (Assoc)), E)
+                            then
+                               return
+                                 Is_True
+                                   (Static_Boolean (Expression (Assoc)));
+                            end if;
+ 
+                            Next (Assoc);
+                         end loop;
+                      end if;
+ 
+                      Param_Expr := First (Expressions (Aspect_Expr));
+ 
+                      while Present (Param_Expr) loop
+                         if Denotes_Invalid_Parameter (Param_Expr, E) then
+                            return True;
+                         end if;
+ 
+                         Next (Param_Expr);
+                      end loop;
+ 
+                      return False;
+ 
+                   --  or it is a single identifier, e.g.:
+                   --
+                   --    function F (X : Integer) return Integer
+                   --      with Potentially_Invalid => X;
+ 
+                   else
+                      return Denotes_Invalid_Parameter (Aspect_Expr, E);
+                   end if;
+                else
+                   return False;
+                end if;
+             end;
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+    end Has_Potentially_Invalid;
+ 
     --------------------------------------
     -- Has_Preelaborable_Initialization --
     --------------------------------------
*************** package body Sem_Util is
*** 23162,23172 ****
        then
           return True;
  
-       --  Mutably tagged types require default initialization
- 
-       elsif Is_Mutably_Tagged_CW_Equivalent_Type (Typ) then
-          return True;
- 
        --  If Initialize/Normalize_Scalars is in effect, string objects also
        --  need initialization, unless they are created in the course of
        --  expanding an aggregate (since in the latter case they will be
--- 23345,23350 ----
*************** package body Sem_Util is
*** 23934,23940 ****
  
           Result := N;
  
!          if N > Empty_Or_Error then
              pragma Assert (Nkind (N) not in N_Entity);
  
              Result := New_Copy (N);
--- 24112,24118 ----
  
           Result := N;
  
!          if N not in Empty | Error then
              pragma Assert (Nkind (N) not in N_Entity);
  
              Result := New_Copy (N);
*************** package body Sem_Util is
*** 24015,24021 ****
  
           Result := Id;
  
!          if Id > Empty_Or_Error then
              pragma Assert (Nkind (Id) in N_Entity);
  
              --  Determine whether the entity has a corresponding new entity
--- 24193,24199 ----
  
           Result := Id;
  
!          if Id not in Empty | Error then
              pragma Assert (Nkind (Id) in N_Entity);
  
              --  Determine whether the entity has a corresponding new entity
*************** package body Sem_Util is
*** 24129,24135 ****
              Next (Old_Act);
           end loop;
  
!          pragma Assert (Replaced);
        end Update_Controlling_Argument;
  
        -------------------------------
--- 24307,24315 ----
              Next (Old_Act);
           end loop;
  
!          if Nkind (Old_Call) /= N_Function_Call then
!             pragma Assert (Replaced);
!          end if;
        end Update_Controlling_Argument;
  
        -------------------------------
*************** package body Sem_Util is
*** 24986,24992 ****
              --  In case of a call rewritten in GNATprove mode while "inlining
              --  for proof" go to the original call.
  
!             elsif Nkind (Par) = N_Null_Statement then
                 pragma Assert
                   (GNATprove_Mode
                      and then
--- 25166,25172 ----
              --  In case of a call rewritten in GNATprove mode while "inlining
              --  for proof" go to the original call.
  
!             elsif Nkind (Par) in N_Null_Statement | N_Block_Statement then
                 pragma Assert
                   (GNATprove_Mode
                      and then
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_util.ads gcc-16-20250706/gcc/ada/sem_util.ads
*** gcc-16-20250629/gcc/ada/sem_util.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_util.ads	Sun Jul  6 22:32:10 2025
*************** package Sem_Util is
*** 1139,1153 ****
     --  identifier provided as the external name. Letters in the name are
     --  according to the setting of Opt.External_Name_Default_Casing.
  
     function Get_Enclosing_Object (N : Node_Id) return Entity_Id;
     --  If expression N references a part of an object, return this object.
     --  Otherwise return Empty. Expression N should have been resolved already.
  
!    function Get_Enclosing_Deep_Object (N : Node_Id) return Entity_Id;
!    --  If expression N references a reachable part of an object (as defined in
!    --  SPARK RM 6.9), return this object. Otherwise return Empty. It is similar
!    --  to Get_Enclosing_Object, but treats pointer dereference like component
!    --  selection. Expression N should have been resolved already.
  
     function Get_Generic_Entity (N : Node_Id) return Entity_Id;
     --  Returns the true generic entity in an instantiation. If the name in the
--- 1139,1165 ----
     --  identifier provided as the external name. Letters in the name are
     --  according to the setting of Opt.External_Name_Default_Casing.
  
+    function Get_Enclosing_Ghost_Entity (N : Node_Id) return Entity_Id;
+    --  If expression N references a name of either an object or of a
+    --  subprogram, then return its outermost entity that determines
+    --  whether this name denotes a ghost object.
+ 
     function Get_Enclosing_Object (N : Node_Id) return Entity_Id;
     --  If expression N references a part of an object, return this object.
     --  Otherwise return Empty. Expression N should have been resolved already.
  
!    function Get_Enum_Lit_From_Pos
!      (T   : Entity_Id;
!       Pos : Uint;
!       Loc : Source_Ptr) return Node_Id;
!    --  This function returns an identifier denoting the E_Enumeration_Literal
!    --  entity for the specified value from the enumeration type or subtype T.
!    --  The second argument is the Pos value. Constraint_Error is raised if
!    --  argument Pos is not in range. The third argument supplies a source
!    --  location for constructed nodes returned by this function. If No_Location
!    --  is supplied as source location, the location of the returned node is
!    --  copied from the original source location for the enumeration literal,
!    --  when available.
  
     function Get_Generic_Entity (N : Node_Id) return Entity_Id;
     --  Returns the true generic entity in an instantiation. If the name in the
*************** package Sem_Util is
*** 1214,1232 ****
     --  When flag Do_Checks is set, this routine will flag duplicate uses of
     --  aspects.
  
-    function Get_Enum_Lit_From_Pos
-      (T   : Entity_Id;
-       Pos : Uint;
-       Loc : Source_Ptr) return Node_Id;
-    --  This function returns an identifier denoting the E_Enumeration_Literal
-    --  entity for the specified value from the enumeration type or subtype T.
-    --  The second argument is the Pos value. Constraint_Error is raised if
-    --  argument Pos is not in range. The third argument supplies a source
-    --  location for constructed nodes returned by this function. If No_Location
-    --  is supplied as source location, the location of the returned node is
-    --  copied from the original source location for the enumeration literal,
-    --  when available.
- 
     function Get_Iterable_Type_Primitive
       (Typ : Entity_Id;
        Nam : Name_Id) return Entity_Id;
--- 1226,1231 ----
*************** package Sem_Util is
*** 1522,1527 ****
--- 1521,1532 ----
     --  non-null), which causes the type to not have preelaborable
     --  initialization.
  
+    function Has_Potentially_Invalid (E : Entity_Id) return Boolean;
+    --  Returns True iff entity E is subject to the Potentially_Invalid aspect.
+    --  Entity E can be either variable, constant, subprogram or entry. For
+    --  private types and deferred constants E should be the private view,
+    --  because aspect can only be attached there.
+ 
     function Has_Preelaborable_Initialization
       (E                 : Entity_Id;
        Preelab_Init_Expr : Node_Id := Empty) return Boolean;
*************** package Sem_Util is
*** 2444,2458 ****
     --  Determine whether an arbitrary entity denotes an instance of function
     --  Ada.Unchecked_Conversion.
  
-    function Is_Universal_Numeric_Type (T : Entity_Id) return Boolean;
-    pragma Inline (Is_Universal_Numeric_Type);
-    --  True if T is Universal_Integer or Universal_Real
- 
     function Is_Unconstrained_Or_Tagged_Item (Item : Entity_Id) return Boolean;
     --  Subsidiary to Collect_Subprogram_Inputs_Outputs and the analysis of
     --  pragma Depends. Determine whether the type of dependency item Item is
     --  tagged, unconstrained array or unconstrained record.
  
     function Is_User_Defined_Equality (Id : Entity_Id) return Boolean;
     --  Determine whether an entity denotes a user-defined equality
  
--- 2449,2463 ----
     --  Determine whether an arbitrary entity denotes an instance of function
     --  Ada.Unchecked_Conversion.
  
     function Is_Unconstrained_Or_Tagged_Item (Item : Entity_Id) return Boolean;
     --  Subsidiary to Collect_Subprogram_Inputs_Outputs and the analysis of
     --  pragma Depends. Determine whether the type of dependency item Item is
     --  tagged, unconstrained array or unconstrained record.
  
+    function Is_Universal_Numeric_Type (T : Entity_Id) return Boolean;
+    pragma Inline (Is_Universal_Numeric_Type);
+    --  True if T is Universal_Integer or Universal_Real
+ 
     function Is_User_Defined_Equality (Id : Entity_Id) return Boolean;
     --  Determine whether an entity denotes a user-defined equality
  
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_warn.adb gcc-16-20250706/gcc/ada/sem_warn.adb
*** gcc-16-20250629/gcc/ada/sem_warn.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_warn.adb	Sun Jul  6 22:32:10 2025
*************** package body Sem_Warn is
*** 3464,3469 ****
--- 3464,3487 ----
        end if;
     end Warn_On_Constant_Valid_Condition;
  
+    ---------------------------------------
+    -- Warn_On_Ignored_Equality_Operator --
+    ---------------------------------------
+ 
+    procedure Warn_On_Ignored_Equality_Operator
+      (Typ      : Entity_Id;
+       Comp_Typ : Entity_Id;
+       Loc      : Source_Ptr) is
+    begin
+       if Warn_On_Ignored_Equality then
+          Error_Msg_Node_2 := Comp_Typ;
+          Error_Msg_N ("?_q?""="" for type & uses predefined ""="" for }", Typ);
+ 
+          Error_Msg_Sloc := Loc;
+          Error_Msg_N ("\?_q?""="" # is ignored here", Typ);
+       end if;
+    end Warn_On_Ignored_Equality_Operator;
+ 
     -----------------------------
     -- Warn_On_Known_Condition --
     -----------------------------
*************** package body Sem_Warn is
*** 4743,4749 ****
        Ent : Entity_Id;
  
     begin
!       if Warn_On_Modified_Unread
          and then In_Extended_Main_Source_Unit (E)
        then
           Ent := First_Entity (E);
--- 4761,4767 ----
        Ent : Entity_Id;
  
     begin
!       if (Warn_On_Modified_Unread or Warn_On_All_Unread_Out_Parameters)
          and then In_Extended_Main_Source_Unit (E)
        then
           Ent := First_Entity (E);
diff -Nrcpad gcc-16-20250629/gcc/ada/sem_warn.ads gcc-16-20250706/gcc/ada/sem_warn.ads
*** gcc-16-20250629/gcc/ada/sem_warn.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sem_warn.ads	Sun Jul  6 22:32:10 2025
*************** package Sem_Warn is
*** 173,178 ****
--- 173,187 ----
     --  Op assuming that its scalar operands are valid. Emit a warning when the
     --  result of the evaluation is True or False.
  
+    procedure Warn_On_Ignored_Equality_Operator
+      (Typ      : Entity_Id;
+       Comp_Typ : Entity_Id;
+       Loc      : Source_Ptr);
+    --  Typ is a composite type and Comp_Typ is the type of one of its
+    --  components. Output a warning notifying that the predefined "="
+    --  for Comp_Typ takes precedence over the user-defined equality
+    --  defined at the given location.
+ 
     procedure Warn_On_Known_Condition (C : Node_Id);
     --  C is a node for a boolean expression resulting from a relational
     --  or membership operation. If the expression has a compile time known
diff -Nrcpad gcc-16-20250629/gcc/ada/sfn_scan.adb gcc-16-20250706/gcc/ada/sfn_scan.adb
*** gcc-16-20250629/gcc/ada/sfn_scan.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sfn_scan.adb	Sun Jul  6 22:32:10 2025
*************** package body SFN_Scan is
*** 261,268 ****
        if At_EOF then
           Error ("unexpected end of file");
        end if;
- 
-       return;
     end Check_Not_At_EOF;
  
     -----------------
--- 261,266 ----
diff -Nrcpad gcc-16-20250629/gcc/ada/sinfo-utils.adb gcc-16-20250706/gcc/ada/sinfo-utils.adb
*** gcc-16-20250629/gcc/ada/sinfo-utils.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sinfo-utils.adb	Sun Jul  6 22:32:10 2025
*************** package body Sinfo.Utils is
*** 347,352 ****
--- 347,365 ----
        end if;
     end Get_Pragma_Arg;
  
+    -----------------------
+    -- Loop_Flow_Keyword --
+    -----------------------
+ 
+    function Loop_Flow_Keyword (N : N_Loop_Flow_Statement_Id) return String is
+    begin
+       case Nkind (N) is
+          when N_Continue_Statement => return "continue";
+          when N_Exit_Statement => return "exit";
+          when others => pragma Assert (False);
+       end case;
+    end Loop_Flow_Keyword;
+ 
     procedure Destroy_Element (Elem : in out Union_Id);
     --  Does not do anything but is used to instantiate
     --  GNAT.Lists.Doubly_Linked_Lists.
diff -Nrcpad gcc-16-20250629/gcc/ada/sinfo-utils.ads gcc-16-20250706/gcc/ada/sinfo-utils.ads
*** gcc-16-20250629/gcc/ada/sinfo-utils.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sinfo-utils.ads	Sun Jul  6 22:32:10 2025
*************** package Sinfo.Utils is
*** 137,142 ****
--- 137,146 ----
     --  for the argument. This is Arg itself, or, in the case where Arg is a
     --  pragma argument association node, the expression from this node.
  
+    function Loop_Flow_Keyword (N : N_Loop_Flow_Statement_Id) return String;
+    --  Returns the keyword corresponding to N as a string, for use in
+    --  diagnostics.
+ 
     function Lowest_Common_Ancestor (N1, N2 : Node_Id) return Union_Id;
     --  Returns the list or node that is the lowest common ancestor of N1 and
     --  N2 in the syntax tree.
diff -Nrcpad gcc-16-20250629/gcc/ada/sinfo.ads gcc-16-20250706/gcc/ada/sinfo.ads
*** gcc-16-20250629/gcc/ada/sinfo.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sinfo.ads	Sun Jul  6 22:32:10 2025
*************** package Sinfo is
*** 2312,2317 ****
--- 2312,2326 ----
     --    entity of the original entity, operator, or subprogram being invoked,
     --    or the original variable being read or written.
  
+    --  Call_Or_Target_Loop
+    --    Present in continue statements. Set by Analyze_Continue_Statement and
+    --    used by Expand_Continue_Statement. If Analyze_Continue_Statement
+    --    concluded that its input node was in fact a call to a procedure named
+    --    "Continue", it contains the corresponding N_Procedure_Call_Statement
+    --    node. Otherwise it contains the E_Loop_Id of the loop the continue
+    --    statement applies to. Finally, if Analyze_Continue_Statement detects
+    --    an error, this field is set to Empty.
+ 
     --  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
*************** package Sinfo is
*** 5207,5212 ****
--- 5216,5238 ----
        --  Condition (set to Empty if no WHEN part present)
        --  Next_Exit_Statement : Next exit on chain
  
+       ------------------------
+       -- Continue Statement --
+       ------------------------
+ 
+       --  This is a GNAT extension
+ 
+       --  CONTINUE_STATEMENT ::= continue [loop_NAME] [when CONDITION];
+ 
+       --  Gigi restriction: The expander ensures that the type of the Condition
+       --  field is always Standard.Boolean, even if the type in the source is
+       --  some non-standard boolean type.
+ 
+       --  N_Continue_Statement
+       --  Sloc points to CONTINUE
+       --  Name (set to Empty if no loop name present)
+       --  Condition (set to Empty if no WHEN part present)
+ 
        -------------------------
        -- 5.9  Goto Statement --
        -------------------------
diff -Nrcpad gcc-16-20250629/gcc/ada/snames.ads-tmpl gcc-16-20250706/gcc/ada/snames.ads-tmpl
*** gcc-16-20250629/gcc/ada/snames.ads-tmpl	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/snames.ads-tmpl	Sun Jul  6 22:32:10 2025
*************** package Snames is
*** 164,169 ****
--- 164,170 ----
     Name_Local_Restrictions             : constant Name_Id := N + $;
     Name_No_Controlled_Parts            : constant Name_Id := N + $;
     Name_No_Task_Parts                  : constant Name_Id := N + $;
+    Name_Potentially_Invalid            : constant Name_Id := N + $;
     Name_Real_Literal                   : constant Name_Id := N + $;
     Name_Relaxed_Initialization         : constant Name_Id := N + $;
     Name_Stable_Properties              : constant Name_Id := N + $;
*************** package Snames is
*** 1391,1396 ****
--- 1392,1398 ----
     --  e.g. Name_UP_RESULT maps to "RESULT".
  
     Name_Synchronous_Task_Control         : constant Name_Id := N + $;
+    Name_Continue                         : constant Name_Id := N + $;
  
     --  Names used to implement iterators over predefined containers
  
diff -Nrcpad gcc-16-20250629/gcc/ada/socket.c gcc-16-20250706/gcc/ada/socket.c
*** gcc-16-20250629/gcc/ada/socket.c	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/socket.c	Sun Jul  6 22:32:10 2025
*************** __gnat_gethostbyname (const char *name,
*** 280,289 ****
      return -1;
    }
    ret->h_name      = name;
!   ret->h_aliases   = &vxw_h_aliases;
    ret->h_addrtype  = AF_INET;
    ret->h_length    = 4;
!   ret->h_addr_list = &vxw_h_addr_list;
    return 0;
  }
  
--- 280,289 ----
      return -1;
    }
    ret->h_name      = name;
!   ret->h_aliases   = vxw_h_aliases;
    ret->h_addrtype  = AF_INET;
    ret->h_length    = 4;
!   ret->h_addr_list = vxw_h_addr_list;
    return 0;
  }
  
*************** __gnat_gethostbyaddr (const char *addr,
*** 302,319 ****
      return -1;
    }
  
!   if (hostGetByAddr (*(int*)addr, &vxw_h_name) != OK) {
      *h_errnop = __gnat_get_h_errno ();
      return -1;
    }
  
    vxw_h_addr       = (long) addr;
  
!   ret->h_name      = &vxw_h_name;
!   ret->h_aliases   = &vxw_h_aliases;
    ret->h_addrtype  = AF_INET;
    ret->h_length    = 4;
!   ret->h_addr_list = &vxw_h_addr_list;
    return 0;
  }
  
--- 302,319 ----
      return -1;
    }
  
!   if (hostGetByAddr (*(int*)addr, vxw_h_name) != OK) {
      *h_errnop = __gnat_get_h_errno ();
      return -1;
    }
  
    vxw_h_addr       = (long) addr;
  
!   ret->h_name      = vxw_h_name;
!   ret->h_aliases   = vxw_h_aliases;
    ret->h_addrtype  = AF_INET;
    ret->h_length    = 4;
!   ret->h_addr_list = vxw_h_addr_list;
    return 0;
  }
  
diff -Nrcpad gcc-16-20250629/gcc/ada/sprint.adb gcc-16-20250706/gcc/ada/sprint.adb
*** gcc-16-20250629/gcc/ada/sprint.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/sprint.adb	Sun Jul  6 22:32:10 2025
*************** package body Sprint is
*** 1772,1779 ****
              Sprint_Node (Name (Node));
              Write_Char (';');
  
!          when N_Exit_Statement =>
!             Write_Indent_Str_Sloc ("exit");
              Sprint_Opt_Node (Name (Node));
  
              if Present (Condition (Node)) then
--- 1772,1779 ----
              Sprint_Node (Name (Node));
              Write_Char (';');
  
!          when N_Loop_Flow_Statement =>
!             Write_Indent_Str_Sloc (Loop_Flow_Keyword (Node));
              Sprint_Opt_Node (Name (Node));
  
              if Present (Condition (Node)) then
*************** package body Sprint is
*** 4634,4640 ****
                             Param : Entity_Id;
  
                          begin
!                            Param := First_Entity (Typ);
                             loop
                                Write_Id (Param);
                                Write_Str (" : ");
--- 4634,4640 ----
                             Param : Entity_Id;
  
                          begin
!                            Param := First_Formal (Typ);
                             loop
                                Write_Id (Param);
                                Write_Str (" : ");
*************** package body Sprint is
*** 4646,4652 ****
                                end if;
  
                                Write_Id (Etype (Param));
!                               Next_Entity (Param);
                                exit when No (Param);
                                Write_Str (", ");
                             end loop;
--- 4646,4652 ----
                                end if;
  
                                Write_Id (Etype (Param));
!                               Next_Formal (Param);
                                exit when No (Param);
                                Write_Str (", ");
                             end loop;
diff -Nrcpad gcc-16-20250629/gcc/ada/tbuild.adb gcc-16-20250706/gcc/ada/tbuild.adb
*** gcc-16-20250629/gcc/ada/tbuild.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/tbuild.adb	Sun Jul  6 22:32:10 2025
*************** package body Tbuild is
*** 926,936 ****
        --  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);
--- 926,936 ----
        --  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
!       --  "not Is_Scalar_Type" checks avoid such cases.
  
        elsif Nkind (Expr) = N_Unchecked_Type_Conversion
!         and then not Is_Scalar_Type (Etype (Expr))
!         and then not Is_Scalar_Type (Typ)
        then
           Set_Subtype_Mark (Expr, New_Occurrence_Of (Typ, Loc));
           Result := Relocate_Node (Expr);
diff -Nrcpad gcc-16-20250629/gcc/ada/treepr.adb gcc-16-20250706/gcc/ada/treepr.adb
*** gcc-16-20250629/gcc/ada/treepr.adb	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/treepr.adb	Sun Jul  6 22:32:10 2025
*************** package body Treepr is
*** 412,417 ****
--- 412,445 ----
  
     procedure pe (N : Union_Id) renames pn;
  
+    ---------
+    -- pec --
+    ---------
+ 
+    procedure pec (From : Entity_Id) is
+    begin
+       Push_Output;
+       Set_Standard_Output;
+ 
+       Print_Entity_Chain (From);
+ 
+       Pop_Output;
+    end pec;
+ 
+    ----------
+    -- rpec --
+    ----------
+ 
+    procedure rpec (From : Entity_Id) is
+    begin
+       Push_Output;
+       Set_Standard_Output;
+ 
+       Print_Entity_Chain (From, Rev => True);
+ 
+       Pop_Output;
+    end rpec;
+ 
     --------
     -- pl --
     --------
*************** package body Treepr is
*** 589,594 ****
--- 617,652 ----
        end if;
     end Print_End_Span;
  
+    ------------------------
+    -- Print_Entity_Chain --
+    ------------------------
+ 
+    procedure Print_Entity_Chain (From : Entity_Id; Rev : Boolean := False) is
+       Ent : Entity_Id := From;
+    begin
+       Printing_Descendants := False;
+       Phase := Printing;
+ 
+       loop
+          declare
+             Next_Ent : constant Entity_Id :=
+               (if Rev then Prev_Entity (Ent) else Next_Entity (Ent));
+ 
+             Prefix_Char : constant Character :=
+               (if Present (Next_Ent) then '|' else ' ');
+          begin
+             Print_Node (Ent, "", Prefix_Char);
+ 
+             exit when No (Next_Ent);
+ 
+             Ent := Next_Ent;
+ 
+             Print_Char ('|');
+             Print_Eol;
+          end;
+       end loop;
+    end Print_Entity_Chain;
+ 
     -----------------------
     -- Print_Entity_Info --
     -----------------------
*************** package body Treepr is
*** 1144,1151 ****
        end if;
  
        if not Is_List_Member (N) then
!          Print_Str (Prefix_Str);
!          Print_Str (" Parent = ");
           Print_Node_Ref (Parent (N));
           Print_Eol;
        end if;
--- 1202,1209 ----
        end if;
  
        if not Is_List_Member (N) then
!          Print_Str (Prefix);
!          Print_Str ("Parent = ");
           Print_Node_Ref (Parent (N));
           Print_Eol;
        end if;
*************** package body Treepr is
*** 1957,1973 ****
           --  Case of descendant is a node
  
           if D in Node_Range then
- 
-             --  Don't bother about Empty or Error descendants
- 
-             if D <= Union_Id (Empty_Or_Error) then
-                return;
-             end if;
- 
              declare
                 Nod : constant Node_Or_Entity_Id := Node_Or_Entity_Id (D);
  
              begin
                 --  Descendants in one of the standardly compiled internal
                 --  packages are normally ignored, unless the parent is also
                 --  in such a package (happens when Standard itself is output)
--- 2015,2030 ----
           --  Case of descendant is a node
  
           if D in Node_Range then
              declare
                 Nod : constant Node_Or_Entity_Id := Node_Or_Entity_Id (D);
  
              begin
+                --  Don't bother about Empty or Error descendants
+ 
+                if Nod in Empty | Error then
+                   return;
+                end if;
+ 
                 --  Descendants in one of the standardly compiled internal
                 --  packages are normally ignored, unless the parent is also
                 --  in such a package (happens when Standard itself is output)
diff -Nrcpad gcc-16-20250629/gcc/ada/treepr.ads gcc-16-20250706/gcc/ada/treepr.ads
*** gcc-16-20250629/gcc/ada/treepr.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/treepr.ads	Sun Jul  6 22:32:10 2025
*************** package Treepr is
*** 60,65 ****
--- 60,71 ----
     --  Prints the subtree consisting of the given element list and all its
     --  referenced descendants.
  
+    procedure Print_Entity_Chain (From : Entity_Id; Rev : Boolean := False);
+    --  Prints the entity chain From is on, starting from From. In other words,
+    --  prints From and then recursively follow the Next_Entity field. If Rev is
+    --  True, prints the chain backwards, i.e. follow the Last_Entity field
+    --  instead of Next_Entity.
+ 
     --  The following debugging procedures are intended to be called from gdb.
     --  Note that in several cases there are synonyms which represent historical
     --  development, and we keep them because some people are used to them!
*************** package Treepr is
*** 103,106 ****
--- 109,120 ----
     --  on the left and add a minus sign. This just saves some typing in the
     --  debugger.
  
+    procedure pec (From : Entity_Id);
+    pragma Export (Ada, pec);
+    --  Print From and the entities that follow it on its entity chain
+ 
+    procedure rpec (From : Entity_Id);
+    pragma Export (Ada, rpec);
+    --  Like pec, but walk the entity chain backwards. The 'r' stands for
+    --  "reverse".
  end Treepr;
diff -Nrcpad gcc-16-20250629/gcc/ada/types.ads gcc-16-20250706/gcc/ada/types.ads
*** gcc-16-20250629/gcc/ada/types.ads	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/types.ads	Sun Jul  6 22:32:10 2025
*************** package Types is
*** 431,441 ****
     --  Used to indicate an error in the source program. A node is actually
     --  allocated with this Id value, so that Nkind (Error) = N_Error.
  
-    Empty_Or_Error : constant Node_Id := Error;
-    --  Since Empty and Error are the first two Node_Id values, the test for
-    --  N <= Empty_Or_Error tests to see if N is Empty or Error. This definition
-    --  provides convenient self-documentation for such tests.
- 
     First_Node_Id  : constant Node_Id := Node_Low_Bound;
     --  Subscript of first allocated node. Note that Empty and Error are both
     --  allocated nodes, whose Nkind fields can be accessed without error.
--- 431,436 ----
*************** package Types is
*** 947,953 ****
        SE_Object_Too_Large,               -- 35
        PE_Stream_Operation_Not_Allowed,   -- 36
        PE_Build_In_Place_Mismatch,        -- 37
!       PE_Raise_Check_Failed);            -- 38
     pragma Convention (C, RT_Exception_Code);
  
     Last_Reason_Code : constant :=
--- 942,949 ----
        SE_Object_Too_Large,               -- 35
        PE_Stream_Operation_Not_Allowed,   -- 36
        PE_Build_In_Place_Mismatch,        -- 37
!       PE_Raise_Check_Failed,             -- 38
!       PE_Abstract_Type_Component);       -- 39
     pragma Convention (C, RT_Exception_Code);
  
     Last_Reason_Code : constant :=
*************** package Types is
*** 973,978 ****
--- 969,975 ----
                CE_Range_Check_Failed             => CE_Reason,
                CE_Tag_Check_Failed               => CE_Reason,
  
+               PE_Abstract_Type_Component        => PE_Reason,
                PE_Access_Before_Elaboration      => PE_Reason,
                PE_Accessibility_Check_Failed     => PE_Reason,
                PE_Address_Of_Intrinsic           => PE_Reason,
diff -Nrcpad gcc-16-20250629/gcc/ada/types.h gcc-16-20250706/gcc/ada/types.h
*** gcc-16-20250629/gcc/ada/types.h	Sun Jun 29 22:32:25 2025
--- gcc-16-20250706/gcc/ada/types.h	Sun Jul  6 22:32:10 2025
*************** enum RT_Exception_Code
*** 431,437 ****
    SE_Object_Too_Large               = 35,
    PE_Stream_Operation_Not_Allowed   = 36,
    PE_Build_In_Place_Mismatch        = 37,
!   PE_Raise_Check_Failed             = 38
  };
  
! #define LAST_REASON_CODE 38
--- 431,438 ----
    SE_Object_Too_Large               = 35,
    PE_Stream_Operation_Not_Allowed   = 36,
    PE_Build_In_Place_Mismatch        = 37,
!   PE_Raise_Check_Failed             = 38,
!   PE_Abstract_Type_Component        = 39
  };
  
! #define LAST_REASON_CODE 39
diff -Nrcpad gcc-16-20250629/gcc/analyzer/ChangeLog gcc-16-20250706/gcc/analyzer/ChangeLog
*** gcc-16-20250629/gcc/analyzer/ChangeLog	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/ChangeLog	Sun Jul  6 22:32:10 2025
***************
*** 1,3 ****
--- 1,91 ----
+ 2025-06-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* access-diagram.cc: Use nullptr rather than NULL where
+ 	appropriate.
+ 	* analyzer-language.cc: Likewise.
+ 	* analyzer-language.h: Likewise.
+ 	* analyzer-logging.h: Likewise.
+ 	* analyzer-pass.cc: Likewise.
+ 	* analyzer.cc: Likewise.
+ 	* bounds-checking.cc: Likewise.
+ 	* call-details.cc: Likewise.
+ 	* call-string.cc: Likewise.
+ 	* call-string.h: Likewise.
+ 	* call-summary.cc: Likewise.
+ 	* checker-event.cc: Likewise.
+ 	* common.h: Likewise.
+ 	* constraint-manager.cc: Likewise.
+ 	* constraint-manager.h: Likewise.
+ 	* diagnostic-manager.cc: Likewise.
+ 	* engine.cc: Likewise.
+ 	* exploded-graph.h: Likewise.
+ 	* function-set.cc: Likewise
+ 	* infinite-recursion.cc: Likewise
+ 	* inlining-iterator.h: Likewise
+ 	* kf.cc: Likewise
+ 	* known-function-manager.cc: Likewise
+ 	* pending-diagnostic.cc: Likewise
+ 	* program-point.cc: Likewise
+ 	* program-point.h: Likewise
+ 	* program-state.cc: Likewise
+ 	* program-state.h: Likewise
+ 	* record-layout.cc: Likewise
+ 	* region-model-asm.cc: Likewise
+ 	* region-model-manager.cc: Likewise
+ 	* region-model-manager.h: Likewise
+ 	* region-model-reachability.cc: Likewise
+ 	* region-model.cc: Likewise
+ 	* region-model.h: Likewise
+ 	* region.cc: Likewise
+ 	* region.h: Likewise
+ 	* sm-fd.cc: Likewise
+ 	* sm-malloc.cc: Likewise
+ 	* sm-pattern-test.cc: Likewise
+ 	* sm-signal.cc: Likewise
+ 	* sm-taint.cc: Likewise
+ 	* sm.cc: Likewise
+ 	* sm.h: Likewise
+ 	* state-purge.cc: Likewise
+ 	* state-purge.h: Likewise
+ 	* store.cc: Likewise
+ 	* store.h: Likewise
+ 	* supergraph.cc: Likewise
+ 	* supergraph.h: Likewise
+ 	* svalue.cc: Likewise
+ 	* svalue.h: Likewise
+ 	* varargs.cc: Likewise
+ 
+ 2025-06-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* checker-event.cc (function_entry_event::get_meaning): Convert
+ 	diagnostic_event::meaning enums to enum class.
+ 	(cfg_edge_event::get_meaning): Likewise.
+ 	(call_event::get_meaning): Likewise.
+ 	(return_event::get_meaning): Likewise.
+ 	(start_consolidated_cfg_edges_event::get_meaning): Likewise.
+ 	(inlined_call_event::get_meaning): Likewise.
+ 	(warning_event::get_meaning): Likewise.
+ 	* sm-fd.cc (fd_diagnostic::get_meaning_for_state_change):
+ 	Likewise.
+ 	* sm-file.cc (file_diagnostic::get_meaning_for_state_change):
+ 	Likewise.
+ 	* sm-malloc.cc (malloc_diagnostic::get_meaning_for_state_change):
+ 	Likewise.
+ 	* sm-sensitive.cc
+ 	(exposure_through_output_file::get_meaning_for_state_change):
+ 	Likewise.
+ 	* sm-taint.cc (taint_diagnostic::get_meaning_for_state_change):
+ 	Likewise.
+ 	* varargs.cc
+ 	(va_list_sm_diagnostic::get_meaning_for_state_change): Likewise.
+ 
+ 2025-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120520
+ 	PR c/117023
+ 	* sm-malloc.cc (malloc_state_machine::on_stmt): Handle 3 argument
+ 	nonnull_if_nonzero attribute.
+ 
  2025-06-23  David Malcolm  <dmalcolm@redhat.com>
  
  	* region-model.cc
diff -Nrcpad gcc-16-20250629/gcc/analyzer/access-diagram.cc gcc-16-20250706/gcc/analyzer/access-diagram.cc
*** gcc-16-20250629/gcc/analyzer/access-diagram.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/access-diagram.cc	Sun Jul  6 22:32:10 2025
*************** public:
*** 1116,1122 ****
        {
  	logger.start_log_line ();
  	logger.log_partial ("table_x: %i", table_x);
! 	access_range range_for_column (NULL, bit_range (0, 0));
  	if (maybe_get_access_range_for_table_x (table_x, &range_for_column))
  	  {
  	    logger.log_partial (": range: ");
--- 1116,1122 ----
        {
  	logger.start_log_line ();
  	logger.log_partial ("table_x: %i", table_x);
! 	access_range range_for_column (nullptr, bit_range (0, 0));
  	if (maybe_get_access_range_for_table_x (table_x, &range_for_column))
  	  {
  	    logger.log_partial (": range: ");
*************** private:
*** 2244,2250 ****
      for (int table_x = 0; table_x < t.get_size ().w; table_x++)
        {
  	const int table_y = 1;
! 	access_range range_for_column (NULL, bit_range (0, 0));
  	if (m_btm.maybe_get_access_range_for_table_x (table_x,
  						      &range_for_column))
  	  {
--- 2244,2250 ----
      for (int table_x = 0; table_x < t.get_size ().w; table_x++)
        {
  	const int table_y = 1;
! 	access_range range_for_column (nullptr, bit_range (0, 0));
  	if (m_btm.maybe_get_access_range_for_table_x (table_x,
  						      &range_for_column))
  	  {
*************** private:
*** 2495,2501 ****
      std::vector<bit_offset_t> bit_sizes (num_columns);
      for (unsigned table_x = 0; table_x < num_columns; table_x++)
        {
! 	access_range range_for_column (NULL, bit_range (0, 0));
  	if (m_btm.maybe_get_access_range_for_table_x (table_x,
  						      &range_for_column))
  	  {
--- 2495,2501 ----
      std::vector<bit_offset_t> bit_sizes (num_columns);
      for (unsigned table_x = 0; table_x < num_columns; table_x++)
        {
! 	access_range range_for_column (nullptr, bit_range (0, 0));
  	if (m_btm.maybe_get_access_range_for_table_x (table_x,
  						      &range_for_column))
  	  {
diff -Nrcpad gcc-16-20250629/gcc/analyzer/analyzer-language.cc gcc-16-20250706/gcc/analyzer/analyzer-language.cc
*** gcc-16-20250629/gcc/analyzer/analyzer-language.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/analyzer-language.cc	Sun Jul  6 22:32:10 2025
*************** on_finish_translation_unit (const transl
*** 114,120 ****
      return;
  
    FILE *logfile = get_or_create_any_logfile ();
!   log_user the_logger (NULL);
    if (logfile)
      the_logger.set_logger (new logger (logfile, 0, 0,
  				       *global_dc->get_reference_printer ()));
--- 114,120 ----
      return;
  
    FILE *logfile = get_or_create_any_logfile ();
!   log_user the_logger (nullptr);
    if (logfile)
      the_logger.set_logger (new logger (logfile, 0, 0,
  				       *global_dc->get_reference_printer ()));
diff -Nrcpad gcc-16-20250629/gcc/analyzer/analyzer-language.h gcc-16-20250706/gcc/analyzer/analyzer-language.h
*** gcc-16-20250629/gcc/analyzer/analyzer-language.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/analyzer-language.h	Sun Jul  6 22:32:10 2025
*************** class translation_unit
*** 35,41 ****
   public:
    /* Attempt to look up an  value for identifier ID (e.g. in the headers that
       have been seen).  If it is defined and an integer (e.g. either as a
!      macro or enum), return the INTEGER_CST value, otherwise return NULL.  */
    virtual tree lookup_constant_by_id (tree id) const = 0;
    virtual tree lookup_type_by_id (tree id) const = 0;
    virtual tree lookup_global_var_by_id (tree id) const = 0;
--- 35,41 ----
   public:
    /* Attempt to look up an  value for identifier ID (e.g. in the headers that
       have been seen).  If it is defined and an integer (e.g. either as a
!      macro or enum), return the INTEGER_CST value, otherwise return NULL_TREE.  */
    virtual tree lookup_constant_by_id (tree id) const = 0;
    virtual tree lookup_type_by_id (tree id) const = 0;
    virtual tree lookup_global_var_by_id (tree id) const = 0;
diff -Nrcpad gcc-16-20250629/gcc/analyzer/analyzer-logging.h gcc-16-20250706/gcc/analyzer/analyzer-logging.h
*** gcc-16-20250629/gcc/analyzer/analyzer-logging.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/analyzer-logging.h	Sun Jul  6 22:32:10 2025
*************** public:
*** 91,97 ****
  
  /* The constructor for log_scope.
  
!    The normal case is that the logger is NULL, in which case this should
     be largely a no-op.
  
     If we do have a logger, notify it that we're entering the given scope.
--- 91,97 ----
  
  /* The constructor for log_scope.
  
!    The normal case is that the logger is nullptr, in which case this should
     be largely a no-op.
  
     If we do have a logger, notify it that we're entering the given scope.
*************** log_scope::~log_scope ()
*** 139,145 ****
      }
  }
  
! /* A log_user is something that potentially uses a logger (which could be NULL).
  
     The log_user class keeps the reference-count of a logger up-to-date.  */
  
--- 139,146 ----
      }
  }
  
! /* A log_user is something that potentially uses a logger (which could be
!    nullptr).
  
     The log_user class keeps the reference-count of a logger up-to-date.  */
  
*************** class log_user
*** 169,176 ****
  
    FILE *get_logger_file () const
    {
!     if (m_logger == NULL)
!       return NULL;
      return m_logger->get_file ();
    }
  
--- 170,177 ----
  
    FILE *get_logger_file () const
    {
!     if (m_logger == nullptr)
!       return nullptr;
      return m_logger->get_file ();
    }
  
*************** class log_user
*** 181,187 ****
  };
  
  /* A shortcut for calling log from a log_user, handling the common
!    case where the underlying logger is NULL via a no-op.  */
  
  inline void
  log_user::log (const char *fmt, ...) const
--- 182,188 ----
  };
  
  /* A shortcut for calling log from a log_user, handling the common
!    case where the underlying logger is nullptr via a no-op.  */
  
  inline void
  log_user::log (const char *fmt, ...) const
*************** log_user::log (const char *fmt, ...) con
*** 196,202 ****
  }
  
  /* A shortcut for starting a log line from a log_user,
!    handling the common case where the underlying logger is NULL via
     a no-op.  */
  
  inline void
--- 197,203 ----
  }
  
  /* A shortcut for starting a log line from a log_user,
!    handling the common case where the underlying logger is nullptr via
     a no-op.  */
  
  inline void
*************** log_user::start_log_line () const
*** 207,213 ****
  }
  
  /* A shortcut for ending a log line from a log_user,
!    handling the common case where the underlying logger is NULL via
     a no-op.  */
  
  inline void
--- 208,214 ----
  }
  
  /* A shortcut for ending a log line from a log_user,
!    handling the common case where the underlying logger is nullptr via
     a no-op.  */
  
  inline void
*************** log_user::end_log_line () const
*** 218,224 ****
  }
  
  /* A shortcut for recording entry into a scope from a log_user,
!    handling the common case where the underlying logger is NULL via
     a no-op.  */
  
  inline void
--- 219,225 ----
  }
  
  /* A shortcut for recording entry into a scope from a log_user,
!    handling the common case where the underlying logger is nullptr via
     a no-op.  */
  
  inline void
*************** log_user::enter_scope (const char *scope
*** 229,235 ****
  }
  
  /* A shortcut for recording exit from a scope from a log_user,
!    handling the common case where the underlying logger is NULL via
     a no-op.  */
  
  inline void
--- 230,236 ----
  }
  
  /* A shortcut for recording exit from a scope from a log_user,
!    handling the common case where the underlying logger is nullptr via
     a no-op.  */
  
  inline void
diff -Nrcpad gcc-16-20250629/gcc/analyzer/analyzer-pass.cc gcc-16-20250706/gcc/analyzer/analyzer-pass.cc
*** gcc-16-20250629/gcc/analyzer/analyzer-pass.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/analyzer-pass.cc	Sun Jul  6 22:32:10 2025
*************** class pass_analyzer : public ipa_opt_pas
*** 48,62 ****
  public:
     pass_analyzer(gcc::context *ctxt)
     : ipa_opt_pass_d (pass_data_analyzer, ctxt,
! 		     NULL, /* generate_summary */
! 		     NULL, /* write_summary */
! 		     NULL, /* read_summary */
! 		     NULL, /* write_optimization_summary */
! 		     NULL, /* read_optimization_summary */
! 		     NULL, /* stmt_fixup */
  		     0, /* function_transform_todo_flags_start */
! 		     NULL, /* function_transform */
! 		     NULL) /* variable_transform */
    {}
  
    /* opt_pass methods: */
--- 48,62 ----
  public:
     pass_analyzer(gcc::context *ctxt)
     : ipa_opt_pass_d (pass_data_analyzer, ctxt,
! 		     nullptr, /* generate_summary */
! 		     nullptr, /* write_summary */
! 		     nullptr, /* read_summary */
! 		     nullptr, /* write_optimization_summary */
! 		     nullptr, /* read_optimization_summary */
! 		     nullptr, /* stmt_fixup */
  		     0, /* function_transform_todo_flags_start */
! 		     nullptr, /* function_transform */
! 		     nullptr) /* variable_transform */
    {}
  
    /* opt_pass methods: */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/analyzer.cc gcc-16-20250706/gcc/analyzer/analyzer.cc
*** gcc-16-20250629/gcc/analyzer/analyzer.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/analyzer.cc	Sun Jul  6 22:32:10 2025
*************** make_label_text (bool can_colorize, cons
*** 518,524 ****
  
    va_start (ap, fmt);
  
!   text_info ti (_(fmt), &ap, 0, NULL, &rich_loc);
    pp_format (pp.get (), &ti);
    pp_output_formatted_text (pp.get ());
  
--- 518,524 ----
  
    va_start (ap, fmt);
  
!   text_info ti (_(fmt), &ap, 0, nullptr, &rich_loc);
    pp_format (pp.get (), &ti);
    pp_output_formatted_text (pp.get ());
  
*************** make_label_text_n (bool can_colorize, un
*** 549,555 ****
  
    const char *fmt = ngettext (singular_fmt, plural_fmt, n);
  
!   text_info ti (fmt, &ap, 0, NULL, &rich_loc);
  
    pp_format (pp.get (), &ti);
    pp_output_formatted_text (pp.get ());
--- 549,555 ----
  
    const char *fmt = ngettext (singular_fmt, plural_fmt, n);
  
!   text_info ti (fmt, &ap, 0, nullptr, &rich_loc);
  
    pp_format (pp.get (), &ti);
    pp_output_formatted_text (pp.get ());
diff -Nrcpad gcc-16-20250629/gcc/analyzer/bounds-checking.cc gcc-16-20250706/gcc/analyzer/bounds-checking.cc
*** gcc-16-20250629/gcc/analyzer/bounds-checking.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/bounds-checking.cc	Sun Jul  6 22:32:10 2025
*************** public:
*** 507,513 ****
    concrete_buffer_over_read (const region_model &model,
  			     const region *reg, tree diag_arg,
  			     bit_range range, tree bit_bound)
!   : concrete_past_the_end (model, reg, diag_arg, range, bit_bound, NULL)
    {}
  
    const char *get_kind () const final override
--- 507,513 ----
    concrete_buffer_over_read (const region_model &model,
  			     const region *reg, tree diag_arg,
  			     bit_range range, tree bit_bound)
!   : concrete_past_the_end (model, reg, diag_arg, range, bit_bound, nullptr)
    {}
  
    const char *get_kind () const final override
*************** public:
*** 819,825 ****
    concrete_buffer_under_read (const region_model &model,
  			      const region *reg, tree diag_arg,
  			      bit_range range)
!   : concrete_out_of_bounds (model, reg, diag_arg, range, NULL)
    {}
  
    const char *get_kind () const final override
--- 819,825 ----
    concrete_buffer_under_read (const region_model &model,
  			      const region *reg, tree diag_arg,
  			      bit_range range)
!   : concrete_out_of_bounds (model, reg, diag_arg, range, nullptr)
    {}
  
    const char *get_kind () const final override
*************** public:
*** 1119,1125 ****
  			     const region *reg, tree diag_arg, tree offset,
  			     tree num_bytes, tree capacity)
    : symbolic_past_the_end (model, reg, diag_arg, offset, num_bytes, capacity,
! 			   NULL)
    {
    }
  
--- 1119,1125 ----
  			     const region *reg, tree diag_arg, tree offset,
  			     tree num_bytes, tree capacity)
    : symbolic_past_the_end (model, reg, diag_arg, offset, num_bytes, capacity,
! 			   nullptr)
    {
    }
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/call-details.cc gcc-16-20250706/gcc/analyzer/call-details.cc
*** gcc-16-20250629/gcc/analyzer/call-details.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/call-details.cc	Sun Jul  6 22:32:10 2025
*************** namespace ana {
*** 43,49 ****
  call_details::call_details (const gcall &call, region_model *model,
  			    region_model_context *ctxt)
  : m_call (call), m_model (model), m_ctxt (ctxt),
!   m_lhs_type (NULL_TREE), m_lhs_region (NULL)
  {
    m_lhs_type = NULL_TREE;
    if (tree lhs = gimple_call_lhs (&call))
--- 43,49 ----
  call_details::call_details (const gcall &call, region_model *model,
  			    region_model_context *ctxt)
  : m_call (call), m_model (model), m_ctxt (ctxt),
!   m_lhs_type (NULL_TREE), m_lhs_region (nullptr)
  {
    m_lhs_type = NULL_TREE;
    if (tree lhs = gimple_call_lhs (&call))
*************** call_details::get_logger () const
*** 81,87 ****
    if (m_ctxt)
      return m_ctxt->get_logger ();
    else
!     return NULL;
  }
  
  /* Get any uncertainty_t associated with the region_model_context.  */
--- 81,87 ----
    if (m_ctxt)
      return m_ctxt->get_logger ();
    else
!     return nullptr;
  }
  
  /* Get any uncertainty_t associated with the region_model_context.  */
*************** call_details::get_uncertainty () const
*** 92,98 ****
    if (m_ctxt)
      return m_ctxt->get_uncertainty ();
    else
!     return NULL;
  }
  
  /* If the callsite has a left-hand-side region, set it to RESULT
--- 92,98 ----
    if (m_ctxt)
      return m_ctxt->get_uncertainty ();
    else
!     return nullptr;
  }
  
  /* If the callsite has a left-hand-side region, set it to RESULT
*************** const_fn_p (const call_details &cd)
*** 127,151 ****
  
  /* 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);
      }
  
--- 127,151 ----
  
  /* 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 nullptr otherwise.  */
  
  static const svalue *
  maybe_get_const_fn_result (const call_details &cd)
  {
    if (!const_fn_p (cd))
!     return nullptr;
  
    unsigned num_args = cd.num_args ();
    if (num_args > const_fn_result_svalue::MAX_INPUTS)
      /* Too many arguments.  */
!     return nullptr;
  
    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 nullptr;
        inputs.quick_push (arg_sval);
      }
  
*************** call_details::set_any_lhs_with_defaults
*** 222,229 ****
        if (lookup_function_attribute ("malloc"))
  	{
  	  const region *new_reg
! 	    = m_model->get_or_create_region_for_heap_alloc (NULL, m_ctxt);
! 	  m_model->mark_region_as_unknown (new_reg, NULL);
  	  sval = mgr->get_ptr_svalue (get_lhs_type (), new_reg);
  	}
        else
--- 222,229 ----
        if (lookup_function_attribute ("malloc"))
  	{
  	  const region *new_reg
! 	    = m_model->get_or_create_region_for_heap_alloc (nullptr, m_ctxt);
! 	  m_model->mark_region_as_unknown (new_reg, nullptr);
  	  sval = mgr->get_ptr_svalue (get_lhs_type (), new_reg);
  	}
        else
*************** call_details::get_arg_svalue (unsigned i
*** 292,298 ****
  
  /* If argument IDX's svalue at the callsite is of pointer type,
     return the region it points to.
!    Otherwise return NULL.  */
  
  const region *
  call_details::deref_ptr_arg (unsigned idx) const
--- 292,298 ----
  
  /* If argument IDX's svalue at the callsite is of pointer type,
     return the region it points to.
!    Otherwise return nullptr.  */
  
  const region *
  call_details::deref_ptr_arg (unsigned idx) const
*************** call_details::deref_ptr_arg (unsigned id
*** 301,307 ****
    return m_model->deref_rvalue (ptr_sval, get_arg_tree (idx), 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.  */
--- 301,307 ----
    return m_model->deref_rvalue (ptr_sval, get_arg_tree (idx), m_ctxt);
  }
  
! /* Attempt to get the string literal for argument IDX, or return nullptr
     otherwise.
     For use when implementing "__analyzer_*" functions that take
     string literals.  */
*************** call_details::get_arg_string_literal (un
*** 316,322 ****
  	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
--- 316,322 ----
  	tree string_cst = string_reg->get_string_cst ();
  	return TREE_STRING_POINTER (string_cst);
        }
!   return nullptr;
  }
  
  /* Attempt to get the fndecl used at this call, if known, or NULL_TREE
diff -Nrcpad gcc-16-20250629/gcc/analyzer/call-string.cc gcc-16-20250706/gcc/analyzer/call-string.cc
*** gcc-16-20250629/gcc/analyzer/call-string.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/call-string.cc	Sun Jul  6 22:32:10 2025
*************** call_string::cmp_ptr_ptr (const void *pa
*** 223,244 ****
  }
  
  /* 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;
  }
  
--- 223,244 ----
  }
  
  /* Return the pointer to callee of the topmost call in the stack,
!    or nullptr if stack is empty.  */
  const supernode *
  call_string::get_callee_node () const
  {
    if(m_elements.is_empty ())
!     return nullptr;
    return m_elements[m_elements.length () - 1].m_callee;
  }
  
  /* Return the pointer to caller of the topmost call in the stack,
!    or nullptr if stack is empty.  */
  const supernode *
  call_string::get_caller_node () const
  {
    if(m_elements.is_empty ())
!     return nullptr;
    return m_elements[m_elements.length () - 1].m_caller;
  }
  
*************** call_string::validate () const
*** 266,272 ****
  /* ctor for the root/empty call_string.  */
  
  call_string::call_string ()
! : m_parent (NULL), m_elements ()
  {
  }
  
--- 266,272 ----
  /* ctor for the root/empty call_string.  */
  
  call_string::call_string ()
! : m_parent (nullptr), m_elements ()
  {
  }
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/call-string.h gcc-16-20250706/gcc/analyzer/call-string.h
*** gcc-16-20250629/gcc/analyzer/call-string.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/call-string.h	Sun Jul  6 22:32:10 2025
*************** private:
*** 129,140 ****
      }
      template <typename T> static inline void remove (T &entry)
      {
!       entry.m_key = element_t (NULL, NULL);
      }
      static const bool empty_zero_p = true;
      template <typename T> static inline bool is_empty (const T &entry)
      {
!       return entry.m_key.m_caller == NULL;
      }
      template <typename T> static inline bool is_deleted (const T &entry)
      {
--- 129,140 ----
      }
      template <typename T> static inline void remove (T &entry)
      {
!       entry.m_key = element_t (nullptr, nullptr);
      }
      static const bool empty_zero_p = true;
      template <typename T> static inline bool is_empty (const T &entry)
      {
!       return entry.m_key.m_caller == nullptr;
      }
      template <typename T> static inline bool is_deleted (const T &entry)
      {
*************** private:
*** 142,149 ****
      }
      template <typename T> static inline void mark_empty (T &entry)
      {
!       entry.m_key = element_t (NULL, NULL);
!       entry.m_value = NULL;
      }
      template <typename T> static inline void mark_deleted (T &entry)
      {
--- 142,149 ----
      }
      template <typename T> static inline void mark_empty (T &entry)
      {
!       entry.m_key = element_t (nullptr, nullptr);
!       entry.m_value = nullptr;
      }
      template <typename T> static inline void mark_deleted (T &entry)
      {
diff -Nrcpad gcc-16-20250629/gcc/analyzer/call-summary.cc gcc-16-20250706/gcc/analyzer/call-summary.cc
*** gcc-16-20250629/gcc/analyzer/call-summary.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/call-summary.cc	Sun Jul  6 22:32:10 2025
*************** call_summary::get_user_facing_desc (pret
*** 71,79 ****
        if (tree result = DECL_RESULT (fndecl))
  	{
  	  const region *result_reg
! 	    = get_state ().m_region_model->get_lvalue (result, NULL);
  	  const svalue *result_sval
! 	    = get_state ().m_region_model->get_store_value (result_reg, NULL);
  	  switch (result_sval->get_kind ())
  	    {
  	    default:
--- 71,79 ----
        if (tree result = DECL_RESULT (fndecl))
  	{
  	  const region *result_reg
! 	    = get_state ().m_region_model->get_lvalue (result, nullptr);
  	  const svalue *result_sval
! 	    = get_state ().m_region_model->get_store_value (result_reg, nullptr);
  	  switch (result_sval->get_kind ())
  	    {
  	    default:
*************** call_summary_replay::call_summary_replay
*** 172,178 ****
       This will be a top-level frame, since that's what's in
       the summary.  */
    const frame_region *summary_frame
!     = mgr->get_frame_region (NULL, called_fn);
  
    unsigned idx = 0;
    for (tree iter_parm = DECL_ARGUMENTS (fndecl); iter_parm;
--- 172,178 ----
       This will be a top-level frame, since that's what's in
       the summary.  */
    const frame_region *summary_frame
!     = mgr->get_frame_region (nullptr, called_fn);
  
    unsigned idx = 0;
    for (tree iter_parm = DECL_ARGUMENTS (fndecl); iter_parm;
*************** call_summary_replay::call_summary_replay
*** 210,216 ****
  /* Try to convert SUMMARY_SVAL in the summary to a corresponding svalue
     in the caller, caching the result.
  
!    Return NULL if the conversion is not possible.  */
  
  const svalue *
  call_summary_replay::convert_svalue_from_summary (const svalue *summary_sval)
--- 210,216 ----
  /* Try to convert SUMMARY_SVAL in the summary to a corresponding svalue
     in the caller, caching the result.
  
!    Return nullptr if the conversion is not possible.  */
  
  const svalue *
  call_summary_replay::convert_svalue_from_summary (const svalue *summary_sval)
*************** call_summary_replay::convert_svalue_from
*** 252,258 ****
  	const region *summary_reg = region_summary_sval->get_pointee ();
  	const region *caller_reg = convert_region_from_summary (summary_reg);
  	if (!caller_reg)
! 	  return NULL;
  	region_model_manager *mgr = get_manager ();
  	const svalue *caller_ptr
  	  = mgr->get_ptr_svalue (summary_sval->get_type (),
--- 252,258 ----
  	const region *summary_reg = region_summary_sval->get_pointee ();
  	const region *caller_reg = convert_region_from_summary (summary_reg);
  	if (!caller_reg)
! 	  return nullptr;
  	region_model_manager *mgr = get_manager ();
  	const svalue *caller_ptr
  	  = mgr->get_ptr_svalue (summary_sval->get_type (),
*************** call_summary_replay::convert_svalue_from
*** 268,274 ****
        return summary_sval;
  
      case SK_SETJMP:
!       return NULL; // TODO
  
      case SK_INITIAL:
        {
--- 268,274 ----
        return summary_sval;
  
      case SK_SETJMP:
!       return nullptr; // TODO
  
      case SK_INITIAL:
        {
*************** call_summary_replay::convert_svalue_from
*** 282,288 ****
  	const region *summary_reg = initial_summary_sval->get_region ();
  	const region *caller_reg = convert_region_from_summary (summary_reg);
  	if (!caller_reg)
! 	  return NULL;
  	const svalue *caller_sval
  	  = m_cd.get_model ()->get_store_value (caller_reg, m_cd.get_ctxt ());
  	return caller_sval;
--- 282,288 ----
  	const region *summary_reg = initial_summary_sval->get_region ();
  	const region *caller_reg = convert_region_from_summary (summary_reg);
  	if (!caller_reg)
! 	  return nullptr;
  	const svalue *caller_sval
  	  = m_cd.get_model ()->get_store_value (caller_reg, m_cd.get_ctxt ());
  	return caller_sval;
*************** call_summary_replay::convert_svalue_from
*** 295,301 ****
  	const svalue *summary_arg = unaryop_summary_sval->get_arg ();
  	const svalue *caller_arg = convert_svalue_from_summary (summary_arg);
  	if (!caller_arg)
! 	  return NULL;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_unaryop (summary_sval->get_type (),
  					   unaryop_summary_sval->get_op (),
--- 295,301 ----
  	const svalue *summary_arg = unaryop_summary_sval->get_arg ();
  	const svalue *caller_arg = convert_svalue_from_summary (summary_arg);
  	if (!caller_arg)
! 	  return nullptr;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_unaryop (summary_sval->get_type (),
  					   unaryop_summary_sval->get_op (),
*************** call_summary_replay::convert_svalue_from
*** 309,319 ****
  	const svalue *summary_arg0 = binop_summary_sval->get_arg0 ();
  	const svalue *caller_arg0 = convert_svalue_from_summary (summary_arg0);
  	if (!caller_arg0)
! 	  return NULL;
  	const svalue *summary_arg1 = binop_summary_sval->get_arg1 ();
  	const svalue *caller_arg1 = convert_svalue_from_summary (summary_arg1);
  	if (!caller_arg1)
! 	  return NULL;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_binop (summary_sval->get_type (),
  					 binop_summary_sval->get_op (),
--- 309,319 ----
  	const svalue *summary_arg0 = binop_summary_sval->get_arg0 ();
  	const svalue *caller_arg0 = convert_svalue_from_summary (summary_arg0);
  	if (!caller_arg0)
! 	  return nullptr;
  	const svalue *summary_arg1 = binop_summary_sval->get_arg1 ();
  	const svalue *caller_arg1 = convert_svalue_from_summary (summary_arg1);
  	if (!caller_arg1)
! 	  return nullptr;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_binop (summary_sval->get_type (),
  					 binop_summary_sval->get_op (),
*************** call_summary_replay::convert_svalue_from
*** 328,337 ****
  	region_model_manager *mgr = get_manager ();
  	const svalue *summary_parent_sval = sub_summary_sval->get_parent ();
  	if (!summary_parent_sval)
! 	  return NULL;
  	const region *summary_subregion = sub_summary_sval->get_subregion ();
  	if (!summary_subregion)
! 	  return NULL;
  	return mgr->get_or_create_sub_svalue (summary_sval->get_type (),
  					      summary_parent_sval,
  					      summary_subregion);
--- 328,337 ----
  	region_model_manager *mgr = get_manager ();
  	const svalue *summary_parent_sval = sub_summary_sval->get_parent ();
  	if (!summary_parent_sval)
! 	  return nullptr;
  	const region *summary_subregion = sub_summary_sval->get_subregion ();
  	if (!summary_subregion)
! 	  return nullptr;
  	return mgr->get_or_create_sub_svalue (summary_sval->get_type (),
  					      summary_parent_sval,
  					      summary_subregion);
*************** call_summary_replay::convert_svalue_from
*** 346,358 ****
  	const svalue *caller_outer_size
  	  = convert_svalue_from_summary (summary_outer_size);
  	if (!caller_outer_size)
! 	  return NULL;
  	const svalue *summary_inner_sval
  	  = repeated_summary_sval->get_inner_svalue ();
  	const svalue *caller_inner_sval
  	  = convert_svalue_from_summary (summary_inner_sval);
  	if (!caller_inner_sval)
! 	  return NULL;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_repeated_svalue (summary_sval->get_type (),
  						   caller_outer_size,
--- 346,358 ----
  	const svalue *caller_outer_size
  	  = convert_svalue_from_summary (summary_outer_size);
  	if (!caller_outer_size)
! 	  return nullptr;
  	const svalue *summary_inner_sval
  	  = repeated_summary_sval->get_inner_svalue ();
  	const svalue *caller_inner_sval
  	  = convert_svalue_from_summary (summary_inner_sval);
  	if (!caller_inner_sval)
! 	  return nullptr;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_repeated_svalue (summary_sval->get_type (),
  						   caller_outer_size,
*************** call_summary_replay::convert_svalue_from
*** 369,375 ****
  	const svalue *caller_inner_sval
  	  = convert_svalue_from_summary (summary_inner_sval);
  	if (!caller_inner_sval)
! 	  return NULL;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_bits_within (summary_sval->get_type (),
  					       bits,
--- 369,375 ----
  	const svalue *caller_inner_sval
  	  = convert_svalue_from_summary (summary_inner_sval);
  	if (!caller_inner_sval)
! 	  return nullptr;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_bits_within (summary_sval->get_type (),
  					       bits,
*************** call_summary_replay::convert_svalue_from
*** 384,390 ****
  	const svalue *caller_arg_sval
  	  = convert_svalue_from_summary (summary_arg_sval);
  	if (!caller_arg_sval)
! 	  return NULL;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_unmergeable (caller_arg_sval);
        }
--- 384,390 ----
  	const svalue *caller_arg_sval
  	  = convert_svalue_from_summary (summary_arg_sval);
  	if (!caller_arg_sval)
! 	  return nullptr;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_unmergeable (caller_arg_sval);
        }
*************** call_summary_replay::convert_svalue_from
*** 400,413 ****
  	  = convert_svalue_from_summary (summary_base_sval);
  	if (!(caller_base_sval
  	      && caller_base_sval->can_have_associated_state_p ()))
! 	  return NULL;
  	const svalue *summary_iter_sval
  	  = widening_summary_sval->get_iter_svalue ();
  	const svalue *caller_iter_sval
  	  = convert_svalue_from_summary (summary_iter_sval);
  	if (!(caller_iter_sval
  	      && caller_iter_sval->can_have_associated_state_p ()))
! 	  return NULL;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_widening_svalue
  	  (summary_iter_sval->get_type (),
--- 400,413 ----
  	  = convert_svalue_from_summary (summary_base_sval);
  	if (!(caller_base_sval
  	      && caller_base_sval->can_have_associated_state_p ()))
! 	  return nullptr;
  	const svalue *summary_iter_sval
  	  = widening_summary_sval->get_iter_svalue ();
  	const svalue *caller_iter_sval
  	  = convert_svalue_from_summary (summary_iter_sval);
  	if (!(caller_iter_sval
  	      && caller_iter_sval->can_have_associated_state_p ()))
! 	  return nullptr;
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_widening_svalue
  	  (summary_iter_sval->get_type (),
*************** call_summary_replay::convert_svalue_from
*** 491,497 ****
  	    const svalue *caller_input
  	      = convert_svalue_from_summary (summary_input);
  	    if (!caller_input)
! 	      return NULL;
  	    inputs.safe_push (caller_input);
  	  }
  	region_model_manager *mgr = get_manager ();
--- 491,497 ----
  	    const svalue *caller_input
  	      = convert_svalue_from_summary (summary_input);
  	    if (!caller_input)
! 	      return nullptr;
  	    inputs.safe_push (caller_input);
  	  }
  	region_model_manager *mgr = get_manager ();
*************** call_summary_replay::convert_svalue_from
*** 516,522 ****
  	    const svalue *caller_input
  	      = convert_svalue_from_summary (summary_input);
  	    if (!caller_input)
! 	      return NULL;
  	    inputs.safe_push (caller_input);
  	  }
  	region_model_manager *mgr = get_manager ();
--- 516,522 ----
  	    const svalue *caller_input
  	      = convert_svalue_from_summary (summary_input);
  	    if (!caller_input)
! 	      return nullptr;
  	    inputs.safe_push (caller_input);
  	  }
  	region_model_manager *mgr = get_manager ();
*************** call_summary_replay::convert_svalue_from
*** 532,538 ****
  /* Try to convert SUMMARY_REG in the summary to a corresponding region
     in the caller, caching the result.
  
!    Return NULL if the conversion is not possible.  */
  
  const region *
  call_summary_replay::convert_region_from_summary (const region *summary_reg)
--- 532,538 ----
  /* Try to convert SUMMARY_REG in the summary to a corresponding region
     in the caller, caching the result.
  
!    Return nullptr if the conversion is not possible.  */
  
  const region *
  call_summary_replay::convert_region_from_summary (const region *summary_reg)
*************** call_summary_replay::convert_region_from
*** 596,602 ****
  	const svalue *caller_ptr_sval
  	  = convert_svalue_from_summary (summary_ptr_sval);
  	if (!caller_ptr_sval)
! 	  return NULL;
  	const region *caller_reg
  	  = get_caller_model ()->deref_rvalue (caller_ptr_sval,
  					       NULL_TREE,
--- 596,602 ----
  	const svalue *caller_ptr_sval
  	  = convert_svalue_from_summary (summary_ptr_sval);
  	if (!caller_ptr_sval)
! 	  return nullptr;
  	const region *caller_reg
  	  = get_caller_model ()->deref_rvalue (caller_ptr_sval,
  					       NULL_TREE,
*************** call_summary_replay::convert_region_from
*** 619,625 ****
  	  case SSA_NAME:
  	    /* We don't care about writes to locals within
  	       the summary.  */
! 	    return NULL;
  	  case VAR_DECL:
  	    /* We don't care about writes to locals within
  	       the summary.  */
--- 619,625 ----
  	  case SSA_NAME:
  	    /* We don't care about writes to locals within
  	       the summary.  */
! 	    return nullptr;
  	  case VAR_DECL:
  	    /* We don't care about writes to locals within
  	       the summary.  */
*************** call_summary_replay::convert_region_from
*** 628,639 ****
  	      return summary_reg;
  	    else
  	      /* Otherwise, we don't care about locals.  */
! 	      return NULL;
  	  case RESULT_DECL:
  	    return m_cd.get_lhs_region ();
  	  case PARM_DECL:
  	    /* Writes (by value) to parms should be visible to the caller.  */
! 	    return NULL;
  	  }
        }
        break;
--- 628,639 ----
  	      return summary_reg;
  	    else
  	      /* Otherwise, we don't care about locals.  */
! 	      return nullptr;
  	  case RESULT_DECL:
  	    return m_cd.get_lhs_region ();
  	  case PARM_DECL:
  	    /* Writes (by value) to parms should be visible to the caller.  */
! 	    return nullptr;
  	  }
        }
        break;
*************** call_summary_replay::convert_region_from
*** 645,651 ****
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return NULL;
  	tree field = summary_field_reg->get_field ();
  	return mgr->get_field_region (caller_parent_reg, field);
        }
--- 645,651 ----
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return nullptr;
  	tree field = summary_field_reg->get_field ();
  	return mgr->get_field_region (caller_parent_reg, field);
        }
*************** call_summary_replay::convert_region_from
*** 658,669 ****
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return NULL;
  	const svalue *summary_index = summary_element_reg->get_index ();
  	const svalue *caller_index
  	  = convert_svalue_from_summary (summary_index);
  	if (!caller_index)
! 	  return NULL;
  	return mgr->get_element_region (caller_parent_reg,
  					summary_reg->get_type (),
  					caller_index);
--- 658,669 ----
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return nullptr;
  	const svalue *summary_index = summary_element_reg->get_index ();
  	const svalue *caller_index
  	  = convert_svalue_from_summary (summary_index);
  	if (!caller_index)
! 	  return nullptr;
  	return mgr->get_element_region (caller_parent_reg,
  					summary_reg->get_type (),
  					caller_index);
*************** call_summary_replay::convert_region_from
*** 677,689 ****
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return NULL;
  	const svalue *summary_byte_offset
  	  = summary_offset_reg->get_byte_offset ();
  	const svalue *caller_byte_offset
  	  = convert_svalue_from_summary (summary_byte_offset);
  	if (!caller_byte_offset)
! 	  return NULL;
  	return mgr->get_offset_region (caller_parent_reg,
  				       summary_reg->get_type (),
  				       caller_byte_offset);
--- 677,689 ----
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return nullptr;
  	const svalue *summary_byte_offset
  	  = summary_offset_reg->get_byte_offset ();
  	const svalue *caller_byte_offset
  	  = convert_svalue_from_summary (summary_byte_offset);
  	if (!caller_byte_offset)
! 	  return nullptr;
  	return mgr->get_offset_region (caller_parent_reg,
  				       summary_reg->get_type (),
  				       caller_byte_offset);
*************** call_summary_replay::convert_region_from
*** 697,709 ****
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return NULL;
  	const svalue *summary_byte_size
  	  = summary_sized_reg->get_byte_size_sval (mgr);
  	const svalue *caller_byte_size
  	  = convert_svalue_from_summary (summary_byte_size);
  	if (!caller_byte_size)
! 	  return NULL;
  	return mgr->get_sized_region (caller_parent_reg,
  				       summary_reg->get_type (),
  				       caller_byte_size);
--- 697,709 ----
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return nullptr;
  	const svalue *summary_byte_size
  	  = summary_sized_reg->get_byte_size_sval (mgr);
  	const svalue *caller_byte_size
  	  = convert_svalue_from_summary (summary_byte_size);
  	if (!caller_byte_size)
! 	  return nullptr;
  	return mgr->get_sized_region (caller_parent_reg,
  				       summary_reg->get_type (),
  				       caller_byte_size);
*************** call_summary_replay::convert_region_from
*** 715,721 ****
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return NULL;
  	return mgr->get_cast_region (caller_parent_reg,
  				     summary_reg->get_type ());
        }
--- 715,721 ----
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return nullptr;
  	return mgr->get_cast_region (caller_parent_reg,
  				     summary_reg->get_type ());
        }
*************** call_summary_replay::convert_region_from
*** 731,737 ****
        }
        break;
      case RK_ALLOCA:
!       return NULL;
      case RK_BIT_RANGE:
        {
  	const bit_range_region *summary_bit_range_reg
--- 731,737 ----
        }
        break;
      case RK_ALLOCA:
!       return nullptr;
      case RK_BIT_RANGE:
        {
  	const bit_range_region *summary_bit_range_reg
*************** call_summary_replay::convert_region_from
*** 740,746 ****
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return NULL;
  	const bit_range &bits = summary_bit_range_reg->get_bits ();
  	return mgr->get_bit_range (caller_parent_reg,
  				   summary_reg->get_type (),
--- 740,746 ----
  	const region *caller_parent_reg
  	  = convert_region_from_summary (summary_parent_reg);
  	if (!caller_parent_reg)
! 	  return nullptr;
  	const bit_range &bits = summary_bit_range_reg->get_bits ();
  	return mgr->get_bit_range (caller_parent_reg,
  				   summary_reg->get_type (),
*************** call_summary_replay::convert_region_from
*** 748,761 ****
        }
        break;
      case RK_VAR_ARG:
!       return NULL;
      }
  }
  
  /* Try to convert SUMMARY_KEY in the summary to a corresponding binding key
     in the caller.
  
!    Return NULL if the conversion is not possible.  */
  
  const binding_key *
  call_summary_replay::convert_key_from_summary (const binding_key *summary_key)
--- 748,761 ----
        }
        break;
      case RK_VAR_ARG:
!       return nullptr;
      }
  }
  
  /* Try to convert SUMMARY_KEY in the summary to a corresponding binding key
     in the caller.
  
!    Return nullptr if the conversion is not possible.  */
  
  const binding_key *
  call_summary_replay::convert_key_from_summary (const binding_key *summary_key)
*************** call_summary_replay::convert_key_from_su
*** 767,773 ****
    const region *summary_reg = symbolic_key->get_region ();
    const region *caller_reg = convert_region_from_summary (summary_reg);
    if (!caller_reg)
!     return NULL;
    region_model_manager *mgr = get_manager ();
    store_manager *store_mgr = mgr->get_store_manager ();
    return store_mgr->get_symbolic_binding (caller_reg);
--- 767,773 ----
    const region *summary_reg = symbolic_key->get_region ();
    const region *caller_reg = convert_region_from_summary (summary_reg);
    if (!caller_reg)
!     return nullptr;
    region_model_manager *mgr = get_manager ();
    store_manager *store_mgr = mgr->get_store_manager ();
    return store_mgr->get_symbolic_binding (caller_reg);
*************** call_summary_replay::add_svalue_mapping
*** 780,786 ****
  					 const svalue *caller_sval)
  {
    gcc_assert (summary_sval);
!   // CALLER_SVAL can be NULL
    m_map_svalue_from_summary_to_caller.put (summary_sval, caller_sval);
  }
  
--- 780,786 ----
  					 const svalue *caller_sval)
  {
    gcc_assert (summary_sval);
!   // CALLER_SVAL can be nullptr
    m_map_svalue_from_summary_to_caller.put (summary_sval, caller_sval);
  }
  
*************** call_summary_replay::add_region_mapping
*** 791,797 ****
  					 const region *caller_reg)
  {
    gcc_assert (summary_reg);
!   // CALLER_REG can be NULL
    m_map_region_from_summary_to_caller.put (summary_reg, caller_reg);
  }
  
--- 791,797 ----
  					 const region *caller_reg)
  {
    gcc_assert (summary_reg);
!   // CALLER_REG can be nullptr
    m_map_region_from_summary_to_caller.put (summary_reg, caller_reg);
  }
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/checker-event.cc gcc-16-20250706/gcc/analyzer/checker-event.cc
*** gcc-16-20250629/gcc/analyzer/checker-event.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/checker-event.cc	Sun Jul  6 22:32:10 2025
*************** checker_event::checker_event (enum event
*** 113,119 ****
    m_effective_fndecl (loc_info.m_fndecl),
    m_original_depth (loc_info.m_depth),
    m_effective_depth (loc_info.m_depth),
!   m_pending_diagnostic (NULL), m_emission_id (),
    m_logical_loc
      (tree_logical_location_manager::key_from_tree (loc_info.m_fndecl))
  {
--- 113,119 ----
    m_effective_fndecl (loc_info.m_fndecl),
    m_original_depth (loc_info.m_depth),
    m_effective_depth (loc_info.m_depth),
!   m_pending_diagnostic (nullptr), m_emission_id (),
    m_logical_loc
      (tree_logical_location_manager::key_from_tree (loc_info.m_fndecl))
  {
*************** function_entry_event::print_desc (pretty
*** 398,404 ****
  diagnostic_event::meaning
  function_entry_event::get_meaning () const
  {
!   return meaning (VERB_enter, NOUN_function);
  }
  
  /* class state_change_event : public checker_event.  */
--- 398,404 ----
  diagnostic_event::meaning
  function_entry_event::get_meaning () const
  {
!   return meaning (verb::enter, noun::function);
  }
  
  /* class state_change_event : public checker_event.  */
*************** state_change_event::print_desc (pretty_p
*** 498,504 ****
      }
    else
      {
!       gcc_assert (m_origin == NULL);
        pp_printf (&pp,
  		 "global state: %qs -> %qs",
  		 m_from->get_name (),
--- 498,504 ----
      }
    else
      {
!       gcc_assert (m_origin == nullptr);
        pp_printf (&pp,
  		 "global state: %qs -> %qs",
  		 m_from->get_name (),
*************** cfg_edge_event::get_meaning () const
*** 632,640 ****
  {
    const cfg_superedge& cfg_sedge = get_cfg_superedge ();
    if (cfg_sedge.true_value_p ())
!     return meaning (VERB_branch, PROPERTY_true);
    else if (cfg_sedge.false_value_p ())
!     return meaning (VERB_branch, PROPERTY_false);
    else
      return meaning ();
  }
--- 632,640 ----
  {
    const cfg_superedge& cfg_sedge = get_cfg_superedge ();
    if (cfg_sedge.true_value_p ())
!     return meaning (verb::branch, property::true_);
    else if (cfg_sedge.false_value_p ())
!     return meaning (verb::branch, property::false_);
    else
      return meaning ();
  }
*************** start_cfg_edge_event::maybe_describe_con
*** 744,750 ****
  					   lhs, op, rhs);
  	}
      }
!   return label_text::borrow (NULL);
  }
  
  /* Subroutine of maybe_describe_condition above.
--- 744,750 ----
  					   lhs, op, rhs);
  	}
      }
!   return label_text::borrow (nullptr);
  }
  
  /* Subroutine of maybe_describe_condition above.
*************** start_cfg_edge_event::maybe_describe_con
*** 781,789 ****
  
    /* Only attempt to generate text for sufficiently simple expressions.  */
    if (!should_print_expr_p (lhs))
!     return label_text::borrow (NULL);
    if (!should_print_expr_p (rhs))
!     return label_text::borrow (NULL);
  
    /* Special cases for pointer comparisons against NULL.  */
    if (POINTER_TYPE_P (TREE_TYPE (lhs))
--- 781,789 ----
  
    /* Only attempt to generate text for sufficiently simple expressions.  */
    if (!should_print_expr_p (lhs))
!     return label_text::borrow (nullptr);
    if (!should_print_expr_p (rhs))
!     return label_text::borrow (nullptr);
  
    /* Special cases for pointer comparisons against NULL.  */
    if (POINTER_TYPE_P (TREE_TYPE (lhs))
*************** call_event::print_desc (pretty_printer &
*** 880,886 ****
  diagnostic_event::meaning
  call_event::get_meaning () const
  {
!   return meaning (VERB_call, NOUN_function);
  }
  
  /* Override of checker_event::is_call_p for calls.  */
--- 880,886 ----
  diagnostic_event::meaning
  call_event::get_meaning () const
  {
!   return meaning (verb::call, noun::function);
  }
  
  /* Override of checker_event::is_call_p for calls.  */
*************** return_event::print_desc (pretty_printer
*** 964,970 ****
  diagnostic_event::meaning
  return_event::get_meaning () const
  {
!   return meaning (VERB_return, NOUN_function);
  }
  
  /* Override of checker_event::is_return_p for returns.  */
--- 964,970 ----
  diagnostic_event::meaning
  return_event::get_meaning () const
  {
!   return meaning (verb::return_, noun::function);
  }
  
  /* Override of checker_event::is_return_p for returns.  */
*************** start_consolidated_cfg_edges_event::prin
*** 991,998 ****
  diagnostic_event::meaning
  start_consolidated_cfg_edges_event::get_meaning () const
  {
!   return meaning (VERB_branch,
! 		  (m_edge_sense ? PROPERTY_true : PROPERTY_false));
  }
  
  /* class inlined_call_event : public checker_event.  */
--- 991,998 ----
  diagnostic_event::meaning
  start_consolidated_cfg_edges_event::get_meaning () const
  {
!   return meaning (verb::branch,
! 		  (m_edge_sense ? property::true_ : property::false_));
  }
  
  /* class inlined_call_event : public checker_event.  */
*************** inlined_call_event::print_desc (pretty_p
*** 1012,1018 ****
  diagnostic_event::meaning
  inlined_call_event::get_meaning () const
  {
!   return meaning (VERB_call, NOUN_function);
  }
  
  /* class setjmp_event : public checker_event.  */
--- 1012,1018 ----
  diagnostic_event::meaning
  inlined_call_event::get_meaning () const
  {
!   return meaning (verb::call, noun::function);
  }
  
  /* class setjmp_event : public checker_event.  */
*************** warning_event::print_desc (pretty_printe
*** 1252,1258 ****
  diagnostic_event::meaning
  warning_event::get_meaning () const
  {
!   return meaning (VERB_danger, NOUN_unknown);
  }
  
  const program_state *
--- 1252,1258 ----
  diagnostic_event::meaning
  warning_event::get_meaning () const
  {
!   return meaning (verb::danger, noun::unknown);
  }
  
  const program_state *
diff -Nrcpad gcc-16-20250629/gcc/analyzer/common.h gcc-16-20250706/gcc/analyzer/common.h
*** gcc-16-20250629/gcc/analyzer/common.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/common.h	Sun Jul  6 22:32:10 2025
*************** class region_offset
*** 209,222 ****
  {
  public:
    region_offset ()
!   : m_base_region (NULL), m_offset (0), m_sym_offset (NULL)
    {
    }
  
    static region_offset make_concrete (const region *base_region,
  				      bit_offset_t offset)
    {
!     return region_offset (base_region, offset, NULL);
    }
    static region_offset make_symbolic (const region *base_region,
  				      const svalue *sym_offset)
--- 209,222 ----
  {
  public:
    region_offset ()
!   : m_base_region (nullptr), m_offset (0), m_sym_offset (nullptr)
    {
    }
  
    static region_offset make_concrete (const region *base_region,
  				      bit_offset_t offset)
    {
!     return region_offset (base_region, offset, nullptr);
    }
    static region_offset make_symbolic (const region *base_region,
  				      const svalue *sym_offset)
*************** public:
*** 228,235 ****
  
    const region *get_base_region () const { return m_base_region; }
  
!   bool concrete_p () const { return m_sym_offset == NULL; }
!   bool symbolic_p () const { return m_sym_offset != NULL; }
  
    bit_offset_t get_bit_offset () const
    {
--- 228,235 ----
  
    const region *get_base_region () const { return m_base_region; }
  
!   bool concrete_p () const { return m_sym_offset == nullptr; }
!   bool symbolic_p () const { return m_sym_offset != nullptr; }
  
    bit_offset_t get_bit_offset () const
    {
*************** public:
*** 306,312 ****
    }
  
    virtual const builtin_known_function *
!   dyn_cast_builtin_kf () const { return NULL; }
  };
  
  /* Subclass of known_function for builtin functions.  */
--- 306,312 ----
    }
  
    virtual const builtin_known_function *
!   dyn_cast_builtin_kf () const { return nullptr; }
  };
  
  /* Subclass of known_function for builtin functions.  */
*************** public:
*** 567,579 ****
        delete (*iter).second;
    }
  
!   /* Get the instance of T for K if one exists, or NULL.  */
  
    T *get (const key_t &k) const
    {
      if (instance_t **slot = const_cast<inner_map_t &> (m_inner_map).get (k))
        return *slot;
!     return NULL;
    }
  
    /* Take ownership of INSTANCE.  */
--- 567,579 ----
        delete (*iter).second;
    }
  
!   /* Get the instance of T for K if one exists, or nullptr.  */
  
    T *get (const key_t &k) const
    {
      if (instance_t **slot = const_cast<inner_map_t &> (m_inner_map).get (k))
        return *slot;
!     return nullptr;
    }
  
    /* Take ownership of INSTANCE.  */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/constraint-manager.cc gcc-16-20250706/gcc/analyzer/constraint-manager.cc
*** gcc-16-20250629/gcc/analyzer/constraint-manager.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/constraint-manager.cc	Sun Jul  6 22:32:10 2025
*************** bounded_ranges::canonicalize ()
*** 609,615 ****
      {
        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)))
--- 609,615 ----
      {
        bounded_range *prev = &m_ranges[i - 1];
        const bounded_range *next = &m_ranges[i];
!       if (prev->intersects_p (*next, nullptr)
  	  || (can_plus_one_p (prev->m_upper)
  	      && tree_int_cst_equal (plus_one (prev->m_upper),
  				     next->m_lower)))
*************** bounded_ranges_manager::log_stats (logge
*** 1058,1064 ****
  /* equiv_class's default ctor.  */
  
  equiv_class::equiv_class ()
! : m_constant (NULL_TREE), m_cst_sval (NULL), m_vars ()
  {
  }
  
--- 1058,1064 ----
  /* equiv_class's default ctor.  */
  
  equiv_class::equiv_class ()
! : m_constant (NULL_TREE), m_cst_sval (nullptr), m_vars ()
  {
  }
  
*************** on_liveness_change (const svalue_set &li
*** 3024,3030 ****
  		    const region_model *model)
  {
    dead_svalue_purger p (live_svalues, model);
!   purge (p, NULL);
  }
  
  class svalue_purger
--- 3024,3030 ----
  		    const region_model *model)
  {
    dead_svalue_purger p (live_svalues, model);
!   purge (p, nullptr);
  }
  
  class svalue_purger
*************** void
*** 3047,3053 ****
  constraint_manager::purge_state_involving (const svalue *sval)
  {
    svalue_purger p (sval);
!   purge (p, NULL);
  }
  
  /* Comparator for use by constraint_manager::canonicalize.
--- 3047,3053 ----
  constraint_manager::purge_state_involving (const svalue *sval)
  {
    svalue_purger p (sval);
!   purge (p, nullptr);
  }
  
  /* Comparator for use by constraint_manager::canonicalize.
*************** public:
*** 3191,3197 ****
    {
      /* Special-case for widening.  */
      if (lhs->get_kind () == SK_WIDENING)
!       if (!m_cm_b->get_equiv_class_by_svalue (lhs, NULL))
  	{
  	  /* LHS isn't constrained within m_cm_b.  */
  	  bool sat = m_out->add_constraint (lhs, code, rhs);
--- 3191,3197 ----
    {
      /* Special-case for widening.  */
      if (lhs->get_kind () == SK_WIDENING)
!       if (!m_cm_b->get_equiv_class_by_svalue (lhs, nullptr))
  	{
  	  /* LHS isn't constrained within m_cm_b.  */
  	  bool sat = m_out->add_constraint (lhs, code, rhs);
*************** test_constraint_conditions ()
*** 3515,3521 ****
      ADD_SAT_CONSTRAINT (model, x, EQ_EXPR, x);
      ADD_SAT_CONSTRAINT (model, int_42, EQ_EXPR, int_42);
      /* ...even when done directly via svalues: */
!     const svalue *sval_int_42 = model.get_rvalue (int_42, NULL);
      bool sat = model.get_constraints ()->add_constraint (sval_int_42,
  							  EQ_EXPR,
  							  sval_int_42);
--- 3515,3521 ----
      ADD_SAT_CONSTRAINT (model, x, EQ_EXPR, x);
      ADD_SAT_CONSTRAINT (model, int_42, EQ_EXPR, int_42);
      /* ...even when done directly via svalues: */
!     const svalue *sval_int_42 = model.get_rvalue (int_42, nullptr);
      bool sat = model.get_constraints ()->add_constraint (sval_int_42,
  							  EQ_EXPR,
  							  sval_int_42);
*************** test_purging (void)
*** 4304,4311 ****
      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);
--- 4304,4311 ----
      ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
  
      /* Purge state for "a".  */
!     const svalue *sval_a = model.get_rvalue (a, nullptr);
!     model.purge_state_involving (sval_a, nullptr);
      model.canonicalize ();
      /* We should have an empty constraint_manager.  */
      ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 0);
*************** test_purging (void)
*** 4322,4329 ****
      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);
--- 4322,4329 ----
      ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 2);
  
      /* Purge state for "a".  */
!     const svalue *sval_a = model.get_rvalue (a, nullptr);
!     model.purge_state_involving (sval_a, nullptr);
      model.canonicalize ();
      /* We should just have the constraint/ECs involving b != 0.  */
      ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 2);
*************** test_purging (void)
*** 4341,4348 ****
      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);
--- 4341,4348 ----
      ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
  
      /* Purge state for "a".  */
!     const svalue *sval_a = model.get_rvalue (a, nullptr);
!     model.purge_state_involving (sval_a, nullptr);
      model.canonicalize ();
      /* We should just have the EC involving b == 0.  */
      ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 1);
*************** test_purging (void)
*** 4359,4366 ****
      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);
--- 4359,4366 ----
      ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
  
      /* Purge state for "a".  */
!     const svalue *sval_a = model.get_rvalue (a, nullptr);
!     model.purge_state_involving (sval_a, nullptr);
      model.canonicalize ();
      /* We should have an empty constraint_manager.  */
      ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 0);
*************** test_purging (void)
*** 4377,4384 ****
      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);
--- 4377,4384 ----
      ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
  
      /* Purge state for "a".  */
!     const svalue *sval_a = model.get_rvalue (a, nullptr);
!     model.purge_state_involving (sval_a, nullptr);
      model.canonicalize ();
      /* We should just have the constraint/ECs involving b != 0.  */
      ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 2);
*************** test_purging (void)
*** 4396,4403 ****
      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);
--- 4396,4403 ----
      ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
  
      /* Purge state for "a".  */
!     const svalue *sval_a = model.get_rvalue (a, nullptr);
!     model.purge_state_involving (sval_a, nullptr);
      model.canonicalize ();
      /* We should just have the EC involving b == 0.  */
      ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 1);
*************** test_bounded_range ()
*** 4459,4466 ****
    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]");
--- 4459,4466 ----
    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, nullptr));
!   ASSERT_FALSE (br_u8_64_128.intersects_p (br_u8_0, nullptr));
  
    bounded_range br_u8_128_255 (u8_128, u8_255);
    ASSERT_DUMP_BOUNDED_RANGE_EQ (br_u8_128_255, "[128, 255]");
diff -Nrcpad gcc-16-20250629/gcc/analyzer/constraint-manager.h gcc-16-20250706/gcc/analyzer/constraint-manager.h
*** gcc-16-20250629/gcc/analyzer/constraint-manager.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/constraint-manager.h	Sun Jul  6 22:32:10 2025
*************** private:
*** 226,233 ****
      {
        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);
--- 226,233 ----
      {
        return k->get_hash ();
      }
!     static inline bool is_empty (key_type k) { return k == nullptr; }
!     static inline void mark_empty (key_type &k) { k = nullptr; }
      static inline bool is_deleted (key_type k)
      {
        return k == reinterpret_cast<key_type> (1);
diff -Nrcpad gcc-16-20250629/gcc/analyzer/diagnostic-manager.cc gcc-16-20250706/gcc/analyzer/diagnostic-manager.cc
*** gcc-16-20250629/gcc/analyzer/diagnostic-manager.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/diagnostic-manager.cc	Sun Jul  6 22:32:10 2025
*************** class epath_finder
*** 63,69 ****
  public:
    epath_finder (const exploded_graph &eg)
    : m_eg (eg),
!     m_sep (NULL)
    {
      /* This is shared by all diagnostics, but only needed if
         !flag_analyzer_feasibility.  */
--- 63,69 ----
  public:
    epath_finder (const exploded_graph &eg)
    : m_eg (eg),
!     m_sep (nullptr)
    {
      /* This is shared by all diagnostics, but only needed if
         !flag_analyzer_feasibility.  */
*************** private:
*** 125,131 ****
     within ENODE.
  
     Ideally we want to report the shortest feasible path.
!    Return NULL if we could not find a feasible path
     (when flag_analyzer_feasibility is true).
  
     If flag_analyzer_feasibility is false, then simply return the
--- 125,131 ----
     within ENODE.
  
     Ideally we want to report the shortest feasible path.
!    Return nullptr if we could not find a feasible path
     (when flag_analyzer_feasibility is true).
  
     If flag_analyzer_feasibility is false, then simply return the
*************** epath_finder::get_best_epath (const expl
*** 177,183 ****
  	    logger->log ("rejecting %qs at EN: %i, SN: %i (sd: %i)"
  			 " due to not finding feasible path",
  			 desc, enode->m_index, snode_idx, diag_idx);
! 	  return NULL;
  	}
      }
    else
--- 177,183 ----
  	    logger->log ("rejecting %qs at EN: %i, SN: %i (sd: %i)"
  			 " due to not finding feasible path",
  			 desc, enode->m_index, snode_idx, diag_idx);
! 	  return nullptr;
  	}
      }
    else
*************** class feasible_worklist
*** 221,227 ****
  {
  public:
    feasible_worklist (const shortest_paths<eg_traits, exploded_path> &sep)
!   : m_queue (key_t (*this, NULL)),
      m_sep (sep)
    {
    }
--- 221,227 ----
  {
  public:
    feasible_worklist (const shortest_paths<eg_traits, exploded_path> &sep)
!   : m_queue (key_t (*this, nullptr)),
      m_sep (sep)
    {
    }
*************** epath_finder::explore_feasible_paths (co
*** 416,422 ****
       a limit.  */
  
    /* Set this if we find a feasible path to TARGET_ENODE.  */
!   std::unique_ptr<exploded_path> best_path = NULL;
  
    {
      auto_checking_feasibility sentinel (mgr);
--- 416,422 ----
       a limit.  */
  
    /* Set this if we find a feasible path to TARGET_ENODE.  */
!   std::unique_ptr<exploded_path> best_path = nullptr;
  
    {
      auto_checking_feasibility sentinel (mgr);
*************** process_worklist_item (feasible_worklist
*** 508,514 ****
        std::unique_ptr<rejected_constraint> rc;
        if (succ_state.maybe_update_for_edge (logger, succ_eedge, nullptr, &rc))
  	{
! 	  gcc_assert (rc == NULL);
  	  feasible_node *succ_fnode
  	    = fg->add_node (succ_eedge->m_dest,
  			    succ_state,
--- 508,514 ----
        std::unique_ptr<rejected_constraint> rc;
        if (succ_state.maybe_update_for_edge (logger, succ_eedge, nullptr, &rc))
  	{
! 	  gcc_assert (rc == nullptr);
  	  feasible_node *succ_fnode
  	    = fg->add_node (succ_eedge->m_dest,
  			    succ_state,
*************** dump_trimmed_graph (const exploded_node
*** 612,618 ****
    pp_printf (&pp, "%s.%s.%i.to-en%i.tg.dot",
  	     dump_base_name, desc, diag_idx, target_enode->m_index);
    char *filename = xstrdup (pp_formatted_text (&pp));
!   tg.dump_dot (filename, NULL, args);
    free (filename);
  }
  
--- 612,618 ----
    pp_printf (&pp, "%s.%s.%i.to-en%i.tg.dot",
  	     dump_base_name, desc, diag_idx, target_enode->m_index);
    char *filename = xstrdup (pp_formatted_text (&pp));
!   tg.dump_dot (filename, nullptr, args);
    free (filename);
  }
  
*************** epath_finder::dump_feasible_graph (const
*** 630,636 ****
    pp_printf (&pp, "%s.%s.%i.to-en%i.fg.dot",
  	     dump_base_name, desc, diag_idx, target_enode->m_index);
    char *filename = xstrdup (pp_formatted_text (&pp));
!   fg.dump_dot (filename, NULL, args);
    free (filename);
  }
  
--- 630,636 ----
    pp_printf (&pp, "%s.%s.%i.to-en%i.fg.dot",
  	     dump_base_name, desc, diag_idx, target_enode->m_index);
    char *filename = xstrdup (pp_formatted_text (&pp));
!   fg.dump_dot (filename, nullptr, args);
    free (filename);
  }
  
*************** saved_diagnostic::dump_as_dot_node (pret
*** 827,833 ****
  
  /* Use PF to find the best exploded_path for this saved_diagnostic,
     and store it in m_best_epath.
!    If we don't have a specific location in m_loc and m_stmt is still NULL,
     use m_stmt_finder on the epath to populate m_stmt.
     Return true if a best path was found.  */
  
--- 827,833 ----
  
  /* Use PF to find the best exploded_path for this saved_diagnostic,
     and store it in m_best_epath.
!    If we don't have a specific location in m_loc and m_stmt is still nullptr,
     use m_stmt_finder on the epath to populate m_stmt.
     Return true if a best path was found.  */
  
*************** saved_diagnostic::calc_best_epath (epath
*** 836,855 ****
  {
    logger *logger = pf->get_logger ();
    LOG_SCOPE (logger);
!   m_problem = NULL;
  
    m_best_epath = pf->get_best_epath (m_enode, m_stmt,
  				     *m_d, m_d->get_kind (), m_idx,
  				     &m_problem);
  
    /* Handle failure to find a feasible path.  */
!   if (m_best_epath == NULL)
      return false;
  
    gcc_assert (m_best_epath);
    if (m_loc == UNKNOWN_LOCATION)
      {
!       if (m_stmt == NULL)
  	{
  	  gcc_assert (m_stmt_finder);
  	  m_stmt = m_stmt_finder->find_stmt (*m_best_epath);
--- 836,855 ----
  {
    logger *logger = pf->get_logger ();
    LOG_SCOPE (logger);
!   m_problem = nullptr;
  
    m_best_epath = pf->get_best_epath (m_enode, m_stmt,
  				     *m_d, m_d->get_kind (), m_idx,
  				     &m_problem);
  
    /* Handle failure to find a feasible path.  */
!   if (m_best_epath == nullptr)
      return false;
  
    gcc_assert (m_best_epath);
    if (m_loc == UNKNOWN_LOCATION)
      {
!       if (m_stmt == nullptr)
  	{
  	  gcc_assert (m_stmt_finder);
  	  m_stmt = m_stmt_finder->find_stmt (*m_best_epath);
*************** diagnostic_manager::add_diagnostic (cons
*** 1198,1204 ****
  				    std::unique_ptr<pending_diagnostic> d)
  {
    gcc_assert (ploc.m_enode);
!   return add_diagnostic (NULL, ploc, NULL_TREE, NULL, 0, std::move (d));
  }
  
  /* Add PN to the most recent saved_diagnostic.  */
--- 1198,1204 ----
  				    std::unique_ptr<pending_diagnostic> d)
  {
    gcc_assert (ploc.m_enode);
!   return add_diagnostic (nullptr, ploc, NULL_TREE, nullptr, 0, std::move (d));
  }
  
  /* Add PN to the most recent saved_diagnostic.  */
*************** public:
*** 1343,1349 ****
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = NULL;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
--- 1343,1349 ----
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = nullptr;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
*************** public:
*** 1353,1359 ****
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == NULL;
    }
    static const bool empty_zero_p = true;
  };
--- 1353,1359 ----
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == nullptr;
    }
    static const bool empty_zero_p = true;
  };
*************** diagnostic_manager::emit_saved_diagnosti
*** 1620,1626 ****
       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.inject_any_inlined_call_events (get_logger ());
  
--- 1620,1626 ----
       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, nullptr);
  
    emission_path.inject_any_inlined_call_events (get_logger ());
  
*************** diagnostic_manager::build_emission_path
*** 1704,1710 ****
  		{
  		  emission_path->add_region_creation_events
  		    (pb.get_pending_diagnostic (),
! 		     reg, NULL,
  		     event_loc_info (DECL_SOURCE_LOCATION (decl),
  				     NULL_TREE,
  				     0),
--- 1704,1710 ----
  		{
  		  emission_path->add_region_creation_events
  		    (pb.get_pending_diagnostic (),
! 		     reg, nullptr,
  		     event_loc_info (DECL_SOURCE_LOCATION (decl),
  				     NULL_TREE,
  				     0),
*************** diagnostic_manager::add_event_on_final_n
*** 1763,1769 ****
  	= 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:
--- 1763,1769 ----
  	= src_model->get_dynamic_extents (base_reg);
  	    const svalue *new_extents
  	= dst_model->get_dynamic_extents (base_reg);
! 	    if (old_extents == nullptr && new_extents != nullptr)
  	      switch (base_reg->get_kind ())
  		{
  		default:
*************** struct null_assignment_sm_context : publ
*** 1976,1982 ****
  				    tree var) final override
    {
      const svalue *var_old_sval
!       = m_old_state->m_region_model->get_rvalue (var, NULL);
      const sm_state_map *old_smap = m_old_state->m_checker_states[m_sm_idx];
  
      state_machine::state_t current
--- 1976,1982 ----
  				    tree var) final override
    {
      const svalue *var_old_sval
!       = m_old_state->m_region_model->get_rvalue (var, nullptr);
      const sm_state_map *old_smap = m_old_state->m_checker_states[m_sm_idx];
  
      state_machine::state_t current
*************** struct null_assignment_sm_context : publ
*** 2005,2011 ****
        return;
  
      const svalue *var_new_sval
!       = m_new_state->m_region_model->get_rvalue (var, NULL);
  
      const supernode *supernode = m_point->get_supernode ();
      int stack_depth = m_point->get_stack_depth ();
--- 2005,2011 ----
        return;
  
      const svalue *var_new_sval
!       = m_new_state->m_region_model->get_rvalue (var, nullptr);
  
      const supernode *supernode = m_point->get_supernode ();
      int stack_depth = m_point->get_stack_depth ();
*************** struct null_assignment_sm_context : publ
*** 2092,2098 ****
      if (!assign_stmt)
       return NULL_TREE;
      if (const svalue *sval
! 	= m_new_state->m_region_model->get_gassign_result (assign_stmt, NULL))
        if (tree cst = sval->maybe_get_constant ())
  	if (::zerop(cst))
  	  return gimple_assign_lhs (assign_stmt);
--- 2092,2098 ----
      if (!assign_stmt)
       return NULL_TREE;
      if (const svalue *sval
! 	= m_new_state->m_region_model->get_gassign_result (assign_stmt, nullptr))
        if (tree cst = sval->maybe_get_constant ())
  	if (::zerop(cst))
  	  return gimple_assign_lhs (assign_stmt);
*************** diagnostic_manager::add_events_for_eedge
*** 2253,2259 ****
  		  {
  		    const extrinsic_state &ext_state = pb.get_ext_state ();
  		    program_state old_state (iter_state);
! 		    iter_state.m_region_model->on_assignment (assign, NULL);
  		    for (unsigned i = 0; i < ext_state.get_num_checkers (); i++)
  		      {
  			const state_machine &sm = ext_state.get_sm (i);
--- 2253,2259 ----
  		  {
  		    const extrinsic_state &ext_state = pb.get_ext_state ();
  		    program_state old_state (iter_state);
! 		    iter_state.m_region_model->on_assignment (assign, nullptr);
  		    for (unsigned i = 0; i < ext_state.get_num_checkers (); i++)
  		      {
  			const state_machine &sm = ext_state.get_sm (i);
*************** diagnostic_manager::add_events_for_eedge
*** 2299,2305 ****
  		= 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:
--- 2299,2305 ----
  		= src_model->get_dynamic_extents (base_reg);
  	      const svalue *new_extents
  		= dst_model->get_dynamic_extents (base_reg);
! 	      if (old_extents == nullptr && new_extents != nullptr)
  		switch (base_reg->get_kind ())
  		  {
  		  default:
*************** same_line_as_p (const expanded_location
*** 3044,3050 ****
    const checker_event *ev = path->get_checker_event (idx);
    expanded_location idx_exp_loc = expand_location (ev->get_location ());
    gcc_assert (ref_exp_loc.file);
!   if (idx_exp_loc.file == NULL)
      return false;
    if (strcmp (ref_exp_loc.file, idx_exp_loc.file))
      return false;
--- 3044,3050 ----
    const checker_event *ev = path->get_checker_event (idx);
    expanded_location idx_exp_loc = expand_location (ev->get_location ());
    gcc_assert (ref_exp_loc.file);
!   if (idx_exp_loc.file == nullptr)
      return false;
    if (strcmp (ref_exp_loc.file, idx_exp_loc.file))
      return false;
*************** diagnostic_manager::consolidate_conditio
*** 3109,3115 ****
  	    = path->get_checker_event (start_idx);
  	  expanded_location start_exp_loc
  	    = expand_location (old_start_ev->get_location ());
! 	  if (start_exp_loc.file == NULL)
  	    continue;
  	  if (!same_line_as_p (start_exp_loc, path, start_idx + 1))
  	    continue;
--- 3109,3115 ----
  	    = path->get_checker_event (start_idx);
  	  expanded_location start_exp_loc
  	    = expand_location (old_start_ev->get_location ());
! 	  if (start_exp_loc.file == nullptr)
  	    continue;
  	  if (!same_line_as_p (start_exp_loc, path, start_idx + 1))
  	    continue;
diff -Nrcpad gcc-16-20250629/gcc/analyzer/engine.cc gcc-16-20250706/gcc/analyzer/engine.cc
*** gcc-16-20250629/gcc/analyzer/engine.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/engine.cc	Sun Jul  6 22:32:10 2025
*************** impl_region_model_context (program_state
*** 95,108 ****
  			   const extrinsic_state &ext_state,
  			   uncertainty_t *uncertainty,
  			   logger *logger)
! : m_eg (NULL), m_logger (logger), m_enode_for_diag (NULL),
!   m_old_state (NULL),
    m_new_state (state),
!   m_stmt (NULL),
!   m_stmt_finder (NULL),
    m_ext_state (ext_state),
    m_uncertainty (uncertainty),
!   m_path_ctxt (NULL),
    m_out_could_have_done_work (nullptr)
  {
  }
--- 95,108 ----
  			   const extrinsic_state &ext_state,
  			   uncertainty_t *uncertainty,
  			   logger *logger)
! : m_eg (nullptr), m_logger (logger), m_enode_for_diag (nullptr),
!   m_old_state (nullptr),
    m_new_state (state),
!   m_stmt (nullptr),
!   m_stmt_finder (nullptr),
    m_ext_state (ext_state),
    m_uncertainty (uncertainty),
!   m_path_ctxt (nullptr),
    m_out_could_have_done_work (nullptr)
  {
  }
*************** impl_region_model_context::warn (std::un
*** 113,119 ****
  {
    LOG_FUNC (get_logger ());
    auto curr_stmt_finder = custom_finder ? custom_finder : m_stmt_finder;
!   if (m_stmt == NULL && curr_stmt_finder == NULL)
      {
        if (get_logger ())
  	get_logger ()->log ("rejecting diagnostic: no stmt");
--- 113,119 ----
  {
    LOG_FUNC (get_logger ());
    auto curr_stmt_finder = custom_finder ? custom_finder : m_stmt_finder;
!   if (m_stmt == nullptr && curr_stmt_finder == nullptr)
      {
        if (get_logger ())
  	get_logger ()->log ("rejecting diagnostic: no stmt");
*************** public:
*** 296,302 ****
  		   const sm_state_map *old_smap,
  		   sm_state_map *new_smap,
  		   path_context *path_ctxt,
! 		   const stmt_finder *stmt_finder = NULL,
  		   bool unknown_side_effects = false)
    : sm_context (sm_idx, sm),
      m_logger (eg.get_logger ()),
--- 296,302 ----
  		   const sm_state_map *old_smap,
  		   sm_state_map *new_smap,
  		   path_context *path_ctxt,
! 		   const stmt_finder *stmt_finder = nullptr,
  		   bool unknown_side_effects = false)
    : sm_context (sm_idx, sm),
      m_logger (eg.get_logger ()),
*************** public:
*** 314,321 ****
    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);
    }
--- 314,321 ----
    tree get_fndecl_for_call (const gcall &call) final override
    {
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, nullptr, nullptr, nullptr/*m_enode->get_state ()*/,
!        nullptr, &call);
      region_model *model = m_new_state->m_region_model;
      return model->get_fndecl_for_call (call, &old_ctxt);
    }
*************** public:
*** 325,334 ****
    {
      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 ());
--- 325,334 ----
    {
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
!     /* Use nullptr 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, nullptr);
  
      state_machine::state_t current
        = m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ());
*************** public:
*** 353,361 ****
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
      const svalue *var_new_sval
!       = m_new_state->m_region_model->get_rvalue (var, NULL);
      const svalue *origin_new_sval
!       = m_new_state->m_region_model->get_rvalue (origin, NULL);
  
      /* We use the new sval here to avoid issues with uninitialized values.  */
      state_machine::state_t current
--- 353,361 ----
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
      const svalue *var_new_sval
!       = m_new_state->m_region_model->get_rvalue (var, nullptr);
      const svalue *origin_new_sval
!       = m_new_state->m_region_model->get_rvalue (origin, nullptr);
  
      /* We use the new sval here to avoid issues with uninitialized values.  */
      state_machine::state_t current
*************** public:
*** 378,388 ****
      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);
  
      const svalue *origin_new_sval
!       = m_new_state->m_region_model->get_rvalue (origin, NULL);
  
      state_machine::state_t current
        = m_old_smap->get_state (sval, m_eg.get_ext_state ());
--- 378,388 ----
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, nullptr, nullptr, nullptr/*m_enode->get_state ()*/,
!        nullptr, stmt);
  
      const svalue *origin_new_sval
!       = m_new_state->m_region_model->get_rvalue (origin, nullptr);
  
      state_machine::state_t current
        = m_old_smap->get_state (sval, m_eg.get_ext_state ());
*************** public:
*** 408,414 ****
      LOG_FUNC (get_logger ());
      gcc_assert (d);
      const svalue *var_old_sval
!       = m_old_state->m_region_model->get_rvalue (var, NULL);
      state_machine::state_t current
        = (var
  	 ? m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ())
--- 408,414 ----
      LOG_FUNC (get_logger ());
      gcc_assert (d);
      const svalue *var_old_sval
!       = m_old_state->m_region_model->get_rvalue (var, nullptr);
      state_machine::state_t current
        = (var
  	 ? m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ())
*************** public:
*** 461,467 ****
        return expr;
  
      gcc_assert (m_new_state);
!     const svalue *sval = m_new_state->m_region_model->get_rvalue (expr, NULL);
      /* Find trees for all regions storing the value.  */
      if (tree t = m_new_state->m_region_model->get_representative_tree (sval))
        return t;
--- 461,467 ----
        return expr;
  
      gcc_assert (m_new_state);
!     const svalue *sval = m_new_state->m_region_model->get_rvalue (expr, nullptr);
      /* Find trees for all regions storing the value.  */
      if (tree t = m_new_state->m_region_model->get_representative_tree (sval))
        return t;
*************** public:
*** 502,508 ****
      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))
--- 502,508 ----
      if (!assign_stmt)
       return NULL_TREE;
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, m_old_state, m_new_state, nullptr, nullptr, stmt);
      if (const svalue *sval
  	= m_new_state->m_region_model->get_gassign_result (assign_stmt,
  							    &old_ctxt))
*************** public:
*** 666,672 ****
        }
  
      gcc_unreachable ();
!     return NULL;
    }
  
    void update_event_loc_info (event_loc_info &) final override
--- 666,672 ----
        }
  
      gcc_unreachable ();
!     return nullptr;
    }
  
    void update_event_loc_info (event_loc_info &) final override
*************** impl_region_model_context::on_condition
*** 962,968 ****
        sm.on_condition (sm_ctxt,
  		       (m_enode_for_diag
  			? m_enode_for_diag->get_supernode ()
! 			: NULL),
  		       m_stmt,
  		       lhs, op, rhs);
      }
--- 962,968 ----
        sm.on_condition (sm_ctxt,
  		       (m_enode_for_diag
  			? m_enode_for_diag->get_supernode ()
! 			: nullptr),
  		       m_stmt,
  		       lhs, op, rhs);
      }
*************** impl_region_model_context::on_bounded_ra
*** 989,995 ****
        sm.on_bounded_ranges (sm_ctxt,
  			    (m_enode_for_diag
  			     ? m_enode_for_diag->get_supernode ()
! 			     : NULL),
  			    m_stmt, sval, ranges);
      }
  }
--- 989,995 ----
        sm.on_bounded_ranges (sm_ctxt,
  			    (m_enode_for_diag
  			     ? m_enode_for_diag->get_supernode ()
! 			     : nullptr),
  			    m_stmt, sval, ranges);
      }
  }
*************** exploded_node::on_stmt (exploded_graph &
*** 1540,1546 ****
  	= 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.  */
--- 1540,1546 ----
  	= 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, nullptr,
  			       unknown_side_effects);
  
        /* Allow the state_machine to handle the stmt.  */
*************** public:
*** 1851,1857 ****
    stale_jmp_buf (const gcall &setjmp_call, const gcall &longjmp_call,
  		 const program_point &setjmp_point)
    : m_setjmp_call (setjmp_call), m_longjmp_call (longjmp_call),
!     m_setjmp_point (setjmp_point), m_stack_pop_event (NULL)
    {}
  
    int get_controlling_option () const final override
--- 1851,1857 ----
    stale_jmp_buf (const gcall &setjmp_call, const gcall &longjmp_call,
  		 const program_point &setjmp_point)
    : m_setjmp_call (setjmp_call), m_longjmp_call (longjmp_call),
!     m_setjmp_point (setjmp_point), m_stack_pop_event (nullptr)
    {}
  
    int get_controlling_option () const final override
*************** exploded_node::on_longjmp (exploded_grap
*** 1993,1999 ****
  				setjmp_point.get_stack_depth (), ctxt);
  
    /* Detect leaks in the new state relative to the old state.  */
!   program_state::detect_leaks (get_state (), *new_state, NULL,
  				eg.get_ext_state (), ctxt);
  
    program_point next_point
--- 1993,1999 ----
  				setjmp_point.get_stack_depth (), ctxt);
  
    /* Detect leaks in the new state relative to the old state.  */
!   program_state::detect_leaks (get_state (), *new_state, nullptr,
  				eg.get_ext_state (), ctxt);
  
    program_point next_point
*************** exploded_node::on_longjmp (exploded_grap
*** 2007,2013 ****
    if (next)
      {
        exploded_edge *eedge
! 	= eg.add_edge (const_cast<exploded_node *> (this), next, NULL, true,
  		       std::make_unique<rewind_info_t> (tmp_setjmp_record,
  							longjmp_call));
  
--- 2007,2013 ----
    if (next)
      {
        exploded_edge *eedge
! 	= eg.add_edge (const_cast<exploded_node *> (this), next, nullptr, true,
  		       std::make_unique<rewind_info_t> (tmp_setjmp_record,
  							longjmp_call));
  
*************** exploded_graph::unwind_from_exception (e
*** 2238,2244 ****
  	  if (!next_enode)
  	    return;
  
! 	  add_edge (iter_enode, next_enode, NULL, false, nullptr);
  	  return;
  	}
        else
--- 2238,2244 ----
  	  if (!next_enode)
  	    return;
  
! 	  add_edge (iter_enode, next_enode, nullptr, false, nullptr);
  	  return;
  	}
        else
*************** exploded_graph::unwind_from_exception (e
*** 2266,2272 ****
  					    throw_stmt);
  	    program_state::detect_leaks (iter_enode->get_state (),
  					 unwound_state,
! 					 NULL,
  					 get_ext_state (), &ctxt);
  	  }
  	  const call_string &cs = iter_enode->get_point ().get_call_string ();
--- 2266,2272 ----
  					    throw_stmt);
  	    program_state::detect_leaks (iter_enode->get_state (),
  					 unwound_state,
! 					 nullptr,
  					 get_ext_state (), &ctxt);
  	  }
  	  const call_string &cs = iter_enode->get_point ().get_call_string ();
*************** exploded_graph::unwind_from_exception (e
*** 2296,2302 ****
  	      if (!after_unwind_enode)
  		return;
  
! 	      add_edge (iter_enode, after_unwind_enode, NULL, true,
  			std::move (unwind_edge_info));
  	      iter_enode = after_unwind_enode;
  	    }
--- 2296,2302 ----
  	      if (!after_unwind_enode)
  		return;
  
! 	      add_edge (iter_enode, after_unwind_enode, nullptr, true,
  			std::move (unwind_edge_info));
  	      iter_enode = after_unwind_enode;
  	    }
*************** exploded_node::on_throw (exploded_graph
*** 2351,2357 ****
      return;
  
    /* Create custom exploded_edge for a throw.  */
!   eg.add_edge (this, after_throw_enode, NULL, true,
  	       std::move (throw_edge_info));
  
    eg.unwind_from_exception (*after_throw_enode, &throw_call, ctxt);
--- 2351,2357 ----
      return;
  
    /* Create custom exploded_edge for a throw.  */
!   eg.add_edge (this, after_throw_enode, nullptr, true,
  	       std::move (throw_edge_info));
  
    eg.unwind_from_exception (*after_throw_enode, &throw_call, ctxt);
*************** exploded_node::detect_leaks (exploded_gr
*** 2404,2413 ****
  
    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, nullptr);
    program_state::detect_leaks (old_state, new_state, result,
  			       eg.get_ext_state (), &ctxt);
  }
--- 2404,2413 ----
  
    uncertainty_t uncertainty;
    impl_region_model_context ctxt (eg, this,
! 				  &old_state, &new_state, &uncertainty, nullptr,
  				  get_stmt ());
!   const svalue *result = nullptr;
!   new_state.m_region_model->pop_frame (nullptr, &result, &ctxt, nullptr);
    program_state::detect_leaks (old_state, new_state, result,
  			       eg.get_ext_state (), &ctxt);
  }
*************** rewind_info_t::update_model (region_mode
*** 2514,2520 ****
  
    model->on_longjmp (get_longjmp_call (),
  		     get_setjmp_call (),
! 		     setjmp_point.get_stack_depth (), NULL);
    return true;
  }
  
--- 2514,2520 ----
  
    model->on_longjmp (get_longjmp_call (),
  		     get_setjmp_call (),
! 		     setjmp_point.get_stack_depth (), nullptr);
    return true;
  }
  
*************** strongly_connected_components::strong_co
*** 2829,2835 ****
  worklist::worklist (const exploded_graph &eg, const analysis_plan &plan)
  : m_scc (eg.get_supergraph (), eg.get_logger ()),
    m_plan (plan),
!   m_queue (key_t (*this, NULL))
  {
  }
  
--- 2829,2835 ----
  worklist::worklist (const exploded_graph &eg, const analysis_plan &plan)
  : m_scc (eg.get_supergraph (), eg.get_logger ()),
    m_plan (plan),
!   m_queue (key_t (*this, nullptr))
  {
  }
  
*************** worklist::key_t::cmp (const worklist::ke
*** 2891,2898 ****
    if (flag_analyzer_call_summaries
        && call_string_a.empty_p ()
        && call_string_b.empty_p ()
!       && point_a.get_function () != NULL
!       && point_b.get_function () != NULL
        && point_a.get_function () != point_b.get_function ())
      {
        if (int cmp = ka.m_worklist.m_plan.cmp_function (point_a.get_function (),
--- 2891,2898 ----
    if (flag_analyzer_call_summaries
        && call_string_a.empty_p ()
        && call_string_b.empty_p ()
!       && point_a.get_function () != nullptr
!       && point_b.get_function () != nullptr
        && point_a.get_function () != point_b.get_function ())
      {
        if (int cmp = ka.m_worklist.m_plan.cmp_function (point_a.get_function (),
*************** worklist::key_t::cmp (const worklist::ke
*** 2928,2946 ****
       ordering).  */
    const supernode *snode_a = ka.m_enode->get_supernode ();
    const supernode *snode_b = kb.m_enode->get_supernode ();
!   if (snode_a == NULL)
      {
!       if (snode_b != NULL)
! 	/* One is NULL.  */
  	return -1;
        else
! 	/* Both are NULL.  */
  	return 0;
      }
!   if (snode_b == NULL)
!     /* One is NULL.  */
      return 1;
!   /* Neither are NULL.  */
    gcc_assert (snode_a && snode_b);
    if (snode_a->m_index != snode_b->m_index)
      return snode_a->m_index - snode_b->m_index;
--- 2928,2946 ----
       ordering).  */
    const supernode *snode_a = ka.m_enode->get_supernode ();
    const supernode *snode_b = kb.m_enode->get_supernode ();
!   if (snode_a == nullptr)
      {
!       if (snode_b != nullptr)
! 	/* One is nullptr.  */
  	return -1;
        else
! 	/* Both are nullptr.  */
  	return 0;
      }
!   if (snode_b == nullptr)
!     /* One is nullptr.  */
      return 1;
!   /* Neither are nullptr.  */
    gcc_assert (snode_a && snode_b);
    if (snode_a->m_index != snode_b->m_index)
      return snode_a->m_index - snode_b->m_index;
*************** exploded_graph::exploded_graph (const su
*** 3014,3020 ****
  {
    m_origin = get_or_create_node
      (program_point::origin (*ext_state.get_model_manager ()),
!      program_state (ext_state), NULL);
    for (int i = 0; i < m_sg.num_nodes (); i++)
      m_PK_AFTER_SUPERNODE_per_snode.quick_push (i);
  }
--- 3014,3020 ----
  {
    m_origin = get_or_create_node
      (program_point::origin (*ext_state.get_model_manager ()),
!      program_state (ext_state), nullptr);
    for (int i = 0; i < m_sg.num_nodes (); i++)
      m_PK_AFTER_SUPERNODE_per_snode.quick_push (i);
  }
*************** mark_params_as_tainted (program_state *s
*** 3066,3075 ****
        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);
--- 3066,3075 ----
        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, nullptr);
        const svalue *init_sval = mgr->get_or_create_initial_value (param_reg);
        smap->set_state (state->m_region_model, init_sval,
! 		       tainted, nullptr /*origin_new_sval*/, ext_state);
        if (POINTER_TYPE_P (TREE_TYPE (param)))
  	{
  	  const region *pointee_reg = mgr->get_symbolic_region (init_sval);
*************** mark_params_as_tainted (program_state *s
*** 3077,3083 ****
  	  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);
  	}
      }
  
--- 3077,3083 ----
  	  const svalue *init_pointee_sval
  	    = mgr->get_or_create_initial_value (pointee_reg);
  	  smap->set_state (state->m_region_model, init_pointee_sval,
! 			   tainted, nullptr /*origin_new_sval*/, ext_state);
  	}
      }
  
*************** exploded_graph::add_function_entry (cons
*** 3163,3169 ****
        logger * const logger = get_logger ();
         if (logger)
  	logger->log ("entrypoint for %qE already exists", fun.decl);
!       return NULL;
      }
  
    program_point point
--- 3163,3169 ----
        logger * const logger = get_logger ();
         if (logger)
  	logger->log ("entrypoint for %qE already exists", fun.decl);
!       return nullptr;
      }
  
    program_point point
*************** exploded_graph::add_function_entry (cons
*** 3172,3178 ****
    program_state state (m_ext_state);
    state.push_frame (m_ext_state, fun);
  
!   std::unique_ptr<custom_edge_info> edge_info = NULL;
  
    if (lookup_attribute ("tainted_args", DECL_ATTRIBUTES (fun.decl)))
      {
--- 3172,3178 ----
    program_state state (m_ext_state);
    state.push_frame (m_ext_state, fun);
  
!   std::unique_ptr<custom_edge_info> edge_info = nullptr;
  
    if (lookup_attribute ("tainted_args", DECL_ATTRIBUTES (fun.decl)))
      {
*************** exploded_graph::add_function_entry (cons
*** 3181,3193 ****
      }
  
    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, false, std::move (edge_info));
  
    m_functions_with_enodes.add (key);
  
--- 3181,3193 ----
      }
  
    if (!state.m_valid)
!     return nullptr;
  
!   exploded_node *enode = get_or_create_node (point, state, nullptr);
    if (!enode)
!     return nullptr;
  
!   add_edge (m_origin, enode, nullptr, false, std::move (edge_info));
  
    m_functions_with_enodes.add (key);
  
*************** exploded_graph::get_or_create_node (cons
*** 3230,3236 ****
      {
        if (logger)
  	logger->log ("invalid state; not creating node");
!       return NULL;
      }
  
    auto_cfun sentinel (point.get_function ());
--- 3230,3236 ----
      {
        if (logger)
  	logger->log ("invalid state; not creating node");
!       return nullptr;
      }
  
    auto_cfun sentinel (point.get_function ());
*************** exploded_graph::get_or_create_node (cons
*** 3344,3350 ****
  		  "terminating analysis for this program point: %s",
  		  pp_formatted_text (&pp));
        per_point_data->m_excess_enodes++;
!       return NULL;
      }
  
    ps.validate (m_ext_state);
--- 3344,3350 ----
  		  "terminating analysis for this program point: %s",
  		  pp_formatted_text (&pp));
        per_point_data->m_excess_enodes++;
!       return nullptr;
      }
  
    ps.validate (m_ext_state);
*************** get_or_create_per_program_point_data (co
*** 3424,3430 ****
  }
  
  /* Get this graph's per-program-point-data for POINT if there is any,
!    otherwise NULL.  */
  
  per_program_point_data *
  exploded_graph::get_per_program_point_data (const program_point &point) const
--- 3424,3430 ----
  }
  
  /* Get this graph's per-program-point-data for POINT if there is any,
!    otherwise nullptr.  */
  
  per_program_point_data *
  exploded_graph::get_per_program_point_data (const program_point &point) const
*************** exploded_graph::get_per_program_point_da
*** 3433,3439 ****
        = const_cast <point_map_t &> (m_per_point_data).get (&point))
      return *slot;
  
!   return NULL;
  }
  
  /* Ensure that this graph has per-call_string-data for CS;
--- 3433,3439 ----
        = const_cast <point_map_t &> (m_per_point_data).get (&point))
      return *slot;
  
!   return nullptr;
  }
  
  /* Ensure that this graph has per-call_string-data for CS;
*************** exploded_graph::get_or_create_per_functi
*** 3466,3472 ****
  }
  
  /* Get this graph's per-function-data for FUN if there is any,
!    otherwise NULL.  */
  
  per_function_data *
  exploded_graph::get_per_function_data (function *fun) const
--- 3466,3472 ----
  }
  
  /* Get this graph's per-function-data for FUN if there is any,
!    otherwise nullptr.  */
  
  per_function_data *
  exploded_graph::get_per_function_data (function *fun) const
*************** exploded_graph::get_per_function_data (f
*** 3475,3481 ****
  	= const_cast <per_function_data_t &> (m_per_function_data).get (fun))
      return *slot;
  
!   return NULL;
  }
  
  /* Return true if FUN should be traversed directly, rather than only as
--- 3475,3481 ----
  	= const_cast <per_function_data_t &> (m_per_function_data).get (fun))
      return *slot;
  
!   return nullptr;
  }
  
  /* Return true if FUN should be traversed directly, rather than only as
*************** add_tainted_args_callback (exploded_grap
*** 3638,3644 ****
    if (!state.m_valid)
      return;
  
!   exploded_node *enode = eg->get_or_create_node (point, state, NULL);
    if (logger)
      {
        if (enode)
--- 3638,3644 ----
    if (!state.m_valid)
      return;
  
!   exploded_node *enode = eg->get_or_create_node (point, state, nullptr);
    if (logger)
      {
        if (enode)
*************** add_tainted_args_callback (exploded_grap
*** 3652,3658 ****
  	}
      }
  
!   eg->add_edge (eg->get_origin (), enode, NULL, false,
  		std::make_unique<tainted_args_call_info> (field, fndecl, loc));
  }
  
--- 3652,3658 ----
  	}
      }
  
!   eg->add_edge (eg->get_origin (), enode, nullptr, false,
  		std::make_unique<tainted_args_call_info> (field, fndecl, loc));
  }
  
*************** exploded_graph::build_initial_worklist (
*** 3726,3732 ****
        tree init = DECL_INITIAL (decl);
        if (!init)
  	continue;
!       walk_tree (&init, add_any_callbacks, this, NULL);
      }
  }
  
--- 3726,3732 ----
        tree init = DECL_INITIAL (decl);
        if (!init)
  	continue;
!       walk_tree (&init, add_any_callbacks, this, nullptr);
      }
  }
  
*************** exploded_graph::process_worklist ()
*** 3807,3813 ****
  		    if (merged_state == state)
  		      {
  			/* Then merge node_2 into node by adding an edge.  */
! 			add_edge (node_2, node, NULL, false);
  
  			/* Remove node_2 from the worklist.  */
  			m_worklist.take_next ();
--- 3807,3813 ----
  		    if (merged_state == state)
  		      {
  			/* Then merge node_2 into node by adding an edge.  */
! 			add_edge (node_2, node, nullptr, false);
  
  			/* Remove node_2 from the worklist.  */
  			m_worklist.take_next ();
*************** exploded_graph::process_worklist ()
*** 3820,3826 ****
  			/* Then merge node into node_2, and leave node_2
  			   in the worklist, to be processed on the next
  			   iteration.  */
! 			add_edge (node, node_2, NULL, false);
  			node->set_status (exploded_node::status::merger);
  			continue;
  		      }
--- 3820,3826 ----
  			/* Then merge node into node_2, and leave node_2
  			   in the worklist, to be processed on the next
  			   iteration.  */
! 			add_edge (node, node_2, nullptr, false);
  			node->set_status (exploded_node::status::merger);
  			continue;
  		      }
*************** exploded_graph::process_worklist ()
*** 3837,3843 ****
  			exploded_node *merged_enode
  			  = get_or_create_node (node->get_point (),
  						merged_state, node);
! 			if (merged_enode == NULL)
  			  continue;
  
  			if (logger)
--- 3837,3843 ----
  			exploded_node *merged_enode
  			  = get_or_create_node (node->get_point (),
  						merged_state, node);
! 			if (merged_enode == nullptr)
  			  continue;
  
  			if (logger)
*************** exploded_graph::process_worklist ()
*** 3865,3871 ****
  			  m_worklist.add_node (merged_enode);
  			else
  			  {
! 			    add_edge (node, merged_enode, NULL, false);
  			    node->set_status (exploded_node::status::merger);
  			  }
  
--- 3865,3871 ----
  			  m_worklist.add_node (merged_enode);
  			else
  			  {
! 			    add_edge (node, merged_enode, nullptr, false);
  			    node->set_status (exploded_node::status::merger);
  			  }
  
*************** exploded_graph::process_worklist ()
*** 3873,3879 ****
  			  m_worklist.add_node (merged_enode);
  			else
  			  {
! 			    add_edge (node_2, merged_enode, NULL, false);
  			    node_2->set_status (exploded_node::status::merger);
  			  }
  
--- 3873,3879 ----
  			  m_worklist.add_node (merged_enode);
  			else
  			  {
! 			    add_edge (node_2, merged_enode, nullptr, false);
  			    node_2->set_status (exploded_node::status::merger);
  			  }
  
*************** maybe_process_run_of_before_supernode_en
*** 4028,4034 ****
  	  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)
--- 4028,4034 ----
  	  uncertainty_t uncertainty;
  	  impl_region_model_context ctxt (*this, iter_enode,
  					  &state, next_state,
! 					  &uncertainty, nullptr, nullptr);
  	  const cfg_superedge *last_cfg_superedge
  	    = iter_sedge->dyn_cast_cfg_superedge ();
  	  if (last_cfg_superedge)
*************** maybe_process_run_of_before_supernode_en
*** 4091,4097 ****
  	= first_item_for_each_merged_state[i]->m_input_enode;
        exploded_node *next
  	= get_or_create_node (next_point, *merged_state, src_enode);
!       /* "next" could be NULL; we handle that when adding the edges below.  */
        next_enodes.quick_push (next);
        if (logger)
  	{
--- 4091,4097 ----
  	= first_item_for_each_merged_state[i]->m_input_enode;
        exploded_node *next
  	= get_or_create_node (next_point, *merged_state, src_enode);
!       /* "next" could be nullptr; we handle that when adding the edges below.  */
        next_enodes.quick_push (next);
        if (logger)
  	{
*************** maybe_process_run_of_before_supernode_en
*** 4108,4114 ****
      {
        exploded_node *next = next_enodes[it->m_merger_idx];
        if (next)
! 	add_edge (it->m_input_enode, next, NULL,
  		  false); /* no "work" is done during merger.  */
        it->m_input_enode->set_status (exploded_node::status::bulk_merged);
      }
--- 4108,4114 ----
      {
        exploded_node *next = next_enodes[it->m_merger_idx];
        if (next)
! 	add_edge (it->m_input_enode, next, nullptr,
  		  false); /* no "work" is done during merger.  */
        it->m_input_enode->set_status (exploded_node::status::bulk_merged);
      }
*************** exploded_graph::maybe_create_dynamic_cal
*** 4219,4225 ****
  
        program_point new_point
  	= program_point::before_supernode (sn_entry,
! 					   NULL,
  					   this_point->get_call_string ());
  
        new_point.push_to_call_stack (sn_exit,
--- 4219,4225 ----
  
        program_point new_point
  	= program_point::before_supernode (sn_entry,
! 					   nullptr,
  					   this_point->get_call_string ());
  
        new_point.push_to_call_stack (sn_exit,
*************** exploded_graph::maybe_create_dynamic_cal
*** 4252,4258 ****
  						     next_state,
  						     node);
  	  if (enode)
! 	    add_edge (node,enode, NULL,
  		      false, /* No work is done by the call itself.  */
  		      std::make_unique<dynamic_call_info_t> (call));
  	  return true;
--- 4252,4258 ----
  						     next_state,
  						     node);
  	  if (enode)
! 	    add_edge (node,enode, nullptr,
  		      false, /* No work is done by the call itself.  */
  		      std::make_unique<dynamic_call_info_t> (call));
  	  return true;
*************** exploded_graph::process_node (exploded_n
*** 4432,4438 ****
  	  {
  	    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)
--- 4432,4438 ----
  	  {
  	    impl_region_model_context ctxt (*this, node,
  					    &state, &next_state,
! 					    &uncertainty, nullptr, nullptr);
  	    const cfg_superedge *last_cfg_superedge
  	      = point.get_from_edge ()->dyn_cast_cfg_superedge ();
  	    if (last_cfg_superedge)
*************** exploded_graph::process_node (exploded_n
*** 4440,4453 ****
  		(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_node *next = get_or_create_node (next_point, next_state, node);
  	if (next)
! 	  add_edge (node, next, NULL,
  		    false); /* Assume no work is done at phi nodes.  */
        }
        break;
--- 4440,4453 ----
  		(node->get_supernode (),
  		 last_cfg_superedge,
  		 &ctxt);
! 	    program_state::detect_leaks (state, next_state, nullptr,
  					 get_ext_state (), &ctxt);
  	  }
  
  	program_point next_point (point.get_next ());
  	exploded_node *next = get_or_create_node (next_point, next_state, node);
  	if (next)
! 	  add_edge (node, next, nullptr,
  		    false); /* Assume no work is done at phi nodes.  */
        }
        break;
*************** exploded_graph::process_node (exploded_n
*** 4480,4486 ****
  	uncertainty_t uncertainty;
  	const supernode *snode = point.get_supernode ();
  	unsigned stmt_idx;
! 	const gimple *prev_stmt = NULL;
  	for (stmt_idx = point.get_stmt_idx ();
  	     stmt_idx < snode->m_stmts.length ();
  	     stmt_idx++)
--- 4480,4486 ----
  	uncertainty_t uncertainty;
  	const supernode *snode = point.get_supernode ();
  	unsigned stmt_idx;
! 	const gimple *prev_stmt = nullptr;
  	for (stmt_idx = point.get_stmt_idx ();
  	     stmt_idx < snode->m_stmts.length ();
  	     stmt_idx++)
*************** exploded_graph::process_node (exploded_n
*** 4512,4519 ****
  	      {
  		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);
  	      }
  
--- 4512,4519 ----
  	      {
  		impl_region_model_context ctxt (*this, node,
  						&old_state, &next_state,
! 						&uncertainty, nullptr, stmt);
! 		program_state::detect_leaks (old_state, next_state, nullptr,
  					     get_ext_state (), &ctxt);
  	      }
  
*************** exploded_graph::process_node (exploded_n
*** 4557,4563 ****
  		    node->m_num_processed_stmts--;
  		    if (logger)
  		      logger->log ("creating edge to split_enode");
! 		    add_edge (node, split_enode, NULL, could_have_done_work);
  		    return;
  		  }
  		else
--- 4557,4563 ----
  		    node->m_num_processed_stmts--;
  		    if (logger)
  		      logger->log ("creating edge to split_enode");
! 		    add_edge (node, split_enode, nullptr, could_have_done_work);
  		    return;
  		  }
  		else
*************** exploded_graph::process_node (exploded_n
*** 4584,4590 ****
  	    exploded_node *next
  	      = get_or_create_node (next_point, next_state, node);
  	    if (next)
! 	      add_edge (node, next, NULL, could_have_done_work);
  	  }
  
  	/* If we have custom edge infos, "bifurcate" the state
--- 4584,4590 ----
  	    exploded_node *next
  	      = get_or_create_node (next_point, next_state, node);
  	    if (next)
! 	      add_edge (node, next, nullptr, could_have_done_work);
  	  }
  
  	/* If we have custom edge infos, "bifurcate" the state
*************** exploded_graph::process_node (exploded_n
*** 4612,4622 ****
  				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_state (&bifurcated_new_state,
! 					 NULL, /* no exploded_edge yet.  */
  					 &bifurcation_ctxt))
  	      {
  		if (exploded_node *next2
--- 4612,4622 ----
  				node, // enode_for_diag
  				&path_ctxt.get_state_at_bifurcation (),
  				&bifurcated_new_state,
! 				nullptr, // uncertainty_t *uncertainty
! 				nullptr, // path_context *path_ctxt
  				stmt);
  	    if (edge_info->update_state (&bifurcated_new_state,
! 					 nullptr, /* no exploded_edge yet.  */
  					 &bifurcation_ctxt))
  	      {
  		if (exploded_node *next2
*************** exploded_graph::process_node (exploded_n
*** 4627,4633 ****
  			 node,
  			 &bifurcation_ctxt))
  		  {
! 		    add_edge (node, next2, NULL,
  			      true /* assume that work could be done */,
  			      std::move (edge_info));
  		  }
--- 4627,4633 ----
  			 node,
  			 &bifurcation_ctxt))
  		  {
! 		    add_edge (node, next2, nullptr,
  			      true /* assume that work could be done */,
  			      std::move (edge_info));
  		  }
*************** exploded_graph::process_node (exploded_n
*** 4708,4714 ****
  						&state,
  						&next_state,
  						&uncertainty,
! 						NULL,
  						point.get_stmt());
  
  		region_model *model = state.m_region_model;
--- 4708,4714 ----
  						&state,
  						&next_state,
  						&uncertainty,
! 						nullptr,
  						point.get_stmt());
  
  		region_model *model = state.m_region_model;
*************** exploded_graph::process_node (exploded_n
*** 4724,4730 ****
  							       logger);
  		if (!call_discovered)
  		  {
! 		    /* Check for jump through NULL.  */
  		    if (tree fn_ptr = gimple_call_fn (&call))
  		      {
  			const svalue *fn_ptr_sval
--- 4724,4730 ----
  							       logger);
  		if (!call_discovered)
  		  {
! 		    /* Check for jump through nullptr.  */
  		    if (tree fn_ptr = gimple_call_fn (&call))
  		      {
  			const svalue *fn_ptr_sval
*************** exploded_graph::process_node (exploded_n
*** 4791,4797 ****
  	    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;
--- 4791,4797 ----
  	    const call_string &cs = point.get_call_string ();
  	    program_point next_point
  	      = program_point::before_supernode (cs.get_caller_node (),
! 						 nullptr,
  						 cs);
  	    program_state next_state (state);
  	    uncertainty_t uncertainty;
*************** exploded_graph::process_node (exploded_n
*** 4809,4815 ****
  							   next_state,
  							   node);
  		if (enode)
! 		  add_edge (node, enode, NULL, false,
  			    std::make_unique<dynamic_call_info_t> (*call, true));
  	      }
  	  }
--- 4809,4815 ----
  							   next_state,
  							   node);
  		if (enode)
! 		  add_edge (node, enode, nullptr, false,
  			    std::make_unique<dynamic_call_info_t> (*call, true));
  	      }
  	  }
*************** exploded_graph::process_node (exploded_n
*** 4819,4825 ****
  }
  
  /* Ensure that this graph has a stats instance for FN, return it.
!    FN can be NULL, in which case a stats instances is returned covering
     "functionless" parts of the graph (the origin node).  */
  
  stats *
--- 4819,4825 ----
  }
  
  /* Ensure that this graph has a stats instance for FN, return it.
!    FN can be nullptr, in which case a stats instances is returned covering
     "functionless" parts of the graph (the origin node).  */
  
  stats *
*************** void
*** 5401,5416 ****
  feasibility_state::update_for_stmt (const gimple *stmt)
  {
    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 unknown_side_effects = m_model.on_call_pre (*call, NULL);
!       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);
  }
  
  /* Dump this object to PP.  */
--- 5401,5416 ----
  feasibility_state::update_for_stmt (const gimple *stmt)
  {
    if (const gassign *assign = dyn_cast <const gassign *> (stmt))
!     m_model.on_assignment (assign, nullptr);
    else if (const gasm *asm_stmt = dyn_cast <const gasm *> (stmt))
!     m_model.on_asm_stmt (asm_stmt, nullptr);
    else if (const gcall *call = dyn_cast <const gcall *> (stmt))
      {
!       bool unknown_side_effects = m_model.on_call_pre (*call, nullptr);
!       m_model.on_call_post (*call, unknown_side_effects, nullptr);
      }
    else if (const greturn *return_ = dyn_cast <const greturn *> (stmt))
!     m_model.on_return (return_, nullptr);
  }
  
  /* Dump this object to PP.  */
*************** template <>
*** 5625,5631 ****
  inline void
  pod_hash_traits<function_call_string>::mark_empty (value_type &v)
  {
!   v.m_fun = NULL;
  }
  template <>
  inline bool
--- 5625,5631 ----
  inline void
  pod_hash_traits<function_call_string>::mark_empty (value_type &v)
  {
!   v.m_fun = nullptr;
  }
  template <>
  inline bool
*************** template <>
*** 5637,5643 ****
  inline bool
  pod_hash_traits<function_call_string>::is_empty (value_type v)
  {
!   return v.m_fun == NULL;
  }
  
  namespace ana {
--- 5637,5643 ----
  inline bool
  pod_hash_traits<function_call_string>::is_empty (value_type v)
  {
!   return v.m_fun == nullptr;
  }
  
  namespace ana {
*************** exploded_graph::dump_exploded_nodes () c
*** 5793,5799 ****
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        char *filename
! 	= concat (dump_base_name, ".eg.txt", NULL);
        FILE *outf = fopen (filename, "w");
        if (!outf)
  	error_at (UNKNOWN_LOCATION, "unable to open %qs for writing", filename);
--- 5793,5799 ----
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        char *filename
! 	= concat (dump_base_name, ".eg.txt", nullptr);
        FILE *outf = fopen (filename, "w");
        if (!outf)
  	error_at (UNKNOWN_LOCATION, "unable to open %qs for writing", filename);
*************** dump_callgraph (const supergraph &sg, co
*** 6220,6226 ****
  
    // TODO
    viz_callgraph vcg (sg);
!   vcg.dump_dot (filename, NULL, viz_callgraph_traits::dump_args_t (eg));
  
    fclose (outf);
  }
--- 6220,6226 ----
  
    // TODO
    viz_callgraph vcg (sg);
!   vcg.dump_dot (filename, nullptr, viz_callgraph_traits::dump_args_t (eg));
  
    fclose (outf);
  }
*************** static void
*** 6231,6237 ****
  dump_callgraph (const supergraph &sg, const exploded_graph *eg)
  {
    auto_timevar tv (TV_ANALYZER_DUMP);
!   char *filename = concat (dump_base_name, ".callgraph.dot", NULL);
    dump_callgraph (sg, filename, eg);
    free (filename);
  }
--- 6231,6237 ----
  dump_callgraph (const supergraph &sg, const exploded_graph *eg)
  {
    auto_timevar tv (TV_ANALYZER_DUMP);
!   char *filename = concat (dump_base_name, ".callgraph.dot", nullptr);
    dump_callgraph (sg, filename, eg);
    free (filename);
  }
*************** dump_analyzer_json (const supergraph &sg
*** 6457,6463 ****
  		    const exploded_graph &eg)
  {
    auto_timevar tv (TV_ANALYZER_DUMP);
!   char *filename = concat (dump_base_name, ".analyzer.json.gz", NULL);
    gzFile output = gzopen (filename, "w");
    if (!output)
      {
--- 6457,6463 ----
  		    const exploded_graph &eg)
  {
    auto_timevar tv (TV_ANALYZER_DUMP);
!   char *filename = concat (dump_base_name, ".analyzer.json.gz", nullptr);
    gzFile output = gzopen (filename, "w");
    if (!output)
      {
*************** impl_run_checkers (logger *logger)
*** 6544,6550 ****
  
    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);
--- 6544,6550 ----
  
    engine eng (&sg, logger);
  
!   state_purge_map *purge_map = nullptr;
  
    if (flag_analyzer_state_purge)
      purge_map = new state_purge_map (sg, eng.get_model_manager (), logger);
*************** impl_run_checkers (logger *logger)
*** 6553,6560 ****
      {
        /* Dump supergraph pre-analysis.  */
        auto_timevar tv (TV_ANALYZER_DUMP);
!       char *filename = concat (dump_base_name, ".supergraph.dot", NULL);
!       supergraph::dump_args_t args ((enum supergraph_dot_flags)0, NULL);
        sg.dump_dot (filename, args);
        free (filename);
      }
--- 6553,6560 ----
      {
        /* Dump supergraph pre-analysis.  */
        auto_timevar tv (TV_ANALYZER_DUMP);
!       char *filename = concat (dump_base_name, ".supergraph.dot", nullptr);
!       supergraph::dump_args_t args ((enum supergraph_dot_flags)0, nullptr);
        sg.dump_dot (filename, args);
        free (filename);
      }
*************** impl_run_checkers (logger *logger)
*** 6563,6569 ****
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        state_purge_annotator a (purge_map);
!       char *filename = concat (dump_base_name, ".state-purge.dot", NULL);
        supergraph::dump_args_t args ((enum supergraph_dot_flags)0, &a);
        sg.dump_dot (filename, args);
        free (filename);
--- 6563,6569 ----
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        state_purge_annotator a (purge_map);
!       char *filename = concat (dump_base_name, ".state-purge.dot", nullptr);
        supergraph::dump_args_t args ((enum supergraph_dot_flags)0, &a);
        sg.dump_dot (filename, args);
        free (filename);
*************** impl_run_checkers (logger *logger)
*** 6608,6614 ****
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        char *filename
! 	= concat (dump_base_name, ".eg.dot", NULL);
        exploded_graph::dump_args_t args (eg);
        root_cluster c;
        eg.dump_dot (filename, &c, args);
--- 6608,6614 ----
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        char *filename
! 	= concat (dump_base_name, ".eg.dot", nullptr);
        exploded_graph::dump_args_t args (eg);
        root_cluster c;
        eg.dump_dot (filename, &c, args);
*************** impl_run_checkers (logger *logger)
*** 6629,6635 ****
      {
        /* Dump post-analysis form of supergraph.  */
        auto_timevar tv (TV_ANALYZER_DUMP);
!       char *filename = concat (dump_base_name, ".supergraph-eg.dot", NULL);
        exploded_graph_annotator a (eg);
        supergraph::dump_args_t args ((enum supergraph_dot_flags)0, &a);
        sg.dump_dot (filename, args);
--- 6629,6635 ----
      {
        /* Dump post-analysis form of supergraph.  */
        auto_timevar tv (TV_ANALYZER_DUMP);
!       char *filename = concat (dump_base_name, ".supergraph-eg.dot", nullptr);
        exploded_graph_annotator a (eg);
        supergraph::dump_args_t args ((enum supergraph_dot_flags)0, &a);
        sg.dump_dot (filename, args);
*************** impl_run_checkers (logger *logger)
*** 6653,6659 ****
  }
  
  /* Handle -fdump-analyzer and -fdump-analyzer-stderr.  */
! static FILE *dump_fout = NULL;
  
  /* Track if we're responsible for closing dump_fout.  */
  static bool owns_dump_fout = false;
--- 6653,6659 ----
  }
  
  /* Handle -fdump-analyzer and -fdump-analyzer-stderr.  */
! static FILE *dump_fout = nullptr;
  
  /* Track if we're responsible for closing dump_fout.  */
  static bool owns_dump_fout = false;
*************** get_or_create_any_logfile ()
*** 6670,6676 ****
  	dump_fout = stderr;
        else if (flag_dump_analyzer)
  	{
! 	  char *dump_filename = concat (dump_base_name, ".analyzer.txt", NULL);
  	  dump_fout = fopen (dump_filename, "w");
  	  free (dump_filename);
  	  if (dump_fout)
--- 6670,6676 ----
  	dump_fout = stderr;
        else if (flag_dump_analyzer)
  	{
! 	  char *dump_filename = concat (dump_base_name, ".analyzer.txt", nullptr);
  	  dump_fout = fopen (dump_filename, "w");
  	  free (dump_filename);
  	  if (dump_fout)
*************** run_checkers ()
*** 6690,6696 ****
    location_t saved_input_location = input_location;
  
    {
!     log_user the_logger (NULL);
      get_or_create_any_logfile ();
      if (dump_fout)
        the_logger.set_logger (new logger (dump_fout, 0, 0,
--- 6690,6696 ----
    location_t saved_input_location = input_location;
  
    {
!     log_user the_logger (nullptr);
      get_or_create_any_logfile ();
      if (dump_fout)
        the_logger.set_logger (new logger (dump_fout, 0, 0,
*************** run_checkers ()
*** 6707,6713 ****
      {
        fclose (dump_fout);
        owns_dump_fout = false;
!       dump_fout = NULL;
      }
  
    /* Restore input_location.  Subsequent passes may assume that input_location
--- 6707,6713 ----
      {
        fclose (dump_fout);
        owns_dump_fout = false;
!       dump_fout = nullptr;
      }
  
    /* Restore input_location.  Subsequent passes may assume that input_location
diff -Nrcpad gcc-16-20250629/gcc/analyzer/exploded-graph.h gcc-16-20250706/gcc/analyzer/exploded-graph.h
*** gcc-16-20250629/gcc/analyzer/exploded-graph.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/exploded-graph.h	Sun Jul  6 22:32:10 2025
*************** class impl_region_model_context : public
*** 49,65 ****
  			     path_context *path_ctxt,
  
  			     const gimple *stmt,
! 			     stmt_finder *stmt_finder = NULL,
  
  			     bool *out_could_have_done_work = nullptr);
  
    impl_region_model_context (program_state *state,
  			     const extrinsic_state &ext_state,
  			     uncertainty_t *uncertainty,
! 			     logger *logger = NULL);
  
    bool warn (std::unique_ptr<pending_diagnostic> d,
! 	     const stmt_finder *custom_finder = NULL) final override;
    void add_note (std::unique_ptr<pending_note> pn) final override;
    void add_event (std::unique_ptr<checker_event> event) final override;
    void on_svalue_leak (const svalue *) override;
--- 49,65 ----
  			     path_context *path_ctxt,
  
  			     const gimple *stmt,
! 			     stmt_finder *stmt_finder = nullptr,
  
  			     bool *out_could_have_done_work = nullptr);
  
    impl_region_model_context (program_state *state,
  			     const extrinsic_state &ext_state,
  			     uncertainty_t *uncertainty,
! 			     logger *logger = nullptr);
  
    bool warn (std::unique_ptr<pending_diagnostic> d,
! 	     const stmt_finder *custom_finder = nullptr) final override;
    void add_note (std::unique_ptr<pending_note> pn) final override;
    void add_event (std::unique_ptr<checker_event> event) final override;
    void on_svalue_leak (const svalue *) override;
*************** class exploded_edge : public dedge<eg_tr
*** 407,413 ****
    //private:
    const superedge *const m_sedge;
  
!   /* NULL for most edges; will be non-NULL for special cases
       such as an unwind from a longjmp to a setjmp, or when
       a signal is delivered to a signal-handler.  */
    std::unique_ptr<custom_edge_info> m_custom_info;
--- 407,413 ----
    //private:
    const superedge *const m_sedge;
  
!   /* nullptr for most edges; will be non-NULL for special cases
       such as an unwind from a longjmp to a setjmp, or when
       a signal is delivered to a signal-handler.  */
    std::unique_ptr<custom_edge_info> m_custom_info;
*************** struct eg_hash_map_traits
*** 548,561 ****
  
    static inline hashval_t hash (const key_type &k)
    {
!     gcc_assert (k != NULL);
      gcc_assert (k != reinterpret_cast<key_type> (1));
      return k->hash ();
    }
    static inline bool equal_keys (const key_type &k1, const key_type &k2)
    {
!     gcc_assert (k1 != NULL);
!     gcc_assert (k2 != NULL);
      gcc_assert (k1 != reinterpret_cast<key_type> (1));
      gcc_assert (k2 != reinterpret_cast<key_type> (1));
      if (k1 && k2)
--- 548,561 ----
  
    static inline hashval_t hash (const key_type &k)
    {
!     gcc_assert (k != nullptr);
      gcc_assert (k != reinterpret_cast<key_type> (1));
      return k->hash ();
    }
    static inline bool equal_keys (const key_type &k1, const key_type &k2)
    {
!     gcc_assert (k1 != nullptr);
!     gcc_assert (k2 != nullptr);
      gcc_assert (k1 != reinterpret_cast<key_type> (1));
      gcc_assert (k2 != reinterpret_cast<key_type> (1));
      if (k1 && k2)
*************** struct eg_hash_map_traits
*** 577,583 ****
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = NULL;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
--- 577,583 ----
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = nullptr;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
*************** struct eg_hash_map_traits
*** 587,593 ****
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == NULL;
    }
    static const bool empty_zero_p = false;
  };
--- 587,593 ----
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == nullptr;
    }
    static const bool empty_zero_p = false;
  };
*************** struct eg_point_hash_map_traits
*** 618,631 ****
  
    static inline hashval_t hash (const key_type &k)
    {
!     gcc_assert (k != NULL);
      gcc_assert (k != reinterpret_cast<key_type> (1));
      return k->hash ();
    }
    static inline bool equal_keys (const key_type &k1, const key_type &k2)
    {
!     gcc_assert (k1 != NULL);
!     gcc_assert (k2 != NULL);
      gcc_assert (k1 != reinterpret_cast<key_type> (1));
      gcc_assert (k2 != reinterpret_cast<key_type> (1));
      if (k1 && k2)
--- 618,631 ----
  
    static inline hashval_t hash (const key_type &k)
    {
!     gcc_assert (k != nullptr);
      gcc_assert (k != reinterpret_cast<key_type> (1));
      return k->hash ();
    }
    static inline bool equal_keys (const key_type &k1, const key_type &k2)
    {
!     gcc_assert (k1 != nullptr);
!     gcc_assert (k2 != nullptr);
      gcc_assert (k1 != reinterpret_cast<key_type> (1));
      gcc_assert (k2 != reinterpret_cast<key_type> (1));
      if (k1 && k2)
*************** struct eg_point_hash_map_traits
*** 647,653 ****
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = NULL;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
--- 647,653 ----
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = nullptr;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
*************** struct eg_point_hash_map_traits
*** 657,663 ****
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == NULL;
    }
    static const bool empty_zero_p = false;
  };
--- 657,663 ----
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == nullptr;
    }
    static const bool empty_zero_p = false;
  };
*************** private:
*** 778,784 ****
      int get_scc_id (const exploded_node *enode) const
      {
        const supernode *snode = enode->get_supernode ();
!       if (snode == NULL)
  	return 0;
        return m_worklist.m_scc.get_scc_id (snode->m_index);
      }
--- 778,784 ----
      int get_scc_id (const exploded_node *enode) const
      {
        const supernode *snode = enode->get_supernode ();
!       if (snode == nullptr)
  	return 0;
        return m_worklist.m_scc.get_scc_id (snode->m_index);
      }
*************** public:
*** 846,852 ****
  				     bool add_to_worklist = true);
    exploded_edge *add_edge (exploded_node *src, exploded_node *dest,
  			   const superedge *sedge, bool could_do_work,
! 			   std::unique_ptr<custom_edge_info> custom = NULL);
  
    per_program_point_data *
    get_or_create_per_program_point_data (const program_point &);
--- 846,852 ----
  				     bool add_to_worklist = true);
    exploded_edge *add_edge (exploded_node *src, exploded_node *dest,
  			   const superedge *sedge, bool could_do_work,
! 			   std::unique_ptr<custom_edge_info> custom = nullptr);
  
    per_program_point_data *
    get_or_create_per_program_point_data (const program_point &);
*************** public:
*** 979,985 ****
    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;
  
--- 979,985 ----
    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 = nullptr) const;
    void dump_to_file (const char *filename,
  		     const extrinsic_state &ext_state) const;
  
*************** private:
*** 1044,1050 ****
  
  typedef shortest_paths<eg_traits, exploded_path> shortest_exploded_paths;
  
! /* Abstract base class for use when passing NULL as the stmt for
     a possible warning, allowing the choice of stmt to be deferred
     until after we have an emission path (and know we're emitting a
     warning).  */
--- 1044,1050 ----
  
  typedef shortest_paths<eg_traits, exploded_path> shortest_exploded_paths;
  
! /* Abstract base class for use when passing nullptr as the stmt for
     a possible warning, allowing the choice of stmt to be deferred
     until after we have an emission path (and know we're emitting a
     warning).  */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/function-set.cc gcc-16-20250706/gcc/analyzer/function-set.cc
*** gcc-16-20250629/gcc/analyzer/function-set.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/function-set.cc	Sun Jul  6 22:32:10 2025
*************** namespace selftest {
*** 95,101 ****
  static void
  test_empty ()
  {
!   function_set fs (NULL, 0);
    fs.assert_sorted ();
    fs.assert_sane ();
    ASSERT_FALSE (fs.contains_name_p (""));
--- 95,101 ----
  static void
  test_empty ()
  {
!   function_set fs (nullptr, 0);
    fs.assert_sorted ();
    fs.assert_sane ();
    ASSERT_FALSE (fs.contains_name_p (""));
diff -Nrcpad gcc-16-20250629/gcc/analyzer/infinite-recursion.cc gcc-16-20250706/gcc/analyzer/infinite-recursion.cc
*** gcc-16-20250629/gcc/analyzer/infinite-recursion.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/infinite-recursion.cc	Sun Jul  6 22:32:10 2025
*************** public:
*** 55,61 ****
    : m_prev_entry_enode (prev_entry_enode),
      m_new_entry_enode (new_entry_enode),
      m_callee_fndecl (callee_fndecl),
!     m_prev_entry_event (NULL)
    {}
  
    const char *get_kind () const final override
--- 55,61 ----
    : m_prev_entry_enode (prev_entry_enode),
      m_new_entry_enode (new_entry_enode),
      m_callee_fndecl (callee_fndecl),
!     m_prev_entry_event (nullptr)
    {}
  
    const char *get_kind () const final override
*************** public:
*** 147,153 ****
      const program_point &dst_point = dst_node->get_point ();
      if (eedge.m_dest == m_prev_entry_enode)
        {
! 	gcc_assert (m_prev_entry_event == NULL);
  	std::unique_ptr<checker_event> prev_entry_event
  	  = std::make_unique <recursive_function_entry_event>
  	      (dst_point,
--- 147,153 ----
      const program_point &dst_point = dst_node->get_point ();
      if (eedge.m_dest == m_prev_entry_enode)
        {
! 	gcc_assert (m_prev_entry_event == nullptr);
  	std::unique_ptr<checker_event> prev_entry_event
  	  = std::make_unique <recursive_function_entry_event>
  	      (dst_point,
*************** private:
*** 291,297 ****
        bool m_found_conjured_svalues;
      };
  
!     const svalue *sval = model.get_rvalue (expr, NULL);
      conjured_svalue_finder v;
      sval->accept (&v);
      return v.m_found_conjured_svalues;
--- 291,297 ----
        bool m_found_conjured_svalues;
      };
  
!     const svalue *sval = model.get_rvalue (expr, nullptr);
      conjured_svalue_finder v;
      sval->accept (&v);
      return v.m_found_conjured_svalues;
*************** exploded_graph::find_previous_entry_to (
*** 351,357 ****
      }
  
    /* Not found.  */
!   return NULL;
  }
  
  /* Given BASE_REG within ENCLOSING_FRAME (such as a function parameter),
--- 351,357 ----
      }
  
    /* Not found.  */
!   return nullptr;
  }
  
  /* Given BASE_REG within ENCLOSING_FRAME (such as a function parameter),
*************** remap_enclosing_frame (const region *bas
*** 385,391 ****
  	const decl_region *decl_reg = (const decl_region *)base_reg;
  	return equiv_prev_frame->get_region_for_local (mgr,
  						       decl_reg->get_decl (),
! 						       NULL);
        }
      }
  }
--- 385,391 ----
  	const decl_region *decl_reg = (const decl_region *)base_reg;
  	return equiv_prev_frame->get_region_for_local (mgr,
  						       decl_reg->get_decl (),
! 						       nullptr);
        }
      }
  }
*************** sufficiently_different_region_binding_p
*** 427,433 ****
  
    /* Get the value within the new frame.  */
    const svalue *new_sval
!     = new_model.get_store_value (base_reg, NULL);
  
    /* If any part of the value is UNKNOWN (e.g. due to hitting
       complexity limits) assume that it differs from the previous
--- 427,433 ----
  
    /* Get the value within the new frame.  */
    const svalue *new_sval
!     = new_model.get_store_value (base_reg, nullptr);
  
    /* If any part of the value is UNKNOWN (e.g. due to hitting
       complexity limits) assume that it differs from the previous
*************** sufficiently_different_region_binding_p
*** 447,453 ****
  	 to the recursion.  */
        const int old_stack_depth = prev_entry_enode->get_stack_depth ();
        if (enclosing_frame->get_stack_depth () < old_stack_depth)
! 	prev_sval = prev_model.get_store_value (base_reg, NULL);
        else
  	{
  	  /* Ignore bindings within frames below the new entry node.  */
--- 447,453 ----
  	 to the recursion.  */
        const int old_stack_depth = prev_entry_enode->get_stack_depth ();
        if (enclosing_frame->get_stack_depth () < old_stack_depth)
! 	prev_sval = prev_model.get_store_value (base_reg, nullptr);
        else
  	{
  	  /* Ignore bindings within frames below the new entry node.  */
*************** sufficiently_different_region_binding_p
*** 469,479 ****
  				     equiv_prev_frame,
  				     new_model.get_manager ());
  	  prev_sval
! 	    = prev_model.get_store_value (equiv_prev_base_reg, NULL);
  	}
      }
    else
!     prev_sval = prev_model.get_store_value (base_reg, NULL);
  
    /* If the prev_sval contains UNKNOWN (e.g. due to hitting complexity limits)
       assume that it will differ from any new value.  */
--- 469,479 ----
  				     equiv_prev_frame,
  				     new_model.get_manager ());
  	  prev_sval
! 	    = prev_model.get_store_value (equiv_prev_base_reg, nullptr);
  	}
      }
    else
!     prev_sval = prev_model.get_store_value (base_reg, nullptr);
  
    /* If the prev_sval contains UNKNOWN (e.g. due to hitting complexity limits)
       assume that it will differ from any new value.  */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/inlining-iterator.h gcc-16-20250706/gcc/analyzer/inlining-iterator.h
*** gcc-16-20250629/gcc/analyzer/inlining-iterator.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/inlining-iterator.h	Sun Jul  6 22:32:10 2025
*************** class inlining_iterator
*** 46,52 ****
  public:
    inlining_iterator (location_t loc)
    : m_abstract_origin (LOCATION_BLOCK (loc)),
!     m_callsite (UNKNOWN_LOCATION), m_fndecl (NULL),
      m_next_abstract_origin (NULL)
    {
      prepare_iteration ();
--- 46,52 ----
  public:
    inlining_iterator (location_t loc)
    : m_abstract_origin (LOCATION_BLOCK (loc)),
!     m_callsite (UNKNOWN_LOCATION), m_fndecl (NULL_TREE),
      m_next_abstract_origin (NULL)
    {
      prepare_iteration ();
*************** private:
*** 71,77 ****
        return;
      tree block = m_abstract_origin;
      m_callsite = BLOCK_SOURCE_LOCATION (block);
!     m_fndecl = NULL;
      block = BLOCK_SUPERCONTEXT (block);
      while (block && TREE_CODE (block) == BLOCK
  	   && BLOCK_ABSTRACT_ORIGIN (block))
--- 71,77 ----
        return;
      tree block = m_abstract_origin;
      m_callsite = BLOCK_SOURCE_LOCATION (block);
!     m_fndecl = NULL_TREE;
      block = BLOCK_SUPERCONTEXT (block);
      while (block && TREE_CODE (block) == BLOCK
  	   && BLOCK_ABSTRACT_ORIGIN (block))
diff -Nrcpad gcc-16-20250629/gcc/analyzer/kf.cc gcc-16-20250706/gcc/analyzer/kf.cc
*** gcc-16-20250629/gcc/analyzer/kf.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/kf.cc	Sun Jul  6 22:32:10 2025
*************** kf_realloc::impl_call_post (const call_d
*** 1053,1063 ****
  	      const svalue *copied_size_sval
  		= get_copied_size (model, old_size_sval, new_size_sval);
  	      const region *copied_old_reg
! 		= mgr->get_sized_region (freed_reg, NULL, copied_size_sval);
  	      const svalue *buffer_content_sval
  		= model->get_store_value (copied_old_reg, cd.get_ctxt ());
  	      const region *copied_new_reg
! 		= mgr->get_sized_region (new_reg, NULL, copied_size_sval);
  	      model->set_value (copied_new_reg, buffer_content_sval,
  				cd.get_ctxt ());
  	    }
--- 1053,1063 ----
  	      const svalue *copied_size_sval
  		= get_copied_size (model, old_size_sval, new_size_sval);
  	      const region *copied_old_reg
! 		= mgr->get_sized_region (freed_reg, nullptr, copied_size_sval);
  	      const svalue *buffer_content_sval
  		= model->get_store_value (copied_old_reg, cd.get_ctxt ());
  	      const region *copied_new_reg
! 		= mgr->get_sized_region (new_reg, nullptr, copied_size_sval);
  	      model->set_value (copied_new_reg, buffer_content_sval,
  				cd.get_ctxt ());
  	    }
*************** kf_strncpy::impl_call_post (const call_d
*** 1636,1642 ****
      }
    private:
      /* (strlen + 1) of the source string if it has a terminator,
!        or NULL for the case where UB would happen before
         finding any terminator.  */
      const svalue *m_num_bytes_with_terminator_sval;
  
--- 1636,1642 ----
      }
    private:
      /* (strlen + 1) of the source string if it has a terminator,
!        or nullptr for the case where UB would happen before
         finding any terminator.  */
      const svalue *m_num_bytes_with_terminator_sval;
  
*************** public:
*** 1691,1698 ****
      region_model_manager *mgr = cd.get_manager ();
      /* Ideally we'd get the size here, and simulate copying the bytes.  */
      const region *new_reg
!       = model->get_or_create_region_for_heap_alloc (NULL, cd.get_ctxt ());
!     model->mark_region_as_unknown (new_reg, NULL);
      if (cd.get_lhs_type ())
        {
  	const svalue *ptr_sval
--- 1691,1698 ----
      region_model_manager *mgr = cd.get_manager ();
      /* Ideally we'd get the size here, and simulate copying the bytes.  */
      const region *new_reg
!       = model->get_or_create_region_for_heap_alloc (nullptr, cd.get_ctxt ());
!     model->mark_region_as_unknown (new_reg, nullptr);
      if (cd.get_lhs_type ())
        {
  	const svalue *ptr_sval
diff -Nrcpad gcc-16-20250629/gcc/analyzer/known-function-manager.cc gcc-16-20250706/gcc/analyzer/known-function-manager.cc
*** gcc-16-20250629/gcc/analyzer/known-function-manager.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/known-function-manager.cc	Sun Jul  6 22:32:10 2025
*************** known_function_manager::add (enum intern
*** 92,98 ****
     The call must match all assumptions made by the known_function (such as
     e.g. "argument 1's type must be a pointer type").
  
!    Return NULL if no known_function is found, or it does not match the
     assumption(s).  */
  
  const known_function *
--- 92,98 ----
     The call must match all assumptions made by the known_function (such as
     e.g. "argument 1's type must be a pointer type").
  
!    Return nullptr if no known_function is found, or it does not match the
     assumption(s).  */
  
  const known_function *
*************** known_function_manager::get_match (tree
*** 122,137 ****
  
    if (DECL_CONTEXT (fndecl)
        && TREE_CODE (DECL_CONTEXT (fndecl)) != TRANSLATION_UNIT_DECL)
!     return NULL;
    if (tree identifier = DECL_NAME (fndecl))
      if (const known_function *candidate = get_by_identifier (identifier))
        if (candidate->matches_call_types_p (cd))
  	return candidate;
  
!   return NULL;
  }
  
! /* Get any known_function for IFN, or NULL.  */
  
  const known_function *
  known_function_manager::get_internal_fn (enum internal_fn ifn) const
--- 122,137 ----
  
    if (DECL_CONTEXT (fndecl)
        && TREE_CODE (DECL_CONTEXT (fndecl)) != TRANSLATION_UNIT_DECL)
!     return nullptr;
    if (tree identifier = DECL_NAME (fndecl))
      if (const known_function *candidate = get_by_identifier (identifier))
        if (candidate->matches_call_types_p (cd))
  	return candidate;
  
!   return nullptr;
  }
  
! /* Get any known_function for IFN, or nullptr.  */
  
  const known_function *
  known_function_manager::get_internal_fn (enum internal_fn ifn) const
*************** known_function_manager::get_internal_fn
*** 141,147 ****
  }
  
  /* Get any known_function for NAME, without type-checking.
!    Return NULL if there isn't one.  */
  
  const known_function *
  known_function_manager::get_normal_builtin (enum built_in_function name) const
--- 141,147 ----
  }
  
  /* Get any known_function for NAME, without type-checking.
!    Return nullptr if there isn't one.  */
  
  const known_function *
  known_function_manager::get_normal_builtin (enum built_in_function name) const
*************** get_normal_builtin (const builtin_known_
*** 160,166 ****
  }
  
  /* Get any known_function matching IDENTIFIER, without type-checking.
!    Return NULL if there isn't one.  */
  
  const known_function *
  known_function_manager::get_by_identifier (tree identifier) const
--- 160,166 ----
  }
  
  /* Get any known_function matching IDENTIFIER, without type-checking.
!    Return nullptr if there isn't one.  */
  
  const known_function *
  known_function_manager::get_by_identifier (tree identifier) const
*************** known_function_manager::get_by_identifie
*** 170,176 ****
    if (slot)
      return *slot;
    else
!     return NULL;
  }
  
  /* Get any known_function in C++ std:: namespace matching IDENTIFIER, without
--- 170,176 ----
    if (slot)
      return *slot;
    else
!     return nullptr;
  }
  
  /* Get any known_function in C++ std:: namespace matching IDENTIFIER, without
diff -Nrcpad gcc-16-20250629/gcc/analyzer/pending-diagnostic.cc gcc-16-20250706/gcc/analyzer/pending-diagnostic.cc
*** gcc-16-20250629/gcc/analyzer/pending-diagnostic.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/pending-diagnostic.cc	Sun Jul  6 22:32:10 2025
*************** pending_diagnostic::fixup_location (loca
*** 171,177 ****
        const line_map_macro *macro_map = linemap_check_macro (map);
        if (fixup_location_in_macro_p (macro_map->macro))
  	loc = linemap_resolve_location (line_table, loc,
! 					LRK_MACRO_EXPANSION_POINT, NULL);
      }
    return loc;
  }
--- 171,177 ----
        const line_map_macro *macro_map = linemap_check_macro (map);
        if (fixup_location_in_macro_p (macro_map->macro))
  	loc = linemap_resolve_location (line_table, loc,
! 					LRK_MACRO_EXPANSION_POINT, nullptr);
      }
    return loc;
  }
diff -Nrcpad gcc-16-20250629/gcc/analyzer/program-point.cc gcc-16-20250706/gcc/analyzer/program-point.cc
*** gcc-16-20250629/gcc/analyzer/program-point.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/program-point.cc	Sun Jul  6 22:32:10 2025
*************** function_point::get_function () const
*** 171,177 ****
    if (m_supernode)
      return m_supernode->m_fun;
    else
!     return NULL;
  }
  
  /* Get the gimple stmt for this function_point, if any.  */
--- 171,177 ----
    if (m_supernode)
      return m_supernode->m_fun;
    else
!     return nullptr;
  }
  
  /* Get the gimple stmt for this function_point, if any.  */
*************** function_point::get_stmt () const
*** 184,190 ****
    else if (m_kind == PK_AFTER_SUPERNODE)
      return m_supernode->get_last_stmt ();
    else
!     return NULL;
  }
  
  /* Get a location for this function_point, if any.  */
--- 184,190 ----
    else if (m_kind == PK_AFTER_SUPERNODE)
      return m_supernode->get_last_stmt ();
    else
!     return nullptr;
  }
  
  /* Get a location for this function_point, if any.  */
*************** function_point::final_stmt_p () const
*** 219,236 ****
  function_point
  function_point::from_function_entry (const supergraph &sg, const function &fun)
  {
!   return before_supernode (sg.get_node_for_function_entry (fun), NULL);
  }
  
  /* Create a function_point representing entering supernode SUPERNODE,
!    having reached it via FROM_EDGE (which could be NULL).  */
  
  function_point
  function_point::before_supernode (const supernode *supernode,
  				  const superedge *from_edge)
  {
    if (from_edge && from_edge->get_kind () != SUPEREDGE_CFG_EDGE)
!     from_edge = NULL;
    return function_point (supernode, from_edge, 0, PK_BEFORE_SUPERNODE);
  }
  
--- 219,236 ----
  function_point
  function_point::from_function_entry (const supergraph &sg, const function &fun)
  {
!   return before_supernode (sg.get_node_for_function_entry (fun), nullptr);
  }
  
  /* Create a function_point representing entering supernode SUPERNODE,
!    having reached it via FROM_EDGE (which could be nullptr).  */
  
  function_point
  function_point::before_supernode (const supernode *supernode,
  				  const superedge *from_edge)
  {
    if (from_edge && from_edge->get_kind () != SUPEREDGE_CFG_EDGE)
!     from_edge = nullptr;
    return function_point (supernode, from_edge, 0, PK_BEFORE_SUPERNODE);
  }
  
*************** function_point::get_next () const
*** 673,679 ****
  program_point
  program_point::origin (const region_model_manager &mgr)
  {
!   return program_point (function_point (NULL, NULL,
  					0, PK_ORIGIN),
  			mgr.get_empty_call_string ());
  }
--- 673,679 ----
  program_point
  program_point::origin (const region_model_manager &mgr)
  {
!   return program_point (function_point (nullptr, nullptr,
  					0, PK_ORIGIN),
  			mgr.get_empty_call_string ());
  }
*************** namespace selftest {
*** 766,776 ****
  static void
  test_function_point_equality ()
  {
!   const supernode *snode = NULL;
  
!   function_point a = function_point (snode, NULL, 0,
  				     PK_BEFORE_SUPERNODE);
!   function_point b = function_point::before_supernode (snode, NULL);
    ASSERT_EQ (a, b);
  }
  
--- 766,776 ----
  static void
  test_function_point_equality ()
  {
!   const supernode *snode = nullptr;
  
!   function_point a = function_point (snode, nullptr, 0,
  				     PK_BEFORE_SUPERNODE);
!   function_point b = function_point::before_supernode (snode, nullptr);
    ASSERT_EQ (a, b);
  }
  
*************** test_function_point_equality ()
*** 779,790 ****
  static void
  test_function_point_ordering ()
  {
!   const supernode *snode = NULL;
  
    /* Populate an array with various points within the same
       snode, in order.  */
    auto_vec<function_point> points;
!   points.safe_push (function_point::before_supernode (snode, NULL));
    points.safe_push (function_point::before_stmt (snode, 0));
    points.safe_push (function_point::before_stmt (snode, 1));
    points.safe_push (function_point::after_supernode (snode));
--- 779,790 ----
  static void
  test_function_point_ordering ()
  {
!   const supernode *snode = nullptr;
  
    /* Populate an array with various points within the same
       snode, in order.  */
    auto_vec<function_point> points;
!   points.safe_push (function_point::before_supernode (snode, nullptr));
    points.safe_push (function_point::before_stmt (snode, 0));
    points.safe_push (function_point::before_stmt (snode, 1));
    points.safe_push (function_point::after_supernode (snode));
*************** test_program_point_equality ()
*** 816,829 ****
  {
    region_model_manager mgr;
  
!   const supernode *snode = NULL;
  
    const call_string &cs = mgr.get_empty_call_string ();
  
!   program_point a = program_point::before_supernode (snode, NULL,
  						     cs);
  
!   program_point b = program_point::before_supernode (snode, NULL,
  						     cs);
  
    ASSERT_EQ (a, b);
--- 816,829 ----
  {
    region_model_manager mgr;
  
!   const supernode *snode = nullptr;
  
    const call_string &cs = mgr.get_empty_call_string ();
  
!   program_point a = program_point::before_supernode (snode, nullptr,
  						     cs);
  
!   program_point b = program_point::before_supernode (snode, nullptr,
  						     cs);
  
    ASSERT_EQ (a, b);
diff -Nrcpad gcc-16-20250629/gcc/analyzer/program-point.h gcc-16-20250706/gcc/analyzer/program-point.h
*** gcc-16-20250629/gcc/analyzer/program-point.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/program-point.h	Sun Jul  6 22:32:10 2025
*************** public:
*** 120,142 ****
    static function_point before_stmt (const supernode *supernode,
  				     unsigned stmt_idx)
    {
!     return function_point (supernode, NULL, stmt_idx, PK_BEFORE_STMT);
    }
  
    static function_point after_supernode (const supernode *supernode)
    {
!     return function_point (supernode, NULL, 0, PK_AFTER_SUPERNODE);
    }
  
    /* Support for hash_map.  */
  
    static function_point empty ()
    {
!     return function_point (NULL, NULL, 0, PK_EMPTY);
    }
    static function_point deleted ()
    {
!     return function_point (NULL, NULL, 0, PK_DELETED);
    }
  
    static int cmp_within_supernode_1 (const function_point &point_a,
--- 120,142 ----
    static function_point before_stmt (const supernode *supernode,
  				     unsigned stmt_idx)
    {
!     return function_point (supernode, nullptr, stmt_idx, PK_BEFORE_STMT);
    }
  
    static function_point after_supernode (const supernode *supernode)
    {
!     return function_point (supernode, nullptr, 0, PK_AFTER_SUPERNODE);
    }
  
    /* Support for hash_map.  */
  
    static function_point empty ()
    {
!     return function_point (nullptr, nullptr, 0, PK_EMPTY);
    }
    static function_point deleted ()
    {
!     return function_point (nullptr, nullptr, 0, PK_DELETED);
    }
  
    static int cmp_within_supernode_1 (const function_point &point_a,
*************** public:
*** 305,311 ****
   private:
    program_point (const function_point &fn_point)
    : m_function_point (fn_point),
!     m_call_string (NULL)
    {
    }
  
--- 305,311 ----
   private:
    program_point (const function_point &fn_point)
    : m_function_point (fn_point),
!     m_call_string (nullptr)
    {
    }
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/program-state.cc gcc-16-20250706/gcc/analyzer/program-state.cc
*** gcc-16-20250629/gcc/analyzer/program-state.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/program-state.cc	Sun Jul  6 22:32:10 2025
*************** extrinsic_state::get_model_manager () co
*** 115,121 ****
    if (m_engine)
      return m_engine->get_model_manager ();
    else
!     return NULL; /* for selftests.  */
  }
  
  /* Try to find a state machine named NAME.
--- 115,121 ----
    if (m_engine)
      return m_engine->get_model_manager ();
    else
!     return nullptr; /* for selftests.  */
  }
  
  /* Try to find a state machine named NAME.
*************** DEBUG_FUNCTION void
*** 258,264 ****
  sm_state_map::dump (bool simple) const
  {
    tree_dump_pretty_printer pp (stderr);
!   print (NULL, simple, true, &pp);
    pp_newline (&pp);
  }
  
--- 258,264 ----
  sm_state_map::dump (bool simple) const
  {
    tree_dump_pretty_printer pp (stderr);
!   print (nullptr, simple, true, &pp);
    pp_newline (&pp);
  }
  
*************** sm_state_map::operator== (const sm_state
*** 420,426 ****
        const svalue *sval = (*iter).first;
        entry_t e = (*iter).second;
        entry_t *other_slot = const_cast <map_t &> (other.m_map).get (sval);
!       if (other_slot == NULL)
  	return false;
        if (e != *other_slot)
  	return false;
--- 420,426 ----
        const svalue *sval = (*iter).first;
        entry_t e = (*iter).second;
        entry_t *other_slot = const_cast <map_t &> (other.m_map).get (sval);
!       if (other_slot == nullptr)
  	return false;
        if (e != *other_slot)
  	return false;
*************** sm_state_map::get_origin (const svalue *
*** 501,507 ****
    if (slot)
      return slot->m_origin;
    else
!     return NULL;
  }
  
  /* Set the state of SID within MODEL to STATE, recording that
--- 501,507 ----
    if (slot)
      return slot->m_origin;
    else
!     return nullptr;
  }
  
  /* Set the state of SID within MODEL to STATE, recording that
*************** sm_state_map::set_state (region_model *m
*** 514,520 ****
  			 const svalue *origin,
  			 const extrinsic_state &ext_state)
  {
!   if (model == NULL)
      return;
  
    /* Reject attempts to set state on UNKNOWN/POISONED.  */
--- 514,520 ----
  			 const svalue *origin,
  			 const extrinsic_state &ext_state)
  {
!   if (model == nullptr)
      return;
  
    /* Reject attempts to set state on UNKNOWN/POISONED.  */
*************** sm_state_map::on_unknown_change (const s
*** 771,777 ****
  
    for (svalue_set::iterator iter = svals_to_unset.begin ();
         iter != svals_to_unset.end (); ++iter)
!     impl_set_state (*iter, (state_machine::state_t)0, NULL, ext_state);
  }
  
  /* Purge state for things involving SVAL.
--- 771,777 ----
  
    for (svalue_set::iterator iter = svals_to_unset.begin ();
         iter != svals_to_unset.end (); ++iter)
!     impl_set_state (*iter, (state_machine::state_t)0, nullptr, ext_state);
  }
  
  /* Purge state for things involving SVAL.
*************** sm_state_map::purge_state_involving (con
*** 802,808 ****
  
    for (svalue_set::iterator iter = svals_to_unset.begin ();
         iter != svals_to_unset.end (); ++iter)
!     impl_set_state (*iter, (state_machine::state_t)0, NULL, ext_state);
  }
  
  /* Comparator for imposing an order on sm_state_map instances.  */
--- 802,808 ----
  
    for (svalue_set::iterator iter = svals_to_unset.begin ();
         iter != svals_to_unset.end (); ++iter)
!     impl_set_state (*iter, (state_machine::state_t)0, nullptr, ext_state);
  }
  
  /* Comparator for imposing an order on sm_state_map instances.  */
*************** sm_state_map::can_merge_with_p (const sm
*** 912,918 ****
        state_machine::state_t other_state = other.get_state (sval, ext_state);
        if (state_machine::state_t merged_state
  	    = sm.maybe_get_merged_state (this_state, other_state))
! 	(*out)->impl_set_state (sval, merged_state, NULL, ext_state);
        else
  	return false;
      }
--- 912,918 ----
        state_machine::state_t other_state = other.get_state (sval, ext_state);
        if (state_machine::state_t merged_state
  	    = sm.maybe_get_merged_state (this_state, other_state))
! 	(*out)->impl_set_state (sval, merged_state, nullptr, ext_state);
        else
  	return false;
      }
*************** sm_state_map::can_merge_with_p (const sm
*** 926,932 ****
  /* program_state's ctor.  */
  
  program_state::program_state (const extrinsic_state &ext_state)
! : m_region_model (NULL),
    m_checker_states (ext_state.get_num_checkers ()),
    m_valid (true)
  {
--- 926,932 ----
  /* program_state's ctor.  */
  
  program_state::program_state (const extrinsic_state &ext_state)
! : m_region_model (nullptr),
    m_checker_states (ext_state.get_num_checkers ()),
    m_valid (true)
  {
*************** sm_state_map::replay_call_summary (call_
*** 960,967 ****
        const svalue *caller_origin
  	= (summary_origin
  	   ? r.convert_svalue_from_summary (summary_origin)
! 	   : NULL);
!       // caller_origin can be NULL.
        m_map.put (caller_sval, entry_t (kv.second.m_state, caller_origin));
      }
    m_global_state = summary.m_global_state;
--- 960,967 ----
        const svalue *caller_origin
  	= (summary_origin
  	   ? r.convert_svalue_from_summary (summary_origin)
! 	   : nullptr);
!       // caller_origin can be nullptr.
        m_map.put (caller_sval, entry_t (kv.second.m_state, caller_origin));
      }
    m_global_state = summary.m_global_state;
*************** program_state::program_state (program_st
*** 1009,1015 ****
  : m_region_model (other.m_region_model),
    m_checker_states (other.m_checker_states.length ())
  {
!   other.m_region_model = NULL;
  
    int i;
    sm_state_map *smap;
--- 1009,1015 ----
  : m_region_model (other.m_region_model),
    m_checker_states (other.m_checker_states.length ())
  {
!   other.m_region_model = nullptr;
  
    int i;
    sm_state_map *smap;
*************** program_state::on_edge (exploded_graph &
*** 1337,1343 ****
      return false;
  
    program_state::detect_leaks (enode->get_state (), *this,
! 			       NULL, eg.get_ext_state (),
  			       &ctxt);
  
    return true;
--- 1337,1343 ----
      return false;
  
    program_state::detect_leaks (enode->get_state (), *this,
! 			       nullptr, eg.get_ext_state (),
  			       &ctxt);
  
    return true;
*************** program_state::push_call (exploded_graph
*** 1361,1367 ****
                                    &enode->get_state (),
                                    this,
                                    uncertainty,
! 				  NULL,
                                    last_stmt);
    m_region_model->update_for_gcall (call_stmt, &ctxt);
  }
--- 1361,1367 ----
                                    &enode->get_state (),
                                    this,
                                    uncertainty,
! 				  nullptr,
                                    last_stmt);
    m_region_model->update_for_gcall (call_stmt, &ctxt);
  }
*************** program_state::returning_call (exploded_
*** 1384,1390 ****
                                    &enode->get_state (),
                                    this,
                                    uncertainty,
! 				  NULL,
                                    last_stmt);
    m_region_model->update_for_return_gcall (call_stmt, &ctxt);
  }
--- 1384,1390 ----
                                    &enode->get_state (),
                                    this,
                                    uncertainty,
! 				  nullptr,
                                    last_stmt);
    m_region_model->update_for_return_gcall (call_stmt, &ctxt);
  }
*************** program_state::prune_for_point (exploded
*** 1442,1448 ****
  		     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))
  		    {
--- 1442,1448 ----
  		     temporaries keep the value reachable until the frame is
  		     popped.  */
  		  const svalue *sval
! 		    = new_state.m_region_model->get_store_value (reg, nullptr);
  		  if (!new_state.can_purge_p (eg.get_ext_state (), sval)
  		      && SSA_NAME_VAR (ssa_name))
  		    {
*************** program_state::prune_for_point (exploded
*** 1501,1509 ****
  	  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);
  	}
      }
  
--- 1501,1509 ----
  	  impl_region_model_context ctxt (eg, enode_for_diag,
  					  this,
  					  &new_state,
! 					  uncertainty, nullptr,
  					  point.get_stmt ());
! 	  detect_leaks (*this, new_state, nullptr, eg.get_ext_state (), &ctxt);
  	}
      }
  
*************** program_state::detect_leaks (const progr
*** 1675,1681 ****
       *might* still be reachable in dst_state.  */
    svalue_set known_src_svalues;
    src_state.m_region_model->get_reachable_svalues (&known_src_svalues,
! 						   NULL, NULL);
    svalue_set maybe_dest_svalues;
    dest_state.m_region_model->get_reachable_svalues (&maybe_dest_svalues,
  						    extra_sval, uncertainty);
--- 1675,1681 ----
       *might* still be reachable in dst_state.  */
    svalue_set known_src_svalues;
    src_state.m_region_model->get_reachable_svalues (&known_src_svalues,
! 						   nullptr, nullptr);
    svalue_set maybe_dest_svalues;
    dest_state.m_region_model->get_reachable_svalues (&maybe_dest_svalues,
  						    extra_sval, uncertainty);
*************** test_sm_state_map ()
*** 1793,1799 ****
    tree y = build_global_decl ("y", integer_type_node);
    tree z = build_global_decl ("z", integer_type_node);
  
!   std::unique_ptr<state_machine> sm = make_malloc_state_machine (NULL);
    state_machine::state_t start = sm->get_start_state ();
    std::vector<std::unique_ptr<state_machine>> checkers;
    const state_machine &borrowed_sm = *sm.get ();
--- 1793,1799 ----
    tree y = build_global_decl ("y", integer_type_node);
    tree z = build_global_decl ("z", integer_type_node);
  
!   std::unique_ptr<state_machine> sm = make_malloc_state_machine (nullptr);
    state_machine::state_t start = sm->get_start_state ();
    std::vector<std::unique_ptr<state_machine>> checkers;
    const state_machine &borrowed_sm = *sm.get ();
*************** test_sm_state_map ()
*** 1807,1815 ****
      const state_machine::state_t TEST_STATE_42 = &test_state_42;
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *x_sval = model.get_rvalue (x, NULL);
!     const svalue *y_sval = model.get_rvalue (y, NULL);
!     const svalue *z_sval = model.get_rvalue (z, NULL);
  
      sm_state_map map (borrowed_sm);
      ASSERT_TRUE (map.is_empty_p ());
--- 1807,1815 ----
      const state_machine::state_t TEST_STATE_42 = &test_state_42;
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *x_sval = model.get_rvalue (x, nullptr);
!     const svalue *y_sval = model.get_rvalue (y, nullptr);
!     const svalue *z_sval = model.get_rvalue (z, nullptr);
  
      sm_state_map map (borrowed_sm);
      ASSERT_TRUE (map.is_empty_p ());
*************** test_sm_state_map ()
*** 1836,1851 ****
    {
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *x_sval = model.get_rvalue (x, NULL);
!     const svalue *y_sval = model.get_rvalue (y, NULL);
!     const svalue *z_sval = model.get_rvalue (z, NULL);
  
      sm_state_map map (borrowed_sm);
      ASSERT_TRUE (map.is_empty_p ());
      ASSERT_EQ (map.get_state (x_sval, ext_state), start);
      ASSERT_EQ (map.get_state (y_sval, ext_state), start);
  
!     model.add_constraint (x, EQ_EXPR, y, NULL);
  
      /* Setting x to a state should also update y, as they
         are in the same equivalence class.  */
--- 1836,1851 ----
    {
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *x_sval = model.get_rvalue (x, nullptr);
!     const svalue *y_sval = model.get_rvalue (y, nullptr);
!     const svalue *z_sval = model.get_rvalue (z, nullptr);
  
      sm_state_map map (borrowed_sm);
      ASSERT_TRUE (map.is_empty_p ());
      ASSERT_EQ (map.get_state (x_sval, ext_state), start);
      ASSERT_EQ (map.get_state (y_sval, ext_state), start);
  
!     model.add_constraint (x, EQ_EXPR, y, nullptr);
  
      /* Setting x to a state should also update y, as they
         are in the same equivalence class.  */
*************** test_sm_state_map ()
*** 1860,1867 ****
    {
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *y_sval = model.get_rvalue (y, NULL);
!     const svalue *z_sval = model.get_rvalue (z, NULL);
  
      sm_state_map map0 (borrowed_sm);
      sm_state_map map1 (borrowed_sm);
--- 1860,1867 ----
    {
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *y_sval = model.get_rvalue (y, nullptr);
!     const svalue *z_sval = model.get_rvalue (z, nullptr);
  
      sm_state_map map0 (borrowed_sm);
      sm_state_map map1 (borrowed_sm);
*************** test_sm_state_map ()
*** 1895,1911 ****
  
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *x_sval = model.get_rvalue (x, NULL);
!     const svalue *y_sval = model.get_rvalue (y, NULL);
!     const svalue *z_sval = model.get_rvalue (z, NULL);
  
!     map1.impl_set_state (x_sval, TEST_STATE_2, NULL, ext_state);
!     map1.impl_set_state (y_sval, TEST_STATE_3, NULL, ext_state);
!     map1.impl_set_state (z_sval, TEST_STATE_2, NULL, ext_state);
  
!     map2.impl_set_state (z_sval, TEST_STATE_2, NULL, ext_state);
!     map2.impl_set_state (y_sval, TEST_STATE_3, NULL, ext_state);
!     map2.impl_set_state (x_sval, TEST_STATE_2, NULL, ext_state);
  
      ASSERT_EQ (map1.hash (), map2.hash ());
      ASSERT_EQ (map1, map2);
--- 1895,1911 ----
  
      region_model_manager mgr;
      region_model model (&mgr);
!     const svalue *x_sval = model.get_rvalue (x, nullptr);
!     const svalue *y_sval = model.get_rvalue (y, nullptr);
!     const svalue *z_sval = model.get_rvalue (z, nullptr);
  
!     map1.impl_set_state (x_sval, TEST_STATE_2, nullptr, ext_state);
!     map1.impl_set_state (y_sval, TEST_STATE_3, nullptr, ext_state);
!     map1.impl_set_state (z_sval, TEST_STATE_2, nullptr, ext_state);
  
!     map2.impl_set_state (z_sval, TEST_STATE_2, nullptr, ext_state);
!     map2.impl_set_state (y_sval, TEST_STATE_3, nullptr, ext_state);
!     map2.impl_set_state (x_sval, TEST_STATE_2, nullptr, ext_state);
  
      ASSERT_EQ (map1.hash (), map2.hash ());
      ASSERT_EQ (map1, map2);
*************** test_program_state_1 ()
*** 1923,1929 ****
       malloc sm-state, pointing to a region on the heap.  */
    tree p = build_global_decl ("p", ptr_type_node);
  
!   std::unique_ptr<state_machine> sm = make_malloc_state_machine (NULL);
    const state_machine::state_t UNCHECKED_STATE
      = sm->get_state_by_name ("unchecked");
  
--- 1923,1929 ----
       malloc sm-state, pointing to a region on the heap.  */
    tree p = build_global_decl ("p", ptr_type_node);
  
!   std::unique_ptr<state_machine> sm = make_malloc_state_machine (nullptr);
    const state_machine::state_t UNCHECKED_STATE
      = sm->get_state_by_name ("unchecked");
  
*************** test_program_state_1 ()
*** 1935,1947 ****
    const svalue *size_in_bytes
      = mgr->get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
!     = model->get_or_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);
    sm_state_map *smap = s.m_checker_states[0];
  
!   smap->impl_set_state (ptr_sval, UNCHECKED_STATE, NULL, ext_state);
    ASSERT_EQ (smap->get_state (ptr_sval, ext_state), UNCHECKED_STATE);
  }
  
--- 1935,1947 ----
    const svalue *size_in_bytes
      = mgr->get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
!     = model->get_or_create_region_for_heap_alloc (size_in_bytes, nullptr);
    const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
!   model->set_value (model->get_lvalue (p, nullptr),
! 		    ptr_sval, nullptr);
    sm_state_map *smap = s.m_checker_states[0];
  
!   smap->impl_set_state (ptr_sval, UNCHECKED_STATE, nullptr, ext_state);
    ASSERT_EQ (smap->get_state (ptr_sval, ext_state), UNCHECKED_STATE);
  }
  
*************** test_program_state_2 ()
*** 1962,1970 ****
  
    program_state s (ext_state);
    region_model *model = s.m_region_model;
!   const region *p_reg = model->get_lvalue (p, NULL);
!   const svalue *str_sval = model->get_rvalue (string_cst_ptr, NULL);
!   model->set_value (p_reg, str_sval, NULL);
  }
  
  /* Verify that program_states with identical sm-state can be merged,
--- 1962,1970 ----
  
    program_state s (ext_state);
    region_model *model = s.m_region_model;
!   const region *p_reg = model->get_lvalue (p, nullptr);
!   const svalue *str_sval = model->get_rvalue (string_cst_ptr, nullptr);
!   model->set_value (p_reg, str_sval, nullptr);
  }
  
  /* Verify that program_states with identical sm-state can be merged,
*************** test_program_state_merging ()
*** 1980,1986 ****
    engine eng;
    region_model_manager *mgr = eng.get_model_manager ();
    program_point point (program_point::origin (*mgr));
!   extrinsic_state ext_state (make_malloc_state_machine (NULL),
  			     &eng);
  
    program_state s0 (ext_state);
--- 1980,1986 ----
    engine eng;
    region_model_manager *mgr = eng.get_model_manager ();
    program_point point (program_point::origin (*mgr));
!   extrinsic_state ext_state (make_malloc_state_machine (nullptr),
  			     &eng);
  
    program_state s0 (ext_state);
*************** test_program_state_merging ()
*** 1991,2010 ****
    const svalue *size_in_bytes
      = mgr->get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
!     = model0->get_or_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);
    sm_state_map *smap = s0.m_checker_states[0];
    const state_machine::state test_state ("test state", 0);
    const state_machine::state_t TEST_STATE = &test_state;
!   smap->impl_set_state (ptr_sval, TEST_STATE, NULL, ext_state);
    ASSERT_EQ (smap->get_state (ptr_sval, ext_state), TEST_STATE);
  
    model0->canonicalize ();
  
    /* Verify that canonicalization preserves sm-state.  */
!   ASSERT_EQ (smap->get_state (model0->get_rvalue (p, NULL), ext_state),
  	     TEST_STATE);
  
    /* Make a copy of the program_state.  */
--- 1991,2010 ----
    const svalue *size_in_bytes
      = mgr->get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
!     = model0->get_or_create_region_for_heap_alloc (size_in_bytes, nullptr);
    const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
    model0->set_value (model0->get_lvalue (p, &ctxt),
  		     ptr_sval, &ctxt);
    sm_state_map *smap = s0.m_checker_states[0];
    const state_machine::state test_state ("test state", 0);
    const state_machine::state_t TEST_STATE = &test_state;
!   smap->impl_set_state (ptr_sval, TEST_STATE, nullptr, ext_state);
    ASSERT_EQ (smap->get_state (ptr_sval, ext_state), TEST_STATE);
  
    model0->canonicalize ();
  
    /* Verify that canonicalization preserves sm-state.  */
!   ASSERT_EQ (smap->get_state (model0->get_rvalue (p, nullptr), ext_state),
  	     TEST_STATE);
  
    /* Make a copy of the program_state.  */
*************** test_program_state_merging ()
*** 2021,2027 ****
    /* Verify that the merged state has the sm-state for "p".  */
    region_model *merged_model = merged.m_region_model;
    sm_state_map *merged_smap = merged.m_checker_states[0];
!   ASSERT_EQ (merged_smap->get_state (merged_model->get_rvalue (p, NULL),
  				     ext_state),
  	     TEST_STATE);
  
--- 2021,2027 ----
    /* Verify that the merged state has the sm-state for "p".  */
    region_model *merged_model = merged.m_region_model;
    sm_state_map *merged_smap = merged.m_checker_states[0];
!   ASSERT_EQ (merged_smap->get_state (merged_model->get_rvalue (p, nullptr),
  				     ext_state),
  	     TEST_STATE);
  
*************** test_program_state_merging ()
*** 2030,2036 ****
    merged.validate (ext_state);
  
    /* Verify that the merged state still has the sm-state for "p".  */
!   ASSERT_EQ (merged_smap->get_state (merged_model->get_rvalue (p, NULL),
  				     ext_state),
  	     TEST_STATE);
  
--- 2030,2036 ----
    merged.validate (ext_state);
  
    /* Verify that the merged state still has the sm-state for "p".  */
!   ASSERT_EQ (merged_smap->get_state (merged_model->get_rvalue (p, nullptr),
  				     ext_state),
  	     TEST_STATE);
  
*************** test_program_state_merging_2 ()
*** 2047,2053 ****
    engine eng;
    region_model_manager *mgr = eng.get_model_manager ();
    program_point point (program_point::origin (*mgr));
!   extrinsic_state ext_state (make_signal_state_machine (NULL), &eng);
  
    const state_machine::state test_state_0 ("test state 0", 0);
    const state_machine::state test_state_1 ("test state 1", 1);
--- 2047,2053 ----
    engine eng;
    region_model_manager *mgr = eng.get_model_manager ();
    program_point point (program_point::origin (*mgr));
!   extrinsic_state ext_state (make_signal_state_machine (nullptr), &eng);
  
    const state_machine::state test_state_0 ("test state 0", 0);
    const state_machine::state test_state_1 ("test state 1", 1);
diff -Nrcpad gcc-16-20250629/gcc/analyzer/program-state.h gcc-16-20250706/gcc/analyzer/program-state.h
*** gcc-16-20250629/gcc/analyzer/program-state.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/program-state.h	Sun Jul  6 22:32:10 2025
*************** class extrinsic_state
*** 37,43 ****
  public:
    extrinsic_state (std::vector<std::unique_ptr<state_machine>> &&checkers,
  		   engine *eng,
! 		   logger *logger = NULL)
    : m_checkers (std::move (checkers)),
      m_logger (logger),
      m_engine (eng)
--- 37,43 ----
  public:
    extrinsic_state (std::vector<std::unique_ptr<state_machine>> &&checkers,
  		   engine *eng,
! 		   logger *logger = nullptr)
    : m_checkers (std::move (checkers)),
      m_logger (logger),
      m_engine (eng)
*************** public:
*** 47,53 ****
    // For use in selftests that use just one state machine
    extrinsic_state (std::unique_ptr<state_machine> sm,
  		   engine *eng,
! 		   logger *logger = NULL)
    : m_logger (logger),
      m_engine (eng)
    {
--- 47,53 ----
    // For use in selftests that use just one state machine
    extrinsic_state (std::unique_ptr<state_machine> sm,
  		   engine *eng,
! 		   logger *logger = nullptr)
    : m_logger (logger),
      m_engine (eng)
    {
*************** public:
*** 98,104 ****
    {
      /* Default ctor needed by hash_map::empty.  */
      entry_t ()
!     : m_state (0), m_origin (NULL)
      {
      }
  
--- 98,104 ----
    {
      /* Default ctor needed by hash_map::empty.  */
      entry_t ()
!     : m_state (0), m_origin (nullptr)
      {
      }
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/record-layout.cc gcc-16-20250706/gcc/analyzer/record-layout.cc
*** gcc-16-20250629/gcc/analyzer/record-layout.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/record-layout.cc	Sun Jul  6 22:32:10 2025
*************** record_layout::get_item_at (bit_offset_t
*** 86,92 ****
    FOR_EACH_VEC_ELT (m_items, i, it)
      if (it->contains_p (offset))
        return it;
!   return NULL;
  }
  
  /* Subroutine of ctor.  Add padding item to NEXT_OFFSET if necessary.  */
--- 86,92 ----
    FOR_EACH_VEC_ELT (m_items, i, it)
      if (it->contains_p (offset))
        return it;
!   return nullptr;
  }
  
  /* Subroutine of ctor.  Add padding item to NEXT_OFFSET if necessary.  */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region-model-asm.cc gcc-16-20250706/gcc/analyzer/region-model-asm.cc
*** gcc-16-20250629/gcc/analyzer/region-model-asm.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region-model-asm.cc	Sun Jul  6 22:32:10 2025
*************** deterministic_p (const gasm *asm_stmt)
*** 119,125 ****
  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);
--- 119,125 ----
  void
  region_model::on_asm_stmt (const gasm *stmt, region_model_context *ctxt)
  {
!   logger *logger = ctxt ? ctxt->get_logger () : nullptr;
    LOG_SCOPE (logger);
  
    const unsigned noutputs = gimple_asm_noutputs (stmt);
*************** region_model::on_asm_stmt (const gasm *s
*** 216,222 ****
  
        tree src_expr = input_tvec[i];
        const svalue *src_sval = get_rvalue (src_expr, ctxt);
!       check_for_poison (src_sval, src_expr, NULL, ctxt);
        input_svals.quick_push (src_sval);
        reachable_regs.handle_sval (src_sval);
  
--- 216,222 ----
  
        tree src_expr = input_tvec[i];
        const svalue *src_sval = get_rvalue (src_expr, ctxt);
!       check_for_poison (src_sval, src_expr, nullptr, ctxt);
        input_svals.quick_push (src_sval);
        reachable_regs.handle_sval (src_sval);
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region-model-manager.cc gcc-16-20250706/gcc/analyzer/region-model-manager.cc
*** gcc-16-20250629/gcc/analyzer/region-model-manager.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region-model-manager.cc	Sun Jul  6 22:32:10 2025
*************** region_model_manager::region_model_manag
*** 49,55 ****
    m_root_region (alloc_symbol_id ()),
    m_stack_region (alloc_symbol_id (), &m_root_region),
    m_heap_region (alloc_symbol_id (), &m_root_region),
!   m_unknown_NULL (NULL),
    m_checking_feasibility (false),
    m_max_complexity (0, 0),
    m_code_region (alloc_symbol_id (), &m_root_region),
--- 49,55 ----
    m_root_region (alloc_symbol_id ()),
    m_stack_region (alloc_symbol_id (), &m_root_region),
    m_heap_region (alloc_symbol_id (), &m_root_region),
!   m_unknown_NULL (nullptr),
    m_checking_feasibility (false),
    m_max_complexity (0, 0),
    m_code_region (alloc_symbol_id (), &m_root_region),
*************** region_model_manager::get_or_create_null
*** 259,265 ****
    return get_or_create_int_cst (pointer_type, 0);
  }
  
! /* Return the svalue * for a unknown_svalue for TYPE (which can be NULL),
     creating it if necessary.
     The unknown_svalue instances are reused, based on pointer equality
     of the types  */
--- 259,265 ----
    return get_or_create_int_cst (pointer_type, 0);
  }
  
! /* Return the svalue * for a unknown_svalue for TYPE (which can be NULL_TREE),
     creating it if necessary.
     The unknown_svalue instances are reused, based on pointer equality
     of the types  */
*************** region_model_manager::get_ptr_svalue (tr
*** 407,413 ****
  
  /* Subroutine of region_model_manager::get_or_create_unaryop.
     Attempt to fold the inputs and return a simpler svalue *.
!    Otherwise, return NULL.  */
  
  const svalue *
  region_model_manager::maybe_fold_unaryop (tree type, enum tree_code op,
--- 407,413 ----
  
  /* Subroutine of region_model_manager::get_or_create_unaryop.
     Attempt to fold the inputs and return a simpler svalue *.
!    Otherwise, return nullptr.  */
  
  const svalue *
  region_model_manager::maybe_fold_unaryop (tree type, enum tree_code op,
*************** region_model_manager::maybe_fold_unaryop
*** 516,522 ****
  	  }
        }
  
!   return NULL;
  }
  
  /* Return the svalue * for an unary operation OP on ARG with a result of
--- 516,522 ----
  	  }
        }
  
!   return nullptr;
  }
  
  /* Return the svalue * for an unary operation OP on ARG with a result of
*************** region_model_manager::get_or_create_cast
*** 594,600 ****
  
     If COMPOUND_SVAL has a value for the appropriate bits, return it,
     shifted accordingly.
!    Otherwise return NULL.  */
  
  const svalue *
  region_model_manager::
--- 594,600 ----
  
     If COMPOUND_SVAL has a value for the appropriate bits, return it,
     shifted accordingly.
!    Otherwise return nullptr.  */
  
  const svalue *
  region_model_manager::
*************** maybe_undo_optimize_bit_field_compare (t
*** 606,612 ****
    if (!type)
      return nullptr;
    if (!INTEGRAL_TYPE_P (type))
!     return NULL;
  
    const binding_map &map = compound_sval->get_map ();
    unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (cst);
--- 606,612 ----
    if (!type)
      return nullptr;
    if (!INTEGRAL_TYPE_P (type))
!     return nullptr;
  
    const binding_map &map = compound_sval->get_map ();
    unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (cst);
*************** maybe_undo_optimize_bit_field_compare (t
*** 614,620 ****
       compound_sval has a value for those bits.  */
    bit_range bits (0, 0);
    if (!bit_range::from_mask (mask, &bits))
!     return NULL;
  
    bit_range bound_bits (bits);
    if (BYTES_BIG_ENDIAN)
--- 614,620 ----
       compound_sval has a value for those bits.  */
    bit_range bits (0, 0);
    if (!bit_range::from_mask (mask, &bits))
!     return nullptr;
  
    bit_range bound_bits (bits);
    if (BYTES_BIG_ENDIAN)
*************** maybe_undo_optimize_bit_field_compare (t
*** 624,630 ****
      = get_store_manager ()->get_concrete_binding (bound_bits);
    const svalue *sval = map.get (conc);
    if (!sval)
!     return NULL;
  
    /* We have a value;
       shift it by the correct number of bits.  */
--- 624,630 ----
      = get_store_manager ()->get_concrete_binding (bound_bits);
    const svalue *sval = map.get (conc);
    if (!sval)
!     return nullptr;
  
    /* We have a value;
       shift it by the correct number of bits.  */
*************** maybe_undo_optimize_bit_field_compare (t
*** 641,647 ****
  
  /* Subroutine of region_model_manager::get_or_create_binop.
     Attempt to fold the inputs and return a simpler svalue *.
!    Otherwise, return NULL.  */
  
  const svalue *
  region_model_manager::maybe_fold_binop (tree type, enum tree_code op,
--- 641,647 ----
  
  /* Subroutine of region_model_manager::get_or_create_binop.
     Attempt to fold the inputs and return a simpler svalue *.
!    Otherwise, return nullptr.  */
  
  const svalue *
  region_model_manager::maybe_fold_binop (tree type, enum tree_code op,
*************** region_model_manager::maybe_fold_binop (
*** 669,675 ****
    if ((type && FLOAT_TYPE_P (type))
        || (arg0->get_type () && FLOAT_TYPE_P (arg0->get_type ()))
        || (arg1->get_type () && FLOAT_TYPE_P (arg1->get_type ())))
!     return NULL;
  
    switch (op)
      {
--- 669,675 ----
    if ((type && FLOAT_TYPE_P (type))
        || (arg0->get_type () && FLOAT_TYPE_P (arg0->get_type ()))
        || (arg1->get_type () && FLOAT_TYPE_P (arg1->get_type ())))
!     return nullptr;
  
    switch (op)
      {
*************** region_model_manager::maybe_fold_binop (
*** 898,904 ****
  
    /* etc.  */
  
!   return NULL;
  }
  
  /* Return the svalue * for an binary operation OP on ARG0 and ARG1
--- 898,904 ----
  
    /* etc.  */
  
!   return nullptr;
  }
  
  /* Return the svalue * for an binary operation OP on ARG0 and ARG1
*************** region_model_manager::get_or_create_bino
*** 933,939 ****
  }
  
  /* Subroutine of region_model_manager::get_or_create_sub_svalue.
!    Return a folded svalue, or NULL.  */
  
  const svalue *
  region_model_manager::maybe_fold_sub_svalue (tree type,
--- 933,939 ----
  }
  
  /* Subroutine of region_model_manager::get_or_create_sub_svalue.
!    Return a folded svalue, or nullptr.  */
  
  const svalue *
  region_model_manager::maybe_fold_sub_svalue (tree type,
*************** region_model_manager::maybe_fold_sub_sva
*** 1020,1026 ****
      if (type)
        return get_or_create_cast (type, repeated_sval->get_inner_svalue ());
  
!   return NULL;
  }
  
  /* Return the svalue * for extracting a subvalue of type TYPE from
--- 1020,1026 ----
      if (type)
        return get_or_create_cast (type, repeated_sval->get_inner_svalue ());
  
!   return nullptr;
  }
  
  /* Return the svalue * for extracting a subvalue of type TYPE from
*************** region_model_manager::get_or_create_sub_
*** 1046,1052 ****
  }
  
  /* 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,
--- 1046,1052 ----
  }
  
  /* Subroutine of region_model_manager::get_or_create_repeated_svalue.
!    Return a folded svalue, or nullptr.  */
  
  const svalue *
  region_model_manager::maybe_fold_repeated_svalue (tree type,
*************** region_model_manager::maybe_fold_repeate
*** 1080,1086 ****
      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
--- 1080,1086 ----
      if (zerop (cst) && type)
        return get_or_create_cast (type, inner_svalue);
  
!   return nullptr;
  }
  
  /* Return the svalue * of type TYPE in which INNER_SVALUE is repeated
*************** region_model_manager::maybe_fold_bits_wi
*** 1274,1280 ****
  	}
  	break;
        }
!   return NULL;
  }
  
  /* Return the svalue * of type TYPE for extracting BITS from INNER_SVALUE,
--- 1274,1280 ----
  	}
  	break;
        }
!   return nullptr;
  }
  
  /* Return the svalue * of type TYPE for extracting BITS from INNER_SVALUE,
*************** region_model_manager::get_or_create_conj
*** 1401,1407 ****
  }
  
  /* Subroutine of region_model_manager::get_or_create_asm_output_svalue.
!    Return a folded svalue, or NULL.  */
  
  const svalue *
  region_model_manager::
--- 1401,1407 ----
  }
  
  /* Subroutine of region_model_manager::get_or_create_asm_output_svalue.
!    Return a folded svalue, or nullptr.  */
  
  const svalue *
  region_model_manager::
*************** maybe_fold_asm_output_svalue (tree type,
*** 1413,1419 ****
      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
--- 1413,1419 ----
      if (iter->get_kind () == SK_UNKNOWN)
        return get_or_create_unknown_svalue (type);
  
!   return nullptr;
  }
  
  /* Return the svalue * of type TYPE for OUTPUT_IDX of the deterministic
*************** get_or_create_const_fn_result_svalue (tr
*** 1501,1507 ****
  
  /* Given DATA_CST (a STRING_CST or RAW_DATA_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.  */
  
  const svalue *
  region_model_manager::maybe_get_char_from_cst (tree data_cst,
--- 1501,1507 ----
  
  /* Given DATA_CST (a STRING_CST or RAW_DATA_CST) and BYTE_OFFSET_CST a constant,
     attempt to get the character at that offset, returning either
!    the svalue for the character constant, or nullptr if unsuccessful.  */
  
  const svalue *
  region_model_manager::maybe_get_char_from_cst (tree data_cst,
*************** get_string_cst_size (const_tree string_c
*** 1533,1539 ****
  
  /* 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.  */
  
  const svalue *
  region_model_manager::maybe_get_char_from_string_cst (tree string_cst,
--- 1533,1539 ----
  
  /* 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 nullptr if unsuccessful.  */
  
  const svalue *
  region_model_manager::maybe_get_char_from_string_cst (tree string_cst,
*************** region_model_manager::maybe_get_char_fro
*** 1552,1558 ****
        if (compare_constants (byte_offset_cst,
  			     GE_EXPR,
  			     get_string_cst_size (string_cst)).is_true ())
! 	return NULL;
  
        int char_val;
        if (compare_tree_int (byte_offset_cst,
--- 1552,1558 ----
        if (compare_constants (byte_offset_cst,
  			     GE_EXPR,
  			     get_string_cst_size (string_cst)).is_true ())
! 	return nullptr;
  
        int char_val;
        if (compare_tree_int (byte_offset_cst,
*************** region_model_manager::maybe_get_char_fro
*** 1567,1578 ****
  	= build_int_cst_type (TREE_TYPE (TREE_TYPE (string_cst)), char_val);
        return get_or_create_constant_svalue (char_cst);
      }
!   return NULL;
  }
  
  /* Given RAW_DATA_CST, a RAW_DATA_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.  */
  
  const svalue *
  region_model_manager::maybe_get_char_from_raw_data_cst (tree raw_data_cst,
--- 1567,1578 ----
  	= build_int_cst_type (TREE_TYPE (TREE_TYPE (string_cst)), char_val);
        return get_or_create_constant_svalue (char_cst);
      }
!   return nullptr;
  }
  
  /* Given RAW_DATA_CST, a RAW_DATA_CST and BYTE_OFFSET_CST a constant,
     attempt to get the character at that offset, returning either
!    the svalue for the character constant, or nullptr if unsuccessful.  */
  
  const svalue *
  region_model_manager::maybe_get_char_from_raw_data_cst (tree raw_data_cst,
*************** region_model_manager::get_cast_region (c
*** 1801,1807 ****
  }
  
  /* Return the frame_region for call to FUN from CALLING_FRAME, creating it
!    if necessary.  CALLING_FRAME may be NULL.  */
  
  const frame_region *
  region_model_manager::get_frame_region (const frame_region *calling_frame,
--- 1801,1807 ----
  }
  
  /* Return the frame_region for call to FUN from CALLING_FRAME, creating it
!    if necessary.  CALLING_FRAME may be nullptr.  */
  
  const frame_region *
  region_model_manager::get_frame_region (const frame_region *calling_frame,
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region-model-manager.h gcc-16-20250706/gcc/analyzer/region-model-manager.h
*** gcc-16-20250629/gcc/analyzer/region-model-manager.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region-model-manager.h	Sun Jul  6 22:32:10 2025
*************** namespace ana {
*** 31,37 ****
  class region_model_manager
  {
  public:
!   region_model_manager (logger *logger = NULL);
    ~region_model_manager ();
  
    unsigned get_num_symbols () const { return m_next_symbol_id; }
--- 31,37 ----
  class region_model_manager
  {
  public:
!   region_model_manager (logger *logger = nullptr);
    ~region_model_manager ();
  
    unsigned get_num_symbols () const { return m_next_symbol_id; }
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region-model-reachability.cc gcc-16-20250706/gcc/analyzer/region-model-reachability.cc
*** gcc-16-20250629/gcc/analyzer/region-model-reachability.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region-model-reachability.cc	Sun Jul  6 22:32:10 2025
*************** reachable_regions::init_cluster (const r
*** 68,74 ****
    if (const symbolic_region *sym_reg = base_reg->dyn_cast_symbolic_region ())
      {
        const svalue *ptr = sym_reg->get_pointer ();
!       if (ptr->implicitly_live_p (NULL, m_model))
  	add (base_reg, true);
        switch (ptr->get_kind ())
  	{
--- 68,74 ----
    if (const symbolic_region *sym_reg = base_reg->dyn_cast_symbolic_region ())
      {
        const svalue *ptr = sym_reg->get_pointer ();
!       if (ptr->implicitly_live_p (nullptr, m_model))
  	add (base_reg, true);
        switch (ptr->get_kind ())
  	{
*************** reachable_regions::init_cluster (const r
*** 84,90 ****
  	    const region *other_base_reg = init_sval_reg->get_base_region ();
  	    const binding_cluster *other_cluster
  	      = m_store->get_cluster (other_base_reg);
! 	    if (other_cluster == NULL
  		|| !other_cluster->touched_p ())
  	      add (base_reg, true);
  	  }
--- 84,90 ----
  	    const region *other_base_reg = init_sval_reg->get_base_region ();
  	    const binding_cluster *other_cluster
  	      = m_store->get_cluster (other_base_reg);
! 	    if (other_cluster == nullptr
  		|| !other_cluster->touched_p ())
  	      add (base_reg, true);
  	  }
*************** reachable_regions::add (const region *re
*** 131,137 ****
    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
--- 131,137 ----
    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, nullptr));
  }
  
  void
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region-model.cc gcc-16-20250706/gcc/analyzer/region-model.cc
*** gcc-16-20250629/gcc/analyzer/region-model.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region-model.cc	Sun Jul  6 22:32:10 2025
*************** region_to_value_map::operator== (const r
*** 159,165 ****
        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;
--- 159,165 ----
        const region *reg = iter.first;
        const svalue *sval = iter.second;
        const svalue * const *other_slot = other.get (reg);
!       if (other_slot == nullptr)
  	return false;
        if (sval != *other_slot)
  	return false;
*************** exception_node::add_to_reachable_regions
*** 403,409 ****
  /* 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_thrown_exceptions_stack (),
    m_caught_exceptions_stack (),
    m_dynamic_extents ()
--- 403,409 ----
  /* Ctor for region_model: construct an "empty" model.  */
  
  region_model::region_model (region_model_manager *mgr)
! : m_mgr (mgr), m_store (), m_current_frame (nullptr),
    m_thrown_exceptions_stack (),
    m_caught_exceptions_stack (),
    m_dynamic_extents ()
*************** public:
*** 895,901 ****
        /* Couldn't get state; accept this diagnostic.  */
        return true;
  
!     const svalue *fsval = emission_model.get_rvalue (m_check_expr, NULL);
      /* Check to see if the expr is also poisoned in FNODE (and in the
         same way).  */
      const poisoned_svalue * fspval = fsval->dyn_cast_poisoned_svalue ();
--- 895,901 ----
        /* Couldn't get state; accept this diagnostic.  */
        return true;
  
!     const svalue *fsval = emission_model.get_rvalue (m_check_expr, nullptr);
      /* Check to see if the expr is also poisoned in FNODE (and in the
         same way).  */
      const poisoned_svalue * fspval = fsval->dyn_cast_poisoned_svalue ();
*************** check_for_invalid_ptrdiff (const gassign
*** 1173,1179 ****
  /* If ASSIGN is a stmt that can be modelled via
       set_value (lhs_reg, SVALUE, CTXT)
     for some SVALUE, get the SVALUE.
!    Otherwise return NULL.  */
  
  const svalue *
  region_model::get_gassign_result (const gassign *assign,
--- 1173,1179 ----
  /* If ASSIGN is a stmt that can be modelled via
       set_value (lhs_reg, SVALUE, CTXT)
     for some SVALUE, get the SVALUE.
!    Otherwise return nullptr.  */
  
  const svalue *
  region_model::get_gassign_result (const gassign *assign,
*************** region_model::get_gassign_result (const
*** 1196,1202 ****
    switch (op)
      {
      default:
!       return NULL;
  
      case POINTER_PLUS_EXPR:
        {
--- 1196,1202 ----
    switch (op)
      {
      default:
!       return nullptr;
  
      case POINTER_PLUS_EXPR:
        {
*************** within_short_circuited_stmt_p (const reg
*** 1461,1468 ****
       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;
--- 1461,1468 ----
       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 nullptr ctxt here to avoid generating warnings.  */
!   const svalue *other_arg_sval = model->get_rvalue (other_arg, nullptr);
    tree other_arg_cst = other_arg_sval->maybe_get_constant ();
    if (!other_arg_cst)
      return false;
*************** due_to_ifn_deferred_init_p (const gassig
*** 1529,1535 ****
  /* 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.
!    SRC_REGION is a hint about where SVAL came from, and can be NULL.  */
  
  const svalue *
  region_model::check_for_poison (const svalue *sval,
--- 1529,1535 ----
  /* 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.
!    SRC_REGION is a hint about where SVAL came from, and can be nullptr.  */
  
  const svalue *
  region_model::check_for_poison (const svalue *sval,
*************** region_model::check_for_poison (const sv
*** 1572,1578 ****
  	 the tree other than via the def stmts, using
  	 fixup_tree_for_diagnostic.  */
        tree diag_arg = fixup_tree_for_diagnostic (expr);
!       if (src_region == NULL && pkind == poison_kind::uninit)
  	src_region = get_region_for_poisoned_expr (expr);
  
        /* Can we reliably get the poisoned value from "expr"?
--- 1572,1578 ----
  	 the tree other than via the def stmts, using
  	 fixup_tree_for_diagnostic.  */
        tree diag_arg = fixup_tree_for_diagnostic (expr);
!       if (src_region == nullptr && pkind == poison_kind::uninit)
  	src_region = get_region_for_poisoned_expr (expr);
  
        /* Can we reliably get the poisoned value from "expr"?
*************** region_model::check_for_poison (const sv
*** 1581,1591 ****
  	 Hence we only query its value now, and only use it if we get the
  	 poisoned value back again.  */
        tree check_expr = expr;
!       const svalue *foo_sval = get_rvalue (expr, NULL);
        if (foo_sval == sval)
  	check_expr = expr;
        else
! 	check_expr = NULL;
        if (ctxt->warn
  	    (std::make_unique<poisoned_value_diagnostic> (diag_arg,
  							  pkind,
--- 1581,1591 ----
  	 Hence we only query its value now, and only use it if we get the
  	 poisoned value back again.  */
        tree check_expr = expr;
!       const svalue *foo_sval = get_rvalue (expr, nullptr);
        if (foo_sval == sval)
  	check_expr = expr;
        else
! 	check_expr = nullptr;
        if (ctxt->warn
  	    (std::make_unique<poisoned_value_diagnostic> (diag_arg,
  							  pkind,
*************** region_model::check_for_poison (const sv
*** 1606,1612 ****
  
  /* 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
--- 1606,1612 ----
  
  /* Attempt to get a region for describing EXPR, the source of region of
     a poisoned_svalue for use in a poisoned_value_diagnostic.
!    Return nullptr if there is no good region to use.  */
  
  const region *
  region_model::get_region_for_poisoned_expr (tree expr) const
*************** region_model::get_region_for_poisoned_ex
*** 1617,1625 ****
        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
--- 1617,1625 ----
        if (decl && DECL_P (decl))
  	expr = decl;
        else
! 	return nullptr;
      }
!   return get_lvalue (expr, nullptr);
  }
  
  /* Update this model for the ASSIGN stmt, using CTXT to report any
*************** region_model::on_assignment (const gassi
*** 1648,1654 ****
    if (const svalue *sval = get_gassign_result (assign, ctxt))
      {
        tree expr = get_diagnostic_tree_for_gassign (assign);
!       check_for_poison (sval, expr, NULL, ctxt);
        set_value (lhs_reg, sval, ctxt);
        return;
      }
--- 1648,1654 ----
    if (const svalue *sval = get_gassign_result (assign, ctxt))
      {
        tree expr = get_diagnostic_tree_for_gassign (assign);
!       check_for_poison (sval, expr, nullptr, ctxt);
        set_value (lhs_reg, sval, ctxt);
        return;
      }
*************** region_model::on_assignment (const gassi
*** 1708,1714 ****
  	/* 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;
      }
--- 1708,1714 ----
  	/* 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 () : nullptr);
        }
        break;
      }
*************** region_model::update_for_nonzero_return
*** 1939,1945 ****
     to set an upper bound on the size of a copy_to_user.
     Attempt to simplify such sizes by trying to get the upper bound as a
     constant.
!    Return the simplified svalue if possible, or NULL otherwise.  */
  
  static const svalue *
  maybe_simplify_upper_bound (const svalue *num_bytes_sval,
--- 1939,1945 ----
     to set an upper bound on the size of a copy_to_user.
     Attempt to simplify such sizes by trying to get the upper bound as a
     constant.
!    Return the simplified svalue if possible, or nullptr otherwise.  */
  
  static const svalue *
  maybe_simplify_upper_bound (const svalue *num_bytes_sval,
*************** maybe_simplify_upper_bound (const svalue
*** 1957,1963 ****
  	     when recording the diagnostic, or note that we're using
  	     the upper bound.  */
  	}
!   return NULL;
  }
  
  /* Attempt to get an upper bound for the size of a copy when simulating a
--- 1957,1963 ----
  	     when recording the diagnostic, or note that we're using
  	     the upper bound.  */
  	}
!   return nullptr;
  }
  
  /* Attempt to get an upper bound for the size of a copy when simulating a
*************** maybe_simplify_upper_bound (const svalue
*** 1968,1974 ****
     that, use the size of SRC_REG if constant.
  
     Return a symbolic value for an upper limit on the number of bytes
!    copied, or NULL if no such value could be determined.  */
  
  const svalue *
  region_model::maybe_get_copy_bounds (const region *src_reg,
--- 1968,1974 ----
     that, use the size of SRC_REG if constant.
  
     Return a symbolic value for an upper limit on the number of bytes
!    copied, or nullptr if no such value could be determined.  */
  
  const svalue *
  region_model::maybe_get_copy_bounds (const region *src_reg,
*************** region_model::maybe_get_copy_bounds (con
*** 1994,2000 ****
      return num_bytes_sval;
  
    /* Non-constant: give up. */
!   return NULL;
  }
  
  /* Get any known_function for FNDECL for call CD.
--- 1994,2000 ----
      return num_bytes_sval;
  
    /* Non-constant: give up. */
!   return nullptr;
  }
  
  /* Get any known_function for FNDECL for call CD.
*************** region_model::maybe_get_copy_bounds (con
*** 2002,2008 ****
     The call must match all assumptions made by the known_function (such as
     e.g. "argument 1's type must be a pointer type").
  
!    Return NULL if no known_function is found, or it does not match the
     assumption(s).  */
  
  const known_function *
--- 2002,2008 ----
     The call must match all assumptions made by the known_function (such as
     e.g. "argument 1's type must be a pointer type").
  
!    Return nullptr if no known_function is found, or it does not match the
     assumption(s).  */
  
  const known_function *
*************** region_model::get_known_function (tree f
*** 2012,2018 ****
    return known_fn_mgr->get_match (fndecl, cd);
  }
  
! /* Get any known_function for IFN, or NULL.  */
  
  const known_function *
  region_model::get_known_function (enum internal_fn ifn) const
--- 2012,2018 ----
    return known_fn_mgr->get_match (fndecl, cd);
  }
  
! /* Get any known_function for IFN, or nullptr.  */
  
  const known_function *
  region_model::get_known_function (enum internal_fn ifn) const
*************** region_model::get_known_function (enum i
*** 2022,2033 ****
  }
  
  /* Get any builtin_known_function for CALL and emit any warning to CTXT
!    if not NULL.
  
     The call must match all assumptions made by the known_function (such as
     e.g. "argument 1's type must be a pointer type").
  
!    Return NULL if no builtin_known_function is found, or it does
     not match the assumption(s).
  
     Internally calls get_known_function to find a known_function and cast it
--- 2022,2033 ----
  }
  
  /* Get any builtin_known_function for CALL and emit any warning to CTXT
!    if not nullptr.
  
     The call must match all assumptions made by the known_function (such as
     e.g. "argument 1's type must be a pointer type").
  
!    Return nullptr if no builtin_known_function is found, or it does
     not match the assumption(s).
  
     Internally calls get_known_function to find a known_function and cast it
*************** region_model::get_known_function (enum i
*** 2063,2080 ****
  
  const builtin_known_function *
  region_model::get_builtin_kf (const gcall &call,
! 			       region_model_context *ctxt /* = NULL */) const
  {
    region_model *mut_this = const_cast <region_model *> (this);
    tree callee_fndecl = mut_this->get_fndecl_for_call (call, ctxt);
    if (! callee_fndecl)
!     return NULL;
  
    call_details cd (call, mut_this, ctxt);
    if (const known_function *kf = get_known_function (callee_fndecl, cd))
      return kf->dyn_cast_builtin_kf ();
  
!   return NULL;
  }
  
  /* Subclass of custom_edge_info for use by exploded_edges that represent
--- 2063,2080 ----
  
  const builtin_known_function *
  region_model::get_builtin_kf (const gcall &call,
! 			       region_model_context *ctxt /* = nullptr */) const
  {
    region_model *mut_this = const_cast <region_model *> (this);
    tree callee_fndecl = mut_this->get_fndecl_for_call (call, ctxt);
    if (! callee_fndecl)
!     return nullptr;
  
    call_details cd (call, mut_this, ctxt);
    if (const known_function *kf = get_known_function (callee_fndecl, cd))
      return kf->dyn_cast_builtin_kf ();
  
!   return nullptr;
  }
  
  /* Subclass of custom_edge_info for use by exploded_edges that represent
*************** region_model::handle_unrecognized_call (
*** 2677,2683 ****
        }
    }
  
!   uncertainty_t *uncertainty = ctxt ? ctxt->get_uncertainty () : NULL;
  
    /* Purge sm-state for the svalues that were reachable,
       both in non-mutable and mutable form.  */
--- 2677,2683 ----
        }
    }
  
!   uncertainty_t *uncertainty = ctxt ? ctxt->get_uncertainty () : nullptr;
  
    /* Purge sm-state for the svalues that were reachable,
       both in non-mutable and mutable form.  */
*************** region_model::on_longjmp (const gcall &l
*** 2839,2845 ****
       setjmp was called.  */
    gcc_assert (get_stack_depth () >= setjmp_stack_depth);
    while (get_stack_depth () > setjmp_stack_depth)
!     pop_frame (NULL, NULL, ctxt, nullptr, false);
  
    gcc_assert (get_stack_depth () == setjmp_stack_depth);
  
--- 2839,2845 ----
       setjmp was called.  */
    gcc_assert (get_stack_depth () >= setjmp_stack_depth);
    while (get_stack_depth () > setjmp_stack_depth)
!     pop_frame (nullptr, nullptr, ctxt, nullptr, false);
  
    gcc_assert (get_stack_depth () == setjmp_stack_depth);
  
*************** const region *
*** 3040,3046 ****
  region_model::get_lvalue (path_var pv, region_model_context *ctxt) const
  {
    if (pv.m_tree == NULL_TREE)
!     return NULL;
  
    const region *result_reg = get_lvalue_1 (pv, ctxt);
    assert_compat_types (result_reg->get_type (), TREE_TYPE (pv.m_tree));
--- 3040,3046 ----
  region_model::get_lvalue (path_var pv, region_model_context *ctxt) const
  {
    if (pv.m_tree == NULL_TREE)
!     return nullptr;
  
    const region *result_reg = get_lvalue_1 (pv, ctxt);
    assert_compat_types (result_reg->get_type (), TREE_TYPE (pv.m_tree));
*************** const svalue *
*** 3185,3197 ****
  region_model::get_rvalue (path_var pv, region_model_context *ctxt) const
  {
    if (pv.m_tree == NULL_TREE)
!     return NULL;
  
    const svalue *result_sval = get_rvalue_1 (pv, ctxt);
  
    assert_compat_types (result_sval->get_type (), TREE_TYPE (pv.m_tree));
  
!   result_sval = check_for_poison (result_sval, pv.m_tree, NULL, ctxt);
  
    return result_sval;
  }
--- 3185,3197 ----
  region_model::get_rvalue (path_var pv, region_model_context *ctxt) const
  {
    if (pv.m_tree == NULL_TREE)
!     return nullptr;
  
    const svalue *result_sval = get_rvalue_1 (pv, ctxt);
  
    assert_compat_types (result_sval->get_type (), TREE_TYPE (pv.m_tree));
  
!   result_sval = check_for_poison (result_sval, pv.m_tree, nullptr, ctxt);
  
    return result_sval;
  }
*************** void
*** 3579,3585 ****
  region_model::check_for_writable_region (const region* dest_reg,
  					 region_model_context *ctxt) const
  {
!   /* Fail gracefully if CTXT is NULL.  */
    if (!ctxt)
      return;
  
--- 3579,3585 ----
  region_model::check_for_writable_region (const region* dest_reg,
  					 region_model_context *ctxt) const
  {
!   /* Fail gracefully if CTXT is nullptr.  */
    if (!ctxt)
      return;
  
*************** region_model::get_capacity (const region
*** 3644,3656 ****
  	  {
  	    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;
--- 3644,3656 ----
  	  {
  	    tree type = TREE_TYPE (decl);
  	    tree size = TYPE_SIZE (type);
! 	    return get_rvalue (size, nullptr);
  	  }
  	else
  	  {
  	    tree size = decl_init_size (decl, false);
  	    if (size)
! 	      return get_rvalue (size, nullptr);
  	  }
        }
        break;
*************** bool
*** 3727,3733 ****
  region_model::check_region_for_read (const region *src_reg,
  				     region_model_context *ctxt) const
  {
!   return check_region_access (src_reg, access_direction::read, NULL, ctxt);
  }
  
  /* Concrete subclass for casts of pointers that lead to trailing bytes.  */
--- 3727,3733 ----
  region_model::check_region_for_read (const region *src_reg,
  				     region_model_context *ctxt) const
  {
!   return check_region_access (src_reg, access_direction::read, nullptr, ctxt);
  }
  
  /* Concrete subclass for casts of pointers that lead to trailing bytes.  */
*************** void
*** 4115,4121 ****
  region_model::check_region_size (const region *lhs_reg, const svalue *rhs_sval,
  				 region_model_context *ctxt) const
  {
!   if (!ctxt || ctxt->get_stmt () == NULL)
      return;
    /* Only report warnings on assignments that actually change the type.  */
    if (!is_any_cast_p (ctxt->get_stmt ()))
--- 4115,4121 ----
  region_model::check_region_size (const region *lhs_reg, const svalue *rhs_sval,
  				 region_model_context *ctxt) const
  {
!   if (!ctxt || ctxt->get_stmt () == nullptr)
      return;
    /* Only report warnings on assignments that actually change the type.  */
    if (!is_any_cast_p (ctxt->get_stmt ()))
*************** region_model::set_value (const region *l
*** 4208,4214 ****
    check_region_for_write (lhs_reg, rhs_sval, 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.  */
--- 4208,4214 ----
    check_region_for_write (lhs_reg, rhs_sval, ctxt);
  
    m_store.set_value (m_mgr->get_store_manager(), lhs_reg, rhs_sval,
! 		     ctxt ? ctxt->get_uncertainty () : nullptr);
  }
  
  /* Set the value of the region given by LHS to the value given by RHS.  */
*************** region_model::scan_for_null_terminator (
*** 4845,4851 ****
     Simulate scanning through the buffer, reading until we find a 0 byte
     (equivalent to calling strlen).
  
!    Complain and return NULL if:
     - the buffer pointed to isn't null-terminated
     - the buffer pointed to has any uninitalized bytes before any 0-terminator
     - any of the reads aren't within the bounds of the underlying base region
--- 4845,4851 ----
     Simulate scanning through the buffer, reading until we find a 0 byte
     (equivalent to calling strlen).
  
!    Complain and return nullptr if:
     - the buffer pointed to isn't null-terminated
     - the buffer pointed to has any uninitalized bytes before any 0-terminator
     - any of the reads aren't within the bounds of the underlying base region
*************** region_model::check_for_null_terminated_
*** 4873,4879 ****
     Simulate scanning through the buffer, reading until we find a 0 byte
     (equivalent to calling strlen).
  
!    Complain and return NULL if:
     - the buffer pointed to isn't null-terminated
     - the buffer pointed to has any uninitalized bytes before any 0-terminator
     - any of the reads aren't within the bounds of the underlying base region
--- 4873,4879 ----
     Simulate scanning through the buffer, reading until we find a 0 byte
     (equivalent to calling strlen).
  
!    Complain and return nullptr if:
     - the buffer pointed to isn't null-terminated
     - the buffer pointed to has any uninitalized bytes before any 0-terminator
     - any of the reads aren't within the bounds of the underlying base region
*************** region_model::check_for_null_terminated_
*** 4882,4888 ****
     (including the null terminator) if INCLUDE_TERMINATOR is true, or strlen
     of the buffer (not including the null terminator) if it is false.
  
!    Also, when returning an svalue, if OUT_SVAL is non-NULL, write to
     *OUT_SVAL with an svalue representing the content of the buffer up to
     and including the terminator.
  
--- 4882,4888 ----
     (including the null terminator) if INCLUDE_TERMINATOR is true, or strlen
     of the buffer (not including the null terminator) if it is false.
  
!    Also, when returning an svalue, if OUT_SVAL is non-nullptr, write to
     *OUT_SVAL with an svalue representing the content of the buffer up to
     and including the terminator.
  
*************** region_model::get_representative_path_va
*** 5845,5851 ****
  					   svalue_set *visited,
  					   logger *logger) const
  {
!   if (sval == NULL)
      return path_var (NULL_TREE, 0);
  
    LOG_SCOPE (logger);
--- 5845,5851 ----
  					   svalue_set *visited,
  					   logger *logger) const
  {
!   if (sval == nullptr)
      return path_var (NULL_TREE, 0);
  
    LOG_SCOPE (logger);
*************** region_model::maybe_update_for_edge (con
*** 6204,6210 ****
        break;
      }
  
!   if (last_stmt == NULL)
      return true;
  
    /* Apply any constraints for conditionals/switch/computed-goto statements.  */
--- 6204,6210 ----
        break;
      }
  
!   if (last_stmt == nullptr)
      return true;
  
    /* Apply any constraints for conditionals/switch/computed-goto statements.  */
*************** region_model::update_for_return_gcall (c
*** 6285,6291 ****
       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, &call_stmt);
  }
  
  /* Extract calling information from the superedge and update the model for the
--- 6285,6291 ----
       so that pop_frame can determine the region with respect to the
       *caller* frame.  */
    tree lhs = gimple_call_lhs (&call_stmt);
!   pop_frame (lhs, nullptr, ctxt, &call_stmt);
  }
  
  /* Extract calling information from the superedge and update the model for the
*************** apply_constraints_for_gcond (const cfg_s
*** 6361,6367 ****
  			     std::unique_ptr<rejected_constraint> *out)
  {
    ::edge cfg_edge = sedge.get_cfg_edge ();
!   gcc_assert (cfg_edge != NULL);
    gcc_assert (cfg_edge->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE));
  
    enum tree_code op = gimple_cond_code (cond_stmt);
--- 6361,6367 ----
  			     std::unique_ptr<rejected_constraint> *out)
  {
    ::edge cfg_edge = sedge.get_cfg_edge ();
!   gcc_assert (cfg_edge != nullptr);
    gcc_assert (cfg_edge->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE));
  
    enum tree_code op = gimple_cond_code (cond_stmt);
*************** static bool
*** 6379,6385 ****
  has_nondefault_case_for_value_p (const gswitch *switch_stmt, tree int_cst)
  {
    /* We expect the initial label to be the default; skip it.  */
!   gcc_assert (CASE_LOW (gimple_switch_label (switch_stmt, 0)) == NULL);
    unsigned min_idx = 1;
    unsigned max_idx = gimple_switch_num_labels (switch_stmt) - 1;
  
--- 6379,6385 ----
  has_nondefault_case_for_value_p (const gswitch *switch_stmt, tree int_cst)
  {
    /* We expect the initial label to be the default; skip it.  */
!   gcc_assert (CASE_LOW (gimple_switch_label (switch_stmt, 0)) == NULL_TREE);
    unsigned min_idx = 1;
    unsigned max_idx = gimple_switch_num_labels (switch_stmt) - 1;
  
*************** region_model::pop_frame (tree result_lva
*** 6981,6987 ****
    /* Evaluate the result, within the callee 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
        && eval_return_svalue)
--- 6981,6987 ----
    /* Evaluate the result, within the callee frame.  */
    tree fndecl = m_current_frame->get_function ().decl;
    tree result = DECL_RESULT (fndecl);
!   const svalue *retval = nullptr;
    if (result
        && TREE_TYPE (result) != void_type_node
        && eval_return_svalue)
*************** private:
*** 7312,7318 ****
  class contains_floating_point_visitor : public visitor
  {
  public:
!   contains_floating_point_visitor (const svalue *root_sval) : m_result (NULL)
    {
      root_sval->accept (this);
    }
--- 7312,7318 ----
  class contains_floating_point_visitor : public visitor
  {
  public:
!   contains_floating_point_visitor (const svalue *root_sval) : m_result (nullptr)
    {
      root_sval->accept (this);
    }
*************** region_model::set_dynamic_extents (const
*** 7476,7482 ****
    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 *
--- 7476,7482 ----
    m_dynamic_extents.put (reg, size_in_bytes);
  }
  
! /* Get the recording of REG in bytes, or nullptr if no dynamic size was
     recorded.  */
  
  const svalue *
*************** region_model::get_dynamic_extents (const
*** 7484,7490 ****
  {
    if (const svalue * const *slot = m_dynamic_extents.get (reg))
      return *slot;
!   return NULL;
  }
  
  /* Unset any recorded dynamic size of REG.  */
--- 7484,7490 ----
  {
    if (const svalue * const *slot = m_dynamic_extents.get (reg))
      return *slot;
!   return nullptr;
  }
  
  /* Unset any recorded dynamic size of REG.  */
*************** contains_uninit_p (const svalue *sval)
*** 7930,7936 ****
     Check that COPIED_SVAL is fully initialized.  If not, complain about
     an infoleak to CTXT.
  
!    SRC_REG can be NULL; if non-NULL it is used as a hint in the diagnostic
     as to where COPIED_SVAL came from.  */
  
  void
--- 7930,7936 ----
     Check that COPIED_SVAL is fully initialized.  If not, complain about
     an infoleak to CTXT.
  
!    SRC_REG can be nullptr; if non-NULL it is used as a hint in the diagnostic
     as to where COPIED_SVAL came from.  */
  
  void
*************** void
*** 8083,8090 ****
  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);
!   const svalue *rhs_sval = m.get_rvalue (m_rhs, NULL);
    lhs_sval->dump_to_pp (pp, true);
    pp_printf (pp, " %s ", op_symbol_code (m_op));
    rhs_sval->dump_to_pp (pp, true);
--- 8083,8090 ----
  rejected_op_constraint::dump_to_pp (pretty_printer *pp) const
  {
    region_model m (m_model);
!   const svalue *lhs_sval = m.get_rvalue (m_lhs, nullptr);
!   const svalue *rhs_sval = m.get_rvalue (m_rhs, nullptr);
    lhs_sval->dump_to_pp (pp, true);
    pp_printf (pp, " %s ", op_symbol_code (m_op));
    rhs_sval->dump_to_pp (pp, true);
*************** void
*** 8104,8110 ****
  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);
--- 8104,8110 ----
  rejected_ranges_constraint::dump_to_pp (pretty_printer *pp) const
  {
    region_model m (m_model);
!   const svalue *sval = m.get_rvalue (m_expr, nullptr);
    sval->dump_to_pp (pp, true);
    pp_string (pp, " in ");
    m_ranges->dump_to_pp (pp, true);
*************** assert_condition (const location &loc,
*** 8205,8211 ****
  		  tree lhs, tree_code op, tree rhs,
  		  tristate expected)
  {
!   tristate actual = model.eval_condition (lhs, op, rhs, NULL);
    ASSERT_EQ_AT (loc, actual, expected);
  }
  
--- 8205,8211 ----
  		  tree lhs, tree_code op, tree rhs,
  		  tristate expected)
  {
!   tristate actual = model.eval_condition (lhs, op, rhs, nullptr);
    ASSERT_EQ_AT (loc, actual, expected);
  }
  
*************** make_test_compound_type (const char *nam
*** 8294,8300 ****
    TYPE_NAME (t) = get_identifier (name);
    TYPE_SIZE (t) = 0;
  
!   tree fieldlist = NULL;
    int i;
    tree field;
    FOR_EACH_VEC_ELT (*fields, i, field)
--- 8294,8300 ----
    TYPE_NAME (t) = get_identifier (name);
    TYPE_SIZE (t) = 0;
  
!   tree fieldlist = NULL_TREE;
    int i;
    tree field;
    FOR_EACH_VEC_ELT (*fields, i, field)
*************** test_struct ()
*** 8349,8370 ****
  
    region_model_manager mgr;
    region_model model (&mgr);
!   model.set_value (c_x, int_17, NULL);
!   model.set_value (c_y, int_m3, NULL);
  
    /* Verify get_offset for "c.x".  */
    {
!     const region *c_x_reg = model.get_lvalue (c_x, NULL);
      region_offset offset = c_x_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (c, NULL));
      ASSERT_EQ (offset.get_bit_offset (), 0);
    }
  
    /* Verify get_offset for "c.y".  */
    {
!     const region *c_y_reg = model.get_lvalue (c_y, NULL);
      region_offset offset = c_y_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (c, NULL));
      ASSERT_EQ (offset.get_bit_offset (), INT_TYPE_SIZE);
    }
  }
--- 8349,8370 ----
  
    region_model_manager mgr;
    region_model model (&mgr);
!   model.set_value (c_x, int_17, nullptr);
!   model.set_value (c_y, int_m3, nullptr);
  
    /* Verify get_offset for "c.x".  */
    {
!     const region *c_x_reg = model.get_lvalue (c_x, nullptr);
      region_offset offset = c_x_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (c, nullptr));
      ASSERT_EQ (offset.get_bit_offset (), 0);
    }
  
    /* Verify get_offset for "c.y".  */
    {
!     const region *c_y_reg = model.get_lvalue (c_y, nullptr);
      region_offset offset = c_y_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (c, nullptr));
      ASSERT_EQ (offset.get_bit_offset (), INT_TYPE_SIZE);
    }
  }
*************** test_array_1 ()
*** 8385,8391 ****
    tree a_0 = build4 (ARRAY_REF, char_type_node,
  		     a, int_0, NULL_TREE, NULL_TREE);
    tree char_A = build_int_cst (char_type_node, 'A');
!   model.set_value (a_0, char_A, NULL);
  }
  
  /* Verify that region_model::get_representative_tree works as expected.  */
--- 8385,8391 ----
    tree a_0 = build4 (ARRAY_REF, char_type_node,
  		     a, int_0, NULL_TREE, NULL_TREE);
    tree char_A = build_int_cst (char_type_node, 'A');
!   model.set_value (a_0, char_A, nullptr);
  }
  
  /* Verify that region_model::get_representative_tree works as expected.  */
*************** test_get_representative_tree ()
*** 8399,8405 ****
    {
      tree string_cst = build_string (4, "foo");
      region_model m (&mgr);
!     const svalue *str_sval = m.get_rvalue (string_cst, NULL);
      tree rep = m.get_representative_tree (str_sval);
      ASSERT_EQ (rep, string_cst);
    }
--- 8399,8405 ----
    {
      tree string_cst = build_string (4, "foo");
      region_model m (&mgr);
!     const svalue *str_sval = m.get_rvalue (string_cst, nullptr);
      tree rep = m.get_representative_tree (str_sval);
      ASSERT_EQ (rep, string_cst);
    }
*************** test_get_representative_tree ()
*** 8408,8414 ****
    {
      tree string_cst_ptr = build_string_literal (4, "foo");
      region_model m (&mgr);
!     const svalue *str_sval = m.get_rvalue (string_cst_ptr, NULL);
      tree rep = m.get_representative_tree (str_sval);
      ASSERT_DUMP_TREE_EQ (rep, "&\"foo\"[0]");
    }
--- 8408,8414 ----
    {
      tree string_cst_ptr = build_string_literal (4, "foo");
      region_model m (&mgr);
!     const svalue *str_sval = m.get_rvalue (string_cst_ptr, nullptr);
      tree rep = m.get_representative_tree (str_sval);
      ASSERT_DUMP_TREE_EQ (rep, "&\"foo\"[0]");
    }
*************** test_unique_unknowns ()
*** 8533,8544 ****
  
    /* Different types (or the NULL type) should have different
       unknown_svalues.  */
!   const svalue *unknown_NULL_type = mgr.get_or_create_unknown_svalue (NULL);
    ASSERT_NE (unknown_NULL_type, unknown_int);
  
    /* Repeated calls with NULL for the type should get the same "unknown"
       svalue.  */
!   const svalue *unknown_NULL_type_2 = mgr.get_or_create_unknown_svalue (NULL);
    ASSERT_EQ (unknown_NULL_type, unknown_NULL_type_2);
  }
  
--- 8533,8544 ----
  
    /* Different types (or the NULL type) should have different
       unknown_svalues.  */
!   const svalue *unknown_NULL_type = mgr.get_or_create_unknown_svalue (nullptr);
    ASSERT_NE (unknown_NULL_type, unknown_int);
  
    /* Repeated calls with NULL for the type should get the same "unknown"
       svalue.  */
!   const svalue *unknown_NULL_type_2 = mgr.get_or_create_unknown_svalue (nullptr);
    ASSERT_EQ (unknown_NULL_type, unknown_NULL_type_2);
  }
  
*************** test_assignment ()
*** 8882,8890 ****
    region_model model (&mgr);
    ADD_SAT_CONSTRAINT (model, x, EQ_EXPR, int_0);
    ASSERT_CONDITION_UNKNOWN (model, y, EQ_EXPR, int_0);
!   model.set_value (model.get_lvalue (y, NULL),
! 		   model.get_rvalue (int_0, NULL),
! 		   NULL);
    ASSERT_CONDITION_TRUE (model, y, EQ_EXPR, int_0);
    ASSERT_CONDITION_TRUE (model, y, EQ_EXPR, x);
  }
--- 8882,8890 ----
    region_model model (&mgr);
    ADD_SAT_CONSTRAINT (model, x, EQ_EXPR, int_0);
    ASSERT_CONDITION_UNKNOWN (model, y, EQ_EXPR, int_0);
!   model.set_value (model.get_lvalue (y, nullptr),
! 		   model.get_rvalue (int_0, nullptr),
! 		   nullptr);
    ASSERT_CONDITION_TRUE (model, y, EQ_EXPR, int_0);
    ASSERT_CONDITION_TRUE (model, y, EQ_EXPR, x);
  }
*************** test_compound_assignment ()
*** 8912,8927 ****
  
    region_model_manager mgr;
    region_model model (&mgr);
!   model.set_value (c_x, int_17, NULL);
!   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));
  }
  
  /* Verify the details of pushing and popping stack frames.  */
--- 8912,8927 ----
  
    region_model_manager mgr;
    region_model model (&mgr);
!   model.set_value (c_x, int_17, nullptr);
!   model.set_value (c_y, int_m3, nullptr);
  
    /* Copy c to d.  */
!   const svalue *sval = model.get_rvalue (c, nullptr);
!   model.set_value (model.get_lvalue (d, nullptr), sval, nullptr);
  
    /* Check that the fields have the same svalues.  */
!   ASSERT_EQ (model.get_rvalue (c_x, nullptr), model.get_rvalue (d_x, nullptr));
!   ASSERT_EQ (model.get_rvalue (c_y, nullptr), model.get_rvalue (d_y, nullptr));
  }
  
  /* Verify the details of pushing and popping stack frames.  */
*************** test_stack_frames ()
*** 9011,9017 ****
    model.set_value (p_in_globals_reg,
  		   mgr.get_ptr_svalue (ptr_type_node, x_in_child_reg),
  		   &ctxt);
!   ASSERT_EQ (p_in_globals_reg->maybe_get_frame_region (), NULL);
  
    /* Point another global pointer at p: q = &p.  */
    const region *q_in_globals_reg = model.get_lvalue (q, &ctxt);
--- 9011,9017 ----
    model.set_value (p_in_globals_reg,
  		   mgr.get_ptr_svalue (ptr_type_node, x_in_child_reg),
  		   &ctxt);
!   ASSERT_EQ (p_in_globals_reg->maybe_get_frame_region (), nullptr);
  
    /* Point another global pointer at p: q = &p.  */
    const region *q_in_globals_reg = model.get_lvalue (q, &ctxt);
*************** test_stack_frames ()
*** 9025,9037 ****
    ASSERT_FALSE (a_in_parent_reg->descendent_of_p (child_frame_reg));
  
    /* Pop the "child_fn" frame from the stack.  */
!   model.pop_frame (NULL, NULL, &ctxt, nullptr);
    ASSERT_FALSE (model.region_exists_p (child_frame_reg));
    ASSERT_TRUE (model.region_exists_p (parent_frame_reg));
  
    /* 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);
--- 9025,9037 ----
    ASSERT_FALSE (a_in_parent_reg->descendent_of_p (child_frame_reg));
  
    /* Pop the "child_fn" frame from the stack.  */
!   model.pop_frame (nullptr, nullptr, &ctxt, nullptr);
    ASSERT_FALSE (model.region_exists_p (child_frame_reg));
    ASSERT_TRUE (model.region_exists_p (parent_frame_reg));
  
    /* 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, nullptr);
    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_get_representative_path_var ()
*** 9109,9115 ****
        }
        /* ...and that we can lookup lvalues for locals for all frames,
  	 not just the top.  */
!       ASSERT_EQ (model.get_lvalue (path_var (n, depth), NULL),
  		 parm_regs[depth]);
        /* ...and that we can locate the svalues.  */
        {
--- 9109,9115 ----
        }
        /* ...and that we can lookup lvalues for locals for all frames,
  	 not just the top.  */
!       ASSERT_EQ (model.get_lvalue (path_var (n, depth), nullptr),
  		 parm_regs[depth]);
        /* ...and that we can locate the svalues.  */
        {
*************** test_equality_1 ()
*** 9138,9159 ****
  
    /* Verify that setting state in model1 makes the models non-equal.  */
    tree x = build_global_decl ("x", integer_type_node);
!   model0.set_value (x, int_42, NULL);
!   ASSERT_EQ (model0.get_rvalue (x, NULL)->maybe_get_constant (), int_42);
    ASSERT_NE (model0, model1);
  
    /* Verify the copy-ctor.  */
    region_model model2 (model0);
    ASSERT_EQ (model0, model2);
!   ASSERT_EQ (model2.get_rvalue (x, NULL)->maybe_get_constant (), int_42);
    ASSERT_NE (model1, model2);
  
    /* Verify that models obtained from copy-ctor are independently editable
       w/o affecting the original model.  */
!   model2.set_value (x, int_17, NULL);
    ASSERT_NE (model0, model2);
!   ASSERT_EQ (model2.get_rvalue (x, NULL)->maybe_get_constant (), int_17);
!   ASSERT_EQ (model0.get_rvalue (x, NULL)->maybe_get_constant (), int_42);
  }
  
  /* Verify that region models for
--- 9138,9159 ----
  
    /* Verify that setting state in model1 makes the models non-equal.  */
    tree x = build_global_decl ("x", integer_type_node);
!   model0.set_value (x, int_42, nullptr);
!   ASSERT_EQ (model0.get_rvalue (x, nullptr)->maybe_get_constant (), int_42);
    ASSERT_NE (model0, model1);
  
    /* Verify the copy-ctor.  */
    region_model model2 (model0);
    ASSERT_EQ (model0, model2);
!   ASSERT_EQ (model2.get_rvalue (x, nullptr)->maybe_get_constant (), int_42);
    ASSERT_NE (model1, model2);
  
    /* Verify that models obtained from copy-ctor are independently editable
       w/o affecting the original model.  */
!   model2.set_value (x, int_17, nullptr);
    ASSERT_NE (model0, model2);
!   ASSERT_EQ (model2.get_rvalue (x, nullptr)->maybe_get_constant (), int_17);
!   ASSERT_EQ (model0.get_rvalue (x, nullptr)->maybe_get_constant (), int_42);
  }
  
  /* Verify that region models for
*************** test_canonicalization_2 ()
*** 9172,9191 ****
  
    region_model_manager mgr;
    region_model model0 (&mgr);
!   model0.set_value (model0.get_lvalue (x, NULL),
! 		    model0.get_rvalue (int_42, NULL),
! 		    NULL);
!   model0.set_value (model0.get_lvalue (y, NULL),
! 		    model0.get_rvalue (int_113, NULL),
! 		    NULL);
  
    region_model model1 (&mgr);
!   model1.set_value (model1.get_lvalue (y, NULL),
! 		    model1.get_rvalue (int_113, NULL),
! 		    NULL);
!   model1.set_value (model1.get_lvalue (x, NULL),
! 		    model1.get_rvalue (int_42, NULL),
! 		    NULL);
  
    ASSERT_EQ (model0, model1);
  }
--- 9172,9191 ----
  
    region_model_manager mgr;
    region_model model0 (&mgr);
!   model0.set_value (model0.get_lvalue (x, nullptr),
! 		    model0.get_rvalue (int_42, nullptr),
! 		    nullptr);
!   model0.set_value (model0.get_lvalue (y, nullptr),
! 		    model0.get_rvalue (int_113, nullptr),
! 		    nullptr);
  
    region_model model1 (&mgr);
!   model1.set_value (model1.get_lvalue (y, nullptr),
! 		    model1.get_rvalue (int_113, nullptr),
! 		    nullptr);
!   model1.set_value (model1.get_lvalue (x, nullptr),
! 		    model1.get_rvalue (int_42, nullptr),
! 		    nullptr);
  
    ASSERT_EQ (model0, model1);
  }
*************** test_canonicalization_3 ()
*** 9206,9217 ****
  
    region_model_manager mgr;
    region_model model0 (&mgr);
!   model0.add_constraint (x, GT_EXPR, int_3, NULL);
!   model0.add_constraint (y, GT_EXPR, int_42, NULL);
  
    region_model model1 (&mgr);
!   model1.add_constraint (y, GT_EXPR, int_42, NULL);
!   model1.add_constraint (x, GT_EXPR, int_3, NULL);
  
    model0.canonicalize ();
    model1.canonicalize ();
--- 9206,9217 ----
  
    region_model_manager mgr;
    region_model model0 (&mgr);
!   model0.add_constraint (x, GT_EXPR, int_3, nullptr);
!   model0.add_constraint (y, GT_EXPR, int_42, nullptr);
  
    region_model model1 (&mgr);
!   model1.add_constraint (y, GT_EXPR, int_42, nullptr);
!   model1.add_constraint (x, GT_EXPR, int_3, nullptr);
  
    model0.canonicalize ();
    model1.canonicalize ();
*************** test_canonicalization_4 ()
*** 9231,9237 ****
    region_model model (&mgr);
  
    for (tree cst : csts)
!     model.get_rvalue (cst, NULL);
  
    model.canonicalize ();
  }
--- 9231,9237 ----
    region_model model (&mgr);
  
    for (tree cst : csts)
!     model.get_rvalue (cst, nullptr);
  
    model.canonicalize ();
  }
*************** test_canonicalization_4 ()
*** 9240,9246 ****
     with values VAL_A and VAL_B for EXPR that they are
     mergable.  Write the merged model to *OUT_MERGED_MODEL,
     and the merged svalue ptr to *OUT_MERGED_SVALUE.
!    If VAL_A or VAL_B are NULL_TREE, don't populate EXPR
     for that region_model.  */
  
  static void
--- 9240,9246 ----
     with values VAL_A and VAL_B for EXPR that they are
     mergable.  Write the merged model to *OUT_MERGED_MODEL,
     and the merged svalue ptr to *OUT_MERGED_SVALUE.
!    If VAL_A or VAL_B are nullptr_TREE, don't populate EXPR
     for that region_model.  */
  
  static void
*************** test_state_merging ()
*** 9431,9438 ****
      region_model model0 (&mgr);
      model0.push_frame (*DECL_STRUCT_FUNCTION (test_fndecl),
  		       nullptr, nullptr, nullptr);
!     model0.set_value (model0.get_lvalue (p, NULL),
! 		      model0.get_rvalue (addr_of_a, NULL), NULL);
  
      region_model model1 (model0);
      ASSERT_EQ (model0, model1);
--- 9431,9438 ----
      region_model model0 (&mgr);
      model0.push_frame (*DECL_STRUCT_FUNCTION (test_fndecl),
  		       nullptr, nullptr, nullptr);
!     model0.set_value (model0.get_lvalue (p, nullptr),
! 		      model0.get_rvalue (addr_of_a, nullptr), nullptr);
  
      region_model model1 (model0);
      ASSERT_EQ (model0, model1);
*************** test_state_merging ()
*** 9456,9462 ****
      const region_svalue *merged_p_ptr
        = merged_p_sval->dyn_cast_region_svalue ();
      const region *merged_p_star_reg = merged_p_ptr->get_pointee ();
!     ASSERT_EQ (merged_p_star_reg, merged.get_lvalue (y, NULL));
    }
  
    /* Pointers: non-NULL ptrs to different globals: should be unknown.  */
--- 9456,9462 ----
      const region_svalue *merged_p_ptr
        = merged_p_sval->dyn_cast_region_svalue ();
      const region *merged_p_star_reg = merged_p_ptr->get_pointee ();
!     ASSERT_EQ (merged_p_star_reg, merged.get_lvalue (y, nullptr));
    }
  
    /* Pointers: non-NULL ptrs to different globals: should be unknown.  */
*************** test_state_merging ()
*** 9571,9577 ****
      region_model model0 (&mgr);
      model0.push_frame (*DECL_STRUCT_FUNCTION (test_fndecl),
  		       nullptr, nullptr, nullptr);
!     const region *q_in_first_frame = model0.get_lvalue (q, NULL);
  
      /* Push a second frame.  */
      const region *reg_2nd_frame
--- 9571,9577 ----
      region_model model0 (&mgr);
      model0.push_frame (*DECL_STRUCT_FUNCTION (test_fndecl),
  		       nullptr, nullptr, nullptr);
!     const region *q_in_first_frame = model0.get_lvalue (q, nullptr);
  
      /* Push a second frame.  */
      const region *reg_2nd_frame
*************** test_state_merging ()
*** 9580,9587 ****
  
      /* Have a pointer in the older frame point to a local in the
         more recent frame.  */
!     const svalue *sval_ptr = model0.get_rvalue (addr_of_a, NULL);
!     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 ();
--- 9580,9587 ----
  
      /* Have a pointer in the older frame point to a local in the
         more recent frame.  */
!     const svalue *sval_ptr = model0.get_rvalue (addr_of_a, nullptr);
!     model0.set_value (q_in_first_frame, sval_ptr, nullptr);
  
      /* Verify that it's pointing at the newer frame.  */
      const region *reg_pointee = sval_ptr->maybe_get_region ();
*************** test_state_merging ()
*** 9605,9612 ****
      region_model model0 (&mgr);
      model0.push_frame (*DECL_STRUCT_FUNCTION (test_fndecl),
  		       nullptr, nullptr, nullptr);
!     model0.set_value (model0.get_lvalue (q, NULL),
! 		      model0.get_rvalue (addr_of_y, NULL), NULL);
  
      region_model model1 (model0);
      ASSERT_EQ (model0, model1);
--- 9605,9612 ----
      region_model model0 (&mgr);
      model0.push_frame (*DECL_STRUCT_FUNCTION (test_fndecl),
  		       nullptr, nullptr, nullptr);
!     model0.set_value (model0.get_lvalue (q, nullptr),
! 		      model0.get_rvalue (addr_of_y, nullptr), nullptr);
  
      region_model model1 (model0);
      ASSERT_EQ (model0, model1);
*************** test_constraint_merging ()
*** 9638,9651 ****
    /* model0: 0 <= (x == y) < n.  */
    region_model model0 (&mgr);
    model0.add_constraint (x, EQ_EXPR, y, &ctxt);
!   model0.add_constraint (x, GE_EXPR, int_0, NULL);
!   model0.add_constraint (x, LT_EXPR, n, NULL);
  
    /* model1: z != 5 && (0 <= x < n).  */
    region_model model1 (&mgr);
!   model1.add_constraint (z, NE_EXPR, int_5, NULL);
!   model1.add_constraint (x, GE_EXPR, int_0, NULL);
!   model1.add_constraint (x, LT_EXPR, n, NULL);
  
    /* They should be mergeable; the merged constraints should
       be: (0 <= x < n).  */
--- 9638,9651 ----
    /* model0: 0 <= (x == y) < n.  */
    region_model model0 (&mgr);
    model0.add_constraint (x, EQ_EXPR, y, &ctxt);
!   model0.add_constraint (x, GE_EXPR, int_0, nullptr);
!   model0.add_constraint (x, LT_EXPR, n, nullptr);
  
    /* model1: z != 5 && (0 <= x < n).  */
    region_model model1 (&mgr);
!   model1.add_constraint (z, NE_EXPR, int_5, nullptr);
!   model1.add_constraint (x, GE_EXPR, int_0, nullptr);
!   model1.add_constraint (x, LT_EXPR, n, nullptr);
  
    /* They should be mergeable; the merged constraints should
       be: (0 <= x < n).  */
*************** test_malloc_constraints ()
*** 9870,9886 ****
    const svalue *size_in_bytes
      = mgr.get_or_create_unknown_svalue (size_type_node);
    const region *reg
!     = model.get_or_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);
  
    ASSERT_CONDITION_UNKNOWN (model, p, NE_EXPR, null_ptr);
    ASSERT_CONDITION_UNKNOWN (model, p, EQ_EXPR, null_ptr);
    ASSERT_CONDITION_UNKNOWN (model, q, NE_EXPR, null_ptr);
    ASSERT_CONDITION_UNKNOWN (model, q, EQ_EXPR, null_ptr);
  
!   model.add_constraint (p, NE_EXPR, null_ptr, NULL);
  
    ASSERT_CONDITION_TRUE (model, p, NE_EXPR, null_ptr);
    ASSERT_CONDITION_FALSE (model, p, EQ_EXPR, null_ptr);
--- 9870,9886 ----
    const svalue *size_in_bytes
      = mgr.get_or_create_unknown_svalue (size_type_node);
    const region *reg
!     = model.get_or_create_region_for_heap_alloc (size_in_bytes, nullptr);
    const svalue *sval = mgr.get_ptr_svalue (ptr_type_node, reg);
!   model.set_value (model.get_lvalue (p, nullptr), sval, nullptr);
!   model.set_value (q, p, nullptr);
  
    ASSERT_CONDITION_UNKNOWN (model, p, NE_EXPR, null_ptr);
    ASSERT_CONDITION_UNKNOWN (model, p, EQ_EXPR, null_ptr);
    ASSERT_CONDITION_UNKNOWN (model, q, NE_EXPR, null_ptr);
    ASSERT_CONDITION_UNKNOWN (model, q, EQ_EXPR, null_ptr);
  
!   model.add_constraint (p, NE_EXPR, null_ptr, nullptr);
  
    ASSERT_CONDITION_TRUE (model, p, NE_EXPR, null_ptr);
    ASSERT_CONDITION_FALSE (model, p, EQ_EXPR, null_ptr);
*************** test_var ()
*** 9902,9926 ****
    region_model_manager mgr;
    region_model model (&mgr);
  
!   const region *i_reg = model.get_lvalue (i, NULL);
    ASSERT_EQ (i_reg->get_kind (), RK_DECL);
  
    /* Reading "i" should give a symbolic "initial value".  */
!   const svalue *sval_init = model.get_rvalue (i, NULL);
    ASSERT_EQ (sval_init->get_kind (), SK_INITIAL);
    ASSERT_EQ (sval_init->dyn_cast_initial_svalue ()->get_region (), i_reg);
    /* ..and doing it again should give the same "initial value".  */
!   ASSERT_EQ (model.get_rvalue (i, NULL), sval_init);
  
    /* "i = 17;".  */
!   model.set_value (i, int_17, NULL);
!   ASSERT_EQ (model.get_rvalue (i, NULL),
! 	     model.get_rvalue (int_17, NULL));
  
    /* "i = -3;".  */
!   model.set_value (i, int_m3, NULL);
!   ASSERT_EQ (model.get_rvalue (i, NULL),
! 	     model.get_rvalue (int_m3, NULL));
  
    /* Verify get_offset for "i".  */
    {
--- 9902,9926 ----
    region_model_manager mgr;
    region_model model (&mgr);
  
!   const region *i_reg = model.get_lvalue (i, nullptr);
    ASSERT_EQ (i_reg->get_kind (), RK_DECL);
  
    /* Reading "i" should give a symbolic "initial value".  */
!   const svalue *sval_init = model.get_rvalue (i, nullptr);
    ASSERT_EQ (sval_init->get_kind (), SK_INITIAL);
    ASSERT_EQ (sval_init->dyn_cast_initial_svalue ()->get_region (), i_reg);
    /* ..and doing it again should give the same "initial value".  */
!   ASSERT_EQ (model.get_rvalue (i, nullptr), sval_init);
  
    /* "i = 17;".  */
!   model.set_value (i, int_17, nullptr);
!   ASSERT_EQ (model.get_rvalue (i, nullptr),
! 	     model.get_rvalue (int_17, nullptr));
  
    /* "i = -3;".  */
!   model.set_value (i, int_m3, nullptr);
!   ASSERT_EQ (model.get_rvalue (i, nullptr),
! 	     model.get_rvalue (int_m3, nullptr));
  
    /* Verify get_offset for "i".  */
    {
*************** test_array_2 ()
*** 9959,9996 ****
    region_model_manager mgr;
    region_model model (&mgr);
    /* "arr[0] = 17;".  */
!   model.set_value (arr_0, int_17, NULL);
    /* "arr[1] = -3;".  */
!   model.set_value (arr_1, int_m3, NULL);
  
!   ASSERT_EQ (model.get_rvalue (arr_0, NULL), model.get_rvalue (int_17, NULL));
!   ASSERT_EQ (model.get_rvalue (arr_1, NULL), model.get_rvalue (int_m3, NULL));
  
    /* Overwrite a pre-existing binding: "arr[1] = 42;".  */
!   model.set_value (arr_1, int_42, NULL);
!   ASSERT_EQ (model.get_rvalue (arr_1, NULL), model.get_rvalue (int_42, NULL));
  
    /* Verify get_offset for "arr[0]".  */
    {
!     const region *arr_0_reg = model.get_lvalue (arr_0, NULL);
      region_offset offset = arr_0_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (arr, NULL));
      ASSERT_EQ (offset.get_bit_offset (), 0);
    }
  
    /* Verify get_offset for "arr[1]".  */
    {
!     const region *arr_1_reg = model.get_lvalue (arr_1, NULL);
      region_offset offset = arr_1_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (arr, NULL));
      ASSERT_EQ (offset.get_bit_offset (), INT_TYPE_SIZE);
    }
  
    /* Verify get_offset for "arr[i]".  */
    {
!     const region *arr_i_reg = model.get_lvalue (arr_i, NULL);
      region_offset offset = arr_i_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (arr, NULL));
      const svalue *offset_sval = offset.get_symbolic_byte_offset ();
      if (const svalue *cast = offset_sval->maybe_undo_cast ())
        offset_sval = cast;
--- 9959,9999 ----
    region_model_manager mgr;
    region_model model (&mgr);
    /* "arr[0] = 17;".  */
!   model.set_value (arr_0, int_17, nullptr);
    /* "arr[1] = -3;".  */
!   model.set_value (arr_1, int_m3, nullptr);
  
!   ASSERT_EQ (model.get_rvalue (arr_0, nullptr),
! 	     model.get_rvalue (int_17, nullptr));
!   ASSERT_EQ (model.get_rvalue (arr_1, nullptr),
! 	     model.get_rvalue (int_m3, nullptr));
  
    /* Overwrite a pre-existing binding: "arr[1] = 42;".  */
!   model.set_value (arr_1, int_42, nullptr);
!   ASSERT_EQ (model.get_rvalue (arr_1, nullptr),
! 	     model.get_rvalue (int_42, nullptr));
  
    /* Verify get_offset for "arr[0]".  */
    {
!     const region *arr_0_reg = model.get_lvalue (arr_0, nullptr);
      region_offset offset = arr_0_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (arr, nullptr));
      ASSERT_EQ (offset.get_bit_offset (), 0);
    }
  
    /* Verify get_offset for "arr[1]".  */
    {
!     const region *arr_1_reg = model.get_lvalue (arr_1, nullptr);
      region_offset offset = arr_1_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (arr, nullptr));
      ASSERT_EQ (offset.get_bit_offset (), INT_TYPE_SIZE);
    }
  
    /* Verify get_offset for "arr[i]".  */
    {
!     const region *arr_i_reg = model.get_lvalue (arr_i, nullptr);
      region_offset offset = arr_i_reg->get_offset (&mgr);
!     ASSERT_EQ (offset.get_base_region (), model.get_lvalue (arr, nullptr));
      const svalue *offset_sval = offset.get_symbolic_byte_offset ();
      if (const svalue *cast = offset_sval->maybe_undo_cast ())
        offset_sval = cast;
*************** test_array_2 ()
*** 9998,10011 ****
    }
  
    /* "arr[i] = i;" - this should remove the earlier bindings.  */
!   model.set_value (arr_i, i, NULL);
!   ASSERT_EQ (model.get_rvalue (arr_i, NULL), model.get_rvalue (i, NULL));
!   ASSERT_EQ (model.get_rvalue (arr_0, NULL)->get_kind (), SK_UNKNOWN);
  
    /* "arr[0] = 17;" - this should remove the arr[i] binding.  */
!   model.set_value (arr_0, int_17, NULL);
!   ASSERT_EQ (model.get_rvalue (arr_0, NULL), model.get_rvalue (int_17, NULL));
!   ASSERT_EQ (model.get_rvalue (arr_i, NULL)->get_kind (), SK_UNKNOWN);
  }
  
  /* Smoketest of dereferencing a pointer via MEM_REF.  */
--- 10001,10015 ----
    }
  
    /* "arr[i] = i;" - this should remove the earlier bindings.  */
!   model.set_value (arr_i, i, nullptr);
!   ASSERT_EQ (model.get_rvalue (arr_i, nullptr), model.get_rvalue (i, nullptr));
!   ASSERT_EQ (model.get_rvalue (arr_0, nullptr)->get_kind (), SK_UNKNOWN);
  
    /* "arr[0] = 17;" - this should remove the arr[i] binding.  */
!   model.set_value (arr_0, int_17, nullptr);
!   ASSERT_EQ (model.get_rvalue (arr_0, nullptr),
! 	     model.get_rvalue (int_17, nullptr));
!   ASSERT_EQ (model.get_rvalue (arr_i, nullptr)->get_kind (), SK_UNKNOWN);
  }
  
  /* Smoketest of dereferencing a pointer via MEM_REF.  */
*************** test_mem_ref ()
*** 10032,10043 ****
    region_model model (&mgr);
  
    /* "x = 17;".  */
!   model.set_value (x, int_17, NULL);
  
    /* "p = &x;".  */
!   model.set_value (p, addr_of_x, NULL);
  
!   const svalue *sval = model.get_rvalue (star_p, NULL);
    ASSERT_EQ (sval->maybe_get_constant (), int_17);
  }
  
--- 10036,10047 ----
    region_model model (&mgr);
  
    /* "x = 17;".  */
!   model.set_value (x, int_17, nullptr);
  
    /* "p = &x;".  */
!   model.set_value (p, addr_of_x, nullptr);
  
!   const svalue *sval = model.get_rvalue (star_p, nullptr);
    ASSERT_EQ (sval->maybe_get_constant (), int_17);
  }
  
*************** test_POINTER_PLUS_EXPR_then_MEM_REF ()
*** 10083,10090 ****
    region_model m (&mgr);
  
    tree int_42 = build_int_cst (integer_type_node, 42);
!   m.set_value (mem_ref, int_42, NULL);
!   ASSERT_EQ (m.get_rvalue (mem_ref, NULL)->maybe_get_constant (), int_42);
  }
  
  /* Verify that malloc works.  */
--- 10087,10094 ----
    region_model m (&mgr);
  
    tree int_42 = build_int_cst (integer_type_node, 42);
!   m.set_value (mem_ref, int_42, nullptr);
!   ASSERT_EQ (m.get_rvalue (mem_ref, nullptr)->maybe_get_constant (), int_42);
  }
  
  /* Verify that malloc works.  */
*************** test_alloca ()
*** 10147,10154 ****
  
    /* Verify that the pointers to the alloca region are replaced by
       poisoned values when the frame is popped.  */
!   model.pop_frame (NULL, NULL, &ctxt, nullptr);
!   ASSERT_EQ (model.get_rvalue (p, NULL)->get_kind (), SK_POISONED);
  }
  
  /* Verify that svalue::involves_p works.  */
--- 10151,10158 ----
  
    /* Verify that the pointers to the alloca region are replaced by
       poisoned values when the frame is popped.  */
!   model.pop_frame (nullptr, nullptr, &ctxt, nullptr);
!   ASSERT_EQ (model.get_rvalue (p, nullptr)->get_kind (), SK_POISONED);
  }
  
  /* Verify that svalue::involves_p works.  */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region-model.h gcc-16-20250706/gcc/analyzer/region-model.h
*** gcc-16-20250629/gcc/analyzer/region-model.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region-model.h	Sun Jul  6 22:32:10 2025
*************** class region_model
*** 385,395 ****
  			      std::unique_ptr<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 (const function &fun,
  			    const gcall *call_stmt,
--- 385,395 ----
  			      std::unique_ptr<rejected_constraint> *out);
  
    void update_for_gcall (const gcall &call_stmt,
! 			 region_model_context *ctxt,
! 			 function *callee = nullptr);
  
    void update_for_return_gcall (const gcall &call_stmt,
! 				region_model_context *ctxt);
  
    const region *push_frame (const function &fun,
  			    const gcall *call_stmt,
*************** class region_model
*** 517,525 ****
    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);
--- 517,525 ----
    bool can_merge_with_p (const region_model &other_model,
  			 const program_point &point,
  			 region_model *out_model,
! 			 const extrinsic_state *ext_state = nullptr,
! 			 const program_state *state_a = nullptr,
! 			 const program_state *state_b = nullptr) const;
  
    tree get_fndecl_for_call (const gcall &call,
  			    region_model_context *ctxt);
*************** class region_model
*** 600,606 ****
  
    const builtin_known_function *
    get_builtin_kf (const gcall &call,
! 		  region_model_context *ctxt = NULL) const;
  
    static void
    register_pop_frame_callback (const pop_frame_callback &callback)
--- 600,606 ----
  
    const builtin_known_function *
    get_builtin_kf (const gcall &call,
! 		  region_model_context *ctxt = nullptr) const;
  
    static void
    register_pop_frame_callback (const pop_frame_callback &callback)
*************** class region_model_context
*** 818,824 ****
       Return true if the diagnostic was stored, or false if it was deleted.
       Optionally provide a custom stmt_finder.  */
    virtual bool warn (std::unique_ptr<pending_diagnostic> d,
! 		     const stmt_finder *custom_finder = NULL) = 0;
  
    /* Hook for clients to add a note to the last previously stored
       pending diagnostic.  */
--- 818,824 ----
       Return true if the diagnostic was stored, or false if it was deleted.
       Optionally provide a custom stmt_finder.  */
    virtual bool warn (std::unique_ptr<pending_diagnostic> d,
! 		     const stmt_finder *custom_finder = nullptr) = 0;
  
    /* Hook for clients to add a note to the last previously stored
       pending diagnostic.  */
*************** class region_model_context
*** 912,924 ****
  		       const state_machine **out_sm,
  		       unsigned *out_sm_idx)
    {
!     return get_state_map_by_name ("malloc", out_smap, out_sm, out_sm_idx, NULL);
    }
    bool get_taint_map (sm_state_map **out_smap,
  		      const state_machine **out_sm,
  		      unsigned *out_sm_idx)
    {
!     return get_state_map_by_name ("taint", out_smap, out_sm, out_sm_idx, NULL);
    }
  
    bool possibly_tainted_p (const svalue *sval);
--- 912,926 ----
  		       const state_machine **out_sm,
  		       unsigned *out_sm_idx)
    {
!     return get_state_map_by_name ("malloc", out_smap, out_sm, out_sm_idx,
! 				  nullptr);
    }
    bool get_taint_map (sm_state_map **out_smap,
  		      const state_machine **out_sm,
  		      unsigned *out_sm_idx)
    {
!     return get_state_map_by_name ("taint", out_smap, out_sm, out_sm_idx,
! 				  nullptr);
    }
  
    bool possibly_tainted_p (const svalue *sval);
*************** public:
*** 948,954 ****
    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
--- 950,956 ----
    void on_svalue_leak (const svalue *) override {}
    void on_liveness_change (const svalue_set &,
  			   const region_model *) override {}
!   logger *get_logger () override { return nullptr; }
    void on_condition (const svalue *lhs ATTRIBUTE_UNUSED,
  		     enum tree_code op ATTRIBUTE_UNUSED,
  		     const svalue *rhs ATTRIBUTE_UNUSED) override
*************** public:
*** 971,984 ****
  
    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 (std::unique_ptr<custom_edge_info> info) override;
    void terminate_path () override;
  
!   const extrinsic_state *get_ext_state () const override { return NULL; }
  
    bool get_state_map_by_name (const char *,
  			      sm_state_map **,
--- 973,986 ----
  
    void on_escaped_function (tree) override {}
  
!   uncertainty_t *get_uncertainty () override { return nullptr; }
  
    void purge_state_involving (const svalue *sval ATTRIBUTE_UNUSED) override {}
  
    void bifurcate (std::unique_ptr<custom_edge_info> info) override;
    void terminate_path () override;
  
!   const extrinsic_state *get_ext_state () const override { return nullptr; }
  
    bool get_state_map_by_name (const char *,
  			      sm_state_map **,
*************** public:
*** 989,996 ****
      return false;
    }
  
!   const gimple *get_stmt () const override { return NULL; }
!   const exploded_graph *get_eg () const override { return NULL; }
    const program_state *get_state () const override { return nullptr; }
  
    void maybe_did_work () override {}
--- 991,998 ----
      return false;
    }
  
!   const gimple *get_stmt () const override { return nullptr; }
!   const exploded_graph *get_eg () const override { return nullptr; }
    const program_state *get_state () const override { return nullptr; }
  
    void maybe_did_work () override {}
*************** private:
*** 1349,1355 ****
  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; }
    known_function_manager *get_known_function_manager ()
--- 1351,1357 ----
  class engine
  {
  public:
!   engine (const supergraph *sg = nullptr, logger *logger = nullptr);
    const supergraph *get_supergraph () { return m_sg; }
    region_model_manager *get_model_manager () { return &m_mgr; }
    known_function_manager *get_known_function_manager ()
*************** private:
*** 1408,1414 ****
  
  #define ADD_SAT_CONSTRAINT(MODEL, LHS, OP, RHS)	\
    SELFTEST_BEGIN_STMT					\
!     bool sat = (MODEL).add_constraint (LHS, OP, RHS, NULL);	\
      ASSERT_TRUE (sat);					\
    SELFTEST_END_STMT
  
--- 1410,1416 ----
  
  #define ADD_SAT_CONSTRAINT(MODEL, LHS, OP, RHS)	\
    SELFTEST_BEGIN_STMT					\
!     bool sat = (MODEL).add_constraint (LHS, OP, RHS, nullptr);	\
      ASSERT_TRUE (sat);					\
    SELFTEST_END_STMT
  
*************** private:
*** 1417,1423 ****
  
  #define ADD_UNSAT_CONSTRAINT(MODEL, LHS, OP, RHS)	\
    SELFTEST_BEGIN_STMT					\
!     bool sat = (MODEL).add_constraint (LHS, OP, RHS, NULL);	\
      ASSERT_FALSE (sat);				\
    SELFTEST_END_STMT
  
--- 1419,1425 ----
  
  #define ADD_UNSAT_CONSTRAINT(MODEL, LHS, OP, RHS)	\
    SELFTEST_BEGIN_STMT					\
!     bool sat = (MODEL).add_constraint (LHS, OP, RHS, nullptr);	\
      ASSERT_FALSE (sat);				\
    SELFTEST_END_STMT
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region.cc gcc-16-20250706/gcc/analyzer/region.cc
*** gcc-16-20250629/gcc/analyzer/region.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region.cc	Sun Jul  6 22:32:10 2025
*************** region_offset::dump (bool simple) const
*** 124,130 ****
  }
  
  /* An svalue that matches the pattern (BASE * FACTOR) + OFFSET
!    where FACTOR or OFFSET could be the identity (represented as NULL).  */
  
  struct linear_op
  {
--- 124,130 ----
  }
  
  /* An svalue that matches the pattern (BASE * FACTOR) + OFFSET
!    where FACTOR or OFFSET could be the identity (represented as nullptr).  */
  
  struct linear_op
  {
*************** struct linear_op
*** 231,237 ****
  	    {
  	      *out = linear_op (binop_sval.get_arg0 (),
  				binop_sval.get_arg1 (),
! 				NULL);
  	      return true;
  	    }
  	  else if (binop_sval.get_op () == PLUS_EXPR)
--- 231,237 ----
  	    {
  	      *out = linear_op (binop_sval.get_arg0 (),
  				binop_sval.get_arg1 (),
! 				nullptr);
  	      return true;
  	    }
  	  else if (binop_sval.get_op () == PLUS_EXPR)
*************** struct linear_op
*** 250,256 ****
  		}
  
  	      *out = linear_op (binop_sval.get_arg0 (),
! 				NULL,
  				binop_sval.get_arg1 ());
  	      return true;
  	    }
--- 250,256 ----
  		}
  
  	      *out = linear_op (binop_sval.get_arg0 (),
! 				nullptr,
  				binop_sval.get_arg1 ());
  	      return true;
  	    }
*************** operator< (const region_offset &a, const
*** 276,283 ****
  	  const svalue &a_sval = *a.get_symbolic_byte_offset ();
  	  const svalue &b_sval = *b.get_symbolic_byte_offset ();
  
! 	  linear_op op_a (NULL, NULL, NULL);
! 	  linear_op op_b (NULL, NULL, NULL);
  	  if (linear_op::from_svalue (a_sval, &op_a)
  	      && linear_op::from_svalue (b_sval, &op_b))
  	    {
--- 276,283 ----
  	  const svalue &a_sval = *a.get_symbolic_byte_offset ();
  	  const svalue &b_sval = *b.get_symbolic_byte_offset ();
  
! 	  linear_op op_a (nullptr, nullptr, nullptr);
! 	  linear_op op_b (nullptr, nullptr, nullptr);
  	  if (linear_op::from_svalue (a_sval, &op_a)
  	      && linear_op::from_svalue (b_sval, &op_b))
  	    {
*************** operator<= (const region_offset &a, cons
*** 318,325 ****
  	  const svalue &a_sval = *a.get_symbolic_byte_offset ();
  	  const svalue &b_sval = *b.get_symbolic_byte_offset ();
  
! 	  linear_op op_a (NULL, NULL, NULL);
! 	  linear_op op_b (NULL, NULL, NULL);
  	  if (linear_op::from_svalue (a_sval, &op_a)
  	      && linear_op::from_svalue (b_sval, &op_b))
  	    {
--- 318,325 ----
  	  const svalue &a_sval = *a.get_symbolic_byte_offset ();
  	  const svalue &b_sval = *b.get_symbolic_byte_offset ();
  
! 	  linear_op op_a (nullptr, nullptr, nullptr);
! 	  linear_op op_b (nullptr, nullptr, nullptr);
  	  if (linear_op::from_svalue (a_sval, &op_a)
  	      && linear_op::from_svalue (b_sval, &op_b))
  	    {
*************** region::descendent_of_p (const region *e
*** 448,454 ****
  }
  
  /* If this region is a frame_region, or a descendent of one, return it.
!    Otherwise return NULL.  */
  
  const frame_region *
  region::maybe_get_frame_region () const
--- 448,454 ----
  }
  
  /* If this region is a frame_region, or a descendent of one, return it.
!    Otherwise return nullptr.  */
  
  const frame_region *
  region::maybe_get_frame_region () const
*************** region::maybe_get_frame_region () const
*** 460,466 ****
  	return frame_reg;
        iter = iter->get_parent_region ();
      }
!   return NULL;
  }
  
  /* Get the memory space of this region.  */
--- 460,466 ----
  	return frame_reg;
        iter = iter->get_parent_region ();
      }
!   return nullptr;
  }
  
  /* Get the memory space of this region.  */
*************** region::calc_initial_value_at_main (regi
*** 609,615 ****
  }
  
  /* If this region is a decl_region, return the decl.
!    Otherwise return NULL.  */
  
  tree
  region::maybe_get_decl () const
--- 609,615 ----
  }
  
  /* If this region is a decl_region, return the decl.
!    Otherwise return NULL_TREE.  */
  
  tree
  region::maybe_get_decl () const
*************** get_field_at_bit_offset (tree record_typ
*** 769,775 ****
  {
    gcc_assert (TREE_CODE (record_type) == RECORD_TYPE);
    if (bit_offset < 0)
!     return NULL;
  
    /* Find the first field that has an offset > BIT_OFFSET,
       then return the one preceding it.
--- 769,775 ----
  {
    gcc_assert (TREE_CODE (record_type) == RECORD_TYPE);
    if (bit_offset < 0)
!     return nullptr;
  
    /* Find the first field that has an offset > BIT_OFFSET,
       then return the one preceding it.
*************** region::calc_offset (region_model_manage
*** 879,885 ****
  {
    const region *iter_region = this;
    bit_offset_t accum_bit_offset = 0;
!   const svalue *accum_byte_sval = NULL;
  
    while (iter_region)
      {
--- 879,885 ----
  {
    const region *iter_region = this;
    bit_offset_t accum_bit_offset = 0;
!   const svalue *accum_byte_sval = nullptr;
  
    while (iter_region)
      {
*************** region::is_named_decl_p (const char *dec
*** 1155,1161 ****
  region::region (complexity c, symbol::id_t id, const region *parent, tree type)
  : symbol (c, id),
    m_parent (parent), m_type (type),
!   m_cached_offset (NULL), m_cached_init_sval_at_main (NULL)
  {
    gcc_assert (type == NULL_TREE || TYPE_P (type));
  }
--- 1155,1161 ----
  region::region (complexity c, symbol::id_t id, const region *parent, tree type)
  : symbol (c, id),
    m_parent (parent), m_type (type),
!   m_cached_offset (nullptr), m_cached_init_sval_at_main (nullptr)
  {
    gcc_assert (type == NULL_TREE || TYPE_P (type));
  }
*************** heap_region::print_dump_widget_label (pr
*** 1548,1554 ****
  /* root_region's ctor.  */
  
  root_region::root_region (symbol::id_t id)
! : region (complexity (1, 1), id, NULL, NULL_TREE)
  {
  }
  
--- 1548,1554 ----
  /* root_region's ctor.  */
  
  root_region::root_region (symbol::id_t id)
! : region (complexity (1, 1), id, nullptr, NULL_TREE)
  {
  }
  
*************** decl_region::print_dump_widget_label (pr
*** 1680,1686 ****
  int
  decl_region::get_stack_depth () const
  {
!   if (get_parent_region () == NULL)
      return 0;
    if (const frame_region *frame_reg
  	= get_parent_region ()->dyn_cast_frame_region ())
--- 1680,1686 ----
  int
  decl_region::get_stack_depth () const
  {
!   if (get_parent_region () == nullptr)
      return 0;
    if (const frame_region *frame_reg
  	= get_parent_region ()->dyn_cast_frame_region ())
*************** decl_region::get_stack_depth () const
*** 1690,1696 ****
  
  /* If the underlying decl is in the global constant pool,
     return an svalue representing the constant value.
!    Otherwise return NULL.  */
  
  const svalue *
  decl_region::maybe_get_constant_value (region_model_manager *mgr) const
--- 1690,1696 ----
  
  /* If the underlying decl is in the global constant pool,
     return an svalue representing the constant value.
!    Otherwise return nullptr.  */
  
  const svalue *
  decl_region::maybe_get_constant_value (region_model_manager *mgr) const
*************** decl_region::maybe_get_constant_value (r
*** 1700,1706 ****
        && DECL_INITIAL (m_decl)
        && TREE_CODE (DECL_INITIAL (m_decl)) == CONSTRUCTOR)
      return get_svalue_for_constructor (DECL_INITIAL (m_decl), mgr);
!   return NULL;
  }
  
  /* Implementation of decl_region::get_svalue_for_constructor
--- 1700,1706 ----
        && DECL_INITIAL (m_decl)
        && TREE_CODE (DECL_INITIAL (m_decl)) == CONSTRUCTOR)
      return get_svalue_for_constructor (DECL_INITIAL (m_decl), mgr);
!   return nullptr;
  }
  
  /* Implementation of decl_region::get_svalue_for_constructor
*************** decl_region::get_svalue_for_constructor
*** 1742,1748 ****
     "main" (either based on DECL_INITIAL, or implicit initialization to
     zero.
  
!    Return NULL if there is a problem.  */
  
  const svalue *
  decl_region::get_svalue_for_initializer (region_model_manager *mgr) const
--- 1742,1748 ----
     "main" (either based on DECL_INITIAL, or implicit initialization to
     zero.
  
!    Return nullptr if there is a problem.  */
  
  const svalue *
  decl_region::get_svalue_for_initializer (region_model_manager *mgr) const
*************** decl_region::get_svalue_for_initializer
*** 1753,1762 ****
        /* If we have an "extern" decl then there may be an initializer in
  	 another TU.  */
        if (DECL_EXTERNAL (m_decl))
! 	return NULL;
  
        if (empty_p ())
! 	return NULL;
  
        /* Implicit initialization to zero; use a compound_svalue for it.
  	 Doing so requires that we have a concrete binding for this region,
--- 1753,1762 ----
        /* If we have an "extern" decl then there may be an initializer in
  	 another TU.  */
        if (DECL_EXTERNAL (m_decl))
! 	return nullptr;
  
        if (empty_p ())
! 	return nullptr;
  
        /* Implicit initialization to zero; use a compound_svalue for it.
  	 Doing so requires that we have a concrete binding for this region,
*************** decl_region::get_svalue_for_initializer
*** 1765,1776 ****
        const binding_key *binding
  	= binding_key::make (mgr->get_store_manager (), this);
        if (binding->symbolic_p ())
! 	return NULL;
  
        /* If we don't care about tracking the content of this region, then
  	 it's unused, and the value doesn't matter.  */
        if (!tracked_p ())
! 	return NULL;
  
        binding_cluster c (this);
        c.zero_fill_region (mgr->get_store_manager (), this);
--- 1765,1776 ----
        const binding_key *binding
  	= binding_key::make (mgr->get_store_manager (), this);
        if (binding->symbolic_p ())
! 	return nullptr;
  
        /* If we don't care about tracking the content of this region, then
  	 it's unused, and the value doesn't matter.  */
        if (!tracked_p ())
! 	return nullptr;
  
        binding_cluster c (this);
        c.zero_fill_region (mgr->get_store_manager (), this);
*************** decl_region::get_svalue_for_initializer
*** 1781,1794 ****
    /* LTO can write out error_mark_node as the DECL_INITIAL for simple scalar
       values (to avoid writing out an extra section).  */
    if (init == error_mark_node)
!     return NULL;
  
    if (TREE_CODE (init) == CONSTRUCTOR)
      return get_svalue_for_constructor (init, mgr);
  
    /* Reuse the get_rvalue logic from region_model.  */
    region_model m (mgr);
!   return m.get_rvalue (path_var (init, 0), NULL);
  }
  
  /* Subroutine of symnode_requires_tracking_p; return true if REF
--- 1781,1794 ----
    /* LTO can write out error_mark_node as the DECL_INITIAL for simple scalar
       values (to avoid writing out an extra section).  */
    if (init == error_mark_node)
!     return nullptr;
  
    if (TREE_CODE (init) == CONSTRUCTOR)
      return get_svalue_for_constructor (init, mgr);
  
    /* Reuse the get_rvalue logic from region_model.  */
    region_model m (mgr);
!   return m.get_rvalue (path_var (init, 0), nullptr);
  }
  
  /* Subroutine of symnode_requires_tracking_p; return true if REF
*************** ipa_ref_requires_tracking (ipa_ref *ref)
*** 1802,1808 ****
    if (ref->use != IPA_REF_ADDR)
      return true;
  
!   if (ref->stmt == NULL)
      return true;
  
    switch (ref->stmt->code)
--- 1802,1808 ----
    if (ref->use != IPA_REF_ADDR)
      return true;
  
!   if (ref->stmt == nullptr)
      return true;
  
    switch (ref->stmt->code)
*************** ipa_ref_requires_tracking (ipa_ref *ref)
*** 1812,1823 ****
      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;
--- 1812,1823 ----
      case GIMPLE_CALL:
        {
  	cgraph_node *caller_cnode = dyn_cast <cgraph_node *> (ref->referring);
! 	if (caller_cnode == nullptr)
  	  return true;
  	cgraph_edge *edge = caller_cnode->get_edge (ref->stmt);
  	if (!edge)
  	  return true;
! 	if (edge->callee == nullptr)
  	  return true; /* e.g. call through function ptr.  */
  	if (edge->callee->definition)
  	  return true;
*************** symnode_requires_tracking_p (symtab_node
*** 1852,1858 ****
    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;
--- 1852,1858 ----
    if (symnode->externally_visible)
      return true;
    tree context_fndecl = DECL_CONTEXT (symnode->decl);
!   if (context_fndecl == nullptr)
      return true;
    if (TREE_CODE (context_fndecl) != FUNCTION_DECL)
      return true;
diff -Nrcpad gcc-16-20250629/gcc/analyzer/region.h gcc-16-20250706/gcc/analyzer/region.h
*** gcc-16-20250629/gcc/analyzer/region.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/region.h	Sun Jul  6 22:32:10 2025
*************** public:
*** 129,157 ****
  
    virtual enum region_kind get_kind () const = 0;
    virtual const frame_region *
!   dyn_cast_frame_region () const { return NULL; }
    virtual const function_region *
!   dyn_cast_function_region () const { return NULL; }
    virtual const symbolic_region *
!   dyn_cast_symbolic_region () const { return NULL; }
    virtual const decl_region *
!   dyn_cast_decl_region () const { return NULL; }
    virtual const field_region *
!   dyn_cast_field_region () const { return NULL; }
    virtual const element_region *
!   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 const var_arg_region *
!   dyn_cast_var_arg_region () const { return NULL; }
  
    virtual void accept (visitor *v) const;
  
--- 129,157 ----
  
    virtual enum region_kind get_kind () const = 0;
    virtual const frame_region *
!   dyn_cast_frame_region () const { return nullptr; }
    virtual const function_region *
!   dyn_cast_function_region () const { return nullptr; }
    virtual const symbolic_region *
!   dyn_cast_symbolic_region () const { return nullptr; }
    virtual const decl_region *
!   dyn_cast_decl_region () const { return nullptr; }
    virtual const field_region *
!   dyn_cast_field_region () const { return nullptr; }
    virtual const element_region *
!   dyn_cast_element_region () const { return nullptr; }
    virtual const offset_region *
!   dyn_cast_offset_region () const { return nullptr; }
    virtual const sized_region *
!   dyn_cast_sized_region () const { return nullptr; }
    virtual const cast_region *
!   dyn_cast_cast_region () const { return nullptr; }
    virtual const string_region *
!   dyn_cast_string_region () const { return nullptr; }
    virtual const bit_range_region *
!   dyn_cast_bit_range_region () const { return nullptr; }
    virtual const var_arg_region *
!   dyn_cast_var_arg_region () const { return nullptr; }
  
    virtual void accept (visitor *v) const;
  
*************** public:
*** 324,330 ****
      key_t (const frame_region *calling_frame, const function &fun)
      : m_calling_frame (calling_frame), m_fun (&fun)
      {
!       /* calling_frame can be NULL.  */
      }
  
      hashval_t hash () const
--- 324,330 ----
      key_t (const frame_region *calling_frame, const function &fun)
      : m_calling_frame (calling_frame), m_fun (&fun)
      {
!       /* calling_frame can be nullptr.  */
      }
  
      hashval_t hash () const
*************** public:
*** 342,353 ****
      }
  
      void mark_deleted () { m_fun = reinterpret_cast<function *> (1); }
!     void mark_empty () { m_fun = NULL; }
      bool is_deleted () const
      {
        return m_fun == reinterpret_cast<function *> (1);
      }
!     bool is_empty () const { return m_fun == NULL; }
  
      const frame_region *m_calling_frame;
      const function *m_fun;
--- 342,353 ----
      }
  
      void mark_deleted () { m_fun = reinterpret_cast<function *> (1); }
!     void mark_empty () { m_fun = nullptr; }
      bool is_deleted () const
      {
        return m_fun == reinterpret_cast<function *> (1);
      }
!     bool is_empty () const { return m_fun == nullptr; }
  
      const frame_region *m_calling_frame;
      const function *m_fun;
*************** public:
*** 685,696 ****
      }
  
      void mark_deleted () { m_sval_ptr = reinterpret_cast<const svalue *> (1); }
!     void mark_empty () { m_sval_ptr = NULL; }
      bool is_deleted () const
      {
        return m_sval_ptr == reinterpret_cast<const svalue *> (1);
      }
!     bool is_empty () const { return m_sval_ptr == NULL; }
  
      const region *m_parent;
      const svalue *m_sval_ptr;
--- 685,696 ----
      }
  
      void mark_deleted () { m_sval_ptr = reinterpret_cast<const svalue *> (1); }
!     void mark_empty () { m_sval_ptr = nullptr; }
      bool is_deleted () const
      {
        return m_sval_ptr == reinterpret_cast<const svalue *> (1);
      }
!     bool is_empty () const { return m_sval_ptr == nullptr; }
  
      const region *m_parent;
      const svalue *m_sval_ptr;
*************** public:
*** 744,750 ****
    decl_region (symbol::id_t id, const region *parent, tree decl)
    : region (complexity (parent), id, parent, TREE_TYPE (decl)), m_decl (decl),
      m_tracked (calc_tracked_p (decl)),
!     m_ctor_svalue (NULL)
    {}
  
    enum region_kind get_kind () const final override { return RK_DECL; }
--- 744,750 ----
    decl_region (symbol::id_t id, const region *parent, tree decl)
    : region (complexity (parent), id, parent, TREE_TYPE (decl)), m_decl (decl),
      m_tracked (calc_tracked_p (decl)),
!     m_ctor_svalue (nullptr)
    {}
  
    enum region_kind get_kind () const final override { return RK_DECL; }
*************** public:
*** 904,915 ****
      }
  
      void mark_deleted () { m_index = reinterpret_cast<const svalue *> (1); }
!     void mark_empty () { m_index = NULL; }
      bool is_deleted () const
      {
        return m_index == reinterpret_cast<const svalue *> (1);
      }
!     bool is_empty () const { return m_index == NULL; }
  
      const region *m_parent;
      tree m_element_type;
--- 904,915 ----
      }
  
      void mark_deleted () { m_index = reinterpret_cast<const svalue *> (1); }
!     void mark_empty () { m_index = nullptr; }
      bool is_deleted () const
      {
        return m_index == reinterpret_cast<const svalue *> (1);
      }
!     bool is_empty () const { return m_index == nullptr; }
  
      const region *m_parent;
      tree m_element_type;
*************** public:
*** 998,1009 ****
      }
  
      void mark_deleted () { m_byte_offset = reinterpret_cast<const svalue *> (1); }
!     void mark_empty () { m_byte_offset = NULL; }
      bool is_deleted () const
      {
        return m_byte_offset == reinterpret_cast<const svalue *> (1);
      }
!     bool is_empty () const { return m_byte_offset == NULL; }
  
      const region *m_parent;
      tree m_element_type;
--- 998,1009 ----
      }
  
      void mark_deleted () { m_byte_offset = reinterpret_cast<const svalue *> (1); }
!     void mark_empty () { m_byte_offset = nullptr; }
      bool is_deleted () const
      {
        return m_byte_offset == reinterpret_cast<const svalue *> (1);
      }
!     bool is_empty () const { return m_byte_offset == nullptr; }
  
      const region *m_parent;
      tree m_element_type;
*************** public:
*** 1094,1105 ****
      }
  
      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;
--- 1094,1105 ----
      }
  
      void mark_deleted () { m_byte_size_sval = reinterpret_cast<const svalue *> (1); }
!     void mark_empty () { m_byte_size_sval = nullptr; }
      bool is_deleted () const
      {
        return m_byte_size_sval == reinterpret_cast<const svalue *> (1);
      }
!     bool is_empty () const { return m_byte_size_sval == nullptr; }
  
      const region *m_parent;
      tree m_element_type;
*************** public:
*** 1342,1353 ****
      }
  
      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;
--- 1342,1353 ----
      }
  
      void mark_deleted () { m_parent = reinterpret_cast<const region *> (1); }
!     void mark_empty () { m_parent = nullptr; }
      bool is_deleted () const
      {
        return m_parent == reinterpret_cast<const region *> (1);
      }
!     bool is_empty () const { return m_parent == nullptr; }
  
      const region *m_parent;
      tree m_type;
*************** public:
*** 1432,1443 ****
      {
        m_parent = reinterpret_cast<const frame_region *> (1);
      }
!     void mark_empty () { m_parent = NULL; }
      bool is_deleted () const
      {
        return m_parent == reinterpret_cast<const frame_region *> (1);
      }
!     bool is_empty () const { return m_parent == NULL; }
  
      const frame_region *m_parent;
      unsigned m_idx;
--- 1432,1443 ----
      {
        m_parent = reinterpret_cast<const frame_region *> (1);
      }
!     void mark_empty () { m_parent = nullptr; }
      bool is_deleted () const
      {
        return m_parent == reinterpret_cast<const frame_region *> (1);
      }
!     bool is_empty () const { return m_parent == nullptr; }
  
      const frame_region *m_parent;
      unsigned m_idx;
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm-fd.cc gcc-16-20250706/gcc/analyzer/sm-fd.cc
*** gcc-16-20250629/gcc/analyzer/sm-fd.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm-fd.cc	Sun Jul  6 22:32:10 2025
*************** public:
*** 214,220 ****
    /* State for a file descriptor that we do not want to track anymore . */
    state_t m_stop;
  
!   /* Stashed constant values from the frontend.  These could be NULL.  */
    tree m_O_ACCMODE;
    tree m_O_RDONLY;
    tree m_O_WRONLY;
--- 214,220 ----
    /* State for a file descriptor that we do not want to track anymore . */
    state_t m_stop;
  
!   /* Stashed constant values from the frontend.  These could be NULL_TREE.  */
    tree m_O_ACCMODE;
    tree m_O_RDONLY;
    tree m_O_WRONLY;
*************** private:
*** 261,267 ****
  			    const svalue *fd_sval,
  			    const supernode *node,
  			    state_t old_state,
! 			    bool *complained = NULL) const;
    bool check_for_new_socket_fd (const call_details &cd,
  				bool successful,
  				sm_context &sm_ctxt,
--- 261,267 ----
  			    const svalue *fd_sval,
  			    const supernode *node,
  			    state_t old_state,
! 			    bool *complained = nullptr) const;
    bool check_for_new_socket_fd (const call_details &cd,
  				bool successful,
  				sm_context &sm_ctxt,
*************** public:
*** 401,411 ****
  	    || change.m_new_state == m_sm.m_new_datagram_socket
  	    || change.m_new_state == m_sm.m_new_stream_socket
  	    || change.m_new_state == m_sm.m_new_unknown_socket))
!       return diagnostic_event::meaning (diagnostic_event::VERB_acquire,
! 			 diagnostic_event::NOUN_resource);
      if (change.m_new_state == m_sm.m_closed)
!       return diagnostic_event::meaning (diagnostic_event::VERB_release,
! 			 diagnostic_event::NOUN_resource);
      return diagnostic_event::meaning ();
    }
  
--- 401,411 ----
  	    || change.m_new_state == m_sm.m_new_datagram_socket
  	    || change.m_new_state == m_sm.m_new_stream_socket
  	    || change.m_new_state == m_sm.m_new_unknown_socket))
!       return diagnostic_event::meaning (diagnostic_event::verb::acquire,
! 					diagnostic_event::noun::resource);
      if (change.m_new_state == m_sm.m_closed)
!       return diagnostic_event::meaning (diagnostic_event::verb::release,
! 					diagnostic_event::noun::resource);
      return diagnostic_event::meaning ();
    }
  
*************** public:
*** 426,432 ****
  
    fd_param_diagnostic (const fd_state_machine &sm, tree arg, tree callee_fndecl)
        : fd_diagnostic (sm, arg), m_callee_fndecl (callee_fndecl),
! 	m_attr_name (NULL), m_arg_idx (-1)
    {
    }
  
--- 426,432 ----
  
    fd_param_diagnostic (const fd_state_machine &sm, tree arg, tree callee_fndecl)
        : fd_diagnostic (sm, arg), m_callee_fndecl (callee_fndecl),
! 	m_attr_name (nullptr), m_arg_idx (-1)
    {
    }
  
*************** fd_state_machine::valid_to_unchecked_sta
*** 1314,1320 ****
      return m_unchecked_read_only;
    else
      gcc_unreachable ();
!   return NULL;
  }
  
  void
--- 1314,1320 ----
      return m_unchecked_read_only;
    else
      gcc_unreachable ();
!   return nullptr;
  }
  
  void
*************** fd_state_machine::mark_as_valid_fd (regi
*** 1323,1329 ****
  				    const svalue *fd_sval,
  				    const extrinsic_state &ext_state) const
  {
!   smap->set_state (model, fd_sval, m_valid_read_write, NULL, ext_state);
  }
  
  bool
--- 1323,1329 ----
  				    const svalue *fd_sval,
  				    const extrinsic_state &ext_state) const
  {
!   smap->set_state (model, fd_sval, m_valid_read_write, nullptr, ext_state);
  }
  
  bool
*************** fd_state_machine::on_bind (const call_de
*** 1985,1991 ****
  
    if (successful)
      {
!       state_t next_state = NULL;
        if (old_state == m_new_stream_socket)
  	next_state = m_bound_stream_socket;
        else if (old_state == m_new_datagram_socket)
--- 1985,1991 ----
  
    if (successful)
      {
!       state_t next_state = nullptr;
        if (old_state == m_new_stream_socket)
  	next_state = m_bound_stream_socket;
        else if (old_state == m_new_datagram_socket)
*************** fd_state_machine::on_connect (const call
*** 2241,2247 ****
    if (successful)
      {
        model->update_for_zero_return (cd, true);
!       state_t next_state = NULL;
        if (old_state == m_new_stream_socket)
  	next_state = m_connected_stream_socket;
        else if (old_state == m_new_datagram_socket)
--- 2241,2247 ----
    if (successful)
      {
        model->update_for_zero_return (cd, true);
!       state_t next_state = nullptr;
        if (old_state == m_new_stream_socket)
  	next_state = m_connected_stream_socket;
        else if (old_state == m_new_datagram_socket)
*************** region_model::mark_as_valid_fd (const sv
*** 2381,2387 ****
  {
    sm_state_map *smap;
    const fd_state_machine *fd_sm;
!   if (!get_fd_state (ctxt, &smap, &fd_sm, NULL, NULL))
      return;
    const extrinsic_state *ext_state = ctxt->get_ext_state ();
    if (!ext_state)
--- 2381,2387 ----
  {
    sm_state_map *smap;
    const fd_state_machine *fd_sm;
!   if (!get_fd_state (ctxt, &smap, &fd_sm, nullptr, nullptr))
      return;
    const extrinsic_state *ext_state = ctxt->get_ext_state ();
    if (!ext_state)
*************** public:
*** 2410,2416 ****
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, NULL, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
--- 2410,2416 ----
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, nullptr, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
*************** public:
*** 2465,2471 ****
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, NULL, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
--- 2465,2471 ----
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, nullptr, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
*************** class kf_listen : public known_function
*** 2518,2524 ****
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, NULL, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
--- 2518,2524 ----
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, nullptr, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
*************** class kf_accept : public known_function
*** 2572,2578 ****
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, NULL, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
--- 2572,2578 ----
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, nullptr, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
*************** public:
*** 2629,2635 ****
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, NULL, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
--- 2629,2635 ----
        sm_state_map *smap;
        const fd_state_machine *fd_sm;
        std::unique_ptr<sm_context> sm_ctxt;
!       if (!get_fd_state (ctxt, &smap, &fd_sm, nullptr, &sm_ctxt))
  	{
  	  cd.set_any_lhs_with_defaults ();
  	  return true;
*************** class kf_isatty : public known_function
*** 2707,2713 ****
  	  sm_state_map *smap;
  	  const fd_state_machine *fd_sm;
  	  std::unique_ptr<sm_context> sm_ctxt;
! 	  if (!get_fd_state (ctxt, &smap, &fd_sm, NULL, &sm_ctxt))
  	    return true;
  	  const extrinsic_state *ext_state = ctxt->get_ext_state ();
  	  if (!ext_state)
--- 2707,2713 ----
  	  sm_state_map *smap;
  	  const fd_state_machine *fd_sm;
  	  std::unique_ptr<sm_context> sm_ctxt;
! 	  if (!get_fd_state (ctxt, &smap, &fd_sm, nullptr, &sm_ctxt))
  	    return true;
  	  const extrinsic_state *ext_state = ctxt->get_ext_state ();
  	  if (!ext_state)
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm-file.cc gcc-16-20250706/gcc/analyzer/sm-file.cc
*** gcc-16-20250629/gcc/analyzer/sm-file.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm-file.cc	Sun Jul  6 22:32:10 2025
*************** public:
*** 161,171 ****
    {
      if (change.m_old_state == m_sm.get_start_state ()
  	&& change.m_new_state == m_sm.m_unchecked)
!       return diagnostic_event::meaning (diagnostic_event::VERB_acquire,
! 					diagnostic_event::NOUN_resource);
      if (change.m_new_state == m_sm.m_closed)
!       return diagnostic_event::meaning (diagnostic_event::VERB_release,
! 					diagnostic_event::NOUN_resource);
      return diagnostic_event::meaning ();
    }
  
--- 161,171 ----
    {
      if (change.m_old_state == m_sm.get_start_state ()
  	&& change.m_new_state == m_sm.m_unchecked)
!       return diagnostic_event::meaning (diagnostic_event::verb::acquire,
! 					diagnostic_event::noun::resource);
      if (change.m_new_state == m_sm.m_closed)
!       return diagnostic_event::meaning (diagnostic_event::verb::release,
! 					diagnostic_event::noun::resource);
      return diagnostic_event::meaning ();
    }
  
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm-malloc.cc gcc-16-20250706/gcc/analyzer/sm-malloc.cc
*** gcc-16-20250629/gcc/analyzer/sm-malloc.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm-malloc.cc	Sun Jul  6 22:32:10 2025
*************** struct assumed_non_null_state : public a
*** 141,147 ****
    assumed_non_null_state (const char *name, unsigned id,
  			  const frame_region *frame)
    : allocation_state (name, id, RS_ASSUMED_NON_NULL,
! 		      NULL, NULL),
      m_frame (frame)
    {
      gcc_assert (m_frame);
--- 141,147 ----
    assumed_non_null_state (const char *name, unsigned id,
  			  const frame_region *frame)
    : allocation_state (name, id, RS_ASSUMED_NON_NULL,
! 		      nullptr, nullptr),
      m_frame (frame)
    {
      gcc_assert (m_frame);
*************** struct deallocator_set_map_traits
*** 292,298 ****
  
    static inline hashval_t hash (const key_type &k)
    {
!     gcc_assert (k != NULL);
      gcc_assert (k != reinterpret_cast<key_type> (1));
  
      hashval_t result = 0;
--- 292,298 ----
  
    static inline hashval_t hash (const key_type &k)
    {
!     gcc_assert (k != nullptr);
      gcc_assert (k != reinterpret_cast<key_type> (1));
  
      hashval_t result = 0;
*************** struct deallocator_set_map_traits
*** 326,332 ****
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = NULL;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
--- 326,332 ----
    template <typename T>
    static inline void mark_empty (T &entry)
    {
!     entry.m_key = nullptr;
    }
    template <typename T>
    static inline bool is_deleted (const T &entry)
*************** struct deallocator_set_map_traits
*** 336,342 ****
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == NULL;
    }
    static const bool empty_zero_p = false;
  };
--- 336,342 ----
    template <typename T>
    static inline bool is_empty (const T &entry)
    {
!     return entry.m_key == nullptr;
    }
    static const bool empty_zero_p = false;
  };
*************** deallocator::deallocator (malloc_state_m
*** 535,541 ****
  			  enum wording wording)
  : m_name (name),
    m_wording (wording),
!   m_freed (sm->add_state ("freed", RS_FREED, NULL, this))
  {
  }
  
--- 535,541 ----
  			  enum wording wording)
  : m_name (name),
    m_wording (wording),
!   m_freed (sm->add_state ("freed", RS_FREED, nullptr, this))
  {
  }
  
*************** standard_deallocator::standard_deallocat
*** 579,586 ****
  deallocator_set::deallocator_set (malloc_state_machine *sm,
  				  enum wording wording)
  : m_wording (wording),
!   m_unchecked (sm->add_state ("unchecked", RS_UNCHECKED, this, NULL)),
!   m_nonnull (sm->add_state ("nonnull", RS_NONNULL, this, NULL))
  {
  }
  
--- 579,586 ----
  deallocator_set::deallocator_set (malloc_state_machine *sm,
  				  enum wording wording)
  : m_wording (wording),
!   m_unchecked (sm->add_state ("unchecked", RS_UNCHECKED, this, nullptr)),
!   m_nonnull (sm->add_state ("nonnull", RS_NONNULL, this, nullptr))
  {
  }
  
*************** custom_deallocator_set::maybe_get_single
*** 625,631 ****
  {
    if (m_deallocator_vec.length () == 1)
      return m_deallocator_vec[0];
!   return NULL;
  }
  
  void
--- 625,631 ----
  {
    if (m_deallocator_vec.length () == 1)
      return m_deallocator_vec[0];
!   return nullptr;
  }
  
  void
*************** standard_deallocator_set::dump_to_pp (pr
*** 673,686 ****
    pp_character (pp, '}');
  }
  
! /* Return STATE cast to the custom state subclass, or NULL for the start state.
     Everything should be an allocation_state apart from the start state.  */
  
  static const allocation_state *
  dyn_cast_allocation_state (state_machine::state_t state)
  {
    if (state->get_id () == 0)
!     return NULL;
    return static_cast <const allocation_state *> (state);
  }
  
--- 673,687 ----
    pp_character (pp, '}');
  }
  
! /* Return STATE cast to the custom state subclass, or nullptr for the
!    start state.
     Everything should be an allocation_state apart from the start state.  */
  
  static const allocation_state *
  dyn_cast_allocation_state (state_machine::state_t state)
  {
    if (state->get_id () == 0)
!     return nullptr;
    return static_cast <const allocation_state *> (state);
  }
  
*************** public:
*** 819,829 ****
    {
      if (change.m_old_state == m_sm.get_start_state ()
  	&& unchecked_p (change.m_new_state))
!       return diagnostic_event::meaning (diagnostic_event::VERB_acquire,
! 					diagnostic_event::NOUN_memory);
      if (freed_p (change.m_new_state))
!       return diagnostic_event::meaning (diagnostic_event::VERB_release,
! 					diagnostic_event::NOUN_memory);
      return diagnostic_event::meaning ();
    }
  
--- 820,830 ----
    {
      if (change.m_old_state == m_sm.get_start_state ()
  	&& unchecked_p (change.m_new_state))
!       return diagnostic_event::meaning (diagnostic_event::verb::acquire,
! 					diagnostic_event::noun::memory);
      if (freed_p (change.m_new_state))
!       return diagnostic_event::meaning (diagnostic_event::verb::release,
! 					diagnostic_event::noun::memory);
      return diagnostic_event::meaning ();
    }
  
*************** class deref_before_check : public malloc
*** 1595,1603 ****
  public:
    deref_before_check (const malloc_state_machine &sm, tree arg)
    : malloc_diagnostic (sm, arg),
!     m_deref_enode (NULL),
!     m_deref_expr (NULL),
!     m_check_enode (NULL)
    {
      gcc_assert (arg);
    }
--- 1596,1604 ----
  public:
    deref_before_check (const malloc_state_machine &sm, tree arg)
    : malloc_diagnostic (sm, arg),
!     m_deref_enode (nullptr),
!     m_deref_expr (nullptr),
!     m_check_enode (nullptr)
    {
      gcc_assert (arg);
    }
*************** malloc_state_machine::malloc_state_machi
*** 1822,1830 ****
    m_realloc (this, "realloc", WORDING_REALLOCATED)
  {
    gcc_assert (m_start->get_id () == 0);
!   m_null = add_state ("null", RS_FREED, NULL, NULL);
!   m_non_heap = add_state ("non-heap", RS_NON_HEAP, NULL, NULL);
!   m_stop = add_state ("stop", RS_STOP, NULL, NULL);
  }
  
  malloc_state_machine::~malloc_state_machine ()
--- 1823,1831 ----
    m_realloc (this, "realloc", WORDING_REALLOCATED)
  {
    gcc_assert (m_start->get_id () == 0);
!   m_null = add_state ("null", RS_FREED, nullptr, nullptr);
!   m_non_heap = add_state ("non-heap", RS_NON_HEAP, nullptr, nullptr);
!   m_stop = add_state ("stop", RS_STOP, nullptr, nullptr);
  }
  
  malloc_state_machine::~malloc_state_machine ()
*************** malloc_state_machine::add_state (const c
*** 1852,1858 ****
     return a custom_deallocator_set for them, consolidating them
     to ensure uniqueness of the sets.
  
!    Return NULL if it has no such attributes.  */
  
  const custom_deallocator_set *
  malloc_state_machine::
--- 1853,1859 ----
     return a custom_deallocator_set for them, consolidating them
     to ensure uniqueness of the sets.
  
!    Return nullptr if it has no such attributes.  */
  
  const custom_deallocator_set *
  malloc_state_machine::
*************** get_or_create_custom_deallocator_set (tr
*** 1861,1867 ****
    /* Early rejection of decls without attributes.  */
    tree attrs = DECL_ATTRIBUTES (allocator_fndecl);
    if (!attrs)
!     return NULL;
  
    /* Otherwise, call maybe_create_custom_deallocator_set,
       memoizing the result.  */
--- 1862,1868 ----
    /* Early rejection of decls without attributes.  */
    tree attrs = DECL_ATTRIBUTES (allocator_fndecl);
    if (!attrs)
!     return nullptr;
  
    /* Otherwise, call maybe_create_custom_deallocator_set,
       memoizing the result.  */
*************** get_or_create_custom_deallocator_set (tr
*** 1879,1885 ****
     custom_deallocator_set for them, consolidating them
     to ensure uniqueness of the sets.
  
!    Return NULL if it has no such attributes.
  
     Subroutine of get_or_create_custom_deallocator_set which
     memoizes the result.  */
--- 1880,1886 ----
     custom_deallocator_set for them, consolidating them
     to ensure uniqueness of the sets.
  
!    Return nullptr if it has no such attributes.
  
     Subroutine of get_or_create_custom_deallocator_set which
     memoizes the result.  */
*************** maybe_create_custom_deallocator_set (tre
*** 1910,1916 ****
  
    /* If there weren't any deallocators, bail.  */
    if (deallocator_vec.length () == 0)
!     return NULL;
  
    /* Consolidate, so that we reuse existing deallocator_set
       instances.  */
--- 1911,1917 ----
  
    /* If there weren't any deallocators, bail.  */
    if (deallocator_vec.length () == 0)
!     return nullptr;
  
    /* Consolidate, so that we reuse existing deallocator_set
       instances.  */
*************** malloc_state_machine::maybe_assume_non_n
*** 2015,2021 ****
  
    tree null_ptr_cst = build_int_cst (TREE_TYPE (ptr), 0);
    tristate known_non_null
!     = old_model->eval_condition (ptr, NE_EXPR, null_ptr_cst, NULL);
    if (known_non_null.is_unknown ())
      {
        /* Cast away const-ness for cache-like operations.  */
--- 2016,2022 ----
  
    tree null_ptr_cst = build_int_cst (TREE_TYPE (ptr), 0);
    tristate known_non_null
!     = old_model->eval_condition (ptr, NE_EXPR, null_ptr_cst, nullptr);
    if (known_non_null.is_unknown ())
      {
        /* Cast away const-ness for cache-like operations.  */
*************** malloc_state_machine::on_stmt (sm_contex
*** 2196,2214 ****
  		  unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  		  unsigned int idx2
  		    = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
  		  if (idx < gimple_call_num_args (stmt)
! 		      && idx2 < gimple_call_num_args (stmt))
  		    {
  		      tree arg = gimple_call_arg (stmt, idx);
  		      tree arg2 = gimple_call_arg (stmt, idx2);
  		      if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE
  			  || !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
! 			  || integer_zerop (arg2))
  			continue;
! 		      if (integer_nonzerop (arg2))
  			;
  		      else
! 			/* FIXME: Use ranger here to query arg2 range?  */
  			continue;
  		      handle_nonnull (sm_ctxt, node, stmt, fndecl, arg, idx);
  		    }
--- 2197,2223 ----
  		  unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  		  unsigned int idx2
  		    = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
+ 		  unsigned int idx3 = idx2;
+ 		  if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
+ 		    idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
  		  if (idx < gimple_call_num_args (stmt)
! 		      && idx2 < gimple_call_num_args (stmt)
! 		      && idx3 < gimple_call_num_args (stmt))
  		    {
  		      tree arg = gimple_call_arg (stmt, idx);
  		      tree arg2 = gimple_call_arg (stmt, idx2);
+ 		      tree arg3 = gimple_call_arg (stmt, idx3);
  		      if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE
  			  || !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
! 			  || !INTEGRAL_TYPE_P (TREE_TYPE (arg3))
! 			  || integer_zerop (arg2)
! 			  || integer_zerop (arg3))
  			continue;
! 		      if (integer_nonzerop (arg2) && integer_nonzerop (arg3))
  			;
  		      else
! 			/* FIXME: Use ranger here to query arg2 and arg3
! 			   ranges?  */
  			continue;
  		      handle_nonnull (sm_ctxt, node, stmt, fndecl, arg, idx);
  		    }
*************** malloc_state_machine::handle_free_of_non
*** 2400,2411 ****
  					       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,
  		std::make_unique<free_of_non_heap>
--- 2409,2420 ----
  					       const deallocator *d) const
  {
    tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!   const region *freed_reg = nullptr;
    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, nullptr);
!       freed_reg = old_model->deref_rvalue (ptr_sval, arg, nullptr);
      }
    sm_ctxt.warn (node, &call, arg,
  		std::make_unique<free_of_non_heap>
*************** malloc_state_machine::maybe_get_merged_s
*** 2650,2656 ****
      return m_start;
    if (state_a == m_start && assumed_non_null_p (state_b))
      return m_start;
!   return NULL;
  }
  
  /* Return true if calls to FNDECL are known to not affect this sm-state.  */
--- 2659,2665 ----
      return m_start;
    if (state_a == m_start && assumed_non_null_p (state_b))
      return m_start;
!   return nullptr;
  }
  
  /* Return true if calls to FNDECL are known to not affect this sm-state.  */
*************** on_realloc_with_move (region_model *mode
*** 2708,2718 ****
  {
    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);
  }
  
  /*  Hook for get_or_create_region_for_heap_alloc for the case when we want
--- 2717,2727 ----
  {
    smap->set_state (model, old_ptr_sval,
  		   m_free.m_deallocator.m_freed,
! 		   nullptr, ext_state);
  
    smap->set_state (model, new_ptr_sval,
  		   m_free.m_nonnull,
! 		   nullptr, ext_state);
  }
  
  /*  Hook for get_or_create_region_for_heap_alloc for the case when we want
*************** malloc_state_machine::transition_ptr_sva
*** 2723,2729 ****
      const svalue *new_ptr_sval,
      const extrinsic_state &ext_state) const
  {
!   smap->set_state (model, new_ptr_sval, m_free.m_nonnull, NULL, ext_state);
  }
  
  void
--- 2732,2738 ----
      const svalue *new_ptr_sval,
      const extrinsic_state &ext_state) const
  {
!   smap->set_state (model, new_ptr_sval, m_free.m_nonnull, nullptr, ext_state);
  }
  
  void
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm-pattern-test.cc gcc-16-20250706/gcc/analyzer/sm-pattern-test.cc
*** gcc-16-20250629/gcc/analyzer/sm-pattern-test.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm-pattern-test.cc	Sun Jul  6 22:32:10 2025
*************** pattern_test_state_machine::on_condition
*** 122,128 ****
  					  enum tree_code op,
  					  const svalue *rhs) const
  {
!   if (stmt == NULL)
      return;
  
    tree rhs_cst = rhs->maybe_get_constant ();
--- 122,128 ----
  					  enum tree_code op,
  					  const svalue *rhs) const
  {
!   if (stmt == nullptr)
      return;
  
    tree rhs_cst = rhs->maybe_get_constant ();
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm-sensitive.cc gcc-16-20250706/gcc/analyzer/sm-sensitive.cc
*** gcc-16-20250629/gcc/analyzer/sm-sensitive.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm-sensitive.cc	Sun Jul  6 22:32:10 2025
*************** public:
*** 111,118 ****
      const final override
    {
      if (change.m_new_state == m_sm.m_sensitive)
!       return diagnostic_event::meaning (diagnostic_event::VERB_acquire,
! 					diagnostic_event::NOUN_sensitive);
      return diagnostic_event::meaning ();
    }
    bool
--- 111,118 ----
      const final override
    {
      if (change.m_new_state == m_sm.m_sensitive)
!       return diagnostic_event::meaning (diagnostic_event::verb::acquire,
! 					diagnostic_event::noun::sensitive);
      return diagnostic_event::meaning ();
    }
    bool
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm-signal.cc gcc-16-20250706/gcc/analyzer/sm-signal.cc
*** gcc-16-20250629/gcc/analyzer/sm-signal.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm-signal.cc	Sun Jul  6 22:32:10 2025
*************** private:
*** 173,179 ****
      if (id_equal ("exit", DECL_NAME (m_unsafe_fndecl)))
        return "_exit";
  
!     return NULL;
    }
  };
  
--- 173,179 ----
      if (id_equal ("exit", DECL_NAME (m_unsafe_fndecl)))
        return "_exit";
  
!     return nullptr;
    }
  };
  
*************** public:
*** 269,275 ****
  						       state_entering_handler,
  						       src_enode);
      if (dst_enode)
!       eg->add_edge (src_enode, dst_enode, NULL, /*state_change (),*/
  		    true, /* assume does work  */
  		    std::make_unique<signal_delivery_edge_info_t> ());
    }
--- 269,275 ----
  						       state_entering_handler,
  						       src_enode);
      if (dst_enode)
!       eg->add_edge (src_enode, dst_enode, nullptr, /*state_change (),*/
  		    true, /* assume does work  */
  		    std::make_unique<signal_delivery_edge_info_t> ());
    }
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm-taint.cc gcc-16-20250706/gcc/analyzer/sm-taint.cc
*** gcc-16-20250629/gcc/analyzer/sm-taint.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm-taint.cc	Sun Jul  6 22:32:10 2025
*************** public:
*** 214,221 ****
      const final override
    {
      if (change.m_new_state == m_sm.m_tainted)
!       return diagnostic_event::meaning (diagnostic_event::VERB_acquire,
! 					diagnostic_event::NOUN_taint);
      return diagnostic_event::meaning ();
    }
  
--- 214,221 ----
      const final override
    {
      if (change.m_new_state == m_sm.m_tainted)
!       return diagnostic_event::meaning (diagnostic_event::verb::acquire,
! 					diagnostic_event::noun::taint);
      return diagnostic_event::meaning ();
    }
  
*************** public:
*** 934,940 ****
  	 macro when we're describing them.  */
        return linemap_resolve_location (line_table, loc,
  				       LRK_SPELLING_LOCATION,
! 				       NULL);
      else
        return pending_diagnostic::fixup_location (loc, primary);
    }
--- 934,940 ----
  	 macro when we're describing them.  */
        return linemap_resolve_location (line_table, loc,
  				       LRK_SPELLING_LOCATION,
! 				       nullptr);
      else
        return pending_diagnostic::fixup_location (loc, primary);
    }
*************** taint_state_machine::alt_get_inherited_s
*** 1060,1071 ****
  
  	  case BIT_AND_EXPR:
  	  case RSHIFT_EXPR:
! 	    return NULL;
  	  }
        }
        break;
      }
!   return NULL;
  }
  
  /* Return true iff FNDECL should be considered to be an assertion failure
--- 1060,1071 ----
  
  	  case BIT_AND_EXPR:
  	  case RSHIFT_EXPR:
! 	    return nullptr;
  	  }
        }
        break;
      }
!   return nullptr;
  }
  
  /* Return true iff FNDECL should be considered to be an assertion failure
*************** taint_state_machine::check_control_flow_
*** 1175,1181 ****
  						       tree expr) const
  {
    const region_model *old_model = sm_ctxt.get_old_region_model ();
!   const svalue *sval = old_model->get_rvalue (expr, NULL);
    state_t state = sm_ctxt.get_state (stmt, sval);
    enum bounds b;
    if (get_taint (state, TREE_TYPE (expr), &b))
--- 1175,1181 ----
  						       tree expr) const
  {
    const region_model *old_model = sm_ctxt.get_old_region_model ();
!   const svalue *sval = old_model->get_rvalue (expr, nullptr);
    state_t state = sm_ctxt.get_state (stmt, sval);
    enum bounds b;
    if (get_taint (state, TREE_TYPE (expr), &b))
*************** taint_state_machine::on_condition (sm_co
*** 1194,1200 ****
  				   enum tree_code op,
  				   const svalue *rhs) const
  {
!   if (stmt == NULL)
      return;
  
    if (lhs->get_kind () == SK_UNKNOWN
--- 1194,1200 ----
  				   enum tree_code op,
  				   const svalue *rhs) const
  {
!   if (stmt == nullptr)
      return;
  
    if (lhs->get_kind () == SK_UNKNOWN
*************** taint_state_machine::check_for_tainted_d
*** 1492,1498 ****
    if (!INTEGRAL_TYPE_P (TREE_TYPE (divisor_expr)))
      return;
  
!   const svalue *divisor_sval = old_model->get_rvalue (divisor_expr, NULL);
  
    state_t state = sm_ctxt.get_state (assign, divisor_sval);
    enum bounds b;
--- 1492,1498 ----
    if (!INTEGRAL_TYPE_P (TREE_TYPE (divisor_expr)))
      return;
  
!   const svalue *divisor_sval = old_model->get_rvalue (divisor_expr, nullptr);
  
    state_t state = sm_ctxt.get_state (assign, divisor_sval);
    enum bounds b;
*************** region_model::mark_as_tainted (const sva
*** 1793,1799 ****
    if (!ext_state)
      return;
  
!   smap->set_state (this, sval, taint_sm.m_tainted, NULL, *ext_state);
  }
  
  /* Return true if SVAL could possibly be attacker-controlled.  */
--- 1793,1799 ----
    if (!ext_state)
      return;
  
!   smap->set_state (this, sval, taint_sm.m_tainted, nullptr, *ext_state);
  }
  
  /* Return true if SVAL could possibly be attacker-controlled.  */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm.cc gcc-16-20250706/gcc/analyzer/sm.cc
*** gcc-16-20250629/gcc/analyzer/sm.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm.cc	Sun Jul  6 22:32:10 2025
*************** sm_context::get_old_region_model () cons
*** 183,189 ****
    if (const program_state *old_state = get_old_program_state ())
      return old_state->m_region_model;
    else
!     return NULL;
  }
  
  /* Create instances of the various state machines, each using LOGGER,
--- 183,189 ----
    if (const program_state *old_state = get_old_program_state ())
      return old_state->m_region_model;
    else
!     return nullptr;
  }
  
  /* Create instances of the various state machines, each using LOGGER,
diff -Nrcpad gcc-16-20250629/gcc/analyzer/sm.h gcc-16-20250706/gcc/analyzer/sm.h
*** gcc-16-20250629/gcc/analyzer/sm.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/sm.h	Sun Jul  6 22:32:10 2025
*************** public:
*** 76,82 ****
  			   const svalue *,
  			   const extrinsic_state &) const
    {
!     return NULL;
    }
  
    virtual bool
--- 76,82 ----
  			   const svalue *,
  			   const extrinsic_state &) const
    {
!     return nullptr;
    }
  
    virtual bool
*************** public:
*** 155,161 ****
    }
  
    /* Attempt to get a state for the merger of STATE_A and STATE_B,
!      or return NULL if merging shouldn't occur, so that differences
       between sm-state will lead to separate exploded nodes.
  
       Most state machines will only merge equal states, but can
--- 155,161 ----
    }
  
    /* Attempt to get a state for the merger of STATE_A and STATE_B,
!      or return nullptr if merging shouldn't occur, so that differences
       between sm-state will lead to separate exploded nodes.
  
       Most state machines will only merge equal states, but can
*************** public:
*** 176,182 ****
  				    state_t state_b ATTRIBUTE_UNUSED) const
    {
      /* By default, non-equal sm states should inhibit merger of enodes.  */
!     return NULL;
    }
  
    void validate (state_t s) const;
--- 176,182 ----
  				    state_t state_b ATTRIBUTE_UNUSED) const
    {
      /* By default, non-equal sm states should inhibit merger of enodes.  */
!     return nullptr;
    }
  
    void validate (state_t s) const;
*************** public:
*** 330,336 ****
  
    virtual path_context *get_path_context () const
    {
!     return NULL;
    }
  
    /* Are we handling an external function with unknown side effects?  */
--- 330,336 ----
  
    virtual path_context *get_path_context () const
    {
!     return nullptr;
    }
  
    /* Are we handling an external function with unknown side effects?  */
diff -Nrcpad gcc-16-20250629/gcc/analyzer/state-purge.cc gcc-16-20250706/gcc/analyzer/state-purge.cc
*** gcc-16-20250629/gcc/analyzer/state-purge.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/state-purge.cc	Sun Jul  6 22:32:10 2025
*************** state_purge_per_ssa_name::process_point
*** 659,665 ****
  	    if (snode->entry_p ())
  	      {
  		add_to_worklist
! 		  (function_point::before_supernode (snode, NULL),
  		   worklist, logger);
  	      }
  	  }
--- 659,665 ----
  	    if (snode->entry_p ())
  	      {
  		add_to_worklist
! 		  (function_point::before_supernode (snode, nullptr),
  		   worklist, logger);
  	      }
  	  }
*************** fully_overwrites_p (const gimple *stmt,
*** 841,848 ****
  	 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;
--- 841,848 ----
  	 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, nullptr);
!       const region *decl_reg = model.get_lvalue (decl, nullptr);
        if (same_binding_p (lhs_reg, decl_reg,
  			  model.get_manager ()->get_store_manager ()))
  	return true;
*************** state_purge_annotator::add_node_annotati
*** 1074,1080 ****
  					     const supernode &n,
  					     bool within_table) const
  {
!   if (m_map == NULL)
      return false;
  
    if (within_table)
--- 1074,1080 ----
  					     const supernode &n,
  					     bool within_table) const
  {
!   if (m_map == nullptr)
      return false;
  
    if (within_table)
*************** state_purge_annotator::add_node_annotati
*** 1091,1097 ****
        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));
--- 1091,1097 ----
        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, nullptr));
     else
       for (auto inedge : n.m_preds)
         points.safe_push (function_point::before_supernode (&n, inedge));
*************** state_purge_annotator::add_stmt_annotati
*** 1153,1159 ****
    if (within_row)
      return;
  
!   if (m_map == NULL)
      return;
  
    if (stmt->code == GIMPLE_PHI)
--- 1153,1159 ----
    if (within_row)
      return;
  
!   if (m_map == nullptr)
      return;
  
    if (stmt->code == GIMPLE_PHI)
diff -Nrcpad gcc-16-20250629/gcc/analyzer/state-purge.h gcc-16-20250706/gcc/analyzer/state-purge.h
*** gcc-16-20250629/gcc/analyzer/state-purge.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/state-purge.h	Sun Jul  6 22:32:10 2025
*************** public:
*** 109,115 ****
  	= const_cast <decl_map_t&> (m_decl_map).get (decl))
        return *slot;
      else
!       return NULL;
    }
  
    state_purge_per_decl &
--- 109,115 ----
  	= const_cast <decl_map_t&> (m_decl_map).get (decl))
        return *slot;
      else
!       return nullptr;
    }
  
    state_purge_per_decl &
diff -Nrcpad gcc-16-20250629/gcc/analyzer/store.cc gcc-16-20250706/gcc/analyzer/store.cc
*** gcc-16-20250629/gcc/analyzer/store.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/store.cc	Sun Jul  6 22:32:10 2025
*************** binding_map::operator== (const binding_m
*** 658,664 ****
        const svalue *sval = (*iter).second;
        const svalue **other_slot
  	= const_cast <map_t &> (other.m_map).get (key);
!       if (other_slot == NULL)
  	return false;
        if (sval != *other_slot)
  	return false;
--- 658,664 ----
        const svalue *sval = (*iter).second;
        const svalue **other_slot
  	= const_cast <map_t &> (other.m_map).get (key);
!       if (other_slot == nullptr)
  	return false;
        if (sval != *other_slot)
  	return false;
*************** get_svalue_for_ctor_val (tree val, regio
*** 922,928 ****
  {
    /* Reuse the get_rvalue logic from region_model.  */
    region_model m (mgr);
!   return m.get_rvalue (path_var (val, 0), NULL);
  }
  
  /* Bind values from CONSTRUCTOR to this map, relative to
--- 922,928 ----
  {
    /* Reuse the get_rvalue logic from region_model.  */
    region_model m (mgr);
!   return m.get_rvalue (path_var (val, 0), nullptr);
  }
  
  /* Bind values from CONSTRUCTOR to this map, relative to
*************** binding_cluster::bind_compound_sval (sto
*** 1564,1570 ****
  void
  binding_cluster::clobber_region (store_manager *mgr, const region *reg)
  {
!   remove_overlapping_bindings (mgr, reg, NULL, NULL);
  }
  
  /* Remove any bindings for REG within this cluster.  */
--- 1564,1570 ----
  void
  binding_cluster::clobber_region (store_manager *mgr, const region *reg)
  {
!   remove_overlapping_bindings (mgr, reg, nullptr, nullptr);
  }
  
  /* Remove any bindings for REG within this cluster.  */
*************** binding_cluster::get_binding (store_mana
*** 1684,1690 ****
  			      const region *reg) const
  {
    if (reg->empty_p ())
!     return NULL;
    const binding_key *reg_binding = binding_key::make (mgr, reg);
    const svalue *sval = m_map.get (reg_binding);
    if (sval)
--- 1684,1690 ----
  			      const region *reg) const
  {
    if (reg->empty_p ())
!     return nullptr;
    const binding_key *reg_binding = binding_key::make (mgr, reg);
    const svalue *sval = m_map.get (reg_binding);
    if (sval)
*************** binding_cluster::get_binding_recursive (
*** 1752,1758 ****
  	  return rmm_mgr->get_or_create_sub_svalue (reg->get_type (),
  						    parent_sval, reg);
  	}
!   return NULL;
  }
  
  /* Get any value bound for REG within this cluster.  */
--- 1752,1758 ----
  	  return rmm_mgr->get_or_create_sub_svalue (reg->get_type (),
  						    parent_sval, reg);
  	}
!   return nullptr;
  }
  
  /* Get any value bound for REG within this cluster.  */
*************** binding_cluster::get_any_binding (store_
*** 1800,1806 ****
      return compound_sval;
  
    /* Otherwise, the initial value, or uninitialized.  */
!   return NULL;
  }
  
  /* Attempt to get a compound_svalue for the bindings within the cluster
--- 1800,1806 ----
      return compound_sval;
  
    /* Otherwise, the initial value, or uninitialized.  */
!   return nullptr;
  }
  
  /* Attempt to get a compound_svalue for the bindings within the cluster
*************** binding_cluster::get_any_binding (store_
*** 1812,1818 ****
  
     For example, REG could be one element within an array of structs.
  
!    Return the resulting compound_svalue, or NULL if there's a problem.  */
  
  const svalue *
  binding_cluster::maybe_get_compound_binding (store_manager *mgr,
--- 1812,1818 ----
  
     For example, REG could be one element within an array of structs.
  
!    Return the resulting compound_svalue, or nullptr if there's a problem.  */
  
  const svalue *
  binding_cluster::maybe_get_compound_binding (store_manager *mgr,
*************** binding_cluster::maybe_get_compound_bind
*** 1821,1833 ****
    region_offset cluster_offset
      = m_base_region->get_offset (mgr->get_svalue_manager ());
    if (cluster_offset.symbolic_p ())
!     return NULL;
    region_offset reg_offset = reg->get_offset (mgr->get_svalue_manager ());
    if (reg_offset.symbolic_p ())
!     return NULL;
  
    if (reg->empty_p ())
!     return NULL;
  
    region_model_manager *sval_mgr = mgr->get_svalue_manager ();
  
--- 1821,1833 ----
    region_offset cluster_offset
      = m_base_region->get_offset (mgr->get_svalue_manager ());
    if (cluster_offset.symbolic_p ())
!     return nullptr;
    region_offset reg_offset = reg->get_offset (mgr->get_svalue_manager ());
    if (reg_offset.symbolic_p ())
!     return nullptr;
  
    if (reg->empty_p ())
!     return nullptr;
  
    region_model_manager *sval_mgr = mgr->get_svalue_manager ();
  
*************** binding_cluster::maybe_get_compound_bind
*** 1880,1886 ****
  
  	  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);
--- 1880,1886 ----
  
  	  bit_size_t reg_bit_size;
  	  if (!reg->get_bit_size (&reg_bit_size))
! 	    return nullptr;
  
  	  bit_range reg_range (reg_offset.get_bit_offset (),
  			       reg_bit_size);
*************** binding_cluster::maybe_get_compound_bind
*** 1909,1915 ****
  		 it overlaps with offset_concrete_key.  */
  	      default_map.remove_overlapping_bindings (mgr,
  						       offset_concrete_key,
! 						       NULL, NULL, false);
  	    }
  	  else if (bound_range.contains_p (reg_range, &subrange))
  	    {
--- 1909,1915 ----
  		 it overlaps with offset_concrete_key.  */
  	      default_map.remove_overlapping_bindings (mgr,
  						       offset_concrete_key,
! 						       nullptr, nullptr, false);
  	    }
  	  else if (bound_range.contains_p (reg_range, &subrange))
  	    {
*************** binding_cluster::maybe_get_compound_bind
*** 1943,1958 ****
  		 it overlaps with overlap_concrete_key.  */
  	      default_map.remove_overlapping_bindings (mgr,
  						       overlap_concrete_key,
! 						       NULL, 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)
--- 1943,1958 ----
  		 it overlaps with overlap_concrete_key.  */
  	      default_map.remove_overlapping_bindings (mgr,
  						       overlap_concrete_key,
! 						       nullptr, nullptr, false);
  	    }
  	}
        else
  	/* Can't handle symbolic bindings.  */
! 	return nullptr;
      }
  
    if (result_map.elements () == 0)
!     return nullptr;
  
    /* Merge any bindings from default_map into result_map.  */
    for (auto iter : default_map)
*************** binding_cluster::can_merge_p (const bind
*** 2030,2052 ****
  
    /* At least one of CLUSTER_A and CLUSTER_B are non-NULL, but either
       could be NULL.  Handle these cases.  */
!   if (cluster_a == NULL)
      {
!       gcc_assert (cluster_b != NULL);
        gcc_assert (cluster_b->m_base_region == out_cluster->m_base_region);
        out_cluster->make_unknown_relative_to (cluster_b, out_store, mgr);
        return true;
      }
!   if (cluster_b == NULL)
      {
!       gcc_assert (cluster_a != NULL);
        gcc_assert (cluster_a->m_base_region == out_cluster->m_base_region);
        out_cluster->make_unknown_relative_to (cluster_a, out_store, mgr);
        return true;
      }
  
    /* The "both inputs are non-NULL" case.  */
!   gcc_assert (cluster_a != NULL && cluster_b != NULL);
    gcc_assert (cluster_a->m_base_region == out_cluster->m_base_region);
    gcc_assert (cluster_b->m_base_region == out_cluster->m_base_region);
  
--- 2030,2052 ----
  
    /* At least one of CLUSTER_A and CLUSTER_B are non-NULL, but either
       could be NULL.  Handle these cases.  */
!   if (cluster_a == nullptr)
      {
!       gcc_assert (cluster_b != nullptr);
        gcc_assert (cluster_b->m_base_region == out_cluster->m_base_region);
        out_cluster->make_unknown_relative_to (cluster_b, out_store, mgr);
        return true;
      }
!   if (cluster_b == nullptr)
      {
!       gcc_assert (cluster_a != nullptr);
        gcc_assert (cluster_a->m_base_region == out_cluster->m_base_region);
        out_cluster->make_unknown_relative_to (cluster_a, out_store, mgr);
        return true;
      }
  
    /* The "both inputs are non-NULL" case.  */
!   gcc_assert (cluster_a != nullptr && cluster_b != nullptr);
    gcc_assert (cluster_a->m_base_region == out_cluster->m_base_region);
    gcc_assert (cluster_b->m_base_region == out_cluster->m_base_region);
  
*************** binding_cluster::get_representative_path
*** 2319,2325 ****
      }
  }
  
! /* Get any svalue bound to KEY, or NULL.  */
  
  const svalue *
  binding_cluster::get_any_value (const binding_key *key) const
--- 2319,2325 ----
      }
  }
  
! /* Get any svalue bound to KEY, or nullptr.  */
  
  const svalue *
  binding_cluster::get_any_value (const binding_key *key) const
*************** binding_cluster::get_any_value (const bi
*** 2334,2349 ****
  const svalue *
  binding_cluster::maybe_get_simple_value (store_manager *mgr) const
  {
!   /* Fail gracefully if MGR is NULL to make it easier to dump store
       instances in the debugger.  */
!   if (mgr == NULL)
!     return NULL;
  
    if (m_map.elements () != 1)
!     return NULL;
  
    if (m_base_region->empty_p ())
!     return NULL;
  
    const binding_key *key = binding_key::make (mgr, m_base_region);
    return get_any_value (key);
--- 2334,2349 ----
  const svalue *
  binding_cluster::maybe_get_simple_value (store_manager *mgr) const
  {
!   /* Fail gracefully if MGR is nullptr to make it easier to dump store
       instances in the debugger.  */
!   if (mgr == nullptr)
!     return nullptr;
  
    if (m_map.elements () != 1)
!     return nullptr;
  
    if (m_base_region->empty_p ())
!     return nullptr;
  
    const binding_key *key = binding_key::make (mgr, m_base_region);
    return get_any_value (key);
*************** store::operator== (const store &other) c
*** 2467,2473 ****
        binding_cluster *c = (*iter).second;
        binding_cluster **other_slot
  	= const_cast <cluster_map_t &> (other.m_cluster_map).get (reg);
!       if (other_slot == NULL)
  	return false;
        if (*c != **other_slot)
  	return false;
--- 2467,2473 ----
        binding_cluster *c = (*iter).second;
        binding_cluster **other_slot
  	= const_cast <cluster_map_t &> (other.m_cluster_map).get (reg);
!       if (other_slot == nullptr)
  	return false;
        if (*c != **other_slot)
  	return false;
*************** get_sorted_parent_regions (auto_vec<cons
*** 2520,2526 ****
  
  /* Dump a representation of this store to PP, using SIMPLE to control how
     svalues and regions are printed.
!    MGR is used for simplifying dumps if non-NULL, but can also be NULL
     (to make it easier to use from the debugger).  */
  
  void
--- 2520,2526 ----
  
  /* Dump a representation of this store to PP, using SIMPLE to control how
     svalues and regions are printed.
!    MGR is used for simplifying dumps if non-NULL, but can also be nullptr
     (to make it easier to use from the debugger).  */
  
  void
*************** DEBUG_FUNCTION void
*** 2629,2635 ****
  store::dump (bool simple) const
  {
    tree_dump_pretty_printer pp (stderr);
!   dump_to_pp (&pp, simple, true, NULL);
    pp_newline (&pp);
  }
  
--- 2629,2635 ----
  store::dump (bool simple) const
  {
    tree_dump_pretty_printer pp (stderr);
!   dump_to_pp (&pp, simple, true, nullptr);
    pp_newline (&pp);
  }
  
*************** store::make_dump_widget (const text_art:
*** 2761,2767 ****
    return store_widget;
  }
  
! /* Get any svalue bound to REG, or NULL.  */
  
  const svalue *
  store::get_any_binding (store_manager *mgr, const region *reg) const
--- 2761,2767 ----
    return store_widget;
  }
  
! /* Get any svalue bound to REG, or nullptr.  */
  
  const svalue *
  store::get_any_binding (store_manager *mgr, const region *reg) const
*************** store::get_any_binding (store_manager *m
*** 2770,2776 ****
    binding_cluster **cluster_slot
      = const_cast <cluster_map_t &> (m_cluster_map).get (base_reg);
    if (!cluster_slot)
!     return NULL;
    return (*cluster_slot)->get_any_binding (mgr, reg);
  }
  
--- 2770,2776 ----
    binding_cluster **cluster_slot
      = const_cast <cluster_map_t &> (m_cluster_map).get (base_reg);
    if (!cluster_slot)
!     return nullptr;
    return (*cluster_slot)->get_any_binding (mgr, reg);
  }
  
*************** store::set_value (store_manager *mgr, co
*** 2796,2802 ****
      {
        /* Reject attempting to bind values into a symbolic region
  	 for an unknown ptr; merely invalidate values below.  */
!       lhs_cluster = NULL;
  
        /* The LHS of the write is *UNKNOWN.  If the RHS is a pointer,
  	 then treat the region being pointed to as having escaped.  */
--- 2796,2802 ----
      {
        /* Reject attempting to bind values into a symbolic region
  	 for an unknown ptr; merely invalidate values below.  */
!       lhs_cluster = nullptr;
  
        /* The LHS of the write is *UNKNOWN.  If the RHS is a pointer,
  	 then treat the region being pointed to as having escaped.  */
*************** store::set_value (store_manager *mgr, co
*** 2818,2824 ****
      {
        /* 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
--- 2818,2824 ----
      {
        /* Reject attempting to bind values into an untracked region;
  	 merely invalidate values below.  */
!       lhs_cluster = nullptr;
      }
  
    /* Bindings to a cluster can affect other clusters if a symbolic
*************** store::set_value (store_manager *mgr, co
*** 2838,2844 ****
        const region *iter_base_reg = (*iter).first;
        binding_cluster *iter_cluster = (*iter).second;
        if (iter_base_reg != lhs_base_reg
! 	  && (lhs_cluster == NULL
  	      || lhs_cluster->symbolic_p ()
  	      || iter_cluster->symbolic_p ()))
  	{
--- 2838,2844 ----
        const region *iter_base_reg = (*iter).first;
        binding_cluster *iter_cluster = (*iter).second;
        if (iter_base_reg != lhs_base_reg
! 	  && (lhs_cluster == nullptr
  	      || lhs_cluster->symbolic_p ()
  	      || iter_cluster->symbolic_p ()))
  	{
*************** store::purge_state_involving (const sval
*** 3097,3103 ****
      purge_cluster (iter);
  }
  
! /* Get the cluster for BASE_REG, or NULL (const version).  */
  
  const binding_cluster *
  store::get_cluster (const region *base_reg) const
--- 3097,3103 ----
      purge_cluster (iter);
  }
  
! /* Get the cluster for BASE_REG, or nullptr (const version).  */
  
  const binding_cluster *
  store::get_cluster (const region *base_reg) const
*************** store::get_cluster (const region *base_r
*** 3108,3117 ****
  	= const_cast <cluster_map_t &> (m_cluster_map).get (base_reg))
      return *slot;
    else
!     return NULL;
  }
  
! /* Get the cluster for BASE_REG, or NULL (non-const version).  */
  
  binding_cluster *
  store::get_cluster (const region *base_reg)
--- 3108,3117 ----
  	= const_cast <cluster_map_t &> (m_cluster_map).get (base_reg))
      return *slot;
    else
!     return nullptr;
  }
  
! /* Get the cluster for BASE_REG, or nullptr (non-const version).  */
  
  binding_cluster *
  store::get_cluster (const region *base_reg)
*************** store::get_cluster (const region *base_r
*** 3121,3127 ****
    if (binding_cluster **slot = m_cluster_map.get (base_reg))
      return *slot;
    else
!     return NULL;
  }
  
  /* Get the cluster for BASE_REG, creating it if doesn't already exist.  */
--- 3121,3127 ----
    if (binding_cluster **slot = m_cluster_map.get (base_reg))
      return *slot;
    else
!     return nullptr;
  }
  
  /* Get the cluster for BASE_REG, creating it if doesn't already exist.  */
*************** store::remove_overlapping_bindings (stor
*** 3321,3329 ****
  	  delete cluster;
  	  return;
  	}
!       /* Pass NULL for the maybe_live_values here, as we don't want to
  	 record the old svalues as being maybe-bound.  */
!       cluster->remove_overlapping_bindings (mgr, reg, uncertainty, NULL);
      }
  }
  
--- 3321,3329 ----
  	  delete cluster;
  	  return;
  	}
!       /* Pass nullptr for the maybe_live_values here, as we don't want to
  	 record the old svalues as being maybe-bound.  */
!       cluster->remove_overlapping_bindings (mgr, reg, uncertainty, nullptr);
      }
  }
  
*************** store::replay_call_summary_cluster (call
*** 3566,3572 ****
  	  caller_sval =
  	    reg_mgr->get_or_create_unknown_svalue (summary_sval->get_type ());
  	set_value (mgr, caller_dest_reg,
! 		   caller_sval, NULL /* uncertainty_t * */);
        }
        break;
  
--- 3566,3572 ----
  	  caller_sval =
  	    reg_mgr->get_or_create_unknown_svalue (summary_sval->get_type ());
  	set_value (mgr, caller_dest_reg,
! 		   caller_sval, nullptr /* uncertainty_t * */);
        }
        break;
  
*************** store::replay_call_summary_cluster (call
*** 3591,3597 ****
  	  caller_sval =
  	    reg_mgr->get_or_create_unknown_svalue (summary_sval->get_type ());
  	set_value (mgr, caller_dest_reg,
! 		   caller_sval, NULL /* uncertainty_t * */);
        }
        break;
  
--- 3591,3597 ----
  	  caller_sval =
  	    reg_mgr->get_or_create_unknown_svalue (summary_sval->get_type ());
  	set_value (mgr, caller_dest_reg,
! 		   caller_sval, nullptr /* uncertainty_t * */);
        }
        break;
  
*************** assert_disjoint (const location &loc,
*** 3786,3792 ****
  static void
  test_binding_key_overlap ()
  {
!   store_manager mgr (NULL);
  
    /* Various 8-bit bindings.  */
    const concrete_binding *cb_0_7 = mgr.get_concrete_binding (0, 8);
--- 3786,3792 ----
  static void
  test_binding_key_overlap ()
  {
!   store_manager mgr (nullptr);
  
    /* Various 8-bit bindings.  */
    const concrete_binding *cb_0_7 = mgr.get_concrete_binding (0, 8);
diff -Nrcpad gcc-16-20250629/gcc/analyzer/store.h gcc-16-20250706/gcc/analyzer/store.h
*** gcc-16-20250629/gcc/analyzer/store.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/store.h	Sun Jul  6 22:32:10 2025
*************** public:
*** 222,230 ****
    static int cmp (const binding_key *, const binding_key *);
  
    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.  */
--- 222,230 ----
    static int cmp (const binding_key *, const binding_key *);
  
    virtual const concrete_binding *dyn_cast_concrete_binding () const
!   { return nullptr; }
    virtual const symbolic_binding *dyn_cast_symbolic_binding () const
!   { return nullptr; }
  };
  
  /* A concrete range of bits.  */
*************** public:
*** 492,501 ****
    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;
--- 492,501 ----
    static int cmp_ptr_ptr (const void *, const void *);
  
    void mark_deleted () { m_region = reinterpret_cast<const region *> (1); }
!   void mark_empty () { m_region = nullptr; }
    bool is_deleted () const
    { return m_region == reinterpret_cast<const region *> (1); }
!   bool is_empty () const { return m_region == nullptr; }
  
  private:
    const region *m_region;
*************** public:
*** 538,544 ****
      if (slot)
        return *slot;
      else
!       return NULL;
    }
    bool put (const binding_key *k, const svalue *v)
    {
--- 538,544 ----
      if (slot)
        return *slot;
      else
!       return nullptr;
    }
    bool put (const binding_key *k, const svalue *v)
    {
diff -Nrcpad gcc-16-20250629/gcc/analyzer/supergraph.cc gcc-16-20250706/gcc/analyzer/supergraph.cc
*** gcc-16-20250629/gcc/analyzer/supergraph.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/supergraph.cc	Sun Jul  6 22:32:10 2025
*************** get_ultimate_function_for_cgraph_edge (c
*** 48,54 ****
  {
    cgraph_node *ultimate_node = edge->callee->ultimate_alias_target ();
    if (!ultimate_node)
!     return NULL;
    return ultimate_node->get_fun ();
  }
  
--- 48,54 ----
  {
    cgraph_node *ultimate_node = edge->callee->ultimate_alias_target ();
    if (!ultimate_node)
!     return nullptr;
    return ultimate_node->get_fun ();
  }
  
*************** supergraph_call_edge (function *fun, con
*** 59,73 ****
  {
    const gcall *call = dyn_cast<const gcall *> (stmt);
    if (!call)
!     return NULL;
    cgraph_edge *edge
      = cgraph_node::get (fun->decl)->get_edge (const_cast <gimple *> (stmt));
    if (!edge)
!     return NULL;
    if (!edge->callee)
!     return NULL; /* e.g. for a function pointer.  */
    if (!get_ultimate_function_for_cgraph_edge (edge))
!     return NULL;
    return edge;
  }
  
--- 59,73 ----
  {
    const gcall *call = dyn_cast<const gcall *> (stmt);
    if (!call)
!     return nullptr;
    cgraph_edge *edge
      = cgraph_node::get (fun->decl)->get_edge (const_cast <gimple *> (stmt));
    if (!edge)
!     return nullptr;
    if (!edge->callee)
!     return nullptr; /* e.g. for a function pointer.  */
    if (!get_ultimate_function_for_cgraph_edge (edge))
!     return nullptr;
    return edge;
  }
  
*************** supergraph::supergraph (logger *logger)
*** 146,152 ****
        FOR_ALL_BB_FN (bb, fun)
  	{
  	  /* The initial supernode for the BB gets the phi nodes (if any).  */
! 	  supernode *node_for_stmts = add_node (fun, bb, NULL, phi_nodes (bb));
  	  m_bb_to_initial_node.put (bb, node_for_stmts);
  	  for (gphi_iterator gpi = gsi_start_phis (bb); !gsi_end_p (gpi);
  	       gsi_next (&gpi))
--- 146,153 ----
        FOR_ALL_BB_FN (bb, fun)
  	{
  	  /* The initial supernode for the BB gets the phi nodes (if any).  */
! 	  supernode *node_for_stmts
! 	    = add_node (fun, bb, nullptr, phi_nodes (bb));
  	  m_bb_to_initial_node.put (bb, node_for_stmts);
  	  for (gphi_iterator gpi = gsi_start_phis (bb); !gsi_end_p (gpi);
  	       gsi_next (&gpi))
*************** supergraph::supergraph (logger *logger)
*** 171,182 ****
  	      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
--- 172,183 ----
  	      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),
! 					     nullptr);
! 		  m_cgraph_edge_to_caller_next_node.put (edge, node_for_stmts);
! 		}
  	       else
  	        {
  	          // maybe call is via a function pointer
*************** supergraph::supergraph (logger *logger)
*** 187,199 ****
  	            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);
  	            }
  	          }
--- 188,200 ----
  	            if (!edge || !edge->callee)
  	            {
  	              supernode *old_node_for_stmts = node_for_stmts;
! 	              node_for_stmts = add_node (fun, bb, call, nullptr);
  
  	              superedge *sedge
  	                = new callgraph_superedge (old_node_for_stmts,
  	                  			   node_for_stmts,
  	                  			   SUPEREDGE_INTRAPROCEDURAL_CALL,
! 	                  			   nullptr);
  	              add_edge (sedge);
  	            }
  	          }
*************** superedge::to_json () const
*** 984,1008 ****
  }
  
  /* If this is an intraprocedural superedge, return the associated
!    CFG edge.  Otherwise, return NULL.  */
  
  ::edge
  superedge::get_any_cfg_edge () const
  {
    if (const cfg_superedge *sub = dyn_cast_cfg_superedge ())
      return sub->get_cfg_edge ();
!   return NULL;
  }
  
  /* If this is an interprocedural superedge, return the associated
!    cgraph_edge *.  Otherwise, return NULL.  */
  
  cgraph_edge *
  superedge::get_any_callgraph_edge () const
  {
    if (const callgraph_superedge *sub = dyn_cast_callgraph_superedge ())
      return sub->m_cedge;
!   return NULL;
  }
  
  /* Build a description of this superedge (e.g. "true" for the true
--- 985,1009 ----
  }
  
  /* If this is an intraprocedural superedge, return the associated
!    CFG edge.  Otherwise, return nullptr.  */
  
  ::edge
  superedge::get_any_cfg_edge () const
  {
    if (const cfg_superedge *sub = dyn_cast_cfg_superedge ())
      return sub->get_cfg_edge ();
!   return nullptr;
  }
  
  /* If this is an interprocedural superedge, return the associated
!    cgraph_edge *.  Otherwise, return nullptr.  */
  
  cgraph_edge *
  superedge::get_any_callgraph_edge () const
  {
    if (const callgraph_superedge *sub = dyn_cast_callgraph_superedge ())
      return sub->m_cedge;
!   return nullptr;
  }
  
  /* Build a description of this superedge (e.g. "true" for the true
diff -Nrcpad gcc-16-20250629/gcc/analyzer/supergraph.h gcc-16-20250706/gcc/analyzer/supergraph.h
*** gcc-16-20250629/gcc/analyzer/supergraph.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/supergraph.h	Sun Jul  6 22:32:10 2025
*************** class supernode : public dnode<supergrap
*** 274,280 ****
  
      i.ptr = gimple_seq_first (*pseq);
      i.seq = pseq;
!     i.bb = i.ptr ? gimple_bb (i.ptr) : NULL;
  
      return i;
    }
--- 274,280 ----
  
      i.ptr = gimple_seq_first (*pseq);
      i.seq = pseq;
!     i.bb = i.ptr ? gimple_bb (i.ptr) : nullptr;
  
      return i;
    }
*************** class supernode : public dnode<supergrap
*** 287,301 ****
    gimple *get_last_stmt () const
    {
      if (m_stmts.length () == 0)
!       return NULL;
      return m_stmts[m_stmts.length () - 1];
    }
  
    gcall *get_final_call () const
    {
      gimple *stmt = get_last_stmt ();
!     if (stmt == NULL)
!       return NULL;
      return dyn_cast<gcall *> (stmt);
    }
  
--- 287,301 ----
    gimple *get_last_stmt () const
    {
      if (m_stmts.length () == 0)
!       return nullptr;
      return m_stmts[m_stmts.length () - 1];
    }
  
    gcall *get_final_call () const
    {
      gimple *stmt = get_last_stmt ();
!     if (stmt == nullptr)
!       return nullptr;
      return dyn_cast<gcall *> (stmt);
    }
  
*************** class superedge : public dedge<supergrap
*** 331,348 ****
  
    enum edge_kind get_kind () const { return m_kind; }
  
!   virtual cfg_superedge *dyn_cast_cfg_superedge () { return NULL; }
!   virtual const cfg_superedge *dyn_cast_cfg_superedge () const { return NULL; }
!   virtual const switch_cfg_superedge *dyn_cast_switch_cfg_superedge () const { return NULL; }
    virtual const eh_dispatch_cfg_superedge *dyn_cast_eh_dispatch_cfg_superedge () const { return nullptr; }
    virtual const eh_dispatch_try_cfg_superedge *dyn_cast_eh_dispatch_try_cfg_superedge () const { return nullptr; }
    virtual const eh_dispatch_allowed_cfg_superedge *dyn_cast_eh_dispatch_allowed_cfg_superedge () const { return nullptr; }
!   virtual callgraph_superedge *dyn_cast_callgraph_superedge () { return NULL; }
!   virtual const callgraph_superedge *dyn_cast_callgraph_superedge () const { return NULL; }
!   virtual call_superedge *dyn_cast_call_superedge () { return NULL; }
!   virtual const call_superedge *dyn_cast_call_superedge () const { return NULL; }
!   virtual return_superedge *dyn_cast_return_superedge () { return NULL; }
!   virtual const return_superedge *dyn_cast_return_superedge () const { return NULL; }
  
    ::edge get_any_cfg_edge () const;
    cgraph_edge *get_any_callgraph_edge () const;
--- 331,348 ----
  
    enum edge_kind get_kind () const { return m_kind; }
  
!   virtual cfg_superedge *dyn_cast_cfg_superedge () { return nullptr; }
!   virtual const cfg_superedge *dyn_cast_cfg_superedge () const { return nullptr; }
!   virtual const switch_cfg_superedge *dyn_cast_switch_cfg_superedge () const { return nullptr; }
    virtual const eh_dispatch_cfg_superedge *dyn_cast_eh_dispatch_cfg_superedge () const { return nullptr; }
    virtual const eh_dispatch_try_cfg_superedge *dyn_cast_eh_dispatch_try_cfg_superedge () const { return nullptr; }
    virtual const eh_dispatch_allowed_cfg_superedge *dyn_cast_eh_dispatch_allowed_cfg_superedge () const { return nullptr; }
!   virtual callgraph_superedge *dyn_cast_callgraph_superedge () { return nullptr; }
!   virtual const callgraph_superedge *dyn_cast_callgraph_superedge () const { return nullptr; }
!   virtual call_superedge *dyn_cast_call_superedge () { return nullptr; }
!   virtual const call_superedge *dyn_cast_call_superedge () const { return nullptr; }
!   virtual return_superedge *dyn_cast_return_superedge () { return nullptr; }
!   virtual const return_superedge *dyn_cast_return_superedge () const { return nullptr; }
  
    ::edge get_any_cfg_edge () const;
    cgraph_edge *get_any_callgraph_edge () const;
*************** template <>
*** 594,600 ****
  inline bool
  is_a_helper <const switch_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_switch_cfg_superedge () != NULL;
  }
  
  namespace ana {
--- 594,600 ----
  inline bool
  is_a_helper <const switch_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_switch_cfg_superedge () != nullptr;
  }
  
  namespace ana {
*************** template <>
*** 653,659 ****
  inline bool
  is_a_helper <const eh_dispatch_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_eh_dispatch_cfg_superedge () != NULL;
  }
  
  namespace ana {
--- 653,659 ----
  inline bool
  is_a_helper <const eh_dispatch_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_eh_dispatch_cfg_superedge () != nullptr;
  }
  
  namespace ana {
*************** template <>
*** 703,709 ****
  inline bool
  is_a_helper <const eh_dispatch_try_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_eh_dispatch_try_cfg_superedge () != NULL;
  }
  
  namespace ana {
--- 703,709 ----
  inline bool
  is_a_helper <const eh_dispatch_try_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_eh_dispatch_try_cfg_superedge () != nullptr;
  }
  
  namespace ana {
*************** template <>
*** 753,759 ****
  inline bool
  is_a_helper <const eh_dispatch_allowed_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_eh_dispatch_allowed_cfg_superedge () != NULL;
  }
  
  namespace ana {
--- 753,759 ----
  inline bool
  is_a_helper <const eh_dispatch_allowed_cfg_superedge *>::test (const superedge *sedge)
  {
!   return sedge->dyn_cast_eh_dispatch_allowed_cfg_superedge () != nullptr;
  }
  
  namespace ana {
diff -Nrcpad gcc-16-20250629/gcc/analyzer/svalue.cc gcc-16-20250706/gcc/analyzer/svalue.cc
*** gcc-16-20250629/gcc/analyzer/svalue.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/svalue.cc	Sun Jul  6 22:32:10 2025
*************** svalue::maybe_get_constant () const
*** 247,253 ****
  }
  
  /* If this svalue is a region_svalue, return the region it points to.
!    Otherwise return NULL.  */
  
  const region *
  svalue::maybe_get_region () const
--- 247,253 ----
  }
  
  /* If this svalue is a region_svalue, return the region it points to.
!    Otherwise return nullptr.  */
  
  const region *
  svalue::maybe_get_region () const
*************** svalue::maybe_get_region () const
*** 255,266 ****
    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.  */
  
  const svalue *
  svalue::maybe_undo_cast () const
--- 255,266 ----
    if (const region_svalue *region_sval = dyn_cast_region_svalue ())
      return region_sval->get_pointee ();
    else
!     return nullptr;
  }
  
  /* If this svalue is a cast (i.e a unaryop NOP_EXPR or VIEW_CONVERT_EXPR),
     return the underlying svalue.
!    Otherwise return nullptr.  */
  
  const svalue *
  svalue::maybe_undo_cast () const
*************** svalue::maybe_undo_cast () const
*** 271,277 ****
        if (op == NOP_EXPR || op == VIEW_CONVERT_EXPR)
  	return unaryop_sval->get_arg ();
      }
!   return NULL;
  }
  
  /* If this svalue is an unmergeable decorator around another svalue, return
--- 271,277 ----
        if (op == NOP_EXPR || op == VIEW_CONVERT_EXPR)
  	return unaryop_sval->get_arg ();
      }
!   return nullptr;
  }
  
  /* If this svalue is an unmergeable decorator around another svalue, return
*************** svalue::unwrap_any_unmergeable () const
*** 287,293 ****
  }
  
  /* Attempt to merge THIS with OTHER, returning the merged svalue.
!    Return NULL if not mergeable.  */
  
  const svalue *
  svalue::can_merge_p (const svalue *other,
--- 287,293 ----
  }
  
  /* Attempt to merge THIS with OTHER, returning the merged svalue.
!    Return nullptr if not mergeable.  */
  
  const svalue *
  svalue::can_merge_p (const svalue *other,
*************** svalue::can_merge_p (const svalue *other
*** 295,316 ****
  		     model_merger *merger) const
  {
    if (!(get_type () && other->get_type ()))
!     return NULL;
  
    if (!types_compatible_p (get_type (), other->get_type ()))
!     return NULL;
  
    /* Reject attempts to merge unmergeable svalues.  */
    if ((get_kind () == SK_UNMERGEABLE)
        || (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 ()))
--- 295,316 ----
  		     model_merger *merger) const
  {
    if (!(get_type () && other->get_type ()))
!     return nullptr;
  
    if (!types_compatible_p (get_type (), other->get_type ()))
!     return nullptr;
  
    /* Reject attempts to merge unmergeable svalues.  */
    if ((get_kind () == SK_UNMERGEABLE)
        || (other->get_kind () == SK_UNMERGEABLE))
!     return nullptr;
  
    /* 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 nullptr;
  
    /* Reject attempts to merge NULL pointers with not-NULL-pointers.  */
    if (POINTER_TYPE_P (get_type ()))
*************** svalue::can_merge_p (const svalue *other
*** 324,339 ****
  	if (zerop (cst1))
  	  null1 = true;
        if (null0 != null1)
! 	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).  */
--- 324,339 ----
  	if (zerop (cst1))
  	  null1 = true;
        if (null0 != null1)
! 	return nullptr;
      }
  
    /* 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 nullptr;
    if (!merger->mergeable_svalue_p (other))
!     return nullptr;
  
    /* Widening.  */
    /* Merge: (new_cst, existing_cst) -> widen (existing, new).  */
*************** svalue::can_merge_p (const svalue *other
*** 410,416 ****
  
  /* Determine if this svalue is either within LIVE_SVALUES, or is implicitly
     live with respect to LIVE_SVALUES and MODEL.
!    LIVE_SVALUES can be NULL, in which case determine if this svalue is
     intrinsically live.  */
  
  bool
--- 410,416 ----
  
  /* Determine if this svalue is either within LIVE_SVALUES, or is implicitly
     live with respect to LIVE_SVALUES and MODEL.
!    LIVE_SVALUES can be nullptr, in which case determine if this svalue is
     intrinsically live.  */
  
  bool
*************** svalue::maybe_fold_bits_within (tree,
*** 806,812 ****
  				region_model_manager *) const
  {
    /* By default, don't fold.  */
!   return NULL;
  }
  
  /* Base implementation of svalue::all_zeroes_p.
--- 806,812 ----
  				region_model_manager *) const
  {
    /* By default, don't fold.  */
!   return nullptr;
  }
  
  /* Base implementation of svalue::all_zeroes_p.
*************** svalue::all_zeroes_p () const
*** 819,825 ****
  }
  
  /* 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
--- 819,825 ----
  }
  
  /* If this svalue is a pointer, attempt to determine the base region it points
!    to.  Return nullptr on any problems.  */
  
  const region *
  svalue::maybe_get_deref_base_region () const
*************** svalue::maybe_get_deref_base_region () c
*** 830,836 ****
        switch (iter->get_kind ())
  	{
  	default:
! 	  return NULL;
  
  	case SK_REGION:
  	  {
--- 830,836 ----
        switch (iter->get_kind ())
  	{
  	default:
! 	  return nullptr;
  
  	case SK_REGION:
  	  {
*************** svalue::maybe_get_deref_base_region () c
*** 852,860 ****
  		continue;
  
  	      default:
! 		return NULL;
  	      }
! 	    return NULL;
  	  }
  	}
      }
--- 852,860 ----
  		continue;
  
  	      default:
! 		return nullptr;
  	      }
! 	    return nullptr;
  	  }
  	}
      }
*************** constant_svalue::maybe_fold_bits_within
*** 1147,1153 ****
      }
  
    /* Otherwise, don't fold.  */
!   return NULL;
  }
  
  /* Implementation of svalue::all_zeroes_p for constant_svalue.  */
--- 1147,1153 ----
      }
  
    /* Otherwise, don't fold.  */
!   return nullptr;
  }
  
  /* Implementation of svalue::all_zeroes_p for constant_svalue.  */
*************** initial_svalue::implicitly_live_p (const
*** 1374,1380 ****
       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;
      }
--- 1374,1380 ----
       a popped stack frame.  */
    if (model->region_exists_p (m_reg))
      {
!       const svalue *reg_sval = model->get_store_value (m_reg, nullptr);
        if (reg_sval == this)
  	return true;
      }
*************** initial_svalue::implicitly_live_p (const
*** 1384,1390 ****
       live in the external caller.  */
    if (initial_value_of_param_p ())
      if (const frame_region *frame_reg = m_reg->maybe_get_frame_region ())
!       if (frame_reg->get_calling_frame () == NULL)
  	return true;
  
    return false;
--- 1384,1390 ----
       live in the external caller.  */
    if (initial_value_of_param_p ())
      if (const frame_region *frame_reg = m_reg->maybe_get_frame_region ())
!       if (frame_reg->get_calling_frame () == nullptr)
  	return true;
  
    return false;
*************** unaryop_svalue::maybe_fold_bits_within (
*** 1508,1514 ****
        break;
      }
    /* Otherwise, don't fold.  */
!   return NULL;
  }
  
  /* class binop_svalue : public svalue.  */
--- 1508,1514 ----
        break;
      }
    /* Otherwise, don't fold.  */
!   return nullptr;
  }
  
  /* class binop_svalue : public svalue.  */
*************** repeated_svalue::maybe_fold_bits_within
*** 1837,1843 ****
  	}
      }
  
!   return NULL;
  }
  
  /* class bits_within_svalue : public svalue.  */
--- 1837,1843 ----
  	}
      }
  
!   return nullptr;
  }
  
  /* class bits_within_svalue : public svalue.  */
*************** compound_svalue::maybe_fold_bits_within
*** 2393,2399 ****
  	}
        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);
  }
--- 2393,2399 ----
  	}
        else
  	/* If we have any symbolic keys we can't get it as bits.  */
! 	return nullptr;
      }
    return mgr->get_or_create_compound_svalue (type, result_map);
  }
diff -Nrcpad gcc-16-20250629/gcc/analyzer/svalue.h gcc-16-20250706/gcc/analyzer/svalue.h
*** gcc-16-20250629/gcc/analyzer/svalue.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/svalue.h	Sun Jul  6 22:32:10 2025
*************** public:
*** 112,148 ****
  		    const char *prefix = nullptr) const;
  
    virtual const region_svalue *
!   dyn_cast_region_svalue () const { return NULL; }
    virtual const constant_svalue *
!   dyn_cast_constant_svalue () const { return NULL; }
    virtual const poisoned_svalue *
!   dyn_cast_poisoned_svalue () const { return NULL; }
    virtual const setjmp_svalue *
!   dyn_cast_setjmp_svalue () const { return NULL; }
    virtual const initial_svalue *
!   dyn_cast_initial_svalue () const { return NULL; }
    virtual const unaryop_svalue *
!   dyn_cast_unaryop_svalue () const { return NULL; }
    virtual const binop_svalue *
!   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 *
!   dyn_cast_widening_svalue () const { return NULL; }
    virtual const compound_svalue *
!   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;
--- 112,148 ----
  		    const char *prefix = nullptr) const;
  
    virtual const region_svalue *
!   dyn_cast_region_svalue () const { return nullptr; }
    virtual const constant_svalue *
!   dyn_cast_constant_svalue () const { return nullptr; }
    virtual const poisoned_svalue *
!   dyn_cast_poisoned_svalue () const { return nullptr; }
    virtual const setjmp_svalue *
!   dyn_cast_setjmp_svalue () const { return nullptr; }
    virtual const initial_svalue *
!   dyn_cast_initial_svalue () const { return nullptr; }
    virtual const unaryop_svalue *
!   dyn_cast_unaryop_svalue () const { return nullptr; }
    virtual const binop_svalue *
!   dyn_cast_binop_svalue () const { return nullptr; }
    virtual const sub_svalue *
!   dyn_cast_sub_svalue () const { return nullptr; }
    virtual const repeated_svalue *
!   dyn_cast_repeated_svalue () const { return nullptr; }
    virtual const bits_within_svalue *
!   dyn_cast_bits_within_svalue () const { return nullptr; }
    virtual const unmergeable_svalue *
!   dyn_cast_unmergeable_svalue () const { return nullptr; }
    virtual const widening_svalue *
!   dyn_cast_widening_svalue () const { return nullptr; }
    virtual const compound_svalue *
!   dyn_cast_compound_svalue () const { return nullptr; }
    virtual const conjured_svalue *
!   dyn_cast_conjured_svalue () const { return nullptr; }
    virtual const asm_output_svalue *
!   dyn_cast_asm_output_svalue () const { return nullptr; }
    virtual const const_fn_result_svalue *
!   dyn_cast_const_fn_result_svalue () const { return nullptr; }
  
    tree maybe_get_constant () const;
    const region *maybe_get_region () const;
*************** public:
*** 246,252 ****
    : svalue (complexity (reg), id, type),
      m_reg (reg)
    {
!     gcc_assert (m_reg != NULL);
    }
  
    enum svalue_kind get_kind () const final override { return SK_REGION; }
--- 246,252 ----
    : svalue (complexity (reg), id, type),
      m_reg (reg)
    {
!     gcc_assert (m_reg != nullptr);
    }
  
    enum svalue_kind get_kind () const final override { return SK_REGION; }
*************** public:
*** 650,656 ****
    initial_svalue (symbol::id_t id, tree type, const region *reg)
    : svalue (complexity (reg), id, type), m_reg (reg)
    {
!     gcc_assert (m_reg != NULL);
    }
  
    enum svalue_kind get_kind () const final override { return SK_INITIAL; }
--- 650,656 ----
    initial_svalue (symbol::id_t id, tree type, const region *reg)
    : svalue (complexity (reg), id, type), m_reg (reg)
    {
!     gcc_assert (m_reg != nullptr);
    }
  
    enum svalue_kind get_kind () const final override { return SK_INITIAL; }
*************** public:
*** 1547,1561 ****
  	      && m_idx == other.m_idx);
      }
  
!     /* Use m_stmt to mark empty/deleted, as m_type can be NULL for
         legitimate instances.  */
      void mark_deleted () { m_stmt = reinterpret_cast<const gimple *> (1); }
!     void mark_empty () { m_stmt = NULL; }
      bool is_deleted () const
      {
        return m_stmt == reinterpret_cast<const gimple *> (1);
      }
!     bool is_empty () const { return m_stmt == NULL; }
  
      tree m_type;
      const gimple *m_stmt;
--- 1547,1561 ----
  	      && m_idx == other.m_idx);
      }
  
!     /* Use m_stmt to mark empty/deleted, as m_type can be NULL_TREE for
         legitimate instances.  */
      void mark_deleted () { m_stmt = reinterpret_cast<const gimple *> (1); }
!     void mark_empty () { m_stmt = nullptr; }
      bool is_deleted () const
      {
        return m_stmt == reinterpret_cast<const gimple *> (1);
      }
!     bool is_empty () const { return m_stmt == nullptr; }
  
      tree m_type;
      const gimple *m_stmt;
*************** public:
*** 1568,1574 ****
    : svalue (complexity (id_reg), id, type),
      m_stmt (stmt), m_id_reg (id_reg), m_idx (idx)
    {
!     gcc_assert (m_stmt != NULL);
    }
  
    enum svalue_kind get_kind () const final override { return SK_CONJURED; }
--- 1568,1574 ----
    : svalue (complexity (id_reg), id, type),
      m_stmt (stmt), m_id_reg (id_reg), m_idx (idx)
    {
!     gcc_assert (m_stmt != nullptr);
    }
  
    enum svalue_kind get_kind () const final override { return SK_CONJURED; }
*************** public:
*** 1668,1682 ****
        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;
--- 1668,1682 ----
        return true;
      }
  
!     /* Use m_asm_string to mark empty/deleted, as m_type can be NULL_TREE for
         legitimate instances.  */
      void mark_deleted () { m_asm_string = reinterpret_cast<const char *> (1); }
!     void mark_empty () { m_asm_string = nullptr; }
      bool is_deleted () const
      {
        return m_asm_string == reinterpret_cast<const char *> (1);
      }
!     bool is_empty () const { return m_asm_string == nullptr; }
  
      tree m_type;
      const char *m_asm_string;
*************** public:
*** 1813,1824 ****
  
      /* 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;
--- 1813,1824 ----
  
      /* Use m_fndecl to mark empty/deleted.  */
      void mark_deleted () { m_fndecl = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_fndecl = NULL_TREE; }
      bool is_deleted () const
      {
        return m_fndecl == reinterpret_cast<tree> (1);
      }
!     bool is_empty () const { return m_fndecl == NULL_TREE; }
  
      tree m_type;
      tree m_fndecl;
diff -Nrcpad gcc-16-20250629/gcc/analyzer/varargs.cc gcc-16-20250706/gcc/analyzer/varargs.cc
*** gcc-16-20250629/gcc/analyzer/varargs.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/analyzer/varargs.cc	Sun Jul  6 22:32:10 2025
*************** get_stateful_arg (sm_context &sm_ctxt, c
*** 298,312 ****
        if (const program_state *new_state = sm_ctxt.get_new_program_state ())
  	{
  	  const region_model *new_model = new_state->m_region_model;
! 	  const svalue *ptr_sval = new_model->get_rvalue (ap, NULL);
! 	  const region *reg = new_model->deref_rvalue (ptr_sval, ap, NULL);
! 	  const svalue *impl_sval = new_model->get_store_value (reg, NULL);
  	  if (const svalue *cast = impl_sval->maybe_undo_cast ())
  	    impl_sval = cast;
  	  return impl_sval;
  	}
      }
!   return NULL;
  }
  
  /* Abstract class for diagnostics relating to va_list_state_machine.  */
--- 298,312 ----
        if (const program_state *new_state = sm_ctxt.get_new_program_state ())
  	{
  	  const region_model *new_model = new_state->m_region_model;
! 	  const svalue *ptr_sval = new_model->get_rvalue (ap, nullptr);
! 	  const region *reg = new_model->deref_rvalue (ptr_sval, ap, nullptr);
! 	  const svalue *impl_sval = new_model->get_store_value (reg, nullptr);
  	  if (const svalue *cast = impl_sval->maybe_undo_cast ())
  	    impl_sval = cast;
  	  return impl_sval;
  	}
      }
!   return nullptr;
  }
  
  /* Abstract class for diagnostics relating to va_list_state_machine.  */
*************** public:
*** 339,349 ****
      const final override
    {
      if (change.m_new_state == m_sm.m_started)
!       return diagnostic_event::meaning (diagnostic_event::VERB_acquire,
! 					diagnostic_event::NOUN_resource);
      if (change.m_new_state == m_sm.m_ended)
!       return diagnostic_event::meaning (diagnostic_event::VERB_release,
! 					diagnostic_event::NOUN_resource);
      return diagnostic_event::meaning ();
    }
  
--- 339,349 ----
      const final override
    {
      if (change.m_new_state == m_sm.m_started)
!       return diagnostic_event::meaning (diagnostic_event::verb::acquire,
! 					diagnostic_event::noun::resource);
      if (change.m_new_state == m_sm.m_ended)
!       return diagnostic_event::meaning (diagnostic_event::verb::release,
! 					diagnostic_event::noun::resource);
      return diagnostic_event::meaning ();
    }
  
*************** protected:
*** 370,376 ****
  		  return "va_end";
  		}
  	  }
!     return NULL;
    }
  
    const va_list_state_machine &m_sm;
--- 370,376 ----
  		  return "va_end";
  		}
  	  }
!     return nullptr;
    }
  
    const va_list_state_machine &m_sm;
*************** public:
*** 467,473 ****
  		const svalue *ap_sval, tree ap_tree,
  		const program_state *final_state)
    : va_list_sm_diagnostic (sm, ap_sval, ap_tree),
!     m_start_event_fnname (NULL),
      m_final_state ()
    {
      if (final_state)
--- 467,473 ----
  		const svalue *ap_sval, tree ap_tree,
  		const program_state *final_state)
    : va_list_sm_diagnostic (sm, ap_sval, ap_tree),
!     m_start_event_fnname (nullptr),
      m_final_state ()
    {
      if (final_state)
*************** va_list_state_machine::check_for_ended_v
*** 577,583 ****
  
  /* Get the svalue with associated va_list_state_machine state for
     ARG_IDX of CALL to va_copy, if SM_CTXT supports this,
!    or NULL otherwise.  */
  
  static const svalue *
  get_stateful_va_copy_arg (sm_context &sm_ctxt,
--- 577,583 ----
  
  /* Get the svalue with associated va_list_state_machine state for
     ARG_IDX of CALL to va_copy, if SM_CTXT supports this,
!    or nullptr otherwise.  */
  
  static const svalue *
  get_stateful_va_copy_arg (sm_context &sm_ctxt,
*************** get_stateful_va_copy_arg (sm_context &sm
*** 587,596 ****
    if (const program_state *new_state = sm_ctxt.get_new_program_state ())
      {
        const region_model *new_model = new_state->m_region_model;
!       const svalue *arg = get_va_copy_arg (new_model, NULL, call, arg_idx);
        return arg;
      }
!   return NULL;
  }
  
  /* Update state machine for a "va_copy" call.  */
--- 587,596 ----
    if (const program_state *new_state = sm_ctxt.get_new_program_state ())
      {
        const region_model *new_model = new_state->m_region_model;
!       const svalue *arg = get_va_copy_arg (new_model, nullptr, call, arg_idx);
        return arg;
      }
!   return nullptr;
  }
  
  /* Update state machine for a "va_copy" call.  */
*************** kf_va_copy::impl_call_pre (const call_de
*** 740,746 ****
    in_va_list
      = model->check_for_poison (in_va_list,
  			       get_va_list_diag_arg (cd.get_arg_tree (1)),
! 			       NULL,
  			       cd.get_ctxt ());
  
    const region *out_dst_reg
--- 740,746 ----
    in_va_list
      = model->check_for_poison (in_va_list,
  			       get_va_list_diag_arg (cd.get_arg_tree (1)),
! 			       nullptr,
  			       cd.get_ctxt ());
  
    const region *out_dst_reg
*************** va_arg_compatible_types_p (tree lhs_type
*** 1020,1033 ****
  }
  
  /* If AP_SVAL is a pointer to a var_arg_region, return that var_arg_region.
!    Otherwise return NULL.  */
  
  static const var_arg_region *
  maybe_get_var_arg_region (const svalue *ap_sval)
  {
    if (const region *reg = ap_sval->maybe_get_region ())
      return reg->dyn_cast_var_arg_region ();
!   return NULL;
  }
  
  /* Handler for "__builtin_va_arg".  */
--- 1020,1033 ----
  }
  
  /* If AP_SVAL is a pointer to a var_arg_region, return that var_arg_region.
!    Otherwise return nullptr.  */
  
  static const var_arg_region *
  maybe_get_var_arg_region (const svalue *ap_sval)
  {
    if (const region *reg = ap_sval->maybe_get_region ())
      return reg->dyn_cast_var_arg_region ();
!   return nullptr;
  }
  
  /* Handler for "__builtin_va_arg".  */
diff -Nrcpad gcc-16-20250629/gcc/auto-profile.cc gcc-16-20250706/gcc/auto-profile.cc
*** gcc-16-20250629/gcc/auto-profile.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/auto-profile.cc	Sun Jul  6 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 123,128 ****
--- 123,140 ----
  #define DEFAULT_AUTO_PROFILE_FILE "fbdata.afdo"
  #define AUTO_PROFILE_VERSION 2
  
+ /* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
+    considered cols.  */
+ gcov_type afdo_hot_bb_threshod = -1;
+ 
+ /* Return ture if COUNT is possiby hot.  */
+ bool
+ maybe_hot_afdo_count_p (profile_count count)
+ {
+   gcc_checking_assert (count.ipa ().initialized_p ());
+   return count.ipa ().to_gcov_type () >= afdo_hot_bb_threshod;
+ }
+ 
  namespace autofdo
  {
  
*************** private:
*** 144,153 ****
  };
  
  /* 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;
--- 156,172 ----
  };
  
  /* Represent a source location: (function_decl, lineno).  */
! struct decl_lineno
! {
!   tree decl;
!   /* Relative locations stored in auto-profile.  */
!   unsigned int afdo_loc;
!   /* Actual location afdo_loc was computed from used to output diagnostics.  */
!   location_t location;
! };
  
  /* Represent an inline stack. vector[0] is the leaf node.  */
! typedef auto_vec<decl_lineno, 20> inline_stack;
  
  /* String array that stores function names.  */
  typedef auto_vec<char *> string_vector;
*************** public:
*** 273,281 ****
    }
  
    /* 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;
  
    /* Merge profile of clones.  Note that cloning hasnt been performed when
       we annotate the CFG (at this stage).  */
--- 292,302 ----
    }
  
    /* Traverse callsites of the current function_instance to find one at the
!      location of LINENO and callee name represented in DECL.
!      LOCATION should match LINENO and is used to output diagnostics.  */
    function_instance *get_function_instance_by_decl (unsigned lineno,
! 						    tree decl,
! 						    location_t location) const;
  
    /* Merge profile of clones.  Note that cloning hasnt been performed when
       we annotate the CFG (at this stage).  */
*************** public:
*** 286,291 ****
--- 307,316 ----
       remove them while possibly merging them to offline variants.  */
    void offline_if_not_realized (vec <function_instance *> &new_functions);
  
+   /* Match function instance with gimple body.  */
+   bool match (cgraph_node *node, vec <function_instance *> &new_functions,
+ 	      name_index_map &to_symbol_name);
+ 
    /* Offline all inlined functions with name in SEEN.
       If new toplevel functions are created, add them to NEW_FUNCTIONS.  */
    void offline_if_in_set (name_index_set &seen,
*************** public:
*** 386,391 ****
--- 411,449 ----
      return in_worklist_;
    }
  
+   /* Return corresponding cgraph node.  */
+   cgraph_node *get_cgraph_node ();
+ 
+   void
+   set_location (location_t l)
+   {
+     gcc_checking_assert (location_ == UNKNOWN_LOCATION);
+     location_= l;
+   }
+ 
+   location_t
+   get_location ()
+   {
+     return location_;
+   }
+ 
+   void
+   set_call_location (location_t l)
+   {
+     gcc_checking_assert (call_location_ == UNKNOWN_LOCATION);
+     call_location_= l;
+   }
+ 
+   location_t
+   get_call_location ()
+   {
+     return call_location_;
+   }
+ 
+   /* Lookup count and warn about duplicates.  */
+   count_info *lookup_count (location_t loc, inline_stack &stack,
+ 			    cgraph_node *node);
+ 
  private:
    /* Callsite, represented as (decl_lineno, callee_function_name_index).  */
    typedef std::pair<unsigned, unsigned> callsite;
*************** private:
*** 394,402 ****
    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),
        removed_icall_target_ (false), realized_ (false),
!       in_worklist_ (false), inlined_to_ (NULL)
    {
    }
  
--- 452,461 ----
    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),
        removed_icall_target_ (false), realized_ (false),
!       in_worklist_ (false), inlined_to_ (NULL),
!       location_ (UNKNOWN_LOCATION), call_location_ (UNKNOWN_LOCATION)
    {
    }
  
*************** private:
*** 433,438 ****
--- 492,500 ----
       is a toplevel one.  */
    function_instance *inlined_to_;
  
+   /* Location of function and its call (in case it is inlined).  */
+   location_t location_, call_location_;
+ 
    /* Turn inline instance to offline.  */
    static bool offline (function_instance *fn,
  		       vec <function_instance *> &new_functions);
*************** get_original_name (const char *name, boo
*** 581,590 ****
  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)
  	 | get_discriminator_from_loc (loc);
  }
  
--- 643,663 ----
  static unsigned
  get_combined_location (location_t loc, tree decl)
  {
+   bool warned = false;
    /* TODO: allow more bits for line and less bits for discriminator.  */
!   if ((LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl)) >= (1<<15)
!       || (LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl)) <= -(1<<15))
!     warned = warning_at (loc, OPT_Wauto_profile,
! 			 "auto-profile cannot encode offset %i "
! 			 "that exceeds 16 bytes",
! 			 LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl));
!   if (warned)
!     inform (DECL_SOURCE_LOCATION (decl), "location offset is related to");
!   if ((unsigned)get_discriminator_from_loc (loc) >= (1u << 16))
!     warning_at (loc, OPT_Wauto_profile,
! 		"auto-profile cannot encode discriminators "
! 		"that exceeds 16 bytes");
!   return ((unsigned)(LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl)) << 16)
  	 | get_discriminator_from_loc (loc);
  }
  
*************** dump_inline_stack (FILE *f, inline_stack
*** 620,627 ****
      {
        fprintf (f, "%s%s:",
  	       first ? "" : "; ",
! 	       IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (p.first)));
!       dump_afdo_loc (f, p.second);
        first = false;
      }
    fprintf (f, "\n");
--- 693,700 ----
      {
        fprintf (f, "%s%s:",
  	       first ? "" : "; ",
! 	       IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (p.decl)));
!       dump_afdo_loc (f, p.afdo_loc);
        first = false;
      }
    fprintf (f, "\n");
*************** get_inline_stack (location_t locus, inli
*** 649,659 ****
  
            tree decl = get_function_decl_from_block (block);
            stack->safe_push (
!               std::make_pair (decl, get_combined_location (locus, decl)));
            locus = tmp_locus;
          }
      }
!   stack->safe_push (std::make_pair (fn, get_combined_location (locus, fn)));
  }
  
  /* Same as get_inline_stack for a given node which may be
--- 722,732 ----
  
            tree decl = get_function_decl_from_block (block);
            stack->safe_push (
! 	      {decl, get_combined_location (locus, decl), locus});
            locus = tmp_locus;
          }
      }
!   stack->safe_push ({fn, get_combined_location (locus, fn), locus});
  }
  
  /* Same as get_inline_stack for a given node which may be
*************** static unsigned
*** 690,702 ****
  get_relative_location_for_locus (tree fn, tree block, location_t locus)
  {
    if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
!     return UNKNOWN_LOCATION;
  
    for (; block && (TREE_CODE (block) == BLOCK);
         block = BLOCK_SUPERCONTEXT (block))
      if (inlined_function_outer_scope_p (block))
        return get_combined_location (locus,
!                                     get_function_decl_from_block (block));
    return get_combined_location (locus, fn);
  }
  
--- 763,775 ----
  get_relative_location_for_locus (tree fn, tree block, location_t locus)
  {
    if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
!     return -1;
  
    for (; block && (TREE_CODE (block) == BLOCK);
         block = BLOCK_SUPERCONTEXT (block))
      if (inlined_function_outer_scope_p (block))
        return get_combined_location (locus,
! 				    get_function_decl_from_block (block));
    return get_combined_location (locus, fn);
  }
  
*************** function_instance::~function_instance ()
*** 801,812 ****
      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)
--- 874,900 ----
      delete iter->second;
  }
  
+ /* Return corresponding cgraph node, NULL if unavailable.  */
+ cgraph_node *
+ function_instance::get_cgraph_node ()
+ {
+   for (symtab_node *n = cgraph_node::get_for_asmname
+ 			    (get_identifier
+ 			       (afdo_string_table->get_name (name ())));
+        n; n = n->next_sharing_asm_name)
+     if (cgraph_node *cn = dyn_cast <cgraph_node *> (n))
+       if (cn->definition && cn->has_gimple_body_p ())
+ 	return cn;
+   return NULL;
+ }
+ 
  /* Traverse callsites of the current function_instance to find one at the
     location of LINENO and callee name represented in DECL.  */
  
  function_instance *
  function_instance::get_function_instance_by_decl (unsigned lineno,
! 						  tree decl,
! 						  location_t location) const
  {
    int func_name_idx = afdo_string_table->get_index_by_decl (decl);
    if (func_name_idx != -1)
*************** function_instance::get_function_instance
*** 816,847 ****
        if (ret != callsites.end ())
          return ret->second;
      }
-   if (dump_file)
-     {
-       for (auto const &iter : callsites)
- 	if (iter.first.first == lineno)
- 	  {
- 	    fprintf (dump_file, "Looking for %s:",
- 		     IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
- 	    dump_afdo_loc (dump_file, lineno);
- 	    fprintf (dump_file, " in ");
- 	    this->dump_inline_stack (dump_file);
- 	    fprintf (dump_file, " has mismatching call at smae loc to %s\n",
- 		     afdo_string_table->get_name (iter.first.second));
- 	  }
-     }
-   /* ??? If this is used to determine count, we will end up over-eastimating it
-      if offlined function has multiple callers.  */
    if (DECL_FROM_INLINE (decl))
      {
        function_instance
         	*ret =  get_function_instance_by_decl (lineno,
! 						DECL_ABSTRACT_ORIGIN (decl));
!       if (ret && dump_file)
! 	fprintf (dump_file, "Passing to offline instance:%s\n",
! 		 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
        return ret;
      }
  
    return NULL;
  }
--- 904,930 ----
        if (ret != callsites.end ())
          return ret->second;
      }
    if (DECL_FROM_INLINE (decl))
      {
        function_instance
         	*ret =  get_function_instance_by_decl (lineno,
! 						DECL_ABSTRACT_ORIGIN (decl),
! 						location);
        return ret;
      }
+   if (dump_enabled_p ())
+     {
+       for (auto const &iter : callsites)
+ 	if (iter.first.first == lineno)
+ 	  dump_printf_loc (MSG_NOTE | MSG_PRIORITY_INTERNALS,
+ 			   dump_user_location_t::from_location_t (location),
+ 			   "auto-profile has mismatched function name %s"
+ 			   " instaed of %s at loc %i:%i",
+ 			   afdo_string_table->get_name (iter.first.second),
+ 			   IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
+ 			   lineno << 16,
+ 			   lineno & 65535);
+     }
  
    return NULL;
  }
*************** function_instance::offline_if_in_set (na
*** 1038,1043 ****
--- 1121,1640 ----
        }
  }
  
+ /* Try to check if inlined_fn can correspond to a call of function N.
+    Return non-zero if it correspons and 2 if renaming was done.  */
+ 
+ static int
+ match_with_target (gimple *stmt, function_instance *inlined_fn, cgraph_node *n)
+ {
+   const char *symbol_name = IDENTIFIER_POINTER
+ 			       (DECL_ASSEMBLER_NAME (n->decl));
+   const char *name = afdo_string_table->get_name (inlined_fn->name ());
+   if (strcmp (name, symbol_name))
+     {
+       int i;
+       bool in_suffix = false;
+       for (i = 0; i; i++)
+ 	{
+ 	  if (name[i] != symbol_name[i])
+ 	    break;
+ 	  if (name[i] == '.')
+ 	    in_suffix = true;
+ 	}
+       /* Accept dwarf names and stripped suffixes.  */
+       if (!strcmp (lang_hooks.dwarf_name (n->decl, 0),
+ 		   afdo_string_table->get_name (inlined_fn->name ()))
+ 	  || (!name[i] && symbol_name[i] == '.')
+ 	  || in_suffix)
+ 	{
+ 	  int index = afdo_string_table->get_index (symbol_name);
+ 	  if (index == -1)
+ 	    index = afdo_string_table->add_name (xstrdup (symbol_name));
+ 	  if (dump_file)
+ 	    fprintf (dump_file,
+ 		     "  Renaming inlined call target %s to %s\n",
+ 		     name, symbol_name);
+ 	  inlined_fn->set_name (index);
+ 	  return 2;
+ 	}
+       warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ 		  "auto-profile contains inlined "
+ 		  "function with symbol name %s instead of symbol name %s",
+ 		  name, symbol_name);
+       return 0;
+     }
+   return 1;
+ }
+ 
+ static void
+ dump_stmt (gimple *stmt, count_info *info, function_instance *inlined_fn,
+ 	   inline_stack &stack)
+ {
+   if (dump_file)
+     {
+       fprintf (dump_file, "  ");
+       if (!stack.length ())
+ 	fprintf (dump_file, "                     ");
+       else
+ 	{
+ 	  gcc_checking_assert (stack.length () == 1);
+ 	  fprintf (dump_file, "%5i", stack[0].afdo_loc >> 16);
+ 	  if (stack[0].afdo_loc & 65535)
+ 	    fprintf (dump_file, ".%-5i", stack[0].afdo_loc & 65535);
+ 	  else
+ 	    fprintf (dump_file, "      ");
+ 	  if (info)
+ 	    fprintf (dump_file, "%9" PRIu64 " ", (int64_t)info->count);
+ 	  else if (inlined_fn)
+ 	    fprintf (dump_file, " inlined  ");
+ 	  else
+ 	    fprintf (dump_file, " no info  ");
+ 	}
+       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
+     }
+ }
+ 
+ /* Lookup count and warn about duplicates.  */
+ count_info *
+ function_instance::lookup_count (location_t loc, inline_stack &stack,
+ 				 cgraph_node *node)
+ {
+   gcc_checking_assert (stack.length () < 2);
+   if (stack.length ())
+     {
+       int c = pos_counts.count (stack[0].afdo_loc);
+       if (c > 1)
+ 	warning_at (loc, OPT_Wauto_profile,
+ 		    "duplicated count information"
+ 		    " in auto-profile of %q+F"
+ 		    " with relative location %i discriminator %i",
+ 		    node->decl, stack[0].afdo_loc >> 16,
+ 		    stack[0].afdo_loc & 65535);
+       if (c)
+ 	return &pos_counts[stack[0].afdo_loc];
+     }
+   return NULL;
+ }
+ 
+ /* Mark expr locations as used.  */
+ void
+ mark_expr_locations (function_instance *f, tree t, cgraph_node *node,
+ 		     hash_set<const count_info *> &counts)
+ {
+   inline_stack stack;
+   return;
+   if (!t)
+     return;
+   do
+     {
+       get_inline_stack_in_node (EXPR_LOCATION (t), &stack, node);
+       /* FIXME: EXPR_LOCATION does not always originate from current
+ 	 function.  */
+       if (stack.length () > 1)
+ 	break;
+       count_info *info = f->lookup_count (EXPR_LOCATION (t), stack, node);
+       if (info)
+ 	counts.add (info);
+       if (handled_component_p (t))
+ 	t = TREE_OPERAND (t, 0);
+       else
+ 	break;
+     }
+   while (true);
+ }
+ 
+ /* Match function instance with gimple body.
+    Report mismatches, attempt to fix them if possible and remove data we will
+    not use.
+ 
+    Set location and call_location so we can output diagnostics and know what
+    functions was already matched.  */
+ 
+ bool
+ function_instance::match (cgraph_node *node,
+ 			  vec <function_instance *> &new_functions,
+ 			  name_index_map &to_symbol_name)
+ {
+   if (get_location () != UNKNOWN_LOCATION)
+     return false;
+   set_location (DECL_SOURCE_LOCATION (node->decl));
+   if (dump_file)
+     {
+       fprintf (dump_file,
+ 	       "\nMatching gimple function %s with auto profile: ",
+ 	       node->dump_name ());
+       dump_inline_stack (dump_file);
+       fprintf (dump_file, "\n");
+     }
+   basic_block bb;
+   /* Sets used to track if entires in auto-profile are useful.  */
+   hash_set<const count_info *> counts;
+   hash_set<const count_info *> targets;
+   hash_set<const function_instance *> functions;
+ 
+   /* We try to fill in lost disciminator if there is unique call
+      with given line number.  This map is used to record them.  */
+   hash_map<int_hash <int, -1, -2>,auto_vec <gcall *>> lineno_to_call;
+   bool lineno_to_call_computed = false;
+ 
+   for (tree arg = DECL_ARGUMENTS (node->decl); arg; arg = DECL_CHAIN (arg))
+     {
+       inline_stack stack;
+ 
+       get_inline_stack_in_node (DECL_SOURCE_LOCATION (arg), &stack, node);
+       count_info *info = lookup_count (DECL_SOURCE_LOCATION (arg), stack, node);
+       if (stack.length () && dump_file)
+ 	{
+ 	  gcc_checking_assert (stack.length () == 1);
+ 	  fprintf (dump_file, "%5i", stack[0].afdo_loc >> 16);
+ 	  if (stack[0].afdo_loc & 65535)
+ 	    fprintf (dump_file, "  .%-5i arg", stack[0].afdo_loc & 65535);
+ 	  else
+ 	    fprintf (dump_file, "        arg ");
+ 	  print_generic_expr (dump_file, arg);
+ 	  fprintf (dump_file, "\n");
+ 	}
+       if (info)
+ 	counts.add (info);
+     }
+   FOR_EACH_BB_FN (bb, DECL_STRUCT_FUNCTION (node->decl))
+     {
+       if (dump_file)
+ 	fprintf (dump_file, " basic block %i\n", bb->index);
+       for (gphi_iterator gpi = gsi_start_phis (bb);
+ 	   !gsi_end_p (gpi);
+ 	   gsi_next (&gpi))
+ 	{
+ 	  gphi *phi = gpi.phi ();
+ 	  inline_stack stack;
+ 
+ 	  get_inline_stack_in_node (gimple_location (phi), &stack, node);
+ 	  count_info *info = lookup_count (gimple_location (phi), stack, node);
+ 	  if (info)
+ 	    counts.add (info);
+ 	  dump_stmt (phi, info, NULL, stack);
+ 	  counts.add (info);
+ 	  for (edge e : bb->succs)
+ 	    {
+ 	      location_t phi_loc
+ 		= gimple_phi_arg_location_from_edge (phi, e);
+ 	      inline_stack stack;
+ 	      get_inline_stack_in_node (phi_loc, &stack, node);
+ 	      count_info *info = lookup_count (phi_loc, stack, node);
+ 	      if (info)
+ 		counts.add (info);
+ 	      gcc_checking_assert (stack.length () < 2);
+ 	      mark_expr_locations (this,
+ 				   gimple_phi_arg_def_from_edge (phi, e),
+ 				   node, counts);
+ 	    }
+ 	}
+       /* TODO: goto locuses are not used for BB annotation.  */
+       for (edge e : bb->succs)
+ 	{
+ 	  inline_stack stack;
+ 	  get_inline_stack_in_node (e->goto_locus, &stack, node);
+ 	  count_info *info = lookup_count (e->goto_locus, stack, node);
+ 	  if (info)
+ 	    counts.add (info);
+ 	}
+       for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
+ 	   !gsi_end_p (gsi); gsi_next (&gsi))
+ 	{
+ 	  inline_stack stack;
+ 	  gimple *stmt = gsi_stmt (gsi);
+ 	  get_inline_stack_in_node (gimple_location (stmt), &stack, node);
+ 
+ 	  count_info *info = lookup_count (gimple_location (stmt), stack, node);
+ 	  if (info)
+ 	    counts.add (info);
+ 	  for (unsigned int op = 0; op < gimple_num_ops (stmt); op++)
+ 	    mark_expr_locations (this, gimple_op (stmt, op), node, counts);
+ 	  if (gimple_code (stmt) == GIMPLE_CALL)
+ 	    {
+ 	      function_instance *inlined_fn = NULL;
+ 	      function_instance *inlined_fn_nodisc = NULL;
+ 	      /* Lookup callsite.  */
+ 	      if (stack.length ())
+ 		{
+ 		  int c = 0;
+ 		  int cnodis = 0;
+ 		  for (auto const &iter : callsites)
+ 		    if (iter.first.first == stack[0].afdo_loc)
+ 		      {
+ 			if (!c)
+ 			  inlined_fn = iter.second;
+ 			c++;
+ 		      }
+ 		    /* Discriminators are sometimes lost; try to find the
+ 		       call without discriminator info.  */
+ 		    else if (iter.first.first == (stack[0].afdo_loc & ~65535))
+ 		      {
+ 			if (!cnodis)
+ 			  inlined_fn_nodisc = iter.second;
+ 			cnodis++;
+ 		      }
+ 		  if (c > 1 || cnodis > 1)
+ 		    warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ 				"duplicated callsite in auto-profile of %q+F"
+ 				" with relative location %i, discriminator %i",
+ 				node->decl, stack[0].afdo_loc >> 16,
+ 				stack[0].afdo_loc & 65535);
+ 		  if (inlined_fn && info && info->targets.size ())
+ 		    warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ 				"both call targets and inline callsite"
+ 				" information is present in auto-profile"
+ 				" of function %q+F with relative location"
+ 				" %i, discriminator %i",
+ 				node->decl, stack[0].afdo_loc >> 16,
+ 				stack[0].afdo_loc & 65535);
+ 		  tree callee = gimple_call_fndecl (stmt);
+ 		  cgraph_node *callee_node;
+ 		  unsigned int loc = stack[0].afdo_loc;
+ 		  bool lost_discriminator = false;
+ 		  if (!inlined_fn && inlined_fn_nodisc)
+ 		    {
+ 		      if (!lineno_to_call_computed)
+ 			{
+ 			  basic_block bb2;
+ 			  FOR_EACH_BB_FN (bb2,
+ 					  DECL_STRUCT_FUNCTION (node->decl))
+ 			  for (gimple_stmt_iterator gsi2
+ 					  = gsi_start_bb (bb2);
+ 			       !gsi_end_p (gsi2); gsi_next (&gsi2))
+ 			    if (gcall *call
+ 				    = dyn_cast <gcall *> (gsi_stmt (gsi2)))
+ 			      {
+ 				inline_stack stack2;
+ 				get_inline_stack_in_node
+ 				       	(gimple_location (call),
+ 					 &stack2, node);
+ 				if (stack2.length ())
+ 				  lineno_to_call.get_or_insert
+ 				    (stack2[0].afdo_loc >> 16).safe_push (call);
+ 			      }
+ 			  lineno_to_call_computed = true;
+ 			}
+ 		      /* If we can determine lost discriminator uniquely,
+ 			 use it.  */
+ 		      if (lineno_to_call.get
+ 			      (stack[0].afdo_loc >> 16)->length () == 1)
+ 			{
+ 			  warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ 				      "auto-profile of %q+F seem to contain"
+ 				      " lost discriminator %i for call at"
+ 				      " relative location %i",
+ 				      node->decl, loc & 65535, loc >> 16);
+ 			  inlined_fn = inlined_fn_nodisc;
+ 			  if (dump_file)
+ 			    fprintf (dump_file, "   Lost discriminator %i\n",
+ 				     loc & 65535);
+ 			  loc = loc & ~65535;
+ 			}
+ 		      lost_discriminator = true;
+ 		    }
+ 		  if (callee && (callee_node = cgraph_node::get (callee)))
+ 		    {
+ 		      callee_node = callee_node->ultimate_alias_target ();
+ 		      if (inlined_fn)
+ 			{
+ 			  int old_name = inlined_fn->name ();
+ 			  int r = match_with_target (stmt, inlined_fn,
+ 						     callee_node);
+ 			  if (r == 2)
+ 			    {
+ 			      auto iter = callsites.find ({loc, old_name});
+ 			      gcc_checking_assert (old_name
+ 						   != inlined_fn->name ()
+ 						   && iter != callsites.end ()
+ 						   && iter->second
+ 						      == inlined_fn);
+ 			      callsite key2 = {stack[0].afdo_loc,
+ 						inlined_fn->name ()};
+ 			      callsites[key2] = inlined_fn;
+ 			      callsites.erase (iter);
+ 			    }
+ 			  if (r)
+ 			    functions.add (inlined_fn);
+ 			}
+ 
+ 		      if (info && info->targets.size () > 1)
+ 			warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ 				    "auto-profile of %q+F contains multiple"
+ 				    " targets for a direct call with relative"
+ 				    " location %i, discriminator %i",
+ 				    node->decl, stack[0].afdo_loc >> 16,
+ 				    stack[0].afdo_loc & 65535);
+ 		      /* We do not need target profile for direct calls.  */
+ 		      if (info)
+ 			info->targets.clear ();
+ 		    }
+ 		  else
+ 		    {
+ 		      if (inlined_fn
+ 			  && inlined_fn->get_call_location ()
+ 				  != UNKNOWN_LOCATION
+ 			  && warning_at (gimple_location (stmt),
+ 					 OPT_Wauto_profile,
+ 					 "%q+F contains two calls of the same"
+ 					 " relative location +%i,"
+ 					 " discrimnator %i,"
+ 					 " that leads to lost auto-profile",
+ 					 node->decl,
+ 					 loc << 16,
+ 					 loc & 65535))
+ 			{
+ 			  inform (inlined_fn->get_call_location (),
+ 				  "location of the earlier call");
+ 			  inlined_fn = NULL;
+ 			}
+ 		      if (inlined_fn)
+ 			{
+ 			  inlined_fn->set_call_location
+ 			    (gimple_location (stmt));
+ 			  /* Do renaming if needed so we can look up
+ 			     cgraph node and recurse into inlined function.  */
+ 			  int *newn = to_symbol_name.get (inlined_fn->name ());
+ 			  gcc_checking_assert
+ 			    (!newn || *newn != inlined_fn->name ());
+ 			  if (newn || lost_discriminator)
+ 			    {
+ 			      auto iter = callsites.find
+ 					    ({loc, inlined_fn->name ()});
+ 			      gcc_checking_assert (iter != callsites.end ()
+ 						   && iter->second
+ 						      == inlined_fn);
+ 			      callsite key2 = {stack[0].afdo_loc,
+ 					       newn ? *newn
+ 					       : inlined_fn->name ()};
+ 			      callsites[key2] = inlined_fn;
+ 			      inlined_fn->set_name (newn ? *newn
+ 						    : inlined_fn->name ());
+ 			      callsites.erase (iter);
+ 			    }
+ 			  functions.add (inlined_fn);
+ 			}
+ 		      if (info)
+ 			targets.add (info);
+ 		    }
+ 		}
+ 	      dump_stmt (stmt, info, inlined_fn, stack);
+ 	    }
+ 	  else
+ 	    dump_stmt (stmt, info, NULL, stack);
+ 	}
+     }
+   bool warned = false;
+   for (auto &iter : pos_counts)
+     if (iter.second.targets.size ()
+ 	&& counts.contains (&iter.second)
+        	&& !targets.contains (&iter.second))
+       {
+ 	if (!warned)
+ 	  warned = warning_at
+ 		       (DECL_SOURCE_LOCATION (node->decl),
+ 			OPT_Wauto_profile,
+ 			"auto-profile of %q+F contains indirect call targets"
+ 			" not associated with an indirect call statement",
+ 			node->decl);
+ 	if (warned)
+ 	  inform (DECL_SOURCE_LOCATION (node->decl),
+ 		  "count %" PRIu64
+ 		  " with relative location +%i, discriminator %i",
+ 		  iter.second.count, iter.first >> 16, iter.first & 65535);
+ 	if (dump_file)
+ 	  {
+ 	    fprintf (dump_file, "Removing targets of ");
+ 	    dump_afdo_loc (dump_file, iter.first);
+ 	    fprintf (dump_file, "\n");
+ 	  }
+ 	iter.second.targets.clear ();
+       }
+   warned = false;
+   /* Profile sometimes contains extra location for start or end of function
+      (prologue, epilogue).
+      TODO: If present, perhaps it can be used to determine entry block
+      and exit block counts.  */
+   unsigned int end_location = get_combined_location
+     (DECL_STRUCT_FUNCTION (node->decl)->function_end_locus, node->decl);
+   unsigned int start_location = get_combined_location
+     (DECL_STRUCT_FUNCTION (node->decl)->function_start_locus, node->decl);
+   for (position_count_map::const_iterator iter = pos_counts.begin ();
+        iter != pos_counts.end ();)
+     if (!counts.contains (&iter->second))
+       {
+ 	if (iter->first != end_location && iter->first != start_location
+ 	    && iter->first)
+ 	  {
+ 	    if (!warned)
+ 	      warned = warning_at (DECL_SOURCE_LOCATION (node->decl),
+ 			    OPT_Wauto_profile,
+ 			    "auto-profile of %q+F contains extra statements",
+ 			    node->decl);
+ 	    if (warned)
+ 	      inform (DECL_SOURCE_LOCATION (node->decl),
+ 		      "count %" PRIu64 " with relative location +%i,"
+ 		      " discriminator %i",
+ 		      iter->second.count, iter->first >> 16,
+ 		      iter->first & 65535);
+ 	    if ((iter->first >> 16) > (end_location >> 16) && warned)
+ 	      inform (DECL_SOURCE_LOCATION (node->decl),
+ 		      "location is after end of function");
+ 	  }
+ 	if (dump_file)
+ 	  {
+ 	    fprintf (dump_file, "Removing unmatched count ");
+ 	    dump_afdo_loc (dump_file, iter->first);
+ 	    fprintf (dump_file, ":%" PRIu64, iter->second.count);
+ 	    for (auto &titer : iter->second.targets)
+ 	      fprintf (dump_file, " %s:%" PRIu64,
+ 		       afdo_string_table->get_name (titer.first),
+ 		       (int64_t)titer.second);
+ 	    fprintf (dump_file, "\n");
+ 	  }
+ 	iter = pos_counts.erase (iter);
+       }
+     else
+       iter++;
+   warned = false;
+   for (callsite_map::const_iterator iter = callsites.begin ();
+        iter != callsites.end ();)
+     if (!functions.contains (iter->second))
+       {
+ 	if (!warned)
+ 	  warned = warning_at (DECL_SOURCE_LOCATION (node->decl),
+ 			       OPT_Wauto_profile,
+ 			       "auto-profile of %q+F contains extra callsites",
+ 			       node->decl);
+ 	if (warned)
+ 	  inform (DECL_SOURCE_LOCATION (node->decl),
+ 		  "call of %s with relative location +%i, discriminator %i",
+ 		  afdo_string_table->get_name (iter->first.second),
+ 		  iter->first.first >> 16, iter->first.first & 65535);
+ 	if ((iter->first.first >> 16) > (end_location >> 16) && warned)
+ 	  inform (DECL_SOURCE_LOCATION (node->decl),
+ 		  "location is after end of function");
+ 	warned = true;
+ 	function_instance *f = iter->second;
+ 	if (dump_file)
+ 	  {
+ 	    fprintf (dump_file,
+ 		     "Offlining inline with no corresponding gimple stmt ");
+ 	    f->dump_inline_stack (dump_file);
+ 	    fprintf (dump_file, "\n");
+ 	  }
+ 	callsites.erase (iter);
+ 	offline (f, new_functions);
+ 	iter = callsites.begin ();
+       }
+     else
+       iter++;
+   for (auto &iter : callsites)
+     if (cgraph_node *n = iter.second->get_cgraph_node ())
+       iter.second->match (n, new_functions, to_symbol_name);
+   return true;
+ }
+ 
  /* Walk inlined functions and if their name is not in SEEN
     remove it.  Also rename function names as given by
     to_symbol_name map.  */
*************** function_instance::remove_external_funct
*** 1049,1054 ****
--- 1646,1652 ----
           vec <function_instance *> &new_functions)
  {
    auto_vec <callsite, 20> to_rename;
+ 
    for (callsite_map::const_iterator iter = callsites.begin ();
         iter != callsites.end ();)
      if (!seen.contains (iter->first.second))
*************** function_instance::remove_external_funct
*** 1069,1075 ****
        {
  	gcc_checking_assert ((int)iter->first.second
  			     == iter->second->name ());
! 	int *newn = to_symbol_name.get (iter->first.second);
  	if (newn)
  	  {
  	    gcc_checking_assert (iter->second->inlined_to ());
--- 1667,1675 ----
        {
  	gcc_checking_assert ((int)iter->first.second
  			     == iter->second->name ());
! 	int *newn = iter->second->get_call_location () == UNKNOWN_LOCATION
! 		    ? to_symbol_name.get (iter->first.second)
! 		    : NULL;
  	if (newn)
  	  {
  	    gcc_checking_assert (iter->second->inlined_to ());
*************** autofdo_source_profile::offline_external
*** 1303,1309 ****
  	      if (dump_file)
  		fprintf (dump_file,
  			 "string table in auto-profile contains"
! 			 " duplicated name %s", n1);
  	      to_symbol_name.put (i, index);
  	    }
  	  continue;
--- 1903,1909 ----
  	      if (dump_file)
  		fprintf (dump_file,
  			 "string table in auto-profile contains"
! 			 " duplicated name %s\n", n1);
  	      to_symbol_name.put (i, index);
  	    }
  	  continue;
*************** autofdo_source_profile::offline_external
*** 1392,1397 ****
--- 1992,1998 ----
       TODO: after early-inlining we ought to offline all functions
       that were not inlined.  */
    vec <function_instance *>&fns = duplicate_functions_;
+   auto_vec <function_instance *, 20>fns2;
    /* Poppulate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
    for (auto const &iter : map_)
*************** autofdo_source_profile::offline_external
*** 1399,1472 ****
        iter.second->set_in_worklist ();
        fns.safe_push (iter.second);
      }
-   while (fns.length ())
-     {
-       function_instance *f = fns.pop ();
-       int index = f->name ();
-       gcc_checking_assert (f->in_worklist_p ());
  
!       /* If map has different function_instance of same name, then
! 	 this is a duplicated entry which needs to be merged.  */
!       if (map_.count (index) && map_[index] != f)
! 	{
! 	  if (dump_file)
! 	    {
! 	      fprintf (dump_file, "Merging duplicate instance: ");
! 	      f->dump_inline_stack (dump_file);
! 	      fprintf (dump_file, "\n");
! 	    }
! 	  map_[index]->merge (f, fns);
! 	  gcc_checking_assert (!f->inlined_to ());
! 	  f->clear_in_worklist ();
! 	  delete f;
! 	}
!       /* If name was not seen in the symbol table, remove it.  */
!       else if (!seen.contains (index))
! 	{
! 	  f->offline_if_in_set (seen, fns);
! 	  f->clear_in_worklist ();
! 	  if (dump_file)
! 	    fprintf (dump_file, "Removing external %s\n",
! 		     afdo_string_table->get_name (f->name ()));
! 	  map_.erase (f->name ());
! 	  delete f;
! 	}
!       /* If this is offline function instance seen in this
! 	 translation unit offline external inlines and possibly
! 	 rename from dwarf name.  */
!       else
! 	{
! 	  f->remove_external_functions (seen, to_symbol_name, fns);
! 	  f->clear_in_worklist ();
! 	  int *newn = to_symbol_name.get (index);
! 	  if (newn)
! 	    {
! 	      gcc_checking_assert (*newn != index);
! 	      f->set_name (*newn);
! 	      if (map_.count (*newn))
! 		{
! 		  if (dump_file)
! 		    fprintf (dump_file, "Merging duplicate symbol %s\n",
! 			     afdo_string_table->get_name (f->name ()));
! 		  function_instance *to = map_[*newn];
! 		  gcc_checking_assert (!map_.count (index) || map_[index] == f);
! 		  if (to != f)
! 		    {
! 		      to->merge (f, fns);
! 		      delete f;
! 		    }
! 		  if (map_.count (index))
! 		    map_.erase (index);
! 		}
! 	      else
! 		{
! 		  auto iter = map_.find (index);
! 		  map_[*newn] = iter->second;
! 		  map_.erase (iter);
! 		}
! 	    }
! 	}
!     }
    if (dump_file)
      for (auto const &iter : map_)
        {
--- 2000,2077 ----
        iter.second->set_in_worklist ();
        fns.safe_push (iter.second);
      }
  
!   /* There are two worklists.  First all functions needs to be matched
!      with gimple body and only then we want to do merging, since matching
!      should be done on unmodified profile and merging works better if
!      mismatches are already resolved both in source and destination.  */
!   while (fns.length () || fns2.length ())
!     if (fns.length ())
!       {
! 	function_instance *f = fns.pop ();
! 	if (f->get_location () == UNKNOWN_LOCATION)
! 	  {
! 	    int index = f->name ();
! 	    int *newn = to_symbol_name.get (index);
! 	    if (newn)
! 	      {
! 		f->set_name (*newn);
! 		if (map_.count (index)
! 		    && map_[index] == f)
! 		  map_.erase (index);
! 		if (!map_.count (*newn))
! 		  map_[*newn] = f;
! 	      }
! 	    if (cgraph_node *n = f->get_cgraph_node ())
! 	      {
! 		gcc_checking_assert (seen.contains (f->name ()));
! 		f->match (n, fns, to_symbol_name);
! 	      }
! 	  }
! 	fns2.safe_push (f);
!       }
!     else
!       {
! 	function_instance *f = fns2.pop ();
! 	int index = f->name ();
! 	gcc_checking_assert (f->in_worklist_p ());
! 
! 	/* If map has different function_instance of same name, then
! 	   this is a duplicated entry which needs to be merged.  */
! 	if (map_.count (index) && map_[index] != f)
! 	  {
! 	    if (dump_file)
! 	      {
! 		fprintf (dump_file, "Merging duplicate instance: ");
! 		f->dump_inline_stack (dump_file);
! 		fprintf (dump_file, "\n");
! 	      }
! 	    map_[index]->merge (f, fns);
! 	    gcc_checking_assert (!f->inlined_to ());
! 	    f->clear_in_worklist ();
! 	    delete f;
! 	  }
! 	/* If name was not seen in the symbol table, remove it.  */
! 	else if (!seen.contains (index))
! 	  {
! 	    f->offline_if_in_set (seen, fns);
! 	    f->clear_in_worklist ();
! 	    if (dump_file)
! 	      fprintf (dump_file, "Removing external %s\n",
! 		       afdo_string_table->get_name (f->name ()));
! 	    if (map_.count (index) && map_[index] == f)
! 	      map_.erase (f->name ());
! 	    delete f;
! 	  }
! 	/* If this is offline function instance seen in this
! 	   translation unit offline external inlines and possibly
! 	   rename from dwarf name.  */
! 	else
! 	  {
! 	    f->remove_external_functions (seen, to_symbol_name, fns);
! 	    f->clear_in_worklist ();
! 	  }
!       }
    if (dump_file)
      for (auto const &iter : map_)
        {
*************** walk_block (tree fn, function_instance *
*** 1487,1493 ****
  		       BLOCK_SOURCE_LOCATION (block));
        function_instance *ns
  	= s->get_function_instance_by_decl
! 		  (loc, BLOCK_ABSTRACT_ORIGIN (block));
        if (!ns)
  	{
  	  if (dump_file)
--- 2092,2099 ----
  		       BLOCK_SOURCE_LOCATION (block));
        function_instance *ns
  	= s->get_function_instance_by_decl
! 		  (loc, BLOCK_ABSTRACT_ORIGIN (block),
! 		   BLOCK_SOURCE_LOCATION (block));
        if (!ns)
  	{
  	  if (dump_file)
*************** autofdo_source_profile::offline_unrealiz
*** 1536,1557 ****
        int index = f->name ();
        bool in_map = map_.count (index);
        if (in_map)
! 	for (cgraph_node *n = cgraph_node::get_for_asmname
! 		  (get_identifier (afdo_string_table->get_name (index)));n;)
  	  {
! 	    if (n->definition)
! 	      {
! 		if (dump_file)
! 		  fprintf (dump_file, "Marking realized %s\n",
! 			   afdo_string_table->get_name (index));
! 		f->set_realized ();
! 		if (DECL_INITIAL (n->decl) != error_mark_node)
! 		  walk_block (n->decl, f, DECL_INITIAL (n->decl));
! 	      }
! 	    if (n->next_sharing_asm_name)
! 	      n = as_a <cgraph_node *>(n->next_sharing_asm_name);
! 	    else
! 	      break;
  	  }
        f->offline_if_not_realized (fns);
        gcc_checking_assert ((in_map || !f->realized_p ())
--- 2142,2156 ----
        int index = f->name ();
        bool in_map = map_.count (index);
        if (in_map)
! 	if (cgraph_node *n = f->get_cgraph_node ())
  	  {
! 	    if (dump_file)
! 	      fprintf (dump_file, "Marking realized %s\n",
! 		       afdo_string_table->get_name (index));
! 	    f->set_realized ();
! 	    if (DECL_INITIAL (n->decl)
! 		&& DECL_INITIAL (n->decl) != error_mark_node)
! 	      walk_block (n->decl, f, DECL_INITIAL (n->decl));
  	  }
        f->offline_if_not_realized (fns);
        gcc_checking_assert ((in_map || !f->realized_p ())
*************** autofdo_source_profile::get_count_info (
*** 1729,1735 ****
    function_instance *s = get_function_instance_by_inline_stack (stack);
    if (s == NULL)
      return false;
!   return s->get_count_info (stack[0].second, info);
  }
  
  /* Update value profile INFO for STMT from the inlined indirect callsite.
--- 2328,2334 ----
    function_instance *s = get_function_instance_by_inline_stack (stack);
    if (s == NULL)
      return false;
!   return s->get_count_info (stack[0].afdo_loc, info);
  }
  
  /* Update value profile INFO for STMT from the inlined indirect callsite.
*************** autofdo_source_profile::get_callsite_tot
*** 1836,1842 ****
      struct cgraph_edge *edge) const
  {
    inline_stack stack;
!   stack.safe_push (std::make_pair (edge->callee->decl, 0));
  
    get_inline_stack_in_node (gimple_location (edge->call_stmt), &stack,
  			    edge->caller);
--- 2435,2441 ----
      struct cgraph_edge *edge) const
  {
    inline_stack stack;
!   stack.safe_push ({edge->callee->decl, 0, UNKNOWN_LOCATION});
  
    get_inline_stack_in_node (gimple_location (edge->call_stmt), &stack,
  			    edge->caller);
*************** autofdo_source_profile::read ()
*** 1901,1909 ****
    /* Read in the function/callsite profile, and store it in local
       data structure.  */
    unsigned function_num = gcov_read_unsigned ();
-   int profile_pass_num
- 	  = g->get_passes ()->get_pass_auto_profile ()->static_pass_number;
-   g->get_dumps ()->dump_start (profile_pass_num, NULL);
    for (unsigned i = 0; i < function_num; i++)
      {
        function_instance::function_instance_stack stack;
--- 2500,2505 ----
*************** autofdo_source_profile::read ()
*** 1919,1942 ****
  		     "auto-profile contains duplicated function instance %s",
  		     afdo_string_table->get_name (s->name ()));
      }
    /* Scale up the profile, but leave some bits in case some counts gets
       bigger than sum_max eventually.  */
    if (afdo_profile_info->sum_max)
      afdo_count_scale
        = MAX (((gcov_type)1 << (profile_count::n_bits / 2))
  	     / afdo_profile_info->sum_max, 1);
    if (dump_file)
      fprintf (dump_file, "Max count in profile %" PRIu64 "\n"
  			"Setting scale %" PRIu64 "\n"
  			"Scaled max count %" PRIu64 "\n"
  			"Hot count threshold %" PRIu64 "\n\n",
  	     (int64_t)afdo_profile_info->sum_max,
  	     (int64_t)afdo_count_scale,
  	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale),
! 	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale
! 		       / param_hot_bb_count_fraction));
    afdo_profile_info->sum_max *= afdo_count_scale;
-   g->get_dumps ()->dump_finish (profile_pass_num);
    return true;
  }
  
--- 2515,2545 ----
  		     "auto-profile contains duplicated function instance %s",
  		     afdo_string_table->get_name (s->name ()));
      }
+   int hot_frac = param_hot_bb_count_fraction;
    /* Scale up the profile, but leave some bits in case some counts gets
       bigger than sum_max eventually.  */
    if (afdo_profile_info->sum_max)
      afdo_count_scale
        = MAX (((gcov_type)1 << (profile_count::n_bits / 2))
  	     / afdo_profile_info->sum_max, 1);
+   afdo_profile_info->cutoff *= afdo_count_scale;
+   afdo_hot_bb_threshod
+     = hot_frac
+       ? afdo_profile_info->sum_max * afdo_count_scale / hot_frac
+       : (gcov_type)profile_count::max_count;
+   set_hot_bb_threshold (afdo_hot_bb_threshod);
    if (dump_file)
      fprintf (dump_file, "Max count in profile %" PRIu64 "\n"
  			"Setting scale %" PRIu64 "\n"
  			"Scaled max count %" PRIu64 "\n"
+ 			"Cutoff %" PRIu64 "\n"
  			"Hot count threshold %" PRIu64 "\n\n",
  	     (int64_t)afdo_profile_info->sum_max,
  	     (int64_t)afdo_count_scale,
  	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale),
! 	     (int64_t)afdo_profile_info->cutoff,
! 	     (int64_t)afdo_hot_bb_threshod);
    afdo_profile_info->sum_max *= afdo_count_scale;
    return true;
  }
  
*************** autofdo_source_profile::get_function_ins
*** 1948,1982 ****
      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 ())
      {
        if (dump_file)
  	fprintf (dump_file, "No offline instance for %s\n",
  		 IDENTIFIER_POINTER
! 		   (DECL_ASSEMBLER_NAME (stack[stack.length () - 1].first)));
        return NULL;
      }
    function_instance *s = iter->second;
    for (unsigned i = stack.length () - 1; i > 0; i--)
      {
!       function_instance *os = s;
!       s = s->get_function_instance_by_decl (stack[i].second,
! 					    stack[i - 1].first);
!       /* Try lost locus.  */
!       if (!s)
! 	s = os->get_function_instance_by_decl (stack[i].second & ~65535,
! 						stack[i - 1].first);
        if (s == NULL)
  	{
! 	  if (dump_file)
! 	    {
! 	      fprintf (dump_file, "No instance for %s at loc ",
! 		       IDENTIFIER_POINTER
! 			(DECL_ASSEMBLER_NAME (stack[i - 1].first)));
! 	      dump_afdo_loc (dump_file, stack[i].second);
! 	      fprintf (dump_file, "\n");
! 	    }
  	  return NULL;
  	}
      }
--- 2551,2588 ----
      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].decl));
    if (iter == map_.end ())
      {
        if (dump_file)
  	fprintf (dump_file, "No offline instance for %s\n",
  		 IDENTIFIER_POINTER
! 		   (DECL_ASSEMBLER_NAME (stack[stack.length () - 1].decl)));
        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].afdo_loc,
! 					    stack[i - 1].decl,
! 					    stack[i].location);
        if (s == NULL)
  	{
! 	  /* afdo inliner extends the stack by last entry with unknown
! 	     location while chekcing if function was inlined during train run.
! 	     We do not want to print diagnostics about every function
! 	     which is not inlined.  */
! 	  if (s && dump_enabled_p () && stack[i].location != UNKNOWN_LOCATION)
! 	    dump_printf_loc (MSG_NOTE | MSG_PRIORITY_INTERNALS,
! 			     dump_user_location_t::from_location_t
! 			       (stack[i].location),
! 			      "auto-profile has no inlined function instance "
! 			      "for inlined call of %s at relative "
! 			      " locaction +%i, discriminator %i\n",
! 			     IDENTIFIER_POINTER
! 			      (DECL_ASSEMBLER_NAME (stack[i - 1].decl)),
! 			     stack[i].afdo_loc >> 16,
! 			     stack[i].afdo_loc & 65535);
  	  return NULL;
  	}
      }
*************** afdo_set_bb_count (basic_block bb, hash_
*** 2248,2254 ****
      {
        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))
  	{
--- 2854,2860 ----
      {
        count_info info;
        gimple *stmt = gsi_stmt (gsi);
!       if (gimple_clobber_p (stmt))
  	continue;
        if (afdo_source_profile->get_count_info (stmt, &info))
  	{
*************** afdo_propagate_edge (bool is_succ, bb_se
*** 2461,2466 ****
--- 3067,3087 ----
  	set_bb_annotated (bb, annotated_bb);
  	changed = true;
        }
+     else if (is_bb_annotated (bb, *annotated_bb)
+ 	     && bb->count < total_known_count)
+       {
+ 	if (dump_file)
+ 	  {
+ 	    fprintf (dump_file, "  Increasing bb %i count from ",
+ 		     bb->index);
+ 	    bb->count.dump (dump_file);
+ 	    fprintf (dump_file, " to ");
+ 	    total_known_count.dump (dump_file);
+ 	    fprintf (dump_file, " hoping to mitigate afdo inconsistency\n");
+ 	  }
+ 	bb->count = total_known_count;
+ 	changed = true;
+       }
      else if (num_unknown_edges == 1 && is_bb_annotated (bb, *annotated_bb))
        {
  	if (bb->count > total_known_count)
*************** afdo_propagate_edge (bool is_succ, bb_se
*** 2503,2508 ****
--- 3124,3150 ----
  	      }
  	  }
        }
+     else if (num_unknown_edges == 0
+ 	     && is_bb_annotated (bb, *annotated_bb)
+ 	     && (is_succ ? single_succ_p (bb) : single_pred_p (bb)))
+       {
+ 	edge e = is_succ ? single_succ_edge (bb) : single_pred_edge (bb);
+ 	if (AFDO_EINFO (e)->is_annotated ()
+ 	    && AFDO_EINFO (e)->get_count () < bb->count)
+ 	  {
+ 	    if (dump_file)
+ 	      {
+ 		fprintf (dump_file, "  Increasing edge %i->%i count from ",
+ 			 e->src->index, e->dest->index);
+ 		AFDO_EINFO (e)->get_count ().dump (dump_file);
+ 		fprintf (dump_file, " to ");
+ 		bb->count.dump (dump_file);
+ 		fprintf (dump_file, " hoping to mitigate afdo inconsistency\n");
+ 	      }
+ 	    AFDO_EINFO (e)->set_count (bb->count);
+ 	    changed = true;
+ 	  }
+       }
    }
    return changed;
  }
*************** afdo_propagate (bb_set *annotated_bb)
*** 2632,2641 ****
  		     ((basic_block)bb->aux)->index,
  		     bb->index);
  	    bb->count.dump (dump_file);
  	  }
        }
  
!   while (changed && i++ < 10)
      {
        changed = false;
  
--- 3274,3284 ----
  		     ((basic_block)bb->aux)->index,
  		     bb->index);
  	    bb->count.dump (dump_file);
+ 	    fprintf (dump_file, "\n");
  	  }
        }
  
!   while (changed && i++ < 100)
      {
        changed = false;
  
*************** afdo_propagate (bb_set *annotated_bb)
*** 2646,2652 ****
        afdo_propagate_circuit (*annotated_bb);
      }
    if (dump_file)
!     fprintf (dump_file, "Propated in %i iterations %s\n",
  	     i, changed ? "; iteration limit reached\n" : "");
  }
  
--- 3289,3295 ----
        afdo_propagate_circuit (*annotated_bb);
      }
    if (dump_file)
!     fprintf (dump_file, "Propagation took %i iterations %s\n",
  	     i, changed ? "; iteration limit reached\n" : "");
  }
  
*************** afdo_annotate_cfg (void)
*** 3016,3021 ****
--- 3659,3674 ----
        if (dump_file)
  	fprintf (dump_file, "No afdo profile for %s\n",
  		 cgraph_node::get (current_function_decl)->dump_name ());
+       /* create_gcov only dumps symbols with some samples in them.
+ 	 This means that we get nonempty zero_bbs only if some
+ 	 nonzero counts in profile were not matched with statements.  */
+       if (!flag_profile_partial_training)
+ 	{
+ 	  FOR_ALL_BB_FN (bb, cfun)
+ 	    if (bb->count.quality () == GUESSED_LOCAL)
+ 	      bb->count = bb->count.global0afdo ();
+ 	  update_max_bb_count ();
+ 	}
        return;
      }
  
*************** afdo_annotate_cfg (void)
*** 3086,3094 ****
  	  if (dump_file)
  	    fprintf (dump_file, "Setting global count to afdo0\n");
  	}
!       FOR_ALL_BB_FN (bb, cfun)
! 	if (bb->count.quality () == GUESSED_LOCAL)
! 	  bb->count = bb->count.global0afdo ();
  
        loop_optimizer_finalize ();
        free_dominance_info (CDI_DOMINATORS);
--- 3739,3751 ----
  	  if (dump_file)
  	    fprintf (dump_file, "Setting global count to afdo0\n");
  	}
!       if (!flag_profile_partial_training)
! 	{
! 	  FOR_ALL_BB_FN (bb, cfun)
! 	    if (bb->count.quality () == GUESSED_LOCAL)
! 	      bb->count = bb->count.global0afdo ();
! 	  update_max_bb_count ();
! 	}
  
        loop_optimizer_finalize ();
        free_dominance_info (CDI_DOMINATORS);
*************** auto_profile (void)
*** 3169,3175 ****
  {
    struct cgraph_node *node;
  
!   if (symtab->state == FINISHED)
      return 0;
  
    init_node_map (true);
--- 3826,3832 ----
  {
    struct cgraph_node *node;
  
!   if (symtab->state == FINISHED || !afdo_source_profile)
      return 0;
  
    init_node_map (true);
*************** read_autofdo_file (void)
*** 3211,3216 ****
--- 3868,3874 ----
    autofdo::afdo_profile_info = XNEW (gcov_summary);
    autofdo::afdo_profile_info->runs = 1;
    autofdo::afdo_profile_info->sum_max = 0;
+   autofdo::afdo_profile_info->cutoff = 1;
  
    /* Read the profile from the profile file.  */
    autofdo::read_profile ();
*************** afdo_callsite_hot_enough_for_early_inlin
*** 3238,3248 ****
      {
        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);
        if (dump_file)
  	{
  	  fprintf (dump_file, "Call %s -> %s has %s afdo profile count ",
--- 3896,3902 ----
      {
        bool is_hot;
        profile_count pcount = profile_count::from_gcov_type (count).afdo ();
!       is_hot = maybe_hot_afdo_count_p (pcount);
        if (dump_file)
  	{
  	  fprintf (dump_file, "Call %s -> %s has %s afdo profile count ",
*************** afdo_callsite_hot_enough_for_early_inlin
*** 3251,3257 ****
  	  pcount.dump (dump_file);
  	  fprintf (dump_file, "\n");
  	}
-       profile_info = saved_profile_info;
        return is_hot;
      }
  
--- 3905,3910 ----
*************** public:
*** 3404,3409 ****
--- 4057,4063 ----
    unsigned int
    execute (function *) final override
    {
+     read_autofdo_file ();
      if (autofdo::afdo_source_profile)
        autofdo::afdo_source_profile->offline_external_functions ();
      return 0;
diff -Nrcpad gcc-16-20250629/gcc/auto-profile.h gcc-16-20250706/gcc/auto-profile.h
*** gcc-16-20250629/gcc/auto-profile.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/auto-profile.h	Sun Jul  6 22:32:10 2025
*************** extern bool afdo_vpt_for_early_inline (c
*** 35,38 ****
--- 35,45 ----
     do not repeat it later.  */
  extern void remove_afdo_speculative_target (cgraph_edge *);
  
+ /* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
+    considered cols.  */
+ extern gcov_type afdo_hot_bb_threshold;
+ 
+ /* Return ture if COUNT is possiby hot.  */
+ extern bool maybe_hot_afdo_count_p (profile_count count);
+ 
  #endif /* AUTO_PROFILE_H */
diff -Nrcpad gcc-16-20250629/gcc/builtin-attrs.def gcc-16-20250706/gcc/builtin-attrs.def
*** gcc-16-20250629/gcc/builtin-attrs.def	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/builtin-attrs.def	Sun Jul  6 22:32:10 2025
*************** DEF_LIST_INT_INT (5,0)
*** 90,95 ****
--- 90,103 ----
  DEF_LIST_INT_INT (5,6)
  #undef DEF_LIST_INT_INT
  
+ /* Construct a tree for a list of three integers.  */
+ #define DEF_LIST_INT_INT_INT(VALUE1, VALUE2, VALUE3)			 \
+   DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE1##_##VALUE2##_##VALUE3,		 \
+ 		      ATTR_NULL, ATTR_##VALUE1,				 \
+ 		      ATTR_LIST_##VALUE2##_##VALUE3)
+ DEF_LIST_INT_INT_INT (1,2,3)
+ #undef DEF_LIST_INT_INT_INT
+ 
  /* Construct trees for identifiers used in built-in function attributes.
     The construction contributes to startup costs so only attributes that
     are used to define built-ins should be defined here.  */
*************** DEF_ATTR_TREE_LIST (ATTR_NONNULL_1, ATTR
*** 209,214 ****
--- 217,228 ----
  DEF_ATTR_TREE_LIST (ATTR_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, ATTR_NULL)
  /* Functions whose third parameter is a nonnull pointer.  */
  DEF_ATTR_TREE_LIST (ATTR_NONNULL_3, ATTR_NONNULL, ATTR_LIST_3, ATTR_NULL)
+ /* Functions whose selected pointer parameter(s) are conditionally
+    nonnull.  */
+ DEF_ATTR_TREE_LIST (ATTR_NONNULL_IF123_LIST, ATTR_NONNULL_IF_NONZERO, \
+ 			ATTR_LIST_1_2_3, ATTR_NULL)
+ DEF_ATTR_TREE_LIST (ATTR_NONNULL_4_IF123_LIST, ATTR_NONNULL, \
+ 			ATTR_LIST_4, ATTR_NONNULL_IF123_LIST)
  /* Nothrow functions with the sentinel(1) attribute. */
  DEF_ATTR_TREE_LIST (ATTR_NOTHROW_SENTINEL_1, ATTR_SENTINEL, ATTR_LIST_1, \
  			ATTR_NOTHROW_LIST)
diff -Nrcpad gcc-16-20250629/gcc/builtins.cc gcc-16-20250706/gcc/builtins.cc
*** gcc-16-20250629/gcc/builtins.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/builtins.cc	Sun Jul  6 22:32:10 2025
*************** validate_arglist (const_tree callexpr, .
*** 1158,1169 ****
  	unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	unsigned int idx2
  	  = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
  	if (idx < (unsigned) call_expr_nargs (callexpr)
  	    && idx2 < (unsigned) call_expr_nargs (callexpr)
  	    && POINTER_TYPE_P (TREE_TYPE (CALL_EXPR_ARG (callexpr, idx)))
  	    && integer_zerop (CALL_EXPR_ARG (callexpr, idx))
  	    && INTEGRAL_TYPE_P (TREE_TYPE (CALL_EXPR_ARG (callexpr, idx2)))
! 	    && integer_nonzerop (CALL_EXPR_ARG (callexpr, idx2)))
  	  return false;
        }
  
--- 1158,1175 ----
  	unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	unsigned int idx2
  	  = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
+ 	unsigned int idx3 = idx2;
+ 	if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
+ 	  idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
  	if (idx < (unsigned) call_expr_nargs (callexpr)
  	    && idx2 < (unsigned) call_expr_nargs (callexpr)
+ 	    && idx3 < (unsigned) call_expr_nargs (callexpr)
  	    && POINTER_TYPE_P (TREE_TYPE (CALL_EXPR_ARG (callexpr, idx)))
  	    && integer_zerop (CALL_EXPR_ARG (callexpr, idx))
  	    && INTEGRAL_TYPE_P (TREE_TYPE (CALL_EXPR_ARG (callexpr, idx2)))
! 	    && integer_nonzerop (CALL_EXPR_ARG (callexpr, idx2))
! 	    && INTEGRAL_TYPE_P (TREE_TYPE (CALL_EXPR_ARG (callexpr, idx3)))
! 	    && integer_nonzerop (CALL_EXPR_ARG (callexpr, idx3)))
  	  return false;
        }
  
diff -Nrcpad gcc-16-20250629/gcc/builtins.def gcc-16-20250706/gcc/builtins.def
*** gcc-16-20250629/gcc/builtins.def	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/builtins.def	Sun Jul  6 22:32:10 2025
*************** DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTC_U
*** 924,931 ****
  DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_NONNULL_1_FORMAT_PRINTF_1_2)
  DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NULL)
--- 924,931 ----
  DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
! DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_4_IF123_LIST)
! DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_4_IF123_LIST)
  DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_NONNULL_1_FORMAT_PRINTF_1_2)
  DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NULL)
diff -Nrcpad gcc-16-20250629/gcc/c/ChangeLog gcc-16-20250706/gcc/c/ChangeLog
*** gcc-16-20250629/gcc/c/ChangeLog	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c/ChangeLog	Sun Jul  6 22:32:10 2025
***************
*** 1,3 ****
--- 1,17 ----
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* c-decl.cc (verify_counted_by_attribute): Change the 2nd argument
+ 	to a vector of fields with counted_by attribute. Verify all fields
+ 	in this vector.
+ 	(finish_struct): Collect all the fields with counted_by attribute
+ 	to a vector and pass this vector to verify_counted_by_attribute.
+ 	* c-typeck.cc (build_counted_by_ref): Handle pointers with counted_by.
+ 	Add one more argument, issue error when the pointee type is a structure
+ 	or union including a flexible array member.
+ 	(build_access_with_size_for_counted_by): Handle pointers with counted_by.
+ 	(handle_counted_by_for_component_ref): Call build_counted_by_ref
+ 	with the new prototype.
+ 
  2025-06-23  Tobias Burnus  <tburnus@baylibre.com>
  
  	* c-parser.cc (OACC_WAIT_CLAUSE_MASK): Add if clause.
diff -Nrcpad gcc-16-20250629/gcc/c/c-decl.cc gcc-16-20250706/gcc/c/c-decl.cc
*** gcc-16-20250629/gcc/c/c-decl.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c/c-decl.cc	Sun Jul  6 22:32:10 2025
*************** c_update_type_canonical (tree t)
*** 9432,9487 ****
      }
  }
  
! /* Verify the argument of the counted_by attribute of the flexible array
!    member FIELD_DECL is a valid field of the containing structure,
!    STRUCT_TYPE, Report error and remove this attribute when it's not.  */
  
  static void
! verify_counted_by_attribute (tree struct_type, tree field_decl)
  {
!   tree attr_counted_by = lookup_attribute ("counted_by",
! 					   DECL_ATTRIBUTES (field_decl));
! 
!   if (!attr_counted_by)
!     return;
  
!   /* If there is an counted_by attribute attached to the field,
!      verify it.  */
  
!   tree fieldname = TREE_VALUE (TREE_VALUE (attr_counted_by));
  
!   /* Verify the argument of the attrbute is a valid field of the
!      containing structure.  */
  
!   tree counted_by_field = lookup_field (struct_type, fieldname);
  
!   /* Error when the field is not found in the containing structure and
!      remove the corresponding counted_by attribute from the field_decl.  */
!   if (!counted_by_field)
!     {
!       error_at (DECL_SOURCE_LOCATION (field_decl),
! 		"argument %qE to the %<counted_by%> attribute"
! 		" is not a field declaration in the same structure"
! 		" as %qD", fieldname, field_decl);
!       DECL_ATTRIBUTES (field_decl)
! 	= remove_attribute ("counted_by", DECL_ATTRIBUTES (field_decl));
!     }
!   else
!   /* Error when the field is not with an integer type.  */
!     {
!       while (TREE_CHAIN (counted_by_field))
! 	counted_by_field = TREE_CHAIN (counted_by_field);
!       tree real_field = TREE_VALUE (counted_by_field);
  
!       if (!INTEGRAL_TYPE_P (TREE_TYPE (real_field)))
  	{
  	  error_at (DECL_SOURCE_LOCATION (field_decl),
  		    "argument %qE to the %<counted_by%> attribute"
! 		    " is not a field declaration with an integer type",
! 		    fieldname);
  	  DECL_ATTRIBUTES (field_decl)
  	    = remove_attribute ("counted_by", DECL_ATTRIBUTES (field_decl));
  	}
      }
  }
  
--- 9432,9493 ----
      }
  }
  
! /* Verify the argument of the counted_by attribute of each of the
!    FIELDS_WITH_COUNTED_BY is a valid field of the containing structure,
!    STRUCT_TYPE, Report error and remove the corresponding attribute
!    when it's not.  */
  
  static void
! verify_counted_by_attribute (tree struct_type,
! 			     auto_vec<tree> *fields_with_counted_by)
  {
!   for (tree field_decl : *fields_with_counted_by)
!     {
!       tree attr_counted_by = lookup_attribute ("counted_by",
! 						DECL_ATTRIBUTES (field_decl));
  
!       if (!attr_counted_by)
! 	continue;
  
!       /* If there is an counted_by attribute attached to the field,
! 	 verify it.  */
  
!       tree fieldname = TREE_VALUE (TREE_VALUE (attr_counted_by));
  
!       /* Verify the argument of the attrbute is a valid field of the
! 	 containing structure.  */
  
!       tree counted_by_field = lookup_field (struct_type, fieldname);
  
!       /* Error when the field is not found in the containing structure and
! 	 remove the corresponding counted_by attribute from the field_decl.  */
!       if (!counted_by_field)
  	{
  	  error_at (DECL_SOURCE_LOCATION (field_decl),
  		    "argument %qE to the %<counted_by%> attribute"
! 		    " is not a field declaration in the same structure"
! 		    " as %qD", fieldname, field_decl);
  	  DECL_ATTRIBUTES (field_decl)
  	    = remove_attribute ("counted_by", DECL_ATTRIBUTES (field_decl));
  	}
+       else
+       /* Error when the field is not with an integer type.  */
+ 	{
+ 	  while (TREE_CHAIN (counted_by_field))
+ 	    counted_by_field = TREE_CHAIN (counted_by_field);
+ 	  tree real_field = TREE_VALUE (counted_by_field);
+ 
+ 	  if (!INTEGRAL_TYPE_P (TREE_TYPE (real_field)))
+ 	    {
+ 	      error_at (DECL_SOURCE_LOCATION (field_decl),
+ 			"argument %qE to the %<counted_by%> attribute"
+ 			" is not a field declaration with an integer type",
+ 			fieldname);
+ 	      DECL_ATTRIBUTES (field_decl)
+ 		= remove_attribute ("counted_by",
+ 				    DECL_ATTRIBUTES (field_decl));
+ 	    }
+ 	}
      }
  }
  
*************** finish_struct (location_t loc, tree t, t
*** 9556,9562 ****
       until now.)  */
  
    bool saw_named_field = false;
!   tree counted_by_fam_field = NULL_TREE;
    for (x = fieldlist; x; x = DECL_CHAIN (x))
      {
        /* Whether this field is the last field of the structure or union.
--- 9562,9568 ----
       until now.)  */
  
    bool saw_named_field = false;
!   auto_vec<tree> fields_with_counted_by;
    for (x = fieldlist; x; x = DECL_CHAIN (x))
      {
        /* Whether this field is the last field of the structure or union.
*************** finish_struct (location_t loc, tree t, t
*** 9637,9645 ****
  	     record it here and do more verification later after the
  	     whole structure is complete.  */
  	  if (lookup_attribute ("counted_by", DECL_ATTRIBUTES (x)))
! 	    counted_by_fam_field = x;
  	}
  
        if (pedantic && TREE_CODE (t) == RECORD_TYPE
  	  && flexible_array_type_p (TREE_TYPE (x)))
  	pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
--- 9643,9658 ----
  	     record it here and do more verification later after the
  	     whole structure is complete.  */
  	  if (lookup_attribute ("counted_by", DECL_ATTRIBUTES (x)))
! 	    fields_with_counted_by.safe_push (x);
  	}
  
+       if (TREE_CODE (TREE_TYPE (x)) == POINTER_TYPE)
+ 	/* If there is a counted_by attribute attached to this field,
+ 	   record it here and do more verification later after the
+ 	   whole structure is complete.  */
+ 	if (lookup_attribute ("counted_by", DECL_ATTRIBUTES (x)))
+ 	  fields_with_counted_by.safe_push (x);
+ 
        if (pedantic && TREE_CODE (t) == RECORD_TYPE
  	  && flexible_array_type_p (TREE_TYPE (x)))
  	pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
*************** finish_struct (location_t loc, tree t, t
*** 9938,9945 ****
  	struct_parse_info->struct_types.safe_push (t);
       }
  
!   if (counted_by_fam_field)
!     verify_counted_by_attribute (t, counted_by_fam_field);
  
    return t;
  }
--- 9951,9958 ----
  	struct_parse_info->struct_types.safe_push (t);
       }
  
!   if (fields_with_counted_by.length () > 0)
!     verify_counted_by_attribute (t, &fields_with_counted_by);
  
    return t;
  }
diff -Nrcpad gcc-16-20250629/gcc/c/c-typeck.cc gcc-16-20250706/gcc/c/c-typeck.cc
*** gcc-16-20250629/gcc/c/c-typeck.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c/c-typeck.cc	Sun Jul  6 22:32:10 2025
*************** should_suggest_deref_p (tree datum_type)
*** 2922,2929 ****
  
  /* For a SUBDATUM field of a structure or union DATUM, generate a REF to
     the object that represents its counted_by per the attribute counted_by
!    attached to this field if it's a flexible array member field, otherwise
!    return NULL_TREE.
     Set COUNTED_BY_TYPE to the TYPE of the counted_by field.
     For example, if:
  
--- 2922,2929 ----
  
  /* For a SUBDATUM field of a structure or union DATUM, generate a REF to
     the object that represents its counted_by per the attribute counted_by
!    attached to this field if it's a flexible array member or a pointer
!    field, otherwise return NULL_TREE.
     Set COUNTED_BY_TYPE to the TYPE of the counted_by field.
     For example, if:
  
*************** should_suggest_deref_p (tree datum_type)
*** 2941,2958 ****
  
  */
  static tree
! build_counted_by_ref (tree datum, tree subdatum, tree *counted_by_type)
  {
    tree type = TREE_TYPE (datum);
!   if (!c_flexible_array_member_type_p (TREE_TYPE (subdatum)))
      return NULL_TREE;
  
    tree attr_counted_by = lookup_attribute ("counted_by",
  					   DECL_ATTRIBUTES (subdatum));
    tree counted_by_ref = NULL_TREE;
    *counted_by_type = NULL_TREE;
    if (attr_counted_by)
      {
        tree field_id = TREE_VALUE (TREE_VALUE (attr_counted_by));
        counted_by_ref
  	= build_component_ref (UNKNOWN_LOCATION,
--- 2941,2974 ----
  
  */
  static tree
! build_counted_by_ref (location_t loc, tree datum, tree subdatum,
! 		      tree *counted_by_type)
  {
    tree type = TREE_TYPE (datum);
!   tree sub_type = TREE_TYPE (subdatum);
!   if (!c_flexible_array_member_type_p (sub_type)
!       && TREE_CODE (sub_type) != POINTER_TYPE)
      return NULL_TREE;
  
+   tree element_type = TREE_TYPE (sub_type);
+ 
    tree attr_counted_by = lookup_attribute ("counted_by",
  					   DECL_ATTRIBUTES (subdatum));
    tree counted_by_ref = NULL_TREE;
    *counted_by_type = NULL_TREE;
    if (attr_counted_by)
      {
+       /* Issue error when the element_type is a structure or
+ 	 union including a flexible array member.  */
+       if (RECORD_OR_UNION_TYPE_P (element_type)
+ 	  && TYPE_INCLUDES_FLEXARRAY (element_type))
+ 	{
+ 	  error_at (loc,
+ 		    "%<counted_by%> attribute is not allowed for a pointer to"
+ 		    " structure or union with flexible array member");
+ 	  return error_mark_node;
+ 	}
+ 
        tree field_id = TREE_VALUE (TREE_VALUE (attr_counted_by));
        counted_by_ref
  	= build_component_ref (UNKNOWN_LOCATION,
*************** build_counted_by_ref (tree datum, tree s
*** 2975,2982 ****
  }
  
  /* Given a COMPONENT_REF REF with the location LOC, the corresponding
!    COUNTED_BY_REF, and the COUNTED_BY_TYPE, generate an INDIRECT_REF
!    to a call to the internal function .ACCESS_WITH_SIZE.
  
     REF
  
--- 2991,3001 ----
  }
  
  /* Given a COMPONENT_REF REF with the location LOC, the corresponding
!    COUNTED_BY_REF, and the COUNTED_BY_TYPE, generate the corresponding
!    call to the internal function .ACCESS_WITH_SIZE.
! 
!    Generate an INDIRECT_REF to a call to the internal function
!    .ACCESS_WITH_SIZE.
  
     REF
  
*************** build_counted_by_ref (tree datum, tree s
*** 2986,3002 ****
  			(TYPE_OF_ARRAY *)0))
  
     NOTE: The return type of this function is the POINTER type pointing
!    to the original flexible array type.
!    Then the type of the INDIRECT_REF is the original flexible array type.
! 
!    The type of the first argument of this function is a POINTER type
!    to the original flexible array type.
  
     The 4th argument of the call is a constant 0 with the TYPE of the
     object pointed by COUNTED_BY_REF.
  
!    The 6th argument of the call is a constant 0 with the pointer TYPE
!    to the original flexible array type.
  
    */
  static tree
--- 3005,3019 ----
  			(TYPE_OF_ARRAY *)0))
  
     NOTE: The return type of this function is the POINTER type pointing
!    to the original flexible array type or the original pointer type.
!    Then the type of the INDIRECT_REF is the original flexible array type
!    or the original pointer type.
  
     The 4th argument of the call is a constant 0 with the TYPE of the
     object pointed by COUNTED_BY_REF.
  
!    The 6th argument of the call is a constant 0 of the same TYPE as
!    the return type of the call.
  
    */
  static tree
*************** build_access_with_size_for_counted_by (l
*** 3004,3014 ****
  				       tree counted_by_ref,
  				       tree counted_by_type)
  {
!   gcc_assert (c_flexible_array_member_type_p (TREE_TYPE (ref)));
!   /* The result type of the call is a pointer to the flexible array type.  */
    tree result_type = c_build_pointer_type (TREE_TYPE (ref));
!   tree first_param
!     = c_fully_fold (array_to_pointer_conversion (loc, ref), false, NULL);
    tree second_param
      = c_fully_fold (counted_by_ref, false, NULL);
  
--- 3021,3036 ----
  				       tree counted_by_ref,
  				       tree counted_by_type)
  {
!   gcc_assert (c_flexible_array_member_type_p (TREE_TYPE (ref))
! 	      || TREE_CODE (TREE_TYPE (ref)) == POINTER_TYPE);
!   bool is_fam = c_flexible_array_member_type_p (TREE_TYPE (ref));
!   tree first_param = is_fam ? array_to_pointer_conversion (loc, ref)
! 		     : build_unary_op (loc, ADDR_EXPR, ref, false);
! 
!   /* The result type of the call is a pointer to the original type
!      of the ref.  */
    tree result_type = c_build_pointer_type (TREE_TYPE (ref));
!   first_param = c_fully_fold (first_param, false, NULL);
    tree second_param
      = c_fully_fold (counted_by_ref, false, NULL);
  
*************** build_access_with_size_for_counted_by (l
*** 3021,3027 ****
  				    build_int_cst (counted_by_type, 0),
  				    build_int_cst (integer_type_node, -1),
  				    build_int_cst (result_type, 0));
!   /* Wrap the call with an INDIRECT_REF with the flexible array type.  */
    call = build1 (INDIRECT_REF, TREE_TYPE (ref), call);
    SET_EXPR_LOCATION (call, loc);
    return call;
--- 3043,3049 ----
  				    build_int_cst (counted_by_type, 0),
  				    build_int_cst (integer_type_node, -1),
  				    build_int_cst (result_type, 0));
!   /* Wrap the call with an INDIRECT_REF with the original type of the ref.  */
    call = build1 (INDIRECT_REF, TREE_TYPE (ref), call);
    SET_EXPR_LOCATION (call, loc);
    return call;
*************** handle_counted_by_for_component_ref (loc
*** 3039,3045 ****
    tree datum = TREE_OPERAND (ref, 0);
    tree subdatum = TREE_OPERAND (ref, 1);
    tree counted_by_type = NULL_TREE;
!   tree counted_by_ref = build_counted_by_ref (datum, subdatum,
  					      &counted_by_type);
    if (counted_by_ref)
      ref = build_access_with_size_for_counted_by (loc, ref,
--- 3061,3067 ----
    tree datum = TREE_OPERAND (ref, 0);
    tree subdatum = TREE_OPERAND (ref, 1);
    tree counted_by_type = NULL_TREE;
!   tree counted_by_ref = build_counted_by_ref (loc, datum, subdatum,
  					      &counted_by_type);
    if (counted_by_ref)
      ref = build_access_with_size_for_counted_by (loc, ref,
diff -Nrcpad gcc-16-20250629/gcc/c-family/ChangeLog gcc-16-20250706/gcc/c-family/ChangeLog
*** gcc-16-20250629/gcc/c-family/ChangeLog	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c-family/ChangeLog	Sun Jul  6 22:32:10 2025
***************
*** 1,3 ****
--- 1,50 ----
+ 2025-07-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120837
+ 	* c-common.cc (pointer_int_sum): Rewrite the intop PLUS_EXPR or
+ 	MINUS_EXPR optimization into extension of both intop operands,
+ 	their separate multiplication and then addition/subtraction followed
+ 	by rest of pointer_int_sum handling after the multiplication.
+ 
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* c-gimplify.cc (is_address_with_access_with_size): New function.
+ 	(ubsan_walk_array_refs_r): Instrument an INDIRECT_REF whose base
+ 	address is .ACCESS_WITH_SIZE or an address computation whose base
+ 	address is .ACCESS_WITH_SIZE.
+ 	* c-ubsan.cc (ubsan_instrument_bounds_pointer_address): New function.
+ 	(struct factor_t): New structure.
+ 	(get_factors_from_mul_expr): New function.
+ 	(get_index_from_offset): New function.
+ 	(get_index_from_pointer_addr_expr): New function.
+ 	(is_instrumentable_pointer_array_address): New function.
+ 	(ubsan_array_ref_instrumented_p): Change prototype.
+ 	Handle MEM_REF in addtional to ARRAY_REF.
+ 	(ubsan_maybe_instrument_array_ref): Handle MEM_REF in addtional
+ 	to ARRAY_REF.
+ 
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* c-attribs.cc (handle_counted_by_attribute): Accept counted_by
+ 	attribute for pointer fields.
+ 
+ 2025-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120520
+ 	PR c/117023
+ 	* c-attribs.cc (c_common_gnu_attributes): Allow 2 or 3 arguments for
+ 	nonnull_if_nonzero attribute instead of only 2.
+ 	(handle_nonnull_if_nonzero_attribute): Handle 3 argument
+ 	nonnull_if_nonzero.
+ 	* c-common.cc (struct nonnull_arg_ctx): Rename other member to other1,
+ 	add other2 member.
+ 	(check_function_nonnull): Clear a if nonnull attribute has an
+ 	argument.  Adjust for nonnull_arg_ctx changes.  Handle 3 argument
+ 	nonnull_if_nonzero attribute.
+ 	(check_nonnull_arg): Adjust for nonnull_arg_ctx changes, emit different
+ 	diagnostics for 3 argument nonnull_if_nonzero attributes.
+ 	(check_function_arguments): Adjust ctx var initialization.
+ 
  2025-06-27  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c++/120777
diff -Nrcpad gcc-16-20250629/gcc/c-family/c-attribs.cc gcc-16-20250706/gcc/c-family/c-attribs.cc
*** gcc-16-20250629/gcc/c-family/c-attribs.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c-family/c-attribs.cc	Sun Jul  6 22:32:10 2025
*************** const struct attribute_spec c_common_gnu
*** 489,495 ****
  			      handle_tls_model_attribute, NULL },
    { "nonnull",                0, -1, false, true, true, false,
  			      handle_nonnull_attribute, NULL },
!   { "nonnull_if_nonzero",     2, 2, false, true, true, false,
  			      handle_nonnull_if_nonzero_attribute, NULL },
    { "nonstring",              0, 0, true, false, false, false,
  			      handle_nonstring_attribute, NULL },
--- 489,495 ----
  			      handle_tls_model_attribute, NULL },
    { "nonnull",                0, -1, false, true, true, false,
  			      handle_nonnull_attribute, NULL },
!   { "nonnull_if_nonzero",     2, 3, false, true, true, false,
  			      handle_nonnull_if_nonzero_attribute, NULL },
    { "nonstring",              0, 0, true, false, false, false,
  			      handle_nonstring_attribute, NULL },
*************** handle_counted_by_attribute (tree *node,
*** 2906,2927 ****
  		" declaration %q+D", name, decl);
        *no_add_attrs = true;
      }
!   /* This attribute only applies to field with array type.  */
!   else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
      {
        error_at (DECL_SOURCE_LOCATION (decl),
! 		"%qE attribute is not allowed for a non-array field",
! 		name);
        *no_add_attrs = true;
      }
    /* This attribute only applies to a C99 flexible array member type.  */
!   else if (! c_flexible_array_member_type_p (TREE_TYPE (decl)))
      {
        error_at (DECL_SOURCE_LOCATION (decl),
  		"%qE attribute is not allowed for a non-flexible"
  		" array member field", name);
        *no_add_attrs = true;
      }
    /* The argument should be an identifier.  */
    else if (TREE_CODE (argval) != IDENTIFIER_NODE)
      {
--- 2906,2958 ----
  		" declaration %q+D", name, decl);
        *no_add_attrs = true;
      }
!   /* This attribute only applies to a field with array type or pointer type.  */
!   else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE
! 	   && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
      {
        error_at (DECL_SOURCE_LOCATION (decl),
! 		"%qE attribute is not allowed for a non-array"
! 		" or non-pointer field", name);
        *no_add_attrs = true;
      }
    /* This attribute only applies to a C99 flexible array member type.  */
!   else if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
! 	   && !c_flexible_array_member_type_p (TREE_TYPE (decl)))
      {
        error_at (DECL_SOURCE_LOCATION (decl),
  		"%qE attribute is not allowed for a non-flexible"
  		" array member field", name);
        *no_add_attrs = true;
      }
+   /* This attribute cannot be applied to a pointer to void type.  */
+   else if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE
+ 	   && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == VOID_TYPE)
+     {
+       error_at (DECL_SOURCE_LOCATION (decl),
+ 		"%qE attribute is not allowed for a pointer to void",
+ 		name);
+       *no_add_attrs = true;
+     }
+   /* This attribute cannot be applied to a pointer to function type.  */
+   else if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE
+ 	   && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == FUNCTION_TYPE)
+     {
+       error_at (DECL_SOURCE_LOCATION (decl),
+ 		"%qE attribute is not allowed for a pointer to"
+ 		" function", name);
+       *no_add_attrs = true;
+     }
+   /* This attribute cannot be applied to a pointer to structure or union
+      with flexible array member.  */
+   else if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE
+ 	   && RECORD_OR_UNION_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))
+ 	   && TYPE_INCLUDES_FLEXARRAY (TREE_TYPE (TREE_TYPE (decl))))
+     {
+ 	error_at (DECL_SOURCE_LOCATION (decl),
+ 		  "%qE attribute is not allowed for a pointer to"
+ 		  " structure or union with flexible array member", name);
+ 	*no_add_attrs = true;
+     }
    /* The argument should be an identifier.  */
    else if (TREE_CODE (argval) != IDENTIFIER_NODE)
      {
*************** handle_counted_by_attribute (tree *node,
*** 2930,2936 ****
        *no_add_attrs = true;
      }
    /* Issue error when there is a counted_by attribute with a different
!      field as the argument for the same flexible array member field.  */
    else if (old_counted_by != NULL_TREE)
      {
        tree old_fieldname = TREE_VALUE (TREE_VALUE (old_counted_by));
--- 2961,2968 ----
        *no_add_attrs = true;
      }
    /* Issue error when there is a counted_by attribute with a different
!      field as the argument for the same flexible array member or
!      pointer field.  */
    else if (old_counted_by != NULL_TREE)
      {
        tree old_fieldname = TREE_VALUE (TREE_VALUE (old_counted_by));
*************** handle_nonnull_if_nonzero_attribute (tre
*** 5034,5045 ****
    tree type = *node;
    tree pos = TREE_VALUE (args);
    tree pos2 = TREE_VALUE (TREE_CHAIN (args));
    tree val = positional_argument (type, name, pos, POINTER_TYPE, 1);
    tree val2 = positional_argument (type, name, pos2, INTEGER_TYPE, 2);
!   if (val && val2)
      {
        TREE_VALUE (args) = val;
        TREE_VALUE (TREE_CHAIN (args)) = val2;
      }
    else
      *no_add_attrs = true;
--- 5066,5086 ----
    tree type = *node;
    tree pos = TREE_VALUE (args);
    tree pos2 = TREE_VALUE (TREE_CHAIN (args));
+   tree chain2 = TREE_CHAIN (TREE_CHAIN (args));
+   tree pos3 = NULL_TREE;
+   if (chain2)
+     pos3 = TREE_VALUE (chain2);
    tree val = positional_argument (type, name, pos, POINTER_TYPE, 1);
    tree val2 = positional_argument (type, name, pos2, INTEGER_TYPE, 2);
!   tree val3 = NULL_TREE;
!   if (chain2)
!     val3 = positional_argument (type, name, pos3, INTEGER_TYPE, 3);
!   if (val && val2 && (!chain2 || val3))
      {
        TREE_VALUE (args) = val;
        TREE_VALUE (TREE_CHAIN (args)) = val2;
+       if (chain2)
+ 	TREE_VALUE (chain2) = val3;
      }
    else
      *no_add_attrs = true;
diff -Nrcpad gcc-16-20250629/gcc/c-family/c-common.cc gcc-16-20250706/gcc/c-family/c-common.cc
*** gcc-16-20250629/gcc/c-family/c-common.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c-family/c-common.cc	Sun Jul  6 22:32:10 2025
*************** pointer_int_sum (location_t loc, enum tr
*** 3438,3457 ****
  	 an overflow error if the constant is negative but INTOP is not.  */
        && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (intop))
  	  || (TYPE_PRECISION (TREE_TYPE (intop))
! 	      == TYPE_PRECISION (TREE_TYPE (ptrop)))))
      {
!       enum tree_code subcode = resultcode;
!       tree int_type = TREE_TYPE (intop);
!       if (TREE_CODE (intop) == MINUS_EXPR)
! 	subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
!       /* Convert both subexpression types to the type of intop,
! 	 because weird cases involving pointer arithmetic
! 	 can result in a sum or difference with different type args.  */
!       ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
! 			       subcode, ptrop,
! 			       convert (int_type, TREE_OPERAND (intop, 1)),
! 			       true);
!       intop = convert (int_type, TREE_OPERAND (intop, 0));
      }
  
    /* Convert the integer argument to a type the same size as sizetype
--- 3438,3478 ----
  	 an overflow error if the constant is negative but INTOP is not.  */
        && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (intop))
  	  || (TYPE_PRECISION (TREE_TYPE (intop))
! 	      == TYPE_PRECISION (TREE_TYPE (ptrop))))
!       && TYPE_PRECISION (TREE_TYPE (intop)) <= TYPE_PRECISION (sizetype))
      {
!       tree intop0 = TREE_OPERAND (intop, 0);
!       tree intop1 = TREE_OPERAND (intop, 1);
!       if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
! 	  || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
! 	{
! 	  tree optype = c_common_type_for_size (TYPE_PRECISION (sizetype),
! 						TYPE_UNSIGNED (sizetype));
! 	  intop0 = convert (optype, intop0);
! 	  intop1 = convert (optype, intop1);
! 	}
!       tree t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop0), intop0,
! 				convert (TREE_TYPE (intop0), size_exp));
!       intop0 = convert (sizetype, t);
!       if (TREE_OVERFLOW_P (intop0) && !TREE_OVERFLOW (t))
! 	intop0 = wide_int_to_tree (TREE_TYPE (intop0), wi::to_wide (intop0));
!       t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop1), intop1,
! 			   convert (TREE_TYPE (intop1), size_exp));
!       intop1 = convert (sizetype, t);
!       if (TREE_OVERFLOW_P (intop1) && !TREE_OVERFLOW (t))
! 	intop1 = wide_int_to_tree (TREE_TYPE (intop1), wi::to_wide (intop1));
!       intop = build_binary_op (EXPR_LOCATION (intop), TREE_CODE (intop),
! 			       intop0, intop1, true);
! 
!       /* Create the sum or difference.  */
!       if (resultcode == MINUS_EXPR)
! 	intop = fold_build1_loc (loc, NEGATE_EXPR, sizetype, intop);
! 
!       ret = fold_build_pointer_plus_loc (loc, ptrop, intop);
! 
!       fold_undefer_and_ignore_overflow_warnings ();
! 
!       return ret;
      }
  
    /* Convert the integer argument to a type the same size as sizetype
*************** struct nonnull_arg_ctx
*** 5749,5756 ****
    /* The function whose arguments are being checked and its type (used
       for calls through function pointers).  */
    const_tree fndecl, fntype;
!   /* For nonnull_if_nonzero, index of the other argument.  */
!   unsigned HOST_WIDE_INT other;
    /* True if a warning has been issued.  */
    bool warned_p;
  };
--- 5770,5777 ----
    /* The function whose arguments are being checked and its type (used
       for calls through function pointers).  */
    const_tree fndecl, fntype;
!   /* For nonnull_if_nonzero, index of the other arguments.  */
!   unsigned HOST_WIDE_INT other1, other2;
    /* True if a warning has been issued.  */
    bool warned_p;
  };
*************** check_function_nonnull (nonnull_arg_ctx
*** 5818,5823 ****
--- 5839,5845 ----
  	    check_function_arguments_recurse (check_nonnull_arg, &ctx,
  					      argarray[i], i + 1,
  					      OPT_Wnonnull);
+ 	  a = NULL_TREE;
  	}
      }
    if (a == NULL_TREE)
*************** check_function_nonnull (nonnull_arg_ctx
*** 5829,5845 ****
  	unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	unsigned int idx2
  	  = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
  	if (idx < (unsigned) nargs - firstarg
  	    && idx2 < (unsigned) nargs - firstarg
  	    && INTEGRAL_TYPE_P (TREE_TYPE (argarray[firstarg + idx2]))
! 	    && integer_nonzerop (argarray[firstarg + idx2]))
  	  {
! 	    ctx.other = firstarg + idx2 + 1;
  	    check_function_arguments_recurse (check_nonnull_arg, &ctx,
  					      argarray[firstarg + idx],
  					      firstarg + idx + 1,
  					      OPT_Wnonnull);
! 	    ctx.other = 0;
  	  }
        }
    return ctx.warned_p;
--- 5851,5875 ----
  	unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	unsigned int idx2
  	  = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
+ 	unsigned int idx3 = idx2;
+ 	if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
+ 	  idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
  	if (idx < (unsigned) nargs - firstarg
  	    && idx2 < (unsigned) nargs - firstarg
+ 	    && idx3 < (unsigned) nargs - firstarg
  	    && INTEGRAL_TYPE_P (TREE_TYPE (argarray[firstarg + idx2]))
! 	    && integer_nonzerop (argarray[firstarg + idx2])
! 	    && INTEGRAL_TYPE_P (TREE_TYPE (argarray[firstarg + idx3]))
! 	    && integer_nonzerop (argarray[firstarg + idx3]))
  	  {
! 	    ctx.other1 = firstarg + idx2 + 1;
! 	    ctx.other2 = firstarg + idx3 + 1;
  	    check_function_arguments_recurse (check_nonnull_arg, &ctx,
  					      argarray[firstarg + idx],
  					      firstarg + idx + 1,
  					      OPT_Wnonnull);
! 	    ctx.other1 = 0;
! 	    ctx.other2 = 0;
  	  }
        }
    return ctx.warned_p;
*************** check_nonnull_arg (void *ctx, tree param
*** 6023,6036 ****
      }
    else
      {
!       if (pctx->other)
  	warned = warning_at (loc, OPT_Wnonnull,
  			     "argument %u null where non-null expected "
  			     "because argument %u is nonzero",
  			     (unsigned) param_num,
  			     TREE_CODE (pctx->fntype) == METHOD_TYPE
! 			     ? (unsigned) pctx->other - 1
! 			     : (unsigned) pctx->other);
        else
  	warned = warning_at (loc, OPT_Wnonnull,
  			     "argument %u null where non-null expected",
--- 6053,6077 ----
      }
    else
      {
!       if (pctx->other1 && pctx->other2 != pctx->other1)
! 	warned = warning_at (loc, OPT_Wnonnull,
! 			     "argument %u null where non-null expected "
! 			     "because arguments %u and %u are nonzero",
! 			     (unsigned) param_num,
! 			     TREE_CODE (pctx->fntype) == METHOD_TYPE
! 			     ? (unsigned) pctx->other1 - 1
! 			     : (unsigned) pctx->other1,
! 			     TREE_CODE (pctx->fntype) == METHOD_TYPE
! 			     ? (unsigned) pctx->other2 - 1
! 			     : (unsigned) pctx->other2);
!       else if (pctx->other1)
  	warned = warning_at (loc, OPT_Wnonnull,
  			     "argument %u null where non-null expected "
  			     "because argument %u is nonzero",
  			     (unsigned) param_num,
  			     TREE_CODE (pctx->fntype) == METHOD_TYPE
! 			     ? (unsigned) pctx->other1 - 1
! 			     : (unsigned) pctx->other1);
        else
  	warned = warning_at (loc, OPT_Wnonnull,
  			     "argument %u null where non-null expected",
*************** check_nonnull_arg (void *ctx, tree param
*** 6039,6045 ****
  	inform (DECL_SOURCE_LOCATION (pctx->fndecl),
  		"in a call to function %qD declared %qs",
  		pctx->fndecl,
! 		pctx->other ? "nonnull_if_nonzero" : "nonnull");
      }
  
    if (warned)
--- 6080,6086 ----
  	inform (DECL_SOURCE_LOCATION (pctx->fndecl),
  		"in a call to function %qD declared %qs",
  		pctx->fndecl,
! 		pctx->other1 ? "nonnull_if_nonzero" : "nonnull");
      }
  
    if (warned)
*************** check_function_arguments (location_t loc
*** 6295,6301 ****
       to do this if format checking is enabled.  */
    if (warn_nonnull)
      {
!       nonnull_arg_ctx ctx = { loc, fndecl, fntype, 0, false };
        warned_p = check_function_nonnull (ctx, nargs, argarray);
      }
  
--- 6336,6342 ----
       to do this if format checking is enabled.  */
    if (warn_nonnull)
      {
!       nonnull_arg_ctx ctx = { loc, fndecl, fntype, 0, 0, false };
        warned_p = check_function_nonnull (ctx, nargs, argarray);
      }
  
diff -Nrcpad gcc-16-20250629/gcc/c-family/c-gimplify.cc gcc-16-20250706/gcc/c-family/c-gimplify.cc
*** gcc-16-20250629/gcc/c-family/c-gimplify.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c-family/c-gimplify.cc	Sun Jul  6 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 66,71 ****
--- 66,85 ----
      walk back up, we check that they fit our constraints, and copy them
      into temporaries if not.  */
  
+ 
+ /* Check whether TP is an address computation whose base is a call to
+    .ACCESS_WITH_SIZE.  */
+ 
+ static bool
+ is_address_with_access_with_size (tree tp)
+ {
+   if (TREE_CODE (tp) == POINTER_PLUS_EXPR
+       && (TREE_CODE (TREE_OPERAND (tp, 0)) == INDIRECT_REF)
+       && (is_access_with_size_p (TREE_OPERAND (TREE_OPERAND (tp, 0), 0))))
+ 	return true;
+   return false;
+ }
+ 
  /* Callback for c_genericize.  */
  
  static tree
*************** ubsan_walk_array_refs_r (tree *tp, int *
*** 121,126 ****
--- 135,154 ----
        walk_tree (&TREE_OPERAND (*tp, 1), ubsan_walk_array_refs_r, pset, pset);
        walk_tree (&TREE_OPERAND (*tp, 0), ubsan_walk_array_refs_r, pset, pset);
      }
+   else if (TREE_CODE (*tp) == INDIRECT_REF
+ 	   && is_address_with_access_with_size (TREE_OPERAND (*tp, 0)))
+     {
+       ubsan_maybe_instrument_array_ref (&TREE_OPERAND (*tp, 0), false);
+       /* Make sure ubsan_maybe_instrument_array_ref is not called again on
+ 	 the POINTER_PLUS_EXPR, so ensure it is not walked again and walk
+ 	 its subtrees manually.  */
+       tree aref = TREE_OPERAND (*tp, 0);
+       pset->add (aref);
+       *walk_subtrees = 0;
+       walk_tree (&TREE_OPERAND (aref, 0), ubsan_walk_array_refs_r, pset, pset);
+     }
+   else if (is_address_with_access_with_size (*tp))
+     ubsan_maybe_instrument_array_ref (tp, true);
    return NULL_TREE;
  }
  
diff -Nrcpad gcc-16-20250629/gcc/c-family/c-ubsan.cc gcc-16-20250706/gcc/c-family/c-ubsan.cc
*** gcc-16-20250629/gcc/c-family/c-ubsan.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/c-family/c-ubsan.cc	Sun Jul  6 22:32:10 2025
*************** ubsan_instrument_bounds (location_t loc,
*** 554,591 ****
  				       *index, bound);
  }
  
! /* Return true iff T is an array that was instrumented by SANITIZE_BOUNDS.  */
  
  bool
! ubsan_array_ref_instrumented_p (const_tree t)
  {
!   if (TREE_CODE (t) != ARRAY_REF)
      return false;
  
!   tree op1 = TREE_OPERAND (t, 1);
!   return TREE_CODE (op1) == COMPOUND_EXPR
! 	 && TREE_CODE (TREE_OPERAND (op1, 0)) == CALL_EXPR
! 	 && CALL_EXPR_FN (TREE_OPERAND (op1, 0)) == NULL_TREE
! 	 && CALL_EXPR_IFN (TREE_OPERAND (op1, 0)) == IFN_UBSAN_BOUNDS;
  }
  
! /* Instrument an ARRAY_REF, if it hasn't already been instrumented.
!    IGNORE_OFF_BY_ONE is true if the ARRAY_REF is inside a ADDR_EXPR.  */
  
  void
  ubsan_maybe_instrument_array_ref (tree *expr_p, bool ignore_off_by_one)
  {
    if (!ubsan_array_ref_instrumented_p (*expr_p)
        && sanitize_flags_p (SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT)
        && current_function_decl != NULL_TREE)
      {
!       tree op0 = TREE_OPERAND (*expr_p, 0);
!       tree op1 = TREE_OPERAND (*expr_p, 1);
!       tree e = ubsan_instrument_bounds (EXPR_LOCATION (*expr_p), op0, &op1,
! 					ignore_off_by_one);
        if (e != NULL_TREE)
! 	TREE_OPERAND (*expr_p, 1) = build2 (COMPOUND_EXPR, TREE_TYPE (op1),
! 					    e, op1);
      }
  }
  
--- 554,875 ----
  				       *index, bound);
  }
  
! 
! /* Instrument array bounds for the pointer array address which is
!    an INDIRECT_REF to the call to .ACCESS_WITH_SIZE.  We create special
!    builtin, that gets expanded in the sanopt pass, and make an array
!    dimention of it.  POINTER_ADDR is the pointer array's base address.
!    *INDEX is an index to the array.
!    IGNORE_OFF_BY_ONE is true if the POINTER_ADDR is not inside an
!    INDIRECT_REF.
!    Return NULL_TREE if no instrumentation is emitted.  */
! 
! tree
! ubsan_instrument_bounds_pointer_address (location_t loc, tree pointer_addr,
! 					 tree *index,
! 					 bool ignore_off_by_one)
! {
!   gcc_assert (TREE_CODE (pointer_addr) == INDIRECT_REF);
!   tree call = TREE_OPERAND (pointer_addr, 0);
!   if (!is_access_with_size_p (call))
!     return NULL_TREE;
!   tree bound = get_bound_from_access_with_size (call);
! 
!   if (ignore_off_by_one)
!     bound = fold_build2 (PLUS_EXPR, TREE_TYPE (bound), bound,
! 			 build_int_cst (TREE_TYPE (bound),
! 			 1));
! 
!   /* Don't emit instrumentation in the most common cases.  */
!   tree idx = NULL_TREE;
!   if (TREE_CODE (*index) == INTEGER_CST)
!     idx = *index;
!   else if (TREE_CODE (*index) == BIT_AND_EXPR
! 	   && TREE_CODE (TREE_OPERAND (*index, 1)) == INTEGER_CST)
!     idx = TREE_OPERAND (*index, 1);
!   if (idx
!       && TREE_CODE (bound) == INTEGER_CST
!       && tree_int_cst_sgn (idx) >= 0
!       && tree_int_cst_lt (idx, bound))
!     return NULL_TREE;
! 
!   *index = save_expr (*index);
! 
!   /* Create an array_type for the corresponding pointer array.  */
!   tree itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
!   /* The array's element type can be get from the return type of the call to
!      .ACCESS_WITH_SIZE.  */
!   tree element_type = TREE_TYPE (TREE_TYPE (TREE_TYPE (call)));
!   tree array_type = build_array_type (element_type, itype);
!   /* Create a "(T *) 0" tree node to describe the array type.  */
!   tree zero_with_type = build_int_cst (build_pointer_type (array_type), 0);
!   return build_call_expr_internal_loc (loc, IFN_UBSAN_BOUNDS,
! 				       void_type_node, 3, zero_with_type,
! 				       *index, bound);
! }
! 
! /* This structure is to combine a factor with its parent and its position
!  * in its parent tree.  */
! struct factor_t
! {
!   tree factor;
!   tree parent; /* the parent tree of this factor.  */
!   int pos;     /* the position of this factor in its parent tree.  */
! };
! 
! /* for a multiply expression like:
!     ((long unsigned int) m * (long unsigned int) SAVE_EXPR <n>) * 4
! 
!    locate all the factors, the parents of the factor and the position of
!    the factor in its parent, and put them to VEC_FACTORS.  */
! 
! static void
! get_factors_from_mul_expr (tree mult_expr, tree parent,
! 			   int pos, auto_vec<factor_t> *vec_factors)
! {
!   struct factor_t mult_factor = {0, 0, -1};
!   mult_factor.factor = mult_expr;
!   mult_factor.parent = parent;
!   mult_factor.pos = pos;
! 
!   while (CONVERT_EXPR_CODE_P (TREE_CODE (mult_expr)))
!     {
!       mult_factor.parent = mult_expr;
!       mult_factor.pos = 0;
!       mult_expr = TREE_OPERAND (mult_expr, 0);
!       mult_factor.factor = mult_expr;
!     }
!   if (TREE_CODE (mult_expr) != MULT_EXPR)
!     vec_factors->safe_push (mult_factor);
!   else
!     {
!       get_factors_from_mul_expr (TREE_OPERAND (mult_expr, 0), mult_expr,
! 				 0, vec_factors);
!       get_factors_from_mul_expr (TREE_OPERAND (mult_expr, 1), mult_expr,
! 				 1, vec_factors);
!     }
! }
! 
! /* Given an OFFSET expression, and the ELEMENT_SIZE,
!    get the index expression from OFFSET and return it.
!    For example:
!    OFFSET:
!     ((long unsigned int) m * (long unsigned int) SAVE_EXPR <n>) * 4
!    ELEMENT_SIZE:
!     (sizetype) SAVE_EXPR <n> * 4
!    get the index as (long unsigned int) m, and return it.
!    The INDEX_P holds the pointer to the parent tree of the index,
!    INDEX_N holds the position of the index in its parent.  */
! 
! static tree
! get_index_from_offset (tree offset, tree *index_p,
! 		       int *index_n, tree element_size)
! {
!   if (TREE_CODE (offset) != MULT_EXPR)
!     return NULL_TREE;
! 
!   auto_vec<factor_t> e_factors, o_factors;
!   get_factors_from_mul_expr (element_size, NULL, -1, &e_factors);
!   get_factors_from_mul_expr (offset, *index_p, *index_n, &o_factors);
! 
!   if (e_factors.is_empty () || o_factors.is_empty ())
!     return NULL_TREE;
! 
!   bool all_found = true;
!   for (unsigned i = 0; i < e_factors.length (); i++)
!     {
!       factor_t e_size_factor = e_factors[i];
!       bool found = false;
!       for (unsigned j = 0; j < o_factors.length ();)
! 	{
! 	  factor_t o_exp_factor = o_factors[j];
! 	  if (operand_equal_p (e_size_factor.factor, o_exp_factor.factor))
! 	    {
! 	      o_factors.unordered_remove (j);
! 	      found = true;
! 	      break;
! 	    }
! 	  else
! 	    j++;
! 	}
!       if (!found)
! 	all_found = false;
!     }
! 
!   if (!all_found)
!     return NULL_TREE;
! 
!   if (o_factors.length () != 1)
!     return NULL_TREE;
! 
!   *index_p = o_factors[0].parent;
!   *index_n = o_factors[0].pos;
!   return o_factors[0].factor;
! }
! 
! /* For an pointer + offset computation expression, such as,
!    *.ACCESS_WITH_SIZE (p->c, &p->b, 1, 0, -1, 0B)
!     + (sizetype) ((long unsigned int) index * 4
!    Return the index of this pointer array reference,
!    set the parent tree of INDEX to *INDEX_P.
!    set the operand position of the INDEX in the parent tree to *INDEX_N.
!    If failed, return NULL_TREE.  */
! 
! static tree
! get_index_from_pointer_addr_expr (tree pointer, tree *index_p, int *index_n)
! {
!   *index_p = NULL_TREE;
!   *index_n = -1;
!   if (TREE_CODE (TREE_OPERAND (pointer, 0)) != INDIRECT_REF)
!     return NULL_TREE;
!   tree call = TREE_OPERAND (TREE_OPERAND (pointer, 0), 0);
!   if (!is_access_with_size_p (call))
!     return NULL_TREE;
! 
!   /* Get the pointee type of the call to .ACCESS_WITH_SIZE.
!      This should be the element type of the pointer array.  */
!   tree pointee_type = TREE_TYPE (TREE_TYPE (TREE_TYPE (call)));
!   tree pointee_size = TYPE_SIZE_UNIT (pointee_type);
! 
!   tree index_exp = TREE_OPERAND (pointer, 1);
!   *index_p = pointer;
!   *index_n = 1;
! 
!   if (!(TREE_CODE (index_exp) != MULT_EXPR
! 	&& tree_int_cst_equal (pointee_size, integer_one_node)))
!     {
!       while (CONVERT_EXPR_CODE_P (TREE_CODE (index_exp)))
! 	{
! 	  *index_p = index_exp;
! 	  *index_n = 0;
! 	  index_exp = TREE_OPERAND (index_exp, 0);
! 	}
!       index_exp = get_index_from_offset (index_exp, index_p,
! 					 index_n, pointee_size);
! 
!       if (!index_exp)
!       return NULL_TREE;
!     }
! 
!   while (CONVERT_EXPR_CODE_P (TREE_CODE (index_exp)))
!     {
!       *index_p = index_exp;
!       *index_n = 0;
!       index_exp = TREE_OPERAND (index_exp, 0);
!     }
! 
!   return index_exp;
! }
! 
! /* Return TRUE when the EXPR is a pointer array address that could be
!    instrumented.
!    We only instrument an address computation similar as the following:
!       *.ACCESS_WITH_SIZE (p->c, &p->b, 1, 0, -1, 0B)
! 	+ (sizetype) ((long unsigned int) index * 4)
!    if the EXPR is instrumentable, return TRUE and
!    set the index to *INDEX.
!    set the *.ACCESS_WITH_SIZE to *BASE.
!    set the parent tree of INDEX to *INDEX_P.
!    set the operand position of the INDEX in the parent tree to INDEX_N.  */
! 
! static bool
! is_instrumentable_pointer_array_address (tree expr, tree *base,
! 					 tree *index, tree *index_p,
! 					 int *index_n)
! {
!   /* For a poiner array address as:
! 	(*.ACCESS_WITH_SIZE (p->c, &p->b, 1, 0, -1, 0B)
! 	  + (sizetype) ((long unsigned int) index * 4)
!      op0 is the call to *.ACCESS_WITH_SIZE;
!      op1 is the index.  */
!   if (TREE_CODE (expr) != POINTER_PLUS_EXPR)
!     return false;
! 
!   tree op0 = TREE_OPERAND (expr, 0);
!   if (TREE_CODE (op0) != INDIRECT_REF)
!     return false;
!   if (!is_access_with_size_p (TREE_OPERAND (op0, 0)))
!     return false;
!   tree op1 = get_index_from_pointer_addr_expr (expr, index_p, index_n);
!   if (op1 != NULL_TREE)
!     {
!       *base = op0;
!       *index = op1;
!       return true;
!     }
!   return false;
! }
! 
! /* Return true iff T is an array or an indirect reference that was
!    instrumented by SANITIZE_BOUNDS.  */
  
  bool
! ubsan_array_ref_instrumented_p (tree t)
  {
!   if (TREE_CODE (t) != ARRAY_REF
!       && TREE_CODE (t) != MEM_REF)
      return false;
  
!   bool is_array = (TREE_CODE (t) == ARRAY_REF);
!   tree op0 = NULL_TREE;
!   tree op1 = NULL_TREE;
!   tree index_p = NULL_TREE;
!   int index_n = 0;
!   if (is_array)
!     {
!       op1 = TREE_OPERAND (t, 1);
!       return TREE_CODE (op1) == COMPOUND_EXPR
! 	     && TREE_CODE (TREE_OPERAND (op1, 0)) == CALL_EXPR
! 	     && CALL_EXPR_FN (TREE_OPERAND (op1, 0)) == NULL_TREE
! 	     && CALL_EXPR_IFN (TREE_OPERAND (op1, 0)) == IFN_UBSAN_BOUNDS;
!     }
!   else if (is_instrumentable_pointer_array_address (t, &op0, &op1,
! 						    &index_p, &index_n))
!     return TREE_CODE (op1) == COMPOUND_EXPR
! 	   && TREE_CODE (TREE_OPERAND (op1, 0)) == CALL_EXPR
! 	   && CALL_EXPR_FN (TREE_OPERAND (op1, 0)) == NULL_TREE
! 	   && CALL_EXPR_IFN (TREE_OPERAND (op1, 0)) == IFN_UBSAN_BOUNDS;
! 
!   return false;
  }
  
! /* Instrument an ARRAY_REF or an address computation whose base address is
!    a call to .ACCESS_WITH_SIZE, if it hasn't already been instrumented.
!    IGNORE_OFF_BY_ONE is true if the ARRAY_REF is inside a ADDR_EXPR, or the
!    address computation is not inside a INDIRECT_REF.  */
  
  void
  ubsan_maybe_instrument_array_ref (tree *expr_p, bool ignore_off_by_one)
  {
+   tree e = NULL_TREE;
+   tree op0 = NULL_TREE;
+   tree op1 = NULL_TREE;
+   tree index_p = NULL_TREE;  /* the parent tree of INDEX.  */
+   int index_n = 0;  /* the operand position of INDEX in the parent tree.  */
+ 
    if (!ubsan_array_ref_instrumented_p (*expr_p)
        && sanitize_flags_p (SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT)
        && current_function_decl != NULL_TREE)
      {
!       if (TREE_CODE (*expr_p) == ARRAY_REF)
! 	{
! 	  op0 = TREE_OPERAND (*expr_p, 0);
! 	  op1 = TREE_OPERAND (*expr_p, 1);
! 	  index_p = *expr_p;
! 	  index_n = 1;
! 	  e = ubsan_instrument_bounds (EXPR_LOCATION (*expr_p), op0,
! 				       &op1, ignore_off_by_one);
! 	}
!       else if (is_instrumentable_pointer_array_address (*expr_p, &op0, &op1,
! 							&index_p, &index_n))
! 	e = ubsan_instrument_bounds_pointer_address (EXPR_LOCATION (*expr_p),
! 						     op0, &op1,
! 						     ignore_off_by_one);
! 
!       /* Replace the original INDEX with the instrumented INDEX.  */
        if (e != NULL_TREE)
! 	TREE_OPERAND (index_p, index_n)
! 	  = build2 (COMPOUND_EXPR, TREE_TYPE (op1), e, op1);
      }
  }
  
diff -Nrcpad gcc-16-20250629/gcc/cobol/ChangeLog gcc-16-20250706/gcc/cobol/ChangeLog
*** gcc-16-20250629/gcc/cobol/ChangeLog	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/ChangeLog	Sun Jul  6 22:32:10 2025
***************
*** 1,3 ****
--- 1,127 ----
+ 2025-07-01  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* Make-lang.in: Use && instead of semicolon between commands.
+ 
+ 2025-07-01  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* parse.y: printf() of size_t is %zu, not %ld.
+ 
+ 2025-06-30  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/120772
+ 	PR cobol/120779
+ 	PR cobol/120790
+ 	PR cobol/120791
+ 	PR cobol/120794
+ 	* gcobc: Supply -fPIC for shared objects.
+ 	* genapi.cc (linemap_add): Delete empty macro.
+ 	(parser_enter_file): Do not call linemap_add.
+ 	(parser_leave_file): Same.
+ 	* gengen.cc (location_from_lineno): Remove function.
+ 	* lexio.cc (parse_replacing_term): Allow empty term.
+ 	(cdftext::process_file): Always append to output.
+ 	(cdftext::segment_line): Output #line directives.
+ 	* lexio.h (struct span_t): Count lines in span.
+ 	* parse.y: Revamp REPOSITORY, and minor syntax extensions.
+ 	* parse_ante.h (input_file_status_notify): Update linemap filename before location.
+ 	(intrinsic_token_of): Declare.
+ 	(parser_move_carefully): Support MOVE pointer.
+ 	* parse_util.h (intrinsic_token_of): New function.
+ 	* scan.l: New EOF logic, accept NOT=, own yylloc and yylineno.
+ 	* scan_ante.h (class enter_leave_t): Do not store newline count.
+ 	(cdf_location_set): Remove declaration.
+ 	(ydfltype_of): New function.
+ 	(update_location): Accept location parameter.
+ 	(reset_location): New function.
+ 	(YY_USER_ACTION): Use update_location().
+ 	(YY_USER_INIT): Update CDF location.
+ 	(verify_ws): New function.
+ 	(wait_for_the_child): Removed.
+ 	* symbols.h (cobol_fileline_set): return line number.
+ 	* util.cc (valid_move): Use range-based for loop.
+ 	(struct input_file_t): Remove line_map pointer.
+ 	(class unique_stack): New peek() member function.
+ 	(cobol_lineno_save): Rename to overload cobol_lineno().
+ 	(cobol_lineno): Replaces cobol_lineno_save().
+ 	(cobol_filename): Return void.
+ 	(location_from_lineno): New function used by genapi.cc.
+ 	(cdf_location_set): Remove.
+ 	(matched_length): No change.
+ 	(cobol_fileline_set): Return line number.
+ 	(fisspace): Remove extra semicolon.
+ 	(fisprint): Same.
+ 	* util.h (cobol_filename_restore): Return void.
+ 	(cobol_lineno_save): Remove declaration.
+ 	(cobol_lineno): Declare.
+ 
+ 2025-06-29  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* Make-lang.in: Incorporate gcobol.clean.
+ 	* except.cc (cbl_enabled_exceptions_t::dump): Update debug message.
+ 	* genapi.cc (gg_attribute_bit_get): Formatting.
+ 	(file_static_variable): Formatting.
+ 	(trace1_init): Formatting.
+ 	(build_main_that_calls_something): Normalize function_decl use.
+ 	(parser_call_target): Likewise.
+ 	(set_call_convention): Likewise.
+ 	(parser_call_target_convention): Likewise.
+ 	(parser_call_targets_dump): Likewise.
+ 	(function_handle_from_name): Likewise.
+ 	(function_pointer_from_name): Likewise.
+ 	(parser_initialize_programs): Likewise.
+ 	(parser_statement_begin): Formatting.
+ 	(parser_leave_file): Use function_decl FIFO.
+ 	(enter_program_common): Normalize function_decl use.
+ 	(parser_enter_program): Normalize function_decl use.
+ 	(tree_type_from_field_type): Normalize function_decl use.
+ 	(is_valuable): Comment.
+ 	(pe_stuff): Change name to program_end_stuff.
+ 	(program_end_stuff): Likewise.
+ 	(parser_exit): Likewise.
+ 	(parser_division): Normalize function_decl use.
+ 	(create_and_call): Normalize function_decl use.
+ 	(parser_call): Normalize function_decl use.
+ 	(parser_set_pointers): Normalize function_decl use.
+ 	(parser_program_hierarchy): Normalize function_decl use.
+ 	(psa_FldLiteralA): Defeat attempt to re-use literals. (Fails on some aarch64).
+ 	(parser_symbol_add): Error message formatting.
+ 	* genapi.h: Formatting.
+ 	* gengen.cc (struct cbl_translation_unit_t): Add function_decl FIFO.
+ 	(show_type): Rename to gg_show_type.
+ 	(gg_show_type): Correct an error message.
+ 	(gg_assign): Formatting; change error handling.
+ 	(gg_modify_function_type): Normalize function_decl use.
+ 	(gg_define_function_with_no_parameters): Fold into gg_defint_function().
+ 	(function_decl_key): Normalize function_decl use.
+ 	(gg_peek_fn_decl): Normalize function_decl use.
+ 	(gg_build_fn_decl): Normalize function_decl use.
+ 	(gg_define_function): Normalize function_decl use.
+ 	(gg_tack_on_function_parameters): Remove.
+ 	(gg_finalize_function): Normalize function_decl use.
+ 	(gg_leaving_the_source_code_file): Normalize function_decl use.
+ 	(gg_call_expr_list): Normalize function_decl use.
+ 	(gg_trans_unit_var_decl): Normalize function_decl use.
+ 	(gg_insert_into_assemblerf): New function; formatting.
+ 	* gengen.h (struct gg_function_t): Eliminate "is_truly_nested" flag.
+ 	(gg_assign): Incorporate return value.
+ 	(gg_define_function): Normalize function_decl use.
+ 	(gg_define_function_with_no_parameters): Eliminate.
+ 	(gg_build_fn_decl): Normalize function_decl use.
+ 	(gg_peek_fn_decl): Normalize function_decl use.
+ 	(gg_modify_function_type): Normalize function_decl use.
+ 	(gg_call_expr_list): Normalize function_decl use.
+ 	(gg_get_function_decl): Normalize function_decl use.
+ 	(location_from_lineno): Prefix with "extern".
+ 	(gg_open): Likewise.
+ 	(gg_close): Likewise.
+ 	(gg_get_indirect_reference): Likewise.
+ 	(gg_insert_into_assembler): Likewise.
+ 	(gg_insert_into_assemblerf): Likewise.
+ 	(gg_show_type): New declaration.
+ 	(gg_leaving_the_source_code_file): New declaration.
+ 	* parse.y: Format debugging message.
+ 	* parse_ante.h: Normalize function_decl use.
+ 
  2025-06-20  James K. Lowden  <jklowden@cobolworx.com>
  
  	PR cobol/120621
diff -Nrcpad gcc-16-20250629/gcc/cobol/Make-lang.in gcc-16-20250706/gcc/cobol/Make-lang.in
*** gcc-16-20250629/gcc/cobol/Make-lang.in	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/Make-lang.in	Sun Jul  6 22:32:10 2025
*************** cobol.install-common: installdirs
*** 287,293 ****
  	    rm -f $(DESTDIR)$(bindir)/$(GCOBOL_TARGET_INSTALL_NAME)$(exeext); \
  	    rm -f $(DESTDIR)$(bindir)/$(GCOBC_TARGET_INSTALL_NAME)$(exeext); \
  	    ( cd $(DESTDIR)$(bindir) && \
! 	      $(LN) $(GCOBOL_INSTALL_NAME)$(exeext) $(GCOBOL_TARGET_INSTALL_NAME)$(exeext) ); \
  	      $(LN) $(GCOBC_INSTALL_NAME)$(exeext) $(GCOBC_TARGET_INSTALL_NAME)$(exeext) ); \
  	  fi; \
  	fi
--- 287,293 ----
  	    rm -f $(DESTDIR)$(bindir)/$(GCOBOL_TARGET_INSTALL_NAME)$(exeext); \
  	    rm -f $(DESTDIR)$(bindir)/$(GCOBC_TARGET_INSTALL_NAME)$(exeext); \
  	    ( cd $(DESTDIR)$(bindir) && \
! 	      $(LN) $(GCOBOL_INSTALL_NAME)$(exeext) $(GCOBOL_TARGET_INSTALL_NAME)$(exeext) && \
  	      $(LN) $(GCOBC_INSTALL_NAME)$(exeext) $(GCOBC_TARGET_INSTALL_NAME)$(exeext) ); \
  	  fi; \
  	fi
diff -Nrcpad gcc-16-20250629/gcc/cobol/gcobc gcc-16-20250706/gcc/cobol/gcobc
*** gcc-16-20250629/gcc/cobol/gcobc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/gcobc	Sun Jul  6 22:32:10 2025
***************
*** 35,40 ****
--- 35,44 ----
  ##    output set the mode variable.  Everything else is appended to the
  ##    opts variable.
  ##
+ ##  - -fPIC is added to the command line if $mode is "-shared".  That
+ ##    option applies only to "certain machines", per the gcc info
+ ##    manual. For this script to be portable across machines, -fPIC
+ ##    would have to be set more judiciously.
  
  if [ "$COBCPY" ]
  then
*************** do
*** 478,489 ****
  
          *) if [ -z "$output_name" ]  # first non-option argument is source file name
             then
!                output_name=$(basename ${opt%.*})
                 case $mode in
                     -c) output_name="$output_name".o
                         ;;
                     -shared)
                         output_name="$output_name".so
                         ;;
                 esac
                 opts="$opts -o $output_name"
--- 482,494 ----
  
          *) if [ -z "$output_name" ]  # first non-option argument is source file name
             then
!                output_name=$(basename "${opt%.*}")
                 case $mode in
                     -c) output_name="$output_name".o
                         ;;
                     -shared)
                         output_name="$output_name".so
+                        opts="$opts -fPIC"
                         ;;
                 esac
                 opts="$opts -o $output_name"
diff -Nrcpad gcc-16-20250629/gcc/cobol/genapi.cc gcc-16-20250706/gcc/cobol/genapi.cc
*** gcc-16-20250629/gcc/cobol/genapi.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/genapi.cc	Sun Jul  6 22:32:10 2025
*************** parser_first_statement( int lineno )
*** 3635,3642 ****
      }
    }
  
- #define linemap_add(...)
- 
  void
  parser_enter_file(const char *filename)
    {
--- 3635,3640 ----
*************** parser_enter_file(const char *filename)
*** 3668,3676 ****
        }
      }
  
-   // Let the linemap routine know we are working on a new file:
-   linemap_add(line_table, LC_ENTER, 0, filename, 1);
- 
    if( file_level == 0 )
      {
      // Build a translation_unit_decl:
--- 3666,3671 ----
*************** parser_leave_file()
*** 3750,3759 ****
      SHOW_PARSE_TEXT(ach)
      SHOW_PARSE_END
      }
-   if( file_level > 0)
-     {
-     linemap_add(line_table, LC_LEAVE, false, NULL, 0);
-     }
    file_level -= 1;
    current_filename.pop_back();
  
--- 3745,3750 ----
diff -Nrcpad gcc-16-20250629/gcc/cobol/gengen.cc gcc-16-20250706/gcc/cobol/gengen.cc
*** gcc-16-20250629/gcc/cobol/gengen.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/gengen.cc	Sun Jul  6 22:32:10 2025
*************** gg_append_var_decl(tree var_decl)
*** 265,278 ****
      }
    }
  
- location_t
- location_from_lineno()
-   {
-   location_t loc;
-   loc = linemap_line_start(line_table, sv_current_line_number, 0);
-   return loc;
-   }
- 
  void
  gg_append_statement(tree stmt)
    {
--- 265,270 ----
diff -Nrcpad gcc-16-20250629/gcc/cobol/lexio.cc gcc-16-20250706/gcc/cobol/lexio.cc
*** gcc-16-20250629/gcc/cobol/lexio.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/lexio.cc	Sun Jul  6 22:32:10 2025
*************** update_yylloc( const csub_match& stmt, c
*** 535,541 ****
  
  static replacing_term_t
  parse_replacing_term( const char *stmt, const char *estmt ) {
!   gcc_assert(stmt); gcc_assert(estmt); gcc_assert(stmt < estmt);
    replacing_term_t output(stmt);
  
    static const char pattern[] =
--- 535,541 ----
  
  static replacing_term_t
  parse_replacing_term( const char *stmt, const char *estmt ) {
!   gcc_assert(stmt); gcc_assert(estmt); gcc_assert(stmt <= estmt);
    replacing_term_t output(stmt);
  
    static const char pattern[] =
*************** void
*** 1830,1836 ****
  cdftext::process_file( filespan_t mfile, int output, bool second_pass ) {
    static size_t nfiles = 0;
  
!   __gnu_cxx::stdio_filebuf<char> outbuf(fdopen(output, "w"), std::ios::out);
    std::ostream out(&outbuf);
    std::ostream_iterator<char> ofs(out);
  
--- 1830,1836 ----
  cdftext::process_file( filespan_t mfile, int output, bool second_pass ) {
    static size_t nfiles = 0;
  
!   __gnu_cxx::stdio_filebuf<char> outbuf(fdopen(output, "a"), std::ios::out);
    std::ostream out(&outbuf);
    std::ostream_iterator<char> ofs(out);
  
*************** cdftext::process_file( filespan_t mfile,
*** 1893,1904 ****
        continue; // No active REPLACE directive.
      }
  
-     // 1 segment for COPY, 2 for REPLACE
      std::list<span_t> segments = segment_line(mfile);
  
      for( const auto& segment : segments ) {
        std::copy(segment.p, segment.pend, ofs);
      }
      out.flush();
    }
    // end of file
--- 1893,1904 ----
        continue; // No active REPLACE directive.
      }
  
      std::list<span_t> segments = segment_line(mfile);
  
      for( const auto& segment : segments ) {
        std::copy(segment.p, segment.pend, ofs);
      }
+ 
      out.flush();
    }
    // end of file
*************** cdftext::segment_line( filespan_t& mfile
*** 1922,1933 ****
--- 1922,1951 ----
      return output;
    }
  
+   /*
+    * If the replacement changes the number of lines in the replaced text, we
+    * need to reset the line number, because the next statement is on a
+    * different line in the manipulated text than in the original.  Before each
+    * replacement, set the original line number.  After each replacement, set
+    * the line number after the elided text on the next line.
+    */
    for( const replace_t& segment : pending ) {
      gcc_assert(mfile.cur <= segment.before.p);
      gcc_assert(segment.before.pend <= mfile.eodata);
  
+     struct { unsigned long ante, post; } lineno = {
+       gb4(mfile.lineno()), gb4(mfile.lineno() + segment.after.nlines())
+     };
+     char *directive = lineno.ante == lineno.post?
+       nullptr : xasprintf("\n#line %lu \"%s\"\n",
+                           lineno.ante, cobol_filename());
+ 
+     if( directive ) 
+       output.push_back( span_t(strlen(directive), directive) );
      output.push_back( span_t(mfile.cur, segment.before.p) );
      output.push_back( span_t(segment.after.p, segment.after.pend ) );
+     if( directive ) 
+       output.push_back( span_t(strlen(directive), directive) );
  
      mfile.cur = const_cast<char*>(segment.before.pend);
    }
*************** cdftext::segment_line( filespan_t& mfile
*** 1943,1947 ****
  
    return output;
  }
- 
- //////// End of the cdf_text.h file
--- 1961,1963 ----
diff -Nrcpad gcc-16-20250629/gcc/cobol/lexio.h gcc-16-20250706/gcc/cobol/lexio.h
*** gcc-16-20250629/gcc/cobol/lexio.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/lexio.h	Sun Jul  6 22:32:10 2025
*************** struct span_t {
*** 235,240 ****
--- 235,242 ----
  
    int size() const { return pend - p; }
  
+   size_t nlines() const { return p && pend? std::count(p, pend, '\n') : 0; }
+ 
    span_t dup() const {
      auto  output = new char[size() + 1];
      auto eout = std::copy(p, pend, output);
*************** struct span_t {
*** 245,250 ****
--- 247,259 ----
      auto p = std::find(this->p, pend, '\0');
      return p != pend? p : NULL;
    }
+ 
+   bool at_eol() const {
+     return p < pend && '\n' == pend[-1];
+   }
+   const char * optional_eol() const {
+     return at_eol() ? "" : "\n";
+   }
  };
  
  struct replace_t {
diff -Nrcpad gcc-16-20250629/gcc/cobol/parse.y gcc-16-20250706/gcc/cobol/parse.y
*** gcc-16-20250629/gcc/cobol/parse.y	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/parse.y	Sun Jul  6 22:32:10 2025
***************
*** 692,698 ****
  %type   <string>        fd_name picture_sym name66 paragraph_name
  %type   <literal>       literalism
  %type   <number>        bound advance_when org_clause1 read_next
! %type   <number>        access_mode multiple lock_how lock_mode
  %type   <select_clauses> select_clauses
  %type   <select_clause> select_clause  access_clause alt_key_clause
                          assign_clause collate_clause status_clause
--- 692,698 ----
  %type   <string>        fd_name picture_sym name66 paragraph_name
  %type   <literal>       literalism
  %type   <number>        bound advance_when org_clause1 read_next
! %type   <number>        access_mode multiple lock_how lock_mode org_is
  %type   <select_clauses> select_clauses
  %type   <select_clause> select_clause  access_clause alt_key_clause
                          assign_clause collate_clause status_clause
***************
*** 831,836 ****
--- 831,839 ----
  %type	<opt_arith>	opt_arith_type
  %type	<module_type>	module_type
  
+ %type   <nameloc>       repo_func_name                        
+ %type   <namelocs>      repo_func_names
+ 
  %union {
      bool boolean;
      int number;
***************
*** 840,845 ****
--- 843,850 ----
      cbl_field_attr_t field_attr;
      ec_type_t ec_type;
      ec_list_t* ec_list;
+     cbl_nameloc_t  *nameloc;
+     cbl_namelocs_t *namelocs;
             declarative_list_t* dcl_list_t;
             isym_list_t* isym_list;
      struct { radix_t radix; char *string; } numstr;
*************** org_clause:     org_clause1[org]
*** 2193,2206 ****
                    $$.file->org = static_cast<cbl_file_org_t>($org);
                  }
                  ;
! org_is:         %empty
!         |       ORGANIZATION is
                  ;
                  // file_sequential is the proper default
! org_clause1:    org_is      SEQUENTIAL { $$ = file_sequential_e; }
!         |       org_is LINE SEQUENTIAL { $$ = file_line_sequential_e; }
!         |       org_is      RELATIVE   { $$ = file_relative_e; }
!         |       org_is      INDEXED    { $$ = file_indexed_e; }
                  ;
  
                  /*
--- 2198,2225 ----
                    $$.file->org = static_cast<cbl_file_org_t>($org);
                  }
                  ;
! org_is:         %empty                 { $$ = 0; }
!         |       ORGANIZATION is        { $$ = 0; }
!         |       ORGANIZATION is RECORD { $$ = RECORD; }
!         |                       RECORD { $$ = RECORD; }
                  ;
                  // file_sequential is the proper default
! org_clause1:    org_is      SEQUENTIAL {
!                   $$ = $1 == RECORD? file_line_sequential_e : file_sequential_e;
!                 }
!         |       org_is LINE SEQUENTIAL
!                 {
!                   if( $1 ) error_msg(@2, "syntax error: invalid %<RECORD%>");
!                   $$ = file_line_sequential_e;
!                 }
!         |       org_is      RELATIVE {
!                   if( $1 ) error_msg(@2, "syntax error: invalid %<RECORD%>");
!                   $$ = file_relative_e;
!                 }
!         |       org_is      INDEXED    { 
!                   if( $1 ) error_msg(@2, "syntax error: invalid %<RECORD%>");
!                   $$ = file_indexed_e;
!                 }
                  ;
  
                  /*
*************** repo_expands:   %empty
*** 2328,2365 ****
  repo_interface: INTERFACE NAME repo_as repo_expands
                  ;
  
! repo_func:      FUNCTION repo_func_names INTRINSIC
!                 {
! 		  auto namelocs( name_queue.pop() );
!                   for( const auto& nameloc : namelocs ) {
!                       current.repository_add(nameloc.name);
                    }
                  }
          |       FUNCTION ALL INTRINSIC
                  {
                    current.repository_add_all();
                  }
!         |       FUNCTION repo_func_names
!                 ;
! repo_func_names:
!                 repo_func_name
!         |       repo_func_names repo_func_name
!                 ;
! repo_func_name: NAME {
!                   if( ! current.repository_add($NAME) ) { // add intrinsic by name
!                     auto token = current.udf_in($NAME);
                      if( !token ) {
!                       error_msg(@NAME, "%s is not defined here as a user-defined function",
!                                 $NAME);
!                       current.udf_dump();
!                       YYERROR;
                      }
!                     auto e = symbol_function(0, $NAME);
                      assert(e);
                      current.repository_add(symbol_index(e)); // add UDF to repository
                    }
                  }
                  ;
  
  repo_program:   PROGRAM_kw NAME repo_as
                  {
--- 2347,2407 ----
  repo_interface: INTERFACE NAME repo_as repo_expands
                  ;
  
! repo_func:      FUNCTION repo_func_names[namelocs] INTRINSIC {
!                   for( const auto& nameloc : *$namelocs ) {
!                     if( 0 == intrinsic_token_of(nameloc.name) ) {
!                       error_msg(nameloc.loc,
!                                 "no such intrinsic function: %qs",
!                                 nameloc.name);
!                       continue;
!                     }
!                     current.repository_add(nameloc.name);
                    }
                  }
          |       FUNCTION ALL INTRINSIC
                  {
                    current.repository_add_all();
                  }
!         |       FUNCTION repo_func_names[namelocs] {
! 		  // We allow multiple names because GnuCOBOL does.  ISO says 1.
!                   for( const auto& nameloc : *$namelocs ) {
!                     if( 0 != intrinsic_token_of(nameloc.name) ) {
!                       error_msg(nameloc.loc,
!                                 "intrinsic function %qs requires INTRINSIC",
!                                 nameloc.name);
!                       continue;
!                     }
!                     auto token = current.udf_in(nameloc.name);
                      if( !token ) {
!                       error_msg(nameloc.loc, 
!                                 "%s is not defined here as a user-defined function",
!                                 nameloc.name);
!                       continue;
                      }
!                     auto e = symbol_function(0, nameloc.name);
                      assert(e);
                      current.repository_add(symbol_index(e)); // add UDF to repository
                    }
                  }
                  ;
+ repo_func_names:
+                 repo_func_name[name] {
+                   $$ = new cbl_namelocs_t(1, *$name);
+                   delete $name;
+                 }
+         |       repo_func_names repo_func_name[name] {
+                   $$ = $1;
+                   $$->push_back(*$name);
+                   delete $name;
+                 }
+                 ;
+ repo_func_name: NAME repo_as {
+                   if( ! $repo_as.empty() ) {
+                     cbl_unimplemented_at(@repo_as, "%qs", $repo_as.data);
+                   }
+                   $$ = new cbl_nameloc_t(@NAME, $NAME);
+                 }
+                 ;
  
  repo_program:   PROGRAM_kw NAME repo_as
                  {
*************** eval_abbrs:	rel_term[a] {
*** 6383,6399 ****
  		  auto& ev( eval_stack.current() );
  		  auto subj( ev.subject() );
  		  if( !subj ) {
! 		    error_msg(@1, "WHEN %s phrase exceeds "
  			     "subject set count of %zu",
! 			     $a.term->name(), ev.subject_count());
  		    YYERROR;
  		  }
  		  if( ! ev.compatible($a.term->field) ) {
  		    auto obj($a.term->field);
  		    error_msg(@1, "subject %s, type %s, "
! 			     "cannot be compared %s, type %s",
! 			     subj->name, 3 + cbl_field_type_str(subj->type),
! 			     obj->name,	 3 + cbl_field_type_str(obj->type) );
  		  }
  		  auto result = ev.compare(*$a.term);
  		  if( ! result ) YYERROR;
--- 6425,6441 ----
  		  auto& ev( eval_stack.current() );
  		  auto subj( ev.subject() );
  		  if( !subj ) {
! 		    error_msg(@1, "WHEN %qs phrase exceeds "
  			     "subject set count of %zu",
!                               nice_name_of($a.term->field), ev.subject_count());
  		    YYERROR;
  		  }
  		  if( ! ev.compatible($a.term->field) ) {
  		    auto obj($a.term->field);
  		    error_msg(@1, "subject %s, type %s, "
!                               "cannot be compared %s, type %s",
!                               subj->name, 3 + cbl_field_type_str(subj->type),
! 			      obj->name,  3 + cbl_field_type_str(obj->type) );
  		  }
  		  auto result = ev.compare(*$a.term);
  		  if( ! result ) YYERROR;
*************** current_t::repository_add( const char na
*** 11850,11856 ****
    assert( !programs.empty() );
    function_descr_t arg = function_descr_t::init(name);
    auto parg = std::find( function_descrs, function_descrs_end, arg );
!   if( parg == function_descrs_end ) return false;
    auto p = programs.top().function_repository.insert(*parg);
    if( yydebug ) {
      for( auto descr : programs.top().function_repository ) {
--- 11892,11901 ----
    assert( !programs.empty() );
    function_descr_t arg = function_descr_t::init(name);
    auto parg = std::find( function_descrs, function_descrs_end, arg );
!   if( parg == function_descrs_end ) {
!     dbgmsg("%s:%d: no intrinsic %s found", __func__, __LINE__, name);
!     return false;
!   }
    auto p = programs.top().function_repository.insert(*parg);
    if( yydebug ) {
      for( auto descr : programs.top().function_repository ) {
*************** numstr2i( const char input[], radix_t ra
*** 12359,12365 ****
      return output;
    }
    if( erc == -1 ) {
!     yywarn("'%s' was accepted as %ld", input, integer);
    }
    return output;
  }
--- 12404,12410 ----
      return output;
    }
    if( erc == -1 ) {
!     yywarn("'%s' was accepted as %zu", input, integer);
    }
    return output;
  }
diff -Nrcpad gcc-16-20250629/gcc/cobol/parse_ante.h gcc-16-20250706/gcc/cobol/parse_ante.h
*** gcc-16-20250629/gcc/cobol/parse_ante.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/parse_ante.h	Sun Jul  6 22:32:10 2025
*************** void input_file_status_notify();
*** 102,109 ****
            (Current).last_column  = YYRHSLOC (Rhs, 0).last_column;       \
          }                                                               \
        location_dump("parse.c", __LINE__, "current", (Current));         \
-       gcc_location_set( location_set(Current) );                        \
        input_file_status_notify();                                       \
    } while (0)
  
  int yylex(void);
--- 102,109 ----
            (Current).last_column  = YYRHSLOC (Rhs, 0).last_column;       \
          }                                                               \
        location_dump("parse.c", __LINE__, "current", (Current));         \
        input_file_status_notify();                                       \
+       gcc_location_set( location_set(Current) );                        \
    } while (0)
  
  int yylex(void);
*************** in_file_section(void) { return current_d
*** 210,215 ****
--- 210,218 ----
  static cbl_refer_t *
  intrinsic_inconsistent_parameter( size_t n, cbl_refer_t *args );
  
+ static int
+ intrinsic_token_of( const char name[] );
+ 
  static inline bool
  namcpy(const YYLTYPE& loc, cbl_name_t tgt, const char *src ) {
    // snprintf(3): writes at most size bytes (including the terminating NUL byte)
*************** parser_move_carefully( const char */*F*/
*** 3220,3225 ****
--- 3223,3233 ----
        }
      } else {
        if( ! valid_move( tgt.field, src.field ) ) {
+         if( src.field->type == FldPointer &&
+             tgt.field->type == FldPointer ) {
+           if( dialect_mf() || dialect_gnu() ) return true;
+           dialect_error(src.loc, "MOVE POINTER", "mf");
+         }
          if( ! is_index ) {
            char ach[16];
            char stype[32];
*************** parser_move_carefully( const char */*F*/
*** 3245,3251 ****
              sprintf(ach, ".%d", tgt.field->data.rdigits);
              strcat(dtype, ach);
              }
- 
            error_msg(src.loc,  "cannot MOVE '%s' (%s) to '%s' (%s)",
                      name_of(src.field), stype,
                      name_of(tgt.field), dtype);
--- 3253,3258 ----
diff -Nrcpad gcc-16-20250629/gcc/cobol/parse_util.h gcc-16-20250706/gcc/cobol/parse_util.h
*** gcc-16-20250629/gcc/cobol/parse_util.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/parse_util.h	Sun Jul  6 22:32:10 2025
*************** class cname_cmp {
*** 283,288 ****
--- 283,297 ----
    }
  };
  
+ static int
+ intrinsic_token_of( const char name[] ) {
+   auto pdescr = std::find_if( function_descrs, function_descrs_end,
+                               [name]( const function_descr_t& descr ) {
+                                 return 0 == strcmp(name, descr.name);
+                               } );
+   return pdescr == function_descrs_end? 0 : pdescr->token;
+ }
+ 
  /*
   * For variadic intrinsic functions, ensure all parameters are commensurate.
   * Return pointer in 1st inconsistent parameter type.
diff -Nrcpad gcc-16-20250629/gcc/cobol/scan.l gcc-16-20250706/gcc/cobol/scan.l
*** gcc-16-20250629/gcc/cobol/scan.l	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/scan.l	Sun Jul  6 22:32:10 2025
*************** BLANK_EOL   [[:blank:]]*{EOL}
*** 88,94 ****
  BLANK_OEOL  [[:blank:]]*{EOL}?
  
  
! DOTSEP    [.][[:space:]]
  DOTEOL    [[:blank:]]*[.]{BLANK_EOL}
  
  SKIP	  [[:blank:]]*SKIP[123][[:blank:]]*[.]?{BLANK_EOL}
--- 88,94 ----
  BLANK_OEOL  [[:blank:]]*{EOL}?
  
  
! DOTSEP    [.]+[[:space:]]
  DOTEOL    [[:blank:]]*[.]{BLANK_EOL}
  
  SKIP	  [[:blank:]]*SKIP[123][[:blank:]]*[.]?{BLANK_EOL}
*************** NL       [[:blank:]]*\r?\n[[:blank:]]*
*** 178,184 ****
  
  PUSH_FILE \f?[#]FILE{SPC}PUSH{SPC}[^\f]+\f
  POP_FILE  \f?[#]FILE{SPC}POP\f
! LINE_DIRECTIVE [#]line{SPC}[[:alnum:]]+{SPC}[""''].+\n
  
  %x procedure_div ident_state addr_of function classify
  %x program_id_state comment_entries
--- 178,184 ----
  
  PUSH_FILE \f?[#]FILE{SPC}PUSH{SPC}[^\f]+\f
  POP_FILE  \f?[#]FILE{SPC}POP\f
! LINE_DIRECTIVE ^[#]line{SPC}[[:alnum:]]+{SPC}[""''].+\n
  
  %x procedure_div ident_state addr_of function classify
  %x program_id_state comment_entries
*************** PROCEDURE{SPC}DIVISION	{ yy_push_state(p
*** 272,277 ****
--- 272,278 ----
  }
  
  <ident_state>{
+   ID(ENTIFICATION)?{SPC}DIVISION	{ myless(0); yy_pop_state(); }
    AS{SPC}[""] 	{ yy_push_state(quoted2); return AS; }
    AS{SPC}[''] 	{ yy_push_state(quoted1); return AS; }
    IS		{ pop_return IS; }
*************** CENTER		{
*** 328,333 ****
--- 329,343 ----
  		  return typed_name(yytext);
  		}
  
+ 	/* figurative constants that are otherwise matched as names */
+ 
+ ZEROE?S?/{OSPC}{DOTSEP}		{ return ZERO; }
+ SPACES?/{OSPC}{DOTSEP}		{ yylval.string = NULL; return SPACES; }
+ QUOTES?/{OSPC}{DOTSEP}		{ return QUOTES; }
+ NULLS?/{OSPC}{DOTSEP}		{ return NULLS; }
+ LOW-VALUES?/{OSPC}{DOTSEP}	{ return LOW_VALUES; }
+ HIGH-VALUES?/{OSPC}{DOTSEP}	{ return HIGH_VALUES; }
+ 
  BINARY				{ return BINARY; }
  CLASSIFICATION			{ return CLASSIFICATION; }
  CYCLE				{ return CYCLE; }
*************** ANUM            { return ANUM; }
*** 858,865 ****
  ALTERNATE	{ return ALTERNATE; }
  ALTER		{ return ALTER; }
  ALSO		{ return ALSO; }
! ALPHABET	{ return ALPHABET; }
! ALPHABETIC	{ return ALPHABETIC; }
  ALPHABETIC-LOWER	{ return ALPHABETIC_LOWER; }
  ALPHABETIC-UPPER	{ return ALPHABETIC_UPPER; }
  ALPHANUMERIC            { return ALPHANUMERIC; }
--- 868,876 ----
  ALTERNATE	{ return ALTERNATE; }
  ALTER		{ return ALTER; }
  ALSO		{ return ALSO; }
! 
! ALPHABET		{ return ALPHABET; }
! ALPHABETIC		{ return ALPHABETIC; }
  ALPHABETIC-LOWER	{ return ALPHABETIC_LOWER; }
  ALPHABETIC-UPPER	{ return ALPHABETIC_UPPER; }
  ALPHANUMERIC            { return ALPHANUMERIC; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1394,1403 ****
  <name_state>{
    ^[[:blank:]]+
    ^{BLANK_EOL}
    {NAME}/{OSPC}[.]	{ yy_pop_state();
      			  yylval.string = xstrdup(yytext); return NAME; }
-   {NAME} 		{ yy_pop_state();
-     			  yylval.string = xstrdup(yytext); return NAME; }
  
    Z?['']                { yylval.literal.set_prefix(yytext, yyleng-1);
  			  yy_push_state(quoted1); }
--- 1405,1413 ----
  <name_state>{
    ^[[:blank:]]+
    ^{BLANK_EOL}
+   {NAME}		|
    {NAME}/{OSPC}[.]	{ yy_pop_state();
      			  yylval.string = xstrdup(yytext); return NAME; }
  
    Z?['']                { yylval.literal.set_prefix(yytext, yyleng-1);
  			  yy_push_state(quoted1); }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1501,1511 ****
    {GREATER_THAN}{SPC}{OR_EQUAL}/[[:space:]]	{ return GE; }
    {GREATER_THAN}			{ return '>'; }
  
!   {ISNT}{SPC}">="        { return '<'; }
!   {ISNT}{SPC}">"         { return LE;  }
!   {ISNT}{SPC}"="         { return NE;  }
!   {ISNT}{SPC}"<"         { return GE;  }
!   {ISNT}{SPC}"<="        { return '>'; }
  
    {ISNT}{SPC}GREATER{SPC}(THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '<'; }
    {ISNT}{SPC}GREATER{SPC}(THAN)?	{ return LE; }
--- 1511,1521 ----
    {GREATER_THAN}{SPC}{OR_EQUAL}/[[:space:]]	{ return GE; }
    {GREATER_THAN}			{ return '>'; }
  
!   {ISNT}{OSPC}">="        { verify_ws(yytext[yyleng - 3]); return '<'; }
!   {ISNT}{OSPC}">"         { verify_ws(yytext[yyleng - 2]); return LE;  }
!   {ISNT}{OSPC}"="         { verify_ws(yytext[yyleng - 2]); return NE;  }
!   {ISNT}{OSPC}"<"         { verify_ws(yytext[yyleng - 2]); return GE;  }
!   {ISNT}{OSPC}"<="        { verify_ws(yytext[yyleng - 3]); return '>'; }
  
    {ISNT}{SPC}GREATER{SPC}(THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '<'; }
    {ISNT}{SPC}GREATER{SPC}(THAN)?	{ return LE; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1513,1525 ****
    {ISNT}{SPC}LESS{SPC}(THAN)?		{ return GE; }
    {ISNT}{SPC}LESS{SPC}(THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '>'; }
  
!   [*]{2}{SPC}[+]	{ return POW; }
!   "**"        		{ return POW; }
  }
  
  <procedure_div>{
    (ID|IDENTIFICATION|ENVIRONMENT|DATA|PROCEDURE){SPC}DIVISION  {
! 			    myless(0); yy_pop_state(); }
  
    EXIT{SPC}/(PROGRAM|SECTION|PARAGRAPH|PERFORM) {
  			  return EXIT; }
--- 1523,1557 ----
    {ISNT}{SPC}LESS{SPC}(THAN)?		{ return GE; }
    {ISNT}{SPC}LESS{SPC}(THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '>'; }
  
!   [*]{2}	{ return POW; }
! 
!   /* 
!    * "A boolean operator specifies the type of boolean operation to be performed
!    *  on one or two operands, for a unary operator or binary operator,
!    *  respectively."
!    * Binary boolean operators
!    *  B-AND B-OR B-XOR
!    * Unary boolean operator
!    *  B-NOT
!    * Boolean shift operators
!    *  B-SHIFT-L B-SHIFT-LC B-SHIFT-R B-SHIFT-RC
!    */
! 
! B-AND
! B-OR
! B-XOR
! B-NOT
! B-SHIFT-L
! B-SHIFT-LC
! B-SHIFT-R
! B-SHIFT-RC
! 
  }
  
  <procedure_div>{
    (ID|IDENTIFICATION|ENVIRONMENT|DATA|PROCEDURE){SPC}DIVISION  {
! 			          myless(0); BEGIN(INITIAL); }
!   PROGRAM-ID{OSPC}{DOTSEP}	{ myless(0); BEGIN(INITIAL); }
  
    EXIT{SPC}/(PROGRAM|SECTION|PARAGRAPH|PERFORM) {
  			  return EXIT; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1586,1591 ****
--- 1618,1624 ----
    DELIMITER                     { return DELIMITER; }
    ENVIRONMENT                   { return ENVIRONMENT; }
  
+ 			/* After name state, pop out of procedure_div state. */
    END{SPC}PROGRAM        { yy_push_state(name_state);
                                    return program_level() > 1?
                                           END_SUBPROGRAM : END_PROGRAM; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1614,1635 ****
  
    SECTION{OSPC}[.]{SPC}/USE[[:space:]]	{ yylval.string = NULL; return SECTION; }
  
!   {NAME}{OSPC}[.]({SPC}(EJECT|SKIP[123]))*{SPC}EXIT{OSPC}/{DOTSEP} {
                     // EXIT format-1 is a "continue" statement
-                    yylval.string = xstrdup(yytext);
- 		   auto p = strchr(yylval.string, '.');
- 		   assert(p);
- 		   assert( ISSPACE(p[1]) );
- 		   *p = '\0';
- 		   while( p > yylval.string && ISSPACE(p[-1]) ) {
- 		     *--p = '\0';
- 		   }
- 
- 		   int token;
- 		   if( 0 != (token = binary_integer_usage(yylval.string)) )return token;
-                    if( 0 != (token = keyword_tok(yylval.string)) ) return token;
-                    if( is_integer_token() ) return numstr_of(yylval.string);
-                    return typed_name(yylval.string);
                   }
    {NAME}/{OSPC}{DOTSEP} {
  		   assert(YY_START == procedure_div);
--- 1647,1654 ----
  
    SECTION{OSPC}[.]{SPC}/USE[[:space:]]	{ yylval.string = NULL; return SECTION; }
  
!   [.]({SPC}(EJECT|SKIP[123]))*{SPC}EXIT{OSPC}/{DOTSEP} {
                     // EXIT format-1 is a "continue" statement
                   }
    {NAME}/{OSPC}{DOTSEP} {
  		   assert(YY_START == procedure_div);
*************** BASIS		{ yy_push_state(basis); return BA
*** 2013,2019 ****
                    }
                    return token;
                  }
!   [.][[:blank:].]+  	{ return '.'; }
  }
  
  <exception>{
--- 2032,2038 ----
                    }
                    return token;
                  }
!   [.]+[[:blank:].]+  	{ return '.'; }
  }
  
  <exception>{
*************** BASIS		{ yy_push_state(basis); return BA
*** 2111,2146 ****
  }
  
  <*>{
!   {PUSH_FILE}	{
! 			yy_set_bol(true);
! 			auto top_file = cobol_lineno_save();
! 			if( top_file ) {
! 			  if( yy_flex_debug ) dbgmsg("  saving line %4d of %s",
! 						     yylineno, top_file);
! 			}
! 			// "\f#file push <name>": name starts at offset 13.
! 			char *filename = xstrdup(yytext);
! 			filename[yyleng - 1] = '\0'; // kill the trailing formfeed
! 			filename += 12;
! 			if( yytext[0] != '\f' ) {
! 			  dbgmsg("logic warning: filename was adjusted to %s", --filename);
! 			}
! 			input_file_status.enter(filename);
! 		}
  
!   {POP_FILE}{OSPC} 	{
! 			yy_set_bol(true);
! 			input_file_status.leave();
! 		}
  
!   {LINE_DIRECTIVE} {	cobol_fileline_set(yytext); }
  }
  
  
  <*>OR 				{ return OR; }
  <*>AND				{ return AND; }
  <*>{DOTSEP}[[:blank:].]+$	{ return '.'; }
- <*>[*/+-]{SPC}[+]		{ return *yytext; }
  <*>[().=*/+&-]			{ return *yytext; }
  <*>[[:blank:]]+
  <*>\r?\n
--- 2130,2171 ----
  }
  
  <*>{
!   {PUSH_FILE}		{
! 			  yy_set_bol(true);
! 			  auto top_file = cobol_lineno(yylineno);
! 			  if( top_file ) {
! 			    if( yy_flex_debug ) dbgmsg("  saving line %4d of %s",
! 			  			       yylineno, top_file);
! 			  }
! 			  // "\f#file push <name>": name starts at offset 13.
! 			  char *filename = xstrdup(yytext);
! 			  filename[yyleng - 1] = '\0'; // kill the trailing formfeed
! 			  filename += 12;
! 			  if( yytext[0] != '\f' ) {
! 			    dbgmsg("logic warning: filename was adjusted to %s",
! 				   --filename);
! 			  }
! 			  input_file_status.enter(filename);
! 			  yylineno = 1;
! 			  reset_location();
!   			}
  
!   {POP_FILE}	 	{
! 			  yy_set_bol(true);
! 			  input_file_status.leave();
! 			  yylineno = cobol_lineno();
! 			}
  
!   {LINE_DIRECTIVE} 	{
!       			  yylineno = cobol_fileline_set(yytext);
! 			  reset_location();
! 			}
  }
  
  
  <*>OR 				{ return OR; }
  <*>AND				{ return AND; }
  <*>{DOTSEP}[[:blank:].]+$	{ return '.'; }
  <*>[().=*/+&-]			{ return *yytext; }
  <*>[[:blank:]]+
  <*>\r?\n
*************** BASIS		{ yy_push_state(basis); return BA
*** 2154,2201 ****
  <*>{
    ACCEPT	{ return ACCEPT; }
    ACCESS	{ return ACCESS; }
!   ADD	{ return ADD; }
    ADDRESS	{ return ADDRESS; }
    ADVANCING	{ return ADVANCING; }
!   AFTER	{ return AFTER; }
!   ALL	{ return ALL; }
    ALLOCATE	{ return ALLOCATE; }
    ALPHABET	{ return ALPHABET; }
    ALPHABETIC	{ return ALPHABETIC; }
    ALPHABETIC-LOWER	{ return ALPHABETIC_LOWER; }
    ALPHABETIC-UPPER	{ return ALPHABETIC_UPPER; }
!   ALPHANUMERIC	{ return ALPHANUMERIC; }
    ALPHANUMERIC-EDITED	{ return ALPHANUMERIC_EDITED; }
!   ALSO	{ return ALSO; }
    ALTERNATE	{ return ALTERNATE; }
!   AND	{ return AND; }
!   ANY	{ return ANY; }
    ANYCASE	{ return ANYCASE; }
!   ARE	{ return ARE; }
!   AREA	{ return AREA; }
!   AREAS	{ return AREAS; }
!   AS	{ return AS; }
    ASCENDING	{ return ASCENDING; }
!   ASSIGN	{ return ASSIGN; }
!   AT	{ return AT; }
!   BASED	{ return BASED; }
    BEFORE	{ return BEFORE; }
    BINARY	{ return BINARY; }
!   BIT	{ return BIT; }
!   BLANK	{ return BLANK; }
!   BLOCK	{ return BLOCK_kw; }
    BOTTOM	{ return BOTTOM; }
!   BY	{ return BY; }
!   CALL	{ return CALL; }
    CANCEL	{ return CANCEL; }
!   CF	{ return CF; }
!   CH	{ return CH; }
    CHARACTER	{ return CHARACTER; }
    CHARACTERS	{ return CHARACTERS; }
!   CLASS	{ return CLASS; }
!   CLOSE	{ return CLOSE; }
!   CODE	{ return CODE; }
!   COMMA	{ return COMMA; }
    COMMIT	{ return COMMIT; }
    COMMON	{ return COMMON; }
    CONDITION	{ return CONDITION; }
--- 2179,2226 ----
  <*>{
    ACCEPT	{ return ACCEPT; }
    ACCESS	{ return ACCESS; }
!   ADD		{ return ADD; }
    ADDRESS	{ return ADDRESS; }
    ADVANCING	{ return ADVANCING; }
!   AFTER		{ return AFTER; }
!   ALL		{ return ALL; }
    ALLOCATE	{ return ALLOCATE; }
    ALPHABET	{ return ALPHABET; }
    ALPHABETIC	{ return ALPHABETIC; }
    ALPHABETIC-LOWER	{ return ALPHABETIC_LOWER; }
    ALPHABETIC-UPPER	{ return ALPHABETIC_UPPER; }
!   ALPHANUMERIC		{ return ALPHANUMERIC; }
    ALPHANUMERIC-EDITED	{ return ALPHANUMERIC_EDITED; }
!   ALSO		{ return ALSO; }
    ALTERNATE	{ return ALTERNATE; }
!   AND		{ return AND; }
!   ANY		{ return ANY; }
    ANYCASE	{ return ANYCASE; }
!   ARE		{ return ARE; }
!   AREA		{ return AREA; }
!   AREAS		{ return AREAS; }
!   AS		{ return AS; }
    ASCENDING	{ return ASCENDING; }
!   ASSIGN		{ return ASSIGN; }
!   AT		{ return AT; }
!   BASED		{ return BASED; }
    BEFORE	{ return BEFORE; }
    BINARY	{ return BINARY; }
!   BIT		{ return BIT; }
!   BLANK		{ return BLANK; }
!   BLOCK		{ return BLOCK_kw; }
    BOTTOM	{ return BOTTOM; }
!   BY		{ return BY; }
!   CALL		{ return CALL; }
    CANCEL	{ return CANCEL; }
!   CF		{ return CF; }
!   CH		{ return CH; }
    CHARACTER	{ return CHARACTER; }
    CHARACTERS	{ return CHARACTERS; }
!   CLASS		{ return CLASS; }
!   CLOSE		{ return CLOSE; }
!   CODE		{ return CODE; }
!   COMMA		{ return COMMA; }
    COMMIT	{ return COMMIT; }
    COMMON	{ return COMMON; }
    CONDITION	{ return CONDITION; }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2206,2219 ****
    CONTROL	{ return CONTROL; }
    CONTROLS	{ return CONTROLS; }
    CONVERTING	{ return CONVERTING; }
!   COPY	{ return COPY; }
!   COUNT	{ return COUNT; }
    CURRENCY	{ return CURRENCY; }
!   DATA	{ return DATA; }
!   DATE	{ return DATE; }
!   DAY	{ return DAY; }
    DAY-OF-WEEK	{ return DAY_OF_WEEK; }
!   DE	{ return DE; }
    DECIMAL-POINT	{ return DECIMAL_POINT; }
    DECLARATIVES	{ return DECLARATIVES; }
    DEFAULT	{ return DEFAULT; }
--- 2231,2244 ----
    CONTROL	{ return CONTROL; }
    CONTROLS	{ return CONTROLS; }
    CONVERTING	{ return CONVERTING; }
!   COPY		{ return COPY; }
!   COUNT		{ return COUNT; }
    CURRENCY	{ return CURRENCY; }
!   DATA		{ return DATA; }
!   DATE		{ return DATE; }
!   DAY		{ return DAY; }
    DAY-OF-WEEK	{ return DAY_OF_WEEK; }
!   DE		{ return DE; }
    DECIMAL-POINT	{ return DECIMAL_POINT; }
    DECLARATIVES	{ return DECLARATIVES; }
    DEFAULT	{ return DEFAULT; }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2225,2236 ****
    DETAIL	{ return DETAIL; }
    DISPLAY	{ return DISPLAY; }
    DIVIDE	{ return DIVIDE; }
!   DOWN	{ return DOWN; }
    DUPLICATES	{ return DUPLICATES; }
    DYNAMIC	{ return DYNAMIC; }
!   EC	{ return EC; }
!   ELSE	{ return ELSE; }
!   END	{ return END; }
    END-ACCEPT	{ return END_ACCEPT; }
    END-ADD	{ return END_ADD; }
    END-CALL	{ return END_CALL; }
--- 2250,2261 ----
    DETAIL	{ return DETAIL; }
    DISPLAY	{ return DISPLAY; }
    DIVIDE	{ return DIVIDE; }
!   DOWN		{ return DOWN; }
    DUPLICATES	{ return DUPLICATES; }
    DYNAMIC	{ return DYNAMIC; }
!   EC		{ return EC; }
!   ELSE		{ return ELSE; }
!   END		{ return END; }
    END-ACCEPT	{ return END_ACCEPT; }
    END-ADD	{ return END_ADD; }
    END-CALL	{ return END_CALL; }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2248,2347 ****
    END-SUBTRACT	{ return END_SUBTRACT; }
    END-WRITE	{ return END_WRITE; }
    ENVIRONMENT	{ return ENVIRONMENT; }
!   EQUAL	{ return EQUAL; }
!   ERROR	{ return ERROR; }
    EVALUATE	{ return EVALUATE; }
    EXCEPTION	{ return EXCEPTION; }
!   EXIT	{ return EXIT; }
    EXTEND	{ return EXTEND; }
    EXTERNAL	{ return EXTERNAL; }
  
!   FD	{ return FD; }
!   FINAL	{ return FINAL; }
    FINALLY	{ return FINALLY; }
!   FIRST	{ return FIRST; }
    FOOTING	{ return FOOTING; }
!   FOR	{ return FOR; }
!   FREE	{ return FREE; }
!   FROM	{ return FROM; }
    FUNCTION	{ return FUNCTION; }
    GENERATE	{ return GENERATE; }
    GIVING	{ return GIVING; }
    GLOBAL	{ return GLOBAL; }
!   GO	{ return GO; }
    GOBACK	{ return GOBACK; }
!   GROUP	{ return GROUP; }
    HEADING	{ return HEADING; }
!   IDENTIFICATION	{ return IDENTIFICATION_DIV; }
!   IF	{ return IF; }
!   IN	{ return IN; }
!   INDEX	{ return INDEX; }
    INDEXED	{ return INDEXED; }
    INDICATE	{ return INDICATE; }
    INITIAL	{ return INITIAL; }
    INITIALIZE	{ return INITIALIZE; }
    INITIATE	{ return INITIATE; }
!   INPUT	{ return INPUT; }
    INSPECT	{ return INSPECT; }
    INTERFACE	{ return INTERFACE; }
!   INTO	{ return INTO; }
    INVOKE	{ return INVOKE; }
!   IS	{ return IS; }
!   KEY	{ return KEY; }
!   LAST	{ return LAST; }
    LEADING	{ return LEADING; }
!   LEFT	{ return LEFT; }
    LENGTH	{ return LENGTH; }
!   LIMIT	{ return LIMIT; }
    LIMITS	{ return LIMITS; }
    LINAGE	{ return LINAGE; }
!   LINE	{ return LINE; }
    LINE-COUNTER	{ return LINE_COUNTER; }
!   LINES	{ return LINES; }
    LINKAGE	{ return LINKAGE; }
    LOCAL-STORAGE	{ return LOCAL_STORAGE; }
    LOCALE	{ return LOCALE; }
    LOCATION	{ return LOCATION; }
!   LOCK	{ return LOCK; }
!   MERGE	{ return MERGE; }
!   MODE	{ return MODE; }
!   MOVE	{ return MOVE; }
    MULTIPLY	{ return MULTIPLY; }
    NATIONAL	{ return NATIONAL; }
    NATIONAL-EDITED	{ return NATIONAL_EDITED; }
    NATIVE	{ return NATIVE; }
    NEGATIVE	{ return NEGATIVE; }
    NESTED	{ return NESTED; }
!   NEXT	{ return NEXT; }
!   NO	{ return NO; }
!   NOT	{ return NOT; }
    NUMBER	{ return NUMBER; }
    NUMERIC	{ return NUMERIC; }
    NUMERIC-EDITED	{ return NUMERIC_EDITED; }
    OCCURS	{ return OCCURS; }
!   OF	{ return OF; }
!   OFF	{ return OFF; }
    OMITTED	{ return OMITTED; }
!   ON	{ return ON; }
!   OPEN	{ return OPEN; }
    OPTIONAL	{ return OPTIONAL; }
    OPTIONS	{ return OPTIONS; }
!   OR	{ return OR; }
!   ORDER	{ return ORDER; }
!   ORGANIZATION	{ return ORGANIZATION; }
!   OTHER	{ return OTHER; }
    OUTPUT	{ return OUTPUT; }
    OVERFLOW	{ return OVERFLOW_kw; }
    OVERRIDE	{ return OVERRIDE; }
    PACKED-DECIMAL	{ return PACKED_DECIMAL; }
!   PAGE	{ return PAGE; }
    PAGE-COUNTER	{ return PAGE_COUNTER; }
    PERFORM	{ return PERFORM; }
!   PF	{ return PF; }
!   PH	{ return PH; }
!   PIC	{ return PIC; }
    PICTURE	{ return PICTURE; }
!   PLUS	{ return PLUS; }
    POINTER	{ return POINTER; }
    POSITIVE	{ return POSITIVE; }
    PROCEDURE	{ return PROCEDURE; }
--- 2273,2371 ----
    END-SUBTRACT	{ return END_SUBTRACT; }
    END-WRITE	{ return END_WRITE; }
    ENVIRONMENT	{ return ENVIRONMENT; }
!   EQUAL		{ return EQUAL; }
!   ERROR		{ return ERROR; }
    EVALUATE	{ return EVALUATE; }
    EXCEPTION	{ return EXCEPTION; }
!   EXIT		{ return EXIT; }
    EXTEND	{ return EXTEND; }
    EXTERNAL	{ return EXTERNAL; }
  
!   FD		{ return FD; }
!   FINAL		{ return FINAL; }
    FINALLY	{ return FINALLY; }
!   FIRST		{ return FIRST; }
    FOOTING	{ return FOOTING; }
!   FOR		{ return FOR; }
!   FREE		{ return FREE; }
!   FROM		{ return FROM; }
    FUNCTION	{ return FUNCTION; }
    GENERATE	{ return GENERATE; }
    GIVING	{ return GIVING; }
    GLOBAL	{ return GLOBAL; }
!   GO		{ return GO; }
    GOBACK	{ return GOBACK; }
!   GROUP		{ return GROUP; }
    HEADING	{ return HEADING; }
!   IF		{ return IF; }
!   IN		{ return IN; }
!   INDEX		{ return INDEX; }
    INDEXED	{ return INDEXED; }
    INDICATE	{ return INDICATE; }
    INITIAL	{ return INITIAL; }
    INITIALIZE	{ return INITIALIZE; }
    INITIATE	{ return INITIATE; }
!   INPUT		{ return INPUT; }
    INSPECT	{ return INSPECT; }
    INTERFACE	{ return INTERFACE; }
!   INTO		{ return INTO; }
    INVOKE	{ return INVOKE; }
!   IS		{ return IS; }
!   KEY		{ return KEY; }
!   LAST		{ return LAST; }
    LEADING	{ return LEADING; }
!   LEFT		{ return LEFT; }
    LENGTH	{ return LENGTH; }
!   LIMIT		{ return LIMIT; }
    LIMITS	{ return LIMITS; }
    LINAGE	{ return LINAGE; }
!   LINE		{ return LINE; }
    LINE-COUNTER	{ return LINE_COUNTER; }
!   LINES		{ return LINES; }
    LINKAGE	{ return LINKAGE; }
    LOCAL-STORAGE	{ return LOCAL_STORAGE; }
    LOCALE	{ return LOCALE; }
    LOCATION	{ return LOCATION; }
!   LOCK		{ return LOCK; }
!   MERGE		{ return MERGE; }
!   MODE		{ return MODE; }
!   MOVE		{ return MOVE; }
    MULTIPLY	{ return MULTIPLY; }
    NATIONAL	{ return NATIONAL; }
    NATIONAL-EDITED	{ return NATIONAL_EDITED; }
    NATIVE	{ return NATIVE; }
    NEGATIVE	{ return NEGATIVE; }
    NESTED	{ return NESTED; }
!   NEXT		{ return NEXT; }
!   NO		{ return NO; }
!   NOT		{ return NOT; }
    NUMBER	{ return NUMBER; }
    NUMERIC	{ return NUMERIC; }
    NUMERIC-EDITED	{ return NUMERIC_EDITED; }
    OCCURS	{ return OCCURS; }
!   OF		{ return OF; }
!   OFF		{ return OFF; }
    OMITTED	{ return OMITTED; }
!   ON		{ return ON; }
!   OPEN		{ return OPEN; }
    OPTIONAL	{ return OPTIONAL; }
    OPTIONS	{ return OPTIONS; }
!   OR		{ return OR; }
!   ORDER		{ return ORDER; }
!   ORGANI[SZ]ATION	{ return ORGANIZATION; }
!   OTHER		{ return OTHER; }
    OUTPUT	{ return OUTPUT; }
    OVERFLOW	{ return OVERFLOW_kw; }
    OVERRIDE	{ return OVERRIDE; }
    PACKED-DECIMAL	{ return PACKED_DECIMAL; }
!   PAGE		{ return PAGE; }
    PAGE-COUNTER	{ return PAGE_COUNTER; }
    PERFORM	{ return PERFORM; }
!   PF		{ return PF; }
!   PH		{ return PH; }
!   PIC		{ return PIC; }
    PICTURE	{ return PICTURE; }
!   PLUS		{ return PLUS; }
    POINTER	{ return POINTER; }
    POSITIVE	{ return POSITIVE; }
    PROCEDURE	{ return PROCEDURE; }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2350,2364 ****
    PROPERTY	{ return PROPERTY; }
    PROTOTYPE	{ return PROTOTYPE; }
    QUOTES	{ return QUOTES; }
!   RAISE	{ return RAISE; }
    RAISING	{ return RAISING; }
    RANDOM	{ return RANDOM; }
!   RD	{ return RD; }
!   READ	{ return READ; }
    RECORD	{ return RECORD; }
    RECORDS	{ return RECORDS; }
    REDEFINES	{ return REDEFINES; }
!   REEL	{ return REEL; }
    REFERENCE	{ return REFERENCE; }
    RELATIVE	{ return RELATIVE; }
    RELEASE	{ return RELEASE; }
--- 2374,2388 ----
    PROPERTY	{ return PROPERTY; }
    PROTOTYPE	{ return PROTOTYPE; }
    QUOTES	{ return QUOTES; }
!   RAISE		{ return RAISE; }
    RAISING	{ return RAISING; }
    RANDOM	{ return RANDOM; }
!   RD		{ return RD; }
!   READ		{ return READ; }
    RECORD	{ return RECORD; }
    RECORDS	{ return RECORDS; }
    REDEFINES	{ return REDEFINES; }
!   REEL		{ return REEL; }
    REFERENCE	{ return REFERENCE; }
    RELATIVE	{ return RELATIVE; }
    RELEASE	{ return RELEASE; }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2372,2391 ****
    REPORTS	{ return REPORTS; }
    REPOSITORY	{ return REPOSITORY; }
    RESERVE	{ return RESERVE; }
!   RESET	{ return RESET; }
    RESUME	{ return RESUME; }
    RETURN	{ return RETURN; }
    RETURNING	{ return RETURNING; }
    REWIND	{ return REWIND; }
    REWRITE	{ return REWRITE; }
!   RF	{ return RF; }
!   RH	{ return RH; }
!   RIGHT	{ return RIGHT; }
    ROUNDED	{ return ROUNDED; }
!   RUN	{ return RUN; }
!   SAME	{ return SAME; }
    SCREEN	{ return SCREEN; }
!   SD	{ return SD; }
    SEARCH	{ return SEARCH; }
    SECTION	{ return SECTION; }
    SELECT	{ return SELECT; }
--- 2396,2415 ----
    REPORTS	{ return REPORTS; }
    REPOSITORY	{ return REPOSITORY; }
    RESERVE	{ return RESERVE; }
!   RESET		{ return RESET; }
    RESUME	{ return RESUME; }
    RETURN	{ return RETURN; }
    RETURNING	{ return RETURNING; }
    REWIND	{ return REWIND; }
    REWRITE	{ return REWRITE; }
!   RF		{ return RF; }
!   RH		{ return RH; }
!   RIGHT		{ return RIGHT; }
    ROUNDED	{ return ROUNDED; }
!   RUN		{ return RUN; }
!   SAME		{ return SAME; }
    SCREEN	{ return SCREEN; }
!   SD		{ return SD; }
    SEARCH	{ return SEARCH; }
    SECTION	{ return SECTION; }
    SELECT	{ return SELECT; }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2393,2448 ****
    SEPARATE	{ return SEPARATE; }
    SEQUENCE	{ return SEQUENCE; }
    SEQUENTIAL	{ return SEQUENTIAL; }
!   SET	{ return SET; }
    SHARING	{ return SHARING; }
!   SIGN	{ return SIGN; }
!   SIZE	{ return SIZE; }
!   SORT	{ return SORT; }
    SORT-MERGE	{ return SORT_MERGE; }
    SOURCE	{ return SOURCE; }
!   SPACE	{ return SPACE; }
    SPACES	{ return SPACES; }
    SPECIAL-NAMES	{ return SPECIAL_NAMES; }
    STANDARD	{ return STANDARD; }
    STANDARD-1	{ return STANDARD_1; }
!   START	{ return START; }
    STATUS	{ return STATUS; }
!   STOP	{ return STOP; }
    SUBTRACT	{ return SUBTRACT; }
!   SUM	{ return SUM; }
    SUPPRESS	{ return SUPPRESS; }
    SYMBOLIC	{ return SYMBOLIC; }
    TALLYING	{ return TALLYING; }
    TERMINATE	{ return TERMINATE; }
!   TEST	{ return TEST; }
!   THAN	{ return THAN; }
!   THEN	{ return THEN; }
!   THRU	{ return THRU; }
!   TIME	{ return TIME; }
!   TIMES	{ return TIMES; }
!   TO	{ return TO; }
!   TOP	{ return TOP; }
    TRAILING	{ return TRAILING; }
  
!   TYPE	{ return TYPE; }
    TYPEDEF	{ return TYPEDEF; }
!   UNIT	{ return UNIT; }
!   UNTIL	{ return UNTIL; }
!   UP	{ return UP; }
!   UPON	{ return UPON; }
!   USAGE	{ return USAGE; }
!   USE	{ return USE; }
!   USING	{ return USING; }
!   VALUE	{ return VALUE; }
    VARYING	{ return VARYING; }
!   WHEN	{ return WHEN; }
!   WITH	{ return WITH; }
    WORKING-STORAGE	{ return WORKING_STORAGE; }
!   WRITE	{ return WRITE; }
  
    ZERO	|
    ZEROES	|
!   ZEROS	{ return ZERO; }
  }
  
  <*>{
--- 2417,2472 ----
    SEPARATE	{ return SEPARATE; }
    SEQUENCE	{ return SEQUENCE; }
    SEQUENTIAL	{ return SEQUENTIAL; }
!   SET		{ return SET; }
    SHARING	{ return SHARING; }
!   SIGN		{ return SIGN; }
!   SIZE		{ return SIZE; }
!   SORT		{ return SORT; }
    SORT-MERGE	{ return SORT_MERGE; }
    SOURCE	{ return SOURCE; }
!   SPACE		{ return SPACE; }
    SPACES	{ return SPACES; }
    SPECIAL-NAMES	{ return SPECIAL_NAMES; }
    STANDARD	{ return STANDARD; }
    STANDARD-1	{ return STANDARD_1; }
!   START		{ return START; }
    STATUS	{ return STATUS; }
!   STOP		{ return STOP; }
    SUBTRACT	{ return SUBTRACT; }
!   SUM		{ return SUM; }
    SUPPRESS	{ return SUPPRESS; }
    SYMBOLIC	{ return SYMBOLIC; }
    TALLYING	{ return TALLYING; }
    TERMINATE	{ return TERMINATE; }
!   TEST		{ return TEST; }
!   THAN		{ return THAN; }
!   THEN		{ return THEN; }
!   THRU		{ return THRU; }
!   TIME		{ return TIME; }
!   TIMES		{ return TIMES; }
!   TO		{ return TO; }
!   TOP		{ return TOP; }
    TRAILING	{ return TRAILING; }
  
!   TYPE		{ return TYPE; }
    TYPEDEF	{ return TYPEDEF; }
!   UNIT		{ return UNIT; }
!   UNTIL		{ return UNTIL; }
!   UP		{ return UP; }
!   UPON		{ return UPON; }
!   USAGE		{ return USAGE; }
!   USE		{ return USE; }
!   USING		{ return USING; }
!   VALUE		{ return VALUE; }
    VARYING	{ return VARYING; }
!   WHEN		{ return WHEN; }
!   WITH		{ return WITH; }
    WORKING-STORAGE	{ return WORKING_STORAGE; }
!   WRITE		{ return WRITE; }
  
    ZERO	|
    ZEROES	|
!   ZEROS		{ return ZERO; }
  }
  
  <*>{
*************** BASIS		{ yy_push_state(basis); return BA
*** 2479,2506 ****
  		  return NO_CONDITION;
  		}
  
! <<EOF>>         {
! 
!                   if( YY_START == quoted1 || YY_START == quoted2 ) {
  		    error_msg(yylloc, "syntax error: unterminated string %<%s%>",
  			     tmpstring);
  		    return NO_CONDITION;
!                   }
!                   yypop_buffer_state();
! 
!                   if ( !YY_CURRENT_BUFFER ) {
! 		    return 0;
!                   }
! 
!                   if( ! wait_for_the_child() ) {
!                     yyterminate();
!                   }
! 		  cobol_filename_restore();
!    		  parser_leave_file();
! 
! 		  if( yydebug ) yywarn("resume parsing '%s'", cobol_filename());
! 		  yy_set_bol(true);
!                 }
  
  %%
  
--- 2503,2515 ----
  		  return NO_CONDITION;
  		}
  
! <quoted1,quoted2>{
!   <<EOF>> 	{
  		    error_msg(yylloc, "syntax error: unterminated string %<%s%>",
  			     tmpstring);
  		    return NO_CONDITION;
! 		}
! }
  
  %%
  
diff -Nrcpad gcc-16-20250629/gcc/cobol/scan_ante.h gcc-16-20250706/gcc/cobol/scan_ante.h
*** gcc-16-20250629/gcc/cobol/scan_ante.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/scan_ante.h	Sun Jul  6 22:32:10 2025
*************** class enter_leave_t {
*** 373,383 ****
   public:
    enter_leave_t() : entering(NULL), leaving(NULL), filename(NULL) {}
    enter_leave_t(  parser_enter_file_f *entering, const char *filename )
!     : entering(entering), leaving(NULL), filename(filename) {}
    explicit enter_leave_t(parser_leave_file_f *leaving)
      : entering(NULL), leaving(leaving), filename(NULL) {}
  
!   void notify( unsigned int newlines = 0 ) {
      if( entering ) {
        cobol_filename(filename, 0);
        if( yy_flex_debug ) dbgmsg("starting line %4d of %s",
--- 373,384 ----
   public:
    enter_leave_t() : entering(NULL), leaving(NULL), filename(NULL) {}
    enter_leave_t(  parser_enter_file_f *entering, const char *filename )
!     : entering(entering), leaving(NULL), filename(filename)
!   {}
    explicit enter_leave_t(parser_leave_file_f *leaving)
      : entering(NULL), leaving(leaving), filename(NULL) {}
  
!   void notify() {
      if( entering ) {
        cobol_filename(filename, 0);
        if( yy_flex_debug ) dbgmsg("starting line %4d of %s",
*************** class enter_leave_t {
*** 386,395 ****
        gcc_assert(leaving == NULL);
      }
      if( leaving ) {
!       auto name = cobol_filename_restore();
!       yylineno += newlines;
        if( yy_flex_debug ) dbgmsg("resuming line %4d of %s",
!                                  yylineno, name? name : "<none>");
        leaving();
        gcc_assert(entering == NULL);
      }
--- 387,395 ----
        gcc_assert(leaving == NULL);
      }
      if( leaving ) {
!       cobol_filename_restore();
        if( yy_flex_debug ) dbgmsg("resuming line %4d of %s",
!                                  yylineno, cobol_filename());
        leaving();
        gcc_assert(entering == NULL);
      }
*************** class enter_leave_t {
*** 398,419 ****
  
  static class input_file_status_t {
    std::queue <enter_leave_t> inputs;
-   unsigned int trailing_newlines = 0;
   public:
    void enter(const char *filename) {
      inputs.push( enter_leave_t(parser_enter_file, filename) );
    }
    void leave() {
-     // Add the number of newlines following the POP to yylineno when it's restored. 
-     trailing_newlines = std::count(yytext, yytext + yyleng, '\n');
-     if( trailing_newlines && yy_flex_debug )
-       dbgmsg("adding %u lines after POP", trailing_newlines);
      inputs.push( enter_leave_t(parser_leave_file) );
    }
    void notify() {
      while( ! inputs.empty() ) {
        auto enter_leave = inputs.front();
!       enter_leave.notify(trailing_newlines);
        inputs.pop();
      }
    }
--- 398,414 ----
  
  static class input_file_status_t {
    std::queue <enter_leave_t> inputs;
   public:
    void enter(const char *filename) {
      inputs.push( enter_leave_t(parser_enter_file, filename) );
    }
    void leave() {
      inputs.push( enter_leave_t(parser_leave_file) );
    }
    void notify() {
      while( ! inputs.empty() ) {
        auto enter_leave = inputs.front();
!       enter_leave.notify();
        inputs.pop();
      }
    }
*************** static class input_file_status_t {
*** 421,447 ****
  
  void input_file_status_notify() { input_file_status.notify(); }
  
! void cdf_location_set(YYLTYPE loc);
  
  static void
! update_location() {
    YYLTYPE loc = {
      yylloc.last_line, yylloc.last_column,
      yylineno,         yylloc.last_column + yyleng
    };
  
!   auto nline = std::count(yytext, yytext + yyleng, '\n');
!   if( nline ) {
!     const char *p = static_cast<char*>(memrchr(yytext, '\n', yyleng));
      loc.last_column = (yytext + yyleng) - p;
    }
  
    yylloc = loc;
!   cdf_location_set(loc);
!   location_dump(__func__, __LINE__, "yylloc", yylloc);
  }
  
  static void
  trim_location( int nkeep) {
    gcc_assert( 0 <= nkeep && nkeep <= yyleng );
    struct { char *p, *pend;
--- 416,476 ----
  
  void input_file_status_notify() { input_file_status.notify(); }
  
! /*
!  * parse.y and cdf.y each define a 4-integer struct to hold a token's location. 
!  * parse.y uses   YYLTYPE  yylloc;
!  * cdf.y   uses YDFLLTYPE ydflloc;
!  * 
!  * The structs have identical definitions with different types and of course
!  * names.  We define "conversion" between them for convenience. 
!  * 
!  * Each parser expects its location value to be updated whenever it calls
!  * yylex().  Therefore, here in the lexer we set both locations as each token
!  * is scanned, so that both parsers see the same location.
!  */
! static YDFLTYPE
! ydfltype_of( const YYLTYPE& loc ) {
!   YDFLTYPE output { 
!     loc.first_line,   loc.first_column,
!     loc.last_line,    loc.last_column };
!   return output;
! }
  
+ /*
+  * After the input filename and yylineno are set, update the location of the
+  * scanned token.
+  */
  static void
! update_location( const YYLTYPE *ploc = nullptr ) {
    YYLTYPE loc = {
      yylloc.last_line, yylloc.last_column,
      yylineno,         yylloc.last_column + yyleng
    };
+   if( ploc ) loc = *ploc;
  
!   const char *p = static_cast<char*>(memrchr(yytext, '\n', yyleng));
!   if( p ) {
      loc.last_column = (yytext + yyleng) - p;
    }
  
    yylloc = loc;
!   ydflloc = ydfltype_of(yylloc);
! 
!   dbgmsg("  SC: %s location (%d,%d) to (%d,%d)",
!          start_condition_is(),
!          yylloc.first_line, yylloc.first_column,
!          yylloc.last_line,  yylloc.last_column);
  }
  
  static void
+ reset_location() {
+   static const YYLTYPE loc { yylineno, 1, yylineno, 1 };
+   update_location(&loc);
+ }
+ 
+ #define YY_USER_ACTION update_location();
+ 
+ static void
  trim_location( int nkeep) {
    gcc_assert( 0 <= nkeep && nkeep <= yyleng );
    struct { char *p, *pend;
*************** update_location_col( const char str[], i
*** 485,491 ****
  
  #define YY_USER_INIT do {			\
      static YYLTYPE ones = {1,1, 1,1};		\
!     yylloc = ones;				\
    } while(0)
  
  /*
--- 514,521 ----
  
  #define YY_USER_INIT do {			\
      static YYLTYPE ones = {1,1, 1,1};		\
!     yylloc = ones;                              \
!     ydflloc = ydfltype_of(yylloc);              \
    } while(0)
  
  /*
*************** update_location_col( const char str[], i
*** 494,508 ****
   * updates neither yylval nor yylloc.  That job is left to the actions.
   *
   * The parser relies on yylex to set yylval and yylloc each time it is
!  * called. It apparently maintains a separate copy for each term, and uses
   * YYLLOC_DEFAULT() to update the location of nonterminals.
   */
  #define YY_DECL int lexer(void)
  
- #define YY_USER_ACTION							\
-   update_location();							\
-   if( yy_flex_debug ) dbgmsg("SC: %s", start_condition_is() );
- 
  # define YY_INPUT(buf, result, max_size)                        \
  {                                                               \
    if( 0 == (result = lexer_input(buf, max_size, yyin)) )        \
--- 524,534 ----
   * updates neither yylval nor yylloc.  That job is left to the actions.
   *
   * The parser relies on yylex to set yylval and yylloc each time it is
!  * called. It maintains a separate copy for each term, and uses
   * YYLLOC_DEFAULT() to update the location of nonterminals.
   */
  #define YY_DECL int lexer(void)
  
  # define YY_INPUT(buf, result, max_size)                        \
  {                                                               \
    if( 0 == (result = lexer_input(buf, max_size, yyin)) )        \
*************** binary_integer_usage( const char name[])
*** 600,605 ****
--- 626,641 ----
    return p->second.token;
  }
        
+ static void
+ verify_ws( const YYLTYPE& loc, const char input[], char ch ) {
+   if( ! fisspace(ch) ) {
+     if( ! (dialect_mf() || dialect_gnu()) ) {
+       dialect_error(loc, "separator space required in %qs", input);
+     }
+   }
+ }
+ #define verify_ws(C) verify_ws(yylloc, yytext, C)
+ 
  int
  binary_integer_usage_of( const char name[] ) {
    cbl_name_t uname = {};
*************** tmpstring_append( int len ) {
*** 813,847 ****
  
  #define pop_return yy_pop_state(); return
  
- static bool
- wait_for_the_child(void) {
-   pid_t pid;
-   int status;
- 
-   if( (pid = wait(&status)) == -1 ) {
-     yywarn("internal error: no pending child CDF parser process");
-     return false;
-   }
- 
-   if( WIFSIGNALED(status) ) {
-     yywarn( "process %ld terminated by %s", 
- 	    static_cast<long>(pid), strsignal(WTERMSIG(status)) );
-     return false;
-   }
-   if( WIFEXITED(status) ) {
-     if( WEXITSTATUS(status) != 0 ) {
-       yywarn("process %ld exited with status %d",
-              static_cast<long>(pid), status);
-       return false;
-     }
-   }
-   if( yy_flex_debug ) {
-     yywarn("process %ld exited with status %d",
-            static_cast<long>(pid), status);
-   }
-   return true;
- }
- 
  static bool is_not = false;
  
  static uint64_t
--- 849,854 ----
diff -Nrcpad gcc-16-20250629/gcc/cobol/symbols.h gcc-16-20250706/gcc/cobol/symbols.h
*** gcc-16-20250629/gcc/cobol/symbols.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/symbols.h	Sun Jul  6 22:32:10 2025
*************** is_numeric( const cbl_field_t *field ) {
*** 2197,2203 ****
  bool cobol_filename( const char *name );
  const char * cobol_filename();
  
! const char * cobol_fileline_set( const char line[] );
  
  char *cobol_name_mangler(const char *cobol_name);
  
--- 2197,2203 ----
  bool cobol_filename( const char *name );
  const char * cobol_filename();
  
! int cobol_fileline_set( const char line[] );
  
  char *cobol_name_mangler(const char *cobol_name);
  
diff -Nrcpad gcc-16-20250629/gcc/cobol/util.cc gcc-16-20250706/gcc/cobol/util.cc
*** gcc-16-20250629/gcc/cobol/util.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/util.cc	Sun Jul  6 22:32:10 2025
*************** valid_move( const struct cbl_field_t *tg
*** 1104,1113 ****
    static_assert(sizeof(matrix[0]) == COUNT_OF(matrix[0]),
                  "matrix should be square");
  
!   for( const cbl_field_t *args[] = {tgt, src}, **p=args;
!        p < args + COUNT_OF(args); p++ ) {
!     auto& f(**p);
!     switch(f.type) {
      case FldClass:
      case FldConditional:
      case FldIndex:
--- 1104,1111 ----
    static_assert(sizeof(matrix[0]) == COUNT_OF(matrix[0]),
                  "matrix should be square");
  
!   for( auto field : { src, tgt } ) {
!     switch(field->type) {
      case FldClass:
      case FldConditional:
      case FldIndex:
*************** valid_move( const struct cbl_field_t *tg
*** 1119,1127 ****
      case FldForward:
      case FldBlob:
      default:
!       if( sizeof(matrix[0]) < f.type ) {
          cbl_internal_error("logic error: MOVE %s %s invalid type:",
!                            cbl_field_type_str(f.type), f.name);
        }
        break;
      }
--- 1117,1125 ----
      case FldForward:
      case FldBlob:
      default:
!       if( sizeof(matrix[0]) < field->type ) {
          cbl_internal_error("logic error: MOVE %s %s invalid type:",
!                            cbl_field_type_str(field->type), field->name);
        }
        break;
      }
*************** struct input_file_t {
*** 1745,1755 ****
    ino_t inode;
    int lineno;
    const char *name;
-   const line_map *lines;
  
    input_file_t( const char *name, ino_t inode,
!                 int lineno=1, const line_map *lines = NULL )
!     : inode(inode), lineno(lineno), name(name), lines(lines)
    {
      if( inode == 0 ) inode_set();
    }
--- 1743,1752 ----
    ino_t inode;
    int lineno;
    const char *name;
  
    input_file_t( const char *name, ino_t inode,
!                 int lineno=1 )
!     : inode(inode), lineno(lineno), name(name)
    {
      if( inode == 0 ) inode_set();
    }
*************** class unique_stack : public std::stack<i
*** 1811,1816 ****
--- 1808,1819 ----
      }
      return false;
    }
+ 
+   // Look down into the stack. peek(0) == top()
+   const input_file_t& peek( size_t n ) const {
+     gcc_assert( n < size() );
+     return c.at(size() - ++n);
+   } 
    
    void option( int opt ) { // capture other preprocessor options eventually
      assert(opt == 'M');
*************** bool cobol_filename( const char *name, i
*** 1867,1891 ****
    }
    linemap_add(line_table, LC_ENTER, sysp, name, 1);
    input_filename_vestige = name;
!   bool pushed = input_filenames.push( input_file_t(name, inode, 1, lines) );
!   input_filenames.top().lineno = yylineno = 1;
    return pushed;
  }
  
  const char *
! cobol_lineno_save() {
    if( input_filenames.empty() ) return NULL;
    auto& input( input_filenames.top() );
!   input.lineno = yylineno;
    return input.name;
  }
  
  const char *
  cobol_filename() {
    return input_filenames.empty()? input_filename_vestige : input_filenames.top().name;
  }
  
! const char *
  cobol_filename_restore() {
    assert(!input_filenames.empty());
    const input_file_t& top( input_filenames.top() );
--- 1870,1911 ----
    }
    linemap_add(line_table, LC_ENTER, sysp, name, 1);
    input_filename_vestige = name;
!   bool pushed = input_filenames.push( input_file_t(name, inode, 1) );
    return pushed;
  }
  
  const char *
! cobol_lineno( int lineno ) {
    if( input_filenames.empty() ) return NULL;
    auto& input( input_filenames.top() );
!   input.lineno = lineno;
    return input.name;
  }
  
+ /*
+  * This function is called from the scanner, usually when a copybook is on top
+  * of the input stack, before the parser retrieves the token and resets the
+  * current filename.  For that reason, we normaly want to line number of the
+  * file that is about to become the current one, which is the one behind top().
+  *
+  * If somehow we arrive here when there is nothing underneath, we return the
+  * current line nubmer, or zero if there's no input.  The only consequence is
+  * that the reported line number might be wrong.
+  */
+ int
+ cobol_lineno() {
+   if( input_filenames.empty() ) return 0;
+   size_t n = input_filenames.size() < 2? 0 : 1;
+   const auto& input( input_filenames.peek(n) );
+   return input.lineno;
+ }
+ 
  const char *
  cobol_filename() {
    return input_filenames.empty()? input_filename_vestige : input_filenames.top().name;
  }
  
! void
  cobol_filename_restore() {
    assert(!input_filenames.empty());
    const input_file_t& top( input_filenames.top() );
*************** cobol_filename_restore() {
*** 1893,1910 ****
    input_filename_vestige = top.name;
  
    input_filenames.pop();
!   if( input_filenames.empty() ) return NULL;
  
    auto& input = input_filenames.top();
  
!   input.lines = linemap_add(line_table, LC_LEAVE, sysp, NULL, 0);
! 
!   yylineno = input.lineno;
!   return input.name;
  }
  
  static location_t token_location;
  
  template <typename LOC>
  static void
  gcc_location_set_impl( const LOC& loc ) {
--- 1913,1929 ----
    input_filename_vestige = top.name;
  
    input_filenames.pop();
!   if( input_filenames.empty() ) return;
  
    auto& input = input_filenames.top();
  
!   linemap_add(line_table, LC_LEAVE, sysp, NULL, 0);
  }
  
  static location_t token_location;
  
+ location_t location_from_lineno() { return token_location; }
+ 
  template <typename LOC>
  static void
  gcc_location_set_impl( const LOC& loc ) {
*************** void error_msg( const YDFLTYPE& loc, con
*** 2039,2054 ****
  }
  
  void
- cdf_location_set(YYLTYPE loc) {
-   extern YDFLTYPE ydflloc;
- 
-   ydflloc.first_line =   loc.first_line;
-   ydflloc.first_column = loc.first_column;
-   ydflloc.last_line =    loc.last_line;
-   ydflloc.last_column =  loc.last_column;
- }
- 
- void
  yyerror( const char gmsgid[], ... ) {
    temp_loc_t looker;
    verify_format(gmsgid);
--- 2058,2063 ----
*************** yyerrorvl( int line, const char *filenam
*** 2101,2107 ****
  static inline size_t
  matched_length( const regmatch_t& rm ) { return rm.rm_eo - rm.rm_so; }
  
! const char *
  cobol_fileline_set( const char line[] ) {
    static const char pattern[] = "#line +([[:alnum:]]+) +[\"']([^\"']+). *\n";
    static const int cflags = REG_EXTENDED | REG_ICASE;
--- 2110,2116 ----
  static inline size_t
  matched_length( const regmatch_t& rm ) { return rm.rm_eo - rm.rm_so; }
  
! int
  cobol_fileline_set( const char line[] ) {
    static const char pattern[] = "#line +([[:alnum:]]+) +[\"']([^\"']+). *\n";
    static const int cflags = REG_EXTENDED | REG_ICASE;
*************** cobol_fileline_set( const char line[] )
*** 2114,2120 ****
      if( (erc = regcomp(&re, pattern, cflags)) != 0 ) {
          regerror(erc, &re, regexmsg, sizeof(regexmsg));
          dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
!         return line;
      }
      preg = &re;
    }
--- 2123,2129 ----
      if( (erc = regcomp(&re, pattern, cflags)) != 0 ) {
          regerror(erc, &re, regexmsg, sizeof(regexmsg));
          dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
!         return 0;
      }
      preg = &re;
    }
*************** cobol_fileline_set( const char line[] )
*** 2122,2131 ****
      if( erc != REG_NOMATCH ) {
        regerror(erc, preg, regexmsg, sizeof(regexmsg));
        dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
!       return line;
      }
      error_msg(yylloc, "invalid %<#line%> directive: %s", line );
!     return line;
    }
  
    const char
--- 2131,2140 ----
      if( erc != REG_NOMATCH ) {
        regerror(erc, preg, regexmsg, sizeof(regexmsg));
        dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
!       return 0;
      }
      error_msg(yylloc, "invalid %<#line%> directive: %s", line );
!     return 0;
    }
  
    const char
*************** cobol_fileline_set( const char line[] )
*** 2139,2153 ****
    input_file_t input_file( filename, ino_t(0), fileline ); // constructor sets inode
  
    if( input_filenames.empty() ) {
-     input_file.lines = linemap_add(line_table, LC_ENTER, sysp, filename, 1);
      input_filenames.push(input_file);
    }
  
    input_file_t& file = input_filenames.top();
    file = input_file;
-   yylineno = file.lineno;
  
!   return file.name;
  }
  
  //#define TIMING_PARSE
--- 2148,2160 ----
    input_file_t input_file( filename, ino_t(0), fileline ); // constructor sets inode
  
    if( input_filenames.empty() ) {
      input_filenames.push(input_file);
    }
  
    input_file_t& file = input_filenames.top();
    file = input_file;
  
!   return file.lineno;
  }
  
  //#define TIMING_PARSE
*************** bool fisdigit(int c)
*** 2357,2363 ****
  bool fisspace(int c)
    {
    return ISSPACE(c);
!   };
  int  ftolower(int c)
    {
    return TOLOWER(c);
--- 2364,2370 ----
  bool fisspace(int c)
    {
    return ISSPACE(c);
!   }
  int  ftolower(int c)
    {
    return TOLOWER(c);
*************** int  ftoupper(int c)
*** 2369,2375 ****
  bool fisprint(int c)
    {
    return ISPRINT(c);
!   };
  
  // 8.9 Reserved words
  static const std::set<std::string> reserved_words = {
--- 2376,2382 ----
  bool fisprint(int c)
    {
    return ISPRINT(c);
!   }
  
  // 8.9 Reserved words
  static const std::set<std::string> reserved_words = {
diff -Nrcpad gcc-16-20250629/gcc/cobol/util.h gcc-16-20250706/gcc/cobol/util.h
*** gcc-16-20250629/gcc/cobol/util.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/cobol/util.h	Sun Jul  6 22:32:10 2025
*************** bool fisprint(int c);
*** 47,54 ****
  
  void cobol_set_pp_option(int opt);
  
! const char * cobol_filename_restore();
! const char * cobol_lineno_save();
  
  unsigned long gb4( size_t input );
  
--- 47,55 ----
  
  void cobol_set_pp_option(int opt);
  
! void cobol_filename_restore();
! const char * cobol_lineno( int );
! int cobol_lineno();
  
  unsigned long gb4( size_t input );
  
diff -Nrcpad gcc-16-20250629/gcc/common.opt gcc-16-20250706/gcc/common.opt
*** gcc-16-20250629/gcc/common.opt	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/common.opt	Sun Jul  6 22:32:10 2025
*************** Warray-bounds=
*** 545,550 ****
--- 545,554 ----
  Common Joined RejectNegative UInteger Var(warn_array_bounds) Warning IntegerRange(0, 2)
  Warn if an array is accessed out of bounds.
  
+ Wauto-profile
+ Common Var(warn_auto_profile) Warning
+ Warn about problems with auto-profile data.
+ 
  Wuse-after-free
  Common Var(warn_use_after_free) Warning
  Warn for uses of pointers to deallocated storage.
*************** Common Joined RejectNegative UInteger
*** 1485,1491 ****
  
  fdiagnostics-format=
  Common Joined RejectNegative Enum(diagnostics_output_format)
! -fdiagnostics-format=[text|sarif-stderr|sarif-file|json|json-stderr|json-file]	Select output format.
  
  fdiagnostics-add-output=
  Common Joined RejectNegative
--- 1489,1495 ----
  
  fdiagnostics-format=
  Common Joined RejectNegative Enum(diagnostics_output_format)
! -fdiagnostics-format=[text|sarif-stderr|sarif-file]	Select output format.
  
  fdiagnostics-add-output=
  Common Joined RejectNegative
*************** EnumValue
*** 1528,1542 ****
  Enum(diagnostics_output_format) String(text) Value(DIAGNOSTICS_OUTPUT_FORMAT_TEXT)
  
  EnumValue
- Enum(diagnostics_output_format) String(json) Value(DIAGNOSTICS_OUTPUT_FORMAT_JSON_STDERR)
- 
- EnumValue
- Enum(diagnostics_output_format) String(json-stderr) Value(DIAGNOSTICS_OUTPUT_FORMAT_JSON_STDERR)
- 
- EnumValue
- Enum(diagnostics_output_format) String(json-file) Value(DIAGNOSTICS_OUTPUT_FORMAT_JSON_FILE)
- 
- EnumValue
  Enum(diagnostics_output_format) String(sarif-stderr) Value(DIAGNOSTICS_OUTPUT_FORMAT_SARIF_STDERR)
  
  EnumValue
--- 1532,1537 ----
diff -Nrcpad gcc-16-20250629/gcc/common.opt.urls gcc-16-20250706/gcc/common.opt.urls
*** gcc-16-20250629/gcc/common.opt.urls	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/common.opt.urls	Sun Jul  6 22:32:10 2025
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 64,69 ****
--- 64,72 ----
  Warray-bounds=
  UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
  
+ Wauto-profile
+ UrlSuffix(gcc/Warning-Options.html#index-Wauto-profile)
+ 
  Wuse-after-free
  UrlSuffix(gcc/Warning-Options.html#index-Wno-use-after-free)
  
*************** UrlSuffix(gcc/Optimize-Options.html#inde
*** 433,438 ****
--- 436,444 ----
  fauto-profile=
  UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile)
  
+ fauto-profile-inlining
+ UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile-inlining)
+ 
  fbounds-check
  LangUrlSuffix_D(gdc/Runtime-Options.html#index-fbounds-check) LangUrlSuffix_Fortran(gfortran/Code-Gen-Options.html#index-fbounds-check)
  
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-cores.def gcc-16-20250706/gcc/config/aarch64/aarch64-cores.def
*** gcc-16-20250629/gcc/config/aarch64/aarch64-cores.def	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-cores.def	Sun Jul  6 22:32:10 2025
*************** AARCH64_CORE("demeter", demeter, cortexa
*** 226,231 ****
--- 226,234 ----
  /* NVIDIA ('N') cores. */
  AARCH64_CORE("olympus", olympus, cortexa57, V9_2A, (SVE2_BITPERM, RNG, LS64, MEMTAG, PROFILE, FAMINMAX, FP8FMA, FP8DOT2, FP8DOT4, LUT, SVE2_AES, SVE2_SHA3, SVE2_SM4), neoversev3, 0x4e, 0x10, -1)
  
+ /* Armv9-A big.LITTLE processors.  */
+ AARCH64_CORE("gb10",  gb10, cortexa57, V9_2A,  (SVE2_BITPERM, SVE2_AES, SVE2_SHA3, SVE2_SM4, MEMTAG, PROFILE), cortexx925, 0x41, AARCH64_BIG_LITTLE (0xd85, 0xd87), -1)
+ 
  /* Generic Architecture Processors.  */
  AARCH64_CORE("generic",  generic, cortexa53, V8A,  (), generic, 0x0, 0x0, -1)
  AARCH64_CORE("generic-armv8-a",  generic_armv8_a, cortexa53, V8A, (), generic_armv8_a, 0x0, 0x0, -1)
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-option-extensions.def gcc-16-20250706/gcc/config/aarch64/aarch64-option-extensions.def
*** gcc-16-20250629/gcc/config/aarch64/aarch64-option-extensions.def	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-option-extensions.def	Sun Jul  6 22:32:10 2025
*************** AARCH64_OPT_EXTENSION("mops", MOPS, (),
*** 249,254 ****
--- 249,256 ----
  
  AARCH64_OPT_EXTENSION("cssc", CSSC, (), (), (), "cssc")
  
+ AARCH64_OPT_EXTENSION("cmpbr", CMPBR, (), (), (), "cmpbr")
+ 
  AARCH64_OPT_EXTENSION("lse128", LSE128, (LSE), (), (), "lse128")
  
  AARCH64_OPT_EXTENSION("d128", D128, (LSE128), (), (), "d128")
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-protos.h gcc-16-20250706/gcc/config/aarch64/aarch64-protos.h
*** gcc-16-20250629/gcc/config/aarch64/aarch64-protos.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-protos.h	Sun Jul  6 22:32:10 2025
*************** bool aarch64_general_check_builtin_call
*** 1135,1140 ****
--- 1135,1142 ----
  					 unsigned int, tree, unsigned int,
  					 tree *);
  
+ bool aarch64_cb_rhs (rtx_code op_code, rtx rhs);
+ 
  namespace aarch64 {
    void report_non_ice (location_t, tree, unsigned int);
    void report_out_of_range (location_t, tree, unsigned int, HOST_WIDE_INT,
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-simd.md gcc-16-20250706/gcc/config/aarch64/aarch64-simd.md
*** gcc-16-20250629/gcc/config/aarch64/aarch64-simd.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-simd.md	Sun Jul  6 22:32:10 2025
***************
*** 3966,3972 ****
  
    rtx cc_reg = aarch64_gen_compare_reg (code, val, const0_rtx);
    rtx cmp_rtx = gen_rtx_fmt_ee (code, DImode, cc_reg, const0_rtx);
!   emit_jump_insn (gen_condjump (cmp_rtx, cc_reg, operands[3]));
    DONE;
  })
  
--- 3966,3972 ----
  
    rtx cc_reg = aarch64_gen_compare_reg (code, val, const0_rtx);
    rtx cmp_rtx = gen_rtx_fmt_ee (code, DImode, cc_reg, const0_rtx);
!   emit_jump_insn (gen_aarch64_bcond (cmp_rtx, cc_reg, operands[3]));
    DONE;
  })
  
***************
*** 5046,5051 ****
--- 5046,5081 ----
    DONE;
  })
  
+ ;; convert (truncate)(~x >> imm) into (truncate)(((u16)-1 - x) >> imm)
+ ;; because it will result in the 'not' being replaced with a constant load
+ ;; which allows for better loop optimization.
+ ;; We limit this to truncations that take the upper half and shift it to the
+ ;; lower half as we use subhn (patterns that would have generated an shrn
+ ;; otherwise).
+ ;; On some implementations the use of subhn also result in better throughput.
+ (define_insn_and_split "*shrn_to_subhn_<mode>"
+   [(set (match_operand:<VNARROWQ> 0 "register_operand" "=&w")
+ 	(truncate:<VNARROWQ>
+ 	  (lshiftrt:VQN
+ 	    (not:VQN (match_operand:VQN 1 "register_operand" "w"))
+ 	    (match_operand:VQN 2 "aarch64_simd_shift_imm_vec_exact_top"))))]
+   "TARGET_SIMD"
+   "#"
+   "&& true"
+   [(const_int 0)]
+ {
+   rtx tmp;
+   if (can_create_pseudo_p ())
+     tmp = gen_reg_rtx (<MODE>mode);
+   else
+     tmp = gen_rtx_REG (<MODE>mode, REGNO (operands[0]));
+   emit_move_insn (tmp, CONSTM1_RTX (<MODE>mode));
+   emit_insn (gen_aarch64_subhn<mode>_insn (operands[0], tmp,
+ 					   operands[1], operands[2]));
+   DONE;
+ })
+ 
+ 
  ;; pmul.
  
  (define_insn "aarch64_pmul<mode>"
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-sme.md gcc-16-20250706/gcc/config/aarch64/aarch64-sme.md
*** gcc-16-20250629/gcc/config/aarch64/aarch64-sme.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-sme.md	Sun Jul  6 22:32:10 2025
***************
*** 391,397 ****
      auto label = gen_label_rtx ();
      auto tpidr2 = gen_rtx_REG (DImode, R16_REGNUM);
      emit_insn (gen_aarch64_read_tpidr2 (tpidr2));
!     auto jump = emit_likely_jump_insn (gen_aarch64_cbnedi1 (tpidr2, label));
      JUMP_LABEL (jump) = label;
  
      aarch64_restore_za (operands[0]);
--- 391,397 ----
      auto label = gen_label_rtx ();
      auto tpidr2 = gen_rtx_REG (DImode, R16_REGNUM);
      emit_insn (gen_aarch64_read_tpidr2 (tpidr2));
!     auto jump = emit_likely_jump_insn (gen_aarch64_cbznedi1 (tpidr2, label));
      JUMP_LABEL (jump) = label;
  
      aarch64_restore_za (operands[0]);
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-sve.md gcc-16-20250706/gcc/config/aarch64/aarch64-sve.md
*** gcc-16-20250629/gcc/config/aarch64/aarch64-sve.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-sve.md	Sun Jul  6 22:32:10 2025
***************
*** 1344,1350 ****
    "TARGET_SVE"
    {
      operands[2] = aarch64_ptrue_reg (<VPRED>mode);
!     operands[3] = CONST0_RTX (<MODE>mode);
    }
  )
  
--- 1344,1350 ----
    "TARGET_SVE"
    {
      operands[2] = aarch64_ptrue_reg (<VPRED>mode);
!     operands[3] = CONST0_RTX (<VSINGLE>mode);
    }
  )
  
***************
*** 1354,1360 ****
  	(unspec:SVE_STRUCT
  	  [(match_operand:<VPRED> 2 "register_operand" "Upl")
  	   (match_operand:SVE_STRUCT 1 "memory_operand" "m")
! 	   (match_operand 3 "aarch64_maskload_else_operand")]
  	  UNSPEC_LDN))]
    "TARGET_SVE"
    "ld<vector_count><Vesize>\t%0, %2/z, %1"
--- 1354,1360 ----
  	(unspec:SVE_STRUCT
  	  [(match_operand:<VPRED> 2 "register_operand" "Upl")
  	   (match_operand:SVE_STRUCT 1 "memory_operand" "m")
! 	   (match_operand:<VSINGLE> 3 "aarch64_maskload_else_operand")]
  	  UNSPEC_LDN))]
    "TARGET_SVE"
    "ld<vector_count><Vesize>\t%0, %2/z, %1"
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-sys-regs.def gcc-16-20250706/gcc/config/aarch64/aarch64-sys-regs.def
*** gcc-16-20250629/gcc/config/aarch64/aarch64-sys-regs.def	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-sys-regs.def	Sun Jul  6 22:32:10 2025
***************
*** 572,583 ****
    SYSREG ("mdrar_el1",		CPENC (2,0,1,0,0),	F_REG_READ,		AARCH64_NO_FEATURES)
    SYSREG ("mdscr_el1",		CPENC (2,0,0,2,2),	0,			AARCH64_NO_FEATURES)
    SYSREG ("mdselr_el1",		CPENC (2,0,0,4,2),	F_ARCHEXT,		AARCH64_FEATURE (DEBUGv8p9))
!   SYSREG ("mecid_a0_el2",	CPENC (3,4,10,8,1),	0,			AARCH64_NO_FEATURES)
!   SYSREG ("mecid_a1_el2",	CPENC (3,4,10,8,3),	0,			AARCH64_NO_FEATURES)
!   SYSREG ("mecid_p0_el2",	CPENC (3,4,10,8,0),	0,			AARCH64_NO_FEATURES)
!   SYSREG ("mecid_p1_el2",	CPENC (3,4,10,8,2),	0,			AARCH64_NO_FEATURES)
!   SYSREG ("mecid_rl_a_el3",	CPENC (3,6,10,10,1),	0,			AARCH64_NO_FEATURES)
!   SYSREG ("mecidr_el2",		CPENC (3,4,10,8,7),	F_REG_READ,		AARCH64_NO_FEATURES)
    SYSREG ("mfar_el3",		CPENC (3,6,6,0,5),	0,			AARCH64_NO_FEATURES)
    SYSREG ("midr_el1",		CPENC (3,0,0,0,0),	F_REG_READ,		AARCH64_NO_FEATURES)
    SYSREG ("mpam0_el1",		CPENC (3,0,10,5,1),	0,			AARCH64_NO_FEATURES)
--- 572,583 ----
    SYSREG ("mdrar_el1",		CPENC (2,0,1,0,0),	F_REG_READ,		AARCH64_NO_FEATURES)
    SYSREG ("mdscr_el1",		CPENC (2,0,0,2,2),	0,			AARCH64_NO_FEATURES)
    SYSREG ("mdselr_el1",		CPENC (2,0,0,4,2),	F_ARCHEXT,		AARCH64_FEATURE (DEBUGv8p9))
!   SYSREG ("mecid_a0_el2",	CPENC (3,4,10,8,1),	F_ARCHEXT,		AARCH64_FEATURE (V8_7A))
!   SYSREG ("mecid_a1_el2",	CPENC (3,4,10,8,3),	F_ARCHEXT,		AARCH64_FEATURE (V8_7A))
!   SYSREG ("mecid_p0_el2",	CPENC (3,4,10,8,0),	F_ARCHEXT,		AARCH64_FEATURE (V8_7A))
!   SYSREG ("mecid_p1_el2",	CPENC (3,4,10,8,2),	F_ARCHEXT,		AARCH64_FEATURE (V8_7A))
!   SYSREG ("mecid_rl_a_el3",	CPENC (3,6,10,10,1),	F_ARCHEXT,		AARCH64_FEATURE (V8_7A))
!   SYSREG ("mecidr_el2",		CPENC (3,4,10,8,7),	F_REG_READ|F_ARCHEXT,	AARCH64_FEATURE (V8_7A))
    SYSREG ("mfar_el3",		CPENC (3,6,6,0,5),	0,			AARCH64_NO_FEATURES)
    SYSREG ("midr_el1",		CPENC (3,0,0,0,0),	F_REG_READ,		AARCH64_NO_FEATURES)
    SYSREG ("mpam0_el1",		CPENC (3,0,10,5,1),	0,			AARCH64_NO_FEATURES)
***************
*** 1145,1152 ****
    SYSREG ("vbar_el2",		CPENC (3,4,12,0,0),	0,			AARCH64_NO_FEATURES)
    SYSREG ("vbar_el3",		CPENC (3,6,12,0,0),	0,			AARCH64_NO_FEATURES)
    SYSREG ("vdisr_el2",		CPENC (3,4,12,1,1),	F_ARCHEXT,		AARCH64_FEATURE (RAS))
!   SYSREG ("vmecid_a_el2",	CPENC (3,4,10,9,1),	0,			AARCH64_NO_FEATURES)
!   SYSREG ("vmecid_p_el2",	CPENC (3,4,10,9,0),	0,			AARCH64_NO_FEATURES)
    SYSREG ("vmpidr_el2",		CPENC (3,4,0,0,5),	0,			AARCH64_NO_FEATURES)
    SYSREG ("vncr_el2",		CPENC (3,4,2,2,0),	F_ARCHEXT,		AARCH64_FEATURE (V8_4A))
    SYSREG ("vpidr_el2",		CPENC (3,4,0,0,0),	0,			AARCH64_NO_FEATURES)
--- 1145,1152 ----
    SYSREG ("vbar_el2",		CPENC (3,4,12,0,0),	0,			AARCH64_NO_FEATURES)
    SYSREG ("vbar_el3",		CPENC (3,6,12,0,0),	0,			AARCH64_NO_FEATURES)
    SYSREG ("vdisr_el2",		CPENC (3,4,12,1,1),	F_ARCHEXT,		AARCH64_FEATURE (RAS))
!   SYSREG ("vmecid_a_el2",	CPENC (3,4,10,9,1),	F_ARCHEXT,		AARCH64_FEATURE (V8_7A))
!   SYSREG ("vmecid_p_el2",	CPENC (3,4,10,9,0),	F_ARCHEXT,		AARCH64_FEATURE (V8_7A))
    SYSREG ("vmpidr_el2",		CPENC (3,4,0,0,5),	0,			AARCH64_NO_FEATURES)
    SYSREG ("vncr_el2",		CPENC (3,4,2,2,0),	F_ARCHEXT,		AARCH64_FEATURE (V8_4A))
    SYSREG ("vpidr_el2",		CPENC (3,4,0,0,0),	0,			AARCH64_NO_FEATURES)
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64-tune.md gcc-16-20250706/gcc/config/aarch64/aarch64-tune.md
*** gcc-16-20250629/gcc/config/aarch64/aarch64-tune.md	Sun Jun 29 22:34:57 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64-tune.md	Sun Jul  6 22:34:08 2025
***************
*** 1,5 ****
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,demeter,olympus,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- 1,5 ----
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,demeter,olympus,gb10,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64.cc gcc-16-20250706/gcc/config/aarch64/aarch64.cc
*** gcc-16-20250629/gcc/config/aarch64/aarch64.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64.cc	Sun Jul  6 22:32:10 2025
*************** svpattern_token (enum aarch64_svpattern
*** 959,964 ****
--- 959,997 ----
    gcc_unreachable ();
  }
  
+ /* Return true if RHS is an operand suitable for a CB<cc> (immediate)
+    instruction.  OP_CODE determines the type of the comparison.  */
+ bool
+ aarch64_cb_rhs (rtx_code op_code, rtx rhs)
+ {
+   if (!CONST_INT_P (rhs))
+     return REG_P (rhs);
+ 
+   HOST_WIDE_INT rhs_val = INTVAL (rhs);
+ 
+   switch (op_code)
+     {
+     case EQ:
+     case NE:
+     case GT:
+     case GTU:
+     case LT:
+     case LTU:
+       return IN_RANGE (rhs_val, 0, 63);
+ 
+     case GE:  /* CBGE:   signed greater than or equal */
+     case GEU: /* CBHS: unsigned greater than or equal */
+       return IN_RANGE (rhs_val, 1, 64);
+ 
+     case LE:  /* CBLE:   signed less than or equal */
+     case LEU: /* CBLS: unsigned less than or equal */
+       return IN_RANGE (rhs_val, -1, 62);
+ 
+     default:
+       return false;
+     }
+ }
+ 
  /* Return the location of a piece that is known to be passed or returned
     in registers.  FIRST_ZR is the first unused vector argument register
     and FIRST_PR is the first unused predicate argument register.  */
*************** aarch64_gen_test_and_branch (rtx_code co
*** 2884,2893 ****
        emit_insn (gen_aarch64_and3nr_compare0 (mode, x, mask));
        rtx cc_reg = gen_rtx_REG (CC_NZVmode, CC_REGNUM);
        rtx x = gen_rtx_fmt_ee (code, CC_NZVmode, cc_reg, const0_rtx);
!       return gen_condjump (x, cc_reg, label);
      }
!   return gen_aarch64_tb (code, mode, mode,
! 			 x, gen_int_mode (bitnum, mode), label);
  }
  
  /* Consider the operation:
--- 2917,2926 ----
        emit_insn (gen_aarch64_and3nr_compare0 (mode, x, mask));
        rtx cc_reg = gen_rtx_REG (CC_NZVmode, CC_REGNUM);
        rtx x = gen_rtx_fmt_ee (code, CC_NZVmode, cc_reg, const0_rtx);
!       return gen_aarch64_bcond (x, cc_reg, label);
      }
!   return gen_aarch64_tbz (code, mode, mode,
! 			   x, gen_int_mode (bitnum, mode), label);
  }
  
  /* Consider the operation:
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64.h gcc-16-20250706/gcc/config/aarch64/aarch64.h
*** gcc-16-20250629/gcc/config/aarch64/aarch64.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64.h	Sun Jul  6 22:32:10 2025
*************** constexpr auto AARCH64_FL_DEFAULT_ISA_MO
*** 410,415 ****
--- 410,418 ----
  /* CSSC instructions are enabled through +cssc.  */
  #define TARGET_CSSC AARCH64_HAVE_ISA (CSSC)
  
+ /* CB<cc> instructions are enabled through +cmpbr.  */
+ #define TARGET_CMPBR AARCH64_HAVE_ISA (CMPBR)
+ 
  /* Make sure this is always defined so we don't have to check for ifdefs
     but rather use normal ifs.  */
  #ifndef TARGET_FIX_ERR_A53_835769_DEFAULT
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/aarch64.md gcc-16-20250706/gcc/config/aarch64/aarch64.md
*** gcc-16-20250629/gcc/config/aarch64/aarch64.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/aarch64.md	Sun Jul  6 22:32:10 2025
***************
*** 569,577 ****
  ;; Attribute that specifies whether we are dealing with a branch to a
  ;; label that is far away, i.e. further away than the maximum/minimum
  ;; representable in a signed 21-bits number.
! ;; 0 :=: no
! ;; 1 :=: yes
! (define_attr "far_branch" "" (const_int 0))
  
  ;; Attribute that specifies whether the alternative uses MOVPRFX.
  (define_attr "movprfx" "no,yes" (const_string "no"))
--- 569,575 ----
  ;; Attribute that specifies whether we are dealing with a branch to a
  ;; label that is far away, i.e. further away than the maximum/minimum
  ;; representable in a signed 21-bits number.
! (define_attr "far_branch" "no,yes" (const_string "no"))
  
  ;; Attribute that specifies whether the alternative uses MOVPRFX.
  (define_attr "movprfx" "no,yes" (const_string "no"))
***************
*** 682,687 ****
--- 680,689 ----
   "msrr\t%x0, %x1, %H1"
  )
  
+ ;; -------------------------------------------------------------------
+ ;; Unconditional jumps
+ ;; -------------------------------------------------------------------
+ 
  (define_insn "indirect_jump"
    [(set (pc) (match_operand:DI 0 "register_operand" "r"))]
    ""
***************
*** 700,717 ****
    [(set_attr "type" "branch")]
  )
  
! (define_expand "cbranch<mode>4"
    [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
  			    [(match_operand:GPI 1 "register_operand")
  			     (match_operand:GPI 2 "aarch64_plus_operand")])
! 			   (label_ref (match_operand 3 "" ""))
  			   (pc)))]
    ""
!   "
!   operands[1] = aarch64_gen_compare_reg (GET_CODE (operands[0]), operands[1],
! 					 operands[2]);
!   operands[2] = const0_rtx;
!   "
  )
  
  (define_expand "cbranch<mode>4"
--- 702,771 ----
    [(set_attr "type" "branch")]
  )
  
! ;; Maximum PC-relative positive/negative displacements for various branching
! ;; instructions.
! (define_constants
!   [
!     ;; +/- 1MiB.  Used by B.<cond>, CBZ, CBNZ.
!     (BRANCH_LEN_P_1MiB  1048572)
!     (BRANCH_LEN_N_1MiB -1048576)
! 
!     ;; +/- 32KiB.  Used by TBZ, TBNZ.
!     (BRANCH_LEN_P_32KiB  32764)
!     (BRANCH_LEN_N_32KiB -32768)
! 
!     ;; +/- 1KiB.  Used by CBB<cond>, CBH<cond>, CB<cond>.
!     (BRANCH_LEN_P_1Kib  1020)
!     (BRANCH_LEN_N_1Kib -1024)
!   ]
! )
! 
! ;; -------------------------------------------------------------------
! ;; Conditional jumps
! ;; -------------------------------------------------------------------
! 
! ;; The order of the rules below is important.
! ;; Higher priority rules are preferred because they can express larger
! ;; displacements.
! ;; 1) EQ/NE comparisons against zero are handled by CBZ/CBNZ.
! ;; 2) LT/GE comparisons against zero are handled by TBZ/TBNZ.
! ;; 3) When the CMPBR extension is enabled:
! ;;   a) Comparisons between two registers are handled by
! ;;      CBB<cond>/CBH<cond>/CB<cond>.
! ;;   b) Comparisons between a GP register and an in range immediate are
! ;;      handled by CB<cond> (immediate).
! ;; 4) Otherwise, emit a CMP+B<cond> sequence.
! ;; -------------------------------------------------------------------
! 
! (define_expand "cbranch<GPI:mode>4"
    [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
  			    [(match_operand:GPI 1 "register_operand")
  			     (match_operand:GPI 2 "aarch64_plus_operand")])
! 			   (label_ref (match_operand 3))
  			   (pc)))]
    ""
!   {
!     if (TARGET_CMPBR && aarch64_cb_rhs (GET_CODE (operands[0]), operands[2]))
!       {
! 	/* The branch is supported natively.  */
!       }
!     else
!       {
!         operands[1] = aarch64_gen_compare_reg (GET_CODE (operands[0]),
! 					       operands[1], operands[2]);
!         operands[2] = const0_rtx;
!       }
!   }
! )
! 
! (define_expand "cbranch<SHORT:mode>4"
!   [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
! 			    [(match_operand:SHORT 1 "register_operand")
! 			     (match_operand:SHORT 2 "aarch64_reg_or_zero")])
! 			   (label_ref (match_operand 3))
! 			   (pc)))]
!   "TARGET_CMPBR"
!   ""
  )
  
  (define_expand "cbranch<mode>4"
***************
*** 719,743 ****
  		(match_operator 0 "aarch64_comparison_operator"
  		 [(match_operand:GPF_F16 1 "register_operand")
  		  (match_operand:GPF_F16 2 "aarch64_fp_compare_operand")])
! 		(label_ref (match_operand 3 "" ""))
  		(pc)))]
    ""
!   "
!   operands[1] = aarch64_gen_compare_reg (GET_CODE (operands[0]), operands[1],
! 					 operands[2]);
!   operands[2] = const0_rtx;
!   "
  )
  
  (define_expand "cbranchcc4"
!   [(set (pc) (if_then_else
! 	      (match_operator 0 "aarch64_comparison_operator"
! 	       [(match_operand 1 "cc_register")
! 	        (match_operand 2 "const0_operand")])
! 	      (label_ref (match_operand 3 "" ""))
! 	      (pc)))]
    ""
!   "")
  
  (define_insn "@ccmp<CC_ONLY:mode><GPI:mode>"
    [(set (match_operand:CC_ONLY 1 "cc_register")
--- 773,1073 ----
  		(match_operator 0 "aarch64_comparison_operator"
  		 [(match_operand:GPF_F16 1 "register_operand")
  		  (match_operand:GPF_F16 2 "aarch64_fp_compare_operand")])
! 		(label_ref (match_operand 3))
  		(pc)))]
    ""
!   {
!     operands[1] = aarch64_gen_compare_reg (GET_CODE (operands[0]), operands[1],
! 					   operands[2]);
!     operands[2] = const0_rtx;
!   }
  )
  
  (define_expand "cbranchcc4"
!   [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
! 			    [(match_operand 1 "cc_register")
! 			     (match_operand 2 "const0_operand")])
! 			   (label_ref (match_operand 3))
! 			   (pc)))]
    ""
!   ""
! )
! 
! ;; For an EQ/NE comparison against zero, emit `CBZ`/`CBNZ`
! (define_insn "aarch64_cbz<optab><mode>1"
!   [(set (pc) (if_then_else (EQL (match_operand:GPI 0 "register_operand" "r")
! 				(const_int 0))
! 			   (label_ref (match_operand 1))
! 			   (pc)))]
!   "!aarch64_track_speculation"
!   {
!     if (get_attr_length (insn) == 8)
!       return aarch64_gen_far_branch (operands, 1, "Lcb", "<inv_cb>\\t%<w>0, ");
!     else
!       return "<cbz>\\t%<w>0, %l1";
!   }
!   [(set_attr "type" "branch")
!    (set (attr "length")
! 	(if_then_else (and (ge (minus (match_dup 1) (pc))
! 			       (const_int BRANCH_LEN_N_1MiB))
! 			   (lt (minus (match_dup 1) (pc))
! 			       (const_int BRANCH_LEN_P_1MiB)))
! 		      (const_int 4)
! 		      (const_int 8)))
!    (set (attr "far_branch")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1MiB))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1MiB)))
! 		      (const_string "no")
! 		      (const_string "yes")))]
! )
! 
! ;; For an LT/GE comparison against zero, emit `TBZ`/`TBNZ`
! (define_insn "*aarch64_tbz<optab><mode>1"
!   [(set (pc) (if_then_else (LTGE (match_operand:ALLI 0 "register_operand" "r")
! 				 (const_int 0))
! 			   (label_ref (match_operand 1))
! 			   (pc)))
!    (clobber (reg:CC CC_REGNUM))]
!   "!aarch64_track_speculation"
!   {
!     if (get_attr_length (insn) == 8)
!       {
! 	if (get_attr_far_branch (insn) == FAR_BRANCH_YES)
! 	  return aarch64_gen_far_branch (operands, 1, "Ltb",
! 					 "<inv_tb>\\t%<w>0, <sizem1>, ");
! 	else
! 	  {
! 	    char buf[64];
! 	    uint64_t val = ((uint64_t) 1)
! 		<< (GET_MODE_SIZE (<MODE>mode) * BITS_PER_UNIT - 1);
! 	    sprintf (buf, "tst\t%%<w>0, %" PRId64, val);
! 	    output_asm_insn (buf, operands);
! 	    return "<bcond>\t%l1";
! 	  }
!       }
!     else
!       return "<tbz>\t%<w>0, <sizem1>, %l1";
!   }
!   [(set_attr "type" "branch")
!    (set (attr "length")
! 	(if_then_else (and (ge (minus (match_dup 1) (pc))
! 			       (const_int BRANCH_LEN_N_32KiB))
! 			   (lt (minus (match_dup 1) (pc))
! 			       (const_int BRANCH_LEN_P_32KiB)))
! 		      (const_int 4)
! 		      (const_int 8)))
!    (set (attr "far_branch")
! 	(if_then_else (and (ge (minus (match_dup 1) (pc))
! 			       (const_int BRANCH_LEN_N_1MiB))
! 			   (lt (minus (match_dup 1) (pc))
! 			       (const_int BRANCH_LEN_P_1MiB)))
! 		      (const_string "no")
! 		      (const_string "yes")))]
! )
! 
! ;; Emit a `CB<cond> (register)` or `CB<cond> (immediate)` instruction.
! ;; The immediate range depends on the comparison code.
! ;; Comparisons against immediates outside this range fall back to
! ;; CMP + B<cond>.
! (define_insn "aarch64_cb<INT_CMP:code><GPI:mode>"
!   [(set (pc) (if_then_else (INT_CMP
! 			     (match_operand:GPI 0 "register_operand" "r")
! 			     (match_operand:GPI 1 "nonmemory_operand"
! 			       "r<INT_CMP:cmpbr_imm_constraint>"))
! 			   (label_ref (match_operand 2))
! 			   (pc)))]
!   "TARGET_CMPBR && aarch64_cb_rhs (<INT_CMP:CODE>, operands[1])"
!   {
!     return (get_attr_far_branch (insn) == FAR_BRANCH_NO)
!       ? "cb<INT_CMP:cmp_op>\\t%<w>0, %<w>1, %l2"
!       : aarch64_gen_far_branch (operands, 2, "L",
!           "cb<INT_CMP:inv_cmp_op>\\t%<w>0, %<w>1, ");
!   }
!   [(set_attr "type" "branch")
!    (set (attr "length")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1Kib))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1Kib)))
! 		      (const_int 4)
! 		      (const_int 8)))
!    (set (attr "far_branch")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1Kib))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1Kib)))
! 		      (const_string "no")
! 		      (const_string "yes")))]
! )
! 
! ;; Emit a `CBB<cond> (register)` or `CBH<cond> (register)` instruction.
! (define_insn "aarch64_cb<INT_CMP:code><SHORT:mode>"
!   [(set (pc) (if_then_else (INT_CMP
! 			     (match_operand:SHORT 0 "register_operand" "r")
! 			     (match_operand:SHORT 1 "aarch64_reg_or_zero" "rZ"))
! 			   (label_ref (match_operand 2))
! 			   (pc)))]
!   "TARGET_CMPBR"
!   {
!     return (get_attr_far_branch (insn) == FAR_BRANCH_NO)
!       ? "cb<SHORT:cmpbr_suffix><INT_CMP:cmp_op>\\t%<w>0, %<w>1, %l2"
!       : aarch64_gen_far_branch (operands, 2, "L",
!           "cb<SHORT:cmpbr_suffix><INT_CMP:inv_cmp_op>\\t%<w>0, %<w>1, ");
!   }
!   [(set_attr "type" "branch")
!    (set (attr "length")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1Kib))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1Kib)))
! 		      (const_int 4)
! 		      (const_int 8)))
!    (set (attr "far_branch")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1Kib))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1Kib)))
! 		      (const_string "no")
! 		      (const_string "yes")))]
! )
! 
! ;; Emit `B<cond>`, assuming that the condition is already in the CC register.
! (define_insn "aarch64_bcond"
!   [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
! 			    [(match_operand 1 "cc_register")
! 			     (const_int 0)])
! 			   (label_ref (match_operand 2))
! 			   (pc)))]
!   ""
!   {
!     /* GCC's traditional style has been to use "beq" instead of "b.eq", etc.,
!        but the "." is required for SVE conditions.  */
!     bool use_dot_p = GET_MODE (operands[1]) == CC_NZCmode;
!     if (get_attr_length (insn) == 8)
!       return aarch64_gen_far_branch (operands, 2, "Lbcond",
! 				     use_dot_p ? "b.%M0\\t" : "b%M0\\t");
!     else
!       return use_dot_p ? "b.%m0\\t%l2" : "b%m0\\t%l2";
!   }
!   [(set_attr "type" "branch")
!    (set (attr "length")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1MiB))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1MiB)))
! 		      (const_int 4)
! 		      (const_int 8)))
!    (set (attr "far_branch")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1MiB))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1MiB)))
! 		      (const_string "no")
! 		      (const_string "yes")))]
! )
! 
! ;; For a 24-bit immediate CST we can optimize the compare for equality
! ;; and branch sequence from:
! ;; 	mov	x0, #imm1
! ;; 	movk	x0, #imm2, lsl 16 /* x0 contains CST.  */
! ;; 	cmp	x1, x0
! ;; 	b<ne,eq> .Label
! ;; into the shorter:
! ;; 	sub	x0, x1, #(CST & 0xfff000)
! ;; 	subs	x0, x0, #(CST & 0x000fff)
! ;; 	b<ne,eq> .Label
! (define_insn_and_split "*aarch64_bcond_wide_imm<GPI:mode>"
!   [(set (pc) (if_then_else (EQL (match_operand:GPI 0 "register_operand" "r")
! 			        (match_operand:GPI 1 "aarch64_imm24" "n"))
! 			   (label_ref:P (match_operand 2))
! 			   (pc)))]
!   "!aarch64_move_imm (INTVAL (operands[1]), <GPI:MODE>mode)
!    && !aarch64_plus_operand (operands[1], <GPI:MODE>mode)
!    && !reload_completed"
!   "#"
!   "&& true"
!   [(const_int 0)]
!   {
!     HOST_WIDE_INT lo_imm = UINTVAL (operands[1]) & 0xfff;
!     HOST_WIDE_INT hi_imm = UINTVAL (operands[1]) & 0xfff000;
!     rtx tmp = gen_reg_rtx (<GPI:MODE>mode);
!     emit_insn (gen_add<GPI:mode>3 (tmp, operands[0], GEN_INT (-hi_imm)));
!     emit_insn (gen_add<GPI:mode>3_compare0 (tmp, tmp, GEN_INT (-lo_imm)));
!     rtx cc_reg = gen_rtx_REG (CC_NZmode, CC_REGNUM);
!     rtx cmp_rtx = gen_rtx_fmt_ee (<EQL:CMP>, <GPI:MODE>mode,
! 				  cc_reg, const0_rtx);
!     emit_jump_insn (gen_aarch64_bcond (cmp_rtx, cc_reg, operands[2]));
!     DONE;
!   }
! )
! 
! ;; -------------------------------------------------------------------
! ;; Test bit and branch
! ;; -------------------------------------------------------------------
! 
! (define_expand "tbranch_<code><mode>3"
!   [(set (pc) (if_then_else (EQL
! 			     (match_operand:SHORT 0 "register_operand")
! 			     (match_operand 1 "const0_operand"))
! 			   (label_ref (match_operand 2 ""))
! 			   (pc)))]
!   ""
! {
!   rtx bitvalue = gen_reg_rtx (<ZEROM>mode);
!   rtx reg = gen_lowpart (<ZEROM>mode, operands[0]);
!   rtx val = gen_int_mode (HOST_WIDE_INT_1U << UINTVAL (operands[1]),
! 			  <MODE>mode);
!   emit_insn (gen_and<zerom>3 (bitvalue, reg, val));
!   operands[1] = const0_rtx;
!   operands[0] = aarch64_gen_compare_reg (<CODE>, bitvalue,
! 					 operands[1]);
! })
! 
! (define_insn "@aarch64_tbz<optab><ALLI:mode><GPI:mode>"
!   [(set (pc) (if_then_else (EQL
! 			     (zero_extract:GPI
! 			       (match_operand:ALLI 0 "register_operand" "r")
! 			       (const_int 1)
! 			       (match_operand 1 "aarch64_simd_shift_imm_<ALLI:mode>" "n"))
! 			     (const_int 0))
! 			   (label_ref (match_operand 2))
! 			   (pc)))
!    (clobber (reg:CC CC_REGNUM))]
!   "!aarch64_track_speculation"
!   {
!     if (get_attr_length (insn) == 8)
!       {
! 	if (get_attr_far_branch (insn) == 1)
! 	  return aarch64_gen_far_branch (operands, 2, "Ltb",
! 					 "<inv_tb>\\t%<ALLI:w>0, %1, ");
! 	else
! 	  {
! 	    operands[1] = GEN_INT (HOST_WIDE_INT_1U << UINTVAL (operands[1]));
! 	    return "tst\t%<ALLI:w>0, %1\;<bcond>\t%l2";
! 	  }
!       }
!     else
!       return "<tbz>\t%<ALLI:w>0, %1, %l2";
!   }
!   [(set_attr "type" "branch")
!    (set (attr "length")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_32KiB))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_32KiB)))
! 		      (const_int 4)
! 		      (const_int 8)))
!    (set (attr "far_branch")
! 	(if_then_else (and (ge (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_N_1MiB))
! 			   (lt (minus (match_dup 2) (pc))
! 			       (const_int BRANCH_LEN_P_1MiB)))
! 		      (const_string "no")
! 		      (const_string "yes")))]
! 
! )
  
  (define_insn "@ccmp<CC_ONLY:mode><GPI:mode>"
    [(set (match_operand:CC_ONLY 1 "cc_register")
***************
*** 869,939 ****
    }
  )
  
- (define_insn "condjump"
-   [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
- 			    [(match_operand 1 "cc_register" "") (const_int 0)])
- 			   (label_ref (match_operand 2 "" ""))
- 			   (pc)))]
-   ""
-   {
-     /* GCC's traditional style has been to use "beq" instead of "b.eq", etc.,
-        but the "." is required for SVE conditions.  */
-     bool use_dot_p = GET_MODE (operands[1]) == CC_NZCmode;
-     if (get_attr_length (insn) == 8)
-       return aarch64_gen_far_branch (operands, 2, "Lbcond",
- 				     use_dot_p ? "b.%M0\\t" : "b%M0\\t");
-     else
-       return use_dot_p ? "b.%m0\\t%l2" : "b%m0\\t%l2";
-   }
-   [(set_attr "type" "branch")
-    (set (attr "length")
- 	(if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576))
- 			   (lt (minus (match_dup 2) (pc)) (const_int 1048572)))
- 		      (const_int 4)
- 		      (const_int 8)))
-    (set (attr "far_branch")
- 	(if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576))
- 			   (lt (minus (match_dup 2) (pc)) (const_int 1048572)))
- 		      (const_int 0)
- 		      (const_int 1)))]
- )
- 
- ;; For a 24-bit immediate CST we can optimize the compare for equality
- ;; and branch sequence from:
- ;; 	mov	x0, #imm1
- ;; 	movk	x0, #imm2, lsl 16 /* x0 contains CST.  */
- ;; 	cmp	x1, x0
- ;; 	b<ne,eq> .Label
- ;; into the shorter:
- ;; 	sub	x0, x1, #(CST & 0xfff000)
- ;; 	subs	x0, x0, #(CST & 0x000fff)
- ;; 	b<ne,eq> .Label
- (define_insn_and_split "*compare_condjump<GPI:mode>"
-   [(set (pc) (if_then_else (EQL
- 			      (match_operand:GPI 0 "register_operand" "r")
- 			      (match_operand:GPI 1 "aarch64_imm24" "n"))
- 			   (label_ref:P (match_operand 2 "" ""))
- 			   (pc)))]
-   "!aarch64_move_imm (INTVAL (operands[1]), <GPI:MODE>mode)
-    && !aarch64_plus_operand (operands[1], <GPI:MODE>mode)
-    && !reload_completed"
-   "#"
-   "&& true"
-   [(const_int 0)]
-   {
-     HOST_WIDE_INT lo_imm = UINTVAL (operands[1]) & 0xfff;
-     HOST_WIDE_INT hi_imm = UINTVAL (operands[1]) & 0xfff000;
-     rtx tmp = gen_reg_rtx (<GPI:MODE>mode);
-     emit_insn (gen_add<GPI:mode>3 (tmp, operands[0], GEN_INT (-hi_imm)));
-     emit_insn (gen_add<GPI:mode>3_compare0 (tmp, tmp, GEN_INT (-lo_imm)));
-     rtx cc_reg = gen_rtx_REG (CC_NZmode, CC_REGNUM);
-     rtx cmp_rtx = gen_rtx_fmt_ee (<EQL:CMP>, <GPI:MODE>mode,
- 				  cc_reg, const0_rtx);
-     emit_jump_insn (gen_condjump (cmp_rtx, cc_reg, operands[2]));
-     DONE;
-   }
- )
- 
  (define_expand "casesi"
    [(match_operand:SI 0 "register_operand")	; Index
     (match_operand:SI 1 "const_int_operand")	; Lower bound
--- 1199,1204 ----
***************
*** 1125,1251 ****
     (set_attr "sls_length" "retbr")]
  )
  
- (define_insn "aarch64_cb<optab><mode>1"
-   [(set (pc) (if_then_else (EQL (match_operand:GPI 0 "register_operand" "r")
- 				(const_int 0))
- 			   (label_ref (match_operand 1 "" ""))
- 			   (pc)))]
-   "!aarch64_track_speculation"
-   {
-     if (get_attr_length (insn) == 8)
-       return aarch64_gen_far_branch (operands, 1, "Lcb", "<inv_cb>\\t%<w>0, ");
-     else
-       return "<cbz>\\t%<w>0, %l1";
-   }
-   [(set_attr "type" "branch")
-    (set (attr "length")
- 	(if_then_else (and (ge (minus (match_dup 1) (pc)) (const_int -1048576))
- 			   (lt (minus (match_dup 1) (pc)) (const_int 1048572)))
- 		      (const_int 4)
- 		      (const_int 8)))
-    (set (attr "far_branch")
- 	(if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576))
- 			   (lt (minus (match_dup 2) (pc)) (const_int 1048572)))
- 		      (const_int 0)
- 		      (const_int 1)))]
- )
- 
- (define_expand "tbranch_<code><mode>3"
-   [(set (pc) (if_then_else
-               (EQL (match_operand:SHORT 0 "register_operand")
-                    (match_operand 1 "const0_operand"))
-               (label_ref (match_operand 2 ""))
-               (pc)))]
-   ""
- {
-   rtx bitvalue = gen_reg_rtx (<ZEROM>mode);
-   rtx reg = gen_lowpart (<ZEROM>mode, operands[0]);
-   rtx val = gen_int_mode (HOST_WIDE_INT_1U << UINTVAL (operands[1]), <MODE>mode);
-   emit_insn (gen_and<zerom>3 (bitvalue, reg, val));
-   operands[1] = const0_rtx;
-   operands[0] = aarch64_gen_compare_reg (<CODE>, bitvalue,
- 					 operands[1]);
- })
- 
- (define_insn "@aarch64_tb<optab><ALLI:mode><GPI:mode>"
-   [(set (pc) (if_then_else
- 	      (EQL (zero_extract:GPI (match_operand:ALLI 0 "register_operand" "r")
- 				     (const_int 1)
- 				     (match_operand 1
- 				       "aarch64_simd_shift_imm_<ALLI:mode>" "n"))
- 		   (const_int 0))
- 	     (label_ref (match_operand 2 "" ""))
- 	     (pc)))
-    (clobber (reg:CC CC_REGNUM))]
-   "!aarch64_track_speculation"
-   {
-     if (get_attr_length (insn) == 8)
-       {
- 	if (get_attr_far_branch (insn) == 1)
- 	  return aarch64_gen_far_branch (operands, 2, "Ltb",
- 					 "<inv_tb>\\t%<ALLI:w>0, %1, ");
- 	else
- 	  {
- 	    operands[1] = GEN_INT (HOST_WIDE_INT_1U << UINTVAL (operands[1]));
- 	    return "tst\t%<ALLI:w>0, %1\;<bcond>\t%l2";
- 	  }
-       }
-     else
-       return "<tbz>\t%<ALLI:w>0, %1, %l2";
-   }
-   [(set_attr "type" "branch")
-    (set (attr "length")
- 	(if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -32768))
- 			   (lt (minus (match_dup 2) (pc)) (const_int 32764)))
- 		      (const_int 4)
- 		      (const_int 8)))
-    (set (attr "far_branch")
- 	(if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576))
- 			   (lt (minus (match_dup 2) (pc)) (const_int 1048572)))
- 		      (const_int 0)
- 		      (const_int 1)))]
- 
- )
- 
- (define_insn "*cb<optab><mode>1"
-   [(set (pc) (if_then_else (LTGE (match_operand:ALLI 0 "register_operand" "r")
- 				 (const_int 0))
- 			   (label_ref (match_operand 1 "" ""))
- 			   (pc)))
-    (clobber (reg:CC CC_REGNUM))]
-   "!aarch64_track_speculation"
-   {
-     if (get_attr_length (insn) == 8)
-       {
- 	if (get_attr_far_branch (insn) == 1)
- 	  return aarch64_gen_far_branch (operands, 1, "Ltb",
- 					 "<inv_tb>\\t%<w>0, <sizem1>, ");
- 	else
- 	  {
- 	    char buf[64];
- 	    uint64_t val = ((uint64_t) 1)
- 		<< (GET_MODE_SIZE (<MODE>mode) * BITS_PER_UNIT - 1);
- 	    sprintf (buf, "tst\t%%<w>0, %" PRId64, val);
- 	    output_asm_insn (buf, operands);
- 	    return "<bcond>\t%l1";
- 	  }
-       }
-     else
-       return "<tbz>\t%<w>0, <sizem1>, %l1";
-   }
-   [(set_attr "type" "branch")
-    (set (attr "length")
- 	(if_then_else (and (ge (minus (match_dup 1) (pc)) (const_int -32768))
- 			   (lt (minus (match_dup 1) (pc)) (const_int 32764)))
- 		      (const_int 4)
- 		      (const_int 8)))
-    (set (attr "far_branch")
- 	(if_then_else (and (ge (minus (match_dup 1) (pc)) (const_int -1048576))
- 			   (lt (minus (match_dup 1) (pc)) (const_int 1048572)))
- 		      (const_int 0)
- 		      (const_int 1)))]
- )
- 
  (define_expand "save_stack_nonlocal"
    [(set (match_operand 0 "memory_operand")
          (match_operand 1 "register_operand"))]
--- 1390,1395 ----
***************
*** 1316,1328 ****
        emit_insn (gen_subdi3_compare1 (gcs_now, gcs_old, gcs_now));
        rtx cc_reg = gen_rtx_REG (CC_NZmode, CC_REGNUM);
        rtx cmp_rtx = gen_rtx_fmt_ee (EQ, DImode, cc_reg, const0_rtx);
!       emit_jump_insn (gen_condjump (cmp_rtx, cc_reg, done_label));
        emit_label (loop_label);
        emit_insn (gen_aarch64_gcspopm_xzr ());
        emit_insn (gen_adddi3_compare0 (gcs_now, gcs_now, GEN_INT (-8)));
        cc_reg = gen_rtx_REG (CC_NZmode, CC_REGNUM);
        cmp_rtx = gen_rtx_fmt_ee (NE, DImode, cc_reg, const0_rtx);
!       emit_jump_insn (gen_condjump (cmp_rtx, cc_reg, loop_label));
        emit_label (done_label);
      }
    DONE;
--- 1460,1472 ----
        emit_insn (gen_subdi3_compare1 (gcs_now, gcs_old, gcs_now));
        rtx cc_reg = gen_rtx_REG (CC_NZmode, CC_REGNUM);
        rtx cmp_rtx = gen_rtx_fmt_ee (EQ, DImode, cc_reg, const0_rtx);
!       emit_jump_insn (gen_aarch64_bcond (cmp_rtx, cc_reg, done_label));
        emit_label (loop_label);
        emit_insn (gen_aarch64_gcspopm_xzr ());
        emit_insn (gen_adddi3_compare0 (gcs_now, gcs_now, GEN_INT (-8)));
        cc_reg = gen_rtx_REG (CC_NZmode, CC_REGNUM);
        cmp_rtx = gen_rtx_fmt_ee (NE, DImode, cc_reg, const0_rtx);
!       emit_jump_insn (gen_aarch64_bcond (cmp_rtx, cc_reg, loop_label));
        emit_label (done_label);
      }
    DONE;
***************
*** 8090,8097 ****
  	     : gen_stack_protect_test_si) (operands[0], operands[1]));
  
    rtx cc_reg = gen_rtx_REG (CCmode, CC_REGNUM);
!   emit_jump_insn (gen_condjump (gen_rtx_EQ (VOIDmode, cc_reg, const0_rtx),
! 				cc_reg, operands[2]));
    DONE;
  })
  
--- 8234,8241 ----
  	     : gen_stack_protect_test_si) (operands[0], operands[1]));
  
    rtx cc_reg = gen_rtx_REG (CCmode, CC_REGNUM);
!   emit_jump_insn (gen_aarch64_bcond (gen_rtx_EQ (VOIDmode, cc_reg, const0_rtx),
! 				     cc_reg, operands[2]));
    DONE;
  })
  
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/constraints.md gcc-16-20250706/gcc/config/aarch64/constraints.md
*** gcc-16-20250629/gcc/config/aarch64/constraints.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/constraints.md	Sun Jul  6 22:32:10 2025
***************
*** 304,309 ****
--- 304,327 ----
    (and (match_code "const_int")
         (match_test "(unsigned HOST_WIDE_INT) ival <= 7")))
  
+ (define_constraint "Uc0"
+   "@internal
+   A constraint that matches the integers 0...63."
+   (and (match_code "const_int")
+        (match_test "IN_RANGE (ival, 0, 63)")))
+ 
+ (define_constraint "Uc1"
+   "@internal
+   A constraint that matches the integers 1...64."
+   (and (match_code "const_int")
+        (match_test "IN_RANGE (ival, 1, 64)")))
+ 
+ (define_constraint "Uc2"
+   "@internal
+   A constraint that matches the integers -1...62."
+   (and (match_code "const_int")
+        (match_test "IN_RANGE (ival, -1, 62)")))
+ 
  (define_constraint "Up3"
    "@internal
    A constraint that matches the integers 2^(0...4)."
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/iterators.md gcc-16-20250706/gcc/config/aarch64/iterators.md
*** gcc-16-20250629/gcc/config/aarch64/iterators.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/iterators.md	Sun Jul  6 22:32:10 2025
***************
*** 2961,2966 ****
--- 2961,2996 ----
  			  (geu "hs")
  			  (gtu "hi")])
  
+ (define_code_attr inv_cmp_op [(lt "ge")
+ 			  (le "gt")
+ 			  (eq "ne")
+ 			  (ne "eq")
+ 			  (ge "lt")
+ 			  (gt "le")
+ 			  (ltu "hs")
+ 			  (leu "hi")
+ 			  (geu "lo")
+ 			  (gtu "ls")])
+ 
+ (define_mode_attr cmpbr_suffix [(QI "b") (HI "h")])
+ 
+ (define_code_iterator INT_CMP [lt le eq ne ge gt ltu leu geu gtu])
+ 
+ (define_code_attr cmpbr_imm_constraint [
+     (eq "Uc0")
+     (ne "Uc0")
+     (gt "Uc0")
+     (gtu "Uc0")
+     (lt "Uc0")
+     (ltu "Uc0")
+ 
+     (ge "Uc1")
+     (geu "Uc1")
+ 
+     (le "Uc2")
+     (leu "Uc2")
+ ])
+ 
  (define_code_attr fix_trunc_optab [(fix "fix_trunc")
  				   (unsigned_fix "fixuns_trunc")])
  
diff -Nrcpad gcc-16-20250629/gcc/config/aarch64/predicates.md gcc-16-20250706/gcc/config/aarch64/predicates.md
*** gcc-16-20250629/gcc/config/aarch64/predicates.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/aarch64/predicates.md	Sun Jul  6 22:32:10 2025
***************
*** 1076,1080 ****
  		    && !(INTVAL (op) & 0xf)")))
  
  (define_predicate "aarch64_maskload_else_operand"
!   (and (match_code "const_int,const_vector")
         (match_test "op == CONST0_RTX (GET_MODE (op))")))
--- 1076,1080 ----
  		    && !(INTVAL (op) & 0xf)")))
  
  (define_predicate "aarch64_maskload_else_operand"
!   (and (match_code "const_vector")
         (match_test "op == CONST0_RTX (GET_MODE (op))")))
diff -Nrcpad gcc-16-20250629/gcc/config/avr/avr-mcus.def gcc-16-20250706/gcc/config/avr/avr-mcus.def
*** gcc-16-20250629/gcc/config/avr/avr-mcus.def	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/avr/avr-mcus.def	Sun Jul  6 22:32:10 2025
*************** AVR_MCU ("avr64da28",        ARCH_AVRXME
*** 313,318 ****
--- 313,322 ----
  AVR_MCU ("avr64da32",        ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DA32__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64da48",        ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DA48__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64da64",        ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DA64__",   0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da28s",       ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DA28S__",  0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da32s",       ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DA32S__",  0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da48s",       ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DA48S__",  0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64da64s",       ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DA64S__",  0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64db28",        ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DB28__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64db32",        ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DB32__",   0x6000, 0x0, 0x10000, 0)
  AVR_MCU ("avr64db48",        ARCH_AVRXMEGA2, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR64DB48__",   0x6000, 0x0, 0x10000, 0)
*************** AVR_MCU ("avr16du32",        ARCH_AVRXME
*** 389,394 ****
--- 393,401 ----
  AVR_MCU ("avr32da28",        ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DA28__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32da32",        ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DA32__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32da48",        ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DA48__",   0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32da28s",       ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DA28S__",  0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32da32s",       ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DA32S__",  0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32da48s",       ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DA48S__",  0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32db28",        ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DB28__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32db32",        ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DB32__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32db48",        ARCH_AVRXMEGA3, AVR_CVT,                 "__AVR_AVR32DB48__",   0x7000, 0x0, 0x8000, 0x8000)
*************** AVR_MCU ("avr128da28",       ARCH_AVRXME
*** 427,432 ****
--- 434,443 ----
  AVR_MCU ("avr128da32",       ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DA32__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128da48",       ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DA48__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128da64",       ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DA64__",  0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da28s",      ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DA28S__", 0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da32s",      ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DA32S__", 0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da48s",      ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DA48S__", 0x4000, 0x0, 0x20000, 0)
+ AVR_MCU ("avr128da64s",      ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DA64S__", 0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128db28",       ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DB28__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128db32",       ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DB32__",  0x4000, 0x0, 0x20000, 0)
  AVR_MCU ("avr128db48",       ARCH_AVRXMEGA4, AVR_CVT | AVR_ISA_FLMAP, "__AVR_AVR128DB48__",  0x4000, 0x0, 0x20000, 0)
diff -Nrcpad gcc-16-20250629/gcc/config/i386/driver-i386.cc gcc-16-20250706/gcc/config/i386/driver-i386.cc
*** gcc-16-20250629/gcc/config/i386/driver-i386.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/i386/driver-i386.cc	Sun Jul  6 22:32:10 2025
*************** const char *host_detect_local_cpu (int a
*** 600,606 ****
  	      if (has_feature (FEATURE_AVX512F))
  		{
  		  /* Assume Diamond Rapids.  */
! 		  if (has_feature (FEATURE_AMX_TRANSPOSE))
  		    cpu = "diamondrapids";
  		  /* Assume Granite Rapids D.  */
  		  else if (has_feature (FEATURE_AMX_COMPLEX))
--- 600,606 ----
  	      if (has_feature (FEATURE_AVX512F))
  		{
  		  /* Assume Diamond Rapids.  */
! 		  if (has_feature (FEATURE_AMX_FP8))
  		    cpu = "diamondrapids";
  		  /* Assume Granite Rapids D.  */
  		  else if (has_feature (FEATURE_AMX_COMPLEX))
diff -Nrcpad gcc-16-20250629/gcc/config/i386/i386-expand.cc gcc-16-20250706/gcc/config/i386/i386-expand.cc
*** gcc-16-20250629/gcc/config/i386/i386-expand.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/i386/i386-expand.cc	Sun Jul  6 22:32:10 2025
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 10377,10382 ****
--- 10377,10383 ----
        char c_mask = CALL_USED_REGISTERS_MASK (is_64bit_ms_abi);
        for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
  	if (!fixed_regs[i]
+ 	    && i != HARD_FRAME_POINTER_REGNUM
  	    && !(ix86_call_used_regs[i] == 1
  		 || (ix86_call_used_regs[i] & c_mask))
  	    && !STACK_REGNO_P (i)
diff -Nrcpad gcc-16-20250629/gcc/config/i386/i386-options.cc gcc-16-20250706/gcc/config/i386/i386-options.cc
*** gcc-16-20250629/gcc/config/i386/i386-options.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/i386/i386-options.cc	Sun Jul  6 22:32:10 2025
*************** ix86_set_func_type (tree fndecl)
*** 3280,3298 ****
    if (lookup_attribute ("preserve_none",
  			     TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
      no_callee_saved_registers = TYPE_PRESERVE_NONE;
!   else if (lookup_attribute ("no_callee_saved_registers",
! 			TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
      no_callee_saved_registers = TYPE_NO_CALLEE_SAVED_REGISTERS;
-   else if (ix86_noreturn_no_callee_saved_registers
- 	   && TREE_THIS_VOLATILE (fndecl)
- 	   && optimize
- 	   && !optimize_debug
- 	   && (TREE_NOTHROW (fndecl) || !flag_exceptions)
- 	   && !lookup_attribute ("interrupt",
- 				 TYPE_ATTRIBUTES (TREE_TYPE (fndecl)))
- 	   && !lookup_attribute ("no_caller_saved_registers",
- 				 TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
-     no_callee_saved_registers = TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP;
  
    if (cfun->machine->func_type == TYPE_UNKNOWN)
      {
--- 3280,3297 ----
    if (lookup_attribute ("preserve_none",
  			     TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
      no_callee_saved_registers = TYPE_PRESERVE_NONE;
!   else if ((lookup_attribute ("no_callee_saved_registers",
! 			      TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
! 	   || (ix86_noreturn_no_callee_saved_registers
! 	       && TREE_THIS_VOLATILE (fndecl)
! 	       && optimize
! 	       && !optimize_debug
! 	       && (TREE_NOTHROW (fndecl) || !flag_exceptions)
! 	       && !lookup_attribute ("interrupt",
! 				     TYPE_ATTRIBUTES (TREE_TYPE (fndecl)))
! 	       && !lookup_attribute ("no_caller_saved_registers",
! 				 TYPE_ATTRIBUTES (TREE_TYPE (fndecl)))))
      no_callee_saved_registers = TYPE_NO_CALLEE_SAVED_REGISTERS;
  
    if (cfun->machine->func_type == TYPE_UNKNOWN)
      {
diff -Nrcpad gcc-16-20250629/gcc/config/i386/i386.cc gcc-16-20250706/gcc/config/i386/i386.cc
*** gcc-16-20250629/gcc/config/i386/i386.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/i386/i386.cc	Sun Jul  6 22:32:10 2025
*************** ix86_function_ok_for_sibcall (tree decl,
*** 1043,1050 ****
    if ((cfun->machine->call_saved_registers
         != TYPE_NO_CALLEE_SAVED_REGISTERS)
        && cfun->machine->call_saved_registers != TYPE_PRESERVE_NONE
-       && (cfun->machine->call_saved_registers
- 	  != TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP)
        && ix86_type_no_callee_saved_registers_p (type))
      return false;
  
--- 1043,1048 ----
*************** ix86_save_reg (unsigned int regno, bool
*** 6774,6782 ****
  
      case TYPE_NO_CALLEE_SAVED_REGISTERS:
      case TYPE_PRESERVE_NONE:
-       return false;
- 
-     case TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP:
        if (regno != HARD_FRAME_POINTER_REGNUM)
  	return false;
        break;
--- 6772,6777 ----
*************** legitimize_tls_address (rtx x, enum tls_
*** 12567,12577 ****
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
  	      rtx_insn *insns;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr));
  	      insns = end_sequence ();
  
  	      if (GET_MODE (x) != Pmode)
--- 12562,12573 ----
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ 	      rtx rdi = gen_rtx_REG (Pmode, DI_REG);
  	      rtx_insn *insns;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr, rdi));
  	      insns = end_sequence ();
  
  	      if (GET_MODE (x) != Pmode)
*************** legitimize_tls_address (rtx x, enum tls_
*** 12620,12631 ****
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
  	      rtx_insn *insns;
  	      rtx eqv;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr));
  	      insns = end_sequence ();
  
  	      /* Attach a unique REG_EQUAL, to allow the RTL optimizers to
--- 12616,12628 ----
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ 	      rtx rdi = gen_rtx_REG (Pmode, DI_REG);
  	      rtx_insn *insns;
  	      rtx eqv;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr, rdi));
  	      insns = end_sequence ();
  
  	      /* Attach a unique REG_EQUAL, to allow the RTL optimizers to
*************** x86_field_alignment (tree type, int comp
*** 23689,23707 ****
  /* Print call to TARGET to FILE.  */
  
  static void
! x86_print_call_or_nop (FILE *file, const char *target)
  {
    if (flag_nop_mcount || !strcmp (target, "nop"))
      /* 5 byte nop: nopl 0(%[re]ax,%[re]ax,1) */
!     fprintf (file, "1:" ASM_BYTE "0x0f, 0x1f, 0x44, 0x00, 0x00\n");
    else if (!TARGET_PECOFF && flag_pic)
      {
        gcc_assert (flag_plt);
  
!       fprintf (file, "1:\tcall\t%s@PLT\n", target);
      }
    else
!     fprintf (file, "1:\tcall\t%s\n", target);
  }
  
  static bool
--- 23686,23706 ----
  /* Print call to TARGET to FILE.  */
  
  static void
! x86_print_call_or_nop (FILE *file, const char *target,
! 		       const char *label)
  {
    if (flag_nop_mcount || !strcmp (target, "nop"))
      /* 5 byte nop: nopl 0(%[re]ax,%[re]ax,1) */
!     fprintf (file, "%s" ASM_BYTE "0x0f, 0x1f, 0x44, 0x00, 0x00\n",
! 	     label);
    else if (!TARGET_PECOFF && flag_pic)
      {
        gcc_assert (flag_plt);
  
!       fprintf (file, "%s\tcall\t%s@PLT\n", label, target);
      }
    else
!     fprintf (file, "%s\tcall\t%s\n", label, target);
  }
  
  static bool
*************** x86_function_profiler (FILE *file, int l
*** 23786,23791 ****
--- 23785,23797 ----
  
    const char *mcount_name = MCOUNT_NAME;
  
+   bool fentry_section_p
+     = (flag_record_mcount
+        || lookup_attribute ("fentry_section",
+ 			    DECL_ATTRIBUTES (current_function_decl)));
+ 
+   const char *label = fentry_section_p ? "1:" : "";
+ 
    if (current_fentry_name (&mcount_name))
      ;
    else if (fentry_name)
*************** x86_function_profiler (FILE *file, int l
*** 23821,23831 ****
  		  reg = legacy_reg;
  		}
  	      if (ASSEMBLER_DIALECT == ASM_INTEL)
! 		fprintf (file, "1:\tmovabs\t%s, OFFSET FLAT:%s\n"
! 			       "\tcall\t%s\n", reg, mcount_name, reg);
  	      else
! 		fprintf (file, "1:\tmovabsq\t$%s, %%%s\n\tcall\t*%%%s\n",
! 			 mcount_name, reg, reg);
  	      break;
  	    case CM_LARGE_PIC:
  #ifdef NO_PROFILE_COUNTERS
--- 23827,23838 ----
  		  reg = legacy_reg;
  		}
  	      if (ASSEMBLER_DIALECT == ASM_INTEL)
! 		fprintf (file, "%s\tmovabs\t%s, OFFSET FLAT:%s\n"
! 			       "\tcall\t%s\n", label, reg, mcount_name,
! 			       reg);
  	      else
! 		fprintf (file, "%s\tmovabsq\t$%s, %%%s\n\tcall\t*%%%s\n",
! 			 label, mcount_name, reg, reg);
  	      break;
  	    case CM_LARGE_PIC:
  #ifdef NO_PROFILE_COUNTERS
*************** x86_function_profiler (FILE *file, int l
*** 23866,23886 ****
  	      if (!flag_plt)
  		{
  		  if (ASSEMBLER_DIALECT == ASM_INTEL)
! 		    fprintf (file, "1:\tcall\t[QWORD PTR %s@GOTPCREL[rip]]\n",
! 			     mcount_name);
  		  else
! 		    fprintf (file, "1:\tcall\t*%s@GOTPCREL(%%rip)\n",
! 			     mcount_name);
  		  break;
  		}
  	      /* fall through */
  	    default:
! 	      x86_print_call_or_nop (file, mcount_name);
  	      break;
  	    }
  	}
        else
! 	x86_print_call_or_nop (file, mcount_name);
      }
    else if (flag_pic)
      {
--- 23873,23893 ----
  	      if (!flag_plt)
  		{
  		  if (ASSEMBLER_DIALECT == ASM_INTEL)
! 		    fprintf (file, "%s\tcall\t[QWORD PTR %s@GOTPCREL[rip]]\n",
! 			     label, mcount_name);
  		  else
! 		    fprintf (file, "%s\tcall\t*%s@GOTPCREL(%%rip)\n",
! 			     label, mcount_name);
  		  break;
  		}
  	      /* fall through */
  	    default:
! 	      x86_print_call_or_nop (file, mcount_name, label);
  	      break;
  	    }
  	}
        else
! 	x86_print_call_or_nop (file, mcount_name, label);
      }
    else if (flag_pic)
      {
*************** x86_function_profiler (FILE *file, int l
*** 23895,23905 ****
  		 LPREFIX, labelno);
  #endif
        if (flag_plt)
! 	x86_print_call_or_nop (file, mcount_name);
        else if (ASSEMBLER_DIALECT == ASM_INTEL)
! 	fprintf (file, "1:\tcall\t[DWORD PTR %s@GOT[ebx]]\n", mcount_name);
        else
! 	fprintf (file, "1:\tcall\t*%s@GOT(%%ebx)\n", mcount_name);
      }
    else
      {
--- 23902,23914 ----
  		 LPREFIX, labelno);
  #endif
        if (flag_plt)
! 	x86_print_call_or_nop (file, mcount_name, label);
        else if (ASSEMBLER_DIALECT == ASM_INTEL)
! 	fprintf (file, "%s\tcall\t[DWORD PTR %s@GOT[ebx]]\n",
! 		 label, mcount_name);
        else
! 	fprintf (file, "%s\tcall\t*%s@GOT(%%ebx)\n",
! 		 label, mcount_name);
      }
    else
      {
*************** x86_function_profiler (FILE *file, int l
*** 23912,23923 ****
  	fprintf (file, "\tmovl\t$%sP%d, %%" PROFILE_COUNT_REGISTER "\n",
  		 LPREFIX, labelno);
  #endif
!       x86_print_call_or_nop (file, mcount_name);
      }
  
!   if (flag_record_mcount
!       || lookup_attribute ("fentry_section",
! 			   DECL_ATTRIBUTES (current_function_decl)))
      {
        const char *sname = "__mcount_loc";
  
--- 23921,23930 ----
  	fprintf (file, "\tmovl\t$%sP%d, %%" PROFILE_COUNT_REGISTER "\n",
  		 LPREFIX, labelno);
  #endif
!       x86_print_call_or_nop (file, mcount_name, label);
      }
  
!   if (fentry_section_p)
      {
        const char *sname = "__mcount_loc";
  
diff -Nrcpad gcc-16-20250629/gcc/config/i386/i386.h gcc-16-20250706/gcc/config/i386/i386.h
*** gcc-16-20250629/gcc/config/i386/i386.h	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/i386/i386.h	Sun Jul  6 22:32:10 2025
*************** enum call_saved_registers_type
*** 2802,2812 ****
       or "no_caller_saved_registers" attribute.  */
    TYPE_NO_CALLER_SAVED_REGISTERS,
    /* The current function is a function specified with the
!      "no_callee_saved_registers" attribute.  */
    TYPE_NO_CALLEE_SAVED_REGISTERS,
-   /* The current function is a function specified with the "noreturn"
-      attribute.  */
-   TYPE_NO_CALLEE_SAVED_REGISTERS_EXCEPT_BP,
    /* The current function is a function specified with the
       "preserve_none" attribute.  */
    TYPE_PRESERVE_NONE,
--- 2802,2811 ----
       or "no_caller_saved_registers" attribute.  */
    TYPE_NO_CALLER_SAVED_REGISTERS,
    /* The current function is a function specified with the
!      "no_callee_saved_registers" attribute or a function specified with
!      the "noreturn" attribute when compiled with
!      "-mnoreturn-no-callee-saved-registers".  */
    TYPE_NO_CALLEE_SAVED_REGISTERS,
    /* The current function is a function specified with the
       "preserve_none" attribute.  */
    TYPE_PRESERVE_NONE,
diff -Nrcpad gcc-16-20250629/gcc/config/i386/i386.md gcc-16-20250706/gcc/config/i386/i386.md
*** gcc-16-20250629/gcc/config/i386/i386.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/i386/i386.md	Sun Jul  6 22:32:10 2025
***************
*** 23201,23207 ****
  	 (match_operand 3)))
     (unspec:P [(match_operand 1 "tls_symbolic_operand")
  	      (reg:P SP_REG)]
! 	     UNSPEC_TLS_GD)]
    "TARGET_64BIT"
  {
    if (!TARGET_X32)
--- 23201,23208 ----
  	 (match_operand 3)))
     (unspec:P [(match_operand 1 "tls_symbolic_operand")
  	      (reg:P SP_REG)]
! 	     UNSPEC_TLS_GD)
!    (clobber (match_operand:P 4 "register_operand" "=D"))]
    "TARGET_64BIT"
  {
    if (!TARGET_X32)
***************
*** 23218,23224 ****
         Use data16 prefix instead, which doesn't have this problem.  */
      fputs ("\tdata16", asm_out_file);
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
    if (TARGET_SUN_TLS || flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
      fputs (ASM_SHORT "0x6666\n", asm_out_file);
    else
--- 23219,23225 ----
         Use data16 prefix instead, which doesn't have this problem.  */
      fputs ("\tdata16", asm_out_file);
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %q4|%q4, %E1@tlsgd[rip]}", operands);
    if (TARGET_SUN_TLS || flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
      fputs (ASM_SHORT "0x6666\n", asm_out_file);
    else
***************
*** 23242,23255 ****
  	 (match_operand 4)))
     (unspec:DI [(match_operand 1 "tls_symbolic_operand")
  	       (reg:DI SP_REG)]
! 	      UNSPEC_TLS_GD)]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[3]) == CONST
     && GET_CODE (XEXP (operands[3], 0)) == UNSPEC
     && XINT (XEXP (operands[3], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%3, %%rax|rax, %3}", operands);
    output_asm_insn ("add{q}\t{%2, %%rax|rax, %2}", operands);
    return "call\t{*%%rax|rax}";
--- 23243,23257 ----
  	 (match_operand 4)))
     (unspec:DI [(match_operand 1 "tls_symbolic_operand")
  	       (reg:DI SP_REG)]
! 	      UNSPEC_TLS_GD)
!    (clobber (match_operand:DI 5 "register_operand" "=D"))]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[3]) == CONST
     && GET_CODE (XEXP (operands[3], 0)) == UNSPEC
     && XINT (XEXP (operands[3], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %5|%5, %E1@tlsgd[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%3, %%rax|rax, %3}", operands);
    output_asm_insn ("add{q}\t{%2, %%rax|rax, %2}", operands);
    return "call\t{*%%rax|rax}";
***************
*** 23265,23271 ****
  	   (const_int 0)))
       (unspec:P [(match_operand 1 "tls_symbolic_operand")
  		(reg:P SP_REG)]
! 	       UNSPEC_TLS_GD)])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
--- 23267,23274 ----
  	   (const_int 0)))
       (unspec:P [(match_operand 1 "tls_symbolic_operand")
  		(reg:P SP_REG)]
! 	       UNSPEC_TLS_GD)
!      (clobber (match_operand:P 3 "register_operand"))])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
***************
*** 23316,23326 ****
  	(call:P
  	 (mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
  	 (match_operand 2)))
!    (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)]
    "TARGET_64BIT"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
    if (TARGET_SUN_TLS)
      return "call\t%p1@plt";
    if (flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
--- 23319,23330 ----
  	(call:P
  	 (mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
  	 (match_operand 2)))
!    (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
!    (clobber (match_operand:P 3 "register_operand" "=D"))]
    "TARGET_64BIT"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %q3|%q3, %&@tlsld[rip]}", operands);
    if (TARGET_SUN_TLS)
      return "call\t%p1@plt";
    if (flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
***************
*** 23336,23349 ****
  	 (mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
  			  (match_operand:DI 2 "immediate_operand" "i")))
  	 (match_operand 3)))
!    (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[2]) == CONST
     && GET_CODE (XEXP (operands[2], 0)) == UNSPEC
     && XINT (XEXP (operands[2], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%2, %%rax|rax, %2}", operands);
    output_asm_insn ("add{q}\t{%1, %%rax|rax, %1}", operands);
    return "call\t{*%%rax|rax}";
--- 23340,23354 ----
  	 (mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
  			  (match_operand:DI 2 "immediate_operand" "i")))
  	 (match_operand 3)))
!    (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)
!    (clobber (match_operand:DI 4 "register_operand" "=D"))]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[2]) == CONST
     && GET_CODE (XEXP (operands[2], 0)) == UNSPEC
     && XINT (XEXP (operands[2], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %4|%4, %&@tlsld[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%2, %%rax|rax, %2}", operands);
    output_asm_insn ("add{q}\t{%1, %%rax|rax, %1}", operands);
    return "call\t{*%%rax|rax}";
***************
*** 23357,23363 ****
  	   (call:P
  	    (mem:QI (match_operand 1))
  	    (const_int 0)))
!       (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
--- 23362,23369 ----
  	   (call:P
  	    (mem:QI (match_operand 1))
  	    (const_int 0)))
!       (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
!       (clobber (match_operand:P 2 "register_operand"))])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
diff -Nrcpad gcc-16-20250629/gcc/config/loongarch/loongarch.md gcc-16-20250706/gcc/config/loongarch/loongarch.md
*** gcc-16-20250629/gcc/config/loongarch/loongarch.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/loongarch/loongarch.md	Sun Jul  6 22:32:10 2025
***************
*** 4573,4581 ****
    "&& true"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 0)
! 	(unspec:SI [(match_dup 3) (subreg:SI (match_dup 1) 0)] CRC))]
    {
      operands[3] = gen_reg_rtx (<MODE>mode);
    })
  
  ;; With normal or medium code models, if the only use of a pc-relative
--- 4573,4582 ----
    "&& true"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 0)
! 	(unspec:SI [(match_dup 3) (match_dup 1)] CRC))]
    {
      operands[3] = gen_reg_rtx (<MODE>mode);
+     operands[1] = lowpart_subreg (SImode, operands[1], DImode);
    })
  
  ;; With normal or medium code models, if the only use of a pc-relative
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/autovec-opt.md gcc-16-20250706/gcc/config/riscv/autovec-opt.md
*** gcc-16-20250629/gcc/config/riscv/autovec-opt.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/autovec-opt.md	Sun Jul  6 22:32:10 2025
***************
*** 1723,1728 ****
--- 1723,1730 ----
  ;; - vfnmsub.vf
  ;; - vfmacc.vf
  ;; - vfmsac.vf
+ ;; - vfnmacc.vf
+ ;; - vfnmsac.vf
  ;; =============================================================================
  
  ;; vfmadd.vf, vfmsub.vf, vfmacc.vf, vfmsac.vf
***************
*** 1748,1769 ****
    [(set_attr "type" "vfmuladd")]
  )
  
! ;; vfnmsub.vf
  (define_insn_and_split "*vfnmsub_<mode>"
!   [(set (match_operand:V_VLSF 0 "register_operand"		"=vd")
      (minus:V_VLSF
! 	    (match_operand:V_VLSF 3 "register_operand"		" vr")
! 	    (mult:V_VLSF
! 	      (vec_duplicate:V_VLSF
! 		(match_operand:<VEL> 1 "register_operand"	"  f"))
! 	      (match_operand:V_VLSF 2 "register_operand"	"  0"))))]
    "TARGET_VECTOR && can_create_pseudo_p ()"
    "#"
    "&& 1"
    [(const_int 0)]
    {
      rtx ops[] = {operands[0], operands[1], operands[2], operands[3],
! 		 operands[2]};
      riscv_vector::emit_vlmax_insn (code_for_pred_mul_neg_scalar (PLUS, <MODE>mode),
  				   riscv_vector::TERNARY_OP_FRM_DYN, ops);
      DONE;
--- 1750,1771 ----
    [(set_attr "type" "vfmuladd")]
  )
  
! ;; vfnmsub.vf, vfnmsac.vf
  (define_insn_and_split "*vfnmsub_<mode>"
!   [(set (match_operand:V_VLSF 0 "register_operand")
      (minus:V_VLSF
!       (match_operand:V_VLSF 3 "register_operand")
!       (mult:V_VLSF
! 	(vec_duplicate:V_VLSF
! 	  (match_operand:<VEL> 1 "register_operand"))
! 	(match_operand:V_VLSF 2 "register_operand"))))]
    "TARGET_VECTOR && can_create_pseudo_p ()"
    "#"
    "&& 1"
    [(const_int 0)]
    {
      rtx ops[] = {operands[0], operands[1], operands[2], operands[3],
! 		 RVV_VUNDEF(<MODE>mode)};
      riscv_vector::emit_vlmax_insn (code_for_pred_mul_neg_scalar (PLUS, <MODE>mode),
  				   riscv_vector::TERNARY_OP_FRM_DYN, ops);
      DONE;
***************
*** 1771,1793 ****
    [(set_attr "type" "vfmuladd")]
  )
  
! ;; vfnmadd.vf
  (define_insn_and_split "*vfnmadd_<mode>"
!   [(set (match_operand:V_VLSF 0 "register_operand"	"=vd")
      (minus:V_VLSF
        (mult:V_VLSF
  	(neg:V_VLSF
! 	  (match_operand:V_VLSF 2 "register_operand"	"  0"))
  	(vec_duplicate:V_VLSF
! 	  (match_operand:<VEL> 1 "register_operand"	"  f")))
!       (match_operand:V_VLSF 3 "register_operand"	" vr")))]
    "TARGET_VECTOR && can_create_pseudo_p ()"
    "#"
    "&& 1"
    [(const_int 0)]
    {
      rtx ops[] = {operands[0], operands[1], operands[2], operands[3],
! 		 operands[2]};
      riscv_vector::emit_vlmax_insn (code_for_pred_mul_neg_scalar (MINUS, <MODE>mode),
  				   riscv_vector::TERNARY_OP_FRM_DYN, ops);
      DONE;
--- 1773,1795 ----
    [(set_attr "type" "vfmuladd")]
  )
  
! ;; vfnmadd.vf, vfnmacc.vf
  (define_insn_and_split "*vfnmadd_<mode>"
!   [(set (match_operand:V_VLSF 0 "register_operand")
      (minus:V_VLSF
        (mult:V_VLSF
  	(neg:V_VLSF
! 	  (match_operand:V_VLSF 2 "register_operand"))
  	(vec_duplicate:V_VLSF
! 	  (match_operand:<VEL> 1 "register_operand")))
!       (match_operand:V_VLSF 3 "register_operand")))]
    "TARGET_VECTOR && can_create_pseudo_p ()"
    "#"
    "&& 1"
    [(const_int 0)]
    {
      rtx ops[] = {operands[0], operands[1], operands[2], operands[3],
! 		 RVV_VUNDEF(<MODE>mode)};
      riscv_vector::emit_vlmax_insn (code_for_pred_mul_neg_scalar (MINUS, <MODE>mode),
  				   riscv_vector::TERNARY_OP_FRM_DYN, ops);
      DONE;
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/pipeline-checker gcc-16-20250706/gcc/config/riscv/pipeline-checker
*** gcc-16-20250629/gcc/config/riscv/pipeline-checker	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/config/riscv/pipeline-checker	Sun Jul  6 22:32:10 2025
***************
*** 0 ****
--- 1,191 ----
+ #!/usr/bin/env python3
+ 
+ # RISC-V pipeline model checker.
+ # Copyright (C) 2025 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/>.
+ 
+ import re
+ import sys
+ import argparse
+ from pathlib import Path
+ from typing import List
+ import pprint
+ 
+ def remove_line_comments(text: str) -> str:
+     # Remove ';;' and everything after it on each line
+     cleaned_lines = []
+     for line in text.splitlines():
+         comment_index = line.find(';;')
+         if comment_index != -1:
+             line = line[:comment_index]
+         cleaned_lines.append(line)
+     return '\n'.join(cleaned_lines)
+ 
+ 
+ def tokenize_sexpr(s: str) -> List[str]:
+     # Tokenize input string, including support for balanced {...} C blocks
+     tokens = []
+     i = 0
+     while i < len(s):
+         c = s[i]
+         if c.isspace():
+             i += 1
+         elif c == '(' or c == ')':
+             tokens.append(c)
+             i += 1
+         elif c == '"':
+             # Parse quoted string
+             j = i + 1
+             while j < len(s) and s[j] != '"':
+                 if s[j] == '\\':
+                     j += 1  # Skip escape
+                 j += 1
+             tokens.append(s[i:j+1])
+             i = j + 1
+         elif c == '{':
+             # Parse balanced C block
+             depth = 1
+             j = i + 1
+             while j < len(s) and depth > 0:
+                 if s[j] == '{':
+                     depth += 1
+                 elif s[j] == '}':
+                     depth -= 1
+                 j += 1
+             tokens.append(s[i:j])  # Include enclosing braces
+             i = j
+         else:
+             # Parse atom
+             j = i
+             while j < len(s) and not s[j].isspace() and s[j] not in '()"{}':
+                 j += 1
+             tokens.append(s[i:j])
+             i = j
+     return tokens
+ 
+ 
+ def parse_sexpr(tokens: List[str]) -> any:
+     # Recursively parse tokenized S-expression
+     token = tokens.pop(0)
+     if token == '(':
+         lst = []
+         while tokens[0] != ')':
+             lst.append(parse_sexpr(tokens))
+         tokens.pop(0)  # Discard closing parenthesis
+         return lst
+     elif token.startswith('"') and token.endswith('"'):
+         return token[1:-1]  # Remove surrounding quotes
+     elif token.startswith('{') and token.endswith('}'):
+         return token  # Keep C code block as-is
+     else:
+         return token
+ 
+ 
+ def find_define_attr_type(ast: any) -> List[List[str]]:
+     # Traverse AST to find all (define_attr "type" ...) entries
+     result = []
+     if isinstance(ast, list):
+         if ast and ast[0] == 'define_attr' and len(ast) >= 2 and ast[1] == 'type':
+             result.append(ast)
+         for elem in ast:
+             result.extend(find_define_attr_type(elem))
+     return result
+ 
+ 
+ def parse_md_file(path: Path):
+     # Read file, remove comments, and parse all top-level S-expressions
+     with open(path, encoding='utf-8') as f:
+         raw_content = f.read()
+     clean_content = remove_line_comments(raw_content)
+     tokens = tokenize_sexpr(clean_content)
+     items = []
+     while tokens:
+         items.append(parse_sexpr(tokens))
+     return items
+ 
+ def parsing_str_set(s: str) -> set:
+     s = s.replace('\\','').split(',')
+     s = set(map(lambda x: x.strip(), s))
+     return s
+ 
+ def get_avaliable_types(md_file_path: str):
+     # Main logic: parse input file and print define_attr "type" expressions
+     ast = parse_md_file(Path(md_file_path))
+ 
+     # Get all type from define_attr type
+     define_attr_types = find_define_attr_type(ast)
+     types = parsing_str_set (define_attr_types[0][2])
+     return types
+ 
+ def get_consumed_type(entry: List[str]) -> set:
+     # Extract the consumed type from a define_insn_reservation entry
+     current_type = entry[0]
+     if current_type in ['and', 'or']:
+         return get_consumed_type(entry[1]) | get_consumed_type(entry[2])
+     elif current_type == 'eq_attr' and entry[1] == 'type':
+         return parsing_str_set(entry[2])
+     return set()
+ 
+ def check_pipemodel(md_file_path: str):
+     # Load the RISCV MD file and check for pipemodel
+     ast = parse_md_file(Path(md_file_path))
+ 
+     consumed_type = set()
+ 
+     for entry in ast:
+         entry_type = entry[0]
+         if entry_type not in ["define_insn_reservation"]:
+             continue
+         consumed_type |= get_consumed_type(entry[3])
+     return consumed_type
+ 
+ 
+ def main():
+     parser = argparse.ArgumentParser(description='Check GCC pipeline model for instruction type coverage')
+     parser.add_argument('pipeline_model', help='Pipeline model file to check')
+     parser.add_argument('--base-md',
+                         help='Base machine description file (default: riscv.md in script directory)',
+                         default=None)
+     parser.add_argument('-v', '--verbose',
+                         help='Show detailed type information',
+                         action='store_true')
+     args = parser.parse_args()
+ 
+     # Set default base-md path if not provided
+     if args.base_md is None:
+         script_dir = Path(__file__).parent
+         base_md_path = script_dir / "riscv.md"
+     else:
+         base_md_path = Path(args.base_md)
+     avaliable_types = get_avaliable_types(str(base_md_path))
+     consumed_type = check_pipemodel(args.pipeline_model)
+ 
+     if args.verbose:
+         print("Available types:\n", avaliable_types)
+         print("Consumed types:\n", consumed_type)
+ 
+     if not avaliable_types.issubset(consumed_type):
+         print("Error: Some types are not consumed by the pipemodel")
+         print("Missing types:\n", avaliable_types - consumed_type)
+         sys.exit(1)
+     else:
+         print("All available types are consumed by the pipemodel.")
+ 
+ 
+ if __name__ == '__main__':
+     main()
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/predicates.md gcc-16-20250706/gcc/config/riscv/predicates.md
*** gcc-16-20250629/gcc/config/riscv/predicates.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/predicates.md	Sun Jul  6 22:32:10 2025
***************
*** 33,43 ****
  (define_predicate "prefetch_operand"
    (ior (match_operand 0 "register_operand")
         (and (match_test "const_arith_operand (op, VOIDmode)")
! 	    (match_test "(INTVAL (op) & 0xf) == 0"))
         (and (match_code "plus")
  	    (match_test "register_operand (XEXP (op, 0), word_mode)")
  	    (match_test "const_arith_operand (XEXP (op, 1), VOIDmode)")
! 	    (match_test "(INTVAL (XEXP (op, 1)) & 0xf) == 0"))))
  
  (define_predicate "lui_operand"
    (and (match_code "const_int")
--- 33,43 ----
  (define_predicate "prefetch_operand"
    (ior (match_operand 0 "register_operand")
         (and (match_test "const_arith_operand (op, VOIDmode)")
! 	    (match_test "(INTVAL (op) & 0x1f) == 0"))
         (and (match_code "plus")
  	    (match_test "register_operand (XEXP (op, 0), word_mode)")
  	    (match_test "const_arith_operand (XEXP (op, 1), VOIDmode)")
! 	    (match_test "(INTVAL (XEXP (op, 1)) & 0x1f) == 0"))))
  
  (define_predicate "lui_operand"
    (and (match_code "const_int")
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/riscv-v.cc gcc-16-20250706/gcc/config/riscv/riscv-v.cc
*** gcc-16-20250629/gcc/config/riscv/riscv-v.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/riscv-v.cc	Sun Jul  6 22:32:10 2025
*************** expand_const_vector_interleaved_stepped_
*** 1598,1604 ****
  	  shifted_vid = gen_reg_rtx (mode);
  	  rtx shift = gen_int_mode (1, Xmode);
  	  rtx shift_ops[] = {shifted_vid, vid, shift};
! 	  emit_vlmax_insn (code_for_pred_scalar (ASHIFT, mode), BINARY_OP,
  			   shift_ops);
  	}
        else
--- 1598,1604 ----
  	  shifted_vid = gen_reg_rtx (mode);
  	  rtx shift = gen_int_mode (1, Xmode);
  	  rtx shift_ops[] = {shifted_vid, vid, shift};
! 	  emit_vlmax_insn (code_for_pred_scalar (LSHIFTRT, mode), BINARY_OP,
  			   shift_ops);
  	}
        else
*************** expand_vx_binary_vec_dup_vec (rtx op_0,
*** 5544,5549 ****
--- 5544,5550 ----
      case SMIN:
      case UMIN:
      case US_PLUS:
+     case SS_PLUS:
        icode = code_for_pred_scalar (code, mode);
        break;
      case MINUS:
*************** expand_vx_binary_vec_vec_dup (rtx op_0,
*** 5583,5588 ****
--- 5584,5591 ----
      case SMIN:
      case UMIN:
      case US_PLUS:
+     case US_MINUS:
+     case SS_PLUS:
        icode = code_for_pred_scalar (code, mode);
        break;
      default:
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/riscv-vsetvl.cc gcc-16-20250706/gcc/config/riscv/riscv-vsetvl.cc
*** gcc-16-20250629/gcc/config/riscv/riscv-vsetvl.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/riscv-vsetvl.cc	Sun Jul  6 22:32:10 2025
*************** using namespace riscv_vector;
*** 100,130 ****
  static void
  bitmap_union_of_preds_with_entry (sbitmap dst, sbitmap *src, basic_block b)
  {
!   unsigned int set_size = dst->size;
!   edge e;
!   unsigned ix;
! 
!   for (ix = 0; ix < EDGE_COUNT (b->preds); ix++)
      {
!       e = EDGE_PRED (b, ix);
!       bitmap_copy (dst, src[e->src->index]);
!       break;
      }
  
!   if (ix == EDGE_COUNT (b->preds))
!     bitmap_clear (dst);
!   else
!     for (ix++; ix < EDGE_COUNT (b->preds); ix++)
!       {
! 	unsigned int i;
! 	SBITMAP_ELT_TYPE *p, *r;
  
! 	e = EDGE_PRED (b, ix);
! 	p = src[e->src->index]->elms;
! 	r = dst->elms;
! 	for (i = 0; i < set_size; i++)
! 	  *r++ |= *p++;
!       }
  }
  
  /* Compute the reaching definition in and out based on the gen and KILL
--- 100,127 ----
  static void
  bitmap_union_of_preds_with_entry (sbitmap dst, sbitmap *src, basic_block b)
  {
!   /* Handle case with no predecessors (including ENTRY block).  */
!   if (EDGE_COUNT (b->preds) == 0)
      {
!       bitmap_clear (dst);
!       return;
      }
  
!   edge e;
!   edge_iterator ei;
!   /* Union remaining predecessors' bitmaps.  */
!   FOR_EACH_EDGE (e, ei, b->preds)
!     {
!       /* Initialize with first predecessor's bitmap.  */
!       if (ei.index == 0)
! 	{
! 	  bitmap_copy (dst, src[e->src->index]);
! 	  continue;
! 	}
  
!       /* Perform bitmap OR operation element-wise.  */
!       bitmap_ior (dst, dst, src[e->src->index]);
!     }
  }
  
  /* Compute the reaching definition in and out based on the gen and KILL
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/riscv.cc gcc-16-20250706/gcc/config/riscv/riscv.cc
*** gcc-16-20250629/gcc/config/riscv/riscv.cc	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/riscv.cc	Sun Jul  6 22:32:10 2025
*************** riscv_rtx_costs (rtx x, machine_mode mod
*** 3996,4001 ****
--- 3996,4003 ----
  		    case MOD:
  		    case UMOD:
  		    case US_PLUS:
+ 		    case US_MINUS:
+ 		    case SS_PLUS:
  		      *total = get_vector_binary_rtx_cost (op, scalar2vr_cost);
  		      break;
  		    default:
*************** riscv_allocate_and_probe_stack_space (rt
*** 8977,8988 ****
        temp2 = riscv_force_temporary (temp2, gen_int_mode (rounded_size, Pmode));
        insn = emit_insn (gen_sub3_insn (temp2, stack_pointer_rtx, temp2));
  
        if (!frame_pointer_needed)
  	{
  	  /* We want the CFA independent of the stack pointer for the
  	     duration of the loop.  */
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, temp1, rounded_size));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
--- 8979,8998 ----
        temp2 = riscv_force_temporary (temp2, gen_int_mode (rounded_size, Pmode));
        insn = emit_insn (gen_sub3_insn (temp2, stack_pointer_rtx, temp2));
  
+       /* The size does not represent actual stack pointer address shift
+ 	 from the top of the frame, as it might be lowered before.
+ 	 To consider the correct SP addresses for the CFA notes, it is needed
+ 	 to correct them with the initial offset value.  */
+       HOST_WIDE_INT initial_cfa_offset
+ 	= cfun->machine->frame.total_size.to_constant () - size;
+ 
        if (!frame_pointer_needed)
  	{
  	  /* We want the CFA independent of the stack pointer for the
  	     duration of the loop.  */
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, temp1,
! 				       initial_cfa_offset + rounded_size));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
*************** riscv_allocate_and_probe_stack_space (rt
*** 8995,9001 ****
  	{
  	  insn = get_last_insn ();
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, stack_pointer_rtx, rounded_size));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
--- 9005,9012 ----
  	{
  	  insn = get_last_insn ();
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, stack_pointer_rtx,
! 				       initial_cfa_offset + rounded_size));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
*************** riscv_fusion_enabled_p(enum riscv_fusion
*** 10199,10215 ****
  static bool
  riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr)
  {
    rtx prev_set = single_set (prev);
    rtx curr_set = single_set (curr);
    /* prev and curr are simple SET insns i.e. no flag setting or branching.  */
    bool simple_sets_p = prev_set && curr_set && !any_condjump_p (curr);
  
!   if (!riscv_macro_fusion_p ())
!     return false;
  
    if (simple_sets_p
        && (riscv_fusion_enabled_p (RISCV_FUSE_ZEXTW)
! 	  || riscv_fusion_enabled_p (RISCV_FUSE_ZEXTWS)))
      {
        /* We are trying to match the following:
  	   prev (slli) == (set (reg:DI rD)
--- 10210,10242 ----
  static bool
  riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr)
  {
+   /* If fusion is not enabled, then there's nothing to do.  */
+   if (!riscv_macro_fusion_p ())
+     return false;
+ 
+   /* If PREV is already marked as fused, then we can't fuse CURR with PREV
+      and if we were to fuse them we'd end up with a blob of insns that
+      essentially are an atomic unit which is bad for scheduling.  */
+   if (SCHED_GROUP_P (prev))
+     return false;
+ 
    rtx prev_set = single_set (prev);
    rtx curr_set = single_set (curr);
    /* prev and curr are simple SET insns i.e. no flag setting or branching.  */
    bool simple_sets_p = prev_set && curr_set && !any_condjump_p (curr);
+   bool sched1 = can_create_pseudo_p ();
  
!   unsigned int prev_dest_regno = (REG_P (SET_DEST (prev_set))
! 				  ? REGNO (SET_DEST (prev_set))
! 				  : FIRST_PSEUDO_REGISTER);
!   unsigned int curr_dest_regno = (REG_P (SET_DEST (curr_set))
! 				  ? REGNO (SET_DEST (curr_set))
! 				  : FIRST_PSEUDO_REGISTER);
  
    if (simple_sets_p
        && (riscv_fusion_enabled_p (RISCV_FUSE_ZEXTW)
! 	  || riscv_fusion_enabled_p (RISCV_FUSE_ZEXTWS))
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (slli) == (set (reg:DI rD)
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10223,10241 ****
  	  && GET_CODE (SET_SRC (curr_set)) == LSHIFTRT
  	  && REG_P (SET_DEST (prev_set))
  	  && REG_P (SET_DEST (curr_set))
! 	  && REGNO (SET_DEST (prev_set)) == REGNO (SET_DEST (curr_set))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == REGNO(SET_DEST (curr_set))
  	  && CONST_INT_P (XEXP (SET_SRC (prev_set), 1))
  	  && CONST_INT_P (XEXP (SET_SRC (curr_set), 1))
  	  && INTVAL (XEXP (SET_SRC (prev_set), 1)) == 32
! 	  && (( INTVAL (XEXP (SET_SRC (curr_set), 1)) == 32
! 		&& riscv_fusion_enabled_p(RISCV_FUSE_ZEXTW) )
! 	      || ( INTVAL (XEXP (SET_SRC (curr_set), 1)) < 32
! 		   && riscv_fusion_enabled_p(RISCV_FUSE_ZEXTWS))))
! 	return true;
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_ZEXTH))
      {
        /* We are trying to match the following:
  	   prev (slli) == (set (reg:DI rD)
--- 10250,10272 ----
  	  && GET_CODE (SET_SRC (curr_set)) == LSHIFTRT
  	  && REG_P (SET_DEST (prev_set))
  	  && REG_P (SET_DEST (curr_set))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == curr_dest_regno
  	  && CONST_INT_P (XEXP (SET_SRC (prev_set), 1))
  	  && CONST_INT_P (XEXP (SET_SRC (curr_set), 1))
  	  && INTVAL (XEXP (SET_SRC (prev_set), 1)) == 32
! 	  && ((INTVAL (XEXP (SET_SRC (curr_set), 1)) == 32
! 	       && riscv_fusion_enabled_p (RISCV_FUSE_ZEXTW) )
! 	      || (INTVAL (XEXP (SET_SRC (curr_set), 1)) < 32
! 		  && riscv_fusion_enabled_p (RISCV_FUSE_ZEXTWS))))
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_ZEXTWS\n");
! 	  return true;
! 	}
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_ZEXTH)
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (slli) == (set (reg:DI rD)
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10247,10262 ****
  	  && GET_CODE (SET_SRC (curr_set)) == LSHIFTRT
  	  && REG_P (SET_DEST (prev_set))
  	  && REG_P (SET_DEST (curr_set))
! 	  && REGNO (SET_DEST (prev_set)) == REGNO (SET_DEST (curr_set))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == REGNO(SET_DEST (curr_set))
  	  && CONST_INT_P (XEXP (SET_SRC (prev_set), 1))
  	  && CONST_INT_P (XEXP (SET_SRC (curr_set), 1))
  	  && INTVAL (XEXP (SET_SRC (prev_set), 1)) == 48
  	  && INTVAL (XEXP (SET_SRC (curr_set), 1)) == 48)
! 	return true;
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LDINDEXED))
      {
        /* We are trying to match the following:
  	   prev (add) == (set (reg:DI rD)
--- 10278,10297 ----
  	  && GET_CODE (SET_SRC (curr_set)) == LSHIFTRT
  	  && REG_P (SET_DEST (prev_set))
  	  && REG_P (SET_DEST (curr_set))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == curr_dest_regno
  	  && CONST_INT_P (XEXP (SET_SRC (prev_set), 1))
  	  && CONST_INT_P (XEXP (SET_SRC (curr_set), 1))
  	  && INTVAL (XEXP (SET_SRC (prev_set), 1)) == 48
  	  && INTVAL (XEXP (SET_SRC (curr_set), 1)) == 48)
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file,"RISCV_FUSE_ZEXTH\n");
! 	  return true;
! 	}
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LDINDEXED)
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (add) == (set (reg:DI rD)
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10265,10276 ****
  			      (mem:DI (reg:DI rD))) */
  
        if (MEM_P (SET_SRC (curr_set))
  	  && REG_P (XEXP (SET_SRC (curr_set), 0))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == REGNO (SET_DEST (prev_set))
  	  && GET_CODE (SET_SRC (prev_set)) == PLUS
  	  && REG_P (XEXP (SET_SRC (prev_set), 0))
  	  && REG_P (XEXP (SET_SRC (prev_set), 1)))
! 	return true;
  
        /* We are trying to match the following:
  	   prev (add) == (set (reg:DI rD)
--- 10300,10316 ----
  			      (mem:DI (reg:DI rD))) */
  
        if (MEM_P (SET_SRC (curr_set))
+ 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
  	  && REG_P (XEXP (SET_SRC (curr_set), 0))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == prev_dest_regno
  	  && GET_CODE (SET_SRC (prev_set)) == PLUS
  	  && REG_P (XEXP (SET_SRC (prev_set), 0))
  	  && REG_P (XEXP (SET_SRC (prev_set), 1)))
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_LDINDEXED\n");
! 	  return true;
! 	}
  
        /* We are trying to match the following:
  	   prev (add) == (set (reg:DI rD)
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10280,10294 ****
        if ((GET_CODE (SET_SRC (curr_set)) == SIGN_EXTEND
  	   || (GET_CODE (SET_SRC (curr_set)) == ZERO_EXTEND))
  	  && MEM_P (XEXP (SET_SRC (curr_set), 0))
  	  && REG_P (XEXP (XEXP (SET_SRC (curr_set), 0), 0))
! 	  && REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == REGNO (SET_DEST (prev_set))
  	  && GET_CODE (SET_SRC (prev_set)) == PLUS
  	  && REG_P (XEXP (SET_SRC (prev_set), 0))
  	  && REG_P (XEXP (SET_SRC (prev_set), 1)))
! 	return true;
      }
  
!     if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LDPREINCREMENT))
      {
        /* We are trying to match the following:
  	   prev (add) == (set (reg:DI rS)
--- 10320,10340 ----
        if ((GET_CODE (SET_SRC (curr_set)) == SIGN_EXTEND
  	   || (GET_CODE (SET_SRC (curr_set)) == ZERO_EXTEND))
  	  && MEM_P (XEXP (SET_SRC (curr_set), 0))
+ 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
  	  && REG_P (XEXP (XEXP (SET_SRC (curr_set), 0), 0))
! 	  && REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == prev_dest_regno
  	  && GET_CODE (SET_SRC (prev_set)) == PLUS
  	  && REG_P (XEXP (SET_SRC (prev_set), 0))
  	  && REG_P (XEXP (SET_SRC (prev_set), 1)))
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_LDINDEXED\n");
! 	  return true;
! 	}
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LDPREINCREMENT)
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (add) == (set (reg:DI rS)
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10297,10311 ****
  			      (mem:DI (reg:DI rS))) */
  
        if (MEM_P (SET_SRC (curr_set))
  	  && REG_P (XEXP (SET_SRC (curr_set), 0))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == REGNO (SET_DEST (prev_set))
  	  && GET_CODE (SET_SRC (prev_set)) == PLUS
  	  && REG_P (XEXP (SET_SRC (prev_set), 0))
  	  && CONST_INT_P (XEXP (SET_SRC (prev_set), 1)))
! 	return true;
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LUI_ADDI))
      {
        /* We are trying to match the following:
  	   prev (lui)  == (set (reg:DI rD) (const_int UPPER_IMM_20))
--- 10343,10363 ----
  			      (mem:DI (reg:DI rS))) */
  
        if (MEM_P (SET_SRC (curr_set))
+ 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
  	  && REG_P (XEXP (SET_SRC (curr_set), 0))
! 	  && REGNO (XEXP (SET_SRC (curr_set), 0)) == prev_dest_regno
  	  && GET_CODE (SET_SRC (prev_set)) == PLUS
  	  && REG_P (XEXP (SET_SRC (prev_set), 0))
  	  && CONST_INT_P (XEXP (SET_SRC (prev_set), 1)))
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_LDPREINCREMENT\n");
! 	  return true;
! 	}
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LUI_ADDI)
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (lui)  == (set (reg:DI rD) (const_int UPPER_IMM_20))
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10319,10328 ****
  	  && (GET_CODE (SET_SRC (prev_set)) == HIGH
  	      || (CONST_INT_P (SET_SRC (prev_set))
  		  && LUI_OPERAND (INTVAL (SET_SRC (prev_set))))))
! 	return true;
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_AUIPC_ADDI))
      {
        /* We are trying to match the following:
  	   prev (auipc) == (set (reg:DI rD) (unspec:DI [...] UNSPEC_AUIPC))
--- 10371,10385 ----
  	  && (GET_CODE (SET_SRC (prev_set)) == HIGH
  	      || (CONST_INT_P (SET_SRC (prev_set))
  		  && LUI_OPERAND (INTVAL (SET_SRC (prev_set))))))
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_LUI_ADDI\n");
! 	  return true;
! 	}
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_AUIPC_ADDI)
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (auipc) == (set (reg:DI rD) (unspec:DI [...] UNSPEC_AUIPC))
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10340,10377 ****
  		  && CONST_INT_P (XEXP (SET_SRC (curr_set), 1))
  		  && SMALL_OPERAND (INTVAL (XEXP (SET_SRC (curr_set), 1))))))
  
! 	return true;
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LUI_LD))
      {
        /* We are trying to match the following:
  	   prev (lui)  == (set (reg:DI rD) (const_int UPPER_IMM_20))
  	   curr (ld)  == (set (reg:DI rD)
  			      (mem:DI (plus:DI (reg:DI rD) (const_int IMM12)))) */
  
        if (CONST_INT_P (SET_SRC (prev_set))
  	  && LUI_OPERAND (INTVAL (SET_SRC (prev_set)))
  	  && MEM_P (SET_SRC (curr_set))
! 	  && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == PLUS)
! 	return true;
  
        if (GET_CODE (SET_SRC (prev_set)) == HIGH
  	  && MEM_P (SET_SRC (curr_set))
  	  && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == LO_SUM
! 	  && REGNO (SET_DEST (prev_set)) == REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)))
! 	return true;
  
        if (GET_CODE (SET_SRC (prev_set)) == HIGH
  	  && (GET_CODE (SET_SRC (curr_set)) == SIGN_EXTEND
  	      || GET_CODE (SET_SRC (curr_set)) == ZERO_EXTEND)
  	  && MEM_P (XEXP (SET_SRC (curr_set), 0))
  	  && (GET_CODE (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == LO_SUM
! 	      && REGNO (SET_DEST (prev_set)) == REGNO (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0), 0))))
! 	return true;
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_AUIPC_LD))
      {
        /* We are trying to match the following:
  	   prev (auipc) == (set (reg:DI rD) (unspec:DI [...] UNSPEC_AUIPC))
--- 10397,10460 ----
  		  && CONST_INT_P (XEXP (SET_SRC (curr_set), 1))
  		  && SMALL_OPERAND (INTVAL (XEXP (SET_SRC (curr_set), 1))))))
  
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_AUIPC_ADDI\n");
! 	  return true;
! 	}
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_LUI_LD)
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (lui)  == (set (reg:DI rD) (const_int UPPER_IMM_20))
  	   curr (ld)  == (set (reg:DI rD)
  			      (mem:DI (plus:DI (reg:DI rD) (const_int IMM12)))) */
  
+       /* A LUI_OPERAND accepts (const_int 0), but we won't emit that as LUI.  So
+ 	 reject that case explicitly.  */
        if (CONST_INT_P (SET_SRC (prev_set))
+ 	  && SET_SRC (prev_set) != CONST0_RTX (GET_MODE (SET_DEST (prev_set)))
  	  && LUI_OPERAND (INTVAL (SET_SRC (prev_set)))
  	  && MEM_P (SET_SRC (curr_set))
! 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
! 	  && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == PLUS
! 	  && REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == prev_dest_regno)
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_LUI_LD\n");
! 	  return true;
! 	}
  
        if (GET_CODE (SET_SRC (prev_set)) == HIGH
  	  && MEM_P (SET_SRC (curr_set))
+ 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
  	  && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == LO_SUM
! 	  && REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == prev_dest_regno)
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_LUI_LD\n");
! 	  return true;
! 	}
  
        if (GET_CODE (SET_SRC (prev_set)) == HIGH
  	  && (GET_CODE (SET_SRC (curr_set)) == SIGN_EXTEND
  	      || GET_CODE (SET_SRC (curr_set)) == ZERO_EXTEND)
  	  && MEM_P (XEXP (SET_SRC (curr_set), 0))
+ 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
  	  && (GET_CODE (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == LO_SUM
! 	      && (REGNO (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0), 0))
! 		  == prev_dest_regno)))
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_LUI_LD\n");
! 	  return true;
! 	}
      }
  
!   if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_AUIPC_LD)
!       && (sched1 || prev_dest_regno == curr_dest_regno))
      {
        /* We are trying to match the following:
  	   prev (auipc) == (set (reg:DI rD) (unspec:DI [...] UNSPEC_AUIPC))
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10381,10388 ****
        if (GET_CODE (SET_SRC (prev_set)) == UNSPEC
  	  && XINT (prev_set, 1) == UNSPEC_AUIPC
  	  && MEM_P (SET_SRC (curr_set))
  	  && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == PLUS)
! 	return true;
      }
  
    if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_ALIGNED_STD))
--- 10464,10476 ----
        if (GET_CODE (SET_SRC (prev_set)) == UNSPEC
  	  && XINT (prev_set, 1) == UNSPEC_AUIPC
  	  && MEM_P (SET_SRC (curr_set))
+ 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
  	  && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == PLUS)
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "RISCV_FUSE_AUIPC_LD\n");
! 	  return true;
! 	}
      }
  
    if (simple_sets_p && riscv_fusion_enabled_p (RISCV_FUSE_ALIGNED_STD))
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10395,10400 ****
--- 10483,10489 ----
  
        if (MEM_P (SET_DEST (prev_set))
  	  && MEM_P (SET_DEST (curr_set))
+ 	  && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set)))
  	  /* We can probably relax this condition.  The documentation is a bit
  	     unclear about sub-word cases.  So we just model DImode for now.  */
  	  && GET_MODE (SET_DEST (curr_set)) == DImode
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10405,10447 ****
  	  extract_base_offset_in_addr (SET_DEST (prev_set), &base_prev, &offset_prev);
  	  extract_base_offset_in_addr (SET_DEST (curr_set), &base_curr, &offset_curr);
  
! 	  /* Fail if we did not find both bases.  */
! 	  if (base_prev == NULL_RTX || base_curr == NULL_RTX)
! 	    return false;
! 
! 	  /* Fail if either base is not a register.  */
! 	  if (!REG_P (base_prev) || !REG_P (base_curr))
! 	    return false;
! 
! 	  /* Fail if the bases are not the same register.  */
! 	  if (REGNO (base_prev) != REGNO (base_curr))
! 	    return false;
! 
! 	  /* Originally the thought was to check MEM_ALIGN, but that was
! 	     reporting incorrect alignments, even for SP/FP accesses, so we
! 	     gave up on that approach.  Instead just check for stack/hfp
! 	     which we know are aligned.  */
! 	  if (REGNO (base_prev) != STACK_POINTER_REGNUM
! 	      && REGNO (base_prev) != HARD_FRAME_POINTER_REGNUM)
! 	    return false;
! 
! 	  /* The two stores must be contained within opposite halves of the
! 	     same 16 byte aligned block of memory.  We know that the stack
! 	     pointer and the frame pointer have suitable alignment.  So we
! 	     just need to check the offsets of the two stores for suitable
! 	     alignment.  */
! 	  /* Get the smaller offset into OFFSET_PREV.  */
! 	  if (INTVAL (offset_prev) > INTVAL (offset_curr))
! 	    std::swap (offset_prev, offset_curr);
  
! 	  /* If the smaller offset (OFFSET_PREV) is not 16 byte aligned,
! 	     then fail.  */
! 	  if ((INTVAL (offset_prev) % 16) != 0)
! 	    return false;
  
! 	  /* The higher offset must be 8 bytes more than the lower
! 	     offset.  */
! 	  return (INTVAL (offset_prev) + 8 == INTVAL (offset_curr));
  	}
      }
  
--- 10494,10529 ----
  	  extract_base_offset_in_addr (SET_DEST (prev_set), &base_prev, &offset_prev);
  	  extract_base_offset_in_addr (SET_DEST (curr_set), &base_curr, &offset_curr);
  
! 	  /* Proceed only if we find both bases, both bases are register and
! 	     bases are the same register.  */
! 	  if (base_prev != NULL_RTX && base_curr != NULL_RTX
! 	      && REG_P (base_prev) && REG_P (base_curr)
! 	      && REGNO (base_prev) != REGNO (base_curr)
! 	      /* The alignment of hte base pointer is more useful than the
! 		 alignment of the memory reference for determining if we're
! 		 on opposite sides of a cache line.  */
! 	      && REGNO_POINTER_ALIGN (ORIGINAL_REGNO (base_prev)) >= 128)
! 	    {
! 	      /* The two stores must be contained within opposite halves of the
! 		 same 16 byte aligned block of memory.  We know the pointer
! 		 has suitable alignment, so we just need to check the offsets
! 		 of the two stores for suitable alignment.  */
  
! 	      /* Get the smaller offset into OFFSET_PREV.  */
! 	      if (INTVAL (offset_prev) > INTVAL (offset_curr))
! 		std::swap (offset_prev, offset_curr);
  
! 	      /* We have a match if the smaller offset (OFFSET_PREV) is 16
! 		 byte aligned and the higher offset is 8 bytes more than the
! 		 lower offset.  */
! 	      if ((INTVAL (offset_prev) % 16) == 0
! 		  && (INTVAL (offset_prev) + 8 == INTVAL (offset_curr)))
! 		{
! 		  if (dump_file)
! 		    fprintf (dump_file, "RISCV_FUSE_ALIGNED_STD\n");
! 		  return true;
! 		}
! 	    }
  	}
      }
  
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/riscv.md gcc-16-20250706/gcc/config/riscv/riscv.md
*** gcc-16-20250629/gcc/config/riscv/riscv.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/riscv.md	Sun Jul  6 22:32:10 2025
***************
*** 4402,4408 ****
  )
  
  (define_insn "prefetch"
!   [(prefetch (match_operand 0 "prefetch_operand" "Q")
               (match_operand 1 "imm5_operand" "i")
               (match_operand 2 "const_int_operand" "n"))]
    "TARGET_ZICBOP"
--- 4402,4408 ----
  )
  
  (define_insn "prefetch"
!   [(prefetch (match_operand 0 "prefetch_operand" "Qr")
               (match_operand 1 "imm5_operand" "i")
               (match_operand 2 "const_int_operand" "n"))]
    "TARGET_ZICBOP"
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/sifive-7.md gcc-16-20250706/gcc/config/riscv/sifive-7.md
*** gcc-16-20250629/gcc/config/riscv/sifive-7.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/sifive-7.md	Sun Jul  6 22:32:10 2025
***************
*** 1,4 ****
! (define_automaton "sifive_7")
  
  ;; Sifive 7 Series Base Core
  ;; This has two pipelines, A (Address) and B (Branch).
--- 1,4 ----
! (define_automaton "sifive_7,sifive_7_vec,sifive_7_vec_mem")
  
  ;; Sifive 7 Series Base Core
  ;; This has two pipelines, A (Address) and B (Branch).
***************
*** 11,16 ****
--- 11,24 ----
  
  (define_cpu_unit "sifive_7_idiv" "sifive_7")
  (define_cpu_unit "sifive_7_fpu" "sifive_7")
+ ;; Vector command queue
+ (define_cpu_unit "sifive_7_vcq" "sifive_7")
+ ;; Vector arithmetic sequencer
+ (define_cpu_unit "sifive_7_va" "sifive_7_vec")
+ ;; Vector store sequencer
+ (define_cpu_unit "sifive_7_vs" "sifive_7_vec_mem")
+ ;; Vector load sequencer
+ (define_cpu_unit "sifive_7_vl" "sifive_7_vec_mem")
  
  (define_insn_reservation "sifive_7_load" 3
    (and (eq_attr "tune" "sifive_7")
***************
*** 60,68 ****
  (define_insn_reservation "sifive_7_alu" 2
    (and (eq_attr "tune" "sifive_7")
         (eq_attr "type" "unknown,arith,shift,slt,multi,logical,move,bitmanip,\
! 			rotate,min,max,minu,maxu,clz,ctz,atomic,condmove,mvpair,zicond"))
    "sifive_7_A|sifive_7_B")
  
  (define_insn_reservation "sifive_7_load_immediate" 1
    (and (eq_attr "tune" "sifive_7")
         (eq_attr "type" "nop,const,auipc"))
--- 68,81 ----
  (define_insn_reservation "sifive_7_alu" 2
    (and (eq_attr "tune" "sifive_7")
         (eq_attr "type" "unknown,arith,shift,slt,multi,logical,move,bitmanip,\
! 			min,max,minu,maxu,atomic,condmove,mvpair,zicond"))
    "sifive_7_A|sifive_7_B")
  
+ (define_insn_reservation "sifive_7_alu_b" 2
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "clz,ctz,rotate"))
+   "sifive_7_B")
+ 
  (define_insn_reservation "sifive_7_load_immediate" 1
    (and (eq_attr "tune" "sifive_7")
         (eq_attr "type" "nop,const,auipc"))
***************
*** 91,96 ****
--- 104,115 ----
         (eq_attr "type" "fcvt,fcvt_i2f,fcvt_f2i,fcmp,fmove"))
    "sifive_7_B")
  
+ (define_insn_reservation "sifive_7_fdiv_h" 14
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "fdiv,fsqrt")
+        (eq_attr "mode" "HF"))
+   "sifive_7_B,sifive_7_fpu*13")
+ 
  (define_insn_reservation "sifive_7_fdiv_s" 27
    (and (eq_attr "tune" "sifive_7")
         (eq_attr "type" "fdiv,fsqrt")
***************
*** 119,124 ****
--- 138,158 ----
         (eq_attr "type" "cpop,clmul"))
    "sifive_7_A")
  
+ (define_insn_reservation "sifive_7_csr" 5
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "rdfrm,wrfrm,wrvxrm"))
+   "sifive_7_A")
+ 
+ (define_insn_reservation "sifive_7_crypto" 10
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "crypto"))
+   "sifive_7_A")
+ 
+ (define_insn_reservation "sifive_7_unknown" 10
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "ghost"))
+   "sifive_7_A")
+ 
  (define_bypass 1 "sifive_7_load,sifive_7_alu,sifive_7_mul,sifive_7_f2i,sifive_7_sfb_alu"
    "sifive_7_alu,sifive_7_branch")
  
***************
*** 129,141 ****
    "sifive_7_store" "riscv_store_data_bypass_p")
  
  (define_bypass 2 "sifive_7_i2f"
!   "sifive_7_sfma,sifive_7_dfma,sifive_7_fp_other,sifive_7_fdiv_s,sifive_7_fdiv_d")
  
  (define_bypass 2 "sifive_7_fp_other"
!   "sifive_7_sfma,sifive_7_dfma,sifive_7_fp_other,sifive_7_fdiv_s,sifive_7_fdiv_d")
  
  (define_bypass 2 "sifive_7_fp_other"
    "sifive_7_alu,sifive_7_branch")
  
  (define_bypass 2 "sifive_7_fp_other"
    "sifive_7_store" "riscv_store_data_bypass_p")
--- 163,302 ----
    "sifive_7_store" "riscv_store_data_bypass_p")
  
  (define_bypass 2 "sifive_7_i2f"
!   "sifive_7_sfma,sifive_7_dfma,sifive_7_fp_other,sifive_7_fdiv_h,sifive_7_fdiv_s,sifive_7_fdiv_d,sifive_7_hfma")
  
  (define_bypass 2 "sifive_7_fp_other"
!   "sifive_7_sfma,sifive_7_dfma,sifive_7_fp_other,sifive_7_fdiv_h,sifive_7_fdiv_s,sifive_7_fdiv_d,sifive_7_hfma")
  
  (define_bypass 2 "sifive_7_fp_other"
    "sifive_7_alu,sifive_7_branch")
  
  (define_bypass 2 "sifive_7_fp_other"
    "sifive_7_store" "riscv_store_data_bypass_p")
+ 
+ ;; Vector pipeline
+ ;; The latency is depend on LMUL, but we didn't model that yet since we don't
+ ;; want to expand the rule too much unless we prove model that could get
+ ;; meaningful performance difference.
+ 
+ (define_insn_reservation "sifive_7_vsetvl" 2
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vsetvl_pre,vsetvl,rdvlenb,rdvl"))
+   "sifive_7_A")
+ 
+ (define_insn_reservation "sifive_7_vec_load" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vlde,vldm,vlds,vldux,vldox,vldff,vldr,
+                         vlsegde,vlsegds,vlsegdux,vlsegdox,vlsegdff"))
+   "sifive_7_vcq,sifive_7_vl*3")
+ 
+ (define_insn_reservation "sifive_7_vec_store" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vste,vstm,vsts,vstux,vstox,vstr,
+                         vssegte,vssegts,vssegtux,vssegtox"))
+   "sifive_7_vcq,sifive_7_vs*3")
+ 
+ (define_insn_reservation "sifive_7_vec_ialu" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vimovxv,vmov,vimovvx,vialu,vicalu,vext,
+                         vshift,viminmax,vimerge,vbrev,vrev8,
+                         vimov,vext,vbrev8,vclz,vctz,vcpop,vrol,vror,vandn"))
+   "sifive_7_vcq,sifive_7_va*3")
+ 
+ (define_insn_reservation "sifive_7_vec_slow_ialu" 8
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vshift,vimul,vimuladd"))
+   "sifive_7_vcq,sifive_7_va*7")
+ 
+ (define_insn_reservation "sifive_7_vec_cmp" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vicmp"))
+   "sifive_7_vcq,sifive_7_va*3")
+ 
+ (define_insn_reservation "sifive_7_vec_iwalu" 8
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "viwalu,viwmul,viwmuladd,vnshift,vwsll"))
+   "sifive_7_vcq,sifive_7_va*7")
+ 
+ (define_insn_reservation "sifive_7_vec_div" 16
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vidiv,vfdiv"))
+   "sifive_7_vcq,sifive_7_va*15")
+ 
+ (define_insn_reservation "sifive_7_vec_fixed_point" 8
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vsalu,vaalu,vsmul,vsshift"))
+   "sifive_7_vcq,sifive_7_va*7")
+ 
+ (define_insn_reservation "sifive_7_vec_narrow_fixed_point" 8
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vnclip"))
+   "sifive_7_vcq,sifive_7_va*7")
+ 
+ (define_insn_reservation "sifive_7_vec_fsimple" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vfmovvf,vfmovfv,vfclass"))
+   "sifive_7_vcq,sifive_7_va*3")
+ 
+ (define_insn_reservation "sifive_7_vec_falu" 8
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vfalu,vfmul,vfmuladd,vfrecp,
+                         vfcvtitof,vfcvtftoi,vfmerge,vfmov,vfsgnj"))
+   "sifive_7_vcq,sifive_7_va*7")
+ 
+ (define_insn_reservation "sifive_7_vec_fcmp" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vfcmp,vfminmax"))
+   "sifive_7_vcq,sifive_7_va*3")
+ 
+ (define_insn_reservation "sifive_7_vec_fsqrt_fdiv" 16
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vfsqrt,vfdiv"))
+   "sifive_7_vcq,sifive_7_va*15")
+ 
+ (define_insn_reservation "sifive_7_vec_fwalu" 8
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vfwalu,vfwmul,vfwmuladd,vfwmaccbf16,vfwcvtitof,
+                         vfwcvtftoi,vfwcvtftof,vfwcvtbf16,
+                         vfncvtitof,vfncvtftoi,vfncvtftof,vfncvtbf16,
+                         sf_vfnrclip,sf_vqmacc"))
+   "sifive_7_vcq,sifive_7_va*7")
+ 
+ (define_insn_reservation "sifive_7_vec_red" 12
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vired,vfredu,vfredo,viwred,vfwredu,vfwredo"))
+   "sifive_7_vcq,sifive_7_va*11")
+ 
+ (define_insn_reservation "sifive_7_vec_mask" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vmalu,vmpop,vmffs,vmsfs"))
+   "sifive_7_vcq,sifive_7_va*3")
+ 
+ (define_insn_reservation "sifive_7_vec_mask_special" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vmiota,vmidx"))
+   "sifive_7_vcq,sifive_7_va*3")
+ 
+ (define_insn_reservation "sifive_7_vec_gather" 8
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vgather"))
+   "sifive_7_vcq,sifive_7_va*7")
+ 
+ (define_insn_reservation "sifive_7_vec_compress" 16
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vcompress"))
+   "sifive_7_vcq,sifive_7_va*15")
+ 
+ (define_insn_reservation "sifive_7_vec_slide" 4
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down"))
+   "sifive_7_vcq,sifive_7_va*3")
+ 
+ ;; Assume that's slow if it's unknown instruction vector type.
+ (define_insn_reservation "sifive_7_vec_unknown" 16
+   (and (eq_attr "tune" "sifive_7")
+        (eq_attr "type" "vector,vclmul,vclmulh,vghsh,vgmul,
+                         vaesef,vaesem,vaesdf,vaesdm,vaeskf1,vaeskf2,
+                         vaesz,vsha2ms,vsha2ch,vsha2cl,
+                         vsm4k,vsm4r,vsm3me,vsm3c,sf_vc,sf_vc_se"))
+   "sifive_7_vcq,sifive_7_va*15")
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/vector-iterators.md gcc-16-20250706/gcc/config/riscv/vector-iterators.md
*** gcc-16-20250629/gcc/config/riscv/vector-iterators.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/vector-iterators.md	Sun Jul  6 22:32:10 2025
***************
*** 4042,4052 ****
  ])
  
  (define_code_iterator any_int_binop_no_shift_v_vdup [
!   plus minus and ior xor mult div udiv mod umod smax umax smin umin us_plus
  ])
  
  (define_code_iterator any_int_binop_no_shift_vdup_v [
!   plus minus and ior xor mult smax umax smin umin us_plus
  ])
  
  (define_code_iterator any_int_unop [neg not])
--- 4042,4052 ----
  ])
  
  (define_code_iterator any_int_binop_no_shift_v_vdup [
!   plus minus and ior xor mult div udiv mod umod smax umax smin umin us_plus us_minus ss_plus
  ])
  
  (define_code_iterator any_int_binop_no_shift_vdup_v [
!   plus minus and ior xor mult smax umax smin umin us_plus ss_plus
  ])
  
  (define_code_iterator any_int_unop [neg not])
diff -Nrcpad gcc-16-20250629/gcc/config/riscv/vector.md gcc-16-20250706/gcc/config/riscv/vector.md
*** gcc-16-20250629/gcc/config/riscv/vector.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/riscv/vector.md	Sun Jul  6 22:32:10 2025
***************
*** 6848,6856 ****
  	          (match_operand:<VEL> 2 "register_operand"))
  	        (match_operand:V_VLSF 3 "register_operand")))
  	    (match_operand:V_VLSF 4 "register_operand"))
! 	  (match_operand:V_VLSF 5 "register_operand")))]
    "TARGET_VECTOR"
! {})
  
  (define_insn "*pred_<nmsub_nmadd><mode>_scalar"
    [(set (match_operand:V_VLSF 0 "register_operand"            "=vd, vr")
--- 6848,6890 ----
  	          (match_operand:<VEL> 2 "register_operand"))
  	        (match_operand:V_VLSF 3 "register_operand")))
  	    (match_operand:V_VLSF 4 "register_operand"))
! 	  (match_operand:V_VLSF 5 "vector_merge_operand")))]
    "TARGET_VECTOR"
! {
!   riscv_vector::prepare_ternary_operands (operands);
! })
! 
! (define_insn "*pred_mul_neg_<optab><mode>_scalar_undef"
!   [(set (match_operand:V_VLSF 0 "register_operand"           "=vd,vd, vr, vr")
! 	(if_then_else:V_VLSF
! 	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1")
! 	     (match_operand 6 "vector_length_operand"    "rvl,rvl,rvl,rvl")
! 	     (match_operand 7 "const_int_operand"        "  i,  i,  i,  i")
! 	     (match_operand 8 "const_int_operand"        "  i,  i,  i,  i")
! 	     (match_operand 9 "const_int_operand"        "  i,  i,  i,  i")
! 	     (match_operand 10 "const_int_operand"       "  i,  i,  i,  i")
! 	     (reg:SI VL_REGNUM)
! 	     (reg:SI VTYPE_REGNUM)
! 	     (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE)
! 	  (plus_minus:V_VLSF
! 	    (neg:V_VLSF
! 	      (mult:V_VLSF
! 		(vec_duplicate:V_VLSF
! 		  (match_operand:<VEL> 3 "register_operand"  "  f,  f,  f,  f"))
! 		(match_operand:V_VLSF 4 "register_operand"   "  0, vr,  0, vr")))
! 	    (match_operand:V_VLSF 5 "register_operand"       " vr,  0, vr,  0"))
! 	  (match_operand:V_VLSF 2 "vector_undef_operand")))]
!   "TARGET_VECTOR"
!   "@
!    vf<nmsub_nmadd>.vf\t%0,%3,%5%p1
!    vf<nmsac_nmacc>.vf\t%0,%3,%4%p1
!    vf<nmsub_nmadd>.vf\t%0,%3,%5%p1
!    vf<nmsac_nmacc>.vf\t%0,%3,%4%p1"
!   [(set_attr "type" "vfmuladd")
!    (set_attr "mode" "<MODE>")
!    (set (attr "frm_mode")
! 	(symbol_ref "riscv_vector::get_frm_mode (operands[10])"))])
  
  (define_insn "*pred_<nmsub_nmadd><mode>_scalar"
    [(set (match_operand:V_VLSF 0 "register_operand"            "=vd, vr")
diff -Nrcpad gcc-16-20250629/gcc/config/rs6000/mma.md gcc-16-20250706/gcc/config/rs6000/mma.md
*** gcc-16-20250629/gcc/config/rs6000/mma.md	Sun Jun 29 22:32:26 2025
--- gcc-16-20250706/gcc/config/rs6000/mma.md	Sun Jul  6 22:32:10 2025
***************
*** 30,36 ****
  
  (define_c_enum "unspec"
    [UNSPEC_VSX_ASSEMBLE
-    UNSPEC_MMA_EXTRACT
     UNSPEC_MMA_PMXVBF16GER2
     UNSPEC_MMA_PMXVBF16GER2NN
     UNSPEC_MMA_PMXVBF16GER2NP
--- 30,35 ----
***************
*** 398,426 ****
     (match_operand 2 "const_0_to_1_operand")]
    "TARGET_MMA"
  {
!   rtx src;
!   int regoff = INTVAL (operands[2]);
!   src = gen_rtx_UNSPEC (V16QImode,
! 			gen_rtvec (2, operands[1], GEN_INT (regoff)),
! 			UNSPEC_MMA_EXTRACT);
!   emit_move_insn (operands[0], src);
!   DONE;
! })
! 
! (define_insn_and_split "*vsx_disassemble_pair"
!   [(set (match_operand:V16QI 0 "mma_disassemble_output_operand" "=mwa")
!        (unspec:V16QI [(match_operand:OO 1 "vsx_register_operand" "wa")
! 		      (match_operand 2 "const_0_to_1_operand")]
! 		      UNSPEC_MMA_EXTRACT))]
!   "TARGET_MMA
!    && vsx_register_operand (operands[1], OOmode)"
!   "#"
!   "&& reload_completed"
!   [(const_int 0)]
! {
!   int reg = REGNO (operands[1]);
!   int regoff = INTVAL (operands[2]);
!   rtx src = gen_rtx_REG (V16QImode, reg + regoff);
    emit_move_insn (operands[0], src);
    DONE;
  })
--- 397,404 ----
     (match_operand 2 "const_0_to_1_operand")]
    "TARGET_MMA"
  {
!   int regoff = INTVAL (operands[2]) * 16;
!   rtx src = simplify_gen_subreg (V16QImode, operands[1], OOmode, regoff);
    emit_move_insn (operands[0], src);
    DONE;
  })
***************
*** 472,500 ****
     (match_operand 2 "const_0_to_3_operand")]
    "TARGET_MMA"
  {
!   rtx src;
!   int regoff = INTVAL (operands[2]);
!   src = gen_rtx_UNSPEC (V16QImode,
! 			gen_rtvec (2, operands[1], GEN_INT (regoff)),
! 			UNSPEC_MMA_EXTRACT);
!   emit_move_insn (operands[0], src);
!   DONE;
! })
! 
! (define_insn_and_split "*mma_disassemble_acc"
!   [(set (match_operand:V16QI 0 "mma_disassemble_output_operand" "=mwa")
!        (unspec:V16QI [(match_operand:XO 1 "fpr_reg_operand" "d")
! 		      (match_operand 2 "const_0_to_3_operand")]
! 		      UNSPEC_MMA_EXTRACT))]
!   "TARGET_MMA
!    && fpr_reg_operand (operands[1], XOmode)"
!   "#"
!   "&& reload_completed"
!   [(const_int 0)]
! {
!   int reg = REGNO (operands[1]);
!   int regoff = INTVAL (operands[2]);
!   rtx src = gen_rtx_REG (V16QImode, reg + regoff);
    emit_move_insn (operands[0], src);
    DONE;
  })
--- 450,457 ----
     (match_operand 2 "const_0_to_3_operand")]
    "TARGET_MMA"
  {
!   int regoff = INTVAL (operands[2]) * 16;
!   rtx src = simplify_gen_subreg (V16QImode, operands[1], XOmode, regoff);
    emit_move_insn (operands[0], src);
    DONE;
  })
diff -Nrcpad gcc-16-20250629/gcc/config/rs6000/vxworks.h gcc-16-20250706/gcc/config/rs6000/vxworks.h
*** gcc-16-20250629/gcc/config/rs6000/vxworks.h	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/config/rs6000/vxworks.h	Sun Jul  6 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 34,39 ****
--- 34,54 ----
  /* Common definitions first.                                   */
  /*-------------------------------------------------------------*/
  
+ /* Default to 64 bits when the target is powerpc64*-wrs-vxworks*,
+    and to 32 bits otherwise.  */
+ #undef SUBTARGET_DRIVER_SELF_SPECS
+ #if TARGET_VXWORKS64
+ #define SUBTARGET_DRIVER_SELF_SPECS "%{!m64:%{!m32:-m64}}"
+ #else
+ #define SUBTARGET_DRIVER_SELF_SPECS "%{!m32:%{!m64:-m32}}"
+ #endif
+ 
+ /* Having used the build-time TARGET_VXWORKS64 to choose the default ABI above,
+    redefine it so that it matches whichever ABI is selected for each
+    compilation.  */
+ #undef TARGET_VXWORKS64
+ #define TARGET_VXWORKS64 TARGET_64BIT
+ 
  /* CPP predefined macros.  */
  
  #undef TARGET_OS_CPP_BUILTINS
diff -Nrcpad gcc-16-20250629/gcc/config/s390/s390.cc gcc-16-20250706/gcc/config/s390/s390.cc
*** gcc-16-20250629/gcc/config/s390/s390.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/config/s390/s390.cc	Sun Jul  6 22:32:10 2025
*************** expand_perm_with_merge (const struct exp
*** 18041,18049 ****
--- 18041,18074 ----
    static const unsigned char lo_perm_qi_swap[16]
      = {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15};
  
+   static const unsigned char hi_perm_qi_di[16]
+     = {0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23};
+   static const unsigned char hi_perm_qi_si[16]
+     = {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23};
+   static const unsigned char hi_perm_qi_hi[16]
+     = {0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23};
+ 
+   static const unsigned char lo_perm_qi_di[16]
+     = {8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31};
+   static const unsigned char lo_perm_qi_si[16]
+     = {8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31};
+   static const unsigned char lo_perm_qi_hi[16]
+     = {8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31};
+ 
+   static const unsigned char hi_perm_hi_si[8] = {0, 1, 8, 9, 2, 3, 10, 11};
+   static const unsigned char hi_perm_hi_di[8] = {0, 1, 2, 3, 8, 9, 10, 11};
+ 
+   static const unsigned char lo_perm_hi_si[8] = {4, 5, 12, 13, 6, 7, 14, 15};
+   static const unsigned char lo_perm_hi_di[8] = {4, 5, 6, 7, 12, 13, 14, 15};
+ 
+   static const unsigned char hi_perm_si_di[4] = {0, 1, 4, 5};
+ 
+   static const unsigned char lo_perm_si_di[4] = {2, 3, 6, 7};
+ 
    bool merge_lo_p = false;
    bool merge_hi_p = false;
    bool swap_operands_p = false;
+   machine_mode mergemode = d.vmode;
  
    if ((d.nelt == 2 && memcmp (d.perm, hi_perm_di, 2) == 0)
        || (d.nelt == 4 && memcmp (d.perm, hi_perm_si, 4) == 0)
*************** expand_perm_with_merge (const struct exp
*** 18075,18080 ****
--- 18100,18174 ----
        merge_lo_p = true;
        swap_operands_p = true;
      }
+   else if (d.nelt == 16)
+     {
+       if (memcmp (d.perm, hi_perm_qi_di, 16) == 0)
+ 	{
+ 	  merge_hi_p = true;
+ 	  mergemode = E_V2DImode;
+ 	}
+       else if (memcmp (d.perm, hi_perm_qi_si, 16) == 0)
+ 	{
+ 	  merge_hi_p = true;
+ 	  mergemode = E_V4SImode;
+ 	}
+       else if (memcmp (d.perm, hi_perm_qi_hi, 16) == 0)
+ 	{
+ 	  merge_hi_p = true;
+ 	  mergemode = E_V8HImode;
+ 	}
+       else if (memcmp (d.perm, lo_perm_qi_di, 16) == 0)
+ 	{
+ 	  merge_lo_p = true;
+ 	  mergemode = E_V2DImode;
+ 	}
+       else if (memcmp (d.perm, lo_perm_qi_si, 16) == 0)
+ 	{
+ 	  merge_lo_p = true;
+ 	  mergemode = E_V4SImode;
+ 	}
+       else if (memcmp (d.perm, lo_perm_qi_hi, 16) == 0)
+ 	{
+ 	  merge_lo_p = true;
+ 	  mergemode = E_V8HImode;
+ 	}
+     }
+   else if (d.nelt == 8)
+     {
+       if (memcmp (d.perm, hi_perm_hi_di, 8) == 0)
+ 	{
+ 	  merge_hi_p = true;
+ 	  mergemode = E_V2DImode;
+ 	}
+       else if (memcmp (d.perm, hi_perm_hi_si, 8) == 0)
+ 	{
+ 	  merge_hi_p = true;
+ 	  mergemode = E_V4SImode;
+ 	}
+       else if (memcmp (d.perm, lo_perm_hi_di, 8) == 0)
+ 	{
+ 	  merge_lo_p = true;
+ 	  mergemode = E_V2DImode;
+ 	}
+       else if (memcmp (d.perm, lo_perm_hi_si, 8) == 0)
+ 	{
+ 	  merge_lo_p = true;
+ 	  mergemode = E_V4SImode;
+ 	}
+     }
+   else if (d.nelt == 4)
+     {
+       if (memcmp (d.perm, hi_perm_si_di, 4) == 0)
+ 	{
+ 	  merge_hi_p = true;
+ 	  mergemode = E_V2DImode;
+ 	}
+       else if (memcmp (d.perm, lo_perm_si_di, 4) == 0)
+ 	{
+ 	  merge_lo_p = true;
+ 	  mergemode = E_V2DImode;
+ 	}
+     }
  
    if (!merge_lo_p && !merge_hi_p)
      return false;
*************** expand_perm_with_merge (const struct exp
*** 18082,18088 ****
    if (d.testing_p)
      return merge_lo_p || merge_hi_p;
  
!   rtx op0, op1;
    if (swap_operands_p)
      {
        op0 = d.op1;
--- 18176,18182 ----
    if (d.testing_p)
      return merge_lo_p || merge_hi_p;
  
!   rtx op0, op1, target = d.target;
    if (swap_operands_p)
      {
        op0 = d.op1;
*************** expand_perm_with_merge (const struct exp
*** 18093,18101 ****
        op0 = d.op0;
        op1 = d.op1;
      }
  
!   s390_expand_merge (d.target, op0, op1, merge_hi_p);
  
    return true;
  }
  
--- 18187,18263 ----
        op0 = d.op0;
        op1 = d.op1;
      }
+   if (mergemode != d.vmode)
+     {
+       target = simplify_gen_subreg (mergemode, target, d.vmode, 0);
+       op0 = simplify_gen_subreg (mergemode, op0, d.vmode, 0);
+       op1 = simplify_gen_subreg (mergemode, op1, d.vmode, 0);
+     }
  
!   s390_expand_merge (target, op0, op1, merge_hi_p);
! 
!   return true;
! }
! 
! /* Try to expand the vector permute operation described by D using the vector
!    pack instruction vpk.  Return true if vector pack could be used.  */
! static bool
! expand_perm_with_pack (const struct expand_vec_perm_d &d)
! {
!   static const unsigned char qi_hi[16]
!     = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31};
!   static const unsigned char qi_si[16]
!     = {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31};
!   static const unsigned char qi_di[16]
!     = {4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31};
! 
!   static const unsigned char hi_si[8]
!     = {1, 3, 5, 7, 9, 11, 13, 15};
!   static const unsigned char hi_di[8]
!     = {2, 3, 6, 7, 10, 11, 14, 15};
! 
!   static const unsigned char si_di[4]
!     = {1, 3, 5, 7};
  
+   machine_mode packmode, resmode;
+   enum insn_code code = CODE_FOR_nothing;
+ 
+   if (d.nelt == 16 && memcmp (d.perm, qi_hi, 16) == 0)
+     {
+       packmode = E_V8HImode;
+       resmode = E_V16QImode;
+       code = CODE_FOR_vec_pack_trunc_v8hi;
+     }
+   else if ((d.nelt == 16 && memcmp (d.perm, qi_si, 16) == 0)
+ 	   || (d.nelt == 8 && memcmp (d.perm, hi_si, 8) == 0))
+     {
+       packmode = E_V4SImode;
+       resmode = E_V8HImode;
+       code = CODE_FOR_vec_pack_trunc_v4si;
+     }
+   else if ((d.nelt == 16 && memcmp (d.perm, qi_di, 16) == 0)
+ 	   || (d.nelt == 8 && memcmp (d.perm, hi_di, 8) == 0)
+ 	   || (d.nelt == 4 && memcmp (d.perm, si_di, 4) == 0))
+     {
+       packmode = E_V2DImode;
+       resmode = E_V4SImode;
+       code = CODE_FOR_vec_pack_trunc_v2di;
+     }
+ 
+   if (code == CODE_FOR_nothing)
+     return false;
+ 
+   if (d.testing_p)
+     return true;
+   rtx target = simplify_gen_subreg (resmode, d.target, d.vmode, 0);
+   rtx op0 = simplify_gen_subreg (packmode,
+ 				 force_reg (GET_MODE (d.op0), d.op0),
+ 				 d.vmode, 0);
+   rtx op1 = simplify_gen_subreg (packmode,
+ 				 force_reg (GET_MODE (d.op1), d.op1),
+ 				 d.vmode, 0);
+   rtx pat = GEN_FCN (code) (target, op0, op1);
+   emit_insn (pat);
    return true;
  }
  
*************** vectorize_vec_perm_const_1 (const struct
*** 18322,18327 ****
--- 18484,18492 ----
    if (expand_perm_with_merge (d))
      return true;
  
+   if (expand_perm_with_pack (d))
+     return true;
+ 
    if (expand_perm_with_vpdi (d))
      return true;
  
diff -Nrcpad gcc-16-20250629/gcc/config/sh/predicates.md gcc-16-20250706/gcc/config/sh/predicates.md
*** gcc-16-20250629/gcc/config/sh/predicates.md	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/config/sh/predicates.md	Sun Jul  6 22:32:10 2025
***************
*** 630,638 ****
  ;; Same as treg_set_expr but disallow constants 0 and 1 which can be loaded
  ;; into the T bit.
  (define_predicate "treg_set_expr_not_const01"
!   (and (match_test "op != const0_rtx")
!        (match_test "op != const1_rtx")
!        (match_operand 0 "treg_set_expr")))
  
  ;; A predicate describing the T bit register in any form.
  (define_predicate "t_reg_operand"
--- 630,636 ----
  ;; Same as treg_set_expr but disallow constants 0 and 1 which can be loaded
  ;; into the T bit.
  (define_predicate "treg_set_expr_not_const01"
!   (match_test "sh_recog_treg_set_expr_not_01 (op, mode)"))
  
  ;; A predicate describing the T bit register in any form.
  (define_predicate "t_reg_operand"
diff -Nrcpad gcc-16-20250629/gcc/config/sh/sh-protos.h gcc-16-20250706/gcc/config/sh/sh-protos.h
*** gcc-16-20250629/gcc/config/sh/sh-protos.h	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/config/sh/sh-protos.h	Sun Jul  6 22:32:10 2025
*************** extern rtx_insn* sh_peephole_emit_move_i
*** 261,266 ****
--- 261,267 ----
  
  extern bool sh_in_recog_treg_set_expr (void);
  extern bool sh_recog_treg_set_expr (rtx op, machine_mode mode);
+ extern bool sh_recog_treg_set_expr_not_01 (rtx op, machine_mode mode);
  
  /* Result value of sh_split_treg_set_expr.  Contains the first insn emitted
     and the optional trailing nott insn.  */
diff -Nrcpad gcc-16-20250629/gcc/config/sh/sh.cc gcc-16-20250706/gcc/config/sh/sh.cc
*** gcc-16-20250629/gcc/config/sh/sh.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/config/sh/sh.cc	Sun Jul  6 22:32:10 2025
*************** sh_recog_treg_set_expr (rtx op, machine_
*** 12348,12353 ****
--- 12348,12370 ----
    return result >= 0;
  }
  
+ /* Return TRUE if OP is an expression for which there is a pattern to
+    set the T bit unless the expression is trivially loadable into
+    the T bit, FALSE otherwise.  */
+ bool
+ sh_recog_treg_set_expr_not_01 (rtx op, machine_mode mode)
+ {
+   if (op == const0_rtx || op == const1_rtx)
+     return false;
+ 
+   /* A right shift of 31 will return 0 or 1.  */
+   if ((GET_CODE (op) == LSHIFTRT || GET_CODE (op) == ASHIFTRT)
+       && INTVAL (XEXP (op, 1)) == 31)
+     return false;
+ 
+   return sh_recog_treg_set_expr (op, mode);
+ }
+ 
  /* Returns true when recog of a 'treg_set_expr' is currently in progress.
     This can be used as a condition for insn/split patterns to allow certain
     T bit setting patters only to be matched as sub expressions of other
diff -Nrcpad gcc-16-20250629/gcc/coverage.cc gcc-16-20250706/gcc/coverage.cc
*** gcc-16-20250629/gcc/coverage.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/coverage.cc	Sun Jul  6 22:32:10 2025
*************** read_counts_file (void)
*** 235,243 ****
  	}
        else if (tag == GCOV_TAG_OBJECT_SUMMARY)
  	{
! 	  profile_info = XCNEW (gcov_summary);
  	  profile_info->runs = gcov_read_unsigned ();
  	  profile_info->sum_max = gcov_read_unsigned ();
  	}
        else if (GCOV_TAG_IS_COUNTER (tag) && fn_ident)
  	{
--- 235,244 ----
  	}
        else if (tag == GCOV_TAG_OBJECT_SUMMARY)
  	{
! 	  gcov_profile_info = profile_info = XCNEW (gcov_summary);
  	  profile_info->runs = gcov_read_unsigned ();
  	  profile_info->sum_max = gcov_read_unsigned ();
+ 	  profile_info->cutoff = 1;
  	}
        else if (GCOV_TAG_IS_COUNTER (tag) && fn_ident)
  	{
*************** coverage_init (const char *filename)
*** 1315,1323 ****
    strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
  
    bbg_file_stamp = local_tick;
!   if (flag_auto_profile)
!     read_autofdo_file ();
!   else if (flag_branch_probabilities)
      read_counts_file ();
  
    /* Name of bbg file.  */
--- 1316,1322 ----
    strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
  
    bbg_file_stamp = local_tick;
!   if (flag_branch_probabilities)
      read_counts_file ();
  
    /* Name of bbg file.  */
diff -Nrcpad gcc-16-20250629/gcc/cp/ChangeLog gcc-16-20250706/gcc/cp/ChangeLog
*** gcc-16-20250629/gcc/cp/ChangeLog	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/cp/ChangeLog	Sun Jul  6 22:32:10 2025
***************
*** 1,3 ****
--- 1,45 ----
+ 2025-07-04  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120575
+ 	PR c++/116064
+ 	* parser.cc (cp_parser_abort_tentative_parse): Check seen_error
+ 	instead of errorcount.
+ 
+ 2025-07-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120716
+ 	* lambda.cc (finish_lambda_function): Pass cur_stmt_list to
+ 	prune_lambda_captures.
+ 
+ 2025-07-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120748
+ 	* lambda.cc (lambda_expr_this_capture): Don't return a FIELD_DECL.
+ 	* parser.cc (cp_parser_primary_expression): Ignore THIS_FORBIDDEN
+ 	if cp_unevaluated_operand.
+ 
+ 2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120940
+ 	* typeck.cc (cp_build_array_ref): Fix a pasto.
+ 
+ 2025-07-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120684
+ 	PR c++/118856
+ 	* constexpr.cc (cxx_eval_constant_expression) [TARGET_EXPR]: Clear
+ 	the value first if is_complex.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120471
+ 	* typeck.cc (cp_build_array_ref) <case COND_EXPR>: If idx is not
+ 	INTEGER_CST, don't optimize the case (but cp_default_conversion on
+ 	array early if it has ARRAY_TYPE) or use
+ 	SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0> as new op0 depending
+ 	on flag_strong_eval_order and whether op1 and op2 are arrays with
+ 	invariant address or tree invariant pointers.  Formatting fixes.
+ 
  2025-06-28  Nathaniel Shead  <nathanieloshead@gmail.com>
  
  	* module.cc (trees_out::walking_bit_field_unit): New flag.
diff -Nrcpad gcc-16-20250629/gcc/cp/constexpr.cc gcc-16-20250706/gcc/cp/constexpr.cc
*** gcc-16-20250629/gcc/cp/constexpr.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/cp/constexpr.cc	Sun Jul  6 22:32:10 2025
*************** cxx_eval_constant_expression (const cons
*** 8114,8127 ****
  	    ctx->global->put_value (new_ctx.object, new_ctx.ctor);
  	    ctx = &new_ctx;
  	  }
  	/* Pass vc_prvalue because this indicates
  	   initialization of a temporary.  */
  	r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), vc_prvalue,
  					  non_constant_p, overflow_p);
  	if (*non_constant_p)
  	  break;
- 	/* If the initializer is complex, evaluate it to initialize slot.  */
- 	bool is_complex = target_expr_needs_replace (t);
  	if (!is_complex)
  	  {
  	    r = unshare_constructor (r);
--- 8114,8133 ----
  	    ctx->global->put_value (new_ctx.object, new_ctx.ctor);
  	    ctx = &new_ctx;
  	  }
+ 
+ 	/* If the initializer is complex, evaluate it to initialize slot.  */
+ 	bool is_complex = target_expr_needs_replace (t);
+ 	if (is_complex)
+ 	  /* In case no initialization actually happens, clear out any
+ 	     void_node from a previous evaluation.  */
+ 	  ctx->global->put_value (slot, NULL_TREE);
+ 
  	/* Pass vc_prvalue because this indicates
  	   initialization of a temporary.  */
  	r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), vc_prvalue,
  					  non_constant_p, overflow_p);
  	if (*non_constant_p)
  	  break;
  	if (!is_complex)
  	  {
  	    r = unshare_constructor (r);
diff -Nrcpad gcc-16-20250629/gcc/cp/lambda.cc gcc-16-20250706/gcc/cp/lambda.cc
*** gcc-16-20250629/gcc/cp/lambda.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/cp/lambda.cc	Sun Jul  6 22:32:10 2025
*************** lambda_expr_this_capture (tree lambda, i
*** 823,828 ****
--- 823,836 ----
    if (cp_unevaluated_operand)
      add_capture_p = false;
  
+   /* If we captured 'this' but don't have a capture proxy yet, look up the
+      captured 'this' again.  */
+   if (this_capture && TREE_CODE (this_capture) == FIELD_DECL)
+     {
+       gcc_assert (!add_capture_p);
+       this_capture = NULL_TREE;
+     }
+ 
    /* Try to default capture 'this' if we can.  */
    if (!this_capture)
      {
*************** lambda_expr_this_capture (tree lambda, i
*** 940,945 ****
--- 948,956 ----
        result = rvalue (result);
      }
  
+   gcc_checking_assert (!result || result == error_mark_node
+ 		       || TYPE_PTR_P (TREE_TYPE (result)));
+ 
    return result;
  }
  
*************** finish_lambda_function (tree body)
*** 1939,1945 ****
  {
    finish_function_body (body);
  
!   prune_lambda_captures (body);
  
    /* Finish the function and generate code for it if necessary.  */
    tree fn = finish_function (/*inline_p=*/true);
--- 1950,1956 ----
  {
    finish_function_body (body);
  
!   prune_lambda_captures (cur_stmt_list);
  
    /* Finish the function and generate code for it if necessary.  */
    tree fn = finish_function (/*inline_p=*/true);
diff -Nrcpad gcc-16-20250629/gcc/cp/parser.cc gcc-16-20250706/gcc/cp/parser.cc
*** gcc-16-20250629/gcc/cp/parser.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/cp/parser.cc	Sun Jul  6 22:32:10 2025
*************** cp_parser_primary_expression (cp_parser
*** 6307,6313 ****
  	  /* Recognize the `this' keyword.  */
  	case RID_THIS:
  	  cp_lexer_consume_token (parser->lexer);
! 	  if (parser->local_variables_forbidden_p & THIS_FORBIDDEN)
  	    {
  	      error_at (token->location,
  			"%<this%> may not be used in this context");
--- 6307,6316 ----
  	  /* Recognize the `this' keyword.  */
  	case RID_THIS:
  	  cp_lexer_consume_token (parser->lexer);
! 	  if ((parser->local_variables_forbidden_p & THIS_FORBIDDEN)
! 	      /* It's OK to refer to 'this' in an unevaluated operand in a
! 		 lambda default argument (lambda-targ16.C).  */
! 	      && !cp_unevaluated_operand)
  	    {
  	      error_at (token->location,
  			"%<this%> may not be used in this context");
*************** static void
*** 36661,36667 ****
  cp_parser_abort_tentative_parse (cp_parser* parser)
  {
    gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
! 	      || errorcount > 0);
    cp_parser_simulate_error (parser);
    /* Now, pretend that we want to see if the construct was
       successfully parsed.  */
--- 36664,36670 ----
  cp_parser_abort_tentative_parse (cp_parser* parser)
  {
    gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
! 	      || seen_error ());
    cp_parser_simulate_error (parser);
    /* Now, pretend that we want to see if the construct was
       successfully parsed.  */
diff -Nrcpad gcc-16-20250629/gcc/cp/typeck.cc gcc-16-20250706/gcc/cp/typeck.cc
*** gcc-16-20250629/gcc/cp/typeck.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/cp/typeck.cc	Sun Jul  6 22:32:10 2025
*************** cp_build_array_ref (location_t loc, tree
*** 4001,4013 ****
        }
  
      case COND_EXPR:
!       ret = build_conditional_expr
! 	       (loc, TREE_OPERAND (array, 0),
! 	       cp_build_array_ref (loc, TREE_OPERAND (array, 1), idx,
! 				   complain),
! 	       cp_build_array_ref (loc, TREE_OPERAND (array, 2), idx,
! 				   complain),
! 	       complain);
        protected_set_expr_location (ret, loc);
        return ret;
  
--- 4001,4061 ----
        }
  
      case COND_EXPR:
!       tree op0, op1, op2;
!       op0 = TREE_OPERAND (array, 0);
!       op1 = TREE_OPERAND (array, 1);
!       op2 = TREE_OPERAND (array, 2);
!       if (TREE_SIDE_EFFECTS (idx) || !tree_invariant_p (idx))
! 	{
! 	  /* If idx could possibly have some SAVE_EXPRs, turning
! 	     (op0 ? op1 : op2)[idx] into
! 	     op0 ? op1[idx] : op2[idx] can lead into temporaries
! 	     initialized in one conditional path and uninitialized
! 	     uses of them in the other path.
! 	     And if idx is a really large expression, evaluating it
! 	     twice is also not optimal.
! 	     On the other side, op0 must be sequenced before evaluation
! 	     of op1 and op2 and for C++17 op0, op1 and op2 must be
! 	     sequenced before idx.
! 	     If idx is INTEGER_CST, we can just do the optimization
! 	     without any SAVE_EXPRs, if op1 and op2 are both ARRAY_TYPE
! 	     VAR_DECLs or COMPONENT_REFs thereof (so their address
! 	     is constant or relative to frame), optimize into
! 	     (SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0>)
! 	     ? op1[SAVE_EXPR <idx>] : op2[SAVE_EXPR <idx>]
! 	     Otherwise avoid this optimization.  */
! 	  if (flag_strong_eval_order == 2)
! 	    {
! 	      if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
! 		{
! 		  if (!address_invariant_p (op1) || !address_invariant_p (op2))
! 		    {
! 		      /* Force default conversion on array if
! 			 we can't optimize this and array is ARRAY_TYPE
! 			 COND_EXPR, we can't leave COND_EXPRs with
! 			 ARRAY_TYPE in the IL.  */
! 		      array = cp_default_conversion (array, complain);
! 		      if (error_operand_p (array))
! 			return error_mark_node;
! 		      break;
! 		    }
! 		}
! 	      else if (!POINTER_TYPE_P (TREE_TYPE (array))
! 		       || !tree_invariant_p (op1)
! 		       || !tree_invariant_p (op2))
! 		break;
! 	    }
! 	  if (TREE_SIDE_EFFECTS (idx))
! 	    {
! 	      idx = save_expr (idx);
! 	      op0 = save_expr (op0);
! 	      tree tem = build_compound_expr (loc, op0, idx);
! 	      op0 = build_compound_expr (loc, tem, op0);
! 	    }
! 	}
!       op1 = cp_build_array_ref (loc, op1, idx, complain);
!       op2 = cp_build_array_ref (loc, op2, idx, complain);
!       ret = build_conditional_expr (loc, op0, op1, op2, complain);
        protected_set_expr_location (ret, loc);
        return ret;
  
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-color.cc gcc-16-20250706/gcc/diagnostic-color.cc
*** gcc-16-20250629/gcc/diagnostic-color.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-color.cc	Sun Jul  6 22:32:11 2025
*************** diagnostic_color_dict::parse_envvar_valu
*** 234,240 ****
    size_t name_len = 0, val_len = 0;
  
    name = q = envvar_value;
!   val = NULL;
    /* From now on, be well-formed or you're gone.  */
    for (;;)
      if (*q == ':' || *q == '\0')
--- 234,240 ----
    size_t name_len = 0, val_len = 0;
  
    name = q = envvar_value;
!   val = nullptr;
    /* From now on, be well-formed or you're gone.  */
    for (;;)
      if (*q == ':' || *q == '\0')
*************** diagnostic_color_dict::parse_envvar_valu
*** 259,265 ****
  	if (*q == '\0')
  	  return true;
  	name = ++q;
! 	val = NULL;
        }
      else if (*q == '=')
        {
--- 259,265 ----
  	if (*q == '\0')
  	  return true;
  	name = ++q;
! 	val = nullptr;
        }
      else if (*q == '=')
        {
*************** diagnostic_color_dict::parse_envvar_valu
*** 269,275 ****
  	name_len = q - name;
  	val = ++q; /* Can be the empty string.  */
        }
!     else if (val == NULL)
        q++; /* Accumulate name.  */
      else if (*q == ';' || (*q >= '0' && *q <= '9'))
        q++; /* Accumulate val.  Protect the terminal from being sent
--- 269,275 ----
  	name_len = q - name;
  	val = ++q; /* Can be the empty string.  */
        }
!     else if (val == nullptr)
        q++; /* Accumulate name.  */
      else if (*q == ';' || (*q >= '0' && *q <= '9'))
        q++; /* Accumulate val.  Protect the terminal from being sent
*************** should_colorize (void)
*** 308,314 ****
  
    handle = GetStdHandle (STD_ERROR_HANDLE);
  
!   if ((handle != INVALID_HANDLE_VALUE) && (handle != NULL))
      isconsole = GetConsoleMode (handle, &mode);
  
  #ifdef ENABLE_VIRTUAL_TERMINAL_PROCESSING
--- 308,314 ----
  
    handle = GetStdHandle (STD_ERROR_HANDLE);
  
!   if ((handle != INVALID_HANDLE_VALUE) && (handle != nullptr))
      isconsole = GetConsoleMode (handle, &mode);
  
  #ifdef ENABLE_VIRTUAL_TERMINAL_PROCESSING
*************** parse_env_vars_for_urls ()
*** 362,371 ****
    const char *p;
  
    p = getenv ("GCC_URLS"); /* Plural! */
!   if (p == NULL)
      p = getenv ("TERM_URLS");
  
!   if (p == NULL)
      return URL_FORMAT_DEFAULT;
  
    if (*p == '\0')
--- 362,371 ----
    const char *p;
  
    p = getenv ("GCC_URLS"); /* Plural! */
!   if (p == nullptr)
      p = getenv ("TERM_URLS");
  
!   if (p == nullptr)
      return URL_FORMAT_DEFAULT;
  
    if (*p == '\0')
*************** auto_enable_urls ()
*** 400,406 ****
    DWORD mode;
  
    handle = GetStdHandle (STD_ERROR_HANDLE);
!   if ((handle == INVALID_HANDLE_VALUE) || (handle == NULL))
      return false;
  
    /* If ansi escape sequences aren't supported by the console, then URLs will
--- 400,406 ----
    DWORD mode;
  
    handle = GetStdHandle (STD_ERROR_HANDLE);
!   if ((handle == INVALID_HANDLE_VALUE) || (handle == nullptr))
      return false;
  
    /* If ansi escape sequences aren't supported by the console, then URLs will
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-format-json.cc gcc-16-20250706/gcc/diagnostic-format-json.cc
*** gcc-16-20250629/gcc/diagnostic-format-json.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-format-json.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,605 ****
- /* JSON output for diagnostics
-    Copyright (C) 2018-2025 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"
- #define INCLUDE_VECTOR
- #include "system.h"
- #include "coretypes.h"
- #include "diagnostic.h"
- #include "selftest-diagnostic.h"
- #include "diagnostic-metadata.h"
- #include "diagnostic-path.h"
- #include "diagnostic-format.h"
- #include "diagnostic-buffer.h"
- #include "json.h"
- #include "selftest.h"
- #include "diagnostic-client-data-hooks.h"
- #include "logical-location.h"
- 
- class json_output_format;
- 
- /* Concrete buffering implementation subclass for JSON output.  */
- 
- class diagnostic_json_format_buffer : public diagnostic_per_format_buffer
- {
- public:
-   friend class json_output_format;
- 
-   diagnostic_json_format_buffer (json_output_format &format)
-   : m_format (format)
-   {}
- 
-   void dump (FILE *out, int indent) const final override;
-   bool empty_p () const final override;
-   void move_to (diagnostic_per_format_buffer &dest) final override;
-   void clear () final override;
-   void flush () final override;
- 
- private:
-   json_output_format &m_format;
-   std::vector<std::unique_ptr<json::object>> m_results;
- };
- 
- /* Subclass of diagnostic_output_format for JSON output.  */
- 
- class json_output_format : public diagnostic_output_format
- {
- public:
-   friend class diagnostic_json_format_buffer;
- 
-   void dump (FILE *out, int indent) const override
-   {
-     fprintf (out, "%*sjson_output_format\n", indent, "");
-     diagnostic_output_format::dump (out, indent);
-   }
- 
-   std::unique_ptr<diagnostic_per_format_buffer>
-   make_per_format_buffer () final override
-   {
-     return std::make_unique<diagnostic_json_format_buffer> (*this);
-   }
-   void set_buffer (diagnostic_per_format_buffer *base_buffer) final override
-   {
-     diagnostic_json_format_buffer *buffer
-       = static_cast<diagnostic_json_format_buffer *> (base_buffer);
-     m_buffer = buffer;
-   }
- 
-   void on_begin_group () final override
-   {
-     /* No-op.  */
-   }
-   void on_end_group () final override
-   {
-     m_cur_group = nullptr;
-     m_cur_children_array = nullptr;
-   }
-   void
-   on_report_diagnostic (const diagnostic_info &diagnostic,
- 			diagnostic_t orig_diag_kind) final override;
-   void on_diagram (const diagnostic_diagram &) final override
-   {
-     /* No-op.  */
-   }
-   void after_diagnostic (const diagnostic_info &) final override
-   {
-     /* No-op.  */
-   }
-   void update_printer () final override
-   {
-     m_printer = m_context.clone_printer ();
-     pp_show_color (m_printer.get ()) = false;
-   }
-   bool follows_reference_printer_p () const final override
-   {
-     return false;
-   }
- 
- protected:
-   json_output_format (diagnostic_context &context,
- 		      bool formatted)
-   : diagnostic_output_format (context),
-     m_buffer (nullptr),
-     m_toplevel_array (std::make_unique<json::array> ()),
-     m_cur_group (nullptr),
-     m_cur_children_array (nullptr),
-     m_formatted (formatted)
-   {
-   }
- 
-   /* Flush the top-level array to OUTF.  */
-   void
-   flush_to_file (FILE *outf)
-   {
-     m_toplevel_array->dump (outf, m_formatted);
-     fprintf (outf, "\n");
-     m_toplevel_array = nullptr;
-   }
- 
- private:
-   diagnostic_json_format_buffer *m_buffer;
- 
-   /* The top-level JSON array of pending diagnostics.  */
-   std::unique_ptr<json::array> m_toplevel_array;
- 
-   /* The JSON object for the current diagnostic group.  */
-   json::object *m_cur_group; // borrowed
- 
-   /* The JSON array for the "children" array within the current diagnostic
-      group.  */
-   json::array *m_cur_children_array; // borrowed
- 
-   bool m_formatted;
- };
- 
- /* Generate a JSON object for LOC.  */
- 
- static std::unique_ptr<json::object>
- json_from_expanded_location (diagnostic_context &context, location_t loc)
- {
-   expanded_location exploc = expand_location (loc);
-   std::unique_ptr<json::object> result = std::make_unique <json::object> ();
-   if (exploc.file)
-     result->set_string ("file", exploc.file);
-   result->set_integer ("line", exploc.line);
- 
-   const enum diagnostics_column_unit orig_unit = context.m_column_unit;
-   struct
-   {
-     const char *name;
-     enum diagnostics_column_unit unit;
-   } column_fields[] = {
-     {"display-column", DIAGNOSTICS_COLUMN_UNIT_DISPLAY},
-     {"byte-column", DIAGNOSTICS_COLUMN_UNIT_BYTE}
-   };
-   int the_column = INT_MIN;
-   for (int i = 0; i != ARRAY_SIZE (column_fields); ++i)
-     {
-       context.m_column_unit = column_fields[i].unit;
-       diagnostic_column_policy col_policy (context);
-       const int col = col_policy.converted_column (exploc);
-       result->set_integer (column_fields[i].name, col);
-       if (column_fields[i].unit == orig_unit)
- 	the_column = col;
-     }
-   gcc_assert (the_column != INT_MIN);
-   result->set_integer ("column", the_column);
-   context.m_column_unit = orig_unit;
-   return result;
- }
- 
- /* Generate a JSON object for LOC_RANGE.  */
- 
- static std::unique_ptr<json::object>
- json_from_location_range (diagnostic_context &context,
- 			  const location_range *loc_range, unsigned range_idx)
- {
-   location_t caret_loc = get_pure_location (loc_range->m_loc);
- 
-   if (caret_loc == UNKNOWN_LOCATION)
-     return nullptr;
- 
-   location_t start_loc = get_start (loc_range->m_loc);
-   location_t finish_loc = get_finish (loc_range->m_loc);
- 
-   std::unique_ptr<json::object> result = std::make_unique <json::object> ();
-   result->set ("caret",
- 	       json_from_expanded_location (context, caret_loc));
-   if (start_loc != caret_loc
-       && start_loc != UNKNOWN_LOCATION)
-     result->set ("start",
- 		 json_from_expanded_location (context, start_loc));
-   if (finish_loc != caret_loc
-       && finish_loc != UNKNOWN_LOCATION)
-     result->set ("finish",
- 		 json_from_expanded_location (context, finish_loc));
- 
-   if (loc_range->m_label)
-     {
-       label_text text (loc_range->m_label->get_text (range_idx));
-       if (text.get ())
- 	result->set_string ("label", text.get ());
-     }
- 
-   return result;
- }
- 
- /* Generate a JSON object for HINT.  */
- 
- static std::unique_ptr<json::object>
- json_from_fixit_hint (diagnostic_context &context, const fixit_hint *hint)
- {
-   std::unique_ptr<json::object> fixit_obj = std::make_unique <json::object> ();
- 
-   location_t start_loc = hint->get_start_loc ();
-   fixit_obj->set ("start",
- 		  json_from_expanded_location (context, start_loc));
-   location_t next_loc = hint->get_next_loc ();
-   fixit_obj->set ("next",
- 		  json_from_expanded_location (context, next_loc). release ());
-   fixit_obj->set_string ("string", hint->get_string ());
- 
-   return fixit_obj;
- }
- 
- /* Generate a JSON object for METADATA.  */
- 
- static std::unique_ptr<json::object>
- json_from_metadata (const diagnostic_metadata *metadata)
- {
-   std::unique_ptr<json::object> metadata_obj = std::make_unique <json::object> ();
- 
-   if (metadata->get_cwe ())
-     metadata_obj->set_integer ("cwe", metadata->get_cwe ());
- 
-   return metadata_obj;
- }
- 
- /* Make a JSON value for PATH.  */
- 
- static std::unique_ptr<json::array>
- make_json_for_path (diagnostic_context &context,
- 		    pretty_printer *ref_pp,
- 		    const diagnostic_path *path)
- {
-   std::unique_ptr<json::array> path_array = std::make_unique<json::array> ();
-   for (unsigned i = 0; i < path->num_events (); i++)
-     {
-       const diagnostic_event &event = path->get_event (i);
- 
-       std::unique_ptr<json::object> event_obj = std::make_unique <json::object> ();
-       if (event.get_location ())
- 	event_obj->set ("location",
- 			json_from_expanded_location (context,
- 						     event.get_location ()));
-       auto pp = ref_pp->clone ();
-       event.print_desc (*pp.get ());
-       event_obj->set_string ("description", pp_formatted_text (pp.get ()));
-       if (logical_location logical_loc = event.get_logical_location ())
- 	if (auto hooks = context.get_client_data_hooks ())
- 	  if (auto mgr = hooks->get_logical_location_manager ())
- 	    {
- 	      label_text name (mgr->get_name_for_path_output (logical_loc));
- 	      event_obj->set_string ("function", name.get ());
- 	    }
-       event_obj->set_integer ("depth", event.get_stack_depth ());
-       path_array->append (std::move (event_obj));
-     }
-   return path_array;
- }
- 
- /* class diagnostic_json_format_buffer : public diagnostic_per_format_buffer.  */
- 
- void
- diagnostic_json_format_buffer::dump (FILE *out, int indent) const
- {
-   fprintf (out, "%*sdiagnostic_json_format_buffer:\n", indent, "");
-   int idx = 0;
-   for (auto &result : m_results)
-     {
-       fprintf (out, "%*sresult[%i]:\n", indent + 2, "", idx);
-       result->dump (out, true);
-       fprintf (out, "\n");
-       ++idx;
-     }
- }
- 
- bool
- diagnostic_json_format_buffer::empty_p () const
- {
-   return m_results.empty ();
- }
- 
- void
- diagnostic_json_format_buffer::move_to (diagnostic_per_format_buffer &base)
- {
-   diagnostic_json_format_buffer &dest
-     = static_cast<diagnostic_json_format_buffer &> (base);
-   for (auto &&result : m_results)
-     dest.m_results.push_back (std::move (result));
-   m_results.clear ();
- }
- 
- void
- diagnostic_json_format_buffer::clear ()
- {
-   m_results.clear ();
- }
- 
- void
- diagnostic_json_format_buffer::flush ()
- {
-   for (auto &&result : m_results)
-     m_format.m_toplevel_array->append (std::move (result));
-   m_results.clear ();
- }
- 
- /* Implementation of "on_report_diagnostic" vfunc for JSON output.
-    Generate a JSON object for DIAGNOSTIC, and store for output
-    within current diagnostic group.  */
- 
- void
- json_output_format::on_report_diagnostic (const diagnostic_info &diagnostic,
- 					  diagnostic_t orig_diag_kind)
- {
-   pretty_printer *const pp = get_printer ();
-   pp_output_formatted_text (pp, m_context.get_urlifier ());
- 
-   json::object *diag_obj = new json::object ();
- 
-   /* Get "kind" of diagnostic.  */
-   {
-     /* Lose the trailing ": ".  */
-     const char *kind_text = get_diagnostic_kind_text (diagnostic.kind);
-     size_t len = strlen (kind_text);
-     gcc_assert (len > 2);
-     gcc_assert (kind_text[len - 2] == ':');
-     gcc_assert (kind_text[len - 1] == ' ');
-     char *rstrip = xstrdup (kind_text);
-     rstrip[len - 2] = '\0';
-     diag_obj->set_string ("kind", rstrip);
-     free (rstrip);
-   }
- 
-   // FIXME: encoding of the message (json::string requires UTF-8)
-   diag_obj->set_string ("message", pp_formatted_text (pp));
-   pp_clear_output_area (pp);
- 
-   if (char *option_text = m_context.make_option_name (diagnostic.option_id,
- 						      orig_diag_kind,
- 						      diagnostic.kind))
-     {
-       diag_obj->set_string ("option", option_text);
-       free (option_text);
-     }
- 
-   if (char *option_url = m_context.make_option_url (diagnostic.option_id))
-     {
-       diag_obj->set_string ("option_url", option_url);
-       free (option_url);
-     }
- 
-   if (m_buffer)
-     {
-       gcc_assert (!m_cur_group);
-       m_buffer->m_results.push_back (std::unique_ptr<json::object> (diag_obj));
-     }
-   else
-     {
-       /* If we've already emitted a diagnostic within this auto_diagnostic_group,
- 	 then add diag_obj to its "children" array.  */
-       if (m_cur_group)
- 	{
- 	  gcc_assert (m_cur_children_array);
- 	  m_cur_children_array->append (diag_obj);
- 	}
-       else
- 	{
- 	  /* Otherwise, make diag_obj be the top-level object within the group;
- 	     add a "children" array and record the column origin.  */
- 	  m_cur_group = diag_obj;
- 	  std::unique_ptr<json::array> children_array
- 	    = std::make_unique<json::array> ();
- 	  m_cur_children_array = children_array.get (); // borrowed
- 	  diag_obj->set ("children", std::move (children_array));
- 	  diag_obj->set_integer ("column-origin", m_context.m_column_origin);
- 	  m_toplevel_array->append (diag_obj);
- 	}
-     }
- 
-   /* diag_obj is now owned by either m_cur_children_array or
-      m_toplevel_array; further uses of diag_obj are borrowing it.  */
- 
-   const rich_location *richloc = diagnostic.richloc;
- 
-   {
-     std::unique_ptr<json::array> loc_array = std::make_unique<json::array> ();
-     for (unsigned int i = 0; i < richloc->get_num_locations (); i++)
-       {
- 	const location_range *loc_range = richloc->get_range (i);
- 	if (std::unique_ptr<json::object> loc_obj
- 	      = json_from_location_range (m_context, loc_range, i))
- 	  loc_array->append (std::move (loc_obj));
-       }
-     diag_obj->set ("locations", std::move (loc_array));
-   }
- 
-   if (richloc->get_num_fixit_hints ())
-     {
-       std::unique_ptr<json::array> fixit_array = std::make_unique<json::array> ();
-       for (unsigned int i = 0; i < richloc->get_num_fixit_hints (); i++)
- 	{
- 	  const fixit_hint *hint = richloc->get_fixit_hint (i);
- 	  fixit_array->append (json_from_fixit_hint (m_context, hint));
- 	}
-       diag_obj->set ("fixits", std::move (fixit_array));
-     }
- 
-   /* TODO: tree-ish things:
-      TODO: functions
-      TODO: inlining information
-      TODO: macro expansion information.  */
- 
-   if (diagnostic.metadata)
-     diag_obj->set ("metadata", json_from_metadata (diagnostic.metadata));
- 
-   const diagnostic_path *path = richloc->get_path ();
-   if (path)
-     diag_obj->set ("path", make_json_for_path (m_context, get_printer (), path));
- 
-   diag_obj->set_bool ("escape-source", richloc->escape_on_output_p ());
- }
- 
- class json_stderr_output_format : public json_output_format
- {
- public:
-   json_stderr_output_format (diagnostic_context &context,
- 			     bool formatted)
-     : json_output_format (context, formatted)
-   {
-   }
-   ~json_stderr_output_format ()
-   {
-     flush_to_file (stderr);
-   }
-   bool machine_readable_stderr_p () const final override
-   {
-     return true;
-   }
- };
- 
- class json_file_output_format : public json_output_format
- {
- public:
-   json_file_output_format (diagnostic_context &context,
- 			   bool formatted,
- 			   const char *base_file_name)
-   : json_output_format (context, formatted),
-     m_base_file_name (xstrdup (base_file_name))
-   {
-   }
- 
-   ~json_file_output_format ()
-   {
-     char *filename = concat (m_base_file_name, ".gcc.json", nullptr);
-     free (m_base_file_name);
-     m_base_file_name = nullptr;
-     FILE *outf = fopen (filename, "w");
-     if (!outf)
-       {
- 	const char *errstr = xstrerror (errno);
- 	fnotice (stderr, "error: unable to open '%s' for writing: %s\n",
- 		 filename, errstr);
- 	free (filename);
- 	return;
-       }
-     flush_to_file (outf);
-     fclose (outf);
-     free (filename);
-   }
-   bool machine_readable_stderr_p () const final override
-   {
-     return false;
-   }
- 
- private:
-   char *m_base_file_name;
- };
- 
- /* Populate CONTEXT in preparation for JSON output (either to stderr, or
-    to a file) using FMT.  Return a reference to *FMT.  */
- 
- static diagnostic_output_format &
- diagnostic_output_format_init_json (diagnostic_context &context,
- 				    std::unique_ptr<json_output_format> fmt)
- {
-   gcc_assert (fmt);
-   diagnostic_output_format &out = *fmt;
- 
-   /* Don't colorize the text.  */
-   pp_show_color (fmt->get_printer ()) = false;
-   context.set_show_highlight_colors (false);
- 
-   context.set_output_format (std::move (fmt));
- 
-   return out;
- }
- 
- /* Populate CONTEXT in preparation for JSON output to stderr.
-    Return a reference to the context's new sink.  */
- 
- diagnostic_output_format &
- diagnostic_output_format_init_json_stderr (diagnostic_context &context,
- 					   bool formatted)
- {
-   return diagnostic_output_format_init_json
-     (context,
-      std::make_unique<json_stderr_output_format> (context,
- 						  formatted));
- }
- 
- /* Populate CONTEXT in preparation for JSON output to a file named
-    BASE_FILE_NAME.gcc.json.
-    Return a reference to the context's new sink.  */
- 
- diagnostic_output_format &
- diagnostic_output_format_init_json_file (diagnostic_context &context,
- 					 bool formatted,
- 					 const char *base_file_name)
- {
-   return diagnostic_output_format_init_json
-     (context,
-      std::make_unique<json_file_output_format> (context,
- 						formatted,
- 						base_file_name));
- }
- 
- #if CHECKING_P
- 
- namespace selftest {
- 
- /* We shouldn't call json_from_expanded_location on UNKNOWN_LOCATION,
-    but verify that we handle this gracefully.  */
- 
- static void
- test_unknown_location ()
- {
-   test_diagnostic_context dc;
-   json_from_expanded_location (dc, UNKNOWN_LOCATION);
- }
- 
- /* Verify that we gracefully handle attempts to serialize bad
-    compound locations.  */
- 
- static void
- test_bad_endpoints ()
- {
-   location_t bad_endpoints
-     = make_location (BUILTINS_LOCATION,
- 		     UNKNOWN_LOCATION, UNKNOWN_LOCATION);
- 
-   location_range loc_range;
-   loc_range.m_loc = bad_endpoints;
-   loc_range.m_range_display_kind = SHOW_RANGE_WITH_CARET;
-   loc_range.m_label = nullptr;
- 
-   test_diagnostic_context dc;
-   std::unique_ptr<json::object> obj
-     = json_from_location_range (dc, &loc_range, 0);
-   /* We should have a "caret" value, but no "start" or "finish" values.  */
-   ASSERT_TRUE (obj != nullptr);
-   ASSERT_TRUE (obj->get ("caret") != nullptr);
-   ASSERT_TRUE (obj->get ("start") == nullptr);
-   ASSERT_TRUE (obj->get ("finish") == nullptr);
- }
- 
- /* Run all of the selftests within this file.  */
- 
- void
- diagnostic_format_json_cc_tests ()
- {
-   test_unknown_location ();
-   test_bad_endpoints ();
- }
- 
- } // namespace selftest
- 
- #endif /* #if CHECKING_P */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-format-sarif.cc gcc-16-20250706/gcc/diagnostic-format-sarif.cc
*** gcc-16-20250629/gcc/diagnostic-format-sarif.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-format-sarif.cc	Sun Jul  6 22:32:11 2025
*************** bt_callback (void *data, uintptr_t pc, c
*** 1722,1733 ****
  
    /* If we don't have any useful information, don't print
       anything.  */
!   if (filename == NULL && function == NULL)
      return 0;
  
    /* Skip functions in diagnostic.cc or diagnostic-global-context.cc.  */
    if (closure->m_frames_arr->size () == 0
!       && filename != NULL
        && (strcmp (lbasename (filename), "diagnostic.cc") == 0
  	  || strcmp (lbasename (filename),
  		     "diagnostic-global-context.cc") == 0))
--- 1722,1733 ----
  
    /* If we don't have any useful information, don't print
       anything.  */
!   if (filename == nullptr && function == nullptr)
      return 0;
  
    /* Skip functions in diagnostic.cc or diagnostic-global-context.cc.  */
    if (closure->m_frames_arr->size () == 0
!       && filename != nullptr
        && (strcmp (lbasename (filename), "diagnostic.cc") == 0
  	  || strcmp (lbasename (filename),
  		     "diagnostic-global-context.cc") == 0))
*************** bt_callback (void *data, uintptr_t pc, c
*** 1741,1753 ****
        return 1;
      }
  
!   char *alc = NULL;
!   if (function != NULL)
      {
        char *str = cplus_demangle_v3 (function,
  				     (DMGL_VERBOSE | DMGL_ANSI
  				      | DMGL_GNU_V3 | DMGL_PARAMS));
!       if (str != NULL)
  	{
  	  alc = str;
  	  function = str;
--- 1741,1753 ----
        return 1;
      }
  
!   char *alc = nullptr;
!   if (function != nullptr)
      {
        char *str = cplus_demangle_v3 (function,
  				     (DMGL_VERBOSE | DMGL_ANSI
  				      | DMGL_GNU_V3 | DMGL_PARAMS));
!       if (str != nullptr)
  	{
  	  alc = str;
  	  function = str;
*************** bt_callback (void *data, uintptr_t pc, c
*** 1759,1765 ****
  	  if (strncmp (function, bt_stop[i], len) == 0
  	      && (function[len] == '\0' || function[len] == '('))
  	    {
! 	      if (alc != NULL)
  		free (alc);
  	      /* Returning a non-zero value stops the backtrace.  */
  	      return 1;
--- 1759,1765 ----
  	  if (strncmp (function, bt_stop[i], len) == 0
  	      && (function[len] == '\0' || function[len] == '('))
  	    {
! 	      if (alc != nullptr)
  		free (alc);
  	      /* Returning a non-zero value stops the backtrace.  */
  	      return 1;
*************** bt_callback (void *data, uintptr_t pc, c
*** 1781,1787 ****
    frame_obj->set_integer ("lineno", lineno);
    closure->m_frames_arr->append (std::move (frame_obj));
  
!   if (alc != NULL)
      free (alc);
  
    return 0;
--- 1781,1787 ----
    frame_obj->set_integer ("lineno", lineno);
    closure->m_frames_arr->append (std::move (frame_obj));
  
!   if (alc != nullptr)
      free (alc);
  
    return 0;
*************** populate_thread_flow_location_object (sa
*** 3005,3013 ****
  std::unique_ptr<json::array>
  sarif_builder::maybe_make_kinds_array (diagnostic_event::meaning m) const
  {
!   if (m.m_verb == diagnostic_event::VERB_unknown
!       && m.m_noun == diagnostic_event::NOUN_unknown
!       && m.m_property == diagnostic_event::PROPERTY_unknown)
      return nullptr;
  
    auto kinds_arr = std::make_unique<json::array> ();
--- 3005,3013 ----
  std::unique_ptr<json::array>
  sarif_builder::maybe_make_kinds_array (diagnostic_event::meaning m) const
  {
!   if (m.m_verb == diagnostic_event::verb::unknown
!       && m.m_noun == diagnostic_event::noun::unknown
!       && m.m_property == diagnostic_event::property::unknown)
      return nullptr;
  
    auto kinds_arr = std::make_unique<json::array> ();
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-format-text.cc gcc-16-20250706/gcc/diagnostic-format-text.cc
*** gcc-16-20250629/gcc/diagnostic-format-text.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-format-text.cc	Sun Jul  6 22:32:11 2025
*************** diagnostic_text_output_format::on_diagra
*** 263,269 ****
    pretty_printer *const pp = get_printer ();
  
    char *saved_prefix = pp_take_prefix (pp);
!   pp_set_prefix (pp, NULL);
    /* Use a newline before and after and a two-space indent
       to make the diagram stand out a little from the wall of text.  */
    pp_newline (pp);
--- 263,269 ----
    pretty_printer *const pp = get_printer ();
  
    char *saved_prefix = pp_take_prefix (pp);
!   pp_set_prefix (pp, nullptr);
    /* Use a newline before and after and a two-space indent
       to make the diagram stand out a little from the wall of text.  */
    pp_newline (pp);
*************** update_printer ()
*** 471,477 ****
  void
  diagnostic_text_output_format::print_any_cwe (const diagnostic_info &diagnostic)
  {
!   if (diagnostic.metadata == NULL)
      return;
  
    int cwe = diagnostic.metadata->get_cwe ();
--- 471,477 ----
  void
  diagnostic_text_output_format::print_any_cwe (const diagnostic_info &diagnostic)
  {
!   if (!diagnostic.metadata)
      return;
  
    int cwe = diagnostic.metadata->get_cwe ();
*************** void
*** 507,513 ****
  diagnostic_text_output_format::
  print_any_rules (const diagnostic_info &diagnostic)
  {
!   if (diagnostic.metadata == NULL)
      return;
  
    for (unsigned idx = 0; idx < diagnostic.metadata->get_num_rules (); idx++)
--- 507,513 ----
  diagnostic_text_output_format::
  print_any_rules (const diagnostic_info &diagnostic)
  {
!   if (!diagnostic.metadata)
      return;
  
    for (unsigned idx = 0; idx < diagnostic.metadata->get_num_rules (); idx++)
*************** print_any_rules (const diagnostic_info &
*** 522,528 ****
  	  const char *kind_color
  	    = diagnostic_get_color_for_kind (diagnostic.kind);
  	  pp_string (pp, colorize_start (pp_show_color (pp), kind_color));
! 	  char *url = NULL;
  	  if (pp->supports_urls_p ())
  	    {
  	      url = rule.make_url ();
--- 522,528 ----
  	  const char *kind_color
  	    = diagnostic_get_color_for_kind (diagnostic.kind);
  	  pp_string (pp, colorize_start (pp_show_color (pp), kind_color));
! 	  char *url = nullptr;
  	  if (pp->supports_urls_p ())
  	    {
  	      url = rule.make_url ();
*************** void
*** 639,645 ****
  diagnostic_text_output_format::report_current_module (location_t where)
  {
    pretty_printer *pp = get_printer ();
!   const line_map_ordinary *map = NULL;
  
    if (pp_needs_newline (pp))
      {
--- 639,645 ----
  diagnostic_text_output_format::report_current_module (location_t where)
  {
    pretty_printer *pp = get_printer ();
!   const line_map_ordinary *map = nullptr;
  
    if (pp_needs_newline (pp))
      {
*************** diagnostic_text_output_format::report_cu
*** 677,683 ****
  	      const char *line_col = maybe_line_and_column (s.line, col);
  	      static const char *const msgs[] =
  		{
! 		 NULL,
  		 N_("                 from"),
  		 N_("In file included from"),	/* 2 */
  		 N_("        included from"),
--- 677,683 ----
  	      const char *line_col = maybe_line_and_column (s.line, col);
  	      static const char *const msgs[] =
  		{
! 		 nullptr,
  		 N_("                 from"),
  		 N_("In file included from"),	/* 2 */
  		 N_("        included from"),
*************** default_diagnostic_text_finalizer (diagn
*** 719,725 ****
  {
    pretty_printer *const pp = text_output.get_printer ();
    char *saved_prefix = pp_take_prefix (pp);
!   pp_set_prefix (pp, NULL);
    pp_newline (pp);
    diagnostic_show_locus (&text_output.get_context (),
  			 text_output.get_source_printing_options (),
--- 719,725 ----
  {
    pretty_printer *const pp = text_output.get_printer ();
    char *saved_prefix = pp_take_prefix (pp);
!   pp_set_prefix (pp, nullptr);
    pp_newline (pp);
    diagnostic_show_locus (&text_output.get_context (),
  			 text_output.get_source_printing_options (),
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-format.h gcc-16-20250706/gcc/diagnostic-format.h
*** gcc-16-20250629/gcc/diagnostic-format.h	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-format.h	Sun Jul  6 22:32:11 2025
*************** diagnostic_output_format_init (diagnosti
*** 100,111 ****
  			       enum diagnostics_output_format,
  			       bool json_formatting);
  
- extern diagnostic_output_format &
- diagnostic_output_format_init_json_stderr (diagnostic_context &context,
- 					   bool formatted);
- extern diagnostic_output_format &
- diagnostic_output_format_init_json_file (diagnostic_context &context,
- 					 bool formatted,
- 					 const char *base_file_name);
- 
  #endif /* ! GCC_DIAGNOSTIC_FORMAT_H */
--- 100,103 ----
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-macro-unwinding.cc gcc-16-20250706/gcc/diagnostic-macro-unwinding.cc
*** gcc-16-20250629/gcc/diagnostic-macro-unwinding.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-macro-unwinding.cc	Sun Jul  6 22:32:11 2025
*************** maybe_unwind_expanded_macro_loc (diagnos
*** 157,167 ****
             comment above.  */
          location_t resolved_def_loc =
            linemap_resolve_location (line_table, iter->where,
!                                     LRK_MACRO_DEFINITION_LOCATION, NULL);
  
  	/* Don't print trace for locations that are reserved or from
  	   within a system header.  */
!         const line_map_ordinary *m = NULL;
          location_t l =
            linemap_resolve_location (line_table, resolved_def_loc,
                                      LRK_SPELLING_LOCATION,  &m);
--- 157,167 ----
             comment above.  */
          location_t resolved_def_loc =
            linemap_resolve_location (line_table, iter->where,
!                                     LRK_MACRO_DEFINITION_LOCATION, nullptr);
  
  	/* Don't print trace for locations that are reserved or from
  	   within a system header.  */
!         const line_map_ordinary *m = nullptr;
          location_t l =
            linemap_resolve_location (line_table, resolved_def_loc,
                                      LRK_SPELLING_LOCATION,  &m);
*************** maybe_unwind_expanded_macro_loc (diagnos
*** 193,199 ****
          location_t resolved_exp_loc =
            linemap_resolve_location (line_table,
                                      iter->map->get_expansion_point_location (),
!                                     LRK_MACRO_DEFINITION_LOCATION, NULL);
  
  	text_output.append_note (resolved_exp_loc,
  				 "in expansion of macro %qs",
--- 193,199 ----
          location_t resolved_exp_loc =
            linemap_resolve_location (line_table,
                                      iter->map->get_expansion_point_location (),
!                                     LRK_MACRO_DEFINITION_LOCATION, nullptr);
  
  	text_output.append_note (resolved_exp_loc,
  				 "in expansion of macro %qs",
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-path-output.cc gcc-16-20250706/gcc/diagnostic-path-output.cc
*** gcc-16-20250629/gcc/diagnostic-path-output.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-path-output.cc	Sun Jul  6 22:32:11 2025
*************** class path_label : public range_label
*** 114,120 ****
      pp_printf (pp.get (), "%@", &event_id);
      pp_space (pp.get ());
  
!     if (meaning.m_verb == diagnostic_event::VERB_danger
  	&& m_allow_emojis)
        {
  	pp_unicode_character (pp.get (), 0x26A0); /* U+26A0 WARNING SIGN.  */
--- 114,120 ----
      pp_printf (pp.get (), "%@", &event_id);
      pp_space (pp.get ());
  
!     if (meaning.m_verb == diagnostic_event::verb::danger
  	&& m_allow_emojis)
        {
  	pp_unicode_character (pp.get (), 0x26A0); /* U+26A0 WARNING SIGN.  */
*************** path_summary::path_summary (const path_p
*** 806,812 ****
  {
    const unsigned num_events = path.num_events ();
  
!   event_range *cur_event_range = NULL;
    for (unsigned idx = 0; idx < num_events; idx++)
      {
        const diagnostic_event &event = path.get_event (idx);
--- 806,812 ----
  {
    const unsigned num_events = path.num_events ();
  
!   event_range *cur_event_range = nullptr;
    for (unsigned idx = 0; idx < num_events; idx++)
      {
        const diagnostic_event &event = path.get_event (idx);
*************** print_path_summary_as_html (const path_s
*** 1194,1200 ****
  		     || this_logical_loc != curr_frame->m_logical_loc)
  		{
  		  curr_frame = end_html_stack_frame (xp, std::move (curr_frame));
! 		  if (curr_frame == NULL)
  		    {
  		      curr_frame
  			= begin_html_stack_frame (xp,
--- 1194,1200 ----
  		     || this_logical_loc != curr_frame->m_logical_loc)
  		{
  		  curr_frame = end_html_stack_frame (xp, std::move (curr_frame));
! 		  if (curr_frame == nullptr)
  		    {
  		      curr_frame
  			= begin_html_stack_frame (xp,
*************** print_path_summary_as_html (const path_s
*** 1211,1217 ****
        else
  	{
  	  curr_frame = begin_html_stack_frame (xp,
! 					       NULL,
  					       range->m_logical_loc,
  					       range->m_stack_depth,
  					       logical_loc_mgr);
--- 1211,1217 ----
        else
  	{
  	  curr_frame = begin_html_stack_frame (xp,
! 					       nullptr,
  					       range->m_logical_loc,
  					       range->m_stack_depth,
  					       logical_loc_mgr);
*************** diagnostic_text_output_format::print_pat
*** 1366,1372 ****
  			      colorize,
  			      show_event_links);
  	char *saved_prefix = pp_take_prefix (pp);
! 	pp_set_prefix (pp, NULL);
  	print_path_summary_as_text (summary, *this,
  				    get_context ().show_path_depths_p ());
  	pp_flush (pp);
--- 1366,1372 ----
  			      colorize,
  			      show_event_links);
  	char *saved_prefix = pp_take_prefix (pp);
! 	pp_set_prefix (pp, nullptr);
  	print_path_summary_as_text (summary, *this,
  				    get_context ().show_path_depths_p ());
  	pp_flush (pp);
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-path.cc gcc-16-20250706/gcc/diagnostic-path.cc
*** gcc-16-20250629/gcc/diagnostic-path.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-path.cc	Sun Jul  6 22:32:11 2025
*************** diagnostic_event::meaning::dump_to_pp (p
*** 67,73 ****
    pp_character (pp, '}');
  }
  
! /* Get a string (or NULL) for V suitable for use within a SARIF
     threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8).  */
  
  const char *
--- 67,73 ----
    pp_character (pp, '}');
  }
  
! /* Get a string (or nullptr) for V suitable for use within a SARIF
     threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8).  */
  
  const char *
*************** diagnostic_event::meaning::maybe_get_ver
*** 77,104 ****
      {
      default:
        gcc_unreachable ();
!     case VERB_unknown:
!       return NULL;
!     case VERB_acquire:
        return "acquire";
!     case VERB_release:
        return "release";
!     case VERB_enter:
        return "enter";
!     case VERB_exit:
        return "exit";
!     case VERB_call:
        return "call";
!     case VERB_return:
        return "return";
!     case VERB_branch:
        return "branch";
!     case VERB_danger:
        return "danger";
      }
  }
  
! /* Get a string (or NULL) for N suitable for use within a SARIF
     threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8).  */
  
  const char *
--- 77,104 ----
      {
      default:
        gcc_unreachable ();
!     case verb::unknown:
!       return nullptr;
!     case verb::acquire:
        return "acquire";
!     case verb::release:
        return "release";
!     case verb::enter:
        return "enter";
!     case verb::exit:
        return "exit";
!     case verb::call:
        return "call";
!     case verb::return_:
        return "return";
!     case verb::branch:
        return "branch";
!     case verb::danger:
        return "danger";
      }
  }
  
! /* Get a string (or nullptr) for N suitable for use within a SARIF
     threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8).  */
  
  const char *
*************** diagnostic_event::meaning::maybe_get_nou
*** 108,131 ****
      {
      default:
        gcc_unreachable ();
!     case NOUN_unknown:
!       return NULL;
!     case NOUN_taint:
        return "taint";
!     case NOUN_sensitive:
        return "sensitive";
!     case NOUN_function:
        return "function";
!     case NOUN_lock:
        return "lock";
!     case NOUN_memory:
        return "memory";
!     case NOUN_resource:
        return "resource";
      }
  }
  
! /* Get a string (or NULL) for P suitable for use within a SARIF
     threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8).  */
  
  const char *
--- 108,131 ----
      {
      default:
        gcc_unreachable ();
!     case noun::unknown:
!       return nullptr;
!     case noun::taint:
        return "taint";
!     case noun::sensitive:
        return "sensitive";
!     case noun::function:
        return "function";
!     case noun::lock:
        return "lock";
!     case noun::memory:
        return "memory";
!     case noun::resource:
        return "resource";
      }
  }
  
! /* Get a string (or nullptr) for P suitable for use within a SARIF
     threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8).  */
  
  const char *
*************** diagnostic_event::meaning::maybe_get_pro
*** 135,145 ****
      {
      default:
        gcc_unreachable ();
!     case PROPERTY_unknown:
!       return NULL;
!     case PROPERTY_true:
        return "true";
!     case PROPERTY_false:
        return "false";
      }
  }
--- 135,145 ----
      {
      default:
        gcc_unreachable ();
!     case property::unknown:
!       return nullptr;
!     case property::true_:
        return "true";
!     case property::false_:
        return "false";
      }
  }
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-path.h gcc-16-20250706/gcc/diagnostic-path.h
*** gcc-16-20250629/gcc/diagnostic-path.h	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-path.h	Sun Jul  6 22:32:11 2025
*************** class diagnostic_event
*** 75,133 ****
   public:
    /* Enums for giving a sense of what this event means.
       Roughly corresponds to SARIF v2.1.0 section 3.38.8.  */
!   enum verb
    {
!     VERB_unknown,
  
!     VERB_acquire,
!     VERB_release,
!     VERB_enter,
!     VERB_exit,
!     VERB_call,
!     VERB_return,
!     VERB_branch,
  
!     VERB_danger
    };
!   enum noun
    {
!     NOUN_unknown,
  
!     NOUN_taint,
!     NOUN_sensitive, // this one isn't in SARIF v2.1.0; filed as https://github.com/oasis-tcs/sarif-spec/issues/530
!     NOUN_function,
!     NOUN_lock,
!     NOUN_memory,
!     NOUN_resource
    };
!   enum property
    {
!     PROPERTY_unknown,
  
!     PROPERTY_true,
!     PROPERTY_false
    };
    /* A bundle of such enums, allowing for descriptions of the meaning of
       an event, such as
!      - "acquire memory": meaning (VERB_acquire, NOUN_memory)
!      - "take true branch"": meaning (VERB_branch, PROPERTY_true)
!      - "return from function": meaning (VERB_return, NOUN_function)
       etc, as per SARIF's threadFlowLocation "kinds" property
       (SARIF v2.1.0 section 3.38.8).  */
    struct meaning
    {
      meaning ()
!     : m_verb (VERB_unknown),
!       m_noun (NOUN_unknown),
!       m_property (PROPERTY_unknown)
      {
      }
      meaning (enum verb verb, enum noun noun)
!     : m_verb (verb), m_noun (noun), m_property (PROPERTY_unknown)
      {
      }
      meaning (enum verb verb, enum property property)
!     : m_verb (verb), m_noun (NOUN_unknown), m_property (property)
      {
      }
  
--- 75,133 ----
   public:
    /* Enums for giving a sense of what this event means.
       Roughly corresponds to SARIF v2.1.0 section 3.38.8.  */
!   enum class verb
    {
!     unknown,
  
!     acquire,
!     release,
!     enter,
!     exit,
!     call,
!     return_,
!     branch,
  
!     danger
    };
!   enum class noun
    {
!     unknown,
  
!     taint,
!     sensitive, // this one isn't in SARIF v2.1.0; filed as https://github.com/oasis-tcs/sarif-spec/issues/530
!     function,
!     lock,
!     memory,
!     resource
    };
!   enum class property
    {
!     unknown,
  
!     true_,
!     false_
    };
    /* A bundle of such enums, allowing for descriptions of the meaning of
       an event, such as
!      - "acquire memory": meaning (verb::acquire, noun::memory)
!      - "take true branch"": meaning (verb::branch, property::true)
!      - "return from function": meaning (verb::return, noun::function)
       etc, as per SARIF's threadFlowLocation "kinds" property
       (SARIF v2.1.0 section 3.38.8).  */
    struct meaning
    {
      meaning ()
!     : m_verb (verb::unknown),
!       m_noun (noun::unknown),
!       m_property (property::unknown)
      {
      }
      meaning (enum verb verb, enum noun noun)
!     : m_verb (verb), m_noun (noun), m_property (property::unknown)
      {
      }
      meaning (enum verb verb, enum property property)
!     : m_verb (verb), m_noun (noun::unknown), m_property (property)
      {
      }
  
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-show-locus.cc gcc-16-20250706/gcc/diagnostic-show-locus.cc
*** gcc-16-20250629/gcc/diagnostic-show-locus.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-show-locus.cc	Sun Jul  6 22:32:11 2025
*************** make_range (file_cache &fc,
*** 1251,1259 ****
  	    int start_line, int start_col, int end_line, int end_col)
  {
    const expanded_location start_exploc
!     = {"", start_line, start_col, NULL, false};
    const expanded_location finish_exploc
!     = {"", end_line, end_col, NULL, false};
    return layout_range (exploc_with_display_col (fc,
  						start_exploc, def_policy (),
  						LOCATION_ASPECT_START),
--- 1251,1259 ----
  	    int start_line, int start_col, int end_line, int end_col)
  {
    const expanded_location start_exploc
!     = {"", start_line, start_col, nullptr, false};
    const expanded_location finish_exploc
!     = {"", end_line, end_col, nullptr, false};
    return layout_range (exploc_with_display_col (fc,
  						start_exploc, def_policy (),
  						LOCATION_ASPECT_START),
*************** make_range (file_cache &fc,
*** 1264,1270 ****
  		       exploc_with_display_col (fc,
  						start_exploc, def_policy (),
  						LOCATION_ASPECT_CARET),
! 		       0, NULL);
  }
  
  /* Selftests for layout_range::contains_point and
--- 1264,1270 ----
  		       exploc_with_display_col (fc,
  						start_exploc, def_policy (),
  						LOCATION_ASPECT_CARET),
! 		       0, nullptr);
  }
  
  /* Selftests for layout_range::contains_point and
*************** layout_printer<Sink>::print_annotation_l
*** 2613,2619 ****
  struct pod_label_text
  {
    pod_label_text ()
!   : m_buffer (NULL), m_caller_owned (false)
    {}
  
    pod_label_text (label_text &&other)
--- 2613,2619 ----
  struct pod_label_text
  {
    pod_label_text ()
!   : m_buffer (nullptr), m_caller_owned (false)
    {}
  
    pod_label_text (label_text &&other)
*************** layout_printer<Sink>::print_any_labels (
*** 2755,2761 ****
      FOR_EACH_VEC_ELT (m_layout.m_layout_ranges, i, range)
        {
  	/* Most ranges don't have labels, so reject this first.  */
! 	if (range->m_label == NULL)
  	  continue;
  
  	/* The range's caret must be on this line.  */
--- 2755,2761 ----
      FOR_EACH_VEC_ELT (m_layout.m_layout_ranges, i, range)
        {
  	/* Most ranges don't have labels, so reject this first.  */
! 	if (range->m_label == nullptr)
  	  continue;
  
  	/* The range's caret must be on this line.  */
*************** layout_printer<Sink>::print_any_labels (
*** 2771,2780 ****
  	label_text text;
  	text = range->m_label->get_text (range->m_original_idx);
  
! 	/* Allow for labels that return NULL from their get_text
  	   implementation (so e.g. such labels can control their own
  	   visibility).  */
! 	if (text.get () == NULL)
  	  continue;
  
  	labels.safe_push (line_label (range->m_original_idx,
--- 2771,2780 ----
  	label_text text;
  	text = range->m_label->get_text (range->m_original_idx);
  
! 	/* Allow for labels that return nullptr from their get_text
  	   implementation (so e.g. such labels can control their own
  	   visibility).  */
! 	if (text.get () == nullptr)
  	  continue;
  
  	labels.safe_push (line_label (range->m_original_idx,
*************** diagnostic_context::maybe_show_locus (co
*** 3861,3867 ****
    if (loc == m_last_location
        && richloc.get_num_fixit_hints () == 0
        && richloc.get_num_locations () == 1
!       && richloc.get_range (0)->m_label == NULL)
      return;
  
    m_last_location = loc;
--- 3861,3867 ----
    if (loc == m_last_location
        && richloc.get_num_fixit_hints () == 0
        && richloc.get_num_locations () == 1
!       && richloc.get_range (0)->m_label == nullptr)
      return;
  
    m_last_location = loc;
*************** diagnostic_context::maybe_show_locus_as_
*** 3895,3901 ****
    if (loc == m_last_location
        && richloc.get_num_fixit_hints () == 0
        && richloc.get_num_locations () == 1
!       && richloc.get_range (0)->m_label == NULL)
      return;
  
    m_last_location = loc;
--- 3895,3901 ----
    if (loc == m_last_location
        && richloc.get_num_fixit_hints () == 0
        && richloc.get_num_locations () == 1
!       && richloc.get_range (0)->m_label == nullptr)
      return;
  
    m_last_location = loc;
*************** test_layout_x_offset_display_tab (const
*** 4396,4406 ****
        layout_printer<to_text> lp (sink, test_layout, false);
        lp.print (policy);
        const char *out = pp_formatted_text (dc.get_reference_printer ());
!       ASSERT_EQ (NULL, strchr (out, '\t'));
        const char *left_quote = strchr (out, '`');
        const char *right_quote = strchr (out, '\'');
!       ASSERT_NE (NULL, left_quote);
!       ASSERT_NE (NULL, right_quote);
        ASSERT_EQ (right_quote - left_quote, extra_width[tabstop] + 2);
      }
  
--- 4396,4406 ----
        layout_printer<to_text> lp (sink, test_layout, false);
        lp.print (policy);
        const char *out = pp_formatted_text (dc.get_reference_printer ());
!       ASSERT_EQ (nullptr, strchr (out, '\t'));
        const char *left_quote = strchr (out, '`');
        const char *right_quote = strchr (out, '\'');
!       ASSERT_NE (nullptr, left_quote);
!       ASSERT_NE (nullptr, right_quote);
        ASSERT_EQ (right_quote - left_quote, extra_width[tabstop] + 2);
      }
  
*************** test_one_liner_labels ()
*** 5061,5070 ****
  		  dc.test_show_locus (richloc));
    }
  
!   /* Verify that a NULL result from range_label::get_text is
       handled gracefully.  */
    {
!     text_range_label label (NULL);
      gcc_rich_location richloc (bar, &label, nullptr);
  
      test_diagnostic_context dc;
--- 5061,5070 ----
  		  dc.test_show_locus (richloc));
    }
  
!   /* Verify that a nullptr result from range_label::get_text is
       handled gracefully.  */
    {
!     text_range_label label (nullptr);
      gcc_rich_location richloc (bar, &label, nullptr);
  
      test_diagnostic_context dc;
diff -Nrcpad gcc-16-20250629/gcc/diagnostic-spec.cc gcc-16-20250706/gcc/diagnostic-spec.cc
*** gcc-16-20250629/gcc/diagnostic-spec.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic-spec.cc	Sun Jul  6 22:32:11 2025
*************** suppress_warning_at (location_t loc, opt
*** 153,159 ****
  
    const nowarn_spec_t optspec (supp ? opt : opt_code ());
  
!   if (nowarn_spec_t *pspec = nowarn_map ? nowarn_map->get (loc) : NULL)
      {
        if (supp)
  	{
--- 153,159 ----
  
    const nowarn_spec_t optspec (supp ? opt : opt_code ());
  
!   if (nowarn_spec_t *pspec = nowarn_map ? nowarn_map->get (loc) : nullptr)
      {
        if (supp)
  	{
*************** copy_warning (location_t to, location_t
*** 210,216 ****
  
    nowarn_spec_t *from_spec;
    if (RESERVED_LOCATION_P (from))
!     from_spec = NULL;
    else
      from_spec = nowarn_map->get (from);
    if (RESERVED_LOCATION_P (to))
--- 210,216 ----
  
    nowarn_spec_t *from_spec;
    if (RESERVED_LOCATION_P (from))
!     from_spec = nullptr;
    else
      from_spec = nowarn_map->get (from);
    if (RESERVED_LOCATION_P (to))
diff -Nrcpad gcc-16-20250629/gcc/diagnostic.cc gcc-16-20250706/gcc/diagnostic.cc
*** gcc-16-20250629/gcc/diagnostic.cc	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic.cc	Sun Jul  6 22:32:11 2025
*************** int
*** 95,101 ****
  get_terminal_width (void)
  {
    const char * s = getenv ("COLUMNS");
!   if (s != NULL) {
      int n = atoi (s);
      if (n > 0)
        return n;
--- 95,101 ----
  get_terminal_width (void)
  {
    const char * s = getenv ("COLUMNS");
!   if (s != nullptr) {
      int n = atoi (s);
      if (n > 0)
        return n;
*************** diagnostic_set_info_translated (diagnost
*** 679,685 ****
    diagnostic->message.m_format_spec = msg;
    diagnostic->message.m_richloc = richloc;
    diagnostic->richloc = richloc;
!   diagnostic->metadata = NULL;
    diagnostic->kind = kind;
    diagnostic->option_id = 0;
  }
--- 679,685 ----
    diagnostic->message.m_format_spec = msg;
    diagnostic->message.m_richloc = richloc;
    diagnostic->richloc = richloc;
!   diagnostic->metadata = nullptr;
    diagnostic->kind = kind;
    diagnostic->option_id = 0;
  }
*************** static const char *const diagnostic_kind
*** 699,709 ****
  #define DEFINE_DIAGNOSTIC_KIND(K, T, C) (C),
  #include "diagnostic.def"
  #undef DEFINE_DIAGNOSTIC_KIND
!   NULL
  };
  
  /* Get a color name for diagnostics of type KIND
!    Result could be NULL.  */
  
  const char *
  diagnostic_get_color_for_kind (diagnostic_t kind)
--- 699,709 ----
  #define DEFINE_DIAGNOSTIC_KIND(K, T, C) (C),
  #include "diagnostic.def"
  #undef DEFINE_DIAGNOSTIC_KIND
!   nullptr
  };
  
  /* Get a color name for diagnostics of type KIND
!    Result could be nullptr.  */
  
  const char *
  diagnostic_get_color_for_kind (diagnostic_t kind)
*************** bt_callback (void *data, uintptr_t pc, c
*** 837,848 ****
  
    /* If we don't have any useful information, don't print
       anything.  */
!   if (filename == NULL && function == NULL)
      return 0;
  
    /* Skip functions in diagnostic.cc.  */
    if (*pcount == 0
!       && filename != NULL
        && strcmp (lbasename (filename), "diagnostic.cc") == 0)
      return 0;
  
--- 837,848 ----
  
    /* If we don't have any useful information, don't print
       anything.  */
!   if (filename == nullptr && function == nullptr)
      return 0;
  
    /* Skip functions in diagnostic.cc.  */
    if (*pcount == 0
!       && filename != nullptr
        && strcmp (lbasename (filename), "diagnostic.cc") == 0)
      return 0;
  
*************** bt_callback (void *data, uintptr_t pc, c
*** 855,867 ****
      }
    ++*pcount;
  
!   char *alc = NULL;
!   if (function != NULL)
      {
        char *str = cplus_demangle_v3 (function,
  				     (DMGL_VERBOSE | DMGL_ANSI
  				      | DMGL_GNU_V3 | DMGL_PARAMS));
!       if (str != NULL)
  	{
  	  alc = str;
  	  function = str;
--- 855,867 ----
      }
    ++*pcount;
  
!   char *alc = nullptr;
!   if (function != nullptr)
      {
        char *str = cplus_demangle_v3 (function,
  				     (DMGL_VERBOSE | DMGL_ANSI
  				      | DMGL_GNU_V3 | DMGL_PARAMS));
!       if (str != nullptr)
  	{
  	  alc = str;
  	  function = str;
*************** bt_callback (void *data, uintptr_t pc, c
*** 873,879 ****
  	  if (strncmp (function, bt_stop[i], len) == 0
  	      && (function[len] == '\0' || function[len] == '('))
  	    {
! 	      if (alc != NULL)
  		free (alc);
  	      /* Returning a non-zero value stops the backtrace.  */
  	      return 1;
--- 873,879 ----
  	  if (strncmp (function, bt_stop[i], len) == 0
  	      && (function[len] == '\0' || function[len] == '('))
  	    {
! 	      if (alc != nullptr)
  		free (alc);
  	      /* Returning a non-zero value stops the backtrace.  */
  	      return 1;
*************** bt_callback (void *data, uintptr_t pc, c
*** 883,893 ****
  
    fprintf (stderr, "0x%lx %s\n\t%s:%d\n",
  	   (unsigned long) pc,
! 	   function == NULL ? "???" : function,
! 	   filename == NULL ? "???" : filename,
  	   lineno);
  
!   if (alc != NULL)
      free (alc);
  
    return 0;
--- 883,893 ----
  
    fprintf (stderr, "0x%lx %s\n\t%s:%d\n",
  	   (unsigned long) pc,
! 	   function == nullptr ? "???" : function,
! 	   filename == nullptr ? "???" : filename,
  	   lineno);
  
!   if (alc != nullptr)
      free (alc);
  
    return 0;
*************** diagnostic_context::action_after_output
*** 973,983 ****
  	    finish ();
  	  }
  
! 	struct backtrace_state *state = NULL;
  	if (diag_kind == DK_ICE)
! 	  state = backtrace_create_state (NULL, 0, bt_err_callback, NULL);
  	int count = 0;
! 	if (state != NULL)
  	  backtrace_full (state, 2, bt_callback, bt_err_callback,
  			  (void *) &count);
  
--- 973,983 ----
  	    finish ();
  	  }
  
! 	struct backtrace_state *state = nullptr;
  	if (diag_kind == DK_ICE)
! 	  state = backtrace_create_state (nullptr, 0, bt_err_callback, nullptr);
  	int count = 0;
! 	if (state != nullptr)
  	  backtrace_full (state, 2, bt_callback, bt_err_callback,
  			  (void *) &count);
  
*************** print_parseable_fixits (file_cache &fc,
*** 1194,1200 ****
    gcc_assert (richloc);
  
    char *saved_prefix = pp_take_prefix (pp);
!   pp_set_prefix (pp, NULL);
  
    for (unsigned i = 0; i < richloc->get_num_fixit_hints (); i++)
      {
--- 1194,1200 ----
    gcc_assert (richloc);
  
    char *saved_prefix = pp_take_prefix (pp);
!   pp_set_prefix (pp, nullptr);
  
    for (unsigned i = 0; i < richloc->get_num_fixit_hints (); i++)
      {
*************** diagnostic_context::report_diagnostic (d
*** 1594,1600 ****
        || diagnostic->kind == DK_ICE
        || diagnostic->kind == DK_ICE_NOBT)
      action_after_output (diagnostic->kind);
!   diagnostic->x_data = NULL;
  
    if (m_edit_context_ptr)
      if (diagnostic->richloc->fixits_can_be_auto_applied_p ())
--- 1594,1600 ----
        || diagnostic->kind == DK_ICE
        || diagnostic->kind == DK_ICE_NOBT)
      action_after_output (diagnostic->kind);
!   diagnostic->x_data = nullptr;
  
    if (m_edit_context_ptr)
      if (diagnostic->richloc->fixits_can_be_auto_applied_p ())
*************** fancy_abort (const char *file, int line,
*** 1793,1801 ****
  
        /* Attempt to print a backtrace.  */
        struct backtrace_state *state
! 	= backtrace_create_state (NULL, 0, bt_err_callback, NULL);
        int count = 0;
!       if (state != NULL)
  	backtrace_full (state, 2, bt_callback, bt_err_callback,
  			(void *) &count);
  
--- 1793,1801 ----
  
        /* Attempt to print a backtrace.  */
        struct backtrace_state *state
! 	= backtrace_create_state (nullptr, 0, bt_err_callback, nullptr);
        int count = 0;
!       if (state != nullptr)
  	backtrace_full (state, 2, bt_callback, bt_err_callback,
  			(void *) &count);
  
*************** diagnostic_output_format_init (diagnosti
*** 1881,1897 ****
        /* The default; do nothing.  */
        break;
  
-     case DIAGNOSTICS_OUTPUT_FORMAT_JSON_STDERR:
-       new_sink = &diagnostic_output_format_init_json_stderr (context,
- 							     json_formatting);
-       break;
- 
-     case DIAGNOSTICS_OUTPUT_FORMAT_JSON_FILE:
-       new_sink = &diagnostic_output_format_init_json_file (context,
- 							   json_formatting,
- 							   base_file_name);
-       break;
- 
      case DIAGNOSTICS_OUTPUT_FORMAT_SARIF_STDERR:
        new_sink = &diagnostic_output_format_init_sarif_stderr (context,
  							      line_table,
--- 1881,1886 ----
*************** diagnostic_output_format_init (diagnosti
*** 1911,1917 ****
  
  /* Initialize this context's m_diagrams based on CHARSET.
     Specifically, make a text_art::theme object for m_diagrams.m_theme,
!    (or NULL for "no diagrams").  */
  
  void
  diagnostic_context::
--- 1900,1906 ----
  
  /* Initialize this context's m_diagrams based on CHARSET.
     Specifically, make a text_art::theme object for m_diagrams.m_theme,
!    (or nullptr for "no diagrams").  */
  
  void
  diagnostic_context::
*************** test_print_parseable_fixits_insert ()
*** 2236,2242 ****
  
    linemap_add (line_table, LC_ENTER, false, "test.c", 0);
    linemap_line_start (line_table, 5, 100);
!   linemap_add (line_table, LC_LEAVE, false, NULL, 0);
    location_t where = linemap_position_for_column (line_table, 10);
    richloc.add_fixit_insert_before (where, "added content");
  
--- 2225,2231 ----
  
    linemap_add (line_table, LC_ENTER, false, "test.c", 0);
    linemap_line_start (line_table, 5, 100);
!   linemap_add (line_table, LC_LEAVE, false, nullptr, 0);
    location_t where = linemap_position_for_column (line_table, 10);
    richloc.add_fixit_insert_before (where, "added content");
  
*************** test_print_parseable_fixits_remove ()
*** 2257,2263 ****
  
    linemap_add (line_table, LC_ENTER, false, "test.c", 0);
    linemap_line_start (line_table, 5, 100);
!   linemap_add (line_table, LC_LEAVE, false, NULL, 0);
    source_range where;
    where.m_start = linemap_position_for_column (line_table, 10);
    where.m_finish = linemap_position_for_column (line_table, 20);
--- 2246,2252 ----
  
    linemap_add (line_table, LC_ENTER, false, "test.c", 0);
    linemap_line_start (line_table, 5, 100);
!   linemap_add (line_table, LC_LEAVE, false, nullptr, 0);
    source_range where;
    where.m_start = linemap_position_for_column (line_table, 10);
    where.m_finish = linemap_position_for_column (line_table, 20);
*************** test_print_parseable_fixits_replace ()
*** 2280,2286 ****
  
    linemap_add (line_table, LC_ENTER, false, "test.c", 0);
    linemap_line_start (line_table, 5, 100);
!   linemap_add (line_table, LC_LEAVE, false, NULL, 0);
    source_range where;
    where.m_start = linemap_position_for_column (line_table, 10);
    where.m_finish = linemap_position_for_column (line_table, 20);
--- 2269,2275 ----
  
    linemap_add (line_table, LC_ENTER, false, "test.c", 0);
    linemap_line_start (line_table, 5, 100);
!   linemap_add (line_table, LC_LEAVE, false, nullptr, 0);
    source_range where;
    where.m_start = linemap_position_for_column (line_table, 10);
    where.m_finish = linemap_position_for_column (line_table, 20);
*************** test_print_parseable_fixits_bytes_vs_dis
*** 2311,2317 ****
  
    linemap_add (line_table, LC_ENTER, false, fname, 0);
    linemap_line_start (line_table, 1, 100);
!   linemap_add (line_table, LC_LEAVE, false, NULL, 0);
    source_range where;
    where.m_start = linemap_position_for_column (line_table, 12);
    where.m_finish = linemap_position_for_column (line_table, 17);
--- 2300,2306 ----
  
    linemap_add (line_table, LC_ENTER, false, fname, 0);
    linemap_line_start (line_table, 1, 100);
!   linemap_add (line_table, LC_LEAVE, false, nullptr, 0);
    source_range where;
    where.m_start = linemap_position_for_column (line_table, 12);
    where.m_finish = linemap_position_for_column (line_table, 17);
*************** assert_location_text (const char *expect
*** 2369,2375 ****
    xloc.file = filename;
    xloc.line = line;
    xloc.column = column;
!   xloc.data = NULL;
    xloc.sysp = false;
  
    diagnostic_column_policy column_policy (dc);
--- 2358,2364 ----
    xloc.file = filename;
    xloc.line = line;
    xloc.column = column;
!   xloc.data = nullptr;
    xloc.sysp = false;
  
    diagnostic_column_policy column_policy (dc);
*************** test_get_location_text ()
*** 2385,2391 ****
  {
    const char *old_progname = progname;
    progname = "PROGNAME";
!   assert_location_text ("PROGNAME:", NULL, 0, 0, true);
    char *built_in_colon = concat (special_fname_builtin (), ":", (char *) 0);
    assert_location_text (built_in_colon, special_fname_builtin (),
  			42, 10, true);
--- 2374,2380 ----
  {
    const char *old_progname = progname;
    progname = "PROGNAME";
!   assert_location_text ("PROGNAME:", nullptr, 0, 0, true);
    char *built_in_colon = concat (special_fname_builtin (), ":", (char *) 0);
    assert_location_text (built_in_colon, special_fname_builtin (),
  			42, 10, true);
diff -Nrcpad gcc-16-20250629/gcc/diagnostic.h gcc-16-20250706/gcc/diagnostic.h
*** gcc-16-20250629/gcc/diagnostic.h	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/diagnostic.h	Sun Jul  6 22:32:11 2025
*************** enum diagnostics_output_format
*** 71,82 ****
    /* The default: textual output.  */
    DIAGNOSTICS_OUTPUT_FORMAT_TEXT,
  
-   /* JSON-based output, to stderr.  */
-   DIAGNOSTICS_OUTPUT_FORMAT_JSON_STDERR,
- 
-   /* JSON-based output, to a file.  */
-   DIAGNOSTICS_OUTPUT_FORMAT_JSON_FILE,
- 
    /* SARIF-based output, as JSON to stderr.  */
    DIAGNOSTICS_OUTPUT_FORMAT_SARIF_STDERR,
  
--- 71,76 ----
diff -Nrcpad gcc-16-20250629/gcc/doc/avr-mmcu.texi gcc-16-20250706/gcc/doc/avr-mmcu.texi
*** gcc-16-20250629/gcc/doc/avr-mmcu.texi	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/doc/avr-mmcu.texi	Sun Jul  6 22:32:11 2025
***************
*** 50,64 ****
  
  @item @anchor{avrxmega2}avrxmega2
  ``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega8e5}, @code{atxmega16a4}, @code{atxmega16a4u}, @code{atxmega16c4}, @code{atxmega16d4}, @code{atxmega16e5}, @code{atxmega32a4}, @code{atxmega32a4u}, @code{atxmega32c3}, @code{atxmega32c4}, @code{atxmega32d3}, @code{atxmega32d4}, @code{atxmega32e5}, @code{avr64da28}, @code{avr64da32}, @code{avr64da48}, @code{avr64da64}, @code{avr64db28}, @code{avr64db32}, @code{avr64db48}, @code{avr64db64}, @code{avr64dd14}, @code{avr64dd20}, @code{avr64dd28}, @code{avr64dd32}, @code{avr64du28}, @code{avr64du32}, @code{avr64ea28}, @code{avr64ea32}, @code{avr64ea48}, @code{avr64sd28}, @code{avr64sd32}, @code{avr64sd48}.
  
  @item @anchor{avrxmega3}avrxmega3
  ``XMEGA'' devices with up to 64@tie{}KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! @*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr32da28}, @code{avr32da32}, @code{avr32da48}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}, @code{avr32sd20}, @code{avr32sd28}, @code{avr32sd32}.
  
  @item @anchor{avrxmega4}avrxmega4
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64a3u}, @code{atxmega64a4u}, @code{atxmega64b1}, @code{atxmega64b3}, @code{atxmega64c3}, @code{atxmega64d3}, @code{atxmega64d4}, @code{avr128da28}, @code{avr128da32}, @code{avr128da48}, @code{avr128da64}, @code{avr128db28}, @code{avr128db32}, @code{avr128db48}, @code{avr128db64}.
  
  @item @anchor{avrxmega5}avrxmega5
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory and more than 64@tie{}KiB of RAM.
--- 50,64 ----
  
  @item @anchor{avrxmega2}avrxmega2
  ``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega8e5}, @code{atxmega16a4}, @code{atxmega16a4u}, @code{atxmega16c4}, @code{atxmega16d4}, @code{atxmega16e5}, @code{atxmega32a4}, @code{atxmega32a4u}, @code{atxmega32c3}, @code{atxmega32c4}, @code{atxmega32d3}, @code{atxmega32d4}, @code{atxmega32e5}, @code{avr64da28}, @code{avr64da28s}, @code{avr64da32}, @code{avr64da32s}, @code{avr64da48}, @code{avr64da48s}, @code{avr64da64}, @code{avr64da64s}, @code{avr64db28}, @code{avr64db32}, @code{avr64db48}, @code{avr64db64}, @code{avr64dd14}, @code{avr64dd20}, @code{avr64dd28}, @code{avr64dd32}, @code{avr64du28}, @code{avr64du32}, @code{avr64ea28}, @code{avr64ea32}, @code{avr64ea48}, @code{avr64sd28}, @code{avr64sd32}, @code{avr64sd48}.
  
  @item @anchor{avrxmega3}avrxmega3
  ``XMEGA'' devices with up to 64@tie{}KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! @*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr32da28}, @code{avr32da28s}, @code{avr32da32}, @code{avr32da32s}, @code{avr32da48}, @code{avr32da48s}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}, @code{avr32sd20}, @code{avr32sd28}, @code{avr32sd32}.
  
  @item @anchor{avrxmega4}avrxmega4
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64a3u}, @code{atxmega64a4u}, @code{atxmega64b1}, @code{atxmega64b3}, @code{atxmega64c3}, @code{atxmega64d3}, @code{atxmega64d4}, @code{avr128da28}, @code{avr128da28s}, @code{avr128da32}, @code{avr128da32s}, @code{avr128da48}, @code{avr128da48s}, @code{avr128da64}, @code{avr128da64s}, @code{avr128db28}, @code{avr128db32}, @code{avr128db48}, @code{avr128db64}.
  
  @item @anchor{avrxmega5}avrxmega5
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory and more than 64@tie{}KiB of RAM.
diff -Nrcpad gcc-16-20250629/gcc/doc/extend.texi gcc-16-20250706/gcc/doc/extend.texi
*** gcc-16-20250629/gcc/doc/extend.texi	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/doc/extend.texi	Sun Jul  6 22:32:11 2025
*************** my_memcpy (void *dest, const void *src,
*** 2887,2899 ****
  @cindex @code{nonnull_if_nonzero} function attribute
  @item nonnull_if_nonzero
  @itemx nonnull_if_nonzero (@var{arg-index}, @var{arg2-index})
  The @code{nonnull_if_nonzero} attribute is a conditional version of the
! @code{nonnull} attribute.  It has two arguments, the first argument
  shall be argument index of a pointer argument which must be in some
  cases non-null and the second argument shall be argument index of an
  integral argument (other than boolean).  If the integral argument is
  zero, the pointer argument can be null, if it is non-zero, the pointer
! argument must not be null.
  
  @smallexample
  extern void *
--- 2887,2904 ----
  @cindex @code{nonnull_if_nonzero} function attribute
  @item nonnull_if_nonzero
  @itemx nonnull_if_nonzero (@var{arg-index}, @var{arg2-index})
+ @itemx nonnull_if_nonzero (@var{arg-index}, @var{arg2-index}, @var{arg3-index})
  The @code{nonnull_if_nonzero} attribute is a conditional version of the
! @code{nonnull} attribute.  It has two or three arguments, the first argument
  shall be argument index of a pointer argument which must be in some
  cases non-null and the second argument shall be argument index of an
  integral argument (other than boolean).  If the integral argument is
  zero, the pointer argument can be null, if it is non-zero, the pointer
! argument must not be null.  If three arguments are provided, the third
! argument shall be argument index of another integral argument (other than
! boolean) and the pointer argument can be null if either of the integral
! arguments are zero and if both are non-zero, the pointer argument must not
! be null.
  
  @smallexample
  extern void *
*************** extern void *
*** 2903,2914 ****
  my_memcpy2 (void *dest, const void *src, size_t len)
          __attribute__((nonnull_if_nonzero (1, 3),
                         nonnull_if_nonzero (2, 3)));
  @end smallexample
  
  With these declarations, it is invalid to call
  @code{my_memcpy (NULL, NULL, 0);} or to
! call @code{my_memcpy2 (NULL, NULL, 4);} but it is valid
! to call @code{my_memcpy2 (NULL, NULL, 0);}.  This attribute should be
  used on declarations which have e.g.@: an exception for zero sizes,
  in which case null may be passed.
  
--- 2908,2928 ----
  my_memcpy2 (void *dest, const void *src, size_t len)
          __attribute__((nonnull_if_nonzero (1, 3),
                         nonnull_if_nonzero (2, 3)));
+ extern size_t
+ my_fread (void *buf, size_t size, size_t count, FILE *stream)
+         __attribute__((nonnull (4),
+                        nonnull_if_nonzero (1, 2, 3)));
  @end smallexample
  
  With these declarations, it is invalid to call
  @code{my_memcpy (NULL, NULL, 0);} or to
! call @code{my_memcpy2 (NULL, NULL, 4);} or to call
! @code{my_fread(@var{buf}, 0, 0, NULL);} or to call
! @code{my_fread(NULL, 1, 1, @var{stream});} but it is valid
! to call @code{my_memcpy2 (NULL, NULL, 0);} or
! @code{my_fread(NULL, 0, 0, @var{stream});} or
! @code{my_fread(NULL, 0, 1, @var{stream});} or
! @code{my_fread(NULL, 1, 0, @var{stream});}.  This attribute should be
  used on declarations which have e.g.@: an exception for zero sizes,
  in which case null may be passed.
  
*************** pass arguments, unless it takes a variab
*** 6124,6133 ****
  @cindex @code{no_callee_saved_registers} function attribute, x86
  @item no_callee_saved_registers
  Use this attribute to indicate that the specified function has no
! callee-saved registers. That is, all registers can be used as scratch
! registers. For example, this attribute can be used for a function
! called from the interrupt handler assembly stub which will preserve
! all registers and return from interrupt.
  
  @cindex @code{preserve_none} function attribute, x86
  @item preserve_none
--- 6138,6148 ----
  @cindex @code{no_callee_saved_registers} function attribute, x86
  @item no_callee_saved_registers
  Use this attribute to indicate that the specified function has no
! callee-saved registers. That is, all registers, except for stack and
! frame pointers, can be used as scratch registers. For example, this
! attribute can be used for a function called from the interrupt handler
! assembly stub which will preserve all registers and return from
! interrupt.
  
  @cindex @code{preserve_none} function attribute, x86
  @item preserve_none
*************** The @code{aligned} attribute can also be
*** 7123,7131 ****
  @cindex @code{counted_by} variable attribute
  @item counted_by (@var{count})
  The @code{counted_by} attribute may be attached to the C99 flexible array
! member of a structure.  It indicates that the number of the elements of the
! array is given by the field "@var{count}" in the same structure as the
! flexible array member.
  
  This attribute is available only in C for now.
  In C++ this attribute is ignored.
--- 7138,7148 ----
  @cindex @code{counted_by} variable attribute
  @item counted_by (@var{count})
  The @code{counted_by} attribute may be attached to the C99 flexible array
! member, or a pointer field of a structure.  It indicates that the number
! of the elements of the array that is held by the flexible array member
! field, or is pointed to by the pointer field, is given by the field
! "@var{count}" in the same structure as the flexible array member or the
! pointer field.
  
  This attribute is available only in C for now.
  In C++ this attribute is ignored.
*************** struct P @{
*** 7146,7153 ****
  @end smallexample
  
  @noindent
! specifies that the @code{array} is a flexible array member whose number of
! elements is given by the field @code{count} in the same structure.
  
  The field that represents the number of the elements should have an
  integer type.  Otherwise, the compiler reports an error and ignores
--- 7163,7184 ----
  @end smallexample
  
  @noindent
! specifies that the @code{array} is a flexible array member whose number
! of elements is given by the field @code{count} in the same structure.
! 
! @smallexample
! struct PP @{
!   size_t count2;
!   char other1;
!   char *array2 __attribute__ ((counted_by (count2)));
!   int other2;
! @} *pp;
! @end smallexample
! 
! @noindent
! specifies that the @code{array2} is an array that is pointed by the
! pointer field, and its number of elements is given by the field
! @code{count2} in the same structure.
  
  The field that represents the number of the elements should have an
  integer type.  Otherwise, the compiler reports an error and ignores
*************** the attribute.
*** 7156,7161 ****
--- 7187,7198 ----
  When the field that represents the number of the elements is assigned a
  negative integer value, the compiler treats the value as zero.
  
+ The @code{counted_by} attribute is not allowed for a pointer to @code{void},
+ a pointer to function, or a pointer to a structure or union that includes
+ a flexible array member.  However, it is allowed for a pointer to
+ non-void incomplete structure or union types, as long as the type could
+ be completed before the first reference to the pointer.
+ 
  An explicit @code{counted_by} annotation defines a relationship between
  two objects, @code{p->array} and @code{p->count}, and there are the
  following requirements on the relationship between this pair:
*************** available all the time.  This relationsh
*** 7171,7176 ****
--- 7208,7220 ----
  these related objects are updated during the program.
  @end itemize
  
+ In addition to the above requirements, there is one more requirement
+ between this pair if and only if @code{p->array} is an array that is
+ pointed by the pointer field:
+ 
+ @code{p->array} and @code{p->count} can only be changed by changing the
+ whole structure at the same time.
+ 
  It's the programmer's responsibility to make sure the above requirements to
  be kept all the time.  Otherwise the compiler reports warnings and
  the results of the array bound sanitizer and the
*************** In the above, @code{ref1} uses @code{val
*** 7192,7197 ****
--- 7236,7243 ----
  @code{p->array}, and @code{ref2} uses @code{val2} as the number of elements
  in @code{p->array}.
  
+ Note, however, the above feature is not valid for the pointer field.
+ 
  @cindex @code{alloc_size} variable attribute
  @item alloc_size (@var{position})
  @itemx alloc_size (@var{position-1}, @var{position-2})
diff -Nrcpad gcc-16-20250629/gcc/doc/invoke.texi gcc-16-20250706/gcc/doc/invoke.texi
*** gcc-16-20250629/gcc/doc/invoke.texi	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/doc/invoke.texi	Sun Jul  6 22:32:11 2025
*************** Objective-C and Objective-C++ Dialects}.
*** 312,318 ****
  -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}
  -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}
  -fdiagnostics-urls=@r{[}auto@r{|}never@r{|}always@r{]}
! -fdiagnostics-format=@r{[}text@r{|}sarif-stderr@r{|}sarif-file@r{|}json@r{|}json-stderr@r{|}json-file@r{]}
  -fdiagnostics-add-output=@var{DIAGNOSTICS-OUTPUT-SPEC}
  -fdiagnostics-set-output=@var{DIAGNOSTICS-OUTPUT-SPEC}
  -fno-diagnostics-json-formatting
--- 312,318 ----
  -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}
  -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}
  -fdiagnostics-urls=@r{[}auto@r{|}never@r{|}always@r{]}
! -fdiagnostics-format=@r{[}text@r{|}sarif-stderr@r{|}sarif-file@r{]}
  -fdiagnostics-add-output=@var{DIAGNOSTICS-OUTPUT-SPEC}
  -fdiagnostics-set-output=@var{DIAGNOSTICS-OUTPUT-SPEC}
  -fno-diagnostics-json-formatting
*************** Objective-C and Objective-C++ Dialects}.
*** 340,346 ****
  -w  -Wextra  -Wall  -Wabi=@var{n}
  -Waddress  -Wno-address-of-packed-member  -Waggregate-return
  -Walloc-size  -Walloc-size-larger-than=@var{byte-size}  -Walloc-zero
! -Walloca  -Walloca-larger-than=@var{byte-size}
  -Wno-aggressive-loop-optimizations
  -Warith-conversion
  -Warray-bounds  -Warray-bounds=@var{n}  -Warray-compare
--- 340,346 ----
  -w  -Wextra  -Wall  -Wabi=@var{n}
  -Waddress  -Wno-address-of-packed-member  -Waggregate-return
  -Walloc-size  -Walloc-size-larger-than=@var{byte-size}  -Walloc-zero
! -Walloca  -Walloca-larger-than=@var{byte-size}  -Wauto-profile
  -Wno-aggressive-loop-optimizations
  -Warith-conversion
  -Warray-bounds  -Warray-bounds=@var{n}  -Warray-compare
*************** column numbers, such as @command{dejagnu
*** 5958,5965 ****
  @opindex fdiagnostics-column-unit
  @item -fdiagnostics-column-unit=@var{UNIT}
  Select the units for the column number.  This affects traditional diagnostics
! (in the absence of @option{-fno-show-column}), as well as JSON format
! diagnostics if requested.
  
  The default @var{UNIT}, @samp{display}, considers the number of display
  columns occupied by each character.  This may be larger than the number
--- 5958,5964 ----
  @opindex fdiagnostics-column-unit
  @item -fdiagnostics-column-unit=@var{UNIT}
  Select the units for the column number.  This affects traditional diagnostics
! (in the absence of @option{-fno-show-column}).
  
  The default @var{UNIT}, @samp{display}, considers the number of display
  columns occupied by each character.  This may be larger than the number
*************** is set to @samp{C}, in which case the de
*** 6035,6042 ****
  @opindex fdiagnostics-format
  @item -fdiagnostics-format=@var{FORMAT}
  Select a different format for printing diagnostics.
! @var{FORMAT} is @samp{text}, @samp{sarif-stderr}, @samp{sarif-file},
! @samp{json}, @samp{json-stderr}, or @samp{json-file}.
  
  Using this option replaces any additional ``output sinks'' added by
  @option{-fdiagnostics-add-output=}, or that set by
--- 6034,6040 ----
  @opindex fdiagnostics-format
  @item -fdiagnostics-format=@var{FORMAT}
  Select a different format for printing diagnostics.
! @var{FORMAT} is @samp{text}, @samp{sarif-stderr} or @samp{sarif-file}.
  
  Using this option replaces any additional ``output sinks'' added by
  @option{-fdiagnostics-add-output=}, or that set by
*************** The @samp{sarif-stderr} and @samp{sarif-
*** 6048,6061 ****
  diagnostics in SARIF Version 2.1.0 format, either to stderr, or to a file
  named @file{@var{source}.sarif}, respectively.
  
- The various @samp{json}, @samp{json-stderr}, and @samp{json-file} values
- are deprecated and refer to a legacy JSON-based output format.
- The @samp{json} format is a synonym for @samp{json-stderr}.
- The @samp{json-stderr} and @samp{json-file} formats are identical, apart from
- where the JSON is emitted to.  With @samp{json-stderr}, the JSON is emitted
- to stderr, whereas with @samp{json-file} it is written to
- @file{@var{source}.gcc.json}.
- 
  @opindex fdiagnostics-add-output
  @item -fdiagnostics-add-output=@var{DIAGNOSTICS-OUTPUT-SPEC}
  Add an additional ``output sink'' for emitting diagnostics.
--- 6046,6051 ----
*************** replaces all existing output sinks, such
*** 6238,6248 ****
  @opindex fdiagnostics-json-formatting
  @item -fno-diagnostics-json-formatting
  By default, when JSON is emitted for diagnostics (via
! @option{-fdiagnostics-format=sarif-stderr},
! @option{-fdiagnostics-format=sarif-file},
! @option{-fdiagnostics-format=json},
! @option{-fdiagnostics-format=json-stderr},
! @option{-fdiagnostics-format=json-file}),
  GCC will add newlines and indentation to visually emphasize the
  hierarchical structure of the JSON.
  
--- 6228,6235 ----
  @opindex fdiagnostics-json-formatting
  @item -fno-diagnostics-json-formatting
  By default, when JSON is emitted for diagnostics (via
! @option{-fdiagnostics-format=sarif-stderr} or
! @option{-fdiagnostics-format=sarif-file}),
  GCC will add newlines and indentation to visually emphasize the
  hierarchical structure of the JSON.
  
*************** larger.
*** 8728,8733 ****
--- 8715,8725 ----
  @item -Walloca
  This option warns on all uses of @code{alloca} in the source.
  
+ @opindex Wno-auto-profile
+ @opindex Wauto-profile
+ @item -Wauto-profile
+ Output warnings about auto-profile inconsistencies.
+ 
  @opindex Walloca-larger-than=
  @opindex Wno-alloca-larger-than
  @item -Walloca-larger-than=@var{byte-size}
*************** performance of the code.  Permissible va
*** 22185,22191 ****
  The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
  @samp{cortex-a75.cortex-a55}, @samp{cortex-a76.cortex-a55},
! @samp{apple-m1}, @samp{apple-m2}, @samp{apple-m3} specify that GCC
  should tune for a big.LITTLE system.
  
  The value @samp{neoverse-512tvb} specifies that GCC should tune
--- 22177,22183 ----
  The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
  @samp{cortex-a75.cortex-a55}, @samp{cortex-a76.cortex-a55},
! @samp{apple-m1}, @samp{apple-m2}, @samp{apple-m3}, @samp{gb10} specify that GCC
  should tune for a big.LITTLE system.
  
  The value @samp{neoverse-512tvb} specifies that GCC should tune
*************** Enable the FlagM2 flag conversion instru
*** 22474,22479 ****
--- 22466,22474 ----
  Enable the Pointer Authentication Extension.
  @item cssc
  Enable the Common Short Sequence Compression instructions.
+ @item cmpbr
+ Enable the shorter compare and branch instructions, @code{cbb}, @code{cbh} and
+ @code{cb}.
  @item sme
  Enable the Scalable Matrix Extension.  This is only supported when SVE2 is also
  enabled.
diff -Nrcpad gcc-16-20250629/gcc/doc/md.texi gcc-16-20250706/gcc/doc/md.texi
*** gcc-16-20250629/gcc/doc/md.texi	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/doc/md.texi	Sun Jul  6 22:32:11 2025
*************** This pattern is not allowed to @code{FAI
*** 4997,5004 ****
  Like @samp{vec_load_lanes@var{m}@var{n}}, but takes an additional
  mask operand (operand 2) that specifies which elements of the destination
  vectors should be loaded.  Other elements of the destination vectors are
! taken from operand 3, which is an else operand similar to the one in
! @code{maskload}.
  The operation is equivalent to:
  
  @smallexample
--- 4997,5004 ----
  Like @samp{vec_load_lanes@var{m}@var{n}}, but takes an additional
  mask operand (operand 2) that specifies which elements of the destination
  vectors should be loaded.  Other elements of the destination vectors are
! taken from operand 3, which is an else operand in the subvector mode
! @var{n}, similar to the one in @code{maskload}.
  The operation is equivalent to:
  
  @smallexample
diff -Nrcpad gcc-16-20250629/gcc/doc/ux.texi gcc-16-20250706/gcc/doc/ux.texi
*** gcc-16-20250629/gcc/doc/ux.texi	Sun Jun 29 22:32:27 2025
--- gcc-16-20250706/gcc/doc/ux.texi	Sun Jul  6 22:32:11 2025
*************** Use @code{auto_diagnostic_group} when is
*** 407,413 ****
  diagnostics (seen in various examples on this page).  This informs the
  diagnostic subsystem that all diagnostics issued within the lifetime
  of the @code{auto_diagnostic_group} are related.  For example,
! @option{-fdiagnostics-format=json} will treat the first diagnostic
  emitted within the group as a top-level diagnostic, and all subsequent
  diagnostics within the group as its children.  Also, if a warning in the
  group is inhibited at nesting depth D, all subsequent notes at that depth
--- 407,413 ----
  diagnostics (seen in various examples on this page).  This informs the
  diagnostic subsystem that all diagnostics issued within the lifetime
  of the @code{auto_diagnostic_group} are related.  For example,
! @option{-fdiagnostics-add-output=sarif} will treat the first diagnostic
  emitted within the group as a top-level diagnostic, and all subsequent
  diagnostics within the group as its children.  Also, if a warning in the
  group is inhibited at nesting depth D, all subsequent notes at that depth
diff -Nrcpad gcc-16-20250629/gcc/ext-dce.cc gcc-16-20250706/gcc/ext-dce.cc
*** gcc-16-20250629/gcc/ext-dce.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/ext-dce.cc	Sun Jul  6 22:32:11 2025
*************** ext_dce_process_uses (rtx_insn *insn, rt
*** 760,778 ****
  		    y = XEXP (y, 0);
  		  else if (SUBREG_P (y) && SUBREG_BYTE (y).is_constant ())
  		    {
! 		      /* We really want to know the outer code here, ie do we
! 			 have (ANY_EXTEND (SUBREG ...)) as we need to know if
! 			 the extension matches the SUBREG_PROMOTED state.  In
! 			 that case optimizers can turn the extension into a
! 			 simple copy.  Which means that bits outside the
! 			 SUBREG's mode are actually live.
! 
! 			 We don't want to mark those bits live unnecessarily
! 			 as that inhibits extension elimination in important
! 			 cases such as those in Coremark.  So we need that
! 			 outer code.
! 
! 			 But if !TRULY_NOOP_TRUNCATION_MODES_P, the mode
  			 change performed by Y would normally need to be a
  			 TRUNCATE rather than a SUBREG.  It is probably the
  			 guarantee provided by SUBREG_PROMOTED_VAR_P that
--- 760,766 ----
  		    y = XEXP (y, 0);
  		  else if (SUBREG_P (y) && SUBREG_BYTE (y).is_constant ())
  		    {
! 		      /* If !TRULY_NOOP_TRUNCATION_MODES_P, the mode
  			 change performed by Y would normally need to be a
  			 TRUNCATE rather than a SUBREG.  It is probably the
  			 guarantee provided by SUBREG_PROMOTED_VAR_P that
*************** ext_dce_process_uses (rtx_insn *insn, rt
*** 782,794 ****
  			 regardless of the outer code.  See PR 120050.  */
  		      if (!REG_P (SUBREG_REG (y))
  			  || (SUBREG_PROMOTED_VAR_P (y)
! 			      && ((GET_CODE (SET_SRC (x)) == SIGN_EXTEND
! 				   && SUBREG_PROMOTED_SIGNED_P (y))
! 				  || (GET_CODE (SET_SRC (x)) == ZERO_EXTEND
! 				      && SUBREG_PROMOTED_UNSIGNED_P (y))
! 				  || !TRULY_NOOP_TRUNCATION_MODES_P (
! 					GET_MODE (y),
! 					GET_MODE (SUBREG_REG (y))))))
  			break;
  
  		      bit = subreg_lsb (y).to_constant ();
--- 770,778 ----
  			 regardless of the outer code.  See PR 120050.  */
  		      if (!REG_P (SUBREG_REG (y))
  			  || (SUBREG_PROMOTED_VAR_P (y)
! 			      && (!TRULY_NOOP_TRUNCATION_MODES_P (
! 				    GET_MODE (y),
! 				    GET_MODE (SUBREG_REG (y))))))
  			break;
  
  		      bit = subreg_lsb (y).to_constant ();
*************** maybe_clear_subreg_promoted_p (void)
*** 992,997 ****
--- 976,1056 ----
      }
  }
  
+ /* Walk the IL and build the transitive closure of all the REGs tied
+    together by copies where either the source or destination is
+    marked in CHANGED_PSEUDOS.  */
+ 
+ static void
+ expand_changed_pseudos (void)
+ {
+   /* Build a vector of registers related by a copy.  This is meant to
+      speed up the next step by avoiding full IL walks.  */
+   struct copy_pair { rtx first; rtx second; };
+   auto_vec<copy_pair> pairs;
+   for (rtx_insn *insn = get_insns(); insn; insn = NEXT_INSN (insn))
+     {
+       if (!NONDEBUG_INSN_P (insn))
+ 	continue;
+ 
+       rtx pat = PATTERN (insn);
+ 
+       /* Simple copies to a REG from another REG or SUBREG of a REG.  */
+       if (GET_CODE (pat) == SET
+ 	  && REG_P (SET_DEST (pat))
+ 	  && (REG_P (SET_SRC (pat))
+ 	      || (SUBREG_P (SET_SRC (pat))
+ 		  && REG_P (SUBREG_REG (SET_SRC (pat))))))
+ 	{
+ 	  rtx src = (REG_P (SET_SRC (pat))
+ 		     ? SET_SRC (pat)
+ 		     : SUBREG_REG (SET_SRC (pat)));
+ 	  pairs.safe_push ({ SET_DEST (pat), src });
+ 	}
+ 
+       /* Simple copies to a REG from another REG or SUBREG of a REG
+ 	 held inside a PARALLEL.  */
+       if (GET_CODE (pat) == PARALLEL)
+ 	{
+ 	  for (int i = XVECLEN (pat, 0) - 1; i >= 0; i--)
+ 	    {
+ 	      rtx elem = XVECEXP (pat, 0, i);
+ 
+ 	      if (GET_CODE (elem) == SET
+ 		  && REG_P (SET_DEST (elem))
+ 		  && (REG_P (SET_SRC (elem))
+ 		      || (SUBREG_P (SET_SRC (elem))
+ 			  && REG_P (SUBREG_REG (SET_SRC (elem))))))
+ 		{
+ 		  rtx src = (REG_P (SET_SRC (elem))
+ 			     ? SET_SRC (elem)
+ 			     : SUBREG_REG (SET_SRC (elem)));
+ 		  pairs.safe_push ({ SET_DEST (elem), src });
+ 		}
+ 	    }
+ 	  continue;
+ 	}
+     }
+ 
+   /* Now we have a vector with copy pairs.  Iterate over that list
+      updating CHANGED_PSEUDOS as we go.  Eliminate copies from the
+      list as we go as they don't need further processing.  */
+   bool changed = true;
+   while (changed)
+     {
+       changed = false;
+       unsigned int i;
+       copy_pair *p;
+       FOR_EACH_VEC_ELT (pairs, i, p)
+ 	{
+ 	  if (bitmap_bit_p (changed_pseudos, REGNO (p->second))
+ 	      && bitmap_set_bit (changed_pseudos, REGNO (p->first)))
+ 	    {
+ 	      pairs.unordered_remove (i);
+ 	      changed = true;
+ 	    }
+ 	}
+     }
+ }
  
  /* We optimize away sign/zero extensions in this pass and replace
     them with SUBREGs indicating certain bits are don't cares.
*************** maybe_clear_subreg_promoted_p (void)
*** 1004,1009 ****
--- 1063,1081 ----
  static void
  reset_subreg_promoted_p (void)
  {
+   /* This pass eliminates zero/sign extensions on pseudo regs found
+      in CHANGED_PSEUDOS.  Elimination of those extensions changes if
+      the pseudos are known to hold values extended to wider modes
+      via SUBREG_PROMOTED_VAR.  So we wipe the SUBREG_PROMOTED_VAR
+      state on all affected pseudos.
+ 
+      But that is insufficient.  We might have a copy from one REG
+      to another (possibly with the source register wrapped with a
+      SUBREG).  We need to wipe SUBREG_PROMOTED_VAR on the transitive
+      closure of the original CHANGED_PSEUDOS and registers they're
+      connected to via copies.  So expand the set.  */
+   expand_changed_pseudos ();
+     
    /* If we removed an extension, that changed the promoted state
       of the destination of that extension.  Thus we need to go
       find any SUBREGs that reference that pseudo and adjust their
diff -Nrcpad gcc-16-20250629/gcc/fold-const-call.cc gcc-16-20250706/gcc/fold-const-call.cc
*** gcc-16-20250629/gcc/fold-const-call.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/fold-const-call.cc	Sun Jul  6 22:32:11 2025
*************** fold_const_call_ss (real_value *result,
*** 788,793 ****
--- 788,823 ----
      CASE_CFN_TANH_FN:
        return do_mpfr_arg1 (result, mpfr_tanh, arg, format);
  
+ #if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+     CASE_CFN_ACOSPI:
+     CASE_CFN_ACOSPI_FN:
+       return (real_compare (GE_EXPR, arg, &dconstm1)
+ 	      && real_compare (LE_EXPR, arg, &dconst1)
+ 	      && do_mpfr_arg1 (result, mpfr_acospi, arg, format));
+ 
+     CASE_CFN_ASINPI:
+     CASE_CFN_ASINPI_FN:
+       return (real_compare (GE_EXPR, arg, &dconstm1)
+ 	      && real_compare (LE_EXPR, arg, &dconst1)
+ 	      && do_mpfr_arg1 (result, mpfr_asinpi, arg, format));
+ 
+     CASE_CFN_ATANPI:
+     CASE_CFN_ATANPI_FN:
+       return do_mpfr_arg1 (result, mpfr_atanpi, arg, format);
+ 
+     CASE_CFN_COSPI:
+     CASE_CFN_COSPI_FN:
+       return do_mpfr_arg1 (result, mpfr_cospi, arg, format);
+ 
+     CASE_CFN_SINPI:
+     CASE_CFN_SINPI_FN:
+       return do_mpfr_arg1 (result, mpfr_sinpi, arg, format);
+ 
+     CASE_CFN_TANPI:
+     CASE_CFN_TANPI_FN:
+       return do_mpfr_arg1 (result, mpfr_tanpi, arg, format);
+ #endif
+ 
      CASE_CFN_ERF:
      CASE_CFN_ERF_FN:
        return do_mpfr_arg1 (result, mpfr_erf, arg, format);
*************** fold_const_call_sss (real_value *result,
*** 1432,1437 ****
--- 1462,1473 ----
      CASE_CFN_ATAN2_FN:
        return do_mpfr_arg2 (result, mpfr_atan2, arg0, arg1, format);
  
+ #if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+     CASE_CFN_ATAN2PI:
+     CASE_CFN_ATAN2PI_FN:
+       return do_mpfr_arg2 (result, mpfr_atan2pi, arg0, arg1, format);
+ #endif
+ 
      CASE_CFN_FDIM:
      CASE_CFN_FDIM_FN:
        return do_mpfr_arg2 (result, mpfr_dim, arg0, arg1, format);
diff -Nrcpad gcc-16-20250629/gcc/fold-const.cc gcc-16-20250706/gcc/fold-const.cc
*** gcc-16-20250629/gcc/fold-const.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/fold-const.cc	Sun Jul  6 22:32:11 2025
*************** negate_mathfn_p (combined_fn fn)
*** 395,404 ****
--- 395,408 ----
      CASE_CFN_ASIN_FN:
      CASE_CFN_ASINH:
      CASE_CFN_ASINH_FN:
+     CASE_CFN_ASINPI:
+     CASE_CFN_ASINPI_FN:
      CASE_CFN_ATAN:
      CASE_CFN_ATAN_FN:
      CASE_CFN_ATANH:
      CASE_CFN_ATANH_FN:
+     CASE_CFN_ATANPI:
+     CASE_CFN_ATANPI_FN:
      CASE_CFN_CASIN:
      CASE_CFN_CASIN_FN:
      CASE_CFN_CASINH:
*************** negate_mathfn_p (combined_fn fn)
*** 432,441 ****
--- 436,449 ----
      CASE_CFN_SIN_FN:
      CASE_CFN_SINH:
      CASE_CFN_SINH_FN:
+     CASE_CFN_SINPI:
+     CASE_CFN_SINPI_FN:
      CASE_CFN_TAN:
      CASE_CFN_TAN_FN:
      CASE_CFN_TANH:
      CASE_CFN_TANH_FN:
+     CASE_CFN_TANPI:
+     CASE_CFN_TANPI_FN:
      CASE_CFN_TRUNC:
      CASE_CFN_TRUNC_FN:
        return true;
*************** tree_call_nonnegative_warnv_p (tree type
*** 14962,14967 ****
--- 14970,14977 ----
      CASE_CFN_ACOS_FN:
      CASE_CFN_ACOSH:
      CASE_CFN_ACOSH_FN:
+     CASE_CFN_ACOSPI:
+     CASE_CFN_ACOSPI_FN:
      CASE_CFN_CABS:
      CASE_CFN_CABS_FN:
      CASE_CFN_COSH:
*************** tree_call_nonnegative_warnv_p (tree type
*** 15006,15015 ****
--- 15016,15029 ----
  
      CASE_CFN_ASINH:
      CASE_CFN_ASINH_FN:
+     CASE_CFN_ASINPI:
+     CASE_CFN_ASINPI_FN:
      CASE_CFN_ATAN:
      CASE_CFN_ATAN_FN:
      CASE_CFN_ATANH:
      CASE_CFN_ATANH_FN:
+     CASE_CFN_ATANPI:
+     CASE_CFN_ATANPI_FN:
      CASE_CFN_CBRT:
      CASE_CFN_CBRT_FN:
      CASE_CFN_CEIL:
*************** bool
*** 15210,15216 ****
  tree_expr_nonnegative_warnv_p (tree t, bool *strict_overflow_p, int depth)
  {
    enum tree_code code;
!   if (t == error_mark_node)
      return false;
  
    code = TREE_CODE (t);
--- 15224,15230 ----
  tree_expr_nonnegative_warnv_p (tree t, bool *strict_overflow_p, int depth)
  {
    enum tree_code code;
!   if (error_operand_p (t))
      return false;
  
    code = TREE_CODE (t);
diff -Nrcpad gcc-16-20250629/gcc/fortran/ChangeLog gcc-16-20250706/gcc/fortran/ChangeLog
*** gcc-16-20250629/gcc/fortran/ChangeLog	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/fortran/ChangeLog	Sun Jul  6 22:32:11 2025
***************
*** 1,3 ****
--- 1,36 ----
+ 2025-07-04  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* io.cc (format_asterisk): Add a brace around static initialization
+ 	location part of the field locus.
+ 
+ 2025-07-03  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120843
+ 	* resolve.cc (resolve_operator): Remove conformability check,
+ 	because it is not in the standard.
+ 
+ 2025-07-01  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	* coarray.cc (check_add_new_component): Treat pure and elemental
+ 	intrinsic functions the same as non-intrinsic ones.
+ 	(create_caf_add_data_parameter_type): Fix front-end memleaks.
+ 	* trans-intrinsic.cc (conv_caf_func_index): Likewise.
+ 
+ 2025-07-01  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120847
+ 	* coarray.cc (check_add_new_comp_handle_array): Make the count
+ 	of components static to be able to create more than one.  Create
+ 	an array component only for array expressions.
+ 
+ 2025-07-01  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120843
+ 	* resolve.cc (resolve_operator): Report inconsistent coranks
+ 	only when not referencing this_image.
+ 	(gfc_op_rank_conformable): Treat coranks as inconformable only
+ 	when a coindex other then implicit this_image is used.
+ 
  2025-06-27  Harald Anlauf  <anlauf@gmx.de>
  
  	PR fortran/120784
diff -Nrcpad gcc-16-20250629/gcc/fortran/coarray.cc gcc-16-20250706/gcc/fortran/coarray.cc
*** gcc-16-20250629/gcc/fortran/coarray.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/fortran/coarray.cc	Sun Jul  6 22:32:11 2025
*************** check_add_new_comp_handle_array (gfc_exp
*** 503,509 ****
  				 gfc_symbol *add_data)
  {
    gfc_component *comp;
!   int cnt = -1;
    gfc_symtree *caller_image;
    gfc_code *pre_code = caf_accessor_prepend;
    bool static_array_or_scalar = true;
--- 503,509 ----
  				 gfc_symbol *add_data)
  {
    gfc_component *comp;
!   static int cnt = -1;
    gfc_symtree *caller_image;
    gfc_code *pre_code = caf_accessor_prepend;
    bool static_array_or_scalar = true;
*************** check_add_new_comp_handle_array (gfc_exp
*** 566,572 ****
    else
      {
        comp->initializer = gfc_copy_expr (e);
!       if (e_attr.dimension)
  	{
  	  comp->attr.dimension = 1;
  	  comp->as = get_arrayspec_from_expr (e);
--- 566,572 ----
    else
      {
        comp->initializer = gfc_copy_expr (e);
!       if (e_attr.dimension && e->rank)
  	{
  	  comp->attr.dimension = 1;
  	  comp->as = get_arrayspec_from_expr (e);
*************** check_add_new_component (gfc_symbol *typ
*** 697,703 ****
  	  break;
  	case EXPR_FUNCTION:
  	  if (!e->symtree->n.sym->attr.pure
! 	      && !e->symtree->n.sym->attr.elemental)
  	    /* Treat non-pure/non-elemental functions.  */
  	    check_add_new_comp_handle_array (e, type, add_data);
  	  else
--- 697,706 ----
  	  break;
  	case EXPR_FUNCTION:
  	  if (!e->symtree->n.sym->attr.pure
! 	      && !e->symtree->n.sym->attr.elemental
! 	      && !(e->value.function.isym
! 		   && (e->value.function.isym->pure
! 		       || e->value.function.isym->elemental)))
  	    /* Treat non-pure/non-elemental functions.  */
  	    check_add_new_comp_handle_array (e, type, add_data);
  	  else
*************** create_caf_add_data_parameter_type (gfc_
*** 743,749 ****
    add_data->as->lower[0]
      = gfc_get_constant_expr (BT_INTEGER, gfc_default_integer_kind,
  			     &expr->where);
-   mpz_init (add_data->as->lower[0]->value.integer);
    mpz_set_si (add_data->as->lower[0]->value.integer, 1);
  
    for (gfc_ref *ref = expr->ref; ref; ref = ref->next)
--- 746,751 ----
*************** create_caf_add_data_parameter_type (gfc_
*** 763,768 ****
--- 765,771 ----
    type->declared_at = expr->where;
    gfc_set_sym_referenced (type);
    gfc_commit_symbol (type);
+   free (name);
    return type;
  }
  
diff -Nrcpad gcc-16-20250629/gcc/fortran/io.cc gcc-16-20250706/gcc/fortran/io.cc
*** gcc-16-20250629/gcc/fortran/io.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/fortran/io.cc	Sun Jul  6 22:32:11 2025
*************** along with GCC; see the file COPYING3.
*** 29,35 ****
  
  gfc_st_label
  format_asterisk = {0, NULL, NULL, -1, ST_LABEL_FORMAT, ST_LABEL_FORMAT, NULL,
! 		   0, {NULL, NULL}, NULL, 0};
  
  typedef struct
  {
--- 29,35 ----
  
  gfc_st_label
  format_asterisk = {0, NULL, NULL, -1, ST_LABEL_FORMAT, ST_LABEL_FORMAT, NULL,
! 		   0, {NULL, {NULL}}, NULL, 0};
  
  typedef struct
  {
diff -Nrcpad gcc-16-20250629/gcc/fortran/resolve.cc gcc-16-20250706/gcc/fortran/resolve.cc
*** gcc-16-20250629/gcc/fortran/resolve.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/fortran/resolve.cc	Sun Jul  6 22:32:11 2025
*************** resolve_operator (gfc_expr *e)
*** 4807,4840 ****
  	      return false;
  	    }
  	}
- 
-       /* coranks have to be equal or one has to be zero to be combinable.  */
-       if (op1->corank == op2->corank || (op1->corank != 0 && op2->corank == 0))
- 	{
- 	  e->corank = op1->corank;
- 	  /* Only do this, when regular array has not set a shape yet.  */
- 	  if (e->shape == NULL)
- 	    {
- 	      if (op1->corank != 0)
- 		{
- 		  e->shape = gfc_copy_shape (op1->shape, op1->corank);
- 		}
- 	    }
- 	}
-       else if (op1->corank == 0 && op2->corank != 0)
- 	{
- 	  e->corank = op2->corank;
- 	  /* Only do this, when regular array has not set a shape yet.  */
- 	  if (e->shape == NULL)
- 	    e->shape = gfc_copy_shape (op2->shape, op2->corank);
- 	}
-       else
- 	{
- 	  gfc_error ("Inconsistent coranks for operator at %L and %L",
- 		     &op1->where, &op2->where);
- 	  return false;
- 	}
- 
        break;
  
      case INTRINSIC_PARENTHESES:
--- 4807,4812 ----
*************** gfc_op_rank_conformable (gfc_expr *op1,
*** 6070,6077 ****
      gfc_expression_rank (op2);
  
    return (op1->rank == 0 || op2->rank == 0 || op1->rank == op2->rank)
! 	 && (op1->corank == 0 || op2->corank == 0
! 	     || op1->corank == op2->corank);
  }
  
  /* Resolve a variable expression.  */
--- 6042,6049 ----
      gfc_expression_rank (op2);
  
    return (op1->rank == 0 || op2->rank == 0 || op1->rank == op2->rank)
! 	 && (op1->corank == 0 || op2->corank == 0 || op1->corank == op2->corank
! 	     || (!gfc_is_coindexed (op1) && !gfc_is_coindexed (op2)));
  }
  
  /* Resolve a variable expression.  */
diff -Nrcpad gcc-16-20250629/gcc/fortran/trans-intrinsic.cc gcc-16-20250706/gcc/fortran/trans-intrinsic.cc
*** gcc-16-20250629/gcc/fortran/trans-intrinsic.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/fortran/trans-intrinsic.cc	Sun Jul  6 22:32:11 2025
*************** conv_caf_func_index (stmtblock_t *block,
*** 1052,1058 ****
    index_st->n.sym->value
      = gfc_get_constant_expr (BT_INTEGER, gfc_default_integer_kind,
  			     &gfc_current_locus);
!   mpz_init_set_si (index_st->n.sym->value->value.integer, -1);
    index_st->n.sym->ts.type = BT_INTEGER;
    index_st->n.sym->ts.kind = gfc_default_integer_kind;
    gfc_set_sym_referenced (index_st->n.sym);
--- 1052,1058 ----
    index_st->n.sym->value
      = gfc_get_constant_expr (BT_INTEGER, gfc_default_integer_kind,
  			     &gfc_current_locus);
!   mpz_set_si (index_st->n.sym->value->value.integer, -1);
    index_st->n.sym->ts.type = BT_INTEGER;
    index_st->n.sym->ts.kind = gfc_default_integer_kind;
    gfc_set_sym_referenced (index_st->n.sym);
diff -Nrcpad gcc-16-20250629/gcc/gcov-io.h gcc-16-20250706/gcc/gcov-io.h
*** gcc-16-20250629/gcc/gcov-io.h	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/gcov-io.h	Sun Jul  6 22:32:11 2025
*************** struct gcov_summary
*** 349,354 ****
--- 349,359 ----
  {
    gcov_unsigned_t runs;		/* Number of program runs.  */
    gcov_type sum_max;    	/* Sum of individual run max values.  */
+   gcov_type cutoff;		/* Values smaller than this value are not
+ 				   reliable (0 may mean non-zero).
+ 				   For read profile cutoff is typically 1
+ 				   however when we scale up or use auto-fdo
+ 				   it may become bigger value.  */
  };
  
  #if !defined(inhibit_libc)
diff -Nrcpad gcc-16-20250629/gcc/gimple-range-infer.cc gcc-16-20250706/gcc/gimple-range-infer.cc
*** gcc-16-20250629/gcc/gimple-range-infer.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/gimple-range-infer.cc	Sun Jul  6 22:32:11 2025
*************** gimple_infer_range::gimple_infer_range (
*** 197,219 ****
  	    unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	    unsigned int idx2
  	      = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
  	    if (idx < gimple_call_num_args (s)
! 		&& idx2 < gimple_call_num_args (s))
  	      {
  		tree arg = gimple_call_arg (s, idx);
  		tree arg2 = gimple_call_arg (s, idx2);
  		if (!POINTER_TYPE_P (TREE_TYPE (arg))
  		    || !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
! 		    || integer_zerop (arg2))
  		  continue;
! 		if (integer_nonzerop (arg2))
  		  add_nonzero (arg);
  		else
  		  {
  		    value_range r (TREE_TYPE (arg2));
  		    if (q->range_of_expr (r, arg2, s)
  			&& !r.contains_p (build_zero_cst (TREE_TYPE (arg2))))
! 		      add_nonzero (arg);
  		  }
  	      }
  	  }
--- 197,237 ----
  	    unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	    unsigned int idx2
  	      = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
+ 	    unsigned int idx3 = idx2;
+ 	    if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
+ 	      idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
  	    if (idx < gimple_call_num_args (s)
! 		&& idx2 < gimple_call_num_args (s)
! 		&& idx3 < gimple_call_num_args (s))
  	      {
  		tree arg = gimple_call_arg (s, idx);
  		tree arg2 = gimple_call_arg (s, idx2);
+ 		tree arg3 = gimple_call_arg (s, idx3);
  		if (!POINTER_TYPE_P (TREE_TYPE (arg))
  		    || !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
! 		    || !INTEGRAL_TYPE_P (TREE_TYPE (arg3))
! 		    || integer_zerop (arg2)
! 		    || integer_zerop (arg3))
  		  continue;
! 		if (integer_nonzerop (arg2) && integer_nonzerop (arg3))
  		  add_nonzero (arg);
  		else
  		  {
  		    value_range r (TREE_TYPE (arg2));
  		    if (q->range_of_expr (r, arg2, s)
  			&& !r.contains_p (build_zero_cst (TREE_TYPE (arg2))))
! 		      {
! 			if (idx2 == idx3)
! 			  add_nonzero (arg);
! 			else
! 			  {
! 			    value_range r2 (TREE_TYPE (arg3));
! 			    tree zero3 = build_zero_cst (TREE_TYPE (arg3));
! 			    if (q->range_of_expr (r2, arg3, s)
! 				&& !r2.contains_p (zero3))
! 			      add_nonzero (arg);
! 			  }
! 		      }
  		  }
  	      }
  	  }
diff -Nrcpad gcc-16-20250629/gcc/gimple.cc gcc-16-20250706/gcc/gimple.cc
*** gcc-16-20250629/gcc/gimple.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/gimple.cc	Sun Jul  6 22:32:11 2025
*************** infer_nonnull_range_by_dereference (gimp
*** 3154,3169 ****
  }
  
  /* Return true if OP can be inferred to be a non-NULL after STMT
!    executes by using attributes.  If OP2 is non-NULL and nonnull_if_nonzero
!    is the only attribute implying OP being non-NULL and the corresponding
!    argument isn't non-zero INTEGER_CST, set *OP2 to the corresponding
!    argument and return true (in that case returning true doesn't mean
!    OP can be unconditionally inferred to be non-NULL, but conditionally).  */
  bool
! infer_nonnull_range_by_attribute (gimple *stmt, tree op, tree *op2)
  {
    if (op2)
!     *op2 = NULL_TREE;
  
    /* We can only assume that a pointer dereference will yield
       non-NULL if -fdelete-null-pointer-checks is enabled.  */
--- 3154,3173 ----
  }
  
  /* Return true if OP can be inferred to be a non-NULL after STMT
!    executes by using attributes.  If OP2 and OP3 are non-NULL and
!    nonnull_if_nonzero is the only attribute implying OP being non-NULL
!    and the corresponding argument(s) aren't non-zero INTEGER_CST, set *OP2
!    and *OP3 to the corresponding arguments and return true (in that case
!    returning true doesn't mean OP can be unconditionally inferred to be
!    non-NULL, but conditionally).  */
  bool
! infer_nonnull_range_by_attribute (gimple *stmt, tree op, tree *op2, tree *op3)
  {
    if (op2)
!     {
!       *op2 = NULL_TREE;
!       *op3 = NULL_TREE;
!     }
  
    /* We can only assume that a pointer dereference will yield
       non-NULL if -fdelete-null-pointer-checks is enabled.  */
*************** infer_nonnull_range_by_attribute (gimple
*** 3220,3245 ****
  	  unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	  unsigned int idx2
  	    = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
  	  if (idx < gimple_call_num_args (stmt)
  	      && idx2 < gimple_call_num_args (stmt)
  	      && operand_equal_p (op, gimple_call_arg (stmt, idx), 0))
  	    {
  	      tree arg2 = gimple_call_arg (stmt, idx2);
! 	      if (!INTEGRAL_TYPE_P (TREE_TYPE (arg2)))
  		return false;
! 	      if (integer_nonzerop (arg2))
  		return true;
! 	      if (integer_zerop (arg2))
  		return false;
  	      if (op2)
  		{
  		  /* This case is meant for ubsan instrumentation.
! 		     The caller can check at runtime if *OP2 is
  		     non-zero and OP is null.  */
  		  *op2 = arg2;
  		  return true;
  		}
! 	      return tree_expr_nonzero_p (arg2);
  	    }
  	}
      }
--- 3224,3256 ----
  	  unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	  unsigned int idx2
  	    = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
+ 	  unsigned int idx3 = idx2;
+ 	  if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
+ 	    idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
  	  if (idx < gimple_call_num_args (stmt)
  	      && idx2 < gimple_call_num_args (stmt)
+ 	      && idx3 < gimple_call_num_args (stmt)
  	      && operand_equal_p (op, gimple_call_arg (stmt, idx), 0))
  	    {
  	      tree arg2 = gimple_call_arg (stmt, idx2);
! 	      tree arg3 = gimple_call_arg (stmt, idx3);
! 	      if (!INTEGRAL_TYPE_P (TREE_TYPE (arg2))
! 		  || !INTEGRAL_TYPE_P (TREE_TYPE (arg3)))
  		return false;
! 	      if (integer_nonzerop (arg2) && integer_nonzerop (arg3))
  		return true;
! 	      if (integer_zerop (arg2) || integer_zerop (arg3))
  		return false;
  	      if (op2)
  		{
  		  /* This case is meant for ubsan instrumentation.
! 		     The caller can check at runtime if *OP2 and *OP3 are
  		     non-zero and OP is null.  */
  		  *op2 = arg2;
+ 		  *op3 = arg3;
  		  return true;
  		}
! 	      return tree_expr_nonzero_p (arg2) && tree_expr_nonzero_p (arg3);
  	    }
  	}
      }
diff -Nrcpad gcc-16-20250629/gcc/gimple.h gcc-16-20250706/gcc/gimple.h
*** gcc-16-20250629/gcc/gimple.h	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/gimple.h	Sun Jul  6 22:32:11 2025
*************** extern bool nonfreeing_call_p (gimple *)
*** 1667,1673 ****
  extern bool nonbarrier_call_p (gimple *);
  extern bool infer_nonnull_range (gimple *, tree);
  extern bool infer_nonnull_range_by_dereference (gimple *, tree);
! extern bool infer_nonnull_range_by_attribute (gimple *, tree, tree * = NULL);
  extern void sort_case_labels (vec<tree> &);
  extern void preprocess_case_label_vec_for_gimple (vec<tree> &, tree, tree *);
  extern void gimple_seq_set_location (gimple_seq, location_t);
--- 1667,1674 ----
  extern bool nonbarrier_call_p (gimple *);
  extern bool infer_nonnull_range (gimple *, tree);
  extern bool infer_nonnull_range_by_dereference (gimple *, tree);
! extern bool infer_nonnull_range_by_attribute (gimple *, tree, tree * = NULL,
! 					      tree * = NULL);
  extern void sort_case_labels (vec<tree> &);
  extern void preprocess_case_label_vec_for_gimple (vec<tree> &, tree, tree *);
  extern void gimple_seq_set_location (gimple_seq, location_t);
diff -Nrcpad gcc-16-20250629/gcc/ipa-cp.cc gcc-16-20250706/gcc/ipa-cp.cc
*** gcc-16-20250629/gcc/ipa-cp.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/ipa-cp.cc	Sun Jul  6 22:32:11 2025
*************** cs_interesting_for_ipcp_p (cgraph_edge *
*** 554,559 ****
--- 554,560 ----
    /* If we have zero IPA profile, still consider edge for cloning
       in case we do partial training.  */
    if (e->count.ipa ().initialized_p ()
+       && e->count.ipa ().quality () != AFDO
        && !opt_for_fn (e->callee->decl,flag_profile_partial_training))
      return false;
    return true;
*************** ipcp_cloning_candidate_p (struct cgraph_
*** 617,623 ****
        return false;
      }
  
!   if (node->optimize_for_size_p ())
      {
        if (dump_file)
  	fprintf (dump_file, "Not considering %s for cloning; "
--- 618,626 ----
        return false;
      }
  
!   /* Do not use profile here since cold wrapper wrap
!      hot function.  */
!   if (opt_for_fn (node->decl, optimize_size))
      {
        if (dump_file)
  	fprintf (dump_file, "Not considering %s for cloning; "
*************** devirtualization_time_bonus (struct cgra
*** 3341,3350 ****
  
  /* Return time bonus incurred because of hints stored in ESTIMATES.  */
  
! static int
  hint_time_bonus (cgraph_node *node, const ipa_call_estimates &estimates)
  {
!   int result = 0;
    ipa_hints hints = estimates.hints;
    if (hints & (INLINE_HINT_loop_iterations | INLINE_HINT_loop_stride))
      result += opt_for_fn (node->decl, param_ipa_cp_loop_hint_bonus);
--- 3344,3353 ----
  
  /* Return time bonus incurred because of hints stored in ESTIMATES.  */
  
! static sreal
  hint_time_bonus (cgraph_node *node, const ipa_call_estimates &estimates)
  {
!   sreal result = 0;
    ipa_hints hints = estimates.hints;
    if (hints & (INLINE_HINT_loop_iterations | INLINE_HINT_loop_stride))
      result += opt_for_fn (node->decl, param_ipa_cp_loop_hint_bonus);
*************** hint_time_bonus (cgraph_node *node, cons
*** 3352,3361 ****
    sreal bonus_for_one = opt_for_fn (node->decl, param_ipa_cp_loop_hint_bonus);
  
    if (hints & INLINE_HINT_loop_iterations)
!     result += (estimates.loops_with_known_iterations * bonus_for_one).to_int ();
  
    if (hints & INLINE_HINT_loop_stride)
!     result += (estimates.loops_with_known_strides * bonus_for_one).to_int ();
  
    return result;
  }
--- 3355,3364 ----
    sreal bonus_for_one = opt_for_fn (node->decl, param_ipa_cp_loop_hint_bonus);
  
    if (hints & INLINE_HINT_loop_iterations)
!     result += estimates.loops_with_known_iterations * bonus_for_one;
  
    if (hints & INLINE_HINT_loop_stride)
!     result += estimates.loops_with_known_strides * bonus_for_one;
  
    return result;
  }
*************** good_cloning_opportunity_p (struct cgrap
*** 3391,3399 ****
  			    int size_cost, bool called_without_ipa_profile)
  {
    gcc_assert (count_sum.ipa () == count_sum);
    if (time_benefit == 0
        || !opt_for_fn (node->decl, flag_ipa_cp_clone)
-       || node->optimize_for_size_p ()
        /* If there is no call which was executed in profiling or where
  	 profile is missing, we do not want to clone.  */
        || (!called_without_ipa_profile && !count_sum.nonzero_p ()))
--- 3394,3403 ----
  			    int size_cost, bool called_without_ipa_profile)
  {
    gcc_assert (count_sum.ipa () == count_sum);
+   if (count_sum.quality () == AFDO)
+     count_sum = count_sum.force_nonzero ();
    if (time_benefit == 0
        || !opt_for_fn (node->decl, flag_ipa_cp_clone)
        /* If there is no call which was executed in profiling or where
  	 profile is missing, we do not want to clone.  */
        || (!called_without_ipa_profile && !count_sum.nonzero_p ()))
*************** good_cloning_opportunity_p (struct cgrap
*** 3436,3442 ****
  	 introduced.  This is likely almost always going to be true, since we
  	 already checked that time saved is large enough to be considered
  	 hot.  */
!       else if (evaluation.to_int () >= eval_threshold)
  	return true;
        /* If all call sites have profile known; we know we do not want t clone.
  	 If there are calls with unknown profile; try local heuristics.  */
--- 3440,3446 ----
  	 introduced.  This is likely almost always going to be true, since we
  	 already checked that time saved is large enough to be considered
  	 hot.  */
!       else if (evaluation >= (sreal)eval_threshold)
  	return true;
        /* If all call sites have profile known; we know we do not want t clone.
  	 If there are calls with unknown profile; try local heuristics.  */
*************** good_cloning_opportunity_p (struct cgrap
*** 3457,3463 ****
  	     info->node_calling_single_call ? ", single_call" : "",
  	     evaluation.to_double (), eval_threshold);
  
!   return evaluation.to_int () >= eval_threshold;
  }
  
  /* Grow vectors in AVALS and fill them with information about values of
--- 3461,3467 ----
  	     info->node_calling_single_call ? ", single_call" : "",
  	     evaluation.to_double (), eval_threshold);
  
!   return evaluation >= eval_threshold;
  }
  
  /* Grow vectors in AVALS and fill them with information about values of
*************** perform_estimation_of_a_value (cgraph_no
*** 3543,3550 ****
      time_benefit = 0;
    else
      time_benefit = (estimates.nonspecialized_time - estimates.time)
        + (devirtualization_time_bonus (node, avals)
- 	 + hint_time_bonus (node, estimates)
  	 + removable_params_cost + est_move_cost);
  
    int size = estimates.size;
--- 3547,3554 ----
      time_benefit = 0;
    else
      time_benefit = (estimates.nonspecialized_time - estimates.time)
+       + hint_time_bonus (node, estimates)
        + (devirtualization_time_bonus (node, avals)
  	 + removable_params_cost + est_move_cost);
  
    int size = estimates.size;
*************** update_profiling_info (struct cgraph_nod
*** 4834,4844 ****
        profile_count unexp = orig_node_count - new_sum - orig_nonrec_call_count;
  
        int limit_den = 2 * (orig_nonrec_calls + new_nonrec_calls);
!       profile_count new_part
! 	= MAX(MIN (unexp.apply_scale (new_sum,
! 				      new_sum + orig_nonrec_call_count),
! 		   unexp.apply_scale (limit_den - 1, limit_den)),
! 	      unexp.apply_scale (new_nonrec_calls, limit_den));
        if (dump_file)
  	{
  	  fprintf (dump_file, "       Claiming ");
--- 4838,4849 ----
        profile_count unexp = orig_node_count - new_sum - orig_nonrec_call_count;
  
        int limit_den = 2 * (orig_nonrec_calls + new_nonrec_calls);
!       profile_count new_part = unexp.apply_scale (limit_den - 1, limit_den);
!       profile_count den = new_sum + orig_nonrec_call_count;
!       if (den.nonzero_p ())
! 	new_part = MIN (unexp.apply_scale (new_sum, den), new_part);
!       new_part = MAX (new_part,
! 		      unexp.apply_scale (new_nonrec_calls, limit_den));
        if (dump_file)
  	{
  	  fprintf (dump_file, "       Claiming ");
diff -Nrcpad gcc-16-20250629/gcc/ipa-fnsummary.cc gcc-16-20250706/gcc/ipa-fnsummary.cc
*** gcc-16-20250629/gcc/ipa-fnsummary.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/ipa-fnsummary.cc	Sun Jul  6 22:32:11 2025
*************** analyze_function_body (struct cgraph_nod
*** 3236,3243 ****
  	  if (!loop->header->aux)
  	    continue;
  
! 	  profile_count phdr_count = loop_preheader_edge (loop)->count ();
! 	  sreal phdr_freq = phdr_count.to_sreal_scale (entry_count);
  
  	  bb_predicate = *(ipa_predicate *)loop->header->aux;
  	  auto_vec<edge> exits = get_loop_exit_edges (loop);
--- 3236,3243 ----
  	  if (!loop->header->aux)
  	    continue;
  
! 	  profile_count hdr_count = loop->header->count;
! 	  sreal hdr_freq = hdr_count.to_sreal_scale (entry_count);
  
  	  bb_predicate = *(ipa_predicate *)loop->header->aux;
  	  auto_vec<edge> exits = get_loop_exit_edges (loop);
*************** analyze_function_body (struct cgraph_nod
*** 3257,3263 ****
  		loop_iterations &= will_be_nonconstant;
  	    }
  	  add_freqcounting_predicate (&s->loop_iterations, loop_iterations,
! 				      phdr_freq, max_loop_predicates);
  	}
  
        /* To avoid quadratic behavior we analyze stride predicates only
--- 3257,3263 ----
  		loop_iterations &= will_be_nonconstant;
  	    }
  	  add_freqcounting_predicate (&s->loop_iterations, loop_iterations,
! 				      hdr_freq, max_loop_predicates);
  	}
  
        /* To avoid quadratic behavior we analyze stride predicates only
*************** analyze_function_body (struct cgraph_nod
*** 3268,3275 ****
  	{
  	  ipa_predicate loop_stride = true;
  	  basic_block *body = get_loop_body (loop);
! 	  profile_count phdr_count = loop_preheader_edge (loop)->count ();
! 	  sreal phdr_freq = phdr_count.to_sreal_scale (entry_count);
  	  for (unsigned i = 0; i < loop->num_nodes; i++)
  	    {
  	      gimple_stmt_iterator gsi;
--- 3268,3275 ----
  	{
  	  ipa_predicate loop_stride = true;
  	  basic_block *body = get_loop_body (loop);
! 	  profile_count hdr_count = loop->header->count;
! 	  sreal hdr_freq = hdr_count.to_sreal_scale (entry_count);
  	  for (unsigned i = 0; i < loop->num_nodes; i++)
  	    {
  	      gimple_stmt_iterator gsi;
*************** analyze_function_body (struct cgraph_nod
*** 3309,3315 ****
  		}
  	    }
  	  add_freqcounting_predicate (&s->loop_strides, loop_stride,
! 				      phdr_freq, max_loop_predicates);
  	  free (body);
  	}
        scev_finalize ();
--- 3309,3315 ----
  		}
  	    }
  	  add_freqcounting_predicate (&s->loop_strides, loop_stride,
! 				      hdr_freq, max_loop_predicates);
  	  free (body);
  	}
        scev_finalize ();
diff -Nrcpad gcc-16-20250629/gcc/ipa-inline.cc gcc-16-20250706/gcc/ipa-inline.cc
*** gcc-16-20250629/gcc/ipa-inline.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/ipa-inline.cc	Sun Jul  6 22:32:11 2025
*************** inline_small_functions (void)
*** 2222,2227 ****
--- 2222,2228 ----
  
    gcc_assert (in_lto_p
  	      || !(max_count > 0)
+ 	      || flag_auto_profile
  	      || (profile_info && flag_branch_probabilities));
  
    while (!edge_heap.empty ())
diff -Nrcpad gcc-16-20250629/gcc/lazy-diagnostic-path.cc gcc-16-20250706/gcc/lazy-diagnostic-path.cc
*** gcc-16-20250629/gcc/lazy-diagnostic-path.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/lazy-diagnostic-path.cc	Sun Jul  6 22:32:11 2025
*************** public:
*** 98,104 ****
    std::unique_ptr<diagnostic_path> make_inner_path () const final override
    {
      tree fntype_void_void
!       = build_function_type_array (void_type_node, 0, NULL);
      tree fndecl_foo = build_fn_decl ("foo", fntype_void_void);
      auto path
        = std::make_unique<simple_diagnostic_path> (m_logical_loc_mgr,
--- 98,104 ----
    std::unique_ptr<diagnostic_path> make_inner_path () const final override
    {
      tree fntype_void_void
!       = build_function_type_array (void_type_node, 0, nullptr);
      tree fndecl_foo = build_fn_decl ("foo", fntype_void_void);
      auto path
        = std::make_unique<simple_diagnostic_path> (m_logical_loc_mgr,
diff -Nrcpad gcc-16-20250629/gcc/lra-eliminations.cc gcc-16-20250706/gcc/lra-eliminations.cc
*** gcc-16-20250629/gcc/lra-eliminations.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/lra-eliminations.cc	Sun Jul  6 22:32:11 2025
*************** move_plus_up (rtx x)
*** 302,310 ****
  				 subreg_lowpart_offset (x_mode,
  							subreg_reg_mode));
        if (cst && CONSTANT_P (cst))
! 	return gen_rtx_PLUS (x_mode, lowpart_subreg (x_mode,
! 						     XEXP (subreg_reg, 0),
! 						     subreg_reg_mode), cst);
      }
    return x;
  }
--- 302,313 ----
  				 subreg_lowpart_offset (x_mode,
  							subreg_reg_mode));
        if (cst && CONSTANT_P (cst))
! 	{
! 	  rtx lowpart = lowpart_subreg (x_mode, XEXP (subreg_reg, 0),
! 					subreg_reg_mode);
! 	  if (lowpart)
! 	    return gen_rtx_PLUS (x_mode, lowpart, cst);
! 	}
      }
    return x;
  }
diff -Nrcpad gcc-16-20250629/gcc/lto-cgraph.cc gcc-16-20250706/gcc/lto-cgraph.cc
*** gcc-16-20250629/gcc/lto-cgraph.cc	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/lto-cgraph.cc	Sun Jul  6 22:32:11 2025
*************** output_profile_summary (struct lto_simpl
*** 718,728 ****
  {
    if (profile_info)
      {
-       /* We do not output num and run_max, they are not used by
-          GCC profile feedback and they are difficult to merge from multiple
-          units.  */
        unsigned runs = (profile_info->runs);
        streamer_write_uhwi_stream (ob->main_stream, runs);
  
        /* IPA-profile computes hot bb threshold based on cumulated
  	 whole program profile.  We need to stream it down to ltrans.  */
--- 718,729 ----
  {
    if (profile_info)
      {
        unsigned runs = (profile_info->runs);
        streamer_write_uhwi_stream (ob->main_stream, runs);
+       streamer_write_gcov_count_stream (ob->main_stream,
+ 					profile_info->sum_max);
+       streamer_write_gcov_count_stream (ob->main_stream,
+ 					profile_info->cutoff);
  
        /* IPA-profile computes hot bb threshold based on cumulated
  	 whole program profile.  We need to stream it down to ltrans.  */
*************** input_profile_summary (class lto_input_b
*** 1678,1683 ****
--- 1679,1686 ----
    if (runs)
      {
        file_data->profile_info.runs = runs;
+       file_data->profile_info.sum_max = streamer_read_gcov_count (ib);
+       file_data->profile_info.cutoff = streamer_read_gcov_count (ib);
  
        /* IPA-profile computes hot bb threshold based on cumulated
  	 whole program profile.  We need to stream it down to ltrans.  */
*************** merge_profile_summaries (struct lto_file
*** 1719,1724 ****
--- 1722,1729 ----
  
    profile_info = XCNEW (gcov_summary);
    profile_info->runs = max_runs;
+   profile_info->sum_max = 0;
+   profile_info->cutoff = 0;
  
    /* If merging already happent at WPA time, we are done.  */
    if (flag_ltrans)
*************** merge_profile_summaries (struct lto_file
*** 1735,1740 ****
--- 1740,1753 ----
  
  	scale = RDIV (node->count_materialization_scale * max_runs,
                        node->lto_file_data->profile_info.runs);
+ 	gcov_type sum_max = RDIV (node->lto_file_data->profile_info.sum_max * max_runs,
+ 				  node->lto_file_data->profile_info.runs);
+ 	gcov_type cutoff = RDIV (node->lto_file_data->profile_info.cutoff * max_runs,
+ 				 node->lto_file_data->profile_info.runs);
+ 	if (sum_max > profile_info->sum_max)
+ 	  profile_info->sum_max = sum_max;
+ 	if (cutoff > profile_info->cutoff)
+ 	  profile_info->cutoff = cutoff;
  	node->count_materialization_scale = scale;
  	if (scale < 0)
  	  fatal_error (input_location, "Profile information in %s corrupted",
diff -Nrcpad gcc-16-20250629/gcc/m2/ChangeLog gcc-16-20250706/gcc/m2/ChangeLog
*** gcc-16-20250629/gcc/m2/ChangeLog	Sun Jun 29 22:32:28 2025
--- gcc-16-20250706/gcc/m2/ChangeLog	Sun Jul  6 22:32:11 2025
***************
*** 1,3 ****
--- 1,23 ----
+ 2025-07-01  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120912
+ 	* gm2-libs-iso/IOChanUtils.def (GetFile): New procedure function.
+ 	* gm2-libs-iso/IOChanUtils.mod (GetFile): New procedure function.
+ 
+ 2025-06-29  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/117203
+ 	* gm2-libs-log/FileSystem.def (GetFileName): New
+ 	procedure function.
+ 	(WriteString): New procedure.
+ 	* gm2-libs-log/FileSystem.mod (GetFileName): New
+ 	procedure function.
+ 	(WriteString): New procedure.
+ 	* gm2-libs/SFIO.def (GetFileName): New procedure function.
+ 	* gm2-libs/SFIO.mod (GetFileName): New procedure function.
+ 	* gm2-libs-iso/IOChanUtils.def: New file.
+ 	* gm2-libs-iso/IOChanUtils.mod: New file.
+ 
  2025-06-22  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/120731
diff -Nrcpad gcc-16-20250629/gcc/m2/gm2-libs/SFIO.def gcc-16-20250706/gcc/m2/gm2-libs/SFIO.def
*** gcc-16-20250629/gcc/m2/gm2-libs/SFIO.def	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/m2/gm2-libs/SFIO.def	Sun Jul  6 22:32:11 2025
*************** DEFINITION MODULE SFIO ;
*** 29,36 ****
  FROM DynamicStrings IMPORT String ;
  FROM FIO IMPORT File ;
  
- EXPORT QUALIFIED OpenToRead, OpenToWrite, OpenForRandom, Exists, WriteS, ReadS ;
- 
  
  (*
     Exists - returns TRUE if a file named, fname exists for reading.
--- 29,34 ----
*************** PROCEDURE WriteS (file: File; s: String)
*** 91,94 ****
--- 89,100 ----
  PROCEDURE ReadS (file: File) : String ;
  
  
+ (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ 
+ 
  END SFIO.
diff -Nrcpad gcc-16-20250629/gcc/m2/gm2-libs/SFIO.mod gcc-16-20250706/gcc/m2/gm2-libs/SFIO.mod
*** gcc-16-20250629/gcc/m2/gm2-libs/SFIO.mod	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/m2/gm2-libs/SFIO.mod	Sun Jul  6 22:32:11 2025
*************** IMPLEMENTATION MODULE SFIO ;
*** 29,38 ****
  FROM ASCII IMPORT nul ;
  
  FROM DynamicStrings IMPORT string, Length, InitString, ConCatChar,
                             InitStringDB, InitStringCharStarDB,
                             InitStringCharDB, MultDB, DupDB, SliceDB ;
  
! FROM FIO IMPORT exists, openToRead, openToWrite, openForRandom, WriteNBytes, ReadChar,
                  EOLN, EOF, IsNoError ;
  
  (*
--- 29,40 ----
  FROM ASCII IMPORT nul ;
  
  FROM DynamicStrings IMPORT string, Length, InitString, ConCatChar,
+                            InitStringCharStar,
                             InitStringDB, InitStringCharStarDB,
                             InitStringCharDB, MultDB, DupDB, SliceDB ;
  
! FROM FIO IMPORT exists, openToRead, openToWrite, openForRandom,
!                 WriteNBytes, ReadChar, getFileName,
                  EOLN, EOF, IsNoError ;
  
  (*
*************** BEGIN
*** 144,147 ****
--- 146,160 ----
  END ReadS ;
  
  
+ (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ BEGIN
+    RETURN InitStringCharStar (getFileName (file))
+ END GetFileName ;
+ 
+ 
  END SFIO.
diff -Nrcpad gcc-16-20250629/gcc/m2/gm2-libs-iso/IOChanUtils.def gcc-16-20250706/gcc/m2/gm2-libs-iso/IOChanUtils.def
*** gcc-16-20250629/gcc/m2/gm2-libs-iso/IOChanUtils.def	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/m2/gm2-libs-iso/IOChanUtils.def	Sun Jul  6 22:32:11 2025
***************
*** 0 ****
--- 1,35 ----
+ DEFINITION MODULE IOChanUtils ;
+ 
+ (*
+     Title      : IOChanUtils
+     Author     : Gaius Mulley
+     System     : GNU Modula-2
+     Date       : Sat Jun 28 23:33:06 2025
+     Revision   : $Version$
+     Description: provides additional procedures to work on
+                  ChanIds.
+ *)
+ 
+ FROM DynamicStrings IMPORT String ;
+ FROM FIO IMPORT File ;
+ 
+ IMPORT IOChan ;
+ 
+ 
+ (*
+    GetFileName - returns the filename as a new string associated
+                  with chanid c.  This string should be killed by
+                  the caller.
+ *)
+ 
+ PROCEDURE GetFileName (c: IOChan.ChanId) : String ;
+ 
+ 
+ (*
+    GetFile - returns the FIO.File associated with ChanId c.
+ *)
+ 
+ PROCEDURE GetFile (c: IOChan.ChanId) : File ;
+ 
+ 
+ END IOChanUtils.
diff -Nrcpad gcc-16-20250629/gcc/m2/gm2-libs-iso/IOChanUtils.mod gcc-16-20250706/gcc/m2/gm2-libs-iso/IOChanUtils.mod
*** gcc-16-20250629/gcc/m2/gm2-libs-iso/IOChanUtils.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/m2/gm2-libs-iso/IOChanUtils.mod	Sun Jul  6 22:32:11 2025
***************
*** 0 ****
--- 1,28 ----
+ IMPLEMENTATION MODULE IOChanUtils ;
+ 
+ IMPORT IOChan, SFIO, RTio ;
+ 
+ 
+ (*
+    GetFileName - returns the filename as a new string associated
+                  with chanid c.  This string should be killed by
+                  the caller.
+ *)
+ 
+ PROCEDURE GetFileName (c: IOChan.ChanId) : String ;
+ BEGIN
+    RETURN SFIO.GetFileName (GetFile (c))
+ END GetFileName ;
+ 
+ 
+ (*
+    GetFile - returns the FIO.File associated with ChanId c.
+ *)
+ 
+ PROCEDURE GetFile (c: IOChan.ChanId) : File ;
+ BEGIN
+    RETURN RTio.GetFile (c)
+ END GetFile ;
+ 
+ 
+ END IOChanUtils.
diff -Nrcpad gcc-16-20250629/gcc/m2/gm2-libs-log/FileSystem.def gcc-16-20250706/gcc/m2/gm2-libs-log/FileSystem.def
*** gcc-16-20250629/gcc/m2/gm2-libs-log/FileSystem.def	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/m2/gm2-libs-log/FileSystem.def	Sun Jul  6 22:32:11 2025
*************** FROM SYSTEM IMPORT WORD, BYTE, ADDRESS ;
*** 33,46 ****
  IMPORT FIO ;
  FROM DynamicStrings IMPORT String ;
  
- EXPORT QUALIFIED File, Response, Flag, FlagSet,
- 
-                  Create, Close, Lookup, Rename, Delete,
-                  SetRead, SetWrite, SetModify, SetOpen,
-                  Doio, SetPos, GetPos, Length, Reset,
- 
-                  ReadWord, ReadChar, ReadByte, ReadNBytes,
-                  WriteWord, WriteChar, WriteByte, WriteNBytes ;
  
  TYPE
     File = RECORD
--- 33,38 ----
*************** PROCEDURE Doio (VAR f: File) ;
*** 272,275 ****
--- 264,284 ----
  PROCEDURE FileNameChar (ch: CHAR) : CHAR ;
  
  
+ (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ 
+ 
+ (*
+    WriteString - writes contents to file.  The nul char
+                  will terminate the contents string otherwise
+                  all characters 0..HIGH (contents) are written.
+ *)
+ 
+ PROCEDURE WriteString (file: File; contents: ARRAY OF CHAR) ;
+ 
+ 
  END FileSystem.
diff -Nrcpad gcc-16-20250629/gcc/m2/gm2-libs-log/FileSystem.mod gcc-16-20250706/gcc/m2/gm2-libs-log/FileSystem.mod
*** gcc-16-20250629/gcc/m2/gm2-libs-log/FileSystem.mod	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/m2/gm2-libs-log/FileSystem.mod	Sun Jul  6 22:32:11 2025
*************** IMPLEMENTATION MODULE FileSystem ;
*** 29,36 ****
  FROM M2RTS IMPORT InstallTerminationProcedure ;
  FROM Storage IMPORT ALLOCATE ;
  FROM SYSTEM IMPORT ADR, COFF_T ;
! IMPORT SFIO, libc, wrapc ;
! FROM DynamicStrings IMPORT InitString, ConCat, ConCatChar, KillString, string ;
  FROM FormatStrings IMPORT Sprintf2 ;
  
  CONST
--- 29,39 ----
  FROM M2RTS IMPORT InstallTerminationProcedure ;
  FROM Storage IMPORT ALLOCATE ;
  FROM SYSTEM IMPORT ADR, COFF_T ;
! IMPORT SFIO, libc, wrapc, StrLib ;
! 
! FROM DynamicStrings IMPORT InitString, ConCat, ConCatChar,
!                            KillString, string, Dup ;
! 
  FROM FormatStrings IMPORT Sprintf2 ;
  
  CONST
*************** END FileNameChar ;
*** 595,600 ****
--- 598,634 ----
  
  
  (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ BEGIN
+    RETURN Dup (file.name)
+ END GetFileName ;
+ 
+ 
+ (*
+    WriteString - writes contents to file.  The nul char
+                  will terminate the contents string otherwise
+                  all characters 0..HIGH (contents) are written.
+ *)
+ 
+ PROCEDURE WriteString (file: File; contents: ARRAY OF CHAR) ;
+ VAR
+    ch     : CHAR ;
+    i, high: CARDINAL ;
+ BEGIN
+    i := 0 ;
+    high := StrLib.StrLen (contents) ;
+    WHILE i <= high DO
+       WriteChar (file, contents[i]) ;
+       INC (i)
+    END
+ END WriteString ;
+ 
+ 
+ (*
     MakeTemporary - creates a temporary file and returns its name.
  *)
  
diff -Nrcpad gcc-16-20250629/gcc/match.pd gcc-16-20250706/gcc/match.pd
*** gcc-16-20250629/gcc/match.pd	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/match.pd	Sun Jul  6 22:32:11 2025
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3500,3506 ****
       wide_int c2 = wi::to_wide (@2);
       wide_int sum = wi::add (c1, c2);
      }
!     (if (wi::eq_p (sum, wi::max_value (precision, SIGNED)))))))
  
  /* Saturation sub for signed integer.  */
  (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
--- 3500,3517 ----
       wide_int c2 = wi::to_wide (@2);
       wide_int sum = wi::add (c1, c2);
      }
!     (if (wi::eq_p (sum, wi::max_value (precision, SIGNED))))))
! 
! (match (signed_integer_sat_add @0 @1)
!   /* T SUM = (T)((UT)X + (UT)IMM)
!      SAT_S_ADD = (X ^ SUM) < 0 && (X ^ IMM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
!    (cond^ (ge (bit_ior:c (bit_xor:c @0 INTEGER_CST@1)
!                        (bit_not (bit_xor:c @0 (nop_convert@2 (plus (nop_convert @0)
!                        INTEGER_CST@3)))))
!                    integer_zerop)
!            (signed_integer_sat_val @0)
!            @2)
!    (if (wi::eq_p (wi::to_wide (@1), wi::to_wide (@3))))))
  
  /* Saturation sub for signed integer.  */
  (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
diff -Nrcpad gcc-16-20250629/gcc/opts.cc gcc-16-20250706/gcc/opts.cc
*** gcc-16-20250629/gcc/opts.cc	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/opts.cc	Sun Jul  6 22:32:11 2025
*************** print_specific_help (unsigned int includ
*** 2080,2089 ****
  static void
  enable_fdo_optimizations (struct gcc_options *opts,
  			  struct gcc_options *opts_set,
! 			  int value)
  {
!   SET_OPTION_IF_UNSET (opts, opts_set, flag_branch_probabilities, value);
!   SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_values, value);
    SET_OPTION_IF_UNSET (opts, opts_set, flag_unroll_loops, value);
    SET_OPTION_IF_UNSET (opts, opts_set, flag_peel_loops, value);
    SET_OPTION_IF_UNSET (opts, opts_set, flag_tracer, value);
--- 2080,2092 ----
  static void
  enable_fdo_optimizations (struct gcc_options *opts,
  			  struct gcc_options *opts_set,
! 			  int value, bool autofdo)
  {
!   if (!autofdo)
!     {
!       SET_OPTION_IF_UNSET (opts, opts_set, flag_branch_probabilities, value);
!       SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_values, value);
!     }
    SET_OPTION_IF_UNSET (opts, opts_set, flag_unroll_loops, value);
    SET_OPTION_IF_UNSET (opts, opts_set, flag_peel_loops, value);
    SET_OPTION_IF_UNSET (opts, opts_set, flag_tracer, value);
*************** common_handle_option (struct gcc_options
*** 3124,3130 ****
        /* No break here - do -fprofile-use processing. */
        /* FALLTHRU */
      case OPT_fprofile_use:
!       enable_fdo_optimizations (opts, opts_set, value);
        SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_reorder_functions,
  			   value);
  	/* Indirect call profiling should do all useful transformations
--- 3127,3133 ----
        /* No break here - do -fprofile-use processing. */
        /* FALLTHRU */
      case OPT_fprofile_use:
!       enable_fdo_optimizations (opts, opts_set, value, false);
        SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_reorder_functions,
  			   value);
  	/* Indirect call profiling should do all useful transformations
*************** common_handle_option (struct gcc_options
*** 3141,3147 ****
        /* No break here - do -fauto-profile processing. */
        /* FALLTHRU */
      case OPT_fauto_profile:
!       enable_fdo_optimizations (opts, opts_set, value);
        SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_correction, value);
        break;
  
--- 3144,3150 ----
        /* No break here - do -fauto-profile processing. */
        /* FALLTHRU */
      case OPT_fauto_profile:
!       enable_fdo_optimizations (opts, opts_set, value, true);
        SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_correction, value);
        break;
  
diff -Nrcpad gcc-16-20250629/gcc/passes.cc gcc-16-20250706/gcc/passes.cc
*** gcc-16-20250629/gcc/passes.cc	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/passes.cc	Sun Jul  6 22:32:11 2025
*************** finish_optimization_passes (void)
*** 355,367 ****
    gcc::dump_manager *dumps = m_ctxt->get_dumps ();
  
    timevar_push (TV_DUMP);
-   if (coverage_instrumentation_p () || flag_test_coverage
-       || flag_branch_probabilities)
-     {
-       dumps->dump_start (m_pass_profile_1->static_pass_number, NULL);
-       end_branch_prob ();
-       dumps->dump_finish (m_pass_profile_1->static_pass_number);
-     }
  
    /* Do whatever is necessary to finish printing the graphs.  */
    for (i = TDI_end; (dfi = dumps->get_dump_file_info (i)) != NULL; ++i)
--- 355,360 ----
*************** pass_manager::dump_profile_report () con
*** 2036,2041 ****
--- 2029,2035 ----
  	    fprintf (dump_file, "| %12.0f", profile_record[i].time);
  	    /* Time units changes with profile estimate and feedback.  */
  	    if (i == m_pass_profile_1->static_pass_number
+ 		|| i == m_pass_ipa_auto_profile_1->static_pass_number
  		|| i == m_pass_ipa_tree_profile_1->static_pass_number)
  	      fprintf (dump_file, "-------------");
  	    else if (rel_time_change)
diff -Nrcpad gcc-16-20250629/gcc/passes.def gcc-16-20250706/gcc/passes.def
*** gcc-16-20250629/gcc/passes.def	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/passes.def	Sun Jul  6 22:32:11 2025
*************** along with GCC; see the file COPYING3.
*** 444,452 ****
    NEXT_PASS (pass_lower_switch_O0);
    NEXT_PASS (pass_asan_O0);
    NEXT_PASS (pass_tsan_O0);
    NEXT_PASS (pass_sanopt);
    NEXT_PASS (pass_cleanup_eh);
-   NEXT_PASS (pass_musttail);
    NEXT_PASS (pass_lower_resx);
    NEXT_PASS (pass_nrv);
    NEXT_PASS (pass_gimple_isel);
--- 444,452 ----
    NEXT_PASS (pass_lower_switch_O0);
    NEXT_PASS (pass_asan_O0);
    NEXT_PASS (pass_tsan_O0);
+   NEXT_PASS (pass_musttail);
    NEXT_PASS (pass_sanopt);
    NEXT_PASS (pass_cleanup_eh);
    NEXT_PASS (pass_lower_resx);
    NEXT_PASS (pass_nrv);
    NEXT_PASS (pass_gimple_isel);
diff -Nrcpad gcc-16-20250629/gcc/print-tree.cc gcc-16-20250706/gcc/print-tree.cc
*** gcc-16-20250629/gcc/print-tree.cc	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/print-tree.cc	Sun Jul  6 22:32:11 2025
*************** DEBUG_FUNCTION void
*** 1193,1199 ****
  debug (const tree_node *ptr)
  {
    if (ptr)
!     debug (*ptr);
    else
      fprintf (stderr, "<nil>\n");
  }
--- 1193,1199 ----
  debug (const tree_node *ptr)
  {
    if (ptr)
!     debug_tree (const_cast <tree> (ptr));
    else
      fprintf (stderr, "<nil>\n");
  }
diff -Nrcpad gcc-16-20250629/gcc/profile-count.cc gcc-16-20250706/gcc/profile-count.cc
*** gcc-16-20250629/gcc/profile-count.cc	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/profile-count.cc	Sun Jul  6 22:32:11 2025
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,38 ----
  #include "cgraph.h"
  #include "wide-int.h"
  #include "sreal.h"
+ #include "profile.h"
  
  /* Names from profile_quality enum values.  */
  
*************** profile_count::operator* (const sreal &n
*** 557,563 ****
    sreal scaled = num * m_val;
    gcc_checking_assert (scaled >= 0);
    profile_count ret;
!   if (m_val > max_count)
      ret.m_val = max_count;
    else
      ret.m_val = scaled.to_nearest_int ();
--- 558,564 ----
    sreal scaled = num * m_val;
    gcc_checking_assert (scaled >= 0);
    profile_count ret;
!   if (scaled > max_count)
      ret.m_val = max_count;
    else
      ret.m_val = scaled.to_nearest_int ();
*************** profile_count::operator*= (const sreal &
*** 570,572 ****
--- 571,597 ----
  {
    return *this * num;
  }
+ 
+ /* Make counter forcibly nonzero.  */
+ profile_count
+ profile_count::force_nonzero () const
+ {
+   if (!initialized_p ())
+     return *this;
+   profile_count ret = *this;
+   /* Generally values are forced non-zero to handle inconsistent profile 
+      where count 0 needs to be scaled up to non-zero.
+ 
+      Use cutoff value here to avoid situation where profile has large
+      cutoff and we perform count = count * num / den where num is non-zero
+      and den is 0.   If profile was scaled by large factor, forcing value
+      to 1 would lead to large scale factor.  */
+   gcov_unsigned_t small = profile_info ? profile_info->cutoff / 2 + 1
+ 			  : 1;
+   if (ret.m_val < small)
+     {
+       ret.m_val = small;
+       ret.m_quality = MIN (m_quality, ADJUSTED);
+     }
+   return ret;
+ }
diff -Nrcpad gcc-16-20250629/gcc/profile-count.h gcc-16-20250706/gcc/profile-count.h
*** gcc-16-20250629/gcc/profile-count.h	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/profile-count.h	Sun Jul  6 22:32:11 2025
*************** public:
*** 1112,1129 ****
      }
  
    /* Make counter forcibly nonzero.  */
!   profile_count force_nonzero () const
!     {
!       if (!initialized_p ())
! 	return *this;
!       profile_count ret = *this;
!       if (ret.m_val == 0)
! 	{
! 	  ret.m_val = 1;
! 	  ret.m_quality = MIN (m_quality, ADJUSTED);
! 	}
!       return ret;
!     }
  
    profile_count max (profile_count other) const
      {
--- 1112,1118 ----
      }
  
    /* Make counter forcibly nonzero.  */
!   profile_count force_nonzero () const;
  
    profile_count max (profile_count other) const
      {
diff -Nrcpad gcc-16-20250629/gcc/profile.cc gcc-16-20250706/gcc/profile.cc
*** gcc-16-20250629/gcc/profile.cc	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/profile.cc	Sun Jul  6 22:32:11 2025
*************** along with GCC; see the file COPYING3.
*** 68,73 ****
--- 68,74 ----
  #include "file-prefix-map.h"
  
  #include "profile.h"
+ #include "auto-profile.h"
  
  struct condcov;
  struct condcov *find_conditions (struct function*);
*************** struct bb_profile_info {
*** 97,103 ****
  
  /* Counter summary from the last set of coverage counts read.  */
  
! gcov_summary *profile_info;
  
  /* Collect statistics on the performance of this pass for the entire source
     file.  */
--- 98,104 ----
  
  /* Counter summary from the last set of coverage counts read.  */
  
! gcov_summary *profile_info, *gcov_profile_info;
  
  /* Collect statistics on the performance of this pass for the entire source
     file.  */
*************** static int total_hist_br_prob[20];
*** 113,118 ****
--- 114,140 ----
  static int total_num_branches;
  static int total_num_conds;
  
+ /* Map between auto-fdo and fdo counts used to compare quality
+    of the profiles.  */
+ struct afdo_fdo_record
+ {
+   cgraph_node *node;
+   struct bb_record
+   {
+     /* Index of the  basic block.  */
+     int index;
+     profile_count afdo;
+     profile_count fdo;
+ 
+     /* Successors and predecessors in CFG.  */
+     vec <int> preds;
+     vec <int> succs;
+   };
+   vec <bb_record> bbs;
+ };
+ 
+ static vec <afdo_fdo_record> afdo_fdo_records;
+ 
  /* Forward declarations.  */
  static void find_spanning_tree (struct edge_list *);
  
*************** compute_branch_probabilities (unsigned c
*** 472,477 ****
--- 494,515 ----
    BB_INFO (EXIT_BLOCK_PTR_FOR_FN (cfun))->succ_count = 2;
    BB_INFO (ENTRY_BLOCK_PTR_FOR_FN (cfun))->pred_count = 2;
  
+   afdo_fdo_record record = {cgraph_node::get (current_function_decl), vNULL};;
+   if (dump_file && flag_auto_profile)
+     {
+       FOR_ALL_BB_FN (bb, cfun)
+ 	{
+ 	  record.bbs.safe_push ({bb->index, bb->count.ipa (),
+ 				profile_count::uninitialized (), vNULL, vNULL});
+ 	  record.bbs.last ().preds.reserve (EDGE_COUNT (bb->preds));
+ 	  for (auto &e : bb->preds)
+ 	    record.bbs.last ().preds.safe_push (e->src->index);
+ 	  record.bbs.last ().succs.reserve (EDGE_COUNT (bb->succs));
+ 	  for (auto &e : bb->succs)
+ 	    record.bbs.last ().succs.safe_push (e->dest->index);
+ 	}
+     }
+ 
    num_edges = read_profile_edge_counts (exec_counts);
  
    if (dump_file)
*************** compute_branch_probabilities (unsigned c
*** 812,817 ****
--- 850,867 ----
    delete edge_gcov_counts;
    edge_gcov_counts = NULL;
  
+   if (dump_file && flag_auto_profile)
+     {
+       int i = 0;
+       FOR_ALL_BB_FN (bb, cfun)
+ 	{
+ 	  gcc_checking_assert (record.bbs[i].index == bb->index);
+ 	  record.bbs[i].fdo = bb->count.ipa ();
+ 	  i++;
+ 	}
+       afdo_fdo_records.safe_push (record);
+     }
+ 
    update_max_bb_count ();
  
    if (dump_file)
*************** end_branch_prob (void)
*** 1804,1809 ****
--- 1854,1918 ----
  	}
        fprintf (dump_file, "Total number of conditions: %d\n",
  	       total_num_conds);
+       if (afdo_fdo_records.length ())
+ 	{
+ 	  profile_count fdo_sum = profile_count::zero ();
+ 	  profile_count afdo_sum = profile_count::zero ();
+ 	  for (const auto &r : afdo_fdo_records)
+ 	    for (const auto &b : r.bbs)
+ 	      if (b.fdo.initialized_p () && b.afdo.initialized_p ())
+ 		{
+ 		  fdo_sum += b.fdo;
+ 		  afdo_sum += b.afdo;
+ 		}
+ 	  for (auto &r : afdo_fdo_records)
+ 	    {
+ 	      for (auto &b : r.bbs)
+ 		if (b.fdo.initialized_p () && b.afdo.initialized_p ())
+ 		  {
+ 		    fprintf (dump_file, "%s bb %i fdo %" PRIu64 " (%s) afdo ",
+ 			     r.node->dump_name (), b.index,
+ 			     (int64_t)b.fdo.to_gcov_type (),
+ 			     maybe_hot_count_p
+ 				     (NULL, b.fdo.apply_scale (1, 1000))
+ 			     ? "very hot"
+ 			     : maybe_hot_count_p (NULL, b.fdo)
+ 			     ?  "hot" : "cold");
+ 		    b.afdo.dump (dump_file);
+ 		    fprintf (dump_file, " (%s) ",
+ 			     maybe_hot_afdo_count_p
+ 				     (b.afdo.apply_scale (1, 1000))
+ 			     ? "very hot"
+ 			     : maybe_hot_afdo_count_p (b.afdo)
+ 			     ?  "hot" : "cold");
+ 		    if (afdo_sum.nonzero_p ())
+ 		      {
+ 			profile_count scaled
+ 			       	= b.afdo.apply_scale (fdo_sum, afdo_sum);
+ 			fprintf (dump_file, "scaled %" PRIu64,
+ 				 scaled.to_gcov_type ());
+ 			if (b.fdo.to_gcov_type ())
+ 			  fprintf (dump_file, " diff %" PRId64 ", %+2.2f%%",
+ 				   scaled.to_gcov_type ()
+ 				   - b.fdo.to_gcov_type (),
+ 				   (scaled.to_gcov_type ()
+ 				    - b.fdo.to_gcov_type ()) * 100.0
+ 				   / b.fdo.to_gcov_type ());
+ 		      }
+ 		    fprintf (dump_file, "\n preds");
+ 		    for (int val : b.preds)
+ 		      fprintf (dump_file, " %i", val);
+ 		    b.preds.release ();
+ 		    fprintf (dump_file, "\n succs");
+ 		    for (int val : b.succs)
+ 		      fprintf (dump_file, " %i", val);
+ 		    b.succs.release ();
+ 		    fprintf (dump_file, "\n");
+ 		  }
+ 	       r.bbs.release ();
+ 	     }
+ 	}
+       afdo_fdo_records.release ();
      }
  }
  
diff -Nrcpad gcc-16-20250629/gcc/profile.h gcc-16-20250706/gcc/profile.h
*** gcc-16-20250629/gcc/profile.h	Sun Jun 29 22:32:29 2025
--- gcc-16-20250706/gcc/profile.h	Sun Jul  6 22:32:11 2025
*************** extern void get_working_sets (void);
*** 75,81 ****
  
  /* Counter summary from the last set of coverage counts read by
     profile.cc.  */
! extern struct gcov_summary *profile_info;
  
  /* Return true if any cfg coverage/profiling is enabled; -fprofile-arcs
     -fcondition-coverage -fpath-coverage.  */
--- 75,81 ----
  
  /* Counter summary from the last set of coverage counts read by
     profile.cc.  */
! extern struct gcov_summary *profile_info, *gcov_profile_info;
  
  /* Return true if any cfg coverage/profiling is enabled; -fprofile-arcs
     -fcondition-coverage -fpath-coverage.  */
diff -Nrcpad gcc-16-20250629/gcc/selftest-run-tests.cc gcc-16-20250706/gcc/selftest-run-tests.cc
*** gcc-16-20250629/gcc/selftest-run-tests.cc	Sun Jun 29 22:32:30 2025
--- gcc-16-20250706/gcc/selftest-run-tests.cc	Sun Jul  6 22:32:11 2025
*************** selftest::run_tests ()
*** 101,107 ****
    diagnostic_color_cc_tests ();
    diagnostic_show_locus_cc_tests ();
    diagnostic_format_html_cc_tests ();
-   diagnostic_format_json_cc_tests ();
    diagnostic_format_sarif_cc_tests ();
    diagnostic_output_spec_cc_tests ();
    edit_context_cc_tests ();
--- 101,106 ----
diff -Nrcpad gcc-16-20250629/gcc/selftest.h gcc-16-20250706/gcc/selftest.h
*** gcc-16-20250629/gcc/selftest.h	Sun Jun 29 22:32:30 2025
--- gcc-16-20250706/gcc/selftest.h	Sun Jul  6 22:32:11 2025
*************** extern void convert_cc_tests ();
*** 223,229 ****
  extern void dbgcnt_cc_tests ();
  extern void diagnostic_color_cc_tests ();
  extern void diagnostic_format_html_cc_tests ();
- extern void diagnostic_format_json_cc_tests ();
  extern void diagnostic_format_sarif_cc_tests ();
  extern void diagnostic_output_spec_cc_tests ();
  extern void diagnostic_path_output_cc_tests ();
--- 223,228 ----
diff -Nrcpad gcc-16-20250629/gcc/simple-diagnostic-path.cc gcc-16-20250706/gcc/simple-diagnostic-path.cc
*** gcc-16-20250629/gcc/simple-diagnostic-path.cc	Sun Jun 29 22:32:30 2025
--- gcc-16-20250706/gcc/simple-diagnostic-path.cc	Sun Jul  6 22:32:11 2025
*************** test_intraprocedural_path (pretty_printe
*** 194,200 ****
  {
    tree_logical_location_manager mgr;
    tree fntype_void_void
!     = build_function_type_array (void_type_node, 0, NULL);
    tree fndecl_foo = build_fn_decl ("foo", fntype_void_void);
  
    simple_diagnostic_path path (mgr, event_pp);
--- 194,200 ----
  {
    tree_logical_location_manager mgr;
    tree fntype_void_void
!     = build_function_type_array (void_type_node, 0, nullptr);
    tree fndecl_foo = build_fn_decl ("foo", fntype_void_void);
  
    simple_diagnostic_path path (mgr, event_pp);
diff -Nrcpad gcc-16-20250629/gcc/testsuite/ChangeLog gcc-16-20250706/gcc/testsuite/ChangeLog
*** gcc-16-20250629/gcc/testsuite/ChangeLog	Sun Jun 29 22:32:30 2025
--- gcc-16-20250706/gcc/testsuite/ChangeLog	Sun Jul  6 22:32:11 2025
***************
*** 1,3 ****
--- 1,522 ----
+ 2025-07-04  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	PR target/118241
+ 	* gcc.target/riscv/pr118241-b.cc: New test.
+ 
+ 2025-07-04  Raphael Moreira Zinsly  <rzinsly@ventanamicro.com>
+ 
+ 	* gcc.target/sh/pr54236-2.c: Fix comments and expected output
+ 
+ 2025-07-04  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR c/118948
+ 	* gcc.dg/pr118948-1.c: New test.
+ 
+ 2025-07-04  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120575
+ 	PR c++/116064
+ 	* g++.dg/template/permissive-error3.C: New test.
+ 
+ 2025-07-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c: Add asm check.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c: Ditto.
+ 
+ 2025-07-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Add asm check.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ 	data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i8.c: New test.
+ 
+ 2025-07-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120944
+ 	* gcc.dg/torture/pr120944.c: New testcase.
+ 
+ 2025-07-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120927
+ 	* gcc.dg/vect/vect-pr120927.c: New testcase.
+ 	* gcc.dg/vect/vect-pr120927-2.c: Likewise.
+ 
+ 2025-07-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120837
+ 	* gcc.dg/ubsan/pr120837.c: New test.
+ 
+ 2025-07-04  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/120807
+ 	* gcc.c-torture/compile/pr120708.c: Rename to ...
+ 	* gcc.c-torture/compile/pr120807.c: ... here.
+ 
+ 2025-07-04  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* gcc.c-torture/compile/pr120708.c: New test.
+ 
+ 2025-07-04  panciyan  <panciyan@eswincomputing.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add signed scalar SAT_ADD IMM form2.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i16.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i32.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i64.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i8.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-run-2-i16.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-run-2-i32.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-run-2-i64.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-run-2-i8.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c: New test.
+ 	* gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c: New test.
+ 
+ 2025-07-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120716
+ 	* g++.dg/cpp0x/lambda/lambda-constexpr3.C: New test.
+ 	* g++.dg/cpp0x/lambda/lambda-constexpr3a.C: New test.
+ 
+ 2025-07-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120748
+ 	* g++.dg/cpp2a/lambda-targ16.C: New test.
+ 	* g++.dg/cpp0x/this1.C: Adjust diagnostics.
+ 
+ 2025-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120940
+ 	* g++.dg/parse/pr120940.C: New test.
+ 	* g++.dg/warn/Wduplicated-branches9.C: New test.
+ 
+ 2025-07-03  Juergen Christ  <jchrist@linux.ibm.com>
+ 
+ 	* gcc.target/s390/vector/vec-perm-merge-1.c: New test.
+ 	* gcc.target/s390/vector/vec-perm-pack-1.c: New test.
+ 
+ 2025-07-03  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* c-c++-common/gomp/omp_get_num_devices_initial_device.c: Fix.
+ 	* gfortran.dg/gomp/omp_get_num_devices_initial_device.f90: Likewise.
+ 
+ 2025-07-03  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.dg/ipa/pr120295.c (glob): Rename to glob_.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* gcc.target/aarch64/cmpbr.c: Update tests.
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* gcc.target/aarch64/cmpbr.c:
+ 
+ 2025-07-03  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* lib/target-supports.exp: Add `cmpbr` to the list of extensions.
+ 	* gcc.target/aarch64/cmpbr.c: New test.
+ 
+ 2025-07-03  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR tree-optimization/120780
+ 	* gcc.dg/builtin-dynamic-object-size-pr120780.c: New test case.
+ 
+ 2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120936
+ 	* gcc.target/i386/pr120936-1.c: New test
+ 	* gcc.target/i386/pr120936-2.c: Likewise.
+ 	* gcc.target/i386/pr120936-3.c: Likewise.
+ 	* gcc.target/i386/pr120936-4.c: Likewise.
+ 	* gcc.target/i386/pr120936-5.c: Likewise.
+ 	* gcc.target/i386/pr120936-6.c: Likewise.
+ 	* gcc.target/i386/pr120936-7.c: Likewise.
+ 	* gcc.target/i386/pr120936-8.c: Likewise.
+ 	* gcc.target/i386/pr120936-9.c: Likewise.
+ 	* gcc.target/i386/pr120936-10.c: Likewise.
+ 	* gcc.target/i386/pr120936-11.c: Likewise.
+ 	* gcc.target/i386/pr120936-12.c: Likewise.
+ 	* gcc.target/i386/pr93492-3.c: Updated.
+ 	* gcc.target/i386/pr93492-5.c: Likewise.
+ 
+ 2025-07-03  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120843
+ 	* gfortran.dg/coarray/coindexed_6.f90: Enhance test to have
+ 	coarray components covered.
+ 
+ 2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* gcc.target/i386/pr120908.c: New test.
+ 
+ 2025-07-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120684
+ 	PR c++/118856
+ 	* g++.dg/cpp23/range-for10.C: New test.
+ 
+ 2025-07-02  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* gcc.target/riscv/mcpu-xt-c908.c: Disable for E ABI variants.
+ 	* gcc.target/riscv/mcpu-xt-c908v.c: Ditto.
+ 	* gcc.target/riscv/mcpu-xt-c910.c: Ditto.
+ 	* gcc.target/riscv/mcpu-xt-c910v2.c: Ditto.
+ 	* gcc.target/riscv/mcpu-xt-c920.c: Ditto.
+ 	* gcc.target/riscv/mcpu-xt-c920v2.c: Ditto.
+ 	* gcc.target/riscv/pr118241.c: Ditto.
+ 	* gcc.target/riscv/pr120223.c: Ditto.
+ 	* gcc.target/riscv/rvv/base/pr119164.c: Disable for E ABI variants
+ 	and for 32-bit ISA.
+ 
+ 2025-07-02  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	PR target/120356
+ 	* gcc.target/riscv/rvv/autovec/pr120356.c: New test.
+ 
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* gcc.dg/ubsan/pointer-counted-by-bounds-2.c: New test.
+ 	* gcc.dg/ubsan/pointer-counted-by-bounds-3.c: New test.
+ 	* gcc.dg/ubsan/pointer-counted-by-bounds-4.c: New test.
+ 	* gcc.dg/ubsan/pointer-counted-by-bounds-5.c: New test.
+ 	* gcc.dg/ubsan/pointer-counted-by-bounds.c: New test.
+ 
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* gcc.dg/pointer-counted-by-4-char.c: New test.
+ 	* gcc.dg/pointer-counted-by-4-float.c: New test.
+ 	* gcc.dg/pointer-counted-by-4-struct.c: New test.
+ 	* gcc.dg/pointer-counted-by-4-union.c: New test.
+ 	* gcc.dg/pointer-counted-by-4.c: New test.
+ 	* gcc.dg/pointer-counted-by-5.c: New test.
+ 	* gcc.dg/pointer-counted-by-6.c: New test.
+ 	* gcc.dg/pointer-counted-by-7.c: New test.
+ 
+ 2025-07-01  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* gcc.dg/flex-array-counted-by.c: Update test.
+ 	* gcc.dg/pointer-counted-by-1.c: New test.
+ 	* gcc.dg/pointer-counted-by-2.c: New test.
+ 	* gcc.dg/pointer-counted-by-3.c: New test.
+ 	* gcc.dg/pointer-counted-by.c: New test.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/120919
+ 	* gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c (main): Change
+ 	sc, ss, si and sll vars from scalars to arrays of 2 elements,
+ 	initialize and test just the first one though.
+ 
+ 2025-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/finalizable2.ads: New test.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gcc.target/s390/vector/vec-abs-emu.c: Add -fno-stack-protector
+ 	to dg-options.
+ 	* gcc.target/s390/vector/vec-max-emu.c: Likewise.
+ 	* gcc.target/s390/vector/vec-min-emu.c: Likewise.
+ 
+ 2025-07-01  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob:
+ 	Append INTRINSIC keyword.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/120471
+ 	* g++.dg/ubsan/pr120471.C: New test.
+ 	* g++.dg/parse/pr120471.C: New test.
+ 
+ 2025-07-01  Remi Machet  <rmachet@nvidia.com>
+ 
+ 	* gcc.target/aarch64/simd/shrn2subhn.c: New test.
+ 
+ 2025-07-01  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120847
+ 	* gfortran.dg/coarray/coindexed_7.f90: New test.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR ipa/119318
+ 	PR testsuite/120082
+ 	* gcc.dg/ipa/pr119318.c (main): Expect different result on big endian
+ 	from little endian, on unexpected endianness or int/int128 sizes don't
+ 	test anything.  Formatting fixes.
+ 
+ 2025-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.target/i386/preserve-none-1.c (dg-options): Add
+ 	-fomit-frame-pointer.
+ 
+ 2025-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* g++.target/i386/memset-pr101366-1.C (dg-options): Add
+ 	-fasynchronous-unwind-tables -fdwarf2-cfi-asm.
+ 	* g++.target/i386/memset-pr101366-2.C: Likewise.
+ 	* g++.target/i386/memset-pr118276-1a.C: Likewise.
+ 	* g++.target/i386/memset-pr118276-1b.C: Likewise.
+ 	* g++.target/i386/memset-pr118276-1c.C: Likewise.
+ 	* gcc.target/i386/memset-pr70308-1a.c: Likewise.
+ 	* gcc.target/i386/memset-strategy-25.c: Likewise.
+ 	* gcc.target/i386/memset-strategy-28.c: Likewise.
+ 	* gcc.target/i386/memset-strategy-29.c: Likewise.
+ 	* gcc.target/i386/memset-strategy-30.c: Likewise.
+ 	* gcc.target/i386/pr92080-17.c: Likewise.
+ 	* gcc.target/i386/memset-pr70308-1b.c: Likewise.  Also add
+ 	-fomit-frame-pointer.
+ 	* g++.target/i386/memset-pr108585-1a.C:  (dg-options): Add
+ 	-fasynchronous-unwind-tables -fdwarf2-cfi-asm.  Also add
+ 	-mno-stackrealign -fomit-frame-pointer.
+ 	* g++.target/i386/memset-pr108585-1b.C: Likewise.
+ 
+ 2025-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120608
+ 	* c-c++-common/asan/pr120608-3.c: New test.
+ 	* c-c++-common/asan/pr120608-4.c: New test.
+ 	* g++.dg/asan/pr120608-3.C: New test.
+ 	* g++.dg/asan/pr120608-4.C: New test.
+ 
+ 2025-07-01  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120843
+ 	* gfortran.dg/coarray/coindexed_6.f90: New test.
+ 
+ 2025-07-01  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	* lib/target-supports.exp (foldable_pi_based_trigonometry): New
+ 	effective target.
+ 	* gcc.dg/torture/builtin-math-9.c: New test.
+ 
+ 2025-07-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR middle-end/120631
+ 	* gcc.dg/dfp/pr120631.c: Drop overrider of dg-do default action.
+ 	* gcc.dg/dfp/bitint-9.c: Likewise.
+ 	* gcc.dg/dfp/bitint-10.c: Likewise.
+ 
+ 2025-06-30  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/120242
+ 	PR rtl-optimization/120627
+ 	PR rtl-optimization/120736
+ 	PR rtl-optimization/120813
+ 	* gcc.dg/torture/pr120242.c: New test.
+ 	* gcc.dg/torture/pr120627.c: Likewise.
+ 	* gcc.dg/torture/pr120736.c: Likewise.
+ 	* gcc.dg/torture/pr120813.c: Likewise.
+ 
+ 2025-06-30  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	PR target/120714
+ 	* gcc.target/riscv/pr120714.c: New test.
+ 
+ 2025-06-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* gcc.dg/plugin/analyzer_gil_plugin.cc
+ 	(gil_diagnostic::get_meaning_for_state_change): Convert
+ 	diagnostic_event::meaning enums to enum class.
+ 
+ 2025-06-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* c-c++-common/analyzer/out-of-bounds-diagram-1-json.c: Deleted test.
+ 	* c-c++-common/diagnostic-format-json-1.c: Deleted test.
+ 	* c-c++-common/diagnostic-format-json-2.c: Deleted test.
+ 	* c-c++-common/diagnostic-format-json-3.c: Deleted test.
+ 	* c-c++-common/diagnostic-format-json-4.c: Deleted test.
+ 	* c-c++-common/diagnostic-format-json-5.c: Deleted test.
+ 	* c-c++-common/diagnostic-format-json-file-1.c: Deleted test.
+ 	* c-c++-common/diagnostic-format-json-stderr-1.c: Deleted test.
+ 	* c-c++-common/pr106133.c: Deleted test.
+ 	* g++.dg/pr90462.C: Deleted test.
+ 	* gcc.dg/plugin/diagnostic-test-paths-3.c: Deleted test.
+ 	* gcc.dg/plugin/plugin.exp (plugin_test_list): Remove deleted
+ 	test.
+ 	* gfortran.dg/diagnostic-format-json-1.F90: Deleted test.
+ 	* gfortran.dg/diagnostic-format-json-2.F90: Deleted test.
+ 	* gfortran.dg/diagnostic-format-json-3.F90: Deleted test.
+ 	* gfortran.dg/diagnostic-format-json-pr105916.F90: Deleted test.
+ 
+ 2025-06-30  Christopher Bazley  <chris.bazley@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/adr_7.c: Fix regular expressions.
+ 
+ 2025-06-30  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c: Add asm check
+ 	for vssubu.vx combine.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c: Ditto.
+ 
+ 2025-06-30  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ 	data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u8.c: New test.
+ 
+ 2025-06-30  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u16.c:
+ 	Update the asm check due to cost model change.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u32.c:
+ 	Diito.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u8.c:
+ 	Ditto.
+ 
+ 2025-06-30  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-21.c: Ignore -Oz.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-26.c: Ditto.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-36.c: Ditto.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-39.c: Ditto.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-41.c: Ditto.
+ 	* gcc.target/riscv/rvv/vsetvl/vsetvl-22.c: Ditto.
+ 	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c: Ditto.
+ 	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c: Ditto.
+ 	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c: Ditto.
+ 
+ 2025-06-30  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/120659
+ 	* gcc.target/riscv/pr120659.c: New test.
+ 
+ 2025-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gcc.target/i386/vect-pr82426.c: Pass explicit -ffp-contract=fast.
+ 	* gcc.target/i386/vect-pr82426-2.c: New testcase variant with
+ 	-ffp-contract=on.
+ 
+ 2025-06-30  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR target/119100
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfnmacc and
+ 	vfnmsac.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h (DEF_VF_MULOP_CASE_1):
+ 	Fix return type.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c: New test.
+ 
+ 2025-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/120520
+ 	PR c/117023
+ 	* gcc.dg/nonnull-9.c: Tweak for 3 argument nonnull_if_nonzero
+ 	attribute support, add further tests.
+ 	* gcc.dg/nonnull-12.c: New test.
+ 	* gcc.dg/nonnull-13.c: New test.
+ 	* gcc.dg/nonnull-14.c: New test.
+ 	* c-c++-common/ubsan/nonnull-8.c: New test.
+ 	* c-c++-common/ubsan/nonnull-9.c: New test.
+ 
+ 2025-06-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120840
+ 	* gcc.target/i386/no-callee-saved-1.c: Updated.
+ 	* gcc.target/i386/no-callee-saved-2.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-7.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-8.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-9.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-10.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-18.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-19a.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-19c.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-19d.c: Likewise.
+ 	* gcc.target/i386/pr119784a.c: Likewise.
+ 	* gcc.target/i386/preserve-none-6.c: Likewise.
+ 	* gcc.target/i386/preserve-none-7.c: Likewise.
+ 	* gcc.target/i386/preserve-none-12.c: Likewise.
+ 	* gcc.target/i386/preserve-none-13.c: Likewise.
+ 	* gcc.target/i386/preserve-none-14.c: Likewise.
+ 	* gcc.target/i386/preserve-none-15.c: Likewise.
+ 	* gcc.target/i386/preserve-none-23.c: Likewise.
+ 	* gcc.target/i386/pr120840-1a.c: New test.
+ 	* gcc.target/i386/pr120840-1b.c: Likewise.
+ 	* gcc.target/i386/pr120840-1c.c: Likewise.
+ 	* gcc.target/i386/pr120840-1d.c: Likewise.
+ 
+ 2025-06-29  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/117203
+ 	* gm2/isolib/run/pass/testdelete2.mod: New test.
+ 	* gm2/pimlib/logitech/run/pass/testdelete2.mod: New test.
+ 	* gm2/pimlib/run/pass/testdelete.mod: New test.
+ 
+ 2025-06-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* gcc.target/i386/shrink_wrap_separate_check_lea.c: Scan
+ 	"lea(l|q)", instead of "leaq".
+ 
  2025-06-28  Eric Botcazou  <ebotcazou@adacore.com>
  
  	* gnat.dg/concat6.adb: New test.
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-json.c gcc-16-20250706/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-json.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-json.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-json.c	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- /* { dg-additional-options "-fdiagnostics-format=json-file" } */
- 
- /* The custom JSON format doesn't support text art, so this is just a simple
-    smoketext.  */
- 
- #include <stdint.h>
- 
- int32_t arr[10];
- 
- void int_arr_write_element_after_end_off_by_one(int32_t x)
- {
-   arr[10] = x;
- }
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/asan/pr120608-3.c gcc-16-20250706/gcc/testsuite/c-c++-common/asan/pr120608-3.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/asan/pr120608-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/c-c++-common/asan/pr120608-3.c	Sun Jul  6 22:32:12 2025
***************
*** 0 ****
--- 1,36 ----
+ /* PR middle-end/120608 */
+ /* { dg-do compile { target musttail } } */
+ /* { dg-options "-fsanitize=address -fno-exceptions" } */
+ 
+ [[gnu::noipa]] int
+ foo (int x)
+ {
+   return x;
+ }
+ 
+ [[gnu::noipa]] void
+ bar (int *x, int *y, int *z)
+ {
+   (void) x;
+   (void) y;
+   (void) z;
+ }
+ 
+ [[gnu::noipa]] int
+ baz (int x)
+ {
+   int a = 4;
+   {
+     int b = 8;
+     {
+       int c = 10;
+       bar (&a, &b, &c);
+       if (a + b + c == 22)
+ 	[[gnu::musttail]] return foo (x);
+       bar (&a, &b, &c);
+     }
+     bar (&a, &b, &a);
+   }
+   bar (&a, &a, &a);
+   return 42;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/asan/pr120608-4.c gcc-16-20250706/gcc/testsuite/c-c++-common/asan/pr120608-4.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/asan/pr120608-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/c-c++-common/asan/pr120608-4.c	Sun Jul  6 22:32:12 2025
***************
*** 0 ****
--- 1,30 ----
+ /* PR middle-end/120608 */
+ /* { dg-do compile { target musttail } } */
+ /* { dg-options "-fsanitize=address -fno-exceptions" } */
+ 
+ [[gnu::noipa]] void
+ bar (int *x, int *y, int *z)
+ {
+   (void) x;
+   (void) y;
+   (void) z;
+ }
+ 
+ [[gnu::noipa]] int
+ baz (int x)
+ {
+   int a = 4;
+   {
+     int b = 8;
+     {
+       int c = 10;
+       bar (&a, &b, &c);
+       if (a + b + c + x == 22)
+ 	[[gnu::musttail]] return baz (x - 1);
+       bar (&a, &b, &c);
+     }
+     bar (&a, &b, &a);
+   }
+   bar (&a, &a, &a);
+   return 42;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-1.c gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-1.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-1.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json" } */
- 
- #error message
- 
- /* { dg-begin-multiline-output "" }
- [{"kind": "error",
-   "message": "#error message",
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 4,
-                            "display-column": 2,
-                            "byte-column": 2,
-                            "column": 2},
-                  "finish": {"file":
-                             "line": 4,
-                             "display-column": 6,
-                             "byte-column": 6,
-                             "column": 6}}],
-   "escape-source": false}]
-    { dg-end-multiline-output "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-2.c gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-2.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-2.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json" } */
- 
- #warning message
- 
- /* { dg-begin-multiline-output "" }
- [{"kind": "warning",
-   "message": "#warning message",
-   "option": "-Wcpp",
-    { dg-end-multiline-output "" } */
- /* { dg-regexp "  \"option_url\": \"https:\[^\n\r\"\]*#index-Wcpp\",\n" } */
- /* { dg-begin-multiline-output "" }
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 4,
-                            "display-column": 2,
-                            "byte-column": 2,
-                            "column": 2},
-                  "finish": {"file":
-                             "line": 4,
-                             "display-column": 8,
-                             "byte-column": 8,
-                             "column": 8}}],
-   "escape-source": false}]
-    { dg-end-multiline-output "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-3.c gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-3.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-3.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json -Werror" } */
- 
- #warning message
- 
- /* { dg-begin-multiline-output "" }
- [{"kind": "error",
-   "message": "#warning message",
-   "option": "-Werror=cpp",
-    { dg-end-multiline-output "" } */
- /* { dg-regexp "  \"option_url\": \"https:\[^\n\r\"\]*#index-Wcpp\",\n" } */
- /* { dg-begin-multiline-output "" }
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 4,
-                            "display-column": 2,
-                            "byte-column": 2,
-                            "column": 2},
-                  "finish": {"file":
-                             "line": 4,
-                             "display-column": 8,
-                             "byte-column": 8,
-                             "column": 8}}],
-   "escape-source": false}]
-    { dg-end-multiline-output "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-4.c gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-4.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-4.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json -Wmisleading-indentation" } */
- 
- int test (void)
- {
-   if (1)
-     return 3;
-     return 4;
-   return 5;
- }
- 
- /* { dg-begin-multiline-output "" }
- [{"kind": "warning",
-   "message": "this 'if' clause does not guard...",
-   "option": "-Wmisleading-indentation",
-    { dg-end-multiline-output "" } */
- /* { dg-regexp "  \"option_url\": \"https:\[^\n\r\"\]*#index-Wmisleading-indentation\",\n" } */
- /* { dg-begin-multiline-output "" }
-   "children": [{"kind": "note",
-                 "message": "...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'",
-                 "locations": [{"caret": {"file":
-                                          "line": 8,
-                                          "display-column": 5,
-                                          "byte-column": 5,
-                                          "column": 5},
-                                "finish": {"file":
-                                           "line": 8,
-                                           "display-column": 10,
-                                           "byte-column": 10,
-                                           "column": 10}}],
-                 "escape-source": false}],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 6,
-                            "display-column": 3,
-                            "byte-column": 3,
-                            "column": 3},
-                  "finish": {"file":
-                             "line": 6,
-                             "display-column": 4,
-                             "byte-column": 4,
-                             "column": 4}}],
-   "escape-source": false}]
-    { dg-end-multiline-output "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-5.c gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-5.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-5.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,38 ****
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json" } */
- 
- struct s { int color; };
- 
- int test (struct s *ptr)
- {
-   return ptr->colour;
- }
- 
- /* { dg-begin-multiline-output "" }
- [{"kind": "error",
-   "message": "'struct s' has no member named 'colour'; did you mean 'color'?",
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 8,
-                            "display-column": 15,
-                            "byte-column": 15,
-                            "column": 15},
-                  "finish": {"file":
-                             "line": 8,
-                             "display-column": 20,
-                             "byte-column": 20,
-                             "column": 20}}],
-   "fixits": [{"start": {"file":
-                         "line": 8,
-                         "display-column": 15,
-                         "byte-column": 15,
-                         "column": 15},
-               "next": {"file":
-                        "line": 8,
-                        "display-column": 21,
-                        "byte-column": 21,
-                        "column": 21},
-               "string": "color"}],
-   "escape-source": false}]
-    { dg-end-multiline-output "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-file-1.c gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-file-1.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-file-1.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-file-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,8 ****
- /* Check that -fdiagnostics-format=json-file works.  */
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json-file" } */
- 
- #warning message
- 
- /* Verify that some JSON was written to a file with the expected name.  */
- /* { dg-final { scan-file "diagnostic-format-json-file-1.c.gcc.json" "\"message\": \"#warning message\"" } } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-stderr-1.c gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-stderr-1.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/diagnostic-format-json-stderr-1.c	Sun Jun 29 22:32:35 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/diagnostic-format-json-stderr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /* Check that "json" and "json-stderr" are synonymous when used as
-    arguments to "-fdiagnostics-format=".  */
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json-stderr" } */
- 
- #error message
- 
- /* { dg-begin-multiline-output "" }
- [{"kind": "error",
-   "message": "#error message",
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 6,
-                            "display-column": 2,
-                            "byte-column": 2,
-                            "column": 2},
-                  "finish": {"file":
-                             "line": 6,
-                             "display-column": 6,
-                             "byte-column": 6,
-                             "column": 6}}],
-   "escape-source": false}]
-    { dg-end-multiline-output "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device.c gcc-16-20250706/gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device.c	Sun Jun 29 22:32:36 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device.c	Sun Jul  6 22:32:12 2025
*************** int f()
*** 25,32 ****
  
  /* { dg-final { scan-tree-dump-not "abort" "optimized" } }  */
  
! /* { dg-final { scan-tree-dump-not "omp_get_num_devices;" "optimized" { target { ! offloading_enabled } } } }  */
  /* { dg-final { scan-tree-dump "return 0;" "optimized" { target { ! offloading_enabled } } } }  */
  
! /* { dg-final { scan-tree-dump-times "omp_get_num_devices;" 1 "optimized" { target offloading_enabled } } }  */
  /* { dg-final { scan-tree-dump "_1 = __builtin_omp_get_num_devices \\(\\);\[\\r\\n\]+\[ \]+return _1;" "optimized" { target offloading_enabled } } }  */
--- 25,32 ----
  
  /* { dg-final { scan-tree-dump-not "abort" "optimized" } }  */
  
! /* { dg-final { scan-tree-dump-not "omp_get_num_devices" "optimized" { target { ! offloading_enabled } } } }  */
  /* { dg-final { scan-tree-dump "return 0;" "optimized" { target { ! offloading_enabled } } } }  */
  
! /* { dg-final { scan-tree-dump-times "omp_get_num_devices" 1 "optimized" { target offloading_enabled } } }  */
  /* { dg-final { scan-tree-dump "_1 = __builtin_omp_get_num_devices \\(\\);\[\\r\\n\]+\[ \]+return _1;" "optimized" { target offloading_enabled } } }  */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/pr106133.c gcc-16-20250706/gcc/testsuite/c-c++-common/pr106133.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/pr106133.c	Sun Jun 29 22:32:36 2025
--- gcc-16-20250706/gcc/testsuite/c-c++-common/pr106133.c	Thu Jan  1 00:00:00 1970
***************
*** 1,3 ****
- /* PR middle-end/106133 */
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json-file -E" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/ubsan/nonnull-8.c gcc-16-20250706/gcc/testsuite/c-c++-common/ubsan/nonnull-8.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/ubsan/nonnull-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/c-c++-common/ubsan/nonnull-8.c	Sun Jul  6 22:32:12 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do run } */
+ /* { dg-options "-fsanitize=undefined -fno-sanitize-recover=undefined" } */
+ 
+ __attribute__((noipa, nonnull_if_nonzero (1, 4, 7)))
+ __attribute__((nonnull (3), nonnull_if_nonzero (5, 2, 6))) void
+ foo (void *a, unsigned long b, void *c, int d, void *e, unsigned long f, int g)
+ {
+   (void) a;
+   (void) b;
+   (void) c;
+   (void) d;
+   (void) e;
+   (void) f;
+   (void) g;
+ }
+ 
+ __attribute__((noipa))
+ void
+ bar (void *a, unsigned long b, void *c, int d, void *e, unsigned long f, int g)
+ {
+   foo (a, b, c, d, e, f, g);
+ }
+ 
+ int
+ main ()
+ {
+   char x;
+   bar (&x, 42, &x, 1, &x, 2, 3);
+   bar (0, 0, &x, 0, 0, 0, 0);
+   bar (0, 5, &x, 4, 0, 0, 0);
+   bar (0, 0, &x, 0, 0, 6, 7);
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/c-c++-common/ubsan/nonnull-9.c gcc-16-20250706/gcc/testsuite/c-c++-common/ubsan/nonnull-9.c
*** gcc-16-20250629/gcc/testsuite/c-c++-common/ubsan/nonnull-9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/c-c++-common/ubsan/nonnull-9.c	Sun Jul  6 22:32:12 2025
***************
*** 0 ****
--- 1,41 ----
+ /* { dg-do run } */
+ /* { dg-options "-fsanitize=nonnull-attribute" } */
+ 
+ __attribute__((noipa, nonnull_if_nonzero (1, 4, 7)))
+ __attribute__((nonnull (3), nonnull_if_nonzero (5, 2, 6))) void
+ foo (void *a, unsigned long b, void *c, int d, void *e, unsigned long f, int g)
+ {
+   (void) a;
+   (void) b;
+   (void) c;
+   (void) d;
+   (void) e;
+   (void) f;
+   (void) g;
+ }
+ 
+ __attribute__((noipa))
+ void
+ bar (void *a, unsigned long b, void *c, int d, void *e, unsigned long f, int g)
+ {
+   foo (a, b, c, d, e, f, g);
+ }
+ 
+ int
+ main ()
+ {
+   char x;
+   bar (&x, 42, 0, 1, &x, 17, 18);
+   bar (0, 25, &x, 7, &x, 0, 8);
+   bar (&x, -82, &x, 68, 0, 9, 0);
+   foo (&x, 42, 0, 1, &x, 17, 18);
+   foo (0, 25, &x, 7, &x, 0, 8);
+   foo (&x, -82, &x, 68, 0, 9, 0);
+ }
+ 
+ /* { dg-output "\.c:21:\[0-9]*:\[^\n\r]*null pointer passed as argument 3, which is declared to never be null\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*\.c:21:\[0-9]*:\[^\n\r]*null pointer passed as argument 1, which is declared to never be null\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*\.c:21:\[0-9]*:\[^\n\r]*null pointer passed as argument 5, which is declared to never be null\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*\.c:31:\[0-9]*:\[^\n\r]*null pointer passed as argument 3, which is declared to never be null\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*\.c:32:\[0-9]*:\[^\n\r]*null pointer passed as argument 1, which is declared to never be null\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*\.c:33:\[0-9]*:\[^\n\r]*null pointer passed as argument 5, which is declared to never be null" } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob gcc-16-20250706/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob
*** gcc-16-20250629/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob	Sun Jun 29 22:32:37 2025
--- gcc-16-20250706/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob	Sun Jul  6 22:32:12 2025
***************
*** 5,12 ****
         ENVIRONMENT      DIVISION.
         CONFIGURATION    SECTION.
         REPOSITORY.
!            FUNCTION     PI
!            FUNCTION     E.
         DATA             DIVISION.
         WORKING-STORAGE  SECTION.
         01  Z            PIC 99V99.
--- 5,12 ----
         ENVIRONMENT      DIVISION.
         CONFIGURATION    SECTION.
         REPOSITORY.
!            FUNCTION     PI INTRINSIC
!            FUNCTION     E  INTRINSIC.
         DATA             DIVISION.
         WORKING-STORAGE  SECTION.
         01  Z            PIC 99V99.
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/asan/pr120608-3.C gcc-16-20250706/gcc/testsuite/g++.dg/asan/pr120608-3.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/asan/pr120608-3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/asan/pr120608-3.C	Sun Jul  6 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ // PR middle-end/120608
+ // { dg-do compile { target musttail } }
+ // { dg-options "-fsanitize=address" }
+ 
+ #include "../../c-c++-common/asan/pr120608-3.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/asan/pr120608-4.C gcc-16-20250706/gcc/testsuite/g++.dg/asan/pr120608-4.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/asan/pr120608-4.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/asan/pr120608-4.C	Sun Jul  6 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ // PR middle-end/120608
+ // { dg-do compile { target musttail } }
+ // { dg-options "-fsanitize=address" }
+ 
+ #include "../../c-c++-common/asan/pr120608-4.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3.C gcc-16-20250706/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3.C	Sun Jul  6 22:32:13 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/120716
+ // { dg-do compile { target c++11 } }
+ 
+ struct A { int *r; };
+ 
+ void
+ foo ()
+ {
+   static int i;
+   constexpr A a = { &i };
+   static_assert (a.r == &i, "");
+   [&] { static_assert (a.r != nullptr, ""); } ();
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3a.C gcc-16-20250706/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3a.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-constexpr3a.C	Sun Jul  6 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/120716
+ // { dg-do compile { target c++11 } }
+ 
+ struct A { int *const &r; };
+ 
+ void
+ foo (int x)
+ {
+   constexpr A a = { &x };	// { dg-error "constant" }
+   static_assert (a.r == &x, "");	// { dg-error "non-constant" }
+   [&] { static_assert (a.r != nullptr, ""); } (); // { dg-error "non-constant" }
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/cpp0x/this1.C gcc-16-20250706/gcc/testsuite/g++.dg/cpp0x/this1.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/cpp0x/this1.C	Sun Jun 29 22:32:48 2025
--- gcc-16-20250706/gcc/testsuite/g++.dg/cpp0x/this1.C	Sun Jul  6 22:32:13 2025
*************** struct S1 {
*** 8,17 ****
    void m3 () noexcept(noexcept(this->a)) { }
    void m4 () noexcept(noexcept(this)) { }
  
!   static auto m5 () -> decltype(this->a) { return 0; } // { dg-error ".this. may not be used in this context" }
!   static auto m6 () -> decltype(this) { return 0; } // { dg-error ".this. may not be used in this context" }
!   static void m7 () noexcept(noexcept(this->a)) { } // { dg-error ".this. may not be used in this context" }
!   static void m8 () noexcept(noexcept(this)) { } // { dg-error ".this. may not be used in this context" }
  };
  
  template <typename T>
--- 8,17 ----
    void m3 () noexcept(noexcept(this->a)) { }
    void m4 () noexcept(noexcept(this)) { }
  
!   static auto m5 () -> decltype(this->a) { return 0; } // { dg-error ".this." }
!   static auto m6 () -> decltype(this) { return 0; } // { dg-error ".this." }
!   static void m7 () noexcept(noexcept(this->a)) { } // { dg-error ".this." }
!   static void m8 () noexcept(noexcept(this)) { } // { dg-error ".this." }
  };
  
  template <typename T>
*************** test ()
*** 41,46 ****
  }
  
  struct S5 {
!   friend auto bar() -> decltype(this); // { dg-error ".this. may not be used in this context" }
    auto bar2() -> decltype(this);
  };
--- 41,46 ----
  }
  
  struct S5 {
!   friend auto bar() -> decltype(this); // { dg-error ".this." }
    auto bar2() -> decltype(this);
  };
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/cpp23/range-for10.C gcc-16-20250706/gcc/testsuite/g++.dg/cpp23/range-for10.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/cpp23/range-for10.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/cpp23/range-for10.C	Sun Jul  6 22:32:13 2025
***************
*** 0 ****
--- 1,23 ----
+ // PR c++/120684
+ // { dg-do compile { target c++20 } }
+ 
+ struct basic_string {
+   constexpr ~basic_string() {}
+ };
+ template <typename _Vp> struct lazy_split_view {
+   _Vp _M_base;
+   constexpr int* begin() { return nullptr; }
+   constexpr int* end() { return nullptr; }
+ };
+ constexpr void test_with_piping() {
+   basic_string input;
+   for (auto e : lazy_split_view(input))
+     ;
+ }
+ constexpr bool main_test() {
+   test_with_piping();
+   test_with_piping();
+   return true;
+ }
+ //int main() { main_test(); }
+ static_assert(main_test());
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/cpp2a/lambda-targ16.C gcc-16-20250706/gcc/testsuite/g++.dg/cpp2a/lambda-targ16.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/cpp2a/lambda-targ16.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/cpp2a/lambda-targ16.C	Sun Jul  6 22:32:16 2025
***************
*** 0 ****
--- 1,29 ----
+ // PR c++/120748
+ // From Clang cxx20-lambda-decltype-this.cpp.
+ // { dg-do compile { target c++20 } }
+ 
+ namespace PR45881 {
+ struct A {
+     void f();
+ };
+ int id(A*);
+ void A::f() {
+     auto z = [*this](auto z2, decltype(z2(this)) z3){};
+     z(id,3);
+ }
+ 
+ struct B {
+     void f();
+ };
+ void B::f() {
+     auto z = []<typename TT, typename TTT=decltype(TT()(this))>(){return 0;};
+     z.template operator()<int(*)(B*)>();
+ }
+ struct C {
+     void f();
+ };
+ void C::f() {
+     auto z = []<typename TT, decltype(TT()(this)) n>(){return 0;};
+     z.template operator()<int(*)(C*), 8>();
+ }
+ } // namespace PR45881
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/parse/pr120471.C gcc-16-20250706/gcc/testsuite/g++.dg/parse/pr120471.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/parse/pr120471.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/parse/pr120471.C	Sun Jul  6 22:32:22 2025
***************
*** 0 ****
--- 1,42 ----
+ // PR c++/120471
+ // { dg-do compile }
+ 
+ extern int a1[], a2[], a3[], a4[];
+ 
+ int corge (int);
+ 
+ int
+ foo (int p)
+ {
+   return (p ? a1 : a2)[1];
+ }
+ 
+ int
+ bar (int p, int q)
+ {
+   return (p ? a1 : a2)[q];
+ }
+ 
+ int
+ garply (int p, int q)
+ {
+   return (p ? a1 : a2)[corge (q)];
+ }
+ 
+ int
+ baz (int p, int q)
+ {
+   return (p ? q ? a1 : a2 : q ? a3 : a4)[1];
+ }
+ 
+ int
+ qux (int p, int q, int r)
+ {
+   return (p ? q ? a1 : a2 : q ? a3 : a4)[r];
+ }
+ 
+ int
+ fred (int p, int q, int r)
+ {
+   return (p ? q ? a1 : a2 : q ? a3 : a4)[corge (r)];
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/parse/pr120940.C gcc-16-20250706/gcc/testsuite/g++.dg/parse/pr120940.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/parse/pr120940.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/parse/pr120940.C	Sun Jul  6 22:32:22 2025
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/120940
+ // { dg-do run }
+ 
+ int a[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
+ int b[8] = { 9, 10, 11, 12, 13, 14, 15, 16 };
+ 
+ __attribute__((noipa)) int
+ foo (int x, int y)
+ {
+   return (x ? a : b)[y];
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (1, 4) != 5 || foo (0, 6) != 15)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/pr90462.C gcc-16-20250706/gcc/testsuite/g++.dg/pr90462.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/pr90462.C	Sun Jun 29 22:32:53 2025
--- gcc-16-20250706/gcc/testsuite/g++.dg/pr90462.C	Thu Jan  1 00:00:00 1970
***************
*** 1,49 ****
- /* { dg-options "-Wdeprecated-copy -fno-diagnostics-json-formatting -fdiagnostics-format=json" } */
- 
- template <class> class b;
- struct B {
-   typedef b<char> *c;
- };
- class d {
- public:
-   B::c operator->();
- };
- template <class> struct e;
- class f {
-   typedef int g;
- };
- template <class, class> class h;
- template <class i> class b {
- public:
-   i j;
-   i k;
-   int l;
-   void assign() {
-     int m;
-     h<i, int> n(&m);
-     n.o(&j, &k, l);
-   }
- };
- template <class i, class> class s : f { s &p(const i *, const i *, g); };
- template <class i, class t> s<i, t> &s<i, t>::p(const i *, const i *, g) {
-   d q;
-   q->assign();
- }
- struct G {
-   G();
-   G(int);
-   G(G &);
- };
- template <class i, class> class h {
- public:
-   h(int *);
-   void o(const i *, const i *, unsigned);
-   i r();
- };
- template <class i, class t> void h<i, t>::o(const i *, const i *, unsigned) {
-   G a;
-   a = r();
- }
- template s<char, e<char>> &s<char, e<char>>::p(const char *, const char *, g);
- 
- /* { dg-regexp ".*" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/template/permissive-error3.C gcc-16-20250706/gcc/testsuite/g++.dg/template/permissive-error3.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/template/permissive-error3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/template/permissive-error3.C	Sun Jul  6 22:32:23 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/120575
+ // { dg-additional-options -Wno-template-body }
+ 
+ template< int >
+ struct T {};
+ 
+ template< int >
+ struct S {
+ 
+   operator typename T< oops >::anything () {};
+ 
+ };
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/ubsan/pr120471.C gcc-16-20250706/gcc/testsuite/g++.dg/ubsan/pr120471.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/ubsan/pr120471.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/ubsan/pr120471.C	Sun Jul  6 22:32:23 2025
***************
*** 0 ****
--- 1,21 ----
+ // PR c++/120471
+ // { dg-do run }
+ // { dg-options "-fsanitize=undefined" }
+ 
+ volatile int b[1], a[1];
+ 
+ void
+ foo (int x)
+ {
+   volatile int c = 21;
+   volatile int v = (x % 2 ? b : a)[c % 3];
+   if (v != 0)
+     __builtin_abort ();
+ }
+ 
+ int
+ main ()
+ {
+   foo (1);
+   foo (2);
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C gcc-16-20250706/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C
*** gcc-16-20250629/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C	Sun Jul  6 22:32:23 2025
***************
*** 0 ****
--- 1,11 ----
+ // PR c++/120940
+ // { dg-do compile }
+ // { dg-options "-Wduplicated-branches" }
+ 
+ static char a[16][8], b[16][8];
+ 
+ char *
+ foo (int x, int y)
+ {
+   return (x ? a : b)[y];
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr101366-1.C gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr101366-1.C
*** gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr101366-1.C	Sun Jun 29 22:32:56 2025
--- gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr101366-1.C	Sun Jul  6 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64-v2 -std=gnu++17" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64-v2 -std=gnu++17 -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr101366-2.C gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr101366-2.C
*** gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr101366-2.C	Sun Jun 29 22:32:56 2025
--- gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr101366-2.C	Sun Jul  6 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64-v2 -std=gnu++17" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64-v2 -std=gnu++17 -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr108585-1a.C gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr108585-1a.C
*** gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr108585-1a.C	Sun Jun 29 22:32:56 2025
--- gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr108585-1a.C	Sun Jul  6 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++20 -DUSE_CHAR" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++20 -fasynchronous-unwind-tables -fdwarf2-cfi-asm -mno-stackrealign -fomit-frame-pointer -DUSE_CHAR" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr108585-1b.C gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr108585-1b.C
*** gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr108585-1b.C	Sun Jun 29 22:32:56 2025
--- gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr108585-1b.C	Sun Jul  6 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++20" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++20 -fasynchronous-unwind-tables -fdwarf2-cfi-asm -mno-stackrealign -fomit-frame-pointer" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr118276-1a.C gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr118276-1a.C
*** gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr118276-1a.C	Sun Jun 29 22:32:56 2025
--- gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr118276-1a.C	Sun Jul  6 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++17 -DMODE=0" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++17 -fasynchronous-unwind-tables -fdwarf2-cfi-asm -DMODE=0" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr118276-1b.C gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr118276-1b.C
*** gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr118276-1b.C	Sun Jun 29 22:32:56 2025
--- gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr118276-1b.C	Sun Jul  6 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++17 -DMODE=1" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++17 -fasynchronous-unwind-tables -fdwarf2-cfi-asm -DMODE=1" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr118276-1c.C gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr118276-1c.C
*** gcc-16-20250629/gcc/testsuite/g++.target/i386/memset-pr118276-1c.C	Sun Jun 29 22:32:56 2025
--- gcc-16-20250706/gcc/testsuite/g++.target/i386/memset-pr118276-1c.C	Sun Jul  6 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++17 -DMODE=2" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=x86-64 -std=c++17 -fasynchronous-unwind-tables -fdwarf2-cfi-asm -DMODE=2" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.c-torture/compile/pr120807.c gcc-16-20250706/gcc/testsuite/gcc.c-torture/compile/pr120807.c
*** gcc-16-20250629/gcc/testsuite/gcc.c-torture/compile/pr120807.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.c-torture/compile/pr120807.c	Sun Jul  6 22:32:25 2025
***************
*** 0 ****
--- 1,20 ----
+ typedef __UINT8_TYPE__ uint8_t;
+ typedef __UINT32_TYPE__ uint32_t;
+ 
+ typedef struct
+ {
+   uint32_t dword[2];
+   uint8_t byte[8];
+ } reg64_t;
+ reg64_t TestF20F_opgd, TestF20F_oped;
+ 
+ void
+ TestF20F ()
+ {
+   TestF20F_opgd.dword[0] ^= TestF20F_oped.byte[0];
+   for (int i = 0; i < 8; i++)
+     if (TestF20F_opgd.dword[0] & 1)
+       TestF20F_opgd.dword[0] = TestF20F_opgd.dword[0] >> 1 ^ (uint32_t)2197175160UL;
+     else
+       TestF20F_opgd.dword[0] = TestF20F_opgd.dword[0] >> 1;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-pr120780.c gcc-16-20250706/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-pr120780.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-pr120780.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-pr120780.c	Sun Jul  6 22:32:26 2025
***************
*** 0 ****
--- 1,233 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #include "builtin-object-size-common.h"
+ typedef __SIZE_TYPE__ size_t;
+ #define NUM_MCAST_RATE 6
+ 
+ #define MIN(a,b) ((a) < (b) ? (a) : (b))
+ #define MAX(a,b) ((a) > (b) ? (a) : (b))
+ 
+ struct inner
+ {
+   int dummy[4];
+ };
+ 
+ struct container
+ {
+   int mcast_rate[NUM_MCAST_RATE];
+   struct inner mesh;
+ };
+ 
+ static void
+ test1_child (struct inner *ifmsh, size_t expected)
+ { 
+   struct container *sdata =
+     (struct container *) ((void *) ifmsh
+ 			  - __builtin_offsetof (struct container, mesh));
+ 
+   if (__builtin_dynamic_object_size (sdata->mcast_rate, 1)
+       != sizeof (sdata->mcast_rate))
+     FAIL ();
+ 
+   if (__builtin_dynamic_object_size (&sdata->mesh, 1) != expected)
+     FAIL ();
+ }
+ 
+ void
+ __attribute__((noinline))
+ test1 (size_t sz)
+ {
+   struct container *sdata = __builtin_malloc (sz);
+   struct inner *ifmsh = &sdata->mesh;
+ 
+   test1_child (ifmsh,
+ 	       (sz > sizeof (sdata->mcast_rate)
+ 		? sz - sizeof (sdata->mcast_rate) : 0));
+ 
+   __builtin_free (sdata);
+ }
+ 
+ struct container2
+ {
+   int mcast_rate[NUM_MCAST_RATE];
+   union
+     {
+       int dummy;
+       double dbl;
+       struct inner mesh;
+     } u;
+ };
+ 
+ static void
+ test2_child (struct inner *ifmsh, size_t sz)
+ { 
+   struct container2 *sdata =
+     (struct container2 *) ((void *) ifmsh
+ 			   - __builtin_offsetof (struct container2, u.mesh));
+ 
+   if (__builtin_dynamic_object_size (sdata->mcast_rate, 1)
+       != sizeof (sdata->mcast_rate))
+     FAIL ();
+ 
+   size_t diff = sizeof (*sdata) - sz;
+   size_t expected = MIN(sizeof (double), MAX (sizeof (sdata->u), diff) - diff);
+ 
+   if (__builtin_dynamic_object_size (&sdata->u.dbl, 1) != expected)
+     FAIL ();
+ 
+   expected = MAX (sizeof (sdata->u.mesh), diff) - diff;
+   if (__builtin_dynamic_object_size (&sdata->u.mesh, 1) != expected)
+     FAIL ();
+ }
+ 
+ void
+ __attribute__((noinline))
+ test2 (size_t sz)
+ {
+   struct container2 *sdata = __builtin_malloc (sz);
+   struct inner *ifmsh = &sdata->u.mesh;
+ 
+   test2_child (ifmsh, sz);;
+ 
+   __builtin_free (sdata);
+ }
+ 
+ struct container3
+ {
+   int mcast_rate[NUM_MCAST_RATE];
+   char mesh[8];
+ };
+ 
+ static void
+ test3_child (char ifmsh[], size_t expected)
+ { 
+   struct container3 *sdata =
+     (struct container3 *) ((void *) ifmsh
+ 			   - __builtin_offsetof (struct container3, mesh));
+ 
+   if (__builtin_dynamic_object_size (sdata->mcast_rate, 1)
+       != sizeof (sdata->mcast_rate))
+     FAIL ();
+ 
+   if (__builtin_dynamic_object_size (sdata->mesh, 1) != expected)
+     FAIL ();
+ }
+ 
+ void
+ __attribute__((noinline))
+ test3 (size_t sz)
+ {
+   struct container3 *sdata = __builtin_malloc (sz);
+   char *ifmsh = sdata->mesh;
+   size_t diff = sizeof (*sdata) - sz;
+ 
+   test3_child (ifmsh, MAX(sizeof (sdata->mesh), diff) - diff);
+ 
+   __builtin_free (sdata);
+ }
+ 
+ 
+ struct container4
+ {
+   int mcast_rate[NUM_MCAST_RATE];
+   struct
+     {
+       int dummy;
+       struct inner mesh;
+     } s;
+ };
+ 
+ static void
+ test4_child (struct inner *ifmsh, size_t expected)
+ { 
+   struct container4 *sdata =
+     (struct container4 *) ((void *) ifmsh
+ 			   - __builtin_offsetof (struct container4, s.mesh));
+ 
+ 
+   if (__builtin_dynamic_object_size (sdata->mcast_rate, 1)
+       != sizeof (sdata->mcast_rate))
+     FAIL ();
+ 
+   if (__builtin_dynamic_object_size (&sdata->s.mesh, 1) != expected)
+     FAIL ();
+ }
+ 
+ void
+ __attribute__((noinline))
+ test4 (size_t sz)
+ {
+   struct container4 *sdata = __builtin_malloc (sz);
+   struct inner *ifmsh = &sdata->s.mesh;
+   size_t diff = sizeof (*sdata) - sz;
+ 
+   test4_child (ifmsh, MAX(sizeof (sdata->s.mesh), diff) - diff);
+ 
+   __builtin_free (sdata);
+ }
+ 
+ struct container5
+ {
+   int mcast_rate[NUM_MCAST_RATE];
+   struct
+     {
+       int dummy;
+       struct inner *mesh;
+     } s;
+ };
+ 
+ static void
+ test5_child (struct inner **ifmsh, size_t expected)
+ { 
+   struct container5 *sdata =
+     (struct container5 *) ((void *) ifmsh
+ 			   - __builtin_offsetof (struct container5, s.mesh));
+ 
+ 
+   if (__builtin_dynamic_object_size (sdata->mcast_rate, 1)
+       != sizeof (sdata->mcast_rate))
+     FAIL ();
+ 
+   if (__builtin_dynamic_object_size (&sdata->s.mesh, 1) != expected)
+     FAIL ();
+ }
+ 
+ void
+ __attribute__((noinline))
+ test5 (size_t sz)
+ {
+   struct container5 *sdata = __builtin_malloc (sz);
+   struct inner **ifmsh = &sdata->s.mesh;
+   size_t diff = sizeof (*sdata) - sz;
+ 
+   test5_child (ifmsh, MAX(sizeof (sdata->s.mesh), diff) - diff);
+ 
+   __builtin_free (sdata);
+ }
+ 
+ int
+ main (size_t sz)
+ {
+   test1 (sizeof (struct container));
+   test1 (sizeof (struct container) - sizeof (int));
+   test1 (sizeof (int) * NUM_MCAST_RATE - 1);
+ 
+   test2 (sizeof (struct container2));
+   test2 (sizeof (struct container2) - sizeof (int));
+   test2 (sizeof (int) * NUM_MCAST_RATE - 1);
+ 
+   test3 (sizeof (struct container3));
+   test3 (sizeof (struct container3) - sizeof (int));
+   test3 (sizeof (int) * NUM_MCAST_RATE - 1);
+ 
+   test4 (sizeof (struct container4));
+   test4 (sizeof (struct container4) - sizeof (int));
+   test4 (sizeof (int) * NUM_MCAST_RATE - 1);
+ 
+   test5 (sizeof (struct container5));
+   test5 (sizeof (struct container5) - sizeof (int));
+   test5 (sizeof (int) * NUM_MCAST_RATE - 1);
+ 
+   DONE ();
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/dfp/bitint-10.c gcc-16-20250706/gcc/testsuite/gcc.dg/dfp/bitint-10.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/dfp/bitint-10.c	Sun Jun 29 22:33:01 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/dfp/bitint-10.c	Sun Jul  6 22:32:26 2025
***************
*** 1,5 ****
  /* PR middle-end/120631 */
! /* { dg-do run { target bitint } } */
  /* { dg-options "-O2" } */
  
  #if __BITINT_MAXWIDTH__ >= 128
--- 1,5 ----
  /* PR middle-end/120631 */
! /* { dg-require-effective-target bitint } */
  /* { dg-options "-O2" } */
  
  #if __BITINT_MAXWIDTH__ >= 128
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/dfp/bitint-9.c gcc-16-20250706/gcc/testsuite/gcc.dg/dfp/bitint-9.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/dfp/bitint-9.c	Sun Jun 29 22:33:01 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/dfp/bitint-9.c	Sun Jul  6 22:32:26 2025
***************
*** 1,5 ****
  /* PR middle-end/120631 */
! /* { dg-do run { target bitint } } */
  /* { dg-options "-O2" } */
  
  #if __BITINT_MAXWIDTH__ >= 2048
--- 1,5 ----
  /* PR middle-end/120631 */
! /* { dg-require-effective-target bitint } */
  /* { dg-options "-O2" } */
  
  #if __BITINT_MAXWIDTH__ >= 2048
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/dfp/pr120631.c gcc-16-20250706/gcc/testsuite/gcc.dg/dfp/pr120631.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/dfp/pr120631.c	Sun Jun 29 22:33:01 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/dfp/pr120631.c	Sun Jul  6 22:32:26 2025
***************
*** 1,5 ****
  /* PR middle-end/120631 */
- /* { dg-do run } */
  /* { dg-options "-O2" } */
  
  _Decimal64 a = 1234567891357900000.0dd;
--- 1,4 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/flex-array-counted-by.c gcc-16-20250706/gcc/testsuite/gcc.dg/flex-array-counted-by.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/flex-array-counted-by.c	Sun Jun 29 22:33:02 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/flex-array-counted-by.c	Sun Jul  6 22:32:26 2025
*************** int x __attribute ((counted_by (size)));
*** 10,16 ****
  
  struct trailing {
    int count;
!   int field __attribute ((counted_by (count))); /* { dg-error "attribute is not allowed for a non-array field" } */
  };
  
  struct trailing_1 {
--- 10,16 ----
  
  struct trailing {
    int count;
!   int field __attribute ((counted_by (count))); /* { dg-error "attribute is not allowed for a non-array or non-pointer field" } */
  };
  
  struct trailing_1 {
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ipa/pr119318.c gcc-16-20250706/gcc/testsuite/gcc.dg/ipa/pr119318.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ipa/pr119318.c	Sun Jun 29 22:33:08 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ipa/pr119318.c	Sun Jul  6 22:32:27 2025
*************** int
*** 30,37 ****
  main ()
  {
    W x = foo (0, (V) { 0, 5 });
!   for (unsigned i = 0; i < sizeof(x)/sizeof(x[0]); i++)
      if (x[i] != (i ? 0 : 0x1900000000))
!       __builtin_abort();
    return 0;
  }
--- 30,43 ----
  main ()
  {
    W x = foo (0, (V) { 0, 5 });
!   for (unsigned i = 0; i < sizeof (x) / sizeof (x[0]); i++)
! #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_INT__ == 4 && __SIZEOF_INT128__ == 16
      if (x[i] != (i ? 0 : 0x1900000000))
! #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_INT__ == 4 && __SIZEOF_INT128__ == 16
!     if (x[i] != (i ? 0 : ((__int128) 0x19) << 64))
! #else
!     if (0)
! #endif
!       __builtin_abort ();
    return 0;
  }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ipa/pr120295.c gcc-16-20250706/gcc/testsuite/gcc.dg/ipa/pr120295.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ipa/pr120295.c	Sun Jun 29 22:33:08 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ipa/pr120295.c	Sun Jul  6 22:32:27 2025
*************** char c, k, g, e;
*** 9,18 ****
  short d[2] = {0};
  int *i = &j;
  
! volatile int glob;
  void __attribute__((noipa)) sth (const char *, int a)
  {
!   glob = a;
    return;
  }
  
--- 9,18 ----
  short d[2] = {0};
  int *i = &j;
  
! volatile int glob_;
  void __attribute__((noipa)) sth (const char *, int a)
  {
!   glob_ = a;
    return;
  }
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-12.c gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-12.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-12.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-12.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,73 ----
+ /* Test for the "nonnull_if_nonzero" function attribute.  */
+ /* { dg-do compile } */
+ /* { dg-options "-Wnonnull" } */
+ 
+ #include <stddef.h>
+ 
+ extern void func1 (char *, char *, int, int)
+   __attribute__((nonnull_if_nonzero (1, 3, 4), nonnull_if_nonzero (2, 3, 4)));
+ 
+ extern void func2 (char *, char *, unsigned long, unsigned long)
+   __attribute__((nonnull_if_nonzero (1, 3, 4)));
+ 
+ enum E { E0 = 0, E1 = 1, E2 = __INT_MAX__ };
+ extern void func3 (char *, int, char *, enum E, int, enum E)
+   __attribute__((nonnull_if_nonzero (1, 4, 6), nonnull_if_nonzero (3, 2, 5)));
+ 
+ extern void func4 (long, char *, char *, long, long, long)
+   __attribute__((nonnull_if_nonzero (2, 1, 5)))
+   __attribute__((nonnull_if_nonzero (3, 4, 6)));
+ 
+ void
+ foo (int i1, int i2, int i3, char *cp1, char *cp2, char *cp3)
+ {
+   func1 (cp1, cp2, i1, i2);
+   func1 (cp1, cp2, 0, 0);
+   func1 (cp1, cp2, 42, 42);
+   func1 (NULL, NULL, 0, 0);
+   func1 (NULL, NULL, 0, 42);
+   func1 (NULL, NULL, 42, 0);
+   func1 (NULL, NULL, i1, i2);
+ 
+   func1 (NULL, cp2, 42, 42); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   func1 (cp1, NULL, 1, 1); /* { dg-warning "argument 2 null where non-null expected because arguments 3 and 4 are nonzero" } */
+ 
+   func2 (cp1, NULL, 17, 17);
+   func2 (NULL, cp2, 0, 0);
+   func2 (NULL, cp2, 0, 17);
+   func2 (NULL, cp2, 17, 0);
+   func2 (NULL, cp1, 2, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+ 
+   func3 (NULL, i2, cp3, i3, i3, i2);
+   func3 (cp1, i2, NULL, i3, i3, i2);
+   func3 (NULL, i2, cp3, E0, i3, E0);
+   func3 (NULL, i2, cp3, E0, i3, E1);
+   func3 (NULL, i2, cp3, E1, i3, E0);
+   func3 (cp1, 0, NULL, E2, 0, E2);
+   func3 (cp1, 0, NULL, E2, 4, E2);
+   func3 (cp1, 4, NULL, E2, 0, E2);
+   func3 (NULL, i2, cp3, E2, i3, E2); /* { dg-warning "argument 1 null where non-null expected because arguments 4 and 6 are nonzero" } */
+   func3 (cp3, 5, NULL, i3, 1, i2); /* { dg-warning "argument 3 null where non-null expected because arguments 2 and 5 are nonzero" } */
+ 
+   func1 (i2 ? cp1 : NULL, cp2, i3, i3);
+   func1 (i2 ? NULL : cp1, cp2, i3, i3);
+   func1 (i2 ? (i3 ? cp1 : NULL) : cp2, cp3, i1, i1);
+   func1 (i1 ? cp1 : NULL, cp2, 0, 0);
+   func1 (i1 ? cp1 : NULL, cp2, 0, 4);
+   func1 (i1 ? cp1 : NULL, cp2, 4, 0);
+   func1 (i1 ? NULL : cp1, cp2, 0, 0);
+   func1 (i1 ? NULL : cp1, cp2, 0, 2);
+   func1 (i1 ? NULL : cp1, cp2, 3, 0);
+   func1 (i1 ? (i2 ? cp1 : NULL) : cp2, cp3, 0, 0);
+   func1 (i1 ? (i2 ? cp1 : NULL) : cp2, cp3, 0, 1);
+   func1 (i1 ? (i2 ? cp1 : NULL) : cp2, cp3, 2, 0);
+   func1 (i1 ? cp1 : NULL, cp2, 1, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   func1 (i1 ? NULL : cp1, cp2, 2, 3); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   func1 (i1 ? (i2 ? cp1 : NULL) : cp2, cp3, 3, 4); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+ 
+   func4 (0, NULL, NULL, 0, 0, 0);
+   func4 (0, NULL, NULL, 0, 1, 2);
+   func4 (3, NULL, NULL, 4, 0, 0);
+   func4 (-1, NULL, cp1, 0, 42, 0); /* { dg-warning "argument 2 null where non-null expected because arguments 1 and 5 are nonzero" } */
+   func4 (0, cp1, NULL, 77, 0, 12); /* { dg-warning "argument 3 null where non-null expected because arguments 4 and 6 are nonzero" } */
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-13.c gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-13.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-13.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-13.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,210 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wnonnull" } */
+ 
+ #define N(x, y, z) __attribute__ ((nonnull_if_nonzero (x, y, z)))
+ 
+ void N (1, 2, 3) f1_1 (void *, int, int);
+ 
+ void N (1, 3, 4) f2_1 (void *, void *, int, int);
+ void N (1, 3, 4) N (2, 3, 4) f2_1_2 (void *, void *, int, int);
+ 
+ void N (1, 4, 6) N (3, 5, 7) f3_1_3 (void *, void *, void *, int, int, int, int);
+ 
+ void N (1, 5, 6) N (2, 5, 6) N (4, 5, 6) g4_1_2_4 (void *, void *, void *, void *, long, long);
+ void N (1, 5, 6) N (3, 5, 6) N (4, 5, 6) g4_1_3_4 (void *, void *, void *, void *, long, long);
+ void N (2, 5, 6) N (3, 5, 6) N (4, 5, 6) g4_2_3_4 (void *, void *, void *, void *, long, long);
+ 
+ void N (1, 17, 18) N (3, 17, 18) N (5, 17, 18) N (7, 17, 18) N (11, 17, 18) N (13, 17, 18)
+ g16_1_3_5_7_11_13 (void *, void *, void *, void *,
+ 		   void *, void *, void *, void *,
+ 		   void *, void *, void *, void *,
+ 		   void *, void *, void *, void *, int, int);
+ 
+ static void *null (void) { return 0; }
+ 
+ void
+ test (int t, long u, int v, long w)
+ {
+   void *p0 = null ();
+   void *px = &px;
+ 
+   f1_1 (p0, 0, 0);
+   f1_1 (p0, 0, 4);
+   f1_1 (p0, 3, 0);
+   f1_1 (p0, t, v);
+   f1_1 (p0, t, 0);
+   f1_1 (p0, 0, v);
+   f1_1 (p0, 42, 1); /* { dg-warning "argument 1 null where non-null expected because arguments 2 and 3 are nonzero" } */
+   if (t && v)
+     f1_1 (p0, t, v); /* { dg-warning "argument 1 null where non-null expected because arguments 2 and 3 are nonzero" } */
+   f1_1 (px, 17, 17);
+ 
+   f2_1 (p0, px, 0, 0);
+   f2_1 (p0, px, 0, 3);
+   f2_1 (p0, px, 7, 0);
+   f2_1 (p0, px, t, v);
+   f2_1 (p0, px, t, 0);
+   f2_1 (p0, px, 0, v);
+   f2_1 (p0, px, 5, 3);  /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   if (t > 4 && v > 8)
+     f2_1 (p0, px, t, v);  /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   f2_1 (px, p0, 17, 17);
+   f2_1 (p0, p0, 0, 0);
+   f2_1 (p0, p0, 0, 4);
+   f2_1 (p0, p0, 2, 0);
+   if (t < 0 && v < -3)
+     f2_1 (p0, p0, t, v);  /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+ 
+   f2_1_2 (p0, p0, 0, 0);
+   f2_1_2 (p0, p0, 0, 1);
+   f2_1_2 (p0, p0, 2, 0);
+   f2_1_2 (p0, p0, t, v);
+   f2_1_2 (p0, p0, t, 0);
+   f2_1_2 (p0, p0, 0, v);
+   f2_1_2 (p0, px, 1, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   if (t > 8 && v >= 16)
+     f2_1_2 (p0, px, t, v); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   f2_1_2 (px, p0, -3, -4); /* { dg-warning "argument 2 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   if (t < -2 && v >= 32)
+     f2_1_2 (px, p0, t, v); /* { dg-warning "argument 2 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   f2_1_2 (p0, p0, 8, 165); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   /* { dg-warning "argument 2 null where non-null expected because arguments 3 and 4 are nonzero" "argument 2" { target *-*-* } .-1 } */
+   if (t > 7 && v < -2)
+     f2_1_2 (p0, p0, t, v); /* { dg-warning "argument 1 null where non-null expected because arguments 3 and 4 are nonzero" } */
+   /* { dg-warning "argument 2 null where non-null expected because arguments 3 and 4 are nonzero" "argument 2" { target *-*-* } .-1 } */
+ 
+   f3_1_3 (p0, p0, p0, 0, 0, 0, 0);
+   f3_1_3 (p0, p0, p0, 0, 5, 4, 0);
+   f3_1_3 (p0, p0, p0, 3, 0, 0, 6);
+   f3_1_3 (p0, p0, px, 0, 6, 0, 6);
+   f3_1_3 (p0, p0, px, 0, 6, 4, 6);
+   f3_1_3 (p0, p0, px, 3, 6, 0, 6);
+   f3_1_3 (px, p0, p0, 2, 0, 2, 0);
+   f3_1_3 (px, p0, p0, 2, 0, 2, 4);
+   f3_1_3 (px, p0, p0, 2, 6, 2, 0);
+   f3_1_3 (p0, p0, p0, t, t, v, v);
+   f3_1_3 (p0, p0, px, t, 6, v, 7);
+   f3_1_3 (px, p0, p0, 2, t, 3, v);
+   f3_1_3 (p0, px, px, 8, 2, 3, 5); /* { dg-warning "argument 1 null where non-null expected because arguments 4 and 6 are nonzero" } */
+   if (t > 9 && v < -19)
+     f3_1_3 (p0, px, px, t, 3, v, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 4 and 6 are nonzero" } */
+   f3_1_3 (px, p0, px, 9, 10, 1, 2);
+   if (t > 11 && v > 3)
+     f3_1_3 (px, p0, px, t, t, v, v);
+   f3_1_3 (px, px, p0, 10, 11, 2, 3); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 7 are nonzero" } */
+   if (t < -5 && v > 2)
+     f3_1_3 (px, px, p0, 0, t, 2, v); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 7 are nonzero" } */
+   f3_1_3 (p0, p0, px, 11, 12, 1, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 4 and 6 are nonzero" } */
+   if (t > 26 && v > 88)
+     f3_1_3 (p0, p0, px, t, 3, v, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 4 and 6 are nonzero" } */
+   f3_1_3 (px, p0, p0, 12, 13, 1, 2); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 7 are nonzero" } */
+   if (t > 31 && v < -1)
+     f3_1_3 (px, p0, p0, 12, t, 2, v); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 7 are nonzero" } */
+   f3_1_3 (p0, p0, p0, 13, 14, 1, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 4 and 6 are nonzero" } */
+   /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 7 are nonzero" "argument 3" { target *-*-* } .-1 } */
+   if (t > 28 && v > 42)
+     f3_1_3 (p0, p0, p0, t, t + 1, v, v + 1); /* { dg-warning "argument 1 null where non-null expected because arguments 4 and 6 are nonzero" } */
+   /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 7 are nonzero" "argument 3" { target *-*-* } .-1 } */
+ 
+   g4_1_2_4 (p0, px, px, px, u, w);
+   g4_1_2_4 (px, p0, px, px, u, w);
+   g4_1_2_4 (px, px, p0, px, u, w);
+   g4_1_2_4 (px, px, px, p0, u, w);
+   g4_1_2_4 (p0, px, px, px, 0, 0);
+   g4_1_2_4 (p0, px, px, px, 0, 2);
+   g4_1_2_4 (p0, px, px, px, 1, 0);
+   g4_1_2_4 (px, p0, px, px, 0, 0);
+   g4_1_2_4 (px, p0, px, px, 0, 3);
+   g4_1_2_4 (px, p0, px, px, 4, 0);
+   g4_1_2_4 (px, px, p0, px, 0, 0);
+   g4_1_2_4 (px, px, p0, px, 0, 5);
+   g4_1_2_4 (px, px, p0, px, 6, 0);
+   g4_1_2_4 (px, px, px, p0, 0, 0);
+   g4_1_2_4 (px, px, px, p0, 0, 7);
+   g4_1_2_4 (px, px, px, p0, 8, 0);
+   g4_1_2_4 (p0, px, px, px, 15, 2); /* { dg-warning "argument 1 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u && w)
+     g4_1_2_4 (p0, px, px, px, u, w); /* { dg-warning "argument 1 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   g4_1_2_4 (px, p0, px, px, 16, 2); /* { dg-warning "argument 2 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u > 2 && w > 3)
+     g4_1_2_4 (px, p0, px, px, u, w); /* { dg-warning "argument 2 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   g4_1_2_4 (px, px, p0, px, 17, 8);
+   if (u > 3 && w < -2)
+     g4_1_2_4 (px, px, p0, px, u, w);
+   g4_1_2_4 (px, px, px, p0, 18, 3); /* { dg-warning "argument 4 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if ((u < -2 || u > 10) && (w < -4 || w > 42))
+     g4_1_2_4 (px, px, px, p0, u, w); /* { dg-warning "argument 4 null where non-null expected because arguments 5 and 6 are nonzero" } */
+ 
+   g4_1_3_4 (p0, px, px, px, u, u);
+   g4_1_3_4 (px, p0, px, px, u, u);
+   g4_1_3_4 (px, px, p0, px, u, u);
+   g4_1_3_4 (px, px, px, p0, u, u);
+   g4_1_3_4 (p0, px, px, px, 0, 0);
+   g4_1_3_4 (p0, px, px, px, 0, 1);
+   g4_1_3_4 (p0, px, px, px, 2, 0);
+   g4_1_3_4 (px, p0, px, px, 0, 0);
+   g4_1_3_4 (px, p0, px, px, 0, 3);
+   g4_1_3_4 (px, p0, px, px, 4, 0);
+   g4_1_3_4 (px, px, p0, px, 0, 0);
+   g4_1_3_4 (px, px, p0, px, 0, 5);
+   g4_1_3_4 (px, px, p0, px, 6, 0);
+   g4_1_3_4 (px, px, px, p0, 0, 0);
+   g4_1_3_4 (px, px, px, p0, 0, 7);
+   g4_1_3_4 (px, px, px, p0, 8, 0);
+   g4_1_3_4 (p0, px, px, px, 20, 32); /* { dg-warning "argument 1 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u > 4 && w > 2)
+     g4_1_3_4 (p0, px, px, px, u, w); /* { dg-warning "argument 1 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   g4_1_3_4 (px, p0, px, px, 21, 4);
+   if ((u > 6 || u < -24) && (w > 8 || w < -5))
+     g4_1_3_4 (px, p0, px, px, u, w);
+   g4_1_3_4 (px, px, p0, px, 22, 4); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u > 9 && w > 13)
+     g4_1_3_4 (px, px, p0, px, u - 3, w - 8); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   g4_1_3_4 (px, px, px, p0, 23, 8); /* { dg-warning "argument 4 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u > 10 && w > 12)
+     g4_1_3_4 (px, px, px, p0, u, w); /* { dg-warning "argument 4 null where non-null expected because arguments 5 and 6 are nonzero" } */
+ 
+   g4_2_3_4 (p0, px, px, px, u, u);
+   g4_2_3_4 (px, p0, px, px, u, u);
+   g4_2_3_4 (px, px, p0, px, u, u);
+   g4_2_3_4 (px, px, px, p0, u, u);
+   g4_2_3_4 (p0, px, px, px, 0, 0);
+   g4_2_3_4 (p0, px, px, px, 0, 1);
+   g4_2_3_4 (p0, px, px, px, 2, 0);
+   g4_2_3_4 (px, p0, px, px, 0, 0);
+   g4_2_3_4 (px, p0, px, px, 0, 3);
+   g4_2_3_4 (px, p0, px, px, 4, 0);
+   g4_2_3_4 (px, px, p0, px, 0, 0);
+   g4_2_3_4 (px, px, p0, px, 0, 5);
+   g4_2_3_4 (px, px, p0, px, 6, 0);
+   g4_2_3_4 (px, px, px, p0, 0, 0);
+   g4_2_3_4 (px, px, px, p0, 0, 7);
+   g4_2_3_4 (px, px, px, p0, 8, 0);
+   g4_2_3_4 (p0, px, px, px, 1, 2);
+   if (u > 12 && w > 16)
+     g4_2_3_4 (p0, px, px, px, u, w);
+   g4_2_3_4 (px, p0, px, px, 2, 3); /* { dg-warning "argument 2 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u > 17 && w > 19)
+     g4_2_3_4 (px, p0, px, px, u - 3, w - 2); /* { dg-warning "argument 2 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   g4_2_3_4 (px, px, p0, px, 3, 8); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u > 24 && w > 22)
+     g4_2_3_4 (px, px, p0, px, u, w); /* { dg-warning "argument 3 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   g4_2_3_4 (px, px, px, p0, 4, 2); /* { dg-warning "argument 4 null where non-null expected because arguments 5 and 6 are nonzero" } */
+   if (u > 42 && w > 48)
+     g4_2_3_4 (px, px, px, p0, u, w); /* { dg-warning "argument 4 null where non-null expected because arguments 5 and 6 are nonzero" } */
+ 
+   g16_1_3_5_7_11_13 (px, px, px, px, px, px, px, px,
+ 		     px, px, px, px, px, px, px, px, 17, 18);
+   g16_1_3_5_7_11_13 (p0, p0, p0, p0, p0, p0, p0, p0,
+ 		     p0, p0, p0, p0, p0, p0, p0, p0, t, v);
+   g16_1_3_5_7_11_13 (p0, p0, p0, p0, p0, p0, p0, p0,
+ 		     p0, p0, p0, p0, p0, p0, p0, p0, 0, 0);
+   g16_1_3_5_7_11_13 (p0, p0, p0, p0, p0, p0, p0, p0,
+ 		     p0, p0, p0, p0, p0, p0, p0, p0, 0, 4);
+   g16_1_3_5_7_11_13 (p0, p0, p0, p0, p0, p0, p0, p0,
+ 		     p0, p0, p0, p0, p0, p0, p0, p0, 3, 0);
+ 
+   g16_1_3_5_7_11_13 (px, p0, px, p0, px, p0, px, p0, p0, p0, px, p0, p0, p0, p0, p0, 2, 1); /* { dg-warning "argument 13 null where non-null expected because arguments 17 and 18 are nonzero" } */
+   if (t > 122 && v > 18)
+     g16_1_3_5_7_11_13 (px, p0, px, p0, px, p0, px, p0, p0, p0, px, p0, p0, p0, p0, p0, t, v); /* { dg-warning "argument 13 null where non-null expected because arguments 17 and 18 are nonzero" } */
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-14.c gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-14.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-14.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-14.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,23 ----
+ /* Test for the "nonnull" function attribute on builtins.  Use the
+    "__builtin_" style below so we don't need prototypes.  */
+ /* { dg-do compile } */
+ /* { dg-options "-Wnonnull" } */
+ 
+ #include <stddef.h>
+ 
+ void
+ foo (void *p, char *s)
+ {
+   __builtin_fwrite (s, 0, 0, NULL);  /* { dg-warning "null" "null pointer check" } */
+   __builtin_fwrite (s, 0, 2, NULL);  /* { dg-warning "null" "null pointer check" } */
+   __builtin_fwrite (s, 1, 0, NULL);  /* { dg-warning "null" "null pointer check" } */
+   __builtin_fwrite (NULL, 16, 0, p);
+   __builtin_fwrite (NULL, 0, 12, p);
+   __builtin_fwrite (NULL, 2, 3, p);  /* { dg-warning "null" "null pointer check" } */
+   __builtin_fwrite_unlocked (s, 0, 0, NULL);  /* { dg-warning "null" "null pointer check" } */
+   __builtin_fwrite_unlocked (s, 0, 2, NULL);  /* { dg-warning "null" "null pointer check" } */
+   __builtin_fwrite_unlocked (s, 1, 0, NULL);  /* { dg-warning "null" "null pointer check" } */
+   __builtin_fwrite_unlocked (NULL, 16, 0, p);
+   __builtin_fwrite_unlocked (NULL, 0, 12, p);
+   __builtin_fwrite_unlocked (NULL, 2, 3, p);  /* { dg-warning "null" "null pointer check" } */
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-9.c gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-9.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/nonnull-9.c	Sun Jun 29 22:33:09 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/nonnull-9.c	Sun Jul  6 22:32:27 2025
***************
*** 3,33 ****
  /* { dg-options "-std=gnu17 -pedantic-errors" } */
  
  extern void func1 () __attribute__((nonnull_if_nonzero)); /* { dg-error "wrong number of arguments specified for 'nonnull_if_nonzero' attribute" } */
! /* { dg-message "expected 2, found 0" "" { target *-*-* } .-1 } */
  
  extern void func2 (char *) __attribute__((nonnull_if_nonzero(1))); /* { dg-error "wrong number of arguments specified for 'nonnull_if_nonzero' attribute" } */
! /* { dg-message "expected 2, found 1" "" { target *-*-* } .-1 } */
  
! extern void func3 (char *) __attribute__((nonnull_if_nonzero(1, 2, 3))); /* { dg-error "wrong number of arguments specified for 'nonnull_if_nonzero' attribute" } */
! /* { dg-message "expected 2, found 3" "" { target *-*-* } .-1 } */
  
  extern void func4 (char *, int) __attribute__((nonnull_if_nonzero(3, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 1 value '3' exceeds the number of function parameters 2" } */
  
  extern void func5 (char *, int) __attribute__((nonnull_if_nonzero(1, 3))); /* { dg-warning "nonnull_if_nonzero' attribute argument 2 value '3' exceeds the number of function parameters 2" } */
  
! extern void func6 (char *, int) __attribute__((nonnull_if_nonzero (foo, 2))); /* { dg-warning ".nonnull_if_nonzero. attribute argument 1 is invalid" } */
  /* { dg-error ".foo. undeclared" "undeclared argument" { target *-*-* } .-1 } */
  
! extern void func7 (char *, int) __attribute__((nonnull_if_nonzero (1, bar))); /* { dg-warning ".nonnull_if_nonzero. attribute argument 2 is invalid" } */
  /* { dg-error ".bar. undeclared" "undeclared argument" { target *-*-* } .-1 } */
  
! extern void func8 (int, int) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 1 value '1' refers to parameter type 'int'" } */
  
! extern void func9 (char *, float) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 2 value '2' refers to parameter type 'float'" } */
  
! extern void func10 (char *, _Bool) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 2 value '2' refers to parameter type '_Bool'" } */
  
! extern void func11 (char *, char *) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 2 value '2' refers to parameter type 'char \\\*'" } */
  
  void
  foo (void)
--- 3,44 ----
  /* { dg-options "-std=gnu17 -pedantic-errors" } */
  
  extern void func1 () __attribute__((nonnull_if_nonzero)); /* { dg-error "wrong number of arguments specified for 'nonnull_if_nonzero' attribute" } */
! /* { dg-message "expected between 2 and 3, found 0" "" { target *-*-* } .-1 } */
  
  extern void func2 (char *) __attribute__((nonnull_if_nonzero(1))); /* { dg-error "wrong number of arguments specified for 'nonnull_if_nonzero' attribute" } */
! /* { dg-message "expected between 2 and 3, found 1" "" { target *-*-* } .-1 } */
  
! extern void func3 (char *) __attribute__((nonnull_if_nonzero(1, 2, 3, 4))); /* { dg-error "wrong number of arguments specified for 'nonnull_if_nonzero' attribute" } */
! /* { dg-message "expected between 2 and 3, found 4" "" { target *-*-* } .-1 } */
  
  extern void func4 (char *, int) __attribute__((nonnull_if_nonzero(3, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 1 value '3' exceeds the number of function parameters 2" } */
  
  extern void func5 (char *, int) __attribute__((nonnull_if_nonzero(1, 3))); /* { dg-warning "nonnull_if_nonzero' attribute argument 2 value '3' exceeds the number of function parameters 2" } */
  
! extern void func6 (char *, int) __attribute__((nonnull_if_nonzero(1, 2, 3))); /* { dg-warning "nonnull_if_nonzero' attribute argument 3 value '3' exceeds the number of function parameters 2" } */
! 
! extern void func7 (char *, int) __attribute__((nonnull_if_nonzero (foo, 2))); /* { dg-warning ".nonnull_if_nonzero. attribute argument 1 is invalid" } */
  /* { dg-error ".foo. undeclared" "undeclared argument" { target *-*-* } .-1 } */
  
! extern void func8 (char *, int) __attribute__((nonnull_if_nonzero (1, bar))); /* { dg-warning ".nonnull_if_nonzero. attribute argument 2 is invalid" } */
  /* { dg-error ".bar. undeclared" "undeclared argument" { target *-*-* } .-1 } */
  
! extern void func9 (char *, int) __attribute__((nonnull_if_nonzero (1, 2, baz))); /* { dg-warning ".nonnull_if_nonzero. attribute argument 3 is invalid" } */
! /* { dg-error ".baz. undeclared" "undeclared argument" { target *-*-* } .-1 } */
  
! extern void func10 (int, int) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 1 value '1' refers to parameter type 'int'" } */
  
! extern void func11 (char *, float) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 2 value '2' refers to parameter type 'float'" } */
  
! extern void func12 (char *, _Bool) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 2 value '2' refers to parameter type '_Bool'" } */
! 
! extern void func13 (char *, char *) __attribute__((nonnull_if_nonzero(1, 2))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 2 value '2' refers to parameter type 'char \\\*'" } */
! 
! extern void func14 (char *, int, float) __attribute__((nonnull_if_nonzero(1, 2, 3))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 3 value '3' refers to parameter type 'float'" } */
! 
! extern void func15 (char *, long, _Bool) __attribute__((nonnull_if_nonzero(1, 2, 3))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 3 value '3' refers to parameter type '_Bool'" } */
! 
! extern void func17 (char *, int, char *) __attribute__((nonnull_if_nonzero(1, 2, 3))); /* { dg-warning "'nonnull_if_nonzero' attribute argument 3 value '3' refers to parameter type 'char \\\*'" } */
  
  void
  foo (void)
*************** void
*** 38,40 ****
--- 49,56 ----
  bar (void)
  {
  }
+ 
+ void
+ baz (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc gcc-16-20250706/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc
*** gcc-16-20250629/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc	Sun Jun 29 22:33:10 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc	Sun Jul  6 22:32:27 2025
*************** public:
*** 127,137 ****
      if (change.is_global_p ())
        {
  	if (change.m_new_state == m_sm.m_released_gil)
! 	  return diagnostic_event::meaning (diagnostic_event::VERB_release,
! 					    diagnostic_event::NOUN_lock);
  	else if (change.m_new_state == m_sm.get_start_state ())
! 	  return diagnostic_event::meaning (diagnostic_event::VERB_acquire,
! 					    diagnostic_event::NOUN_lock);
        }
      return diagnostic_event::meaning ();
    }
--- 127,137 ----
      if (change.is_global_p ())
        {
  	if (change.m_new_state == m_sm.m_released_gil)
! 	  return diagnostic_event::meaning (diagnostic_event::verb::release,
! 					    diagnostic_event::noun::lock);
  	else if (change.m_new_state == m_sm.get_start_state ())
! 	  return diagnostic_event::meaning (diagnostic_event::verb::acquire,
! 					    diagnostic_event::noun::lock);
        }
      return diagnostic_event::meaning ();
    }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-3.c gcc-16-20250706/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-3.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-3.c	Sun Jun 29 22:33:10 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,75 ****
- /* { dg-do compile } */
- /* { dg-options "-fdiagnostics-format=json" } */
- 
- #include <stddef.h>
- #include <stdlib.h>
- 
- /* Minimal reimplementation of cpython API.  */
- typedef struct PyObject {} PyObject;
- extern int PyArg_ParseTuple (PyObject *args, const char *fmt, ...);
- extern PyObject *PyList_New (int);
- extern PyObject *PyLong_FromLong(long);
- extern void PyList_Append(PyObject *list, PyObject *item);
- 
- PyObject *
- make_a_list_of_random_ints_badly(PyObject *self,
- 				 PyObject *args)
- {
-   PyObject *list, *item;
-   long count, i;
- 
-   if (!PyArg_ParseTuple(args, "i", &count)) {
-     return NULL;
-   }
- 
-   list = PyList_New(0);
- 	
-   for (i = 0; i < count; i++) {
-     item = PyLong_FromLong(random());
-     PyList_Append(list, item);
-   }
-   
-   return list;
- }
- 
- /* { dg-begin-multiline-output "" }
- [{"kind": "error",
-   "message": "passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter",
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file": "
-                            "line": 29,
-                            "display-column": 5,
-                            "byte-column": 5,
-                            "column": 5},
-                  "finish": {"file": "
-                             "line": 29,
-                             "display-column": 29,
-                             "byte-column": 29,
-                             "column": 29}}],
-   "path": [{"location": {"file": "
-                          "line": 25,
-                          "display-column": 10,
-                          "byte-column": 10,
-                          "column": 10},
-             "description": "when 'PyList_New' fails, returning NULL",
-             "function": "make_a_list_of_random_ints_badly",
-             "depth": 0},
-            {"location": {"file": "
-                          "line": 27,
-                          "display-column": 17,
-                          "byte-column": 17,
-                          "column": 17},
-             "description": "when 'i < count'",
-             "function": "make_a_list_of_random_ints_badly",
-             "depth": 0},
-            {"location": {"file": "
-                          "line": 29,
-                          "display-column": 5,
-                          "byte-column": 5,
-                          "column": 5},
-             "description": "when calling 'PyList_Append', passing NULL from (1) as argument 1",
-             "function": "make_a_list_of_random_ints_badly",
-             "depth": 0}],
-   "escape-source": false}]
- { dg-end-multiline-output "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/plugin/plugin.exp gcc-16-20250706/gcc/testsuite/gcc.dg/plugin/plugin.exp
*** gcc-16-20250629/gcc/testsuite/gcc.dg/plugin/plugin.exp	Sun Jun 29 22:33:10 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/plugin/plugin.exp	Sun Jul  6 22:32:27 2025
*************** set plugin_test_list [list \
*** 116,122 ****
      { diagnostic_plugin_test_paths.cc \
  	  diagnostic-test-paths-1.c \
  	  diagnostic-test-paths-2.c \
- 	  diagnostic-test-paths-3.c \
  	  diagnostic-test-paths-4.c \
  	  diagnostic-test-paths-5.c \
  	  diagnostic-test-paths-multithreaded-inline-events.c \
--- 116,121 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-1.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-1.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,34 ----
+ /* More testing the correct usage of attribute counted_by for pointer field.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ 
+ typedef struct item1 Item1;
+ typedef union item2 Item2;
+ 
+ struct pointer_array {
+   int count1;
+   Item1 *array_1 __attribute__ ((counted_by (count1))); 
+   Item2 *array_2 __attribute__ ((counted_by (count2))); 
+   int count2;
+ } *pointer_data; 
+ 
+ struct item1 {
+   int a;
+   float b[];
+ };
+ 
+ union item2 {
+   int c;
+   float d[];
+ };
+ 
+ void foo ()
+ {
+   pointer_data 
+     = (struct pointer_array *) __builtin_malloc (sizeof (struct pointer_array));
+   pointer_data->array_1 /* { dg-error "attribute is not allowed for a pointer to structure or union with flexible array member" } */ 
+     = (Item1 *) __builtin_malloc (sizeof (Item1) + 3 * sizeof (float));
+   pointer_data->array_2 /* { dg-error "attribute is not allowed for a pointer to structure or union with flexible array member" } */
+     = (Item2 *) __builtin_malloc (sizeof (Item2) + 3 * sizeof (float));
+   return;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-2.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-2.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,10 ----
+ /* Testing the correct usage of attribute counted_by for pointer: _BitInt  */
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-O2 -std=c23" } */
+ 
+ struct pointer_array {
+   _BitInt(24) count; 
+   int *array __attribute__ ((counted_by (count)));
+   int *array1 __attribute__ ((counted_by (count1)));
+   _BitInt(24) count1; 
+ };
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-3.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-3.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-3.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,127 ----
+  /* Testing the correct usage of attribute counted_by for pointer in c23,
+     multiple definitions of the same tag in same or different scopes.
+     { dg-do compile }
+     { dg-options "-std=c23" }
+  */
+ 
+ /* Allowed redefinitions of the same struct in the same scope, with the
+    same counted_by attribute.  */
+ struct f {
+   int b;
+   int c;
+   int *a __attribute__ ((counted_by (b))); };
+ struct f {
+   int b;
+   int c;
+   int *a __attribute__ ((counted_by (b))); };
+ struct f {
+   int b;
+   int c;
+   int *a; }; /* { dg-error "redefinition of struct or union" } */
+ 
+ /* Error when the counted_by attribute is defined differently.  */
+ struct f {
+   int b;
+   int c;
+   int *a __attribute__ ((counted_by (c))); }; /* { dg-error "redefinition of struct or union" } */
+ 
+ struct h {
+   int b;
+   int c;
+   int *a __attribute__ ((counted_by (b))); } p;  
+ 
+ void test (void)
+ {
+   struct h {
+   int b;
+   int c;
+   int *a __attribute__ ((counted_by (b))); } x;
+ 
+   p = x;
+ }
+ 
+ void test1 (void)
+ {
+   struct h {
+   int b;
+   int c;
+   int *a __attribute__ ((counted_by (c))); } y;
+ 
+   p = y;   /* { dg-error "incompatible types when assigning to type" } */
+ }
+ 
+ struct nested_f {
+   struct {
+     union {
+       int b;
+       float f;
+     };
+     int n;
+   };
+   char *c __attribute__ ((counted_by (b)));
+ }; 
+ 
+ struct nested_f {
+   struct {
+     union {
+       int b;
+       float f;
+     };
+     int n;
+   };
+   char *c __attribute__ ((counted_by (b)));
+ }; 
+ 
+ struct nested_f {
+   struct {
+     union {
+       int b;
+       float f;
+     };
+     int n;
+   };
+   char *c __attribute__ ((counted_by (n)));
+ };  /* { dg-error "redefinition of struct or union" } */
+ 
+ struct nested_h {
+   struct {
+     union {
+       int b;
+       float f;
+     };
+     int n;
+   };
+   char *c __attribute__ ((counted_by (b)));
+ } nested_p; 
+ 
+ void test_2 (void)
+ {
+ struct nested_h {
+   struct {
+     union {
+       int b;
+       float f;
+     };
+     int n;
+   };
+   char *c __attribute__ ((counted_by (b)));
+ } nested_x; 
+ 
+  nested_p = nested_x;
+ }
+ 
+ void test_3 (void)
+ {
+ struct nested_h {
+   struct {
+     union {
+       int b;
+       float f;
+     };
+     int n;
+   };
+   char *c __attribute__ ((counted_by (n)));
+ } nested_y; 
+ 
+  nested_p = nested_y; /* { dg-error "incompatible types when assigning to type" } */
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-char.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-char.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-char.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-char.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,6 ----
+ /* Test the attribute counted_by for pointer field and its usage in
+  * __builtin_dynamic_object_size.  */ 
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ #define PTR_TYPE char
+ #include "pointer-counted-by-4.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-float.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-float.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-float.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-float.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,6 ----
+ /* Test the attribute counted_by for pointer field and its usage in
+  * __builtin_dynamic_object_size.  */ 
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ #define PTR_TYPE float 
+ #include "pointer-counted-by-4.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-struct.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-struct.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-struct.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-struct.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,10 ----
+ /* Test the attribute counted_by for pointer field and its usage in
+  * __builtin_dynamic_object_size.  */ 
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ struct A {
+   int a;
+   char *b;
+ };
+ #define PTR_TYPE struct A 
+ #include "pointer-counted-by-4.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-union.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-union.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4-union.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4-union.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,10 ----
+ /* Test the attribute counted_by for pointer field and its usage in
+  * __builtin_dynamic_object_size.  */ 
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ union A {
+   int a;
+   float b;
+ };
+ #define PTR_TYPE union A 
+ #include "pointer-counted-by-4.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-4.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,77 ----
+ /* Test the attribute counted_by for pointer field and its usage in
+  * __builtin_dynamic_object_size.  */ 
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #include "builtin-object-size-common.h"
+ #ifndef PTR_TYPE
+ #define PTR_TYPE int
+ #endif
+ struct pointer_array {
+   int b;
+   PTR_TYPE *c;
+ } *p_array;
+ 
+ struct annotated {
+   PTR_TYPE *c __attribute__ ((counted_by (b)));
+   int b;
+ } *p_array_annotated;
+ 
+ struct nested_annotated {
+   PTR_TYPE *c __attribute__ ((counted_by (b)));
+   struct {
+     union {
+       int b;
+       float f;	
+     };
+     int n;
+   };
+ } *p_array_nested_annotated;
+ 
+ void __attribute__((__noinline__)) setup (int normal_count, int attr_count)
+ {
+   p_array
+     = (struct pointer_array *) malloc (sizeof (struct pointer_array));
+   p_array->c = (PTR_TYPE *) malloc (sizeof (PTR_TYPE) * normal_count);
+   p_array->b = normal_count;
+ 
+   p_array_annotated
+     = (struct annotated *) malloc (sizeof (struct annotated));
+   p_array_annotated->c = (PTR_TYPE *) malloc (sizeof (PTR_TYPE) * attr_count);
+   p_array_annotated->b = attr_count;
+ 
+   p_array_nested_annotated
+     = (struct nested_annotated *) malloc (sizeof (struct nested_annotated));
+   p_array_nested_annotated->c = (PTR_TYPE *) malloc (sizeof (PTR_TYPE) * attr_count);
+   p_array_nested_annotated->b = attr_count;
+ 
+   return;
+ }
+ 
+ void __attribute__((__noinline__)) test ()
+ {
+   EXPECT(__builtin_dynamic_object_size(p_array->c, 1), -1);
+   EXPECT(__builtin_dynamic_object_size(p_array_annotated->c, 1),
+ 	 p_array_annotated->b * sizeof (PTR_TYPE));
+   EXPECT(__builtin_dynamic_object_size(p_array_nested_annotated->c, 1),
+ 	 p_array_nested_annotated->b * sizeof (PTR_TYPE));
+ }
+ 
+ void cleanup ()
+ {
+   free (p_array->c); 
+   free (p_array);
+   free (p_array_annotated->c);
+   free (p_array_annotated);
+   free (p_array_nested_annotated->c);
+   free (p_array_nested_annotated);
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   setup (10,10);   
+   test ();
+   DONE ();
+   cleanup ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-5.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-5.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-5.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,56 ----
+ /* Test the attribute counted_by for pointer fields and its usage in
+  * __builtin_dynamic_object_size: when the counted_by field is negative.  */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #include "builtin-object-size-common.h"
+ 
+ struct annotated {
+   int b;
+   int *c __attribute__ ((counted_by (b)));
+ } *array_annotated;
+ 
+ struct nested_annotated {
+   int *c __attribute__ ((counted_by (b)));
+   struct {
+     union {
+       int b;
+       float f;	
+     };
+     int n;
+   };
+ } *array_nested_annotated;
+ 
+ void __attribute__((__noinline__)) setup (int attr_count)
+ {
+   array_annotated
+     = (struct annotated *)malloc (sizeof (struct annotated));
+   array_annotated->b = attr_count;
+ 
+   array_nested_annotated
+     = (struct nested_annotated *)malloc (sizeof (struct nested_annotated));
+   array_nested_annotated->b = attr_count - 1;
+ 
+   return;
+ }
+ 
+ void __attribute__((__noinline__)) test ()
+ {
+   EXPECT(__builtin_dynamic_object_size(array_annotated->c, 1), 0);
+   EXPECT(__builtin_dynamic_object_size(array_nested_annotated->c, 1), 0);
+ }
+ 
+ void cleanup ()
+ {
+   free (array_annotated);
+   free (array_nested_annotated);
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   setup (-10);   
+   test ();
+   DONE ();
+   cleanup ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-6.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-6.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-6.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,56 ----
+ /* Test the attribute counted_by for pointer fields and its usage in
+  * __builtin_dynamic_object_size: when the type of the pointer  
+  * is casting to another type.  */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #include "builtin-object-size-common.h"
+ 
+ typedef unsigned short u16;
+ 
+ struct info {
+   u16 data_len;
+   char *data __attribute__((counted_by(data_len)));
+ };
+ 
+ struct foo {
+   int a;
+   int b;
+ };
+ 
+ static __attribute__((__noinline__))
+ struct info *setup ()
+ {
+   struct info *p;
+   size_t bytes = 3 * sizeof(struct foo);
+ 
+   p = (struct info *) malloc (sizeof (struct info));
+   p->data = (char *) malloc (bytes);
+   p->data_len = bytes;
+ 
+   return p;
+ }
+ 
+ static void
+ __attribute__((__noinline__)) report (struct info *p)
+ {
+   struct foo *bar = (struct foo *)p->data;
+   EXPECT(__builtin_dynamic_object_size((char *)(bar + 1), 1),
+ 	 sizeof (struct foo) * 2);
+   EXPECT(__builtin_dynamic_object_size((char *)(bar + 2), 1),
+ 	 sizeof (struct foo));
+ }
+ 
+ void cleanup (struct info *p)
+ {
+   free (p->data);
+   free (p);
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   struct info *p = setup();
+   report(p);
+   cleanup (p);
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-7.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-7.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by-7.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,32 ----
+ /* Additional test of the attribute counted_by for pointer field and its usage
+    in __builtin_dynamic_object_size.  */ 
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #include "builtin-object-size-common.h"
+ 
+ struct annotated {
+   int b;
+   int *c __attribute__ ((counted_by (b)));
+ };
+ 
+ struct annotated __attribute__((__noinline__)) setup (int attr_count)
+ {
+   struct annotated p_array_annotated;
+   p_array_annotated.c = (int *) malloc (sizeof (int) * attr_count);
+   p_array_annotated.b = attr_count;
+ 
+   return p_array_annotated;
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   struct annotated x = setup (10);   
+   int *p = x.c;
+   x = setup (20);
+   EXPECT(__builtin_dynamic_object_size (p, 1), 10 * sizeof (int));
+   EXPECT(__builtin_dynamic_object_size (x.c, 1), 20 * sizeof (int));
+   free (p);
+   free (x.c);
+   DONE ();
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by.c gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pointer-counted-by.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pointer-counted-by.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,111 ----
+ /* Testing the correct usage of attribute counted_by for pointer field.
+    and also mixed pointer field and FMA field in the same structure.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ 
+ int size;
+ int *x __attribute__ ((counted_by (size))); /* { dg-error "attribute is not allowed for a non-field declaration" } */
+ 
+ struct pointer_array_0 {
+   int count;
+   int array __attribute__ ((counted_by (count))); /* { dg-error "attribute is not allowed for a non-array or non-pointer field" } */
+   int other;
+ };
+ 
+ int count;
+ struct pointer_array_1 {
+   int other;
+   int *array_1 __attribute__ ((counted_by (count))); /* { dg-error "attribute is not a field declaration in the same structure as" } */
+   int array_fam[] __attribute__ ((counted_by (count))); /* { dg-error "attribute is not a field declaration in the same structure as" } */
+ };
+ 
+ struct pointer_array_2 {
+   float count1;
+   float count2;
+   int *array_2 __attribute__ ((counted_by (count1))); /* { dg-error "attribute is not a field declaration with an integer type" } */
+   int array_fam[] __attribute__ ((counted_by (count2))); /* { dg-error "attribute is not a field declaration with an integer type" } */
+ }; 
+ 
+ struct pointer_array_3 {
+   int count;
+   int *array_3 __attribute__ ((counted_by (count))) __attribute__ ((counted_by (count)));
+ }; 
+ 
+ struct pointer_array_4 {
+   int count1;
+   int count2;
+   int *array_4 __attribute__ ((counted_by (count1))) __attribute__ ((counted_by (count2))); /* { dg-error "conflicts with previous declaration" } */
+   float array_fam[] __attribute__ ((counted_by (count2))) __attribute__ ((counted_by (count1))); /* { dg-error "conflicts with previous declaration" } */
+ }; 
+ 
+ struct pointer_array_5 {
+   _Bool count;
+   int *array_5 __attribute__ ((counted_by (count)));
+ }; 
+ 
+ enum week {Mon, Tue, Wed};
+ struct pointer_array_6 {
+   enum week days;
+   int *array_6 __attribute__ ((counted_by (days)));
+ }; 
+ 
+ struct pointer_array_7 {
+   int count;
+   void *array_7 __attribute__ ((counted_by (count))); /* { dg-error "attribute is not allowed for a pointer to void" } */
+ }; 
+ 
+ struct pointer_array_8 {
+   int count;
+   int (*fpr)(int,int) __attribute__ ((counted_by (count))); /* { dg-error "attribute is not allowed for a pointer to function" } */
+ }; 
+ 
+ struct item1 {
+   int a;
+   float b;
+ };
+ 
+ union item2 {
+   char *a;
+   int *b; 
+ };
+ 
+ typedef struct item3 Item3;
+ typedef union item4 Item4;
+ 
+ struct item5 {
+   int a;
+   float b[];
+ };
+ 
+ /* Incomplete structure and union are allowed.  */
+ struct pointer_array_9 {
+   int count1;
+   int count2;
+   int count3;
+   struct item1 *array_1 __attribute__ ((counted_by (count1)));
+   union item2 *array_2 __attribute__ ((counted_by (count2)));
+   Item3 *array_3 __attribute__ ((counted_by (count3))); 
+   Item4 *array_4 __attribute__ ((counted_by (count4))); 
+   int count4;
+   int count5;
+   /* structure with flexible array member is not allowed.  */
+   struct item5 *array_5 __attribute__ ((counted_by (count5))); /* { dg-error "attribute is not allowed for a pointer to structure or union with flexible array member" } */
+ }; 
+ 
+ struct mixed_array {
+   int count1;
+   float *array_1 __attribute__ ((counted_by (count1)));
+   float *array_2 __attribute__ ((counted_by (count1)));
+   int count2;
+   long *array_3 __attribute__ ((counted_by (count2)));
+   long array_4[] __attribute__ ((counted_by (count2)));
+ };
+ 
+ struct mixed_array_2 {
+   float *array_1 __attribute__ ((counted_by (count1)));
+   int count1;
+   float *array_2 __attribute__ ((counted_by (count1)));
+   long *array_3 __attribute__ ((counted_by (count2)));
+   int count2;
+   long array_4[] __attribute__ ((counted_by (count2)));
+ };
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/pr118948-1.c gcc-16-20250706/gcc/testsuite/gcc.dg/pr118948-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/pr118948-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/pr118948-1.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "" } */
+ 
+ /* PR c/118948 */
+ 
+ /* Used to ICE in tree_expr_nonnegative_p after an error. */
+ 
+ void f(void) {
+     int i; /* { dg-note "previous" } */
+     for (i = 0; i < 2; i++) ;
+     float i; /* { dg-error "conflicting types for" } */
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/torture/builtin-math-9.c gcc-16-20250706/gcc/testsuite/gcc.dg/torture/builtin-math-9.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/torture/builtin-math-9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/torture/builtin-math-9.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,86 ----
+ /* Copyright (C) 1988-2025 Free Software Foundation, Inc.
+ 
+    Verify that built-in math function constant folding of constant
+    arguments is correctly performed by the compiler.  */
+ 
+ /* { dg-do link } */
+ /* { dg-require-effective-target foldable_pi_based_trigonometry } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
+ 
+ extern double acospi (double);
+ extern double asinpi (double);
+ extern double atanpi (double);
+ extern double atan2pi (double, double);
+ extern double cospi (double);
+ extern double sinpi (double);
+ extern double tanpi (double);
+ 
+ /* All references to link_error should go away at compile-time.  */
+ extern void link_error (void);
+ 
+ void
+ test_normal ()
+ {
+   if (acospi (0.5) < 0.3333 || acospi (0.5) > 0.3334 || acospi (-0.5) < 0.6666
+       || acospi (-0.5) > 0.6667)
+     link_error ();
+ 
+   if (asinpi (0.5) < 0.1666 || asinpi (0.5) > 0.1667 || asinpi (-0.5) < -0.1667
+       || asinpi (-0.5) > -0.1666)
+     link_error ();
+ 
+   if (atanpi (1.0) != 0.25 || atanpi (-1.0) > -0.25)
+     link_error ();
+ 
+   if (atan2pi (1.0, 1.0) > 0.2501 || atan2pi (1.0, 1.0) < 0.2499
+       || atan2pi (1.0, -1.0) < 0.7499 || atan2pi (1.0, -1.0) > 0.7501)
+     link_error ();
+ 
+   if (cospi (1.0 / 3) > 0.5001 || cospi (-1.0 / 3) < 0.4999
+       || cospi (4.0 / 3) > -0.4999 || cospi (4.0 / 3) < -0.5001)
+     link_error ();
+ 
+   if (sinpi (1.0 / 6) > 0.5001 || sinpi (-1.0 / 6) > -0.4999
+       || sinpi (5.0 / 6) < 0.4999 || sinpi (-7.0 / 6) > 0.5001)
+     link_error ();
+ 
+   if (tanpi (0.25) != 1.0000 || tanpi (-0.25) != -1.0000
+       || tanpi (1.25) != 1.0000 || tanpi (-1.25) != -1.0000)
+     link_error ();
+ }
+ 
+ void
+ test_corner ()
+ {
+   if (__builtin_signbit (acospi (1.0)))
+     link_error ();
+ 
+   if (__builtin_signbit (asinpi (0.0)) || !__builtin_signbit (asinpi (-0.0)))
+     link_error ();
+ 
+   if (__builtin_signbit (atanpi (0.0)) || !__builtin_signbit (atanpi (-0.0)))
+     link_error ();
+ 
+   if (__builtin_signbit (atan2pi (0.0, 0.0))
+       || !__builtin_signbit (atan2pi (-0.0, 0.0)) || atan2pi (0.0, -0.0) != 1
+       || atan2pi (-0.0, -0.0) != -1)
+     link_error ();
+ 
+   if (__builtin_signbit (cospi (0.5)) || __builtin_signbit (cospi (-0.5)))
+     link_error ();
+ 
+   if (__builtin_signbit (sinpi (1)) || !__builtin_signbit (sinpi (-1)))
+     link_error ();
+ 
+   if (__builtin_signbit (tanpi (2)) || __builtin_signbit (tanpi (-3))
+       || !__builtin_signbit (tanpi (5)) || !__builtin_signbit (tanpi (-6)))
+     link_error ();
+ }
+ 
+ int
+ main ()
+ {
+   test_normal ();
+   test_corner ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120242.c gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120242.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120242.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120242.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ char f1(char a, char b) {
+   return b == 0 ? a : b;
+ }
+ int f2(int a, int b) {
+   return b ? a : 0;
+ }
+ struct l {
+   unsigned m;
+   int n;
+ };
+ struct l ae;
+ char af = -2;
+ unsigned ah = 4;
+ int aj = 8;
+ int *test = &aj;
+ int main() {
+ ao:
+   if (f2(f1(4, af++), *test) <= 0) {
+     for (; ae.n; ae.n++)
+       ;
+     if (ah)
+       goto ao;
+   }
+   if (af != 1)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120627.c gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120627.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120627.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120627.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ unsigned char sub(unsigned char t, unsigned char u) { return t - u; }
+ unsigned char mul(unsigned char t, unsigned char u) { return t * u; }
+ int x(int aa, int ab) {
+   return ab >= 32 || aa > 18446744073709551615UL >> ab ? aa : aa << ab;
+ }
+ int ag;
+ int ah = 249;
+ char ap;
+ static short ar[5][9];
+ int *as = &ag;
+ void bf(char cf) {
+   for (; ap <= 8; ap++) {
+     (ar[1][7] = mul(x(-1L, sub(cf, 247) / cf), ag <= 0)) || ar[1][4]++;
+     *as = ag;
+   }
+   return;
+ }
+ int main() {
+   bf(ah);
+   if (ar[1][7] != 255)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
+ 
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120736.c gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120736.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120736.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120736.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ unsigned char aa (unsigned char ab, int o) { return ab > o ? ab : 0; }
+ int p;
+ int s;
+ static unsigned char q = 255;
+ int r;
+ int *v = &s;
+ int main() {
+   p = v != 0;
+   for (; r < 8; ++r) {
+     if (s)
+       break;
+     s = aa(p * q++, 6) <= 0;
+   }
+   if (q != 1)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
+ 
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120813.c gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120813.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120813.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120813.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ short s (short t, short u) { return u == 0 ? 0 : t / u; }
+ int x[6];
+ int y;
+ unsigned ak = 1;
+ unsigned short al = 65527;
+ unsigned *am = &ak;
+ int main() {
+   for (int i = 0; i < 6; i++) {
+     x[i] = i;
+   }
+   for (;;) {
+     unsigned long ar = 2080554998UL;
+     char as = 4;
+     if (s(34, al++) < ar)
+       if (*am)
+         break;
+   }
+   y = x[al & 5];
+   if ((y ^ 5UL) != 4)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
+ 
+ 
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120944.c gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120944.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120944.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120944.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */
+ /* { dg-additional-options "-fdump-tree-optimized" } */
+ 
+ #include <stdlib.h>
+ 
+ typedef union {
+   int u32;
+   struct
+   {
+      int A:1;
+      int B:2;
+      int C:3;
+   };
+ } u_t;
+ 
+ typedef union {
+    volatile int u[3];
+    volatile struct {
+         u_t a;
+         int b;
+         int c;
+    };
+ } DATA;
+ 
+ void foo (volatile DATA *d)
+ {
+      d->a.u32 = ~0;
+      u_t u = d->a;
+      int v = u.A;
+      if (v)
+         abort();
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "if \\\(" 1 "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120951-1.c gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120951-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/torture/pr120951-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/torture/pr120951-1.c	Sun Jul  6 22:32:27 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fnon-call-exceptions -fsignaling-nans" } */
+ 
+ /* PR tree-optimization/120951 */
+ 
+ /* cdce would create a trapping comparison inside a condition.
+    tests to make sure that does not happen.  */
+ 
+ double f(double r, double i) {
+    return __builtin_fmod(r, i);
+ }
+ 
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c gcc-16-20250706/gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c	Sun Jun 29 22:33:12 2025
--- gcc-16-20250706/gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c	Sun Jul  6 22:32:27 2025
*************** int main()
*** 31,34 ****
  }
  /* We will have profiles for test2 and test2.constprop.0 that will have to be
     merged,  */
! /* { dg-final-use-autofdo { scan-ipa-dump "Merging duplicate symbol test2" "afdo_offline"} } */
--- 31,34 ----
  }
  /* We will have profiles for test2 and test2.constprop.0 that will have to be
     merged,  */
! /* { dg-final-use-autofdo { scan-ipa-dump "Merging duplicate instance: test2" "afdo_offline"} } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-2.c gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-2.c	Sun Jul  6 22:32:28 2025
***************
*** 0 ****
--- 1,51 ----
+ /* Test the attribute counted_by for pointer fields and its usage in
+    bounds sanitizer combined with VLA.  */
+ /* { dg-do run } */
+ /* { dg-options "-fsanitize=bounds" } */
+ /* { dg-output "index 11 out of bounds for type 'int \\\[\\\*\\\]\\\[\\\*\\\]'\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*index 20 out of bounds for type 'int \\\[\\\*\\\]\\\[\\\*\\\]\\\[\\\*\\\]'\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*index 11 out of bounds for type 'int \\\[\\\*\\\]\\\[\\\*\\\]'\[^\n\r]*(\n|\r\n|\r)" } */
+ /* { dg-output "\[^\n\r]*index 10 out of bounds for type 'int \\\[\\\*\\\]'\[^\n\r]*(\n|\r\n|\r)" } */
+ 
+ 
+ #include <stdlib.h>
+ 
+ void __attribute__((__noinline__)) setup_and_test_vla (int n, int m)
+ {
+   struct foo {
+     int n;
+     int (*p)[n] __attribute__((counted_by(n)));
+   } *f;
+ 
+   f = (struct foo *) malloc (sizeof (struct foo));
+   f->p = (int (*)[n]) malloc (m * sizeof (int[n]));
+   f->n = m;
+   f->p[m][n-1] = 1;
+   free (f->p);
+   free (f);
+   return;
+ }
+ 
+ void __attribute__((__noinline__)) setup_and_test_vla_1 (int n1, int n2, int m)
+ {
+   struct foo {
+     int n;
+     int (*p)[n2][n1] __attribute__((counted_by(n)));
+   } *f;
+ 
+   f = (struct foo *) malloc (sizeof(struct foo));
+   f->p = (int (*)[n2][n1]) malloc (m * sizeof (int[n2][n1]));
+   f->n = m;
+   f->p[m][n2][n1] = 1;
+   free (f->p);
+   free (f);
+   return;
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   setup_and_test_vla (10, 11);
+   setup_and_test_vla_1 (10, 11, 20);
+   return 0;
+ }
+ 
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-3.c gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-3.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-3.c	Sun Jul  6 22:32:28 2025
***************
*** 0 ****
--- 1,42 ----
+ /* Test the attribute counted_by for pointer fields and its usage in bounds
+    sanitizer. when counted_by field is negative value.  */
+ /* { dg-do run } */
+ /* { dg-options "-fsanitize=bounds" } */
+ 
+ #include <stdlib.h>
+ 
+ struct annotated {
+   int b;
+   int *c __attribute__ ((counted_by (b)));
+ } *array_annotated;
+ 
+ void __attribute__((__noinline__)) setup (int annotated_count)
+ {
+   array_annotated
+     = (struct annotated *)malloc (sizeof (struct annotated));
+   array_annotated->c = (int *) malloc (sizeof (int) * 10);
+   array_annotated->b = annotated_count;
+ 
+   return;
+ }
+ 
+ void __attribute__((__noinline__)) test (int annotated_index)
+ {
+   array_annotated->c[annotated_index] = 2;
+ }
+ 
+ void cleanup ()
+ {
+   free (array_annotated->c);
+   free (array_annotated);
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   setup (-3);   
+   test (2);
+   cleanup ();
+   return 0;
+ }
+ 
+ /* { dg-output "25:21: runtime error: index 2 out of bounds for type" } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-4.c gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-4.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-4.c	Sun Jul  6 22:32:28 2025
***************
*** 0 ****
--- 1,42 ----
+ /* Test the attribute counted_by for pointer fields and its usage in bounds
+    sanitizer. when counted_by field is zero value.  */
+ /* { dg-do run } */
+ /* { dg-options "-fsanitize=bounds" } */
+ 
+ #include <stdlib.h>
+ 
+ struct annotated {
+   int b;
+   int *c __attribute__ ((counted_by (b)));
+ } *array_annotated;
+ 
+ void __attribute__((__noinline__)) setup (int annotated_count)
+ {
+   array_annotated
+     = (struct annotated *)malloc (sizeof (struct annotated));
+   array_annotated->c = (int *)malloc (sizeof (int) * 10);
+   array_annotated->b = annotated_count;
+ 
+   return;
+ }
+ 
+ void __attribute__((__noinline__)) test (int annotated_index)
+ {
+   array_annotated->c[annotated_index] = 2;
+ }
+ 
+ void cleanup ()
+ {
+   free (array_annotated->c);
+   free (array_annotated);
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   setup (0);   
+   test (1);
+   cleanup ();
+   return 0;
+ }
+ 
+ /* { dg-output "25:21: runtime error: index 1 out of bounds for type" } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-5.c gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-5.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds-5.c	Sun Jul  6 22:32:28 2025
***************
*** 0 ****
--- 1,40 ----
+ /* Test the attribute counted_by for pointer fields and its usage in
+    bounds sanitizer.  */
+ /* { dg-do run } */
+ /* { dg-options "-fsanitize=bounds" } */
+ 
+ #include <stdlib.h>
+ 
+ struct annotated {
+   int b;
+   int *c __attribute__ ((counted_by (b)));
+ } *p_array_annotated;
+ 
+ void __attribute__((__noinline__)) setup (int annotated_count)
+ {
+   p_array_annotated
+     = (struct annotated *)malloc (sizeof (struct annotated));
+   p_array_annotated->c = (int *) malloc (annotated_count *  sizeof (int));
+   p_array_annotated->b = annotated_count;
+ 
+   return;
+ }
+ 
+ void cleanup ()
+ {
+   free (p_array_annotated->c);
+   free (p_array_annotated);
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   int i;
+   setup (10);
+   for (i = 0; i < 11; i++)
+     p_array_annotated->c[i] = 2; // goes boom at i == 10
+   cleanup ();
+   return 0;
+ }
+ 
+ 
+ /* { dg-output "34:25: runtime error: index 10 out of bounds for type" } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds.c gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pointer-counted-by-bounds.c	Sun Jul  6 22:32:28 2025
***************
*** 0 ****
--- 1,46 ----
+ /* Test the attribute counted_by for pointer fields and its usage in
+    bounds sanitizer.  */
+ /* { dg-do run } */
+ /* { dg-options "-fsanitize=bounds" } */
+ 
+ #include <stdlib.h>
+ 
+ struct pointer_array {
+   int b;
+   int *c;
+ } *p_array;
+ 
+ struct annotated {
+   int b;
+   int *c __attribute__ ((counted_by (b)));
+ } *p_array_annotated;
+ 
+ void __attribute__((__noinline__)) setup (int normal_count, int annotated_count)
+ {
+   p_array
+     = (struct pointer_array *) malloc (sizeof (struct pointer_array));
+   p_array->c = (int *) malloc (normal_count * sizeof (int));
+   p_array->b = normal_count;
+ 
+   p_array_annotated
+     = (struct annotated *) malloc (sizeof (struct annotated));
+   p_array_annotated->c = (int *) malloc (annotated_count * sizeof (int));
+   p_array_annotated->b = annotated_count;
+ 
+   return;
+ }
+ 
+ void __attribute__((__noinline__)) test (int normal_index, int annotated_index)
+ {
+   p_array->c[normal_index] = 1;
+   p_array_annotated->c[annotated_index] = 2;
+ }
+ 
+ int main(int argc, char *argv[])
+ {
+   setup (10, 10);   
+   test (10, 10);
+   return 0;
+ }
+ 
+ /* { dg-output "36:23: runtime error: index 10 out of bounds for type" } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pr120837.c gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pr120837.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/ubsan/pr120837.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/ubsan/pr120837.c	Sun Jul  6 22:32:28 2025
***************
*** 0 ****
--- 1,32 ----
+ /* PR c/120837 */
+ /* { dg-do run } */
+ /* { dg-options "-O1 -fsanitize=undefined -fno-sanitize-recover=undefined" } */
+ 
+ [[gnu::noipa]] void
+ bar (void **x, void **y)
+ {
+   x[0] = 0;
+   x[1] = 0;
+   x[2] = 0;
+   y[0] = 0;
+   y[1] = 0;
+   y[2] = 0;
+   y[3] = 0;
+   y[4] = 0;
+ }
+ 
+ [[gnu::noipa]] void *
+ foo (int x, int y)
+ {
+   void *a[3];
+   void *b[5];
+   bar (a, b);
+   return (x > y ? b : a)[y - 1];
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (2, 1) != 0)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/vect/vect-pr120927-2.c gcc-16-20250706/gcc/testsuite/gcc.dg/vect/vect-pr120927-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/vect/vect-pr120927-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/vect/vect-pr120927-2.c	Sun Jul  6 22:32:29 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-additional-options "--param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-mavx512bw -mavx512vl" { target avx512f_runtime } } */
+ 
+ #include "tree-vect.h"
+ 
+ static const double __attribute__((aligned(__BIGGEST_ALIGNMENT__))) a[] = { 1., 2., 3., 4., 5. };
+ 
+ void __attribute__((noipa))
+ foo (double *b, double *bp, double c, int n)
+ {
+   for (int i = 0; i < n; ++i)
+     b[i] = bp[i] = a[i] * c;
+ }
+ 
+ int main()
+ {
+   double b[6], bp[6];
+   b[5] = bp[5] = 13.;
+   check_vect ();
+   foo (b, bp, 3., 5);
+   if (b[5] != 13. || bp[5] != 13.)
+     abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.dg/vect/vect-pr120927.c gcc-16-20250706/gcc/testsuite/gcc.dg/vect/vect-pr120927.c
*** gcc-16-20250629/gcc/testsuite/gcc.dg/vect/vect-pr120927.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.dg/vect/vect-pr120927.c	Sun Jul  6 22:32:29 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-additional-options "--param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-mavx512bw -mavx512vl" { target avx512f_runtime } } */
+ 
+ #include "tree-vect.h"
+ 
+ static const double a[] = { 1., 2., 3., 4., 5. };
+ 
+ void __attribute__((noipa))
+ foo (double *b, double *bp, double c, int n)
+ {
+   for (int i = 0; i < n; ++i)
+     b[i] = bp[i] = a[i] * c;
+ }
+ 
+ int main()
+ {
+   double b[6], bp[6];
+   b[5] = bp[5] = 13.;
+   check_vect ();
+   foo (b, bp, 3., 5);
+   if (b[5] != 13. || bp[5] != 13.)
+     abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/aarch64/cmpbr.c gcc-16-20250706/gcc/testsuite/gcc.target/aarch64/cmpbr.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/aarch64/cmpbr.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/aarch64/cmpbr.c	Sun Jul  6 22:32:30 2025
***************
*** 0 ****
--- 1,1824 ----
+ // Test that the instructions added by FEAT_CMPBR are emitted
+ // { dg-do compile }
+ // { dg-do-if assemble { target aarch64_asm_cmpbr_ok } }
+ // { dg-options "-march=armv9.5-a+cmpbr -O2" }
+ // { dg-final { check-function-bodies "**" "*/" "" { target *-*-* } {\.L[0-9]+} } }
+ 
+ #include <stdint.h>
+ 
+ typedef uint8_t u8;
+ typedef int8_t i8;
+ 
+ typedef uint16_t u16;
+ typedef int16_t i16;
+ 
+ typedef uint32_t u32;
+ typedef int32_t i32;
+ 
+ typedef uint64_t u64;
+ typedef int64_t i64;
+ 
+ int taken();
+ int not_taken();
+ 
+ #define COMPARE(ty, name, op, rhs)                                             \
+   int ty##_x0_##name##_##rhs(ty x0, ty x1) {                                   \
+     return __builtin_expect(x0 op rhs, 0) ? taken() : not_taken();             \
+   }
+ 
+ #define COMPARE_ALL(unsigned_ty, signed_ty, rhs)                               \
+   COMPARE(unsigned_ty, eq, ==, rhs);                                           \
+   COMPARE(unsigned_ty, ne, !=, rhs);                                           \
+                                                                                \
+   COMPARE(unsigned_ty, ult, <, rhs);                                           \
+   COMPARE(unsigned_ty, ule, <=, rhs);                                          \
+   COMPARE(unsigned_ty, ugt, >, rhs);                                           \
+   COMPARE(unsigned_ty, uge, >=, rhs);                                          \
+                                                                                \
+   COMPARE(signed_ty, slt, <, rhs);                                             \
+   COMPARE(signed_ty, sle, <=, rhs);                                            \
+   COMPARE(signed_ty, sgt, >, rhs);                                             \
+   COMPARE(signed_ty, sge, >=, rhs);
+ 
+ // ==== CBB<cc> (register) ====
+ COMPARE_ALL(u8, i8, x1);
+ 
+ // ==== CBH<cc> (register) ====
+ COMPARE_ALL(u16, i16, x1);
+ 
+ // ==== CB<cc> (register) ====
+ COMPARE_ALL(u32, i32, x1);
+ COMPARE_ALL(u64, i64, x1);
+ 
+ // ==== CB<cc> (immediate) ====
+ COMPARE_ALL(u32, i32, 42);
+ COMPARE_ALL(u64, i64, 42);
+ 
+ // ==== Special cases ====
+ // Comparisons against the immediate 0 can be done for all types,
+ // because we can use the wzr/xzr register as one of the operands.
+ // However, we should prefer to use CBZ/CBNZ or TBZ/TBNZ when possible,
+ // because they have larger range.
+ COMPARE_ALL(u8, i8, 0);
+ COMPARE_ALL(u16, i16, 0);
+ COMPARE_ALL(u32, i32, 0);
+ COMPARE_ALL(u64, i64, 0);
+ 
+ // CBB and CBH cannot have immediate operands.
+ // Instead we have to do a MOV+CB.
+ COMPARE_ALL(u8, i8, 42);
+ COMPARE_ALL(u16, i16, 42);
+ 
+ // 64 is out of the range for immediate operands (0 to 63).
+ // * For 8/16-bit types, use a MOV+CB as above.
+ // * For 32/64-bit types, use a CMP+B<cc> instead,
+ //   because B<cc> has a longer range than CB<cc>.
+ COMPARE_ALL(u8, i8, 64);
+ COMPARE_ALL(u16, i16, 64);
+ COMPARE_ALL(u32, i32, 64);
+ COMPARE_ALL(u64, i64, 64);
+ 
+ // 4098 is out of the range for CMP (0 to 4095, optionally shifted by left by 12
+ // bits), but it can be materialized in a single MOV.
+ COMPARE_ALL(u16, i16, 4098);
+ COMPARE_ALL(u32, i32, 4098);
+ COMPARE_ALL(u64, i64, 4098);
+ 
+ // If the branch destination is out of range (1KiB), we have to generate an
+ // extra B instruction (which can handle larger displacements) and branch around
+ // it
+ 
+ // clang-format off
+ #define STORE_1()   z = 0;
+ #define STORE_2()   STORE_1()   STORE_1()
+ #define STORE_4()   STORE_2()   STORE_2()
+ #define STORE_8()   STORE_4()   STORE_4()
+ #define STORE_16()  STORE_8()   STORE_8()
+ #define STORE_32()  STORE_16()  STORE_16()
+ #define STORE_64()  STORE_32()  STORE_32()
+ #define STORE_128() STORE_64()  STORE_64()
+ #define STORE_256() STORE_128() STORE_128()
+ // clang-format on
+ 
+ #define FAR_BRANCH(ty, rhs)                                                    \
+   int far_branch_##ty##_x0_eq_##rhs(ty x0, ty x1) {                            \
+     volatile int z = 0;                                                        \
+     if (__builtin_expect(x0 == rhs, 1)) {                                      \
+       STORE_256();                                                             \
+     }                                                                          \
+     return taken();                                                            \
+   }
+ 
+ FAR_BRANCH(u8, x1);
+ FAR_BRANCH(u16, x1);
+ FAR_BRANCH(u32, x1);
+ FAR_BRANCH(u64, x1);
+ 
+ FAR_BRANCH(u8, 42);
+ FAR_BRANCH(u16, 42);
+ FAR_BRANCH(u32, 42);
+ FAR_BRANCH(u64, 42);
+ 
+ /*
+ ** u8_x0_eq_x1:
+ **	cbbeq	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ne_x1:
+ **	cbbne	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ult_x1:
+ **	cbbhi	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ule_x1:
+ **	cbbhs	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ugt_x1:
+ **	cbblo	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_uge_x1:
+ **	cbbls	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_slt_x1:
+ **	cbbgt	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sle_x1:
+ **	cbbge	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sgt_x1:
+ **	cbblt	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sge_x1:
+ **	cbble	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_eq_x1:
+ **	cbheq	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ne_x1:
+ **	cbhne	w0|w1, w1|w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ult_x1:
+ **	cbhhi	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ule_x1:
+ **	cbhhs	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ugt_x1:
+ **	cbhlo	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_uge_x1:
+ **	cbhls	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_slt_x1:
+ **	cbhgt	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sle_x1:
+ **	cbhge	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sgt_x1:
+ **	cbhlt	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sge_x1:
+ **	cbhle	w1, w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_eq_x1:
+ **	cbeq	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ne_x1:
+ **	cbne	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ult_x1:
+ **	cblo	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ule_x1:
+ **	cbls	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ugt_x1:
+ **	cbhi	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_uge_x1:
+ **	cbhs	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_slt_x1:
+ **	cblt	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sle_x1:
+ **	cble	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sgt_x1:
+ **	cbgt	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sge_x1:
+ **	cbge	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_eq_x1:
+ **	cbeq	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ne_x1:
+ **	cbne	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ult_x1:
+ **	cblo	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ule_x1:
+ **	cbls	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ugt_x1:
+ **	cbhi	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_uge_x1:
+ **	cbhs	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_slt_x1:
+ **	cblt	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sle_x1:
+ **	cble	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sgt_x1:
+ **	cbgt	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sge_x1:
+ **	cbge	x0, x1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_eq_42:
+ **	cbeq	w0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ne_42:
+ **	cbne	w0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ult_42:
+ **	cbls	w0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ule_42:
+ **	cbls	w0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ugt_42:
+ **	cbhi	w0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_uge_42:
+ **	cbhi	w0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_slt_42:
+ **	cble	w0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sle_42:
+ **	cble	w0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sgt_42:
+ **	cbgt	w0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sge_42:
+ **	cbgt	w0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_eq_42:
+ **	cbeq	x0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ne_42:
+ **	cbne	x0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ult_42:
+ **	cbls	x0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ule_42:
+ **	cbls	x0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ugt_42:
+ **	cbhi	x0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_uge_42:
+ **	cbhi	x0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_slt_42:
+ **	cble	x0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sle_42:
+ **	cble	x0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sgt_42:
+ **	cbgt	x0, 42, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sge_42:
+ **	cbgt	x0, 41, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_eq_0:
+ **	cbbeq	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ne_0:
+ **	cbbne	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ult_0:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** u8_x0_ule_0:
+ **	cbbeq	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ugt_0:
+ **	cbbne	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_uge_0:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_slt_0:
+ **	tbnz	w0, #7, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sle_0:
+ **	cbble	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sgt_0:
+ **	cbbgt	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sge_0:
+ **	tbz	w0, #7, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_eq_0:
+ **	cbheq	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ne_0:
+ **	cbhne	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ult_0:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** u16_x0_ule_0:
+ **	cbheq	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ugt_0:
+ **	cbhne	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_uge_0:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_slt_0:
+ **	tbnz	w0, #15, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sle_0:
+ **	cbhle	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sgt_0:
+ **	cbhgt	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sge_0:
+ **	tbz	w0, #15, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_eq_0:
+ **	cbz	w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ne_0:
+ **	cbnz	w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ult_0:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** u32_x0_ule_0:
+ **	cbz	w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ugt_0:
+ **	cbnz	w0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_uge_0:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_slt_0:
+ **	tbnz	w0, #31, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sle_0:
+ **	cble	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sgt_0:
+ **	cbgt	w0, wzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sge_0:
+ **	tbz	w0, #31, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_eq_0:
+ **	cbz	x0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ne_0:
+ **	cbnz	x0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ult_0:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** u64_x0_ule_0:
+ **	cbz	x0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ugt_0:
+ **	cbnz	x0, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_uge_0:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_slt_0:
+ **	tbnz	x0, #63, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sle_0:
+ **	cble	x0, xzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sgt_0:
+ **	cbgt	x0, xzr, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sge_0:
+ **	tbz	x0, #63, .L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_eq_42:
+ **	mov	w([0-9]+), 42
+ **	cbbeq	w0, w\1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ne_42:
+ **	mov	(w[0-9]+), 42
+ **	cbbne	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ult_42:
+ **	mov	(w[0-9]+), 41
+ **	cbbls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ule_42:
+ **	mov	(w[0-9]+), 42
+ **	cbbls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ugt_42:
+ **	mov	(w[0-9]+), 42
+ **	cbbhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_uge_42:
+ **	mov	(w[0-9]+), 41
+ **	cbbhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_slt_42:
+ **	mov	(w[0-9]+), 41
+ **	cbble	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sle_42:
+ **	mov	(w[0-9]+), 42
+ **	cbble	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sgt_42:
+ **	mov	(w[0-9]+), 42
+ **	cbbgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sge_42:
+ **	mov	(w[0-9]+), 41
+ **	cbbgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_eq_42:
+ **	mov	w([0-9]+), 42
+ **	cbheq	w0, w\1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ne_42:
+ **	mov	(w[0-9]+), 42
+ **	cbhne	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ult_42:
+ **	mov	(w[0-9]+), 41
+ **	cbhls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ule_42:
+ **	mov	(w[0-9]+), 42
+ **	cbhls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ugt_42:
+ **	mov	(w[0-9]+), 42
+ **	cbhhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_uge_42:
+ **	mov	(w[0-9]+), 41
+ **	cbhhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_slt_42:
+ **	mov	(w[0-9]+), 41
+ **	cbhle	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sle_42:
+ **	mov	(w[0-9]+), 42
+ **	cbhle	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sgt_42:
+ **	mov	(w[0-9]+), 42
+ **	cbhgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sge_42:
+ **	mov	(w[0-9]+), 41
+ **	cbhgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_eq_64:
+ **	mov	w([0-9]+), 64
+ **	cbbeq	w0, w\1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ne_64:
+ **	mov	(w[0-9]+), 64
+ **	cbbne	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ult_64:
+ **	mov	(w[0-9]+), 63
+ **	cbbls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ule_64:
+ **	mov	(w[0-9]+), 64
+ **	cbbls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_ugt_64:
+ **	mov	(w[0-9]+), 64
+ **	cbbhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u8_x0_uge_64:
+ **	mov	(w[0-9]+), 63
+ **	cbbhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_slt_64:
+ **	mov	(w[0-9]+), 63
+ **	cbble	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sle_64:
+ **	mov	(w[0-9]+), 64
+ **	cbble	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sgt_64:
+ **	mov	(w[0-9]+), 64
+ **	cbbgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i8_x0_sge_64:
+ **	mov	(w[0-9]+), 63
+ **	cbbgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_eq_64:
+ **	mov	w([0-9]+), 64
+ **	cbheq	w0, w\1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ne_64:
+ **	mov	(w[0-9]+), 64
+ **	cbhne	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ult_64:
+ **	mov	(w[0-9]+), 63
+ **	cbhls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ule_64:
+ **	mov	(w[0-9]+), 64
+ **	cbhls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ugt_64:
+ **	mov	(w[0-9]+), 64
+ **	cbhhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_uge_64:
+ **	mov	(w[0-9]+), 63
+ **	cbhhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_slt_64:
+ **	mov	(w[0-9]+), 63
+ **	cbhle	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sle_64:
+ **	mov	(w[0-9]+), 64
+ **	cbhle	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sgt_64:
+ **	mov	(w[0-9]+), 64
+ **	cbhgt	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sge_64:
+ **	mov	(w[0-9]+), 63
+ **	cbhgt	w0, w1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_eq_64:
+ **	cmp	w0, 64
+ **	beq	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ne_64:
+ **	cmp	w0, 64
+ **	bne	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ult_64:
+ **	cbhi	w0, 63, .L([0-9]+)
+ **	b	taken
+ ** .L\1:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** u32_x0_ule_64:
+ **	cmp	w0, 64
+ **	bls	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ugt_64:
+ **	cmp	w0, 64
+ **	bhi	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_uge_64:
+ **	cmp	w0, 63
+ **	bhi	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_slt_64:
+ **	cbgt	w0, 63, .L([0-9]+)
+ **	b	taken
+ ** .L\1:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** i32_x0_sle_64:
+ **	cmp	w0, 64
+ **	ble	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sgt_64:
+ **	cmp	w0, 64
+ **	bgt	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sge_64:
+ **	cmp	w0, 63
+ **	bgt	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_eq_64:
+ **	cmp	x0, 64
+ **	beq	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ne_64:
+ **	cmp	x0, 64
+ **	bne	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ult_64:
+ **	cbhi	x0, 63, .L([0-9]+)
+ **	b	taken
+ ** .L\1:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** u64_x0_ule_64:
+ **	cmp	x0, 64
+ **	bls	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ugt_64:
+ **	cmp	x0, 64
+ **	bhi	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_uge_64:
+ **	cmp	x0, 63
+ **	bhi	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_slt_64:
+ **	cbgt	x0, 63, .L([0-9]+)
+ **	b	taken
+ ** .L\1:
+ **	b	not_taken
+ */
+ 
+ /*
+ ** i64_x0_sle_64:
+ **	cmp	x0, 64
+ **	ble	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sgt_64:
+ **	cmp	x0, 64
+ **	bgt	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sge_64:
+ **	cmp	x0, 63
+ **	bgt	.L([0-9]+)
+ **	b	not_taken
+ ** .L\1:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_eq_4098:
+ **	mov	w([0-9]+), 4098
+ **	cbheq	w0, w\1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ne_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbhne	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ult_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cbhls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ule_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbhls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_ugt_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbhhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u16_x0_uge_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cbhhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_slt_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cbhle	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sle_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbhle	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sgt_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbhgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i16_x0_sge_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cbhgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_eq_4098:
+ **	mov	w([0-9]+), 4098
+ **	cbeq	w0, w\1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ne_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbne	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ult_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cbls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ule_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbls	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_ugt_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u32_x0_uge_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cbhi	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_slt_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cble	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sle_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cble	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sgt_4098:
+ **	mov	(w[0-9]+), 4098
+ **	cbgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i32_x0_sge_4098:
+ **	mov	(w[0-9]+), 4097
+ **	cbgt	w0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_eq_4098:
+ **	mov	x([0-9]+), 4098
+ **	cbeq	x0, x\1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ne_4098:
+ **	mov	(x[0-9]+), 4098
+ **	cbne	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ult_4098:
+ **	mov	(x[0-9]+), 4097
+ **	cbls	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ule_4098:
+ **	mov	(x[0-9]+), 4098
+ **	cbls	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_ugt_4098:
+ **	mov	(x[0-9]+), 4098
+ **	cbhi	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** u64_x0_uge_4098:
+ **	mov	(x[0-9]+), 4097
+ **	cbhi	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_slt_4098:
+ **	mov	(x[0-9]+), 4097
+ **	cble	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sle_4098:
+ **	mov	(x[0-9]+), 4098
+ **	cble	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sgt_4098:
+ **	mov	(x[0-9]+), 4098
+ **	cbgt	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** i64_x0_sge_4098:
+ **	mov	(x[0-9]+), 4097
+ **	cbgt	x0, \1, .L([0-9]+)
+ **	b	not_taken
+ ** .L\2:
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u8_x0_eq_x1:
+ **	sub	sp, sp, #16
+ **	str	wzr, \[sp, 12\]
+ **	cbbeq	w0|w1, w1|w0, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\1:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\2:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u16_x0_eq_x1:
+ **	sub	sp, sp, #16
+ **	str	wzr, \[sp, 12\]
+ **	cbheq	w0|w1, w1|w0, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\1:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\2:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u32_x0_eq_x1:
+ **	sub	sp, sp, #16
+ **	str	wzr, \[sp, 12\]
+ **	cbeq	w0, w1, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\1:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\2:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u64_x0_eq_x1:
+ **	sub	sp, sp, #16
+ **	str	wzr, \[sp, 12\]
+ **	cbeq	x0, x1, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\1:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\2:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u8_x0_eq_42:
+ **	sub	sp, sp, #16
+ **	mov	w([0-9]+), 42
+ **	str	wzr, \[sp, 12\]
+ **	cbbeq	w0, w\1, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\2:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\3:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u16_x0_eq_42:
+ **	sub	sp, sp, #16
+ **	mov	w([0-9]+), 42
+ **	str	wzr, \[sp, 12\]
+ **	cbheq	w0, w\1, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\2:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\3:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u32_x0_eq_42:
+ **	sub	sp, sp, #16
+ **	str	wzr, \[sp, 12\]
+ **	cbeq	w0, 42, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\1:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\2:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
+ 
+ /*
+ ** far_branch_u64_x0_eq_42:
+ **	sub	sp, sp, #16
+ **	str	wzr, \[sp, 12\]
+ **	cbeq	x0, 42, .L([0-9]+)
+ **	b	.L([0-9]+)
+ ** .L\1:
+ **	str	wzr, \[sp, 12\]
+ **	...
+ **	str	wzr, \[sp, 12\]
+ ** .L\2:
+ **	add	sp, sp, 16
+ **	b	taken
+ */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/aarch64/simd/shrn2subhn.c gcc-16-20250706/gcc/testsuite/gcc.target/aarch64/simd/shrn2subhn.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/aarch64/simd/shrn2subhn.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/aarch64/simd/shrn2subhn.c	Sun Jul  6 22:32:30 2025
***************
*** 0 ****
--- 1,36 ----
+ /* This test case checks that replacing a not+shift by a sub -1 works. */
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O1" } */
+ /* { dg-final { scan-assembler-times "\\tsubhn\\t" 6 } } */
+ 
+ #include<arm_neon.h>
+ 
+ uint8x8_t neg_narrow_v8hi(uint16x8_t a) {
+   uint16x8_t b = vmvnq_u16(a);
+   return vshrn_n_u16(b, 8);
+ }
+ 
+ uint8x8_t neg_narrow_vsubhn_v8hi(uint16x8_t a) {
+   uint16x8_t ones = vdupq_n_u16(0xffff);
+   return vsubhn_u16(ones, a);
+ }
+ 
+ uint16x4_t neg_narrow_v4si(uint32x4_t a) {
+   uint32x4_t b = vmvnq_u32(a);
+   return vshrn_n_u32(b, 16);
+ }
+ 
+ uint16x4_t neg_narrow_vsubhn_v4si(uint32x4_t a) {
+   uint32x4_t ones = vdupq_n_u32(0xffffffff);
+   return vsubhn_u32(ones, a);
+ }
+ 
+ uint32x2_t neg_narrow_v2di(uint64x2_t a) {
+   uint64x2_t b = ~a;
+   return vshrn_n_u64(b, 32);
+ }
+ 
+ uint32x2_t neg_narrow_vsubhn_v2di(uint64x2_t a) {
+   uint64x2_t ones = vdupq_n_u64(0xffffffffffffffff);
+   return vsubhn_u64(ones, a);
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/aarch64/sve/adr_7.c gcc-16-20250706/gcc/testsuite/gcc.target/aarch64/sve/adr_7.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/aarch64/sve/adr_7.c	Sun Jun 29 22:33:18 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/aarch64/sve/adr_7.c	Sun Jul  6 22:32:31 2025
*************** void f(int *p1, int *p2, unsigned long s
*** 16,23 ****
  // (ie, theres only one scalar add, rather than 3, and the loads and stores use the
  // more complex addressing modes)
  
! /* { dg-final { scan-assembler-not {\tld1w\tz[0-9]+\.d, p[0-9]+/z\[x[0-9]+\.d\]} } } */
! /* { dg-final { scan-assembler-not {\tst1w\tz[0-9]+\.d, p[0-9]+/z\[x[0-9]+\.d\]} } } */
  
  /* { dg-final { scan-assembler-times {\tadd\tx[0-9]+, x[0-9]+, x[0-9]+} 1 } } */
  /* { dg-final { scan-assembler-times {\tld1w\tz[0-9]+\.s, p[0-9]+/z, \[x[0-9]+, x[0-9]+, lsl 2\]} 1 } } */
--- 16,23 ----
  // (ie, theres only one scalar add, rather than 3, and the loads and stores use the
  // more complex addressing modes)
  
! /* { dg-final { scan-assembler-not {\tld1w\tz[0-9]+\.s, p[0-9]+/z, \[x[0-9]+\]} } } */
! /* { dg-final { scan-assembler-not {\tst1w\tz[0-9]+\.s, p[0-9]+, \[x[0-9]+\]} } } */
  
  /* { dg-final { scan-assembler-times {\tadd\tx[0-9]+, x[0-9]+, x[0-9]+} 1 } } */
  /* { dg-final { scan-assembler-times {\tld1w\tz[0-9]+\.s, p[0-9]+/z, \[x[0-9]+, x[0-9]+, lsl 2\]} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-pr70308-1a.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-pr70308-1a.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-pr70308-1a.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-pr70308-1a.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=x86-64" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=x86-64 -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-pr70308-1b.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-pr70308-1b.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-pr70308-1b.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-pr70308-1b.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=x86-64 -DUSE_SCANF" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=x86-64 -fasynchronous-unwind-tables -fdwarf2-cfi-asm -fomit-frame-pointer -DUSE_SCANF" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-25.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-25.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-25.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-25.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-28.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-28.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-28.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-28.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-29.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-29.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-29.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-29.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-30.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-30.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/memset-strategy-30.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/memset-strategy-30.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mtune=generic -mno-sse -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-1.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-1.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-1.c	Sun Jul  6 22:32:35 2025
*************** foo (void *frame)
*** 26,30 ****
    }
  }
  
! /* { dg-final { scan-assembler-not "push" } } */
! /* { dg-final { scan-assembler-not "pop" } } */
--- 26,32 ----
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-10.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-10.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-10.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-10.c	Sun Jul  6 22:32:35 2025
*************** foo (void)
*** 18,24 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
--- 18,24 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
*************** foo (void)
*** 33,39 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "popq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
--- 33,39 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "popq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c	Sun Jul  6 22:32:35 2025
*************** foo (uintptr_t p)
*** 19,25 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 19,25 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (uintptr_t p)
*** 36,42 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 36,42 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c	Sun Jul  6 22:32:35 2025
***************
*** 16,24 ****
  
  #define NEXT { op_t *op = next; [[gnu::musttail]] return (*op)(op + 1); }
  #ifdef __x86_64__
! # define CLOBBER asm("" ::: "r12","r13","r14","r15","rbp","rbx")
  #else
! # define CLOBBER asm("" ::: "ebp","ebx")
  #endif
  #define DONT_SAVE_REGS __attribute__((no_callee_saved_registers))
  #define SAVE_REGS __attribute__((no_caller_saved_registers))
--- 16,24 ----
  
  #define NEXT { op_t *op = next; [[gnu::musttail]] return (*op)(op + 1); }
  #ifdef __x86_64__
! # define CLOBBER asm("" ::: "r12","r13","r14","r15","rbx")
  #else
! # define CLOBBER asm("" ::: "ebx")
  #endif
  #define DONT_SAVE_REGS __attribute__((no_callee_saved_registers))
  #define SAVE_REGS __attribute__((no_caller_saved_registers))
*************** op_t code[] = { inc, inc, dec, end, };
*** 83,97 ****
  **	.cfi_startproc
  **	subq	\$376, %rsp
  **...
! **	movq	%rax, 256\(%rsp\)
! **	movq	%rdx, 264\(%rsp\)
! **	movq	%rcx, 272\(%rsp\)
! **	movq	%rbx, 280\(%rsp\)
! **	movq	%rsi, 288\(%rsp\)
! **	movq	%rdi, 296\(%rsp\)
  **...
  **	movl	\$code\+8, %edi
! **	movq	%rbp, 304\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
--- 83,96 ----
  **	.cfi_startproc
  **	subq	\$376, %rsp
  **...
! **	movq	%rdi, 304\(%rsp\)
  **...
  **	movl	\$code\+8, %edi
! **	movq	%rax, 264\(%rsp\)
! **	movq	%rdx, 272\(%rsp\)
! **	movq	%rcx, 280\(%rsp\)
! **	movq	%rbx, 288\(%rsp\)
! **	movq	%rsi, 296\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
*************** op_t code[] = { inc, inc, dec, end, };
*** 132,144 ****
  **	movaps	176\(%rsp\), %xmm11
  **	movaps	192\(%rsp\), %xmm12
  **	movaps	208\(%rsp\), %xmm13
! **	movq	256\(%rsp\), %rax
! **	movq	264\(%rsp\), %rdx
! **	movq	272\(%rsp\), %rcx
! **	movq	280\(%rsp\), %rbx
! **	movq	288\(%rsp\), %rsi
! **	movq	296\(%rsp\), %rdi
! **	movq	304\(%rsp\), %rbp
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
--- 131,142 ----
  **	movaps	176\(%rsp\), %xmm11
  **	movaps	192\(%rsp\), %xmm12
  **	movaps	208\(%rsp\), %xmm13
! **	movq	264\(%rsp\), %rax
! **	movq	272\(%rsp\), %rdx
! **	movq	280\(%rsp\), %rcx
! **	movq	288\(%rsp\), %rbx
! **	movq	296\(%rsp\), %rsi
! **	movq	304\(%rsp\), %rdi
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
*************** op_t code[] = { inc, inc, dec, end, };
*** 146,153 ****
  **	movq	344\(%rsp\), %r12
  **	movq	352\(%rsp\), %r13
  **	movq	360\(%rsp\), %r14
- **	movaps	224\(%rsp\), %xmm14
  **	movq	368\(%rsp\), %r15
  **	movaps	240\(%rsp\), %xmm15
  **	addq	\$376, %rsp
  **...
--- 144,151 ----
  **	movq	344\(%rsp\), %r12
  **	movq	352\(%rsp\), %r13
  **	movq	360\(%rsp\), %r14
  **	movq	368\(%rsp\), %r15
+ **	movaps	224\(%rsp\), %xmm14
  **	movaps	240\(%rsp\), %xmm15
  **	addq	\$376, %rsp
  **...
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c	Sun Jul  6 22:32:35 2025
***************
*** 51,63 ****
  **.LFB[0-9]+:
  **	.cfi_startproc
  **...
! **	movl	%eax, 140\(%esp\)
! **	movl	%edx, 144\(%esp\)
! **	movl	%ecx, 148\(%esp\)
! **	movl	%ebx, 152\(%esp\)
! **	movl	%esi, 156\(%esp\)
! **	movl	%edi, 160\(%esp\)
! **	movl	%ebp, 164\(%esp\)
  **	movaps	%xmm0, 12\(%esp\)
  **	movaps	%xmm1, 28\(%esp\)
  **	movaps	%xmm2, 44\(%esp\)
--- 51,62 ----
  **.LFB[0-9]+:
  **	.cfi_startproc
  **...
! **	movl	%eax, 144\(%esp\)
! **	movl	%edx, 148\(%esp\)
! **	movl	%ecx, 152\(%esp\)
! **	movl	%ebx, 156\(%esp\)
! **	movl	%esi, 160\(%esp\)
! **	movl	%edi, 164\(%esp\)
  **	movaps	%xmm0, 12\(%esp\)
  **	movaps	%xmm1, 28\(%esp\)
  **	movaps	%xmm2, 44\(%esp\)
***************
*** 78,90 ****
  **	movaps	96\(%esp\), %xmm5
  **	movaps	112\(%esp\), %xmm6
  **	movaps	128\(%esp\), %xmm7
! **	movl	144\(%esp\), %eax
! **	movl	148\(%esp\), %edx
! **	movl	152\(%esp\), %ecx
! **	movl	156\(%esp\), %ebx
! **	movl	160\(%esp\), %esi
! **	movl	164\(%esp\), %edi
! **	movl	168\(%esp\), %ebp
  **...
  **	ret
  **	.cfi_endproc
--- 77,88 ----
  **	movaps	96\(%esp\), %xmm5
  **	movaps	112\(%esp\), %xmm6
  **	movaps	128\(%esp\), %xmm7
! **	movl	148\(%esp\), %eax
! **	movl	152\(%esp\), %edx
! **	movl	156\(%esp\), %ecx
! **	movl	160\(%esp\), %ebx
! **	movl	164\(%esp\), %esi
! **	movl	168\(%esp\), %edi
  **...
  **	ret
  **	.cfi_endproc
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c	Sun Jul  6 22:32:35 2025
***************
*** 50,64 ****
  **	.cfi_startproc
  **	subq	\$504, %rsp
  **...
! **	movq	%rax, 256\(%rsp\)
! **	movq	%rdx, 264\(%rsp\)
! **	movq	%rcx, 272\(%rsp\)
! **	movq	%rbx, 280\(%rsp\)
! **	movq	%rsi, 288\(%rsp\)
! **	movq	%rdi, 296\(%rsp\)
  **...
  **	movl	\$code\+8, %edi
- **	movq	%rbp, 304\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
--- 50,63 ----
  **	.cfi_startproc
  **	subq	\$504, %rsp
  **...
! **	movq	%rax, 264\(%rsp\)
! **	movq	%rdx, 272\(%rsp\)
! **	movq	%rcx, 280\(%rsp\)
! **	movq	%rbx, 288\(%rsp\)
! **	movq	%rsi, 296\(%rsp\)
! **	movq	%rdi, 304\(%rsp\)
  **...
  **	movl	\$code\+8, %edi
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
***************
*** 116,128 ****
  **	movaps	176\(%rsp\), %xmm11
  **	movaps	192\(%rsp\), %xmm12
  **	movaps	208\(%rsp\), %xmm13
! **	movq	256\(%rsp\), %rax
! **	movq	264\(%rsp\), %rdx
! **	movq	272\(%rsp\), %rcx
! **	movq	280\(%rsp\), %rbx
! **	movq	288\(%rsp\), %rsi
! **	movq	296\(%rsp\), %rdi
! **	movq	304\(%rsp\), %rbp
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
--- 115,126 ----
  **	movaps	176\(%rsp\), %xmm11
  **	movaps	192\(%rsp\), %xmm12
  **	movaps	208\(%rsp\), %xmm13
! **	movq	264\(%rsp\), %rax
! **	movq	272\(%rsp\), %rdx
! **	movq	280\(%rsp\), %rcx
! **	movq	288\(%rsp\), %rbx
! **	movq	296\(%rsp\), %rsi
! **	movq	304\(%rsp\), %rdi
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
***************
*** 132,140 ****
  **	movq	360\(%rsp\), %r14
  **	movq	368\(%rsp\), %r15
  **	movq	376\(%rsp\), %r16
  **	movaps	224\(%rsp\), %xmm14
  **	movaps	240\(%rsp\), %xmm15
- **	movq	384\(%rsp\), %r17
  **	movq	392\(%rsp\), %r18
  **	movq	400\(%rsp\), %r19
  **	movq	408\(%rsp\), %r20
--- 130,138 ----
  **	movq	360\(%rsp\), %r14
  **	movq	368\(%rsp\), %r15
  **	movq	376\(%rsp\), %r16
+ **	movq	384\(%rsp\), %r17
  **	movaps	224\(%rsp\), %xmm14
  **	movaps	240\(%rsp\), %xmm15
  **	movq	392\(%rsp\), %r18
  **	movq	400\(%rsp\), %r19
  **	movq	408\(%rsp\), %r20
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c	Sun Jul  6 22:32:35 2025
*************** foo (void *frame)
*** 26,30 ****
    }
  }
  
! /* { dg-final { scan-assembler-not "push" } } */
! /* { dg-final { scan-assembler-not "pop" } } */
--- 26,32 ----
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-7.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-7.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-7.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-7.c	Sun Jul  6 22:32:35 2025
*************** foo (void)
*** 17,23 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 17,23 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (void)
*** 34,40 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 34,40 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c	Sun Jul  6 22:32:35 2025
*************** foo (void)
*** 18,24 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 18,24 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (void)
*** 35,41 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 35,41 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c	Sun Jul  6 22:32:35 2025
*************** foo (fn_t bar)
*** 17,23 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 17,23 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (fn_t bar)
*** 34,40 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 34,40 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr119784a.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr119784a.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr119784a.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr119784a.c	Sun Jul  6 22:32:35 2025
***************
*** 11,24 ****
  **	.cfi_startproc
  **	subq	\$248, %rsp
  **...
! **	movq	%rax, \(%rsp\)
! **	movq	%rdx, 8\(%rsp\)
! **	movq	%rcx, 16\(%rsp\)
! **	movq	%rbx, 24\(%rsp\)
! **	movq	%rsi, 32\(%rsp\)
! **	movq	%rdi, 40\(%rsp\)
! **...
! **	movq	%rbp, 48\(%rsp\)
  **	movq	%r8, 56\(%rsp\)
  **	movq	%r9, 64\(%rsp\)
  **	movq	%r10, 72\(%rsp\)
--- 11,22 ----
  **	.cfi_startproc
  **	subq	\$248, %rsp
  **...
! **	movq	%rax, 8\(%rsp\)
! **	movq	%rdx, 16\(%rsp\)
! **	movq	%rcx, 24\(%rsp\)
! **	movq	%rbx, 32\(%rsp\)
! **	movq	%rsi, 40\(%rsp\)
! **	movq	%rdi, 48\(%rsp\)
  **	movq	%r8, 56\(%rsp\)
  **	movq	%r9, 64\(%rsp\)
  **	movq	%r10, 72\(%rsp\)
***************
*** 45,57 ****
  **	movq	%r31, 240\(%rsp\)
  **...
  **	call	\*code\(%rip\)
! **	movq	\(%rsp\), %rax
! **	movq	8\(%rsp\), %rdx
! **	movq	16\(%rsp\), %rcx
! **	movq	24\(%rsp\), %rbx
! **	movq	32\(%rsp\), %rsi
! **	movq	40\(%rsp\), %rdi
! **	movq	48\(%rsp\), %rbp
  **	movq	56\(%rsp\), %r8
  **	movq	64\(%rsp\), %r9
  **	movq	72\(%rsp\), %r10
--- 43,54 ----
  **	movq	%r31, 240\(%rsp\)
  **...
  **	call	\*code\(%rip\)
! **	movq	8\(%rsp\), %rax
! **	movq	16\(%rsp\), %rdx
! **	movq	24\(%rsp\), %rcx
! **	movq	32\(%rsp\), %rbx
! **	movq	40\(%rsp\), %rsi
! **	movq	48\(%rsp\), %rdi
  **	movq	56\(%rsp\), %r8
  **	movq	64\(%rsp\), %r9
  **	movq	72\(%rsp\), %r10
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1a.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1a.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1a.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,83 ----
+ /* { dg-do run } */
+ /* { dg-options "-save-temps -O2 -fno-omit-frame-pointer -mtune-ctrl=prologue_using_move,epilogue_using_move,use_leave" } */
+ 
+ #ifndef DONT_SAVE_REGS1
+ # define DONT_SAVE_REGS1 __attribute__((no_callee_saved_registers))
+ #endif
+ #ifndef DONT_SAVE_REGS2
+ # define DONT_SAVE_REGS2 __attribute__((no_callee_saved_registers))
+ #endif
+ 
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-linux*" } {^\t?\.}  } } */
+ 
+ /*
+ **do_test:
+ **.LFB[0-9]+:
+ **...
+ **	leave
+ **...
+ **	ret
+ **...
+ */
+ 
+ #include <stdlib.h>
+ 
+ DONT_SAVE_REGS1
+ __attribute__ ((weak, __optimize__ ("-fomit-frame-pointer")))
+ void
+ continuation (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
+ {
+   /* Clobber frame pointer register.  */
+   asm ("xor %%ebp, %%ebp" ::: "ebp");
+ 
+   if (arg1 != 17)
+     abort ();
+   if (arg2 != 8)
+     abort ();
+   if (arg3 != 20)
+     abort ();
+   if (arg4 != -3)
+     abort ();
+   if (arg5 != -4)
+     abort ();
+   if (arg6 != 26)
+     abort ();
+ }
+ 
+ DONT_SAVE_REGS2
+ __attribute__ ((weak, __optimize__ ("-fomit-frame-pointer")))
+ void
+ entry (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
+ {
+   /* Clobber frame pointer register.  */
+   asm ("xor %%ebp, %%ebp" ::: "ebp");
+ 
+   if (arg1 != 17)
+     abort ();
+   if (arg2 != 8)
+     abort ();
+   if (arg3 != 20)
+     abort ();
+   if (arg4 != -3)
+     abort ();
+   if (arg5 != -4)
+     abort ();
+   if (arg6 != 26)
+     abort ();
+   continuation (arg1, arg2, arg3, arg4, arg5, arg6);
+ }
+ 
+ __attribute__ ((weak))
+ void
+ do_test (void)
+ {
+   entry (17, 8, 20, -3, -4, 26);
+ }
+ 
+ int
+ main (void)
+ {
+   do_test ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1b.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1b.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1b.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-options "-save-temps -O2 -fno-omit-frame-pointer -mtune-ctrl=prologue_using_move,epilogue_using_move,use_leave" } */
+ 
+ #define DONT_SAVE_REGS1 __attribute__((preserve_none))
+ #define DONT_SAVE_REGS2 __attribute__((no_callee_saved_registers))
+ 
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-linux*" } {^\t?\.}  } } */
+ 
+ /*
+ **do_test:
+ **.LFB[0-9]+:
+ **...
+ **	leave
+ **...
+ **	ret
+ **...
+ */
+ 
+ #include "pr120840-1a.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1c.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1c.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1c.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-options "-save-temps -O2 -fno-omit-frame-pointer -mtune-ctrl=prologue_using_move,epilogue_using_move,use_leave" } */
+ 
+ #define DONT_SAVE_REGS1 __attribute__((no_callee_saved_registers))
+ #define DONT_SAVE_REGS2 __attribute__((preserve_none))
+ 
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-linux*" } {^\t?\.}  } } */
+ 
+ /*
+ **do_test:
+ **.LFB[0-9]+:
+ **...
+ **	leave
+ **...
+ **	ret
+ **...
+ */
+ 
+ #include "pr120840-1a.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1d.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1d.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120840-1d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120840-1d.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-options "-save-temps -O2 -fno-omit-frame-pointer -mtune-ctrl=prologue_using_move,epilogue_using_move,use_leave" } */
+ 
+ #define DONT_SAVE_REGS1 __attribute__((preserve_none))
+ #define DONT_SAVE_REGS2 __attribute__((preserve_none))
+ 
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-linux*" } {^\t?\.}  } } */
+ 
+ /*
+ **do_test:
+ **.LFB[0-9]+:
+ **...
+ **	leave
+ **...
+ **	ret
+ **...
+ */
+ 
+ #include "pr120840-1a.c"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120908.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120908.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120908.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120908.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile { target { lp64 && fpic } } } */
+ /* { dg-options "-O2 -fpic -mtls-dialect=gnu -mcmodel=large" } */
+ 
+ extern __thread long bar1;
+ long *
+ foo1 (void)
+ {
+   return &bar1;
+ }
+ 
+ static __thread long bar2;
+ long *
+ foo2 (void)
+ {
+   return &bar2;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-1.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-1.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **	call	mcount
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-10.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-10.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-10.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-10.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile { target { fpic && lp64 } } } */
+ /* { dg-options "-O2 -mcmodel=large -pg -mno-fentry -fpic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **1:	movabsq	\$_GLOBAL_OFFSET_TABLE_-1b, %r11
+ **	leaq	1b\(%rip\), %r10
+ **	addq	%r11, %r10
+ **	movabsq	\$mcount@PLTOFF, %r11
+ **	addq	%r11, %r10
+ **	call	\*%r10
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-11.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-11.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-11.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-11.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile { target { fpic && lp64 } } } */
+ /* { dg-options "-O2 -mrecord-mcount -mcmodel=large -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **1:	movabsq	\$mcount, %r10
+ **	call	\*%r10
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-12.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-12.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-12.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-12.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile { target { fpic && lp64 } } } */
+ /* { dg-options "-O2 -mcmodel=large -mrecord-mcount -pg -mno-fentry -fpic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **1:	movabsq	\$_GLOBAL_OFFSET_TABLE_-1b, %r11
+ **	leaq	1b\(%rip\), %r10
+ **	addq	%r11, %r10
+ **	movabsq	\$mcount@PLTOFF, %r11
+ **	addq	%r11, %r10
+ **	call	\*%r10
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-2.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-2.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -pg -mno-fentry -fpic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **	call	mcount@PLT
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-3.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-3.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-3.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -mnop-mcount -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **	.byte	0x0f, 0x1f, 0x44, 0x00, 0x00
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-4.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-4.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-4.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -pg -mno-fentry -mrecord-mcount -fno-pic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **1:	call	mcount
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-5.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-5.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-5.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -pg -mrecord-mcount -mno-fentry -fpic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **1:	call	mcount@PLT
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-6.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-6.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-6.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -mrecord-mcount -mnop-mcount -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **1:	.byte	0x0f, 0x1f, 0x44, 0x00, 0x00
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-7.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-7.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-7.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+ /* { dg-options "-O2 -pg -mno-fentry -fpic -fno-plt -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **	call	\*mcount@GOTPCREL\(%rip\)
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-8.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-8.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+ /* { dg-options "-O2 -pg -mrecord-mcount -mno-fentry -fpic -fno-plt -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **1:	call	\*mcount@GOTPCREL\(%rip\)
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-9.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-9.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr120936-9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr120936-9.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile { target { fpic && lp64 } } } */
+ /* { dg-options "-O2 -mcmodel=large -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB[0-9]+:
+ **...
+ **	.cfi_.*
+ **	movabsq	\$mcount, %r10
+ **	call	\*%r10
+ **...
+ */
+ 
+ void
+ foo (void)
+ {
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr92080-17.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr92080-17.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr92080-17.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr92080-17.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=x86-64-v3" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.}  } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=x86-64-v3 -fasynchronous-unwind-tables -fdwarf2-cfi-asm" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.}  } } */
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr93492-3.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr93492-3.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr93492-3.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr93492-3.c	Sun Jul  6 22:32:35 2025
*************** f10_endbr (void)
*** 10,13 ****
  {
  }
  
! /* { dg-final { scan-assembler "\t\.cfi_startproc\n\tendbr(32|64)\n.*\.LPFE0:\n\tnop\n1:\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
--- 10,13 ----
  {
  }
  
! /* { dg-final { scan-assembler "\t\.cfi_startproc\n\tendbr(32|64)\n.*\.LPFE0:\n\tnop\n\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr93492-5.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr93492-5.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/pr93492-5.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/pr93492-5.c	Sun Jul  6 22:32:35 2025
*************** foo (void)
*** 9,12 ****
  {
  }
  
! /* { dg-final { scan-assembler "\t\.cfi_startproc\n.*\.LPFE0:\n\tnop\n1:\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
--- 9,12 ----
  {
  }
  
! /* { dg-final { scan-assembler "\t\.cfi_startproc\n.*\.LPFE0:\n\tnop\n\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-1.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-1.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-1.c	Sun Jul  6 22:32:35 2025
***************
*** 1,5 ****
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O2" } */
  
  extern void boring(void);
  
--- 1,5 ----
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O2 -fomit-frame-pointer" } */
  
  extern void boring(void);
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-12.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-12.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-12.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-12.c	Sun Jul  6 22:32:35 2025
*************** foo (void)
*** 17,23 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 17,23 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (void)
*** 34,40 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 34,40 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-13.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-13.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-13.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-13.c	Sun Jul  6 22:32:35 2025
*************** foo (void)
*** 18,24 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 18,24 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (void)
*** 35,41 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 35,41 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-14.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-14.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-14.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-14.c	Sun Jul  6 22:32:35 2025
*************** foo (fn_t bar)
*** 17,23 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 17,23 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (fn_t bar)
*** 34,40 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 34,40 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-15.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-15.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-15.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-15.c	Sun Jul  6 22:32:35 2025
*************** foo (void)
*** 18,24 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
--- 18,24 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
*************** foo (void)
*** 33,39 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "popq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
--- 33,39 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)dx" 1 } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)si" 1 } } */
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)di" 1 } } */
  /* { dg-final { scan-assembler-times "popq\[\\t \]*%r8" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-23.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-23.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-23.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-23.c	Sun Jul  6 22:32:35 2025
*************** foo (uintptr_t p)
*** 19,25 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 19,25 ----
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
*************** foo (uintptr_t p)
*** 36,42 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 36,42 ----
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-6.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-6.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-6.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-6.c	Sun Jul  6 22:32:35 2025
*************** foo (void *frame)
*** 26,30 ****
    }
  }
  
! /* { dg-final { scan-assembler-not "push" } } */
! /* { dg-final { scan-assembler-not "pop" } } */
--- 26,32 ----
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-7.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-7.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/preserve-none-7.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/preserve-none-7.c	Sun Jul  6 22:32:35 2025
*************** foo (void *frame)
*** 26,30 ****
    }
  }
  
! /* { dg-final { scan-assembler-not "push" } } */
! /* { dg-final { scan-assembler-not "pop" } } */
--- 26,32 ----
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/vect-pr82426-2.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/vect-pr82426-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/vect-pr82426-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/vect-pr82426-2.c	Sun Jul  6 22:32:35 2025
***************
*** 0 ****
--- 1,31 ----
+ /* i?86 does not have V2SF, x32 does though.  */
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O3 -mavx -mfma -ffp-contract=on" } */
+ 
+ struct Matrix
+ {
+   float m11;
+   float m12;
+   float m21;
+   float m22;
+   float dx;
+   float dy;
+ };
+ 
+ struct Matrix multiply(const struct Matrix *a, const struct Matrix *b)
+ {
+   struct Matrix out;
+   out.m11 = a->m11*b->m11 + a->m12*b->m21;
+   out.m12 = a->m11*b->m12 + a->m12*b->m22;
+   out.m21 = a->m21*b->m11 + a->m22*b->m21;
+   out.m22 = a->m21*b->m12 + a->m22*b->m22;
+ 
+   out.dx = a->dx*b->m11  + a->dy*b->m21 + b->dx;
+   out.dy = a->dx*b->m12  + a->dy*b->m22 + b->dy;
+   return out;
+ }
+ 
+ /* The whole kernel should be vectorized with V4SF and V2SF operations.  */
+ /* { dg-final { scan-assembler-times "vadd" 1 } } */
+ /* { dg-final { scan-assembler-times "vmul" 2 } } */
+ /* { dg-final { scan-assembler-times "vfma" 2 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/i386/vect-pr82426.c gcc-16-20250706/gcc/testsuite/gcc.target/i386/vect-pr82426.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/i386/vect-pr82426.c	Sun Jun 29 22:33:48 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/i386/vect-pr82426.c	Sun Jul  6 22:32:35 2025
***************
*** 1,6 ****
  /* i?86 does not have V2SF, x32 does though.  */
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O3 -mavx -mfma" } */
  
  struct Matrix
  {
--- 1,6 ----
  /* i?86 does not have V2SF, x32 does though.  */
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O3 -mavx -mfma -ffp-contract=fast" } */
  
  struct Matrix
  {
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c gcc-16-20250706/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c	Sun Jun 29 22:33:49 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c	Sun Jul  6 22:32:36 2025
*************** int
*** 27,36 ****
  main () {
    int i;
    signed long sl;
!   signed char sc, expected_sc;
!   signed short ss, expected_ss;
!   signed int si, expected_si;
!   signed long long int sll, expected_sll;
    signed char *psc;
    signed short *pss;
    signed int *psi;
--- 27,36 ----
  main () {
    int i;
    signed long sl;
!   signed char sc[2], expected_sc;
!   signed short ss[2], expected_ss;
!   signed int si[2], expected_si;
!   signed long long int sll[2], expected_sll;
    signed char *psc;
    signed short *pss;
    signed int *psi;
*************** main () {
*** 41,96 ****
    printf("Data to store [%d] = 0x%llx %llx\n", i, val.ull[1], val.ull[0]);
  #endif
  
!   psc = &sc;
!   pss = &ss;
!   psi = &si;
!   psll = &sll;
  
    sl = 1;
!   sc = 0xA1;
    expected_sc = 0xA1;
    __builtin_altivec_tr_stxvrbx (store_data, sl, psc);
  
!   if (expected_sc != sc & 0xFF)
  #if DEBUG
      printf(" ERROR: Signed char = 0x%x doesn't match expected value 0x%x\n",
! 	   sc & 0xFF, expected_sc);
  #else
      abort();
  #endif
  
!   ss = 0x52;
    expected_ss = 0x1752;
    __builtin_altivec_tr_stxvrhx (store_data, sl, pss);
  
!   if (expected_ss != ss & 0xFFFF)
  #if DEBUG
      printf(" ERROR: Signed short = 0x%x doesn't match expected value 0x%x\n",
! 	   ss, expected_ss) & 0xFFFF;
  #else
      abort();
  #endif
  
!   si = 0x21;
    expected_si = 0x54321721;
    __builtin_altivec_tr_stxvrwx (store_data, sl, psi);
  
!   if (expected_si != si)
  #if DEBUG
      printf(" ERROR: Signed int = 0x%x doesn't match expected value 0x%x\n",
! 	   si, expected_si);
  #else
      abort();
  #endif
  
!   sll = 0x12FFULL;
    expected_sll = 0xdcba9876543217FF;
    __builtin_altivec_tr_stxvrdx (store_data, sl, psll);
  
!   if (expected_sll != sll)
  #if DEBUG
      printf(" ERROR: Signed long long int = 0x%llx doesn't match expected value 0x%llx\n",
! 	   sll, expected_sll);
  #else
      abort();
  #endif
--- 41,96 ----
    printf("Data to store [%d] = 0x%llx %llx\n", i, val.ull[1], val.ull[0]);
  #endif
  
!   psc = &sc[0];
!   pss = &ss[0];
!   psi = &si[0];
!   psll = &sll[0];
  
    sl = 1;
!   sc[0] = 0xA1;
    expected_sc = 0xA1;
    __builtin_altivec_tr_stxvrbx (store_data, sl, psc);
  
!   if (expected_sc != sc[0] & 0xFF)
  #if DEBUG
      printf(" ERROR: Signed char = 0x%x doesn't match expected value 0x%x\n",
! 	   sc[0] & 0xFF, expected_sc);
  #else
      abort();
  #endif
  
!   ss[0] = 0x52;
    expected_ss = 0x1752;
    __builtin_altivec_tr_stxvrhx (store_data, sl, pss);
  
!   if (expected_ss != ss[0] & 0xFFFF)
  #if DEBUG
      printf(" ERROR: Signed short = 0x%x doesn't match expected value 0x%x\n",
! 	   ss[0], expected_ss) & 0xFFFF;
  #else
      abort();
  #endif
  
!   si[0] = 0x21;
    expected_si = 0x54321721;
    __builtin_altivec_tr_stxvrwx (store_data, sl, psi);
  
!   if (expected_si != si[0])
  #if DEBUG
      printf(" ERROR: Signed int = 0x%x doesn't match expected value 0x%x\n",
! 	   si[0], expected_si);
  #else
      abort();
  #endif
  
!   sll[0] = 0x12FFULL;
    expected_sll = 0xdcba9876543217FF;
    __builtin_altivec_tr_stxvrdx (store_data, sl, psll);
  
!   if (expected_sll != sll[0])
  #if DEBUG
      printf(" ERROR: Signed long long int = 0x%llx doesn't match expected value 0x%llx\n",
! 	   sll[0], expected_sll);
  #else
      abort();
  #endif
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c908" { target { rv64 } } } */
  /* XuanTie C908 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c908" { target { rv64 } } } */
  /* XuanTie C908 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c908v" { target { rv64 } } } */
  /* XuanTie C908v => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c908v" { target { rv64 } } } */
  /* XuanTie C908v => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c910" { target { rv64 } } } */
  /* XuanTie C910 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_xtheadba_
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c910" { target { rv64 } } } */
  /* XuanTie C910 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_xtheadba_
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c910v2" { target { rv64 } } } */
  /* XuanTie C910v2 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c910v2" { target { rv64 } } } */
  /* XuanTie C910v2 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c920" { target { rv64 } } } */
  /* XuanTie c920 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_"xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync_xtheadvector */
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c920" { target { rv64 } } } */
  /* XuanTie c920 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_"xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync_xtheadvector */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c920v2" { target { rv64 } } } */
  /* XuanTie C920v2 => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei _zihintntl_zihintpause_zihpm_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_zbb_zbc_zbs_zvfbfmin_zvfbfwma_zvfh_sscofpmf_sstc_svinval_svnapot_svpbmt_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadsync_xtheadvdot */
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
  /* { dg-options "-mcpu=xt-c920v2" { target { rv64 } } } */
  /* XuanTie C920v2 => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei _zihintntl_zihintpause_zihpm_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_zbb_zbc_zbs_zvfbfmin_zvfbfwma_zvfh_sscofpmf_sstc_svinval_svnapot_svpbmt_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadsync_xtheadvdot */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr118241-b.cc gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr118241-b.cc
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr118241-b.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr118241-b.cc	Sun Jul  6 22:32:37 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64imafdc_zba_zbb_zbs_zicbom_zicbop -mabi=lp64d" } */
+ 
+ /* Reduced from libsanitizer::asan_allocator.  */
+ 
+ enum a { c };
+ class d;
+ struct e {
+   long count;
+   void *batch[];
+ };
+ template <typename> class f {
+ public:
+   void g() {
+     if (e *b = h->i())
+       for (; b->count;)
+         if (6 < b->count)
+           __builtin_prefetch(b->batch[6]);
+   }
+   d *h;
+ };
+ class d {
+ public:
+   e *i();
+ };
+ struct j {
+   f<int> k;
+   j(a);
+   void l() { k.g(); }
+ } a(c);
+ void m() { a.l(); }
+ 
+ /* { dg-final { scan-assembler-times "prefetch.r\t0\\(\[a-x0-9\]+\\)" 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr118241.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr118241.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr118241.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr118241.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-options "-march=rv64gc_zicbop" { target { rv64 } } } */
  /* { dg-options "-march=rv32gc_zicbop" { target { rv32 } } } */
  /* { dg-skip-if "" { *-*-* } { "-O0" } } */
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-options "-march=rv64gc_zicbop" { target { rv64 } } } */
  /* { dg-options "-march=rv32gc_zicbop" { target { rv32 } } } */
  /* { dg-skip-if "" { *-*-* } { "-O0" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr120223.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr120223.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr120223.c	Sun Jun 29 22:33:50 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr120223.c	Sun Jul  6 22:32:37 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-options "-mcpu=thead-c906" }  */
  long foo(long x) { return x ^ 0x80000000; }
  
--- 1,4 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
  /* { dg-options "-mcpu=thead-c906" }  */
  long foo(long x) { return x ^ 0x80000000; }
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr120659.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr120659.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr120659.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr120659.c	Sun Jul  6 22:32:37 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=sifive-x280 -mabi=lp64" } */
+ 
+ _Float16 f;
+ void foo() { f /= 3; }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr120714.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr120714.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/pr120714.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/pr120714.c	Sun Jul  6 22:32:37 2025
***************
*** 0 ****
--- 1,40 ----
+ /* Test checking that the backtrace on large frame size with additional
+    SP shift in the prologue won't broken when compiled with the
+    -fstack-clash-protection option.  */
+ /* { dg-do run { target { *-*-linux* } } } */
+ /* -O0 does not have enough optimizations.
+    -O2/-O3 does inline and reduces number of addresses in the backtrace.  */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O2" "-O3" } } */
+ /* { dg-options "-g -fstack-clash-protection" } */
+ 
+ #include <execinfo.h>
+ 
+ #define MAX 4000
+ 
+ void goo ()
+ {
+   int addresses;
+   void *buffer[10];
+ 
+   addresses = backtrace (buffer, 10);
+   if (addresses != 6)
+     __builtin_abort ();
+ }
+ 
+ int foo (int a)
+ {
+   long long A[MAX];
+   for (int i = 0; i < MAX; i++)
+     A[i] = i;
+ 
+   goo ();
+ 
+   return A[a % MAX];
+ }
+ 
+ int main ()
+ {
+   if (foo (20) != 20)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c	Sun Jul  6 22:32:47 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target rvv_zvl256b_ok } */
+ /* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -mrvv-vector-bits=zvl -O2" } */
+ 
+ unsigned char a = 5;
+ long long c[18];
+ 
+ static void d ()
+ {
+   for (short i = 0; i < 60; i += 65413)
+     for (char j = 0; j < 18; j++)
+       {
+ 	for (char k = 0; k < 18; k++)
+ 	  a *= 143;
+ 	for (char k = 0; k < 6; k++)
+ 	  for (char l = 0; l < 18; l++)
+ 	    c[l] = 0;
+       }
+ }
+ 
+ int main ()
+ {
+   d ();
+   if (a + c[0] != 69)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u16.c	Sun Jul  6 22:32:47 2025
***************
*** 6,10 ****
  DEF_VEC_SAT_U_SUB_TRUNC_FMT_1(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
! /* { dg-final { scan-assembler-times {vssubu\.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vnsrl\.wi} 1 } } */
--- 6,10 ----
  DEF_VEC_SAT_U_SUB_TRUNC_FMT_1(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
! /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
  /* { dg-final { scan-assembler-times {vnsrl\.wi} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u32.c	Sun Jul  6 22:32:47 2025
***************
*** 6,10 ****
  DEF_VEC_SAT_U_SUB_TRUNC_FMT_1(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
! /* { dg-final { scan-assembler-times {vssubu\.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vnsrl\.wi} 1 } } */
--- 6,10 ----
  DEF_VEC_SAT_U_SUB_TRUNC_FMT_1(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
! /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
  /* { dg-final { scan-assembler-times {vnsrl\.wi} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_trunc-1-u8.c	Sun Jul  6 22:32:47 2025
***************
*** 6,10 ****
  DEF_VEC_SAT_U_SUB_TRUNC_FMT_1(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
! /* { dg-final { scan-assembler-times {vssubu\.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vnsrl\.wi} 1 } } */
--- 6,10 ----
  DEF_VEC_SAT_U_SUB_TRUNC_FMT_1(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
! /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
  /* { dg-final { scan-assembler-times {vnsrl\.wi} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VF_MULOP_CASE_0 (_Float16, +, -, nad
*** 9,14 ****
--- 9,16 ----
  DEF_VF_MULOP_CASE_0 (_Float16, -, -, nsub)
  DEF_VF_MULOP_ACC_CASE_0 (_Float16, +, +, acc)
  DEF_VF_MULOP_ACC_CASE_0 (_Float16, -, +, sac)
+ DEF_VF_MULOP_ACC_CASE_0 (_Float16, +, -, nacc)
+ DEF_VF_MULOP_ACC_CASE_0 (_Float16, -, -, nsac)
  
  /* { dg-final { scan-assembler-times {vfmadd.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsub.vf} 1 } } */
*************** DEF_VF_MULOP_ACC_CASE_0 (_Float16, -, +,
*** 16,18 ****
--- 18,22 ----
  /* { dg-final { scan-assembler-times {vfnmsub.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmacc.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsac.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfnmacc.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfnmsac.vf} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VF_MULOP_CASE_0 (float, +, -, nadd)
*** 9,14 ****
--- 9,16 ----
  DEF_VF_MULOP_CASE_0 (float, -, -, nsub)
  DEF_VF_MULOP_ACC_CASE_0 (float, +, +, acc)
  DEF_VF_MULOP_ACC_CASE_0 (float, -, +, sac)
+ DEF_VF_MULOP_ACC_CASE_0 (float, +, -, nacc)
+ DEF_VF_MULOP_ACC_CASE_0 (float, -, -, nsac)
  
  /* { dg-final { scan-assembler-times {vfmadd.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsub.vf} 1 } } */
*************** DEF_VF_MULOP_ACC_CASE_0 (float, -, +, sa
*** 16,18 ****
--- 18,22 ----
  /* { dg-final { scan-assembler-times {vfnmsub.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmacc.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsac.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfnmacc.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfnmsac.vf} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VF_MULOP_CASE_0 (double, +, -, nadd)
*** 9,14 ****
--- 9,16 ----
  DEF_VF_MULOP_CASE_0 (double, -, -, nsub)
  DEF_VF_MULOP_ACC_CASE_0 (double, +, +, acc)
  DEF_VF_MULOP_ACC_CASE_0 (double, -, +, sac)
+ DEF_VF_MULOP_ACC_CASE_0 (double, +, -, nacc)
+ DEF_VF_MULOP_ACC_CASE_0 (double, -, -, nsac)
  
  /* { dg-final { scan-assembler-times {vfmadd.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsub.vf} 1 } } */
*************** DEF_VF_MULOP_ACC_CASE_0 (double, -, +, s
*** 16,18 ****
--- 18,22 ----
  /* { dg-final { scan-assembler-times {vfnmsub.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmacc.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsac.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfnmacc.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfnmsac.vf} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c	Sun Jul  6 22:32:59 2025
***************
*** 9,11 ****
--- 9,13 ----
  /* { dg-final { scan-assembler-not {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler-not {vfmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c	Sun Jul  6 22:32:59 2025
***************
*** 9,11 ****
--- 9,13 ----
  /* { dg-final { scan-assembler-not {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler-not {vfmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c	Sun Jul  6 22:32:59 2025
***************
*** 9,11 ****
--- 9,13 ----
  /* { dg-final { scan-assembler-not {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler-not {vfmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VF_MULOP_CASE_1 (_Float16, +, -, nad
*** 9,14 ****
--- 9,16 ----
  DEF_VF_MULOP_CASE_1 (_Float16, -, -, nsub, VF_MULOP_BODY_X16)
  DEF_VF_MULOP_ACC_CASE_1 (_Float16, +, +, acc, VF_MULOP_ACC_BODY_X128)
  DEF_VF_MULOP_ACC_CASE_1 (_Float16, -, +, sac, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_ACC_CASE_1 (_Float16, +, -, nacc, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_ACC_CASE_1 (_Float16, -, -, nsac, VF_MULOP_ACC_BODY_X128)
  
  /* { dg-final { scan-assembler {vfmadd.vf} } } */
  /* { dg-final { scan-assembler {vfmsub.vf} } } */
*************** DEF_VF_MULOP_ACC_CASE_1 (_Float16, -, +,
*** 16,18 ****
--- 18,22 ----
  /* { dg-final { scan-assembler {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler {vfmacc.vf} } } */
  /* { dg-final { scan-assembler {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VF_MULOP_CASE_1 (float, +, -, nadd,
*** 9,14 ****
--- 9,16 ----
  DEF_VF_MULOP_CASE_1 (float, -, -, nsub, VF_MULOP_BODY_X16)
  DEF_VF_MULOP_ACC_CASE_1 (float, +, +, acc, VF_MULOP_ACC_BODY_X128)
  DEF_VF_MULOP_ACC_CASE_1 (float, -, +, sac, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_ACC_CASE_1 (float, +, -, nacc, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_ACC_CASE_1 (float, -, -, nsac, VF_MULOP_ACC_BODY_X128)
  
  /* { dg-final { scan-assembler {vfmadd.vf} } } */
  /* { dg-final { scan-assembler {vfmsub.vf} } } */
*************** DEF_VF_MULOP_ACC_CASE_1 (float, -, +, sa
*** 16,18 ****
--- 18,22 ----
  /* { dg-final { scan-assembler {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler {vfmacc.vf} } } */
  /* { dg-final { scan-assembler {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VF_MULOP_CASE_1 (double, +, -, nadd,
*** 9,14 ****
--- 9,16 ----
  DEF_VF_MULOP_CASE_1 (double, -, -, nsub, VF_MULOP_BODY_X16)
  DEF_VF_MULOP_ACC_CASE_1 (double, +, +, acc, VF_MULOP_ACC_BODY_X128)
  DEF_VF_MULOP_ACC_CASE_1 (double, -, +, sac, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_ACC_CASE_1 (double, +, -, nacc, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_ACC_CASE_1 (double, -, -, nsac, VF_MULOP_ACC_BODY_X128)
  
  /* { dg-final { scan-assembler {vfmadd.vf} } } */
  /* { dg-final { scan-assembler {vfmsub.vf} } } */
*************** DEF_VF_MULOP_ACC_CASE_1 (double, -, +, s
*** 16,18 ****
--- 18,22 ----
  /* { dg-final { scan-assembler {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler {vfmacc.vf} } } */
  /* { dg-final { scan-assembler {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c	Sun Jul  6 22:32:59 2025
***************
*** 9,11 ****
--- 9,13 ----
  /* { dg-final { scan-assembler-not {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler-not {vfmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c	Sun Jul  6 22:32:59 2025
***************
*** 9,11 ****
--- 9,13 ----
  /* { dg-final { scan-assembler-not {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler-not {vfmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c	Sun Jul  6 22:32:59 2025
***************
*** 9,11 ****
--- 9,13 ----
  /* { dg-final { scan-assembler-not {vfnmsub.vf} } } */
  /* { dg-final { scan-assembler-not {vfmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h	Sun Jul  6 22:32:59 2025
***************
*** 113,120 ****
    VF_MULOP_ACC_BODY_X128 (op, neg)
  
  #define DEF_VF_MULOP_ACC_CASE_1(T, OP, NEG, NAME, BODY)                        \
!   T test_vf_mulop_acc_##NAME##_##T##_case_1 (T *restrict out, T *restrict in,  \
! 					     T x, unsigned n)                  \
    {                                                                            \
      unsigned k = 0;                                                            \
      T tmp = x + 3;                                                             \
--- 113,121 ----
    VF_MULOP_ACC_BODY_X128 (op, neg)
  
  #define DEF_VF_MULOP_ACC_CASE_1(T, OP, NEG, NAME, BODY)                        \
!   void test_vf_mulop_acc_##NAME##_##T##_case_1 (T *restrict out,               \
! 						T *restrict in, T x,           \
! 						unsigned n)                    \
    {                                                                            \
      unsigned k = 0;                                                            \
      T tmp = x + 3;                                                             \
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ #include "vf_mulop_data.h"
+ 
+ #define T    _Float16
+ #define NAME nadd
+ 
+ DEF_VF_MULOP_ACC_CASE_0_WRAP (T, +, -, NAME)
+ 
+ #define TEST_DATA                        TEST_MULOP_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, c, b, x, n) RUN_VF_MULOP_ACC_CASE_0_WRAP(T, NAME, b, c, x, n)
+ #define TEST_OUT b
+ 
+ #include "vf_mulop_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ #include "vf_mulop_data.h"
+ 
+ #define T    float
+ #define NAME nadd
+ 
+ DEF_VF_MULOP_ACC_CASE_0_WRAP (T, +, -, NAME)
+ 
+ #define TEST_DATA                        TEST_MULOP_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, c, b, x, n) RUN_VF_MULOP_ACC_CASE_0_WRAP(T, NAME, b, c, x, n)
+ #define TEST_OUT b
+ 
+ #include "vf_mulop_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ #include "vf_mulop_data.h"
+ 
+ #define T    double
+ #define NAME nadd
+ 
+ DEF_VF_MULOP_ACC_CASE_0_WRAP (T, +, -, NAME)
+ 
+ #define TEST_DATA                        TEST_MULOP_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, c, b, x, n) RUN_VF_MULOP_ACC_CASE_0_WRAP(T, NAME, b, c, x, n)
+ #define TEST_OUT b
+ 
+ #include "vf_mulop_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ #include "vf_mulop_data.h"
+ 
+ #define T    _Float16
+ #define NAME nsub
+ 
+ DEF_VF_MULOP_ACC_CASE_0_WRAP (T, -, -, NAME)
+ 
+ #define TEST_DATA                        TEST_MULOP_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, c, b, x, n) RUN_VF_MULOP_ACC_CASE_0_WRAP(T, NAME, b, c, x, n)
+ #define TEST_OUT b
+ 
+ #include "vf_mulop_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ #include "vf_mulop_data.h"
+ 
+ #define T    float
+ #define NAME nsub
+ 
+ DEF_VF_MULOP_ACC_CASE_0_WRAP (T, -, -, NAME)
+ 
+ #define TEST_DATA                        TEST_MULOP_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, c, b, x, n) RUN_VF_MULOP_ACC_CASE_0_WRAP(T, NAME, b, c, x, n)
+ #define TEST_OUT b
+ 
+ #include "vf_mulop_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ #include "vf_mulop_data.h"
+ 
+ #define T    double
+ #define NAME nsub
+ 
+ DEF_VF_MULOP_ACC_CASE_0_WRAP (T, -, -, NAME)
+ 
+ #define TEST_DATA                        TEST_MULOP_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, c, b, x, n) RUN_VF_MULOP_ACC_CASE_0_WRAP(T, NAME, b, c, x, n)
+ #define TEST_OUT b
+ 
+ #include "vf_mulop_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vsadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vsadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vsadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vsadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vsaddu.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vssubu.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vsaddu.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vssubu.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vsaddu.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vssubu.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vsaddu.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vssubu.vx} 1 } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_SIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c	Sun Jul  6 22:32:59 2025
*************** TEST_BINARY_VX_UNSIGNED_0(T)
*** 18,20 ****
--- 18,21 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 29,31 ****
--- 30,33 ----
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
  /* { dg-final { scan-assembler-not {vmin.vx} } } */
+ /* { dg-final { scan-assembler-not {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
  /* { dg-final { scan-assembler-not {vminu.vx} } } */
  /* { dg-final { scan-assembler-not {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler-not {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c	Sun Jul  6 22:32:59 2025
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 18,23 ****
--- 18,24 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_FUNC_WRAP(T), sat_add, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_SUB_FUNC_WRAP(T), sat_sub, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_U_ADD_F
*** 30,32 ****
--- 31,34 ----
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
  /* { dg-final { scan-assembler {vminu.vx} } } */
  /* { dg-final { scan-assembler {vsaddu.vx} } } */
+ /* { dg-final { scan-assembler {vssubu.vx} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Jul  6 22:32:59 2025
*************** DEF_SAT_U_ADD(uint16_t)
*** 282,304 ****
  DEF_SAT_U_ADD(uint32_t)
  DEF_SAT_U_ADD(uint64_t)
  
  #define SAT_U_ADD_FUNC(T) test_##T##_sat_add
  #define SAT_U_ADD_FUNC_WRAP(T) SAT_U_ADD_FUNC(T)
  
! #define TEST_BINARY_VX_SIGNED_0(T)                      \
!   DEF_VX_BINARY_CASE_0_WRAP(T, +, add)                  \
!   DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)                  \
!   DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)         \
!   DEF_VX_BINARY_CASE_0_WRAP(T, &, and)                  \
!   DEF_VX_BINARY_CASE_0_WRAP(T, |, or)                   \
!   DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)                  \
!   DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)                  \
!   DEF_VX_BINARY_CASE_0_WRAP(T, /, div)                  \
!   DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)                  \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max) \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max) \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min) \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_1_WARP(T), min)
  
  #define TEST_BINARY_VX_UNSIGNED_0(T)                       \
    DEF_VX_BINARY_CASE_0_WRAP(T, +, add)                     \
--- 282,340 ----
  DEF_SAT_U_ADD(uint32_t)
  DEF_SAT_U_ADD(uint64_t)
  
+ #define DEF_SAT_U_SUB(T)           \
+ T                                  \
+ test_##T##_sat_sub (T a, T b)      \
+ {                                  \
+   return (a - b) & (-(T)(a >= b)); \
+ }
+ 
+ DEF_SAT_U_SUB(uint8_t)
+ DEF_SAT_U_SUB(uint16_t)
+ DEF_SAT_U_SUB(uint32_t)
+ DEF_SAT_U_SUB(uint64_t)
+ 
+ #define DEF_SAT_S_ADD(T, UT, MIN, MAX) \
+ T                                      \
+ test_##T##_sat_add (T x, T y)          \
+ {                                      \
+   T sum = (UT)x + (UT)y;               \
+   return (x ^ y) < 0                   \
+     ? sum                              \
+     : (sum ^ x) >= 0                   \
+       ? sum                            \
+       : x < 0 ? MIN : MAX;             \
+ }
+ 
+ DEF_SAT_S_ADD(int8_t, uint8_t, INT8_MIN, INT8_MAX)
+ DEF_SAT_S_ADD(int16_t, uint16_t, INT16_MIN, INT16_MAX)
+ DEF_SAT_S_ADD(int32_t, uint32_t, INT32_MIN, INT32_MAX)
+ DEF_SAT_S_ADD(int64_t, uint64_t, INT64_MIN, INT64_MAX)
+ 
  #define SAT_U_ADD_FUNC(T) test_##T##_sat_add
  #define SAT_U_ADD_FUNC_WRAP(T) SAT_U_ADD_FUNC(T)
  
! #define SAT_U_SUB_FUNC(T) test_##T##_sat_sub
! #define SAT_U_SUB_FUNC_WRAP(T) SAT_U_SUB_FUNC(T)
! 
! #define SAT_S_ADD_FUNC(T) test_##T##_sat_add
! #define SAT_S_ADD_FUNC_WRAP(T) SAT_S_ADD_FUNC(T)
! 
! #define TEST_BINARY_VX_SIGNED_0(T)                         \
!   DEF_VX_BINARY_CASE_0_WRAP(T, +, add)                     \
!   DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)                     \
!   DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)            \
!   DEF_VX_BINARY_CASE_0_WRAP(T, &, and)                     \
!   DEF_VX_BINARY_CASE_0_WRAP(T, |, or)                      \
!   DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)                     \
!   DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)                     \
!   DEF_VX_BINARY_CASE_0_WRAP(T, /, div)                     \
!   DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)                     \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)    \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)    \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min)    \
!   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_1_WARP(T), min)    \
!   DEF_VX_BINARY_CASE_2_WRAP(T, SAT_S_ADD_FUNC(T), sat_add) \
  
  #define TEST_BINARY_VX_UNSIGNED_0(T)                       \
    DEF_VX_BINARY_CASE_0_WRAP(T, +, add)                     \
*************** DEF_SAT_U_ADD(uint64_t)
*** 313,318 ****
    DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)    \
    DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min)    \
    DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_1_WARP(T), min)    \
!   DEF_VX_BINARY_CASE_2_WRAP(T, SAT_U_ADD_FUNC(T), sat_add)
  
  #endif
--- 349,355 ----
    DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)    \
    DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min)    \
    DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_1_WARP(T), min)    \
!   DEF_VX_BINARY_CASE_2_WRAP(T, SAT_U_ADD_FUNC(T), sat_add) \
!   DEF_VX_BINARY_CASE_2_WRAP(T, SAT_U_SUB_FUNC(T), sat_sub) \
  
  #endif
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Jul  6 22:32:59 2025
*************** uint64_t TEST_BINARY_DATA(uint64_t, sat_
*** 4318,4321 ****
--- 4318,4713 ----
    },
  };
  
+ uint8_t TEST_BINARY_DATA(uint8_t, sat_sub)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 127 },
+     {
+        127,  127,  127,  127,
+        128,  128,  128,  128,
+        255,  255,  255,  255,
+          1,    1,    1,    1,
+     },
+     {
+          0,    0,    0,    0,
+          1,    1,    1,    1,
+        128,  128,  128,  128,
+          0,    0,    0,    0,
+     },
+   },
+   {
+     { 254 },
+     {
+        128,  128,  128,  128,
+        255,  255,  255,  255,
+        127,  127,  127,  127,
+          2,    2,    2,    2,
+     },
+     {
+          0,    0,    0,    0,
+          1,    1,    1,    1,
+          0,    0,    0,    0,
+          0,    0,    0,    0,
+     },
+   },
+ };
+ 
+ uint16_t TEST_BINARY_DATA(uint16_t, sat_sub)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 32767 },
+     {
+        32767,  32767,  32767,  32767,
+        32768,  32768,  32768,  32768,
+        65535,  65535,  65535,  65535,
+            1,      1,      1,      1,
+     },
+     {
+            0,      0,      0,      0,
+            1,      1,      1,      1,
+        32768,  32768,  32768,  32768,
+            0,      0,      0,      0,
+     },
+   },
+   {
+     { 65534 },
+     {
+        32768,  32768,  32768,  32768,
+        65535,  65535,  65535,  65535,
+        32767,  32767,  32767,  32767,
+            2,      2,      2,      2,
+     },
+     {
+            0,      0,      0,      0,
+            1,      1,      1,      1,
+            0,      0,      0,      0,
+            0,      0,      0,      0,
+     },
+   },
+ };
+ 
+ uint32_t TEST_BINARY_DATA(uint32_t, sat_sub)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 2147483647 },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+        2147483648,  2147483648,  2147483648,  2147483648,
+        4294967295,  4294967295,  4294967295,  4294967295,
+                 1,           1,           1,           1,
+     },
+     {
+                 0,           0,           0,           0,
+                 1,           1,           1,           1,
+        2147483648,  2147483648,  2147483648,  2147483648,
+                 0,           0,           0,           0,
+     },
+   },
+   {
+     { 4294967294 },
+     {
+        2147483648,  2147483648,  2147483648,  2147483648,
+        4294967295,  4294967295,  4294967295,  4294967295,
+        2147483647,  2147483647,  2147483647,  2147483647,
+                 2,           2,           2,           2,
+     },
+     {
+                 0,           0,           0,           0,
+                 1,           1,           1,           1,
+                 0,           0,           0,           0,
+                 0,           0,           0,           0,
+     },
+   },
+ };
+ 
+ uint64_t TEST_BINARY_DATA(uint64_t, sat_sub)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 9223372036854775807ull },
+     {
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+        9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,
+       18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+                             1,                       1,                       1,                       1,
+     },
+     {
+                             0,                       0,                       0,                       0,
+                             1,                       1,                       1,                       1,
+        9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,
+                             0,                       0,                       0,                       0,
+     },
+   },
+   {
+     { 18446744073709551614ull },
+     {
+        9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,
+       18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+                             2,                       2,                       2,                       2,
+     },
+     {
+                             0,                       0,                       0,                       0,
+                             1,                       1,                       1,                       1,
+                             0,                       0,                       0,                       0,
+                             0,                       0,                       0,                       0,
+     },
+   },
+ };
+ 
+ int8_t TEST_BINARY_DATA(int8_t, sat_add)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 127 },
+     {
+        127,  127,  127,  127,
+       -128, -128, -128, -128,
+       -127, -127, -127, -127,
+          1,    1,    1,    1,
+     },
+     {
+        127,  127,  127,  127,
+         -1,   -1,   -1,   -1,
+          0,    0,    0,    0,
+        127,  127,  127,  127,
+     },
+   },
+   {
+     { -128 },
+     {
+        127,  127,  127,  127,
+         -1,   -1,   -1,   -1,
+       -128, -128, -128, -128,
+          1,    1,    1,    1,
+     },
+     {
+         -1,   -1,   -1,   -1,
+       -128, -128, -128, -128,
+       -128, -128, -128, -128,
+       -127, -127, -127, -127,
+     },
+   },
+ };
+ 
+ int16_t TEST_BINARY_DATA(int16_t, sat_add)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 32767 },
+     {
+        32767,  32767,  32767,  32767,
+       -32768, -32768, -32768, -32768,
+       -32767, -32767, -32767, -32767,
+            1,      1,      1,      1,
+     },
+     {
+        32767,  32767,  32767,  32767,
+           -1,     -1,     -1,     -1,
+            0,      0,      0,      0,
+        32767,  32767,  32767,  32767,
+     },
+   },
+   {
+     { -32768 },
+     {
+        32767,  32767,  32767,  32767,
+           -1,     -1,     -1,     -1,
+       -32768, -32768, -32768, -32768,
+            1,      1,      1,      1,
+     },
+     {
+           -1,     -1,     -1,     -1,
+       -32768, -32768, -32768, -32768,
+       -32768, -32768, -32768, -32768,
+       -32767, -32767, -32767, -32767,
+     },
+   },
+ };
+ 
+ int32_t TEST_BINARY_DATA(int32_t, sat_add)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 2147483647 },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+       -2147483647, -2147483647, -2147483647, -2147483647,
+                 1,           1,           1,           1,
+     },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+                -1,          -1,          -1,          -1,
+                 0,           0,           0,           0,
+        2147483647,  2147483647,  2147483647,  2147483647,
+     },
+   },
+   {
+     { -2147483648 },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+                -1,          -1,          -1,          -1,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+                 1,           1,           1,           1,
+     },
+     {
+                -1,          -1,          -1,          -1,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+       -2147483647, -2147483647, -2147483647, -2147483647,
+     },
+   },
+ };
+ 
+ int64_t TEST_BINARY_DATA(int64_t, sat_add)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+   },
+   {
+     { 9223372036854775807ull },
+     {
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+       -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull,
+                             1,                       1,                       1,                       1,
+     },
+     {
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+         -1,   -1,   -1,   -1,
+          0,    0,    0,    0,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+     },
+   },
+   {
+     { -9223372036854775808ull },
+     {
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+                            -1,                      -1,                      -1,                      -1,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+                             1,                       1,                       1,                       1,
+     },
+     {
+                            -1,                      -1,                      -1,                      -1,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+       -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull,
+     },
+   },
+ };
+ 
  #endif
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i16.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int16_t
+ #define NAME       sat_add
+ #define FUNC       SAT_S_ADD_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i32.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int32_t
+ #define NAME       sat_add
+ #define FUNC       SAT_S_ADD_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i64.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int64_t
+ #define NAME       sat_add
+ #define FUNC       SAT_S_ADD_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsadd-run-1-i8.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int8_t
+ #define NAME       sat_add
+ #define FUNC       SAT_S_ADD_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u16.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint16_t
+ #define NAME       sat_sub
+ #define FUNC       SAT_U_SUB_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u32.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint32_t
+ #define NAME       sat_sub
+ #define FUNC       SAT_U_SUB_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u64.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint64_t
+ #define NAME       sat_sub
+ #define FUNC       SAT_U_SUB_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vssub-run-1-u8.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint8_t
+ #define NAME       sat_sub
+ #define FUNC       SAT_U_SUB_FUNC_WRAP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c	Sun Jul  6 22:32:59 2025
***************
*** 1,7 ****
  /* Reduced from SPEC2017 blender: node_texture_util.c.
     The conditional function call was tripping mode switching state machine */
  
! /* { dg-do compile } */
  /* { dg-options " -Ofast -march=rv64gcv_zvl256b -ftree-vectorize -mrvv-vector-bits=zvl" } */
  
  void *a;
--- 1,7 ----
  /* Reduced from SPEC2017 blender: node_texture_util.c.
     The conditional function call was tripping mode switching state machine */
  
! /* { dg-do compile  { target { rv64 && { ! riscv_abi_e } } } } */
  /* { dg-options " -Ofast -march=rv64gcv_zvl256b -ftree-vectorize -mrvv-vector-bits=zvl" } */
  
  void *a;
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-21.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-21.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-21.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-21.c	Sun Jul  6 22:32:59 2025
*************** void f (int8_t * restrict in, int8_t * r
*** 29,32 ****
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e32,\s*mf2,\s*tu,\s*mu} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 3 { target { no-opts "-O0" no-opts "-Os" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 29,32 ----
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e32,\s*mf2,\s*tu,\s*mu} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 3 { target { no-opts "-O0" no-opts "-Os" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" no-opts "-Oz" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-26.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-26.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-26.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-26.c	Sun Jul  6 22:32:59 2025
*************** void f (int8_t * restrict in, int8_t * r
*** 32,35 ****
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e32,\s*mf2,\s*tu,\s*mu} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 32,35 ----
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e32,\s*mf2,\s*tu,\s*mu} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" no-opts "-Oz" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c	Sun Jul  6 22:32:59 2025
*************** void f (int8_t * restrict in, int8_t * r
*** 22,25 ****
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 22,25 ----
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" no-opts "-Oz" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c	Sun Jul  6 22:32:59 2025
*************** void f (int8_t *base, int8_t *out, size_
*** 16,19 ****
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 16,19 ----
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" no-opts "-Oz" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c	Sun Jun 29 22:33:51 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c	Sun Jul  6 22:32:59 2025
*************** void f (int8_t *base, int8_t *out, size_
*** 16,19 ****
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 16,19 ----
  }
  
  /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-O1" no-opts "-g" no-opts "-funroll-loops" no-opts "-Oz" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-22.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-22.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-22.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-22.c	Sun Jul  6 22:32:59 2025
*************** void f(int8_t *base, int8_t *out, size_t
*** 18,21 ****
  
  /* { dg-final { scan-assembler-times {slli\s+[a-x0-9]+,\s*[a-x0-9]+,\s*4} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
  /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 18,21 ----
  
  /* { dg-final { scan-assembler-times {slli\s+[a-x0-9]+,\s*[a-x0-9]+,\s*4} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
  /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c	Sun Jul  6 22:32:59 2025
*************** void foo(int32_t *in1, int32_t *in2, int
*** 18,23 ****
    }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*m1,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 3 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
  /* { dg-final { scan-assembler-times {slli\s+[a-x0-9]+,\s*[a-x0-9]+,\s*5} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 18,23 ----
    }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*m1,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 3 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
  /* { dg-final { scan-assembler-times {slli\s+[a-x0-9]+,\s*[a-x0-9]+,\s*5} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c	Sun Jul  6 22:32:59 2025
*************** void foo(int32_t *in1, int32_t *in2, int
*** 17,21 ****
    }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*m1,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 17,21 ----
    }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*m1,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c	Sun Jul  6 22:32:59 2025
*************** void foo(int32_t *in1, int32_t *in2, int
*** 17,21 ****
    }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*m1,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 17,21 ----
    }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*m1,\s*tu,\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jul  6 22:32:59 2025
*************** sat_s_add_imm_##T##_fmt_1##_##INDEX (T x
*** 227,232 ****
--- 227,244 ----
  #define RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect) \
    if (sat_s_add_imm##_##T##_fmt_1##_##INDEX(x) != expect) __builtin_abort ()
  
+ #define DEF_SAT_S_ADD_IMM_FMT_2(INDEX, T, UT, IMM, MIN, MAX) \
+ T __attribute__((noinline))                                  \
+ sat_s_add_imm_##T##_fmt_2##_##INDEX (T x)                    \
+ {                                                            \
+   T sum = (T)((UT)x + (UT)IMM);                                   \
+   return ((x ^ sum) < 0 && (x ^ IMM) >= 0) ?                 \
+     (-(T)(x < 0) ^ MAX) : sum;                         \
+ }
+ 
+ #define RUN_SAT_S_ADD_IMM_FMT_2(INDEX, T, x, expect) \
+   if (sat_s_add_imm##_##T##_fmt_2##_##INDEX(x) != expect) __builtin_abort ()
+ 
  /******************************************************************************/
  /* Saturation Sub (Unsigned and Signed)                                       */
  /******************************************************************************/
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,57 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "sat_arith.h"
+ 
+ /*
+ ** sat_s_add_imm_int16_t_fmt_2_0:
+ **	addi\s+[atx][0-9]+,\s*a0,\s*-7
+ **	xori\s+[atx][0-9]+,\s*a0,\s*-7
+ **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+ **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	srai\s+a0,\s*a0,\s*63
+ **	li\s+[atx][0-9]+,\s*32768
+ **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **	neg\s+a0,\s*[atx][0-9]+
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	or\s+a0,\s*a0,\s*[atx][0-9]+
+ **	slliw\s+a0,\s*a0,\s*16
+ **	sraiw\s+a0,\s*a0,\s*16
+ **	ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int16_t, uint16_t, -7, INT16_MIN, INT16_MAX)
+ 
+ /*
+ ** sat_s_add_imm_int16_t_fmt_2_1:
+ ** 	addi\s+[atx][0-9]+,\s*a0,\s*-1
+ ** 	not\s+[atx][0-9]+,\s*a0
+ ** 	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ ** 	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+ ** 	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+ ** 	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ ** 	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ ** 	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ ** 	srai\s+a0,\s*a0,\s*63
+ ** 	li\s+[atx][0-9]+,\s*32768
+ ** 	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ ** 	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ ** 	neg\s+a0,\s*[atx][0-9]+
+ ** 	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ ** 	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ ** 	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ ** 	or\s+a0,\s*a0,\s*[atx][0-9]+
+ ** 	slliw\s+a0,\s*a0,\s*16
+ ** 	sraiw\s+a0,\s*a0,\s*16
+ ** 	ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "sat_arith.h"
+ 
+ /*
+ ** sat_s_add_imm_int32_t_fmt_2_0:
+ **	addi\s+[atx][0-9]+,\s*a0,\s*10
+ **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
+ **	srli\s+[atx][0-9]+,\s*a0,\s*31
+ **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	srai\s+a0,\s*a0,\s*63
+ **	li\s+[atx][0-9]+,\s*-2147483648
+ **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **	neg\s+a0,\s*[atx][0-9]+
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	or\s+a0,a0,\s*[atx][0-9]+
+ **	sext.w\s+a0,\s*a0
+ **	ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int32_t, uint32_t, 10, INT32_MIN, INT32_MAX)
+ 
+ /*
+ ** sat_s_add_imm_int32_t_fmt_2_1:
+ **	addi\s+[atx][0-9]+,\s*a0,\s*-1
+ **	not\s+[atx][0-9]+,\s*a0
+ **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
+ **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	srai\s+a0,\s*a0,\s*63
+ **	li\s+[atx][0-9]+,\s*-2147483648
+ **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **	neg\s+a0,\s*[atx][0-9]+
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	or\s+a0,\s*a0,\s*[atx][0-9]+
+ **	sext.w\s+a0,\s*a0
+ **	ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "sat_arith.h"
+ 
+ /*
+ ** sat_s_add_imm_int64_t_fmt_2_0:
+ **	addi\s+[atx][0-9]+,\s*a0,\s*10
+ **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
+ **	srli\s+[atx][0-9]+,\s*a0,\s*63
+ **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	srai\s+[atx][0-9]+,\s*a0,\s*63
+ **	li\s+[atx][0-9]+,\s*-1
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	neg\s+[atx][0-9]+,\s*[atx][0-9]+
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	or\s+a0,\s*a0,\s*[atx][0-9]+
+ **	ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int64_t, uint64_t, 10, INT64_MIN, INT64_MAX)
+ 
+ /*
+ ** sat_s_add_imm_int64_t_fmt_2_1:
+ **	addi\s+[atx][0-9]+,\s*a0,\s*-1
+ **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
+ **	slti\s+[atx][0-9]+,\s*a0,\s*0
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	srai\s+[atx][0-9]+,\s*a0,\s*63
+ **	li\s+[atx][0-9]+,\s*-1
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	neg\s+[atx][0-9]+,\s*[atx][0-9]+
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	or\s+a0,\s*a0,\s*[atx][0-9]+
+ **	ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "sat_arith.h"
+ 
+ /*
+ ** sat_s_add_imm_int8_t_fmt_2_0:
+ **	addi\s+[atx][0-9]+,\s*a0,\s*9
+ **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
+ **	srli\s+[atx][0-9]+,\s*a0,\s*7
+ **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+ **	srai\s+a0,\s*a0,\s*63
+ **	xori\s+[atx][0-9]+,\s*a0,\s*127
+ **	neg\s+a0,\s*[atx][0-9]+
+ **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **	or\s+a0,\s*a0,\s*[atx][0-9]+
+ **	slliw\s+a0,\s*a0,\s*24
+ **	sraiw\s+a0,\s*a0,\s*24
+ **	ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX)
+ 
+ /*
+ ** sat_s_add_imm_int8_t_fmt_2_1:
+ **      addi\s+[atx][0-9]+,\s*a0,\s*-1
+ **      xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+ **      srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
+ **      srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
+ **      and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **      srai\s+a0,\s*a0,\s*63
+ **      xori\s+[atx][0-9]+,\s*a0,\s*127
+ **      neg\s+a0,\s*a4
+ **      and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+ **      addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+ **      and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+ **      or\s+a0,\s*a0,\s*[atx][0-9]+
+ **      slliw\s+a0,\s*a0,\s*24
+ **      sraiw\s+a0,\s*a0,\s*24
+ **      ret
+ */
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i16.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ 
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int16_t, uint16_t, -32768, INT16_MIN, INT16_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int16_t, uint16_t, 32767, INT16_MIN, INT16_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(2, int16_t, uint16_t, 100, INT16_MIN, INT16_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(3, int16_t, uint16_t, -100, INT16_MIN, INT16_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(4, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
+ 
+ #define T                       int16_t
+ #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_2(INDEX, T, x, expect)
+ 
+ T d[][2] = {
+   /* arg_0,   expect */
+   {     -1,     -32768, },
+   {      2,     -32766, },
+   {      1,      32767, },
+   {    -10,      32757, },
+   {  32669,      32767, },
+   { -32768,     -32668, },
+   { -32768,     -32768, },
+   {      0,       -100, },
+   { -32768,     -32768, },
+   {      0,         -1, },
+ };
+ 
+ int
+ main ()
+ {
+   RUN (0, T, d[0][0], d[0][1]);
+   RUN (0, T, d[1][0], d[1][1]);
+ 
+   RUN (1, T, d[2][0], d[2][1]);
+   RUN (1, T, d[3][0], d[3][1]);
+ 
+   RUN (2, T, d[4][0], d[4][1]);
+   RUN (2, T, d[5][0], d[5][1]);
+ 
+   RUN (3, T, d[6][0], d[6][1]);
+   RUN (3, T, d[7][0], d[7][1]);
+ 
+   RUN (4, T, d[8][0], d[8][1]);
+   RUN (4, T, d[9][0], d[9][1]);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i32.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ 
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int32_t, uint32_t, -2147483648, INT32_MIN, INT32_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int32_t, uint32_t, 2147483647, INT32_MIN, INT32_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(2, int32_t, uint32_t, 100, INT32_MIN, INT32_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(3, int32_t, uint32_t, -100, INT32_MIN, INT32_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(4, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
+ 
+ #define T                       int32_t
+ #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_2(INDEX, T, x, expect)
+ 
+ T d[][2] = {
+   /* arg_0,   expect */
+   {     -1,     -2147483648, },
+   {      2,     -2147483646, },
+   {      1,      2147483647, },
+   {    -10,      2147483637, },
+   {    300,             400, },
+   {   -300,            -200, },
+   {    100,               0, },
+   {      0,            -100, },
+   {    100,              99, },
+   {      0,              -1, },
+ };
+ 
+ int
+ main ()
+ {
+   RUN (0, T, d[0][0], d[0][1]);
+   RUN (0, T, d[1][0], d[1][1]);
+ 
+   RUN (1, T, d[2][0], d[2][1]);
+   RUN (1, T, d[3][0], d[3][1]);
+ 
+   RUN (2, T, d[4][0], d[4][1]);
+   RUN (2, T, d[5][0], d[5][1]);
+ 
+   RUN (3, T, d[6][0], d[6][1]);
+   RUN (3, T, d[7][0], d[7][1]);
+ 
+   RUN (4, T, d[8][0], d[8][1]);
+   RUN (4, T, d[9][0], d[9][1]);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i64.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i64.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i64.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ 
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int64_t, uint64_t, (-9223372036854775807ll - 1), INT64_MIN, INT64_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int64_t, uint64_t, 9223372036854775807ll, INT64_MIN, INT64_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(2, int64_t, uint64_t, 100, INT64_MIN, INT64_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(3, int64_t, uint64_t, -100, INT64_MIN, INT64_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(4, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
+ 
+ #define T                       int64_t
+ #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_2(INDEX, T, x, expect)
+ 
+ T d[][2] = {
+   /* arg_0,   expect */
+   {     -1,     (-9223372036854775807ll - 1), },
+   {      2,           -9223372036854775806ll, },
+   {      1,            9223372036854775807ll, },
+   {     -7,            9223372036854775800ll, },
+   {      0,                              100, },
+   {     -1,                               99, },
+   {      0,                             -100, },
+   {    100,                                0, },
+   {      0,                               -1, },
+   {    100,                               99, },
+ };
+ 
+ int
+ main ()
+ {
+   RUN (0, T, d[0][0], d[0][1]);
+   RUN (0, T, d[1][0], d[1][1]);
+ 
+   RUN (1, T, d[2][0], d[2][1]);
+   RUN (1, T, d[3][0], d[3][1]);
+ 
+   RUN (2, T, d[4][0], d[4][1]);
+   RUN (2, T, d[5][0], d[5][1]);
+ 
+   RUN (3, T, d[6][0], d[6][1]);
+   RUN (3, T, d[7][0], d[7][1]);
+ 
+   RUN (4, T, d[8][0], d[8][1]);
+   RUN (4, T, d[9][0], d[9][1]);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2-i8.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ 
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int8_t, uint8_t, -128, INT8_MIN, INT8_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int8_t, uint8_t, 127, INT8_MIN, INT8_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(2, int8_t, uint8_t, 6, INT8_MIN, INT8_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(3, int8_t, uint8_t, -6, INT8_MIN, INT8_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(4, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
+ 
+ #define T                       int8_t
+ #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_2(INDEX, T, x, expect)
+ 
+ T d[][2] = {
+   /* arg_0,   expect */
+   {     -1,     -128, },
+   {      2,     -126, },
+   {      1,      127, },
+   {    -10,      117, },
+   {    122,      127, },
+   {    -10,       -4, },
+   {   -128,     -128, },
+   {    127,      121, },
+   {   -128,     -128, },
+   {    1,          0, },
+ };
+ 
+ int
+ main ()
+ {
+   RUN (0, T, d[0][0], d[0][1]);
+   RUN (0, T, d[1][0], d[1][1]);
+ 
+   RUN (1, T, d[2][0], d[2][1]);
+   RUN (1, T, d[3][0], d[3][1]);
+ 
+   RUN (2, T, d[4][0], d[4][1]);
+   RUN (2, T, d[5][0], d[5][1]);
+ 
+   RUN (3, T, d[6][0], d[6][1]);
+   RUN (3, T, d[7][0], d[7][1]);
+ 
+   RUN (4, T, d[8][0], d[8][1]);
+   RUN (4, T, d[9][0], d[9][1]);
+ 
+   return 0;
+ }
+ 
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int16_t, uint16_t, -32769, INT16_MIN, INT16_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int16_t, uint16_t, 32768, INT16_MIN, INT16_MAX)
+ 
+ /* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ DEF_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, -2147483649, INT32_MIN, INT32_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, 2147483648, INT32_MIN, INT32_MAX)
+ 
+ /* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ DEF_SAT_S_ADD_IMM_FMT_2(0, int8_t, uint8_t, -129, INT8_MIN, INT8_MAX)
+ DEF_SAT_S_ADD_IMM_FMT_2(1, int8_t, uint8_t, 128, INT8_MIN, INT8_MAX)
+ 
+ /* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c	Sun Jul  6 22:32:59 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! /* { dg-options "-O3 -mzarch -march=z13 -save-temps" } */
  /* { dg-require-effective-target int128 } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  /* { dg-final { scan-assembler-not {\tvlpq\t} } } */
--- 1,5 ----
  /* { dg-do run } */
! /* { dg-options "-O3 -mzarch -march=z13 -save-temps -fno-stack-protector" } */
  /* { dg-require-effective-target int128 } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  /* { dg-final { scan-assembler-not {\tvlpq\t} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-max-emu.c gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-max-emu.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-max-emu.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-max-emu.c	Sun Jul  6 22:32:59 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! /* { dg-options "-O3 -mzarch -march=z13 -save-temps" } */
  /* { dg-require-effective-target int128 } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  /* { dg-final { scan-assembler-not {\tvmxq\t} } } */
--- 1,5 ----
  /* { dg-do run } */
! /* { dg-options "-O3 -mzarch -march=z13 -save-temps -fno-stack-protector" } */
  /* { dg-require-effective-target int128 } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  /* { dg-final { scan-assembler-not {\tvmxq\t} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-min-emu.c gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-min-emu.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-min-emu.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-min-emu.c	Sun Jul  6 22:32:59 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! /* { dg-options "-O3 -mzarch -march=z13 -save-temps" } */
  /* { dg-require-effective-target int128 } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  /* { dg-final { scan-assembler-not {\tvmnq\t} } } */
--- 1,5 ----
  /* { dg-do run } */
! /* { dg-options "-O3 -mzarch -march=z13 -save-temps -fno-stack-protector" } */
  /* { dg-require-effective-target int128 } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  /* { dg-final { scan-assembler-not {\tvmnq\t} } } */
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-perm-merge-1.c gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-perm-merge-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-perm-merge-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-perm-merge-1.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,242 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mzarch -march=z14 -mzvector --save-temps -fno-stack-protector" } */
+ /* { dg-do run { target { s390_z14_hw } } } */
+ /* { dg-final {check-function-bodies "**" "" } } */
+ 
+ #include "vec-types.h"
+ 
+ /*
+ ** qi_via_hi_hi:
+ **	vmrhh	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_hi_hi (v16qi a, v16qi b)
+ {
+   return (v16qi){a[0], a[1], b[0], b[1], a[2], a[3], b[2], b[3],
+ 		 a[4], a[5], b[4], b[5], a[6], a[7], b[6], b[7]};
+ }
+ 
+ /*
+ ** qi_via_hi_lo:
+ **	vmrlh	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_hi_lo (v16qi a, v16qi b)
+ {
+   return (v16qi){a[8], a[9], b[8], b[9], a[10], a[11], b[10], b[11],
+ 		 a[12], a[13], b[12], b[13], a[14], a[15], b[14], b[15]};
+ }
+ 
+ /*
+ ** qi_via_si_hi:
+ **	vmrhf	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_si_hi (v16qi a, v16qi b)
+ {
+   return (v16qi){a[0], a[1], a[2], a[3], b[0], b[1], b[2], b[3],
+ 		 a[4], a[5], a[6], a[7], b[4], b[5], b[6], b[7]};
+ }
+ 
+ /*
+ ** qi_via_si_lo:
+ **	vmrlf	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_si_lo (v16qi a, v16qi b)
+ {
+   return (v16qi){a[8], a[9], a[10], a[11], b[8], b[9], b[10], b[11],
+ 		 a[12], a[13], a[14], a[15], b[12], b[13], b[14], b[15]};
+ }
+ 
+ /*
+ ** qi_via_di_hi:
+ **	vmrhg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_di_hi (v16qi a, v16qi b)
+ {
+   return (v16qi){a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
+ 		 b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]};
+ }
+ 
+ /*
+ ** qi_via_di_lo:
+ **	vmrlg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_di_lo (v16qi a, v16qi b)
+ {
+   return (v16qi){a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15],
+ 		 b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15]};
+ }
+ 
+ /*
+ ** hi_via_si_hi:
+ **	vmrhf	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v8hi __attribute__((noinline,noipa))
+ hi_via_si_hi (v8hi a, v8hi b)
+ {
+   return (v8hi){a[0], a[1], b[0], b[1], a[2], a[3], b[2], b[3]};
+ }
+ 
+ /*
+ ** hi_via_si_lo:
+ **	vmrlf	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v8hi __attribute__((noinline,noipa))
+ hi_via_si_lo (v8hi a, v8hi b)
+ {
+   return (v8hi){a[4], a[5], b[4], b[5], a[6], a[7], b[6], b[7]};
+ }
+ 
+ /*
+ ** hi_via_di_hi:
+ **	vmrhg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v8hi __attribute__((noinline,noipa))
+ hi_via_di_hi (v8hi a, v8hi b)
+ {
+   return (v8hi){a[0], a[1], a[2], a[3], b[0], b[1], b[2], b[3]};
+ }
+ 
+ /*
+ ** hi_via_di_lo:
+ **	vmrlg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v8hi __attribute__((noinline,noipa))
+ hi_via_di_lo (v8hi a, v8hi b)
+ {
+   return (v8hi){a[4], a[5], a[6], a[7], b[4], b[5], b[6], b[7]};
+ }
+ 
+ /*
+ ** si_via_di_hi:
+ **	vmrhg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v4si __attribute__((noinline,noipa))
+ si_via_di_hi (v4si a, v4si b)
+ {
+   return (v4si){a[0], a[1], b[0], b[1]};
+ }
+ 
+ /*
+ ** si_via_di_lo:
+ **	vmrlg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v4si __attribute__((noinline,noipa))
+ si_via_di_lo (v4si a, v4si b)
+ {
+   return (v4si){a[2], a[3], b[2], b[3]};
+ }
+ 
+ int
+ main ()
+ {
+   static const signed char e_qi_via_hi_hi[16]
+     = {0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23};
+   static const signed char e_qi_via_hi_lo[16]
+     = {8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31};
+   static const signed char e_qi_via_si_hi[16]
+     = {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23};
+   static const signed char e_qi_via_si_lo[16]
+     = {8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31};
+   static const signed char e_qi_via_di_hi[16]
+     = {0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23};
+   static const signed char e_qi_via_di_lo[16]
+     = {8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31};
+ 
+   static const short e_hi_via_si_hi[8] = {0, 1, 8, 9, 2, 3, 10, 11};
+   static const short e_hi_via_si_lo[8] = {4, 5, 12, 13, 6, 7, 14, 15};
+   static const short e_hi_via_di_hi[8] = {0, 1, 2, 3, 8, 9, 10, 11};
+   static const short e_hi_via_di_lo[8] = {4, 5, 6, 7, 12, 13, 14, 15};
+ 
+   static const int e_si_via_di_hi[4] = {0, 1, 4, 5};
+   static const int e_si_via_di_lo[4] = {2, 3, 6, 7};
+ 
+   v16qi a_qi = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+   v16qi b_qi = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
+   v8hi a_hi = {0, 1, 2, 3, 4, 5, 6, 7};
+   v8hi b_hi = {8, 9, 10, 11, 12, 13, 14, 15};
+   v4si a_si = {0, 1, 2, 3};
+   v4si b_si = {4, 5, 6, 7};
+   v16qi r_qi;
+   v8hi r_hi;
+   v4si r_si;
+   int i;
+ 
+   r_qi = qi_via_hi_hi (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_hi_hi[i])
+       __builtin_abort ();
+ 
+   r_qi = qi_via_hi_lo (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_hi_lo[i])
+       __builtin_abort ();
+ 
+   r_qi = qi_via_si_hi (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_si_hi[i])
+       __builtin_abort ();
+ 
+   r_qi = qi_via_si_lo (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_si_lo[i])
+       __builtin_abort ();
+ 
+   r_qi = qi_via_di_hi (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_di_hi[i])
+       __builtin_abort ();
+ 
+   r_qi = qi_via_di_lo (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_di_lo[i])
+       __builtin_abort ();
+ 
+   r_hi = hi_via_si_hi (a_hi, b_hi);
+   for (i = 0; i < 8; ++i)
+     if (r_hi[i] != e_hi_via_si_hi[i])
+       __builtin_abort ();
+ 
+   r_hi = hi_via_si_lo (a_hi, b_hi);
+   for (i = 0; i < 8; ++i)
+     if (r_hi[i] != e_hi_via_si_lo[i])
+       __builtin_abort ();
+ 
+   r_hi = hi_via_di_hi (a_hi, b_hi);
+   for (i = 0; i < 8; ++i)
+     if (r_hi[i] != e_hi_via_di_hi[i])
+       __builtin_abort ();
+ 
+   r_hi = hi_via_di_lo (a_hi, b_hi);
+   for (i = 0; i < 8; ++i)
+     if (r_hi[i] != e_hi_via_di_lo[i])
+       __builtin_abort ();
+ 
+   r_si = si_via_di_hi (a_si, b_si);
+   for (i = 0; i < 4; ++i)
+     if (r_si[i] != e_si_via_di_hi[i])
+       __builtin_abort ();
+ 
+   r_si = si_via_di_lo (a_si, b_si);
+   for (i = 0; i < 4; ++i)
+     if (r_si[i] != e_si_via_di_lo[i])
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-perm-pack-1.c gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-perm-pack-1.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/s390/vector/vec-perm-pack-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gcc.target/s390/vector/vec-perm-pack-1.c	Sun Jul  6 22:32:59 2025
***************
*** 0 ****
--- 1,133 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mzarch -march=z14 -mzvector --save-temps -fno-stack-protector" } */
+ /* { dg-do run { target { s390_z14_hw } } } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "vec-types.h"
+ 
+ /*
+ ** qi_via_hi:
+ **	vpkh	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_hi (v16qi a, v16qi b)
+ {
+   return (v16qi){a[1], a[3], a[5], a[7], a[9], a[11], a[13], a[15],
+ 		 b[1], b[3], b[5], b[7], b[9], b[11], b[13], b[15]};
+ }
+ 
+ /*
+ ** qi_via_si:
+ **	vpkf	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_si (v16qi a, v16qi b)
+ {
+   return (v16qi){a[2], a[3], a[6], a[7], a[10], a[11], a[14], a[15],
+ 		 b[2], b[3], b[6], b[7], b[10], b[11], b[14], b[15]};
+ }
+ 
+ /*
+ ** qi_via_di:
+ **	vpkg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v16qi __attribute__((noinline,noipa))
+ qi_via_di (v16qi a, v16qi b)
+ {
+   return (v16qi){a[4], a[5], a[6], a[7], a[12], a[13], a[14], a[15],
+ 		 b[4], b[5], b[6], b[7], b[12], b[13], b[14], b[15]};
+ }
+ 
+ /*
+ ** hi_via_si:
+ **	vpkf	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v8hi __attribute__((noinline,noipa))
+ hi_via_si (v8hi a, v8hi b)
+ {
+   return (v8hi){a[1], a[3], a[5], a[7], b[1], b[3], b[5], b[7]};
+ }
+ 
+ /*
+ ** hi_via_di:
+ **	vpkg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v8hi __attribute__((noinline,noipa))
+ hi_via_di (v8hi a, v8hi b)
+ {
+   return (v8hi){a[2], a[3], a[6], a[7], b[2], b[3], b[6], b[7]};
+ }
+ 
+ /*
+ ** si_via_di:
+ **	vpkg	%v24,%v24,%v26
+ **	br	%r14
+ */
+ v4si __attribute__((noinline,noipa))
+ si_via_di (v4si a, v4si b)
+ {
+   return (v4si){a[1], a[3], b[1], b[3]};
+ }
+ 
+ int
+ main ()
+ {
+   static const signed char e_qi_via_hi[16]
+     = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31};
+   static const signed char e_qi_via_si[16]
+     = {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31};
+   static const signed char e_qi_via_di[16]
+     = {4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31};
+ 
+   static const short e_hi_via_si[8] = {1, 3, 5, 7, 9, 11, 13, 15};
+   static const short e_hi_via_di[8] = {2, 3, 6, 7, 10, 11, 14, 15};
+ 
+   static const int e_si_via_di[4] = {1, 3, 5, 7};
+ 
+   v16qi a_qi = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+   v16qi b_qi = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
+   v8hi a_hi = {0, 1, 2, 3, 4, 5, 6, 7};
+   v8hi b_hi = {8, 9, 10, 11, 12, 13, 14, 15};
+   v4si a_si = {0, 1, 2, 3};
+   v4si b_si = {4, 5, 6, 7};
+   v16qi r_qi;
+   v8hi r_hi;
+   v4si r_si;
+   int i;
+ 
+   r_qi = qi_via_hi (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_hi[i])
+       __builtin_abort ();
+ 
+   r_qi = qi_via_si (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_si[i])
+       __builtin_abort ();
+ 
+   r_qi = qi_via_di (a_qi, b_qi);
+   for (i = 0; i < 16; ++i)
+     if (r_qi[i] != e_qi_via_di[i])
+       __builtin_abort ();
+ 
+   r_hi = hi_via_si (a_hi, b_hi);
+   for (i = 0; i < 8; ++i)
+     if (r_hi[i] != e_hi_via_si[i])
+       __builtin_abort ();
+ 
+   r_hi = hi_via_di (a_hi, b_hi);
+   for (i = 0; i < 8; ++i)
+     if (r_hi[i] != e_hi_via_di[i])
+       __builtin_abort ();
+ 
+   r_si = si_via_di (a_si, b_si);
+   for (i = 0; i < 4; ++i)
+     if (r_si[i] != e_si_via_di[i])
+       __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gcc.target/sh/pr54236-2.c gcc-16-20250706/gcc/testsuite/gcc.target/sh/pr54236-2.c
*** gcc-16-20250629/gcc/testsuite/gcc.target/sh/pr54236-2.c	Sun Jun 29 22:33:52 2025
--- gcc-16-20250706/gcc/testsuite/gcc.target/sh/pr54236-2.c	Sun Jul  6 22:33:00 2025
***************
*** 4,13 ****
  /* { dg-do compile }  */
  /* { dg-options "-O1" } */
  
! /* { dg-final { scan-assembler-times "addc" 36 } } */
  /* { dg-final { scan-assembler-times "shll" 14 } } */
! /* { dg-final { scan-assembler-times "add\tr" 12 } } */
! /* { dg-final { scan-assembler-not "movt" } } */
  
  /* { dg-final { scan-assembler-times "add\t#1" 1 } } */
  
--- 4,13 ----
  /* { dg-do compile }  */
  /* { dg-options "-O1" } */
  
! /* { dg-final { scan-assembler-times "addc" 32 } } */
  /* { dg-final { scan-assembler-times "shll" 14 } } */
! /* { dg-final { scan-assembler-times "add\tr" 16 } } */
! /* { dg-final { scan-assembler-times "movt" 4 } } */
  
  /* { dg-final { scan-assembler-times "add\t#1" 1 } } */
  
*************** test_022 (int a, int b, int c, int d)
*** 184,211 ****
  int
  test_023 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x addc
    return a + ((b >> 31) & 1);
  }
  
  int
  test_024 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x addc
    return ((b >> 31) & 1) + a;
  }
  
  int
  test_025 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x addc
    return ((a >> 31) & 1) + a;
  }
  
  int
  test_026 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x addc
    return a + ((a >> 31) & 1);
  }
  
--- 184,211 ----
  int
  test_023 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x add
    return a + ((b >> 31) & 1);
  }
  
  int
  test_024 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x add
    return ((b >> 31) & 1) + a;
  }
  
  int
  test_025 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x add
    return ((a >> 31) & 1) + a;
  }
  
  int
  test_026 (int a, int b, int c, int d)
  {
!   // 1x shll, 1x add
    return a + ((a >> 31) & 1);
  }
  
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90 gcc-16-20250706/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90
*** gcc-16-20250629/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90	Sun Jul  6 22:33:04 2025
***************
*** 0 ****
--- 1,24 ----
+ !{ dg-do compile }
+ 
+ ! Check PR120843 is fixed
+ 
+ program p
+   implicit none
+ 
+   type T
+     integer, allocatable :: arr(:,:) [:,:]
+   end type
+ 
+   type(T) :: o
+   integer, allocatable :: vec(:)[:,:]
+   integer :: c[*]
+ 
+   c = 7
+ 
+   allocate(o%arr(4,3)[2,*], source=6)
+   allocate(vec(10)[1,*], source=7)
+ 
+   if (vec(3) * c /= 49) stop 1
+   if (o%arr(2,2)* c /= 42) stop 2
+ 
+ end program p
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gfortran.dg/coarray/coindexed_7.f90 gcc-16-20250706/gcc/testsuite/gfortran.dg/coarray/coindexed_7.f90
*** gcc-16-20250629/gcc/testsuite/gfortran.dg/coarray/coindexed_7.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gfortran.dg/coarray/coindexed_7.f90	Sun Jul  6 22:33:04 2025
***************
*** 0 ****
--- 1,24 ----
+ !{ dg-do compile }
+ 
+ ! Check PR120847 is fixed.
+ 
+ program p
+   implicit none
+ 
+   type T
+     integer, allocatable :: i(:, :) [:]
+   end type T
+ 
+   type(T) :: o
+   integer, allocatable :: c[:]
+   integer :: i
+ 
+   c = 7
+ 
+   allocate(o%i(4, 5)[*], source=6)
+ 
+   do i = 1, 4
+     c = o%i(mod(i, 2), mod(i, 3))[1]
+   end do
+ 
+ end program p
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-1.F90 gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-1.F90
*** gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-1.F90	Sun Jun 29 22:33:56 2025
--- gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-1.F90	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- ! { dg-do compile }
- ! { dg-options "-fdiagnostics-format=json" }
- 
- #error message
- 
- #if 0
- { dg-begin-multiline-output "" }
- [{"kind": "error",
-   "message": "#error message",
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 4,
-                            "display-column": 2,
-                            "byte-column": 2,
-                            "column": 2},
-                  "finish": {"file":
-                             "line": 4,
-                             "display-column": 6,
-                             "byte-column": 6,
-                             "column": 6}}],
-   "escape-source": false}]
- { dg-end-multiline-output "" }
- #endif  
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-2.F90 gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-2.F90
*** gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-2.F90	Sun Jun 29 22:33:56 2025
--- gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-2.F90	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- ! { dg-do compile }
- ! { dg-options "-fdiagnostics-format=json" }
- 
- #warning message
- 
- #if 0
- { dg-begin-multiline-output "" }
- [{"kind": "warning",
-   "message": "#warning message",
-   "option": "-Wcpp",
-   "option_url":
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 4,
-                            "display-column": 2,
-                            "byte-column": 2,
-                            "column": 2},
-                  "finish": {"file":
-                             "line": 4,
-                             "display-column": 8,
-                             "byte-column": 8,
-                             "column": 8}}],
-   "escape-source": false}]
- { dg-end-multiline-output "" }
- #endif  
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-3.F90 gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-3.F90
*** gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-3.F90	Sun Jun 29 22:33:56 2025
--- gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-3.F90	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- ! { dg-do compile }
- ! { dg-options "-fdiagnostics-format=json -Werror" }
- 
- #warning message
- 
- #if 0
- { dg-begin-multiline-output "" }
- [{"kind": "error",
-   "message": "#warning message",
-   "option": "-Werror=cpp",
-   "option_url":
-   "children": [],
-   "column-origin": 1,
-   "locations": [{"caret": {"file":
-                            "line": 4,
-                            "display-column": 2,
-                            "byte-column": 2,
-                            "column": 2},
-                  "finish": {"file":
-                             "line": 4,
-                             "display-column": 8,
-                             "byte-column": 8,
-                             "column": 8}}],
-   "escape-source": false}]
- { dg-end-multiline-output "" }
- #endif  
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-pr105916.F90 gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-pr105916.F90
*** gcc-16-20250629/gcc/testsuite/gfortran.dg/diagnostic-format-json-pr105916.F90	Sun Jun 29 22:33:56 2025
--- gcc-16-20250706/gcc/testsuite/gfortran.dg/diagnostic-format-json-pr105916.F90	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- ! { dg-do compile }
- ! { dg-options "-fdiagnostics-format=json-stderr -fmax-errors=1 -Wfatal-errors" }
- 
- program main
-     implicit none
-     print*, "Hello World!"
- end program main
- 
- ! We expect an empty array as the JSON output.
- #if 0
- { dg-begin-multiline-output "" }
- []
- { dg-end-multiline-output "" }
- #endif  
--- 0 ----
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device.f90 gcc-16-20250706/gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device.f90
*** gcc-16-20250629/gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device.f90	Sun Jun 29 22:33:56 2025
--- gcc-16-20250706/gcc/testsuite/gfortran.dg/gomp/omp_get_num_devices_initial_device.f90	Sun Jul  6 22:33:04 2025
*************** end
*** 17,24 ****
  
  ! { dg-final { scan-tree-dump-not "error_stop" "optimized" } }
  
! ! { dg-final { scan-tree-dump-not "omp_get_num_devices;" "optimized" { target { ! offloading_enabled } } } }
  ! { dg-final { scan-tree-dump "return 0;" "optimized" { target { ! offloading_enabled } } } }
  
! ! { dg-final { scan-tree-dump-times "omp_get_num_devices;" 1 "optimized" { target offloading_enabled } } }
  ! { dg-final { scan-tree-dump "_1 = __builtin_omp_get_num_devices \\(\\);\[\\r\\n\]+\[ \]+return _1;" "optimized" { target offloading_enabled } } }
--- 17,24 ----
  
  ! { dg-final { scan-tree-dump-not "error_stop" "optimized" } }
  
! ! { dg-final { scan-tree-dump-not "omp_get_num_devices" "optimized" { target { ! offloading_enabled } } } }
  ! { dg-final { scan-tree-dump "return 0;" "optimized" { target { ! offloading_enabled } } } }
  
! ! { dg-final { scan-tree-dump-times "omp_get_num_devices" 1 "optimized" { target offloading_enabled } } }
  ! { dg-final { scan-tree-dump "_1 = __builtin_omp_get_num_devices \\(\\);\[\\r\\n\]+\[ \]+return _1;" "optimized" { target offloading_enabled } } }
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod gcc-16-20250706/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod
*** gcc-16-20250629/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod	Sun Jul  6 22:33:06 2025
***************
*** 0 ****
--- 1,107 ----
+ MODULE testdelete2 ;
+ 
+ (* A test module to test file creation and deletion using ISO
+    libraries.  *)
+ 
+ 
+ IMPORT DynamicStrings, StringFileSysOp,
+        FileSysOp, SeqFile, TextIO, Strings,
+        IOChanUtils ;
+ 
+ FROM libc IMPORT printf, exit ;
+ FROM FormatStrings IMPORT Sprintf1 ;
+ 
+ 
+ CONST
+    MaxFile = 10 ;
+ 
+ VAR
+    files: ARRAY [0..MaxFile] OF SeqFile.ChanId ;
+ 
+ 
+ PROCEDURE Assert (condition: BOOLEAN; line: CARDINAL) ;
+ BEGIN
+    IF NOT condition
+    THEN
+       printf ("%s:%d: assert failed\n", __FILE__, line) ;
+       exit (1)
+    END
+ END Assert ;
+ 
+ 
+ (*
+    CreateFiles - create MaxFile files saving the file handle
+                  into files.
+ *)
+ 
+ PROCEDURE CreateFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    ch  : CHAR ;
+    res : SeqFile.OpenResults ;
+ BEGIN
+    FOR i := 1 TO HIGH (files) DO
+       Strings.Assign ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       SeqFile.OpenWrite (files[i], name,
+                          SeqFile.text+SeqFile.write, res) ;
+       TextIO.WriteString (files[i], "some text inside file ") ;
+       TextIO.WriteLn (files[i]) ;
+       SeqFile.Close (files[i])
+    END
+ END CreateFiles ;
+ 
+ 
+ (*
+    DeleteFiles - delete every file in files.
+ *)
+ 
+ PROCEDURE DeleteFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    s   : DynamicStrings.String ;
+    ch  : CHAR ;
+    res : SeqFile.OpenResults ;
+ BEGIN
+    (* Open the files first.  *)
+    FOR i := 1 TO HIGH (files) DO
+       Strings.Assign ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       SeqFile.OpenRead (files[i], name, SeqFile.text, res) ;
+       Assert (FileSysOp.Exists (name), __LINE__) ;
+       Assert (FileSysOp.IsFile (name), __LINE__)
+    END ;
+    (* Now delete them.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := IOChanUtils.GetFileName (files[i]) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       Assert (StringFileSysOp.Unlink (s), __LINE__) ;
+       Assert (NOT StringFileSysOp.Exists (s), __LINE__) ;
+       SeqFile.Close (files[i]) ;
+       s := DynamicStrings.KillString (s)
+    END
+ END DeleteFiles ;
+ 
+ 
+ (*
+    Init -
+ *)
+ 
+ PROCEDURE Init ;
+ BEGIN
+    CreateFiles ;
+    DeleteFiles ;
+    printf ("all tests passed\n")
+ END Init ;
+ 
+ 
+ BEGIN
+    Init
+ END testdelete2.
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod gcc-16-20250706/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod
*** gcc-16-20250629/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod	Sun Jul  6 22:33:06 2025
***************
*** 0 ****
--- 1,104 ----
+ MODULE testdelete2 ;
+ 
+ (* A test module to test file creation and deletion using log
+    libraries.  *)
+ 
+ 
+ IMPORT FIO, SFIO, DynamicStrings, StringFileSysOp,
+        FileSysOp, FileSystem, StrLib ;
+ 
+ FROM libc IMPORT printf, exit ;
+ FROM FormatStrings IMPORT Sprintf1 ;
+ 
+ 
+ CONST
+    MaxFile = 10 ;
+ 
+ VAR
+    files: ARRAY [0..MaxFile] OF FileSystem.File ;
+ 
+ 
+ PROCEDURE Assert (condition: BOOLEAN; line: CARDINAL) ;
+ BEGIN
+    IF NOT condition
+    THEN
+       printf ("%s:%d: assert failed\n", __FILE__, line) ;
+       exit (1)
+    END
+ END Assert ;
+ 
+ 
+ (*
+    CreateFiles - create MaxFile files saving the file handle
+                  into files.
+ *)
+ 
+ PROCEDURE CreateFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    ch  : CHAR ;
+ BEGIN
+    FOR i := 1 TO HIGH (files) DO
+       StrLib.StrCopy ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       FileSystem.Lookup (files[i], name, TRUE) ;
+       FileSystem.WriteString (files[i], "some text inside file ") ;
+       FileSystem.WriteChar (files[i], ch) ;
+       FileSystem.WriteString (files[i], "\n") ;
+       FileSystem.Close (files[i])
+    END
+ END CreateFiles ;
+ 
+ 
+ (*
+    DeleteFiles - delete every file in files.
+ *)
+ 
+ PROCEDURE DeleteFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    s   : DynamicStrings.String ;
+    ch  : CHAR ;
+ BEGIN
+    (* Open the files first.  *)
+    FOR i := 1 TO HIGH (files) DO
+       StrLib.StrCopy ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       FileSystem.Lookup (files[i], name, FALSE) ;
+       Assert (FileSysOp.Exists (name), __LINE__) ;
+       Assert (FileSysOp.IsFile (name), __LINE__)
+    END ;
+    (* Now delete them.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := FileSystem.GetFileName (files[i]) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       Assert (StringFileSysOp.Unlink (s), __LINE__) ;
+       Assert (NOT StringFileSysOp.Exists (s), __LINE__) ;
+       FileSystem.Close (files[i]) ;
+       s := DynamicStrings.KillString (s)
+    END
+ END DeleteFiles ;
+ 
+ 
+ (*
+    Init -
+ *)
+ 
+ PROCEDURE Init ;
+ BEGIN
+    CreateFiles ;
+    DeleteFiles ;
+    printf ("all tests passed\n")
+ END Init ;
+ 
+ 
+ BEGIN
+    Init
+ END testdelete2.
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod gcc-16-20250706/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod
*** gcc-16-20250629/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod	Sun Jul  6 22:33:06 2025
***************
*** 0 ****
--- 1,97 ----
+ MODULE testdelete ;
+ 
+ (* A test module to test file creation and deletion using base
+    PIM libraries.  *)
+ 
+ 
+ IMPORT FIO, SFIO, DynamicStrings, StringFileSysOp ;
+ FROM libc IMPORT printf, exit ;
+ FROM FormatStrings IMPORT Sprintf1 ;
+ 
+ 
+ CONST
+    MaxFile = 10 ;
+ 
+ VAR
+    files: ARRAY [0..MaxFile] OF FIO.File ;
+ 
+ 
+ PROCEDURE Assert (condition: BOOLEAN; line: CARDINAL) ;
+ BEGIN
+    IF NOT condition
+    THEN
+       printf ("%s:%d: assert failed\n", __FILE__, line) ;
+       exit (1)
+    END
+ END Assert ;
+ 
+ 
+ (*
+    CreateFiles - create MaxFile files saving the file handle
+                  into files.
+ *)
+ 
+ PROCEDURE CreateFiles ;
+ VAR
+    i: CARDINAL ;
+    s: DynamicStrings.String ;
+ BEGIN
+    FOR i := 1 TO HIGH (files) DO
+       s := DynamicStrings.InitString ("file%03d") ;
+       s := Sprintf1 (s, i) ;
+       files[i] := SFIO.OpenToWrite (s) ;
+       s := DynamicStrings.KillString (s) ;
+       s := DynamicStrings.InitString ("some text inside file %d\n") ;
+       s := Sprintf1 (s, i) ;
+       s := DynamicStrings.KillString (SFIO.WriteS (files[i], s)) ;
+       FIO.Close (files[i])
+    END
+ END CreateFiles ;
+ 
+ 
+ (*
+    DeleteFiles - delete every file in files.
+ *)
+ 
+ PROCEDURE DeleteFiles ;
+ VAR
+    i: CARDINAL ;
+    s: DynamicStrings.String ;
+ BEGIN
+    (* Open the files first.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := DynamicStrings.InitString ("file%03d") ;
+       s := Sprintf1 (s, i) ;
+       files[i] := SFIO.OpenToRead (s) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       s := DynamicStrings.KillString (s)
+    END ;
+    (* Now delete them.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := SFIO.GetFileName (files[i]) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       Assert (StringFileSysOp.Unlink (s), __LINE__) ;
+       Assert (NOT StringFileSysOp.Exists (s), __LINE__) ;
+       FIO.Close (files[i]) ;
+       s := DynamicStrings.KillString (s)
+    END
+ END DeleteFiles ;
+ 
+ 
+ (*
+    Init -
+ *)
+ 
+ PROCEDURE Init ;
+ BEGIN
+    CreateFiles ;
+    DeleteFiles ;
+    printf ("all tests passed\n")
+ END Init ;
+ 
+ 
+ BEGIN
+    Init
+ END testdelete.
diff -Nrcpad gcc-16-20250629/gcc/testsuite/gnat.dg/specs/finalizable2.ads gcc-16-20250706/gcc/testsuite/gnat.dg/specs/finalizable2.ads
*** gcc-16-20250629/gcc/testsuite/gnat.dg/specs/finalizable2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/gcc/testsuite/gnat.dg/specs/finalizable2.ads	Sun Jul  6 22:33:07 2025
***************
*** 0 ****
--- 1,21 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatX0" }
+ 
+ package Finalizable2 is
+ 
+    type Root is abstract tagged limited null record
+       with Finalizable => (Initialize => Initialize);
+ 
+    procedure Initialize (this : in out Root) is abstract;
+ 
+    type Ext (L : Natural) is new Root with record
+       A : String (1 .. L);
+    end record;
+ 
+    overriding procedure Initialize (this : in out Ext) is null;
+ 
+    function Make return Ext is (L => 3, A => "asd");
+ 
+    Obj : Ext := Make;
+ 
+ end Finalizable2;
diff -Nrcpad gcc-16-20250629/gcc/testsuite/lib/target-supports.exp gcc-16-20250706/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20250629/gcc/testsuite/lib/target-supports.exp	Sun Jun 29 22:34:00 2025
--- gcc-16-20250706/gcc/testsuite/lib/target-supports.exp	Sun Jul  6 22:33:07 2025
*************** proc check_effective_target_aarch64_gas_
*** 12460,12471 ****
  # Create functions to check that the AArch64 assembler supports the
  # various architecture extensions via the .arch_extension pseudo-op.
  
! foreach { aarch64_ext } { "fp" "simd" "crypto" "crc" "lse" "dotprod" "sve"
! 			  "i8mm" "f32mm" "f64mm" "bf16" "sb" "sve2" "ls64"
! 			  "lut" "sme" "sme-i16i64" "sme2" "sve-b16b16"
! 			  "sme-b16b16" "sme-f16f16" "sme2p1" "fp8" "fp8fma"
! 			  "ssve-fp8fma" "fp8dot2" "ssve-fp8dot2" "fp8dot4"
! 			  "ssve-fp8dot4"} {
      eval [string map [list FUNC $aarch64_ext] {
  	proc check_effective_target_aarch64_asm_FUNC_ok { } {
  	  if { [istarget aarch64*-*-*] } {
--- 12460,12473 ----
  # Create functions to check that the AArch64 assembler supports the
  # various architecture extensions via the .arch_extension pseudo-op.
  
! set exts {
!     "bf16" "cmpbr" "crc" "crypto" "dotprod" "f32mm" "f64mm" "fp" "fp8"
!     "fp8dot2" "fp8dot4" "fp8fma" "i8mm" "ls64" "lse" "lut" "sb" "simd"
!     "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1" "ssve-fp8dot2"
!     "ssve-fp8dot4" "ssve-fp8fma" "sve-b16b16" "sve" "sve2"
! }
! 
! foreach { aarch64_ext } $exts {
      eval [string map [list FUNC $aarch64_ext] {
  	proc check_effective_target_aarch64_asm_FUNC_ok { } {
  	  if { [istarget aarch64*-*-*] } {
*************** proc check_effective_target_xtensa_atomi
*** 14495,14497 ****
--- 14497,14513 ----
  	#endif
      }]
  }
+ 
+ # Return 1 if pi-based trigonometry function is foldable
+ # We should remove this after bumping the minimum mpfr version to 4.2.0.
+ proc check_effective_target_foldable_pi_based_trigonometry { } {
+     return [check_runtime foldable_pi_based_trigonometry {
+ 	int
+ 	main ()
+ 	{
+ 	  if (!__builtin_constant_p (__builtin_acospi (0.5)))
+ 	    __builtin_abort ();
+ 	  return 0;
+ 	}
+     }]
+ }
diff -Nrcpad gcc-16-20250629/gcc/tree-call-cdce.cc gcc-16-20250706/gcc/tree-call-cdce.cc
*** gcc-16-20250629/gcc/tree-call-cdce.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-call-cdce.cc	Sun Jul  6 22:33:08 2025
*************** along with GCC; see the file COPYING3.
*** 36,41 ****
--- 36,42 ----
  #include "builtins.h"
  #include "internal-fn.h"
  #include "tree-dfa.h"
+ #include "tree-eh.h"
  
  
  /* This pass serves two closely-related purposes:
*************** can_test_argument_range (gcall *call)
*** 296,303 ****
--- 297,308 ----
      /* Trig functions.  */
      CASE_FLT_FN (BUILT_IN_ACOS):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_ACOS):
+     CASE_FLT_FN (BUILT_IN_ACOSPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_ACOSPI):
      CASE_FLT_FN (BUILT_IN_ASIN):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_ASIN):
+     CASE_FLT_FN (BUILT_IN_ASINPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_ASINPI):
      /* Hyperbolic functions.  */
      CASE_FLT_FN (BUILT_IN_ACOSH):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_ACOSH):
*************** edom_only_function (gcall *call)
*** 351,363 ****
--- 356,376 ----
      {
      CASE_FLT_FN (BUILT_IN_ACOS):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_ACOS):
+     CASE_FLT_FN (BUILT_IN_ACOSPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_ACOSPI):
      CASE_FLT_FN (BUILT_IN_ASIN):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_ASIN):
+     CASE_FLT_FN (BUILT_IN_ASINPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_ASINPI):
      CASE_FLT_FN (BUILT_IN_COS):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_COS):
+     CASE_FLT_FN (BUILT_IN_COSPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_COSPI):
      CASE_FLT_FN (BUILT_IN_SIGNIFICAND):
      CASE_FLT_FN (BUILT_IN_SIN):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_SIN):
+     CASE_FLT_FN (BUILT_IN_SINPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_SINPI):
      CASE_FLT_FN (BUILT_IN_SQRT):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_SQRT):
      CASE_FLT_FN (BUILT_IN_FMOD):
*************** get_no_error_domain (enum built_in_funct
*** 692,699 ****
--- 705,716 ----
      /* Trig functions: return [-1, +1]  */
      CASE_FLT_FN (BUILT_IN_ACOS):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_ACOS):
+     CASE_FLT_FN (BUILT_IN_ACOSPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_ACOSPI):
      CASE_FLT_FN (BUILT_IN_ASIN):
      CASE_FLT_FN_FLOATN_NX (BUILT_IN_ASIN):
+     CASE_FLT_FN (BUILT_IN_ASINPI):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_ASINPI):
        return get_domain (-1, true, true,
                           1, true, true);
      /* Hyperbolic functions.  */
*************** use_internal_fn (gcall *call)
*** 1206,1213 ****
      {
        /* Skip the call if LHS == LHS.  If we reach here, EDOM is the only
  	 valid errno value and it is used iff the result is NaN.  */
!       conds.quick_push (gimple_build_cond (EQ_EXPR, lhs, lhs,
! 					   NULL_TREE, NULL_TREE));
        nconds++;
  
        /* Try replacing the original call with a direct assignment to
--- 1223,1242 ----
      {
        /* Skip the call if LHS == LHS.  If we reach here, EDOM is the only
  	 valid errno value and it is used iff the result is NaN.  */
!       /* In the case of non call exceptions, with signaling NaNs, EQ_EXPR
! 	 can throw an exception and that can't be part of the GIMPLE_COND. */
!       if (flag_exceptions
! 	  && cfun->can_throw_non_call_exceptions
! 	  && operation_could_trap_p (EQ_EXPR, true, false, NULL_TREE))
! 	{
! 	  tree b = make_ssa_name (boolean_type_node);
! 	  conds.quick_push (gimple_build_assign (b, EQ_EXPR, lhs, lhs));
! 	  conds.quick_push (gimple_build_cond (NE_EXPR, b, boolean_false_node,
! 					       NULL_TREE, NULL_TREE));
! 	}
!       else
! 	conds.quick_push (gimple_build_cond (EQ_EXPR, lhs, lhs,
! 					     NULL_TREE, NULL_TREE));
        nconds++;
  
        /* Try replacing the original call with a direct assignment to
diff -Nrcpad gcc-16-20250629/gcc/tree-cfg.cc gcc-16-20250706/gcc/tree-cfg.cc
*** gcc-16-20250629/gcc/tree-cfg.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-cfg.cc	Sun Jul  6 22:33:08 2025
*************** verify_gimple_assign_single (gassign *st
*** 4623,4628 ****
--- 4623,4636 ----
        return true;
      }
  
+   /* LHS can't be a constant or an address expression. */
+   if (CONSTANT_CLASS_P (lhs)|| TREE_CODE (lhs) == ADDR_EXPR)
+     {
+       error ("invalid LHS (%qs) for assignment: %qs",
+ 	     get_tree_code_name (TREE_CODE (lhs)), code_name);
+       return true;
+     }
+ 
    if (gimple_clobber_p (stmt)
        && !(DECL_P (lhs) || TREE_CODE (lhs) == MEM_REF))
      {
*************** verify_gimple_assign_single (gassign *st
*** 4745,4750 ****
--- 4753,4763 ----
  
  	  if (CONSTRUCTOR_NELTS (rhs1) == 0)
  	    return res;
+ 	  if (!is_gimple_reg (lhs))
+ 	    {
+ 	      error ("non-register as LHS with vector constructor");
+ 	      return true;
+ 	    }
  	  /* For vector CONSTRUCTORs we require that either it is empty
  	     CONSTRUCTOR, or it is a CONSTRUCTOR of smaller vector elements
  	     (then the element count must be correct to cover the whole
diff -Nrcpad gcc-16-20250629/gcc/tree-diagnostic-client-data-hooks.cc gcc-16-20250706/gcc/tree-diagnostic-client-data-hooks.cc
*** gcc-16-20250629/gcc/tree-diagnostic-client-data-hooks.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-diagnostic-client-data-hooks.cc	Sun Jul  6 22:33:08 2025
*************** public:
*** 155,161 ****
  	     stderr.
  	     Implement this by cleaning up the global timer instance now.  */
  	  delete g_timer;
! 	  g_timer = NULL;
  	}
    }
  
--- 155,161 ----
  	     stderr.
  	     Implement this by cleaning up the global timer instance now.  */
  	  delete g_timer;
! 	  g_timer = nullptr;
  	}
    }
  
diff -Nrcpad gcc-16-20250629/gcc/tree-object-size.cc gcc-16-20250706/gcc/tree-object-size.cc
*** gcc-16-20250629/gcc/tree-object-size.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-object-size.cc	Sun Jul  6 22:33:08 2025
*************** compute_object_offset (tree expr, const_
*** 464,469 ****
--- 464,556 ----
    return size_binop (code, base, off);
  }
  
+ /* Return true if CONTAINER has a field of type INNER at OFFSET.  */
+ 
+ static bool
+ inner_at_offset (tree container, tree inner, tree offset)
+ {
+   gcc_assert (RECORD_OR_UNION_TYPE_P (container));
+ 
+   for (tree t = TYPE_FIELDS (container); t; t = DECL_CHAIN (t))
+     {
+       if (TREE_CODE (t) != FIELD_DECL)
+ 	continue;
+ 
+       /* Skip over fields at bit offsets that are not BITS_PER_UNIT aligned
+ 	 to avoid an accidental truncated match with BYTE_POSITION below since
+ 	 the address of such fields cannot be taken.  */
+       if (wi::bit_and (wi::to_offset (DECL_FIELD_BIT_OFFSET (t)),
+ 		       BITS_PER_UNIT - 1) != 0)
+ 	continue;
+ 
+       tree byte_offset = byte_position (t);
+       if (TREE_CODE (byte_offset) != INTEGER_CST
+ 	  || tree_int_cst_lt (offset, byte_offset))
+ 	return false;
+ 
+       /* For an array, check the element type, otherwise the actual type.  This
+ 	 deliberately does not support the case of jumping from a pointer to
+ 	 the middle of an array to its containing struct.  */
+       tree t_type = TREE_TYPE (t);
+       if (((TREE_CODE (t_type) == ARRAY_TYPE && TREE_TYPE (t_type) == inner)
+ 	   || t_type == inner)
+ 	  && tree_int_cst_equal (byte_offset, offset))
+ 	return true;
+ 
+       /* Nested structure or union, adjust the expected offset and dive in.  */
+       if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (t))
+ 	  && inner_at_offset (TREE_TYPE (t), inner,
+ 			      fold_build2 (MINUS_EXPR, sizetype, offset,
+ 					   byte_offset)))
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
+ /* For the input MEMREF of type MEMREF_TYPE, look for the presence of a field
+    of BASE_TYPE at OFFSET and return an adjusted WHOLESIZE if found.  */
+ 
+ static tree
+ get_wholesize_for_memref (tree memref, tree wholesize)
+ {
+   tree base = TREE_OPERAND (memref, 0);
+   tree offset = fold_convert (sizetype, TREE_OPERAND (memref, 1));
+   tree memref_type = TREE_TYPE (memref);
+   tree base_type = TREE_TYPE (base);
+ 
+   if (POINTER_TYPE_P (base_type))
+     base_type = TREE_TYPE ((base_type));
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     {
+       fprintf (dump_file, "wholesize_for_memref: ");
+       print_generic_expr (dump_file, wholesize, dump_flags);
+       fprintf (dump_file, ", offset: ");
+       print_generic_expr (dump_file, offset, dump_flags);
+       fprintf (dump_file, "\n");
+     }
+ 
+   if (TREE_CODE (offset) != INTEGER_CST
+       || compare_tree_int (offset, offset_limit) < 0
+       || !RECORD_OR_UNION_TYPE_P (memref_type))
+     return wholesize;
+ 
+   offset = fold_build1 (NEGATE_EXPR, sizetype, offset);
+ 
+   if (inner_at_offset (memref_type, base_type, offset))
+     wholesize = size_binop (PLUS_EXPR, wholesize, offset);
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     {
+       fprintf (dump_file, "    new wholesize: ");
+       print_generic_expr (dump_file, wholesize, dump_flags);
+       fprintf (dump_file, "\n");
+     }
+ 
+   return wholesize;
+ }
+ 
  /* Returns the size of the object designated by DECL considering its
     initializer if it either has one or if it would not affect its size,
     otherwise the size of the object without the initializer when MIN
*************** addr_object_size (struct object_size_inf
*** 536,542 ****
  	{
  	  compute_builtin_object_size (TREE_OPERAND (pt_var, 0),
  				       object_size_type & ~OST_SUBOBJECT, &sz);
! 	  wholesize = sz;
  	}
        else
  	{
--- 623,629 ----
  	{
  	  compute_builtin_object_size (TREE_OPERAND (pt_var, 0),
  				       object_size_type & ~OST_SUBOBJECT, &sz);
! 	  wholesize = get_wholesize_for_memref (pt_var, sz);
  	}
        else
  	{
*************** addr_object_size (struct object_size_inf
*** 548,553 ****
--- 635,641 ----
  	    {
  	      sz = object_sizes_get (osi, SSA_NAME_VERSION (var));
  	      wholesize = object_sizes_get (osi, SSA_NAME_VERSION (var), true);
+ 	      wholesize = get_wholesize_for_memref (pt_var, wholesize);
  	    }
  	  else
  	    sz = wholesize = size_unknown (object_size_type);
*************** addr_object_size (struct object_size_inf
*** 773,782 ****
     4th argument TYPE_OF_SIZE: A constant 0 with its TYPE being the same as the TYPE
      of the object referenced by REF_TO_SIZE
     6th argument: A constant 0 with the pointer TYPE to the original flexible
!      array type.
  
     The size of the element can be retrived from the TYPE of the 6th argument
!    of the call, which is the pointer to the array type.  */
  static tree
  access_with_size_object_size (const gcall *call, int object_size_type)
  {
--- 861,872 ----
     4th argument TYPE_OF_SIZE: A constant 0 with its TYPE being the same as the TYPE
      of the object referenced by REF_TO_SIZE
     6th argument: A constant 0 with the pointer TYPE to the original flexible
!      array type or pointer field type.
  
     The size of the element can be retrived from the TYPE of the 6th argument
!    of the call, which is the pointer to the original flexible array type or
!    the type of the original pointer field.  */
! 
  static tree
  access_with_size_object_size (const gcall *call, int object_size_type)
  {
*************** access_with_size_object_size (const gcal
*** 786,792 ****
  
    gcc_assert (gimple_call_internal_p (call, IFN_ACCESS_WITH_SIZE));
    /* The type of the 6th argument type is the pointer TYPE to the original
!      flexible array type.  */
    tree pointer_to_array_type = TREE_TYPE (gimple_call_arg (call, 5));
    gcc_assert (POINTER_TYPE_P (pointer_to_array_type));
    tree element_type = TREE_TYPE (TREE_TYPE (pointer_to_array_type));
--- 876,882 ----
  
    gcc_assert (gimple_call_internal_p (call, IFN_ACCESS_WITH_SIZE));
    /* The type of the 6th argument type is the pointer TYPE to the original
!      flexible array type or to the original pointer type.  */
    tree pointer_to_array_type = TREE_TYPE (gimple_call_arg (call, 5));
    gcc_assert (POINTER_TYPE_P (pointer_to_array_type));
    tree element_type = TREE_TYPE (TREE_TYPE (pointer_to_array_type));
*************** collect_object_sizes_for (struct object_
*** 1854,1859 ****
--- 1944,1960 ----
              if (TREE_CODE (rhs) == SSA_NAME
                  && POINTER_TYPE_P (TREE_TYPE (rhs)))
  	      reexamine = merge_object_sizes (osi, var, rhs);
+ 	    /* Handle the following stmt #2 to propagate the size from the
+ 	       stmt #1 to #3:
+ 		1  _1 = .ACCESS_WITH_SIZE (_3, _4, 1, 0, -1, 0B);
+ 		2  _5 = *_1;
+ 		3  _6 = __builtin_dynamic_object_size (_5, 1);
+ 	     */
+ 	    else if (TREE_CODE (rhs) == MEM_REF
+ 		     && POINTER_TYPE_P (TREE_TYPE (rhs))
+ 		     && TREE_CODE (TREE_OPERAND (rhs, 0)) == SSA_NAME
+ 		     && integer_zerop (TREE_OPERAND (rhs, 1)))
+ 	      reexamine = merge_object_sizes (osi, var, TREE_OPERAND (rhs, 0));
              else
                expr_object_size (osi, var, rhs);
            }
diff -Nrcpad gcc-16-20250629/gcc/tree-profile.cc gcc-16-20250706/gcc/tree-profile.cc
*** gcc-16-20250629/gcc/tree-profile.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-profile.cc	Sun Jul  6 22:33:08 2025
*************** tree_profiling (void)
*** 2031,2036 ****
--- 2031,2037 ----
    handle_missing_profiles ();
  
    del_node_map ();
+   end_branch_prob ();
    return 0;
  }
  
*************** public:
*** 2065,2074 ****
  bool
  pass_ipa_tree_profile::gate (function *)
  {
!   /* When profile instrumentation, use or test coverage shall be performed.
!      But for AutoFDO, this there is no instrumentation, thus this pass is
!      disabled.  */
!   return (!in_lto_p && !flag_auto_profile
  	  && (flag_branch_probabilities || flag_test_coverage
  	      || coverage_instrumentation_p ())
  	  && !seen_error ());
--- 2066,2073 ----
  bool
  pass_ipa_tree_profile::gate (function *)
  {
!   /* When profile instrumentation, use or test coverage shall be performed.  */
!   return (!in_lto_p
  	  && (flag_branch_probabilities || flag_test_coverage
  	      || coverage_instrumentation_p ())
  	  && !seen_error ());
diff -Nrcpad gcc-16-20250629/gcc/tree-ssa-ccp.cc gcc-16-20250706/gcc/tree-ssa-ccp.cc
*** gcc-16-20250629/gcc/tree-ssa-ccp.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-ssa-ccp.cc	Sun Jul  6 22:33:08 2025
*************** pass_post_ipa_warn::execute (function *f
*** 4629,4645 ****
  	      unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	      unsigned int idx2
  		= TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
  	      if (idx < gimple_call_num_args (stmt)
! 		  && idx2 < gimple_call_num_args (stmt))
  		{
  		  tree arg = gimple_call_arg (stmt, idx);
  		  tree arg2 = gimple_call_arg (stmt, idx2);
  		  if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE
  		      || !integer_zerop (arg)
  		      || !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
  		      || integer_zerop (arg2)
  		      || ((TREE_CODE (fntype) == METHOD_TYPE || closure)
! 			  && (idx == 0 || idx2 == 0)))
  		    continue;
  		  if (!integer_nonzerop (arg2)
  		      && !tree_expr_nonzero_p (arg2))
--- 4629,4652 ----
  	      unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
  	      unsigned int idx2
  		= TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
+ 	      unsigned int idx3 = idx2;
+ 	      if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
+ 		idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
  	      if (idx < gimple_call_num_args (stmt)
! 		  && idx2 < gimple_call_num_args (stmt)
! 		  && idx3 < gimple_call_num_args (stmt))
  		{
  		  tree arg = gimple_call_arg (stmt, idx);
  		  tree arg2 = gimple_call_arg (stmt, idx2);
+ 		  tree arg3 = gimple_call_arg (stmt, idx3);
  		  if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE
  		      || !integer_zerop (arg)
  		      || !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
+ 		      || !INTEGRAL_TYPE_P (TREE_TYPE (arg3))
  		      || integer_zerop (arg2)
+ 		      || integer_zerop (arg3)
  		      || ((TREE_CODE (fntype) == METHOD_TYPE || closure)
! 			  && (idx == 0 || idx2 == 0 || idx3 == 0)))
  		    continue;
  		  if (!integer_nonzerop (arg2)
  		      && !tree_expr_nonzero_p (arg2))
*************** pass_post_ipa_warn::execute (function *f
*** 4654,4670 ****
  		      if (range_includes_zero_p (vr))
  			continue;
  		    }
  		  unsigned argno = idx + 1;
  		  unsigned argno2 = idx2 + 1;
  		  location_t loc = (EXPR_HAS_LOCATION (arg)
  				    ? EXPR_LOCATION (arg)
  				    : gimple_location (stmt));
  		  auto_diagnostic_group d;
  
! 		  if (!warning_at (loc, OPT_Wnonnull,
! 				   "argument %u null where non-null "
! 				   "expected because argument %u is "
! 				   "nonzero", argno, argno2))
  		    continue;
  
  		  tree fndecl = gimple_call_fndecl (stmt);
--- 4661,4700 ----
  		      if (range_includes_zero_p (vr))
  			continue;
  		    }
+ 		  if (idx2 != idx3
+ 		      && !integer_nonzerop (arg3)
+ 		      && !tree_expr_nonzero_p (arg3))
+ 		    {
+ 		      if (TREE_CODE (arg3) != SSA_NAME || optimize < 2)
+ 			continue;
+ 		      if (!ranger)
+ 			ranger = enable_ranger (cfun);
+ 
+ 		      int_range_max vr;
+ 		      get_range_query (cfun)->range_of_expr (vr, arg3, stmt);
+ 		      if (range_includes_zero_p (vr))
+ 			continue;
+ 		    }
  		  unsigned argno = idx + 1;
  		  unsigned argno2 = idx2 + 1;
+ 		  unsigned argno3 = idx3 + 1;
  		  location_t loc = (EXPR_HAS_LOCATION (arg)
  				    ? EXPR_LOCATION (arg)
  				    : gimple_location (stmt));
  		  auto_diagnostic_group d;
  
! 		  if (idx2 != idx3)
! 		    {
! 		      if (!warning_at (loc, OPT_Wnonnull,
! 				       "argument %u null where non-null "
! 				       "expected because arguments %u and %u "
! 				       "are nonzero", argno, argno2, argno3))
! 			continue;
! 		    }
! 		  else if (!warning_at (loc, OPT_Wnonnull,
! 					"argument %u null where non-null "
! 					"expected because argument %u is "
! 					"nonzero", argno, argno2))
  		    continue;
  
  		  tree fndecl = gimple_call_fndecl (stmt);
diff -Nrcpad gcc-16-20250629/gcc/tree-ssa-sccvn.cc gcc-16-20250706/gcc/tree-ssa-sccvn.cc
*** gcc-16-20250629/gcc/tree-ssa-sccvn.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-ssa-sccvn.cc	Sun Jul  6 22:33:08 2025
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 2809,2815 ****
           we find a VN result with exactly the same value as the
  	 possible clobber.  In this case we can ignore the clobber
  	 and return the found value.  */
!       if (is_gimple_reg_type (TREE_TYPE (lhs))
  	  && types_compatible_p (TREE_TYPE (lhs), vr->type)
  	  && (ref->ref || data->orig_ref.ref)
  	  && !data->mask
--- 2809,2816 ----
           we find a VN result with exactly the same value as the
  	 possible clobber.  In this case we can ignore the clobber
  	 and return the found value.  */
!       if (!gimple_has_volatile_ops (def_stmt)
! 	  && is_gimple_reg_type (TREE_TYPE (lhs))
  	  && types_compatible_p (TREE_TYPE (lhs), vr->type)
  	  && (ref->ref || data->orig_ref.ref)
  	  && !data->mask
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3093,3099 ****
    else if (is_gimple_reg_type (vr->type)
  	   && gimple_assign_single_p (def_stmt)
  	   && gimple_assign_rhs_code (def_stmt) == CONSTRUCTOR
! 	   && CONSTRUCTOR_NELTS (gimple_assign_rhs1 (def_stmt)) == 0)
      {
        tree base2;
        poly_int64 offset2, size2, maxsize2;
--- 3094,3101 ----
    else if (is_gimple_reg_type (vr->type)
  	   && gimple_assign_single_p (def_stmt)
  	   && gimple_assign_rhs_code (def_stmt) == CONSTRUCTOR
! 	   && CONSTRUCTOR_NELTS (gimple_assign_rhs1 (def_stmt)) == 0
! 	   && !TREE_THIS_VOLATILE (gimple_assign_lhs (def_stmt)))
      {
        tree base2;
        poly_int64 offset2, size2, maxsize2;
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3149,3154 ****
--- 3151,3157 ----
  	   && !reverse_storage_order_for_component_p (vr->operands)
  	   && !contains_storage_order_barrier_p (vr->operands)
  	   && gimple_assign_single_p (def_stmt)
+ 	   && !TREE_THIS_VOLATILE (gimple_assign_lhs (def_stmt))
  	   && CHAR_BIT == 8
  	   && BITS_PER_UNIT == 8
  	   && BYTES_BIG_ENDIAN == WORDS_BIG_ENDIAN
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3307,3312 ****
--- 3310,3316 ----
  	   && !reverse_storage_order_for_component_p (vr->operands)
  	   && !contains_storage_order_barrier_p (vr->operands)
  	   && gimple_assign_single_p (def_stmt)
+ 	   && !TREE_THIS_VOLATILE (gimple_assign_lhs (def_stmt))
  	   && TREE_CODE (gimple_assign_rhs1 (def_stmt)) == SSA_NAME)
      {
        tree lhs = gimple_assign_lhs (def_stmt);
*************** vn_reference_lookup_3 (ao_ref *ref, tree
*** 3518,3523 ****
--- 3522,3528 ----
       the copy kills ref.  */
    else if (data->vn_walk_kind == VN_WALKREWRITE
  	   && gimple_assign_single_p (def_stmt)
+ 	   && !gimple_has_volatile_ops (def_stmt)
  	   && (DECL_P (gimple_assign_rhs1 (def_stmt))
  	       || TREE_CODE (gimple_assign_rhs1 (def_stmt)) == MEM_REF
  	       || handled_component_p (gimple_assign_rhs1 (def_stmt))))
diff -Nrcpad gcc-16-20250629/gcc/tree-tailcall.cc gcc-16-20250706/gcc/tree-tailcall.cc
*** gcc-16-20250629/gcc/tree-tailcall.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-tailcall.cc	Sun Jul  6 22:33:49 2025
*************** empty_eh_cleanup (basic_block bb, int *e
*** 532,539 ****
  	  && sanitize_flags_p (SANITIZE_ADDRESS)
  	  && asan_mark_p (g, ASAN_MARK_POISON))
  	continue;
!       if (is_gimple_resx (g) && stmt_can_throw_external (cfun, g))
! 	return true;
        return false;
      }
    if (!single_succ_p (bb))
--- 532,547 ----
  	  && sanitize_flags_p (SANITIZE_ADDRESS)
  	  && asan_mark_p (g, ASAN_MARK_POISON))
  	continue;
!       if (is_gimple_resx (g))
! 	{
! 	  if (stmt_can_throw_external (cfun, g))
! 	    return true;
! 	  if (single_succ_p (bb)
! 	      && (single_succ_edge (bb)->flags & EDGE_EH)
! 	      && cnt > 1)
! 	    return empty_eh_cleanup (single_succ (bb), eh_has_tsan_func_exit,
! 				     cnt - 1);
! 	}
        return false;
      }
    if (!single_succ_p (bb))
*************** empty_eh_cleanup (basic_block bb, int *e
*** 548,555 ****
  static live_vars_map *live_vars;
  static vec<bitmap_head> live_vars_vec;
  
! /* Finds tailcalls falling into basic block BB.  The list of found tailcalls is
!    added to the start of RET.  When ONLY_MUSTTAIL is set only handle musttail.
     Update OPT_TAILCALLS as output parameter.  If DIAG_MUSTTAIL, diagnose
     failures for musttail calls.  RETRY_TSAN_FUNC_EXIT is initially 0 and
     in that case the last call is attempted to be tail called, including
--- 556,564 ----
  static live_vars_map *live_vars;
  static vec<bitmap_head> live_vars_vec;
  
! /* Finds tailcalls falling into basic block BB when coming from edge ESUCC (or
!    NULL).  The list of found tailcalls is added to the start of RET.
!    When ONLY_MUSTTAIL is set only handle musttail.
     Update OPT_TAILCALLS as output parameter.  If DIAG_MUSTTAIL, diagnose
     failures for musttail calls.  RETRY_TSAN_FUNC_EXIT is initially 0 and
     in that case the last call is attempted to be tail called, including
*************** static vec<bitmap_head> live_vars_vec;
*** 558,569 ****
     will retry with it set to 1 (regardless of whether turning the
     __tsan_func_exit was successfully detected as tail call or not) and that
     will allow turning musttail calls before that call into tail calls as well
!    by adding __tsan_func_exit call before the call.  */
  
  static void
! find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail,
! 		 bool &opt_tailcalls, bool diag_musttail,
! 		 int &retry_tsan_func_exit)
  {
    tree ass_var = NULL_TREE, ret_var, func, param;
    gimple *stmt;
--- 567,581 ----
     will retry with it set to 1 (regardless of whether turning the
     __tsan_func_exit was successfully detected as tail call or not) and that
     will allow turning musttail calls before that call into tail calls as well
!    by adding __tsan_func_exit call before the call.
!    IGNORED_EDGES and MUST_SEE_BBS are used in recursive calls when handling
!    GIMPLE_CONDs for cleanups.  */
  
  static void
! find_tail_calls (basic_block bb, edge esucc, struct tailcall **ret,
! 		 bool only_musttail, bool &opt_tailcalls, bool diag_musttail,
! 		 int &retry_tsan_func_exit, hash_set<edge> *ignored_edges,
! 		 hash_set<basic_block> *must_see_bbs)
  {
    tree ass_var = NULL_TREE, ret_var, func, param;
    gimple *stmt;
*************** find_tail_calls (basic_block bb, struct
*** 579,592 ****
    bool only_tailr = false;
    bool has_tsan_func_exit = false;
    int eh_has_tsan_func_exit = -1;
  
    if (!single_succ_p (bb)
        && (EDGE_COUNT (bb->succs) || !cfun->has_musttail || !diag_musttail))
      {
        /* If there is an abnormal edge assume it's the only extra one.
  	 Tolerate that case so that we can give better error messages
  	 for musttail later.  */
!       if (!has_abnormal_or_eh_outgoing_edge_p (bb))
  	{
  	  if (dump_file)
  	    fprintf (dump_file, "Basic block %d has extra exit edges\n",
--- 591,614 ----
    bool only_tailr = false;
    bool has_tsan_func_exit = false;
    int eh_has_tsan_func_exit = -1;
+   bool delete_ignored_edges = false;
  
    if (!single_succ_p (bb)
        && (EDGE_COUNT (bb->succs) || !cfun->has_musttail || !diag_musttail))
      {
+       if (EDGE_COUNT (bb->succs) == 2
+ 	  && esucc
+ 	  && cfun->has_musttail
+ 	  && diag_musttail
+ 	  && (EDGE_SUCC (bb, 0)->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE))
+ 	  && (EDGE_SUCC (bb, 1)->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE))
+ 	  && (stmt = last_nondebug_stmt (bb))
+ 	  && gimple_code (stmt) == GIMPLE_COND)
+ 	;
        /* If there is an abnormal edge assume it's the only extra one.
  	 Tolerate that case so that we can give better error messages
  	 for musttail later.  */
!       else if (!has_abnormal_or_eh_outgoing_edge_p (bb))
  	{
  	  if (dump_file)
  	    fprintf (dump_file, "Basic block %d has extra exit edges\n",
*************** find_tail_calls (basic_block bb, struct
*** 629,634 ****
--- 651,729 ----
  	  && diag_musttail)
  	continue;
  
+       /* Especially at -O0 with -fsanitize=address we can end up with
+ 	 code like
+ 	   _26 = foo (x_24(D)); [must tail call]
+ 	   finally_tmp.3_27 = 0;
+ 	   goto <bb 5>; [INV]
+ 
+ 	   ...
+ 
+ 	   <bb 5> :
+ 	   # _6 = PHI <_26(3), _23(D)(4)>
+ 	   # finally_tmp.3_8 = PHI <finally_tmp.3_27(3), finally_tmp.3_22(4)>
+ 	   .ASAN_MARK (POISON, &c, 4);
+ 	   if (finally_tmp.3_8 == 1)
+ 	     goto <bb 7>; [INV]
+ 	   else
+ 	     goto <bb 6>; [INV]
+ 	 When walking backwards, ESUCC is the edge we are coming from,
+ 	 depending on its EDGE_TRUE_FLAG, == vs. != for the comparison
+ 	 and value compared against try to find out through which edge
+ 	 we need to go and which edge should be ignored.  The code handles
+ 	 both INTEGER_CST PHI arguments and SSA_NAMEs set to constants
+ 	 (for -O0 where those aren't propagated).  */
+       if (cfun->has_musttail
+ 	  && diag_musttail
+ 	  && esucc
+ 	  && gimple_code (stmt) == GIMPLE_COND
+ 	  && (gimple_cond_code (stmt) == EQ_EXPR
+ 	      || gimple_cond_code (stmt) == NE_EXPR)
+ 	  && TREE_CODE (gimple_cond_lhs (stmt)) == SSA_NAME
+ 	  && TREE_CODE (gimple_cond_rhs (stmt)) == INTEGER_CST
+ 	  && INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))
+ 	  && (integer_zerop (gimple_cond_rhs (stmt))
+ 	      || integer_onep (gimple_cond_rhs (stmt))))
+ 	{
+ 	  tree lhs = gimple_cond_lhs (stmt);
+ 	  bool rhsv = integer_onep (gimple_cond_rhs (stmt));
+ 	  if (((esucc->flags & EDGE_TRUE_VALUE) != 0)
+ 	      ^ (gimple_cond_code (stmt) == EQ_EXPR))
+ 	    rhsv = !rhsv;
+ 	  if (!ignored_edges)
+ 	    {
+ 	      ignored_edges = new hash_set<edge>;
+ 	      must_see_bbs = new hash_set<basic_block>;
+ 	      delete_ignored_edges = true;
+ 	    }
+ 	  if (is_gimple_assign (SSA_NAME_DEF_STMT (lhs))
+ 	      && (gimple_assign_rhs_code (SSA_NAME_DEF_STMT (lhs))
+ 		  == INTEGER_CST))
+ 	    {
+ 	      tree rhs = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (lhs));
+ 	      if (rhsv ? integer_onep (rhs) : integer_zerop (rhs))
+ 		continue;
+ 	    }
+ 	  else if (gimple_code (SSA_NAME_DEF_STMT (lhs)) == GIMPLE_PHI)
+ 	    {
+ 	      gimple *phi = SSA_NAME_DEF_STMT (lhs);
+ 	      basic_block pbb = gimple_bb (phi);
+ 	      must_see_bbs->add (pbb);
+ 	      edge_iterator ei;
+ 	      FOR_EACH_EDGE (e, ei, pbb->preds)
+ 		{
+ 		  tree rhs = gimple_phi_arg_def_from_edge (phi, e);
+ 		  if (TREE_CODE (rhs) == SSA_NAME
+ 		      && is_gimple_assign (SSA_NAME_DEF_STMT (rhs))
+ 		      && (gimple_assign_rhs_code (SSA_NAME_DEF_STMT (rhs))
+ 			  == INTEGER_CST))
+ 		    rhs = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (rhs));
+ 		  if (!(rhsv ? integer_onep (rhs) : integer_zerop (rhs)))
+ 		    ignored_edges->add (e);
+ 		}
+ 	    }
+ 	}
+ 
        if (!last_stmt)
  	last_stmt = stmt;
        /* Check for a call.  */
*************** find_tail_calls (basic_block bb, struct
*** 637,648 ****
  	  call = as_a <gcall *> (stmt);
  	  /* Handle only musttail calls when not optimizing.  */
  	  if (only_musttail && !gimple_call_must_tail_p (call))
! 	    return;
  	  if (bad_stmt)
  	    {
  	      maybe_error_musttail (call, _("memory reference or volatile "
  					    "after call"), diag_musttail);
! 	      return;
  	    }
  	  ass_var = gimple_call_lhs (call);
  	  break;
--- 732,751 ----
  	  call = as_a <gcall *> (stmt);
  	  /* Handle only musttail calls when not optimizing.  */
  	  if (only_musttail && !gimple_call_must_tail_p (call))
! 	    {
! 	    maybe_delete_ignored_edges:
! 	      if (delete_ignored_edges)
! 		{
! 		  delete ignored_edges;
! 		  delete must_see_bbs;
! 		}
! 	      return;
! 	    }
  	  if (bad_stmt)
  	    {
  	      maybe_error_musttail (call, _("memory reference or volatile "
  					    "after call"), diag_musttail);
! 	      goto maybe_delete_ignored_edges;
  	    }
  	  ass_var = gimple_call_lhs (call);
  	  break;
*************** find_tail_calls (basic_block bb, struct
*** 671,687 ****
      }
  
    if (bad_stmt)
!     return;
  
    if (gsi_end_p (gsi))
      {
        edge_iterator ei;
        /* Recurse to the predecessors.  */
        FOR_EACH_EDGE (e, ei, bb->preds)
! 	find_tail_calls (e->src, ret, only_musttail, opt_tailcalls,
! 			 diag_musttail, retry_tsan_func_exit);
  
!       return;
      }
  
    if (!suitable_for_tail_opt_p (call, diag_musttail))
--- 774,807 ----
      }
  
    if (bad_stmt)
!     goto maybe_delete_ignored_edges;
  
    if (gsi_end_p (gsi))
      {
+       if (must_see_bbs)
+ 	must_see_bbs->remove (bb);
+ 
        edge_iterator ei;
        /* Recurse to the predecessors.  */
        FOR_EACH_EDGE (e, ei, bb->preds)
! 	{
! 	  if (ignored_edges && ignored_edges->contains (e))
! 	    continue;
! 	  find_tail_calls (e->src, e, ret, only_musttail, opt_tailcalls,
! 			   diag_musttail, retry_tsan_func_exit, ignored_edges,
! 			   must_see_bbs);
! 	}
  
!       goto maybe_delete_ignored_edges;
!     }
! 
!   if (must_see_bbs && !must_see_bbs->is_empty ())
!     goto maybe_delete_ignored_edges;
! 
!   if (delete_ignored_edges)
!     {
!       delete ignored_edges;
!       delete must_see_bbs;
      }
  
    if (!suitable_for_tail_opt_p (call, diag_musttail))
*************** find_tail_calls (basic_block bb, struct
*** 973,983 ****
        tree tmp_m = NULL_TREE;
        gsi_next (&agsi);
  
        while (gsi_end_p (agsi))
  	{
  	  edge e = single_non_eh_succ_edge (abb);
  	  ass_var = propagate_through_phis (ass_var, e);
! 	  if (!ass_var)
  	    edges.safe_push (e);
  	  abb = e->dest;
  	  agsi = gsi_start_bb (abb);
--- 1093,1104 ----
        tree tmp_m = NULL_TREE;
        gsi_next (&agsi);
  
+     new_bb:
        while (gsi_end_p (agsi))
  	{
  	  edge e = single_non_eh_succ_edge (abb);
  	  ass_var = propagate_through_phis (ass_var, e);
! 	  if (!ass_var || ignored_edges)
  	    edges.safe_push (e);
  	  abb = e->dest;
  	  agsi = gsi_start_bb (abb);
*************** find_tail_calls (basic_block bb, struct
*** 1011,1016 ****
--- 1132,1219 ----
  	  && diag_musttail)
  	continue;
  
+       /* See earlier comment on GIMPLE_CONDs.  Here we need to propagate
+ 	 through on the forward walk, so based on the edges vector we've
+ 	 walked through determine which edge to follow.  */ 
+       if (ignored_edges)
+ 	{
+ 	  if (is_gimple_assign (stmt)
+ 	      && gimple_assign_rhs_code (stmt) == INTEGER_CST)
+ 	    {
+ 	      use_operand_p use_p;
+ 	      gimple *use_stmt;
+ 	      if ((integer_zerop (gimple_assign_rhs1 (stmt))
+ 		   || integer_onep (gimple_assign_rhs1 (stmt)))
+ 		  && single_imm_use (gimple_assign_lhs (stmt), &use_p,
+ 				     &use_stmt))
+ 		{
+ 		  if (gimple_code (use_stmt) == GIMPLE_COND)
+ 		    continue;
+ 		  if (gimple_code (use_stmt) == GIMPLE_PHI
+ 		      && single_imm_use (gimple_phi_result (use_stmt),
+ 					 &use_p, &use_stmt)
+ 		      && gimple_code (use_stmt) == GIMPLE_COND)
+ 		    continue;
+ 		}
+ 	    }
+ 	  if (gimple_code (stmt) == GIMPLE_COND
+ 	      && (gimple_cond_code (stmt) == EQ_EXPR
+ 		  || gimple_cond_code (stmt) == NE_EXPR)
+ 	      && TREE_CODE (gimple_cond_lhs (stmt)) == SSA_NAME
+ 	      && TREE_CODE (gimple_cond_rhs (stmt)) == INTEGER_CST
+ 	      && INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))
+ 	      && (integer_zerop (gimple_cond_rhs (stmt))
+ 		  || integer_onep (gimple_cond_rhs (stmt))))
+ 	    {
+ 	      edge e = NULL, et, ef;
+ 	      tree lhs = gimple_cond_lhs (stmt);
+ 	      bool rhsv = integer_onep (gimple_cond_rhs (stmt));
+ 	      if (gimple_cond_code (stmt) == NE_EXPR)
+ 		rhsv = !rhsv;
+ 	      extract_true_false_edges_from_block (gimple_bb (stmt), &et, &ef);
+ 	      if (is_gimple_assign (SSA_NAME_DEF_STMT (lhs))
+ 		  && (gimple_assign_rhs_code (SSA_NAME_DEF_STMT (lhs))
+ 		      == INTEGER_CST))
+ 		{
+ 		  tree rhs = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (lhs));
+ 		  if (rhsv ? integer_onep (rhs) : integer_zerop (rhs))
+ 		    e = et;
+ 		  else if (rhsv ? integer_zerop (rhs) : integer_onep (rhs))
+ 		    e = ef;
+ 		}
+ 	      else if (gimple_code (SSA_NAME_DEF_STMT (lhs)) == GIMPLE_PHI)
+ 		{
+ 		  gimple *phi = SSA_NAME_DEF_STMT (lhs);
+ 		  basic_block pbb = gimple_bb (phi);
+ 		  for (edge e2 : edges)
+ 		    if (e2->dest == pbb)
+ 		      {
+ 			tree rhs = gimple_phi_arg_def_from_edge (phi, e2);
+ 			if (TREE_CODE (rhs) == SSA_NAME)
+ 			  if (gimple *g = SSA_NAME_DEF_STMT (rhs))
+ 			    if (is_gimple_assign (g)
+ 				&& gimple_assign_rhs_code (g) == INTEGER_CST)
+ 			      rhs = gimple_assign_rhs1 (g);
+ 			if (rhsv ? integer_onep (rhs) : integer_zerop (rhs))
+ 			  e = et;
+ 			else if (rhsv ? integer_zerop (rhs)
+ 				 : integer_onep (rhs))
+ 			  e = ef;
+ 			break;
+ 		      }
+ 		}
+ 	      if (e)
+ 		{
+ 		  ass_var = propagate_through_phis (ass_var, e);
+ 		  if (!ass_var || ignored_edges)
+ 		    edges.safe_push (e);
+ 		  abb = e->dest;
+ 		  agsi = gsi_start_bb (abb);
+ 		  goto new_bb;
+ 		}
+ 	    }
+ 	}
+ 
        if (gimple_code (stmt) != GIMPLE_ASSIGN)
  	{
  	  maybe_error_musttail (call, _("unhandled code after call"),
*************** tree_optimize_tail_calls_1 (bool opt_tai
*** 1645,1658 ****
        if (safe_is_a <greturn *> (*gsi_last_bb (e->src)))
  	{
  	  int retry_tsan_func_exit = 0;
! 	  find_tail_calls (e->src, &tailcalls, only_musttail, opt_tailcalls,
! 			   diag_musttail, retry_tsan_func_exit);
  	  if (retry_tsan_func_exit == -1)
  	    {
  	      retry_tsan_func_exit = 1;
! 	      find_tail_calls (e->src, &tailcalls, only_musttail,
  			       opt_tailcalls, diag_musttail,
! 			       retry_tsan_func_exit);
  	    }
  	}
      }
--- 1848,1861 ----
        if (safe_is_a <greturn *> (*gsi_last_bb (e->src)))
  	{
  	  int retry_tsan_func_exit = 0;
! 	  find_tail_calls (e->src, e, &tailcalls, only_musttail, opt_tailcalls,
! 			   diag_musttail, retry_tsan_func_exit, NULL, NULL);
  	  if (retry_tsan_func_exit == -1)
  	    {
  	      retry_tsan_func_exit = 1;
! 	      find_tail_calls (e->src, e, &tailcalls, only_musttail,
  			       opt_tailcalls, diag_musttail,
! 			       retry_tsan_func_exit, NULL, NULL);
  	    }
  	}
      }
*************** tree_optimize_tail_calls_1 (bool opt_tai
*** 1668,1675 ****
  	    if (is_gimple_call (c)
  		&& gimple_call_must_tail_p (as_a <gcall *> (c))
  		&& gimple_call_noreturn_p (as_a <gcall *> (c)))
! 	      find_tail_calls (bb, &tailcalls, only_musttail, opt_tailcalls,
! 			       diag_musttail, retry_tsan_func_exit);
      }
  
    if (live_vars)
--- 1871,1879 ----
  	    if (is_gimple_call (c)
  		&& gimple_call_must_tail_p (as_a <gcall *> (c))
  		&& gimple_call_noreturn_p (as_a <gcall *> (c)))
! 	      find_tail_calls (bb, NULL, &tailcalls, only_musttail,
! 			       opt_tailcalls, diag_musttail,
! 			       retry_tsan_func_exit, NULL, NULL);
      }
  
    if (live_vars)
diff -Nrcpad gcc-16-20250629/gcc/tree-vect-data-refs.cc gcc-16-20250706/gcc/tree-vect-data-refs.cc
*** gcc-16-20250629/gcc/tree-vect-data-refs.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-vect-data-refs.cc	Sun Jul  6 22:33:49 2025
*************** vect_compute_data_ref_alignment (vec_inf
*** 1501,1510 ****
        /* We can only use base and misalignment information relative to
  	 an innermost loop if the misalignment stays the same throughout the
  	 execution of the loop.  As above, this is the case if the stride of
! 	 the dataref evenly divides by the alignment.  */
!       poly_uint64 vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
!       step_preserves_misalignment_p
! 	= multiple_p (drb->step_alignment * vf, vect_align_c);
  
        if (!step_preserves_misalignment_p && dump_enabled_p ())
  	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
--- 1501,1517 ----
        /* We can only use base and misalignment information relative to
  	 an innermost loop if the misalignment stays the same throughout the
  	 execution of the loop.  As above, this is the case if the stride of
! 	 the dataref evenly divides by the alignment.  Make sure to check
! 	 previous epilogues and the main loop.  */
!       step_preserves_misalignment_p = true;
!       auto lvinfo = loop_vinfo;
!       while (lvinfo)
! 	{
! 	  poly_uint64 vf = LOOP_VINFO_VECT_FACTOR (lvinfo);
! 	  step_preserves_misalignment_p
! 	    &= multiple_p (drb->step_alignment * vf, vect_align_c);
! 	  lvinfo = LOOP_VINFO_ORIG_LOOP_INFO (lvinfo);
! 	}
  
        if (!step_preserves_misalignment_p && dump_enabled_p ())
  	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
*************** vect_compute_data_ref_alignment (vec_inf
*** 1571,1576 ****
--- 1578,1584 ----
        unsigned int max_alignment;
        tree base = get_base_for_alignment (drb->base_address, &max_alignment);
        if (max_alignment < vect_align_c
+ 	  || (loop_vinfo && LOOP_VINFO_EPILOGUE_P (loop_vinfo))
  	  || !vect_can_force_dr_alignment_p (base,
  					     vect_align_c * BITS_PER_UNIT))
  	{
diff -Nrcpad gcc-16-20250629/gcc/tree-vect-loop.cc gcc-16-20250706/gcc/tree-vect-loop.cc
*** gcc-16-20250629/gcc/tree-vect-loop.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-vect-loop.cc	Sun Jul  6 22:33:49 2025
*************** vect_analyze_loop (class loop *loop, gim
*** 3792,3797 ****
--- 3792,3798 ----
        /* When we selected a first vectorized epilogue, see if the target
  	 suggests to have another one.  */
        if (!unlimited_cost_model (loop)
+ 	  && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (orig_loop_vinfo)
  	  && (orig_loop_vinfo->vector_costs->suggested_epilogue_mode ()
  	      != VOIDmode))
  	{
diff -Nrcpad gcc-16-20250629/gcc/tree-vect-slp.cc gcc-16-20250706/gcc/tree-vect-slp.cc
*** gcc-16-20250629/gcc/tree-vect-slp.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-vect-slp.cc	Sun Jul  6 22:33:49 2025
*************** out:
*** 2849,2857 ****
  	  && matches[0]
  	  /* ???  For COND_EXPRs we can swap the comparison operands
  	     as well as the arms under some constraints.  */
! 	  && nops == 2
  	  && oprnds_info[1]->first_dt == vect_internal_def
! 	  && is_gimple_assign (stmt_info->stmt)
  	  /* Swapping operands for reductions breaks assumptions later on.  */
  	  && STMT_VINFO_REDUC_IDX (stmt_info) == -1)
  	{
--- 2849,2858 ----
  	  && matches[0]
  	  /* ???  For COND_EXPRs we can swap the comparison operands
  	     as well as the arms under some constraints.  */
! 	  && (nops == 2 || nops == 3)
  	  && oprnds_info[1]->first_dt == vect_internal_def
! 	  && (is_gimple_assign (stmt_info->stmt)
! 	      || is_gimple_call (stmt_info->stmt))
  	  /* Swapping operands for reductions breaks assumptions later on.  */
  	  && STMT_VINFO_REDUC_IDX (stmt_info) == -1)
  	{
*************** out:
*** 2866,2879 ****
  		    continue;
  		  stmt_vec_info stmt_info = stmts[j];
  		  /* Verify if we can swap operands of this stmt.  */
! 		  gassign *stmt = dyn_cast <gassign *> (stmt_info->stmt);
! 		  if (!stmt
! 		      || !commutative_tree_code (gimple_assign_rhs_code (stmt)))
  		    {
! 		      if (!swap_not_matching)
! 			goto fail;
! 		      swap_not_matching = false;
! 		      break;
  		    }
  		}
  	    }
--- 2867,2898 ----
  		    continue;
  		  stmt_vec_info stmt_info = stmts[j];
  		  /* Verify if we can swap operands of this stmt.  */
! 		  if (gassign *stmt = dyn_cast <gassign *> (stmt_info->stmt))
  		    {
! 		      tree_code code = gimple_assign_rhs_code (stmt);
! 		      if (! commutative_tree_code (code)
! 			  && ! commutative_ternary_tree_code (code))
! 			{
! 			  if (!swap_not_matching)
! 			    goto fail;
! 			  swap_not_matching = false;
! 			  break;
! 			}
! 		    }
! 		  else if (gcall *call = dyn_cast <gcall *> (stmt_info->stmt))
! 		    {
! 		      internal_fn fn = (gimple_call_internal_p (call)
! 					? gimple_call_internal_fn (call)
! 					: IFN_LAST);
! 		      if ((! commutative_binary_fn_p (fn)
! 			   && ! commutative_ternary_fn_p (fn))
! 			  || first_commutative_argument (fn) != 0)
! 			{
! 			  if (!swap_not_matching)
! 			    goto fail;
! 			  swap_not_matching = false;
! 			  break;
! 			}
  		    }
  		}
  	    }
diff -Nrcpad gcc-16-20250629/gcc/tree-vect-stmts.cc gcc-16-20250706/gcc/tree-vect-stmts.cc
*** gcc-16-20250629/gcc/tree-vect-stmts.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree-vect-stmts.cc	Sun Jul  6 22:33:49 2025
*************** vectorizable_store (vec_info *vinfo,
*** 9626,9632 ****
  	  data_ref = fold_build2 (MEM_REF, vectype, dataref_ptr,
  				  dataref_offset ? dataref_offset
  				  : build_int_cst (ref_type, 0));
! 	  if (alignment_support_scheme == dr_aligned)
  	    ;
  	  else
  	    TREE_TYPE (data_ref)
--- 9626,9633 ----
  	  data_ref = fold_build2 (MEM_REF, vectype, dataref_ptr,
  				  dataref_offset ? dataref_offset
  				  : build_int_cst (ref_type, 0));
! 	  if (alignment_support_scheme == dr_aligned
! 	      && align >= TYPE_ALIGN_UNIT (vectype))
  	    ;
  	  else
  	    TREE_TYPE (data_ref)
*************** vectorizable_load (vec_info *vinfo,
*** 11659,11665 ****
  		  {
  		    data_ref = fold_build2 (MEM_REF, ltype,
  					    dataref_ptr, offset);
! 		    if (alignment_support_scheme == dr_aligned)
  		      ;
  		    else
  		      TREE_TYPE (data_ref)
--- 11660,11667 ----
  		  {
  		    data_ref = fold_build2 (MEM_REF, ltype,
  					    dataref_ptr, offset);
! 		    if (alignment_support_scheme == dr_aligned
! 			&& align >= TYPE_ALIGN_UNIT (ltype))
  		      ;
  		    else
  		      TREE_TYPE (data_ref)
diff -Nrcpad gcc-16-20250629/gcc/tree.cc gcc-16-20250706/gcc/tree.cc
*** gcc-16-20250629/gcc/tree.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree.cc	Sun Jul  6 22:33:49 2025
*************** decl_address_ip_invariant_p (const_tree
*** 4015,4020 ****
--- 4015,4052 ----
    return false;
  }
  
+ /* Return true if T is an object with invariant address.  */
+ 
+ bool
+ address_invariant_p (tree t)
+ {
+   while (handled_component_p (t))
+     {
+       switch (TREE_CODE (t))
+ 	{
+ 	case ARRAY_REF:
+ 	case ARRAY_RANGE_REF:
+ 	  if (!tree_invariant_p (TREE_OPERAND (t, 1))
+ 	      || TREE_OPERAND (t, 2) != NULL_TREE
+ 	      || TREE_OPERAND (t, 3) != NULL_TREE)
+ 	    return false;
+ 	  break;
+ 
+ 	case COMPONENT_REF:
+ 	  if (TREE_OPERAND (t, 2) != NULL_TREE)
+ 	    return false;
+ 	  break;
+ 
+ 	default:
+ 	  break;
+ 	}
+       t = TREE_OPERAND (t, 0);
+     }
+ 
+   STRIP_ANY_LOCATION_WRAPPER (t);
+   return CONSTANT_CLASS_P (t) || decl_address_invariant_p (t);
+ }
+ 
  
  /* Return true if T is function-invariant (internal function, does
     not handle arithmetic; that's handled in skip_simple_arithmetic and
*************** decl_address_ip_invariant_p (const_tree
*** 4023,4032 ****
  static bool
  tree_invariant_p_1 (tree t)
  {
!   tree op;
! 
!   if (TREE_CONSTANT (t)
!       || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
      return true;
  
    switch (TREE_CODE (t))
--- 4055,4061 ----
  static bool
  tree_invariant_p_1 (tree t)
  {
!   if (TREE_CONSTANT (t) || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
      return true;
  
    switch (TREE_CODE (t))
*************** tree_invariant_p_1 (tree t)
*** 4036,4065 ****
        return true;
  
      case ADDR_EXPR:
!       op = TREE_OPERAND (t, 0);
!       while (handled_component_p (op))
! 	{
! 	  switch (TREE_CODE (op))
! 	    {
! 	    case ARRAY_REF:
! 	    case ARRAY_RANGE_REF:
! 	      if (!tree_invariant_p (TREE_OPERAND (op, 1))
! 		  || TREE_OPERAND (op, 2) != NULL_TREE
! 		  || TREE_OPERAND (op, 3) != NULL_TREE)
! 		return false;
! 	      break;
! 
! 	    case COMPONENT_REF:
! 	      if (TREE_OPERAND (op, 2) != NULL_TREE)
! 		return false;
! 	      break;
! 
! 	    default:;
! 	    }
! 	  op = TREE_OPERAND (op, 0);
! 	}
! 
!       return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
  
      default:
        break;
--- 4065,4071 ----
        return true;
  
      case ADDR_EXPR:
!       return address_invariant_p (TREE_OPERAND (t, 0));
  
      default:
        break;
diff -Nrcpad gcc-16-20250629/gcc/tree.h gcc-16-20250706/gcc/tree.h
*** gcc-16-20250629/gcc/tree.h	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/tree.h	Sun Jul  6 22:33:49 2025
*************** extern tree staticp (tree);
*** 5347,5352 ****
--- 5347,5356 ----
  
  extern tree save_expr (tree);
  
+ /* Return true if T is an object with invariant address.  */
+ 
+ extern bool address_invariant_p (tree);
+ 
  /* Return true if T is function-invariant.  */
  
  extern bool tree_invariant_p (tree);
diff -Nrcpad gcc-16-20250629/gcc/ubsan.cc gcc-16-20250706/gcc/ubsan.cc
*** gcc-16-20250629/gcc/ubsan.cc	Sun Jun 29 22:34:01 2025
--- gcc-16-20250706/gcc/ubsan.cc	Sun Jul  6 22:33:49 2025
*************** instrument_nonnull_arg (gimple_stmt_iter
*** 2038,2046 ****
    for (unsigned int i = 0; i < gimple_call_num_args (stmt); i++)
      {
        tree arg = gimple_call_arg (stmt, i);
!       tree arg2;
        if (POINTER_TYPE_P (TREE_TYPE (arg))
! 	  && infer_nonnull_range_by_attribute (stmt, arg, &arg2))
  	{
  	  gimple *g;
  	  if (!is_gimple_val (arg))
--- 2038,2046 ----
    for (unsigned int i = 0; i < gimple_call_num_args (stmt); i++)
      {
        tree arg = gimple_call_arg (stmt, i);
!       tree arg2, arg3;
        if (POINTER_TYPE_P (TREE_TYPE (arg))
! 	  && infer_nonnull_range_by_attribute (stmt, arg, &arg2, &arg3))
  	{
  	  gimple *g;
  	  if (!is_gimple_val (arg))
*************** instrument_nonnull_arg (gimple_stmt_iter
*** 2050,2055 ****
--- 2050,2057 ----
  	      gsi_safe_insert_before (gsi, g);
  	      arg = gimple_assign_lhs (g);
  	    }
+ 	  if (arg2 == arg3)
+ 	    arg3 = NULL_TREE;
  	  if (arg2 && !is_gimple_val (arg2))
  	    {
  	      g = gimple_build_assign (make_ssa_name (TREE_TYPE (arg2)), arg2);
*************** instrument_nonnull_arg (gimple_stmt_iter
*** 2057,2062 ****
--- 2059,2071 ----
  	      gsi_safe_insert_before (gsi, g);
  	      arg2 = gimple_assign_lhs (g);
  	    }
+ 	  if (arg3 && !is_gimple_val (arg3))
+ 	    {
+ 	      g = gimple_build_assign (make_ssa_name (TREE_TYPE (arg3)), arg3);
+ 	      gimple_set_location (g, loc[0]);
+ 	      gsi_safe_insert_before (gsi, g);
+ 	      arg3 = gimple_assign_lhs (g);
+ 	    }
  
  	  basic_block then_bb, fallthru_bb;
  	  *gsi = create_cond_insert_point (gsi, true, false, true,
*************** instrument_nonnull_arg (gimple_stmt_iter
*** 2077,2082 ****
--- 2086,2103 ----
  				     NULL_TREE, NULL_TREE);
  	      gimple_set_location (g, loc[0]);
  	      gsi_insert_after (gsi, g, GSI_NEW_STMT);
+ 
+ 	      *gsi = gsi_after_labels (then_bb);
+ 	    }
+ 	  if (arg3)
+ 	    {
+ 	      *gsi = create_cond_insert_point (gsi, true, false, true,
+ 					       &then_bb, &fallthru_bb);
+ 	      g = gimple_build_cond (NE_EXPR, arg3,
+ 				     build_zero_cst (TREE_TYPE (arg3)),
+ 				     NULL_TREE, NULL_TREE);
+ 	      gimple_set_location (g, loc[0]);
+ 	      gsi_insert_after (gsi, g, GSI_NEW_STMT);
  
  	      *gsi = gsi_after_labels (then_bb);
  	    }
diff -Nrcpad gcc-16-20250629/libgm2/ChangeLog gcc-16-20250706/libgm2/ChangeLog
*** gcc-16-20250629/libgm2/ChangeLog	Sun Jun 29 22:34:02 2025
--- gcc-16-20250706/libgm2/ChangeLog	Sun Jul  6 22:33:54 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-06-29  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/117203
+ 	* libm2iso/Makefile.am (M2DEFS): Add IOChanUtils.def.
+ 	(M2MODS): Add IOChanUtils.mod.
+ 	* libm2iso/Makefile.in: Regenerate.
+ 
  2025-06-07  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/119650
diff -Nrcpad gcc-16-20250629/libgm2/libm2iso/Makefile.am gcc-16-20250706/libgm2/libm2iso/Makefile.am
*** gcc-16-20250629/libgm2/libm2iso/Makefile.am	Sun Jun 29 22:34:02 2025
--- gcc-16-20250706/libgm2/libm2iso/Makefile.am	Sun Jul  6 22:33:54 2025
*************** M2DEFS = ChanConsts.def  CharClass.def \
*** 104,109 ****
--- 104,110 ----
           ConvTypes.def  COROUTINES.def \
           ErrnoCategory.def  EXCEPTIONS.def \
           GeneralUserExceptions.def  IOChan.def \
+          IOChanUtils.def \
           IOConsts.def  IOLink.def \
           IOResult.def  LongComplexMath.def \
           LongConv.def  LongIO.def \
*************** M2MODS = ChanConsts.mod  CharClass.mod \
*** 149,155 ****
           ConvStringShort.mod \
           ConvTypes.mod  COROUTINES.mod \
           EXCEPTIONS.mod  GeneralUserExceptions.mod \
!          IOChan.mod  IOConsts.mod \
           IOLink.mod  IOResult.mod \
           LongComplexMath.mod  LongConv.mod \
           LongIO.mod  LongMath.mod \
--- 150,157 ----
           ConvStringShort.mod \
           ConvTypes.mod  COROUTINES.mod \
           EXCEPTIONS.mod  GeneralUserExceptions.mod \
!          IOChan.mod  IOChanUtils.mod \
!          IOConsts.mod \
           IOLink.mod  IOResult.mod \
           LongComplexMath.mod  LongConv.mod \
           LongIO.mod  LongMath.mod \
diff -Nrcpad gcc-16-20250629/libgm2/libm2iso/Makefile.in gcc-16-20250706/libgm2/libm2iso/Makefile.in
*** gcc-16-20250629/libgm2/libm2iso/Makefile.in	Sun Jun 29 22:34:02 2025
--- gcc-16-20250706/libgm2/libm2iso/Makefile.in	Sun Jul  6 22:33:54 2025
*************** libm2iso_la_LIBADD =
*** 163,178 ****
  @BUILD_ISOLIB_TRUE@	ConvStringShort.lo ConvTypes.lo \
  @BUILD_ISOLIB_TRUE@	COROUTINES.lo EXCEPTIONS.lo \
  @BUILD_ISOLIB_TRUE@	GeneralUserExceptions.lo IOChan.lo \
! @BUILD_ISOLIB_TRUE@	IOConsts.lo IOLink.lo IOResult.lo \
! @BUILD_ISOLIB_TRUE@	LongComplexMath.lo LongConv.lo LongIO.lo \
! @BUILD_ISOLIB_TRUE@	LongMath.lo LongStr.lo LongWholeIO.lo \
! @BUILD_ISOLIB_TRUE@	LowLong.lo LowReal.lo LowShort.lo \
! @BUILD_ISOLIB_TRUE@	M2EXCEPTION.lo M2RTS.lo MemStream.lo \
! @BUILD_ISOLIB_TRUE@	Preemptive.lo Processes.lo ProgramArgs.lo \
! @BUILD_ISOLIB_TRUE@	RandomNumber.lo RawIO.lo RealConv.lo \
! @BUILD_ISOLIB_TRUE@	RealIO.lo RealMath.lo RealStr.lo RndFile.lo \
! @BUILD_ISOLIB_TRUE@	RTdata.lo RTentity.lo RTfio.lo RTgenif.lo \
! @BUILD_ISOLIB_TRUE@	RTgen.lo RTio.lo Semaphores.lo SeqFile.lo \
  @BUILD_ISOLIB_TRUE@	ShortComplexMath.lo ShortConv.lo ShortIO.lo \
  @BUILD_ISOLIB_TRUE@	ShortMath.lo ShortStr.lo ShortWholeIO.lo \
  @BUILD_ISOLIB_TRUE@	SimpleCipher.lo SIOResult.lo SLongIO.lo \
--- 163,179 ----
  @BUILD_ISOLIB_TRUE@	ConvStringShort.lo ConvTypes.lo \
  @BUILD_ISOLIB_TRUE@	COROUTINES.lo EXCEPTIONS.lo \
  @BUILD_ISOLIB_TRUE@	GeneralUserExceptions.lo IOChan.lo \
! @BUILD_ISOLIB_TRUE@	IOChanUtils.lo IOConsts.lo IOLink.lo \
! @BUILD_ISOLIB_TRUE@	IOResult.lo LongComplexMath.lo LongConv.lo \
! @BUILD_ISOLIB_TRUE@	LongIO.lo LongMath.lo LongStr.lo \
! @BUILD_ISOLIB_TRUE@	LongWholeIO.lo LowLong.lo LowReal.lo \
! @BUILD_ISOLIB_TRUE@	LowShort.lo M2EXCEPTION.lo M2RTS.lo \
! @BUILD_ISOLIB_TRUE@	MemStream.lo Preemptive.lo Processes.lo \
! @BUILD_ISOLIB_TRUE@	ProgramArgs.lo RandomNumber.lo RawIO.lo \
! @BUILD_ISOLIB_TRUE@	RealConv.lo RealIO.lo RealMath.lo \
! @BUILD_ISOLIB_TRUE@	RealStr.lo RndFile.lo RTdata.lo RTentity.lo \
! @BUILD_ISOLIB_TRUE@	RTfio.lo RTgenif.lo RTgen.lo RTio.lo \
! @BUILD_ISOLIB_TRUE@	Semaphores.lo SeqFile.lo \
  @BUILD_ISOLIB_TRUE@	ShortComplexMath.lo ShortConv.lo ShortIO.lo \
  @BUILD_ISOLIB_TRUE@	ShortMath.lo ShortStr.lo ShortWholeIO.lo \
  @BUILD_ISOLIB_TRUE@	SimpleCipher.lo SIOResult.lo SLongIO.lo \
*************** FLAGS_TO_PASS = $(AM_MAKEFLAGS)
*** 492,497 ****
--- 493,499 ----
  @BUILD_ISOLIB_TRUE@         ConvTypes.def  COROUTINES.def \
  @BUILD_ISOLIB_TRUE@         ErrnoCategory.def  EXCEPTIONS.def \
  @BUILD_ISOLIB_TRUE@         GeneralUserExceptions.def  IOChan.def \
+ @BUILD_ISOLIB_TRUE@         IOChanUtils.def \
  @BUILD_ISOLIB_TRUE@         IOConsts.def  IOLink.def \
  @BUILD_ISOLIB_TRUE@         IOResult.def  LongComplexMath.def \
  @BUILD_ISOLIB_TRUE@         LongConv.def  LongIO.def \
*************** FLAGS_TO_PASS = $(AM_MAKEFLAGS)
*** 537,543 ****
  @BUILD_ISOLIB_TRUE@         ConvStringShort.mod \
  @BUILD_ISOLIB_TRUE@         ConvTypes.mod  COROUTINES.mod \
  @BUILD_ISOLIB_TRUE@         EXCEPTIONS.mod  GeneralUserExceptions.mod \
! @BUILD_ISOLIB_TRUE@         IOChan.mod  IOConsts.mod \
  @BUILD_ISOLIB_TRUE@         IOLink.mod  IOResult.mod \
  @BUILD_ISOLIB_TRUE@         LongComplexMath.mod  LongConv.mod \
  @BUILD_ISOLIB_TRUE@         LongIO.mod  LongMath.mod \
--- 539,546 ----
  @BUILD_ISOLIB_TRUE@         ConvStringShort.mod \
  @BUILD_ISOLIB_TRUE@         ConvTypes.mod  COROUTINES.mod \
  @BUILD_ISOLIB_TRUE@         EXCEPTIONS.mod  GeneralUserExceptions.mod \
! @BUILD_ISOLIB_TRUE@         IOChan.mod  IOChanUtils.mod \
! @BUILD_ISOLIB_TRUE@         IOConsts.mod \
  @BUILD_ISOLIB_TRUE@         IOLink.mod  IOResult.mod \
  @BUILD_ISOLIB_TRUE@         LongComplexMath.mod  LongConv.mod \
  @BUILD_ISOLIB_TRUE@         LongIO.mod  LongMath.mod \
diff -Nrcpad gcc-16-20250629/libphobos/ChangeLog gcc-16-20250706/libphobos/ChangeLog
*** gcc-16-20250629/libphobos/ChangeLog	Sun Jun 29 22:34:09 2025
--- gcc-16-20250706/libphobos/ChangeLog	Sun Jul  6 22:33:58 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.tgt <i?86-*-darwin1[2-7]>: Also consider minor
+ 	versions supported.
+ 
  2025-05-09  David Malcolm  <dmalcolm@redhat.com>
  
  	PR other/116792
diff -Nrcpad gcc-16-20250629/libphobos/configure.tgt gcc-16-20250706/libphobos/configure.tgt
*** gcc-16-20250629/libphobos/configure.tgt	Sun Jun 29 22:34:09 2025
--- gcc-16-20250706/libphobos/configure.tgt	Sun Jul  6 22:33:58 2025
*************** case "${target}" in
*** 64,70 ****
    *-*-darwin9* | *-*-darwin1[01]*)
  	LIBDRUNTIME_ONLY=yes
  	;;
!   x86_64-*-darwin1[2-9]* | x86_64-*-darwin2* | i?86-*-darwin1[2-7])
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    x86_64-*-freebsd* | i?86-*-freebsd*)
--- 64,70 ----
    *-*-darwin9* | *-*-darwin1[01]*)
  	LIBDRUNTIME_ONLY=yes
  	;;
!   x86_64-*-darwin1[2-9]* | x86_64-*-darwin2* | i?86-*-darwin1[2-7]*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    x86_64-*-freebsd* | i?86-*-freebsd*)
diff -Nrcpad gcc-16-20250629/libstdc++-v3/ChangeLog gcc-16-20250706/libstdc++-v3/ChangeLog
*** gcc-16-20250629/libstdc++-v3/ChangeLog	Sun Jun 29 22:34:10 2025
--- gcc-16-20250706/libstdc++-v3/ChangeLog	Sun Jul  6 22:33:58 2025
***************
*** 1,3 ****
--- 1,84 ----
+ 2025-07-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/chrono_io.h (__formatter_duration::_S_spec_for):
+ 	Add default case to switch and use __builtin_unreachable.
+ 
+ 2025-07-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_algobase.h (__size_to_integer): Move
+ 	misplaced unsigned keyword on __size_to_integer overloads for
+ 	__GLIBCXX_TYPE_INT_N_3 integer type.
+ 
+ 2025-07-03  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	* include/bits/version.def: Fix typo.
+ 	* include/bits/version.h: Rebuilt.
+ 
+ 2025-07-03  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/120934
+ 	* include/std/ranges (concat_view::end): Refine condition
+ 	for returning an iterator instead of default_sentinel as
+ 	per the updated P/R for LWG 4166.
+ 	* testsuite/std/ranges/concat/1.cc (test05): New test.
+ 
+ 2025-07-03  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	PR libstdc++/119742
+ 	* include/bits/version.def: Add preprocessor symbol.
+ 	* include/bits/version.h: Add preprocessor symbol.
+ 	* include/std/bitset: Add constructor.
+ 	* testsuite/20_util/bitset/cons/1.cc: Fix.
+ 	* testsuite/20_util/bitset/cons/6282.cc: Fix.
+ 	* testsuite/20_util/bitset/cons/string_view.cc: Test new ctor.
+ 	* testsuite/20_util/bitset/cons/string_view_wide.cc: Test new ctor.
+ 
+ 2025-07-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120931
+ 	* include/bits/stl_uninitialized.h (__uninitialized_fill<true>):
+ 	Fix typo resulting in call to __do_uninit_copy instead of
+ 	__do_uninit_fill.
+ 	* testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc:
+ 	New test.
+ 
+ 2025-07-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_iterator.h (__normal_iterator): Make all
+ 	non-member operators hidden friends, except ...
+ 	(operator<=>(__normal_iterator<I,C>, __normal_iterator<I,C>)):
+ 	Remove.
+ 	* src/c++11/string-inst.cc: Remove explicit instantiations of
+ 	operators that are no longer templates.
+ 	* src/c++23/std.cc.in (__gnu_cxx): Do not export operators for
+ 	__normal_iterator.
+ 
+ 2025-07-02  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	PR libstdc++/119744
+ 	* include/std/ranges: View ctors become explicit.
+ 
+ 2025-07-01  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/120789
+ 	* include/bits/ranges_algo.h (__remove_if_fn::operator()): Use
+ 	ranges::iter_move(iter) instead of std::move(*iter).
+ 	* testsuite/25_algorithms/remove_if/120789.cc: New test.
+ 
+ 2025-07-01  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/120789
+ 	* include/bits/ranges_algo.h (__unique_fn::operator()): Use
+ 	ranges::iter_move(iter) instead of std::move(*iter).
+ 	* testsuite/25_algorithms/unique/120789.cc: New test.
+ 
+ 2025-07-01  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (default_accessor): New class.
+ 	* src/c++23/std.cc.in: Register default_accessor.
+ 	* testsuite/23_containers/mdspan/accessors/default.cc: New test.
+ 	* testsuite/23_containers/mdspan/accessors/default_neg.cc: New test.
+ 
  2025-06-27  Patrick Palka  <ppalka@redhat.com>
  
  	PR libstdc++/100795
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/bits/chrono_io.h gcc-16-20250706/libstdc++-v3/include/bits/chrono_io.h
*** gcc-16-20250629/libstdc++-v3/include/bits/chrono_io.h	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/bits/chrono_io.h	Sun Jul  6 22:33:59 2025
*************** namespace __format
*** 1841,1846 ****
--- 1841,1848 ----
  	      break;
  	    case _None:
  	      break;
+ 	    default:
+ 	      __builtin_unreachable();
  	    }
  	  return __res;
  	};
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/bits/ranges_algo.h gcc-16-20250706/libstdc++-v3/include/bits/ranges_algo.h
*** gcc-16-20250629/libstdc++-v3/include/bits/ranges_algo.h	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/bits/ranges_algo.h	Sun Jul  6 22:33:59 2025
*************** namespace ranges
*** 1294,1300 ****
  	for (; __first != __last; ++__first)
  	  if (!std::__invoke(__pred, std::__invoke(__proj, *__first)))
  	    {
! 	      *__result = std::move(*__first);
  	      ++__result;
  	    }
  
--- 1294,1300 ----
  	for (; __first != __last; ++__first)
  	  if (!std::__invoke(__pred, std::__invoke(__proj, *__first)))
  	    {
! 	      *__result = ranges::iter_move(__first);
  	      ++__result;
  	    }
  
*************** namespace ranges
*** 1454,1460 ****
  	  if (!std::__invoke(__comp,
  			     std::__invoke(__proj, *__dest),
  			     std::__invoke(__proj, *__first)))
! 	    *++__dest = std::move(*__first);
  	return {++__dest, __first};
        }
  
--- 1454,1460 ----
  	  if (!std::__invoke(__comp,
  			     std::__invoke(__proj, *__dest),
  			     std::__invoke(__proj, *__first)))
! 	    *++__dest = ranges::iter_move(__first);
  	return {++__dest, __first};
        }
  
*************** namespace ranges
*** 5218,5223 ****
--- 5218,5224 ----
  #endif // __glibcxx_ranges_fold
  } // namespace ranges
  
+ #if __glibcxx_shift >= 201806L // C++ >= 20
    template<typename _ForwardIterator>
      constexpr _ForwardIterator
      shift_left(_ForwardIterator __first, _ForwardIterator __last,
*************** namespace ranges
*** 5308,5313 ****
--- 5309,5428 ----
  	    }
  	}
      }
+ #endif
+ 
+ namespace ranges
+ {
+ #if __glibcxx_shift >= 202202L // C++ >= 23
+   struct __shift_left_fn
+   {
+     template<permutable _Iter, sentinel_for<_Iter> _Sent>
+       constexpr subrange<_Iter>
+       operator()(_Iter __first, _Sent __last, iter_difference_t<_Iter> __n) const
+       {
+ 	__glibcxx_assert(__n >= 0);
+ 	if (__n == 0)
+ 	  return {__first, ranges::next(__first, __last)};
+ 
+ 	auto __mid = ranges::next(__first, __n, __last);
+ 	if (__mid == __last)
+ 	  return {__first, __first};
+ 	return {__first, ranges::move(__mid, __last, __first).out};
+       }
+ 
+     template<forward_range _Range>
+       requires permutable<iterator_t<_Range>>
+       constexpr borrowed_subrange_t<_Range>
+       operator()(_Range&& __r, range_difference_t<_Range> __n) const
+       { return (*this)(ranges::begin(__r), ranges::end(__r), __n); }
+   };
+ 
+   inline constexpr __shift_left_fn shift_left{};
+ 
+   struct __shift_right_fn
+   {
+     template<permutable _Iter, sentinel_for<_Iter> _Sent>
+       constexpr subrange<_Iter>
+       operator()(_Iter __first, _Sent __last, iter_difference_t<_Iter> __n) const
+       {
+ 	__glibcxx_assert(__n >= 0);
+ 	if (__n == 0)
+ 	  return {__first, ranges::next(__first, __last)};
+ 
+ 	if constexpr (bidirectional_iterator<_Iter> && same_as<_Iter, _Sent>)
+ 	  {
+ 	    auto __mid = ranges::next(__last, -__n, __first);
+ 	    if (__mid == __first)
+ 	      return {__last, __last};
+ 
+ 	    return {ranges::move_backward(__first, __mid, __last).out, __last};
+ 	  }
+ 	else
+ 	  {
+ 	    auto __result = ranges::next(__first, __n, __last);
+ 	    if (__result == __last)
+ 	      return {__result, __result};
+ 
+ 	    auto __dest_head = __first, __dest_tail = __result;
+ 	    while (__dest_head != __result)
+ 	      {
+ 		if (__dest_tail == __last)
+ 		  {
+ 		    // If we get here, then we must have
+ 		    //     2*n >= distance(__first, __last)
+ 		    // i.e. we are shifting out at least half of the range.  In
+ 		    // this case we can safely perform the shift with a single
+ 		    // move.
+ 		    auto __lasti = ranges::move(__first, __dest_head, __result).out;
+ 		    // __glibcxx_assert(__lasti == __last);
+ 		    return {__result, __lasti};
+ 		  }
+ 		++__dest_head;
+ 		++__dest_tail;
+ 	      }
+ 
+ 	    for (;;)
+ 	      {
+ 		// At the start of each iteration of this outer loop, the range
+ 		// [__first, __result) contains those elements that after shifting
+ 		// the whole range right by __n, should end up in
+ 		// [__dest_head, __dest_tail) in order.
+ 
+ 		// The below inner loop swaps the elements of [__first, __result)
+ 		// and [__dest_head, __dest_tail), while simultaneously shifting
+ 		// the latter range by __n.
+ 		auto __cursor = __first;
+ 		while (__cursor != __result)
+ 		  {
+ 		    if (__dest_tail == __last)
+ 		      {
+ 			// At this point the ranges [__first, result) and
+ 			// [__dest_head, dest_tail) are disjoint, so we can safely
+ 			// move the remaining elements.
+ 			__dest_head = ranges::move(__cursor, __result, __dest_head).out;
+ 			auto __lasti = ranges::move(__first, __cursor, __dest_head).out;
+ 			// __glibcxx_assert(__lasti == __last);
+ 			return {__result, __lasti};
+ 		      }
+ 		    ranges::iter_swap(__cursor, __dest_head);
+ 		    ++__dest_head;
+ 		    ++__dest_tail;
+ 		    ++__cursor;
+ 		  }
+ 	      }
+ 	  }
+       }
+ 
+     template<forward_range _Range>
+       requires permutable<iterator_t<_Range>>
+       constexpr borrowed_subrange_t<_Range>
+       operator()(_Range&& __r, range_difference_t<_Range> __n) const
+       { return (*this)(ranges::begin(__r), ranges::end(__r), __n); }
+   };
+ 
+   inline constexpr __shift_right_fn shift_right{};
+ #endif // C++23
+ } // namespace ranges
  
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace std
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/bits/stl_algobase.h gcc-16-20250706/libstdc++-v3/include/bits/stl_algobase.h
*** gcc-16-20250629/libstdc++-v3/include/bits/stl_algobase.h	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/bits/stl_algobase.h	Sun Jul  6 22:33:59 2025
*************** _GLIBCXX_END_NAMESPACE_CONTAINER
*** 1046,1054 ****
    __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_2 __n) { return __n; }
  #endif
  #if defined(__GLIBCXX_TYPE_INT_N_3)
-   __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_3
-   __size_to_integer(__GLIBCXX_TYPE_INT_N_3 __n) { return __n; }
    __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3
    __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_3 __n) { return __n; }
  #endif
  
--- 1046,1054 ----
    __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_2 __n) { return __n; }
  #endif
  #if defined(__GLIBCXX_TYPE_INT_N_3)
    __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3
+   __size_to_integer(__GLIBCXX_TYPE_INT_N_3 __n) { return __n; }
+   __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_3
    __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_3 __n) { return __n; }
  #endif
  
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/bits/stl_iterator.h gcc-16-20250706/libstdc++-v3/include/bits/stl_iterator.h
*** gcc-16-20250629/libstdc++-v3/include/bits/stl_iterator.h	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/bits/stl_iterator.h	Sun Jul  6 22:33:59 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1164,1351 ****
        const _Iterator&
        base() const _GLIBCXX_NOEXCEPT
        { return _M_current; }
-     };
  
!   // Note: In what follows, the left- and right-hand-side iterators are
!   // allowed to vary in types (conceptually in cv-qualification) so that
!   // comparison between cv-qualified and non-cv-qualified iterators be
!   // valid.  However, the greedy and unfriendly operators in std::rel_ops
!   // will make overload resolution ambiguous (when in scope) if we don't
!   // provide overloads whose operands are of the same type.  Can someone
!   // remind me what generic programming is about? -- Gaby
  
  #ifdef __cpp_lib_three_way_comparison
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     [[nodiscard, __gnu__::__always_inline__]]
!     constexpr bool
!     operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	       const __normal_iterator<_IteratorR, _Container>& __rhs)
!     noexcept(noexcept(__lhs.base() == __rhs.base()))
!     requires requires {
!       { __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
!     }
!     { return __lhs.base() == __rhs.base(); }
! 
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     [[nodiscard, __gnu__::__always_inline__]]
!     constexpr std::__detail::__synth3way_t<_IteratorR, _IteratorL>
!     operator<=>(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 		const __normal_iterator<_IteratorR, _Container>& __rhs)
!     noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
!     { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
  
!   template<typename _Iterator, typename _Container>
!     [[nodiscard, __gnu__::__always_inline__]]
!     constexpr bool
!     operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	       const __normal_iterator<_Iterator, _Container>& __rhs)
!     noexcept(noexcept(__lhs.base() == __rhs.base()))
!     requires requires {
!       { __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
!     }
!     { return __lhs.base() == __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     [[nodiscard, __gnu__::__always_inline__]]
!     constexpr std::__detail::__synth3way_t<_Iterator>
!     operator<=>(const __normal_iterator<_Iterator, _Container>& __lhs,
! 		const __normal_iterator<_Iterator, _Container>& __rhs)
!     noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
!     { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
  #else
!    // Forward iterator requirements
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	       const __normal_iterator<_IteratorR, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() == __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	       const __normal_iterator<_Iterator, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() == __rhs.base(); }
  
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	       const __normal_iterator<_IteratorR, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() != __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	       const __normal_iterator<_Iterator, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() != __rhs.base(); }
  
!   // Random access iterator requirements
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	      const __normal_iterator<_IteratorR, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() < __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR
!     inline bool
!     operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	      const __normal_iterator<_Iterator, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() < __rhs.base(); }
  
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	      const __normal_iterator<_IteratorR, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() > __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	      const __normal_iterator<_Iterator, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() > __rhs.base(); }
  
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	       const __normal_iterator<_IteratorR, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() <= __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	       const __normal_iterator<_Iterator, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() <= __rhs.base(); }
  
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	       const __normal_iterator<_IteratorR, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() >= __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline bool
!     operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	       const __normal_iterator<_Iterator, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() >= __rhs.base(); }
  #endif // three-way comparison
  
!   // _GLIBCXX_RESOLVE_LIB_DEFECTS
!   // According to the resolution of DR179 not only the various comparison
!   // operators but also operator- must accept mixed iterator/const_iterator
!   // parameters.
!   template<typename _IteratorL, typename _IteratorR, typename _Container>
  #if __cplusplus >= 201103L
!     // DR 685.
!     [[__nodiscard__, __gnu__::__always_inline__]]
!     constexpr auto
!     operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	      const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
!     -> decltype(__lhs.base() - __rhs.base())
  #else
!     inline typename __normal_iterator<_IteratorL, _Container>::difference_type
!     operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
! 	      const __normal_iterator<_IteratorR, _Container>& __rhs)
  #endif
!     { return __lhs.base() - __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline typename __normal_iterator<_Iterator, _Container>::difference_type
!     operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
! 	      const __normal_iterator<_Iterator, _Container>& __rhs)
!     _GLIBCXX_NOEXCEPT
!     { return __lhs.base() - __rhs.base(); }
  
!   template<typename _Iterator, typename _Container>
!     _GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
!     inline __normal_iterator<_Iterator, _Container>
!     operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
! 	      __n, const __normal_iterator<_Iterator, _Container>& __i)
!     _GLIBCXX_NOEXCEPT
!     { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
  
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace __gnu_cxx
--- 1164,1362 ----
        const _Iterator&
        base() const _GLIBCXX_NOEXCEPT
        { return _M_current; }
  
!     private:
!       // Note: In what follows, the left- and right-hand-side iterators are
!       // allowed to vary in types (conceptually in cv-qualification) so that
!       // comparison between cv-qualified and non-cv-qualified iterators be
!       // valid.  However, the greedy and unfriendly operators in std::rel_ops
!       // will make overload resolution ambiguous (when in scope) if we don't
!       // provide overloads whose operands are of the same type.  Can someone
!       // remind me what generic programming is about? -- Gaby
  
  #ifdef __cpp_lib_three_way_comparison
!       template<typename _Iter>
! 	[[nodiscard, __gnu__::__always_inline__]]
! 	friend
! 	constexpr bool
! 	operator==(const __normal_iterator& __lhs,
! 		   const __normal_iterator<_Iter, _Container>& __rhs)
! 	noexcept(noexcept(__lhs.base() == __rhs.base()))
! 	requires requires {
! 	  { __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
! 	}
! 	{ return __lhs.base() == __rhs.base(); }
  
!       [[nodiscard, __gnu__::__always_inline__]]
!       friend
!       constexpr bool
!       operator==(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
!       noexcept(noexcept(__lhs.base() == __rhs.base()))
!       requires requires {
! 	{ __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
!       }
!       { return __lhs.base() == __rhs.base(); }
  
!       template<typename _Iter>
! 	[[nodiscard, __gnu__::__always_inline__]]
! 	friend
! 	constexpr std::__detail::__synth3way_t<_Iterator, _Iter>
! 	operator<=>(const __normal_iterator& __lhs,
! 		    const __normal_iterator<_Iter, _Container>& __rhs)
! 	noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
! 	requires requires {
! 	  std::__detail::__synth3way(__lhs.base(), __rhs.base());
! 	}
! 	{ return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
  #else
!        // Forward iterator requirements
!       template<typename _Iter>
! 	__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
! 	friend
! 	_GLIBCXX_CONSTEXPR
! 	bool
! 	operator==(const __normal_iterator& __lhs,
! 		   const __normal_iterator<_Iter, _Container>& __rhs)
! 	_GLIBCXX_NOEXCEPT
! 	{ return __lhs.base() == __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX_CONSTEXPR
!       bool
!       operator==(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
!       _GLIBCXX_NOEXCEPT
!       { return __lhs.base() == __rhs.base(); }
  
!       template<typename _Iter>
! 	__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
! 	friend
! 	_GLIBCXX_CONSTEXPR
! 	bool
! 	operator!=(const __normal_iterator& __lhs,
! 		   const __normal_iterator<_Iter, _Container>& __rhs)
! 	_GLIBCXX_NOEXCEPT
! 	{ return __lhs.base() != __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX_CONSTEXPR
!       bool
!       operator!=(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
!       _GLIBCXX_NOEXCEPT
!       { return __lhs.base() != __rhs.base(); }
  
!       // Random access iterator requirements
!       template<typename _Iter>
! 	friend
! 	__attribute__((__always_inline__)) _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
! 	inline bool
! 	operator<(const __normal_iterator& __lhs,
! 		  const __normal_iterator<_Iter, _Container>& __rhs)
! 	_GLIBCXX_NOEXCEPT
! 	{ return __lhs.base() < __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX20_CONSTEXPR
!       bool
!       operator<(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
!       _GLIBCXX_NOEXCEPT
!       { return __lhs.base() < __rhs.base(); }
  
!       template<typename _Iter>
! 	friend
! 	__attribute__((__always_inline__)) _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
! 	bool
! 	operator>(const __normal_iterator& __lhs,
! 		  const __normal_iterator<_Iter, _Container>& __rhs)
! 	_GLIBCXX_NOEXCEPT
! 	{ return __lhs.base() > __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX_CONSTEXPR
!       bool
!       operator>(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
!       _GLIBCXX_NOEXCEPT
!       { return __lhs.base() > __rhs.base(); }
  
!       template<typename _Iter>
! 	__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
! 	friend
! 	_GLIBCXX_CONSTEXPR
! 	bool
! 	operator<=(const __normal_iterator& __lhs,
! 		   const __normal_iterator<_Iter, _Container>& __rhs)
! 	_GLIBCXX_NOEXCEPT
! 	{ return __lhs.base() <= __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX_CONSTEXPR
!       bool
!       operator<=(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
!       _GLIBCXX_NOEXCEPT
!       { return __lhs.base() <= __rhs.base(); }
  
!       template<typename _Iter>
! 	__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
! 	friend
! 	_GLIBCXX_CONSTEXPR
! 	bool
! 	operator>=(const __normal_iterator& __lhs,
! 		   const __normal_iterator<_Iter, _Container>& __rhs)
! 	_GLIBCXX_NOEXCEPT
! 	{ return __lhs.base() >= __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX_CONSTEXPR
!       bool
!       operator>=(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
!       _GLIBCXX_NOEXCEPT
!       { return __lhs.base() >= __rhs.base(); }
  #endif // three-way comparison
  
!       // _GLIBCXX_RESOLVE_LIB_DEFECTS
!       // 179. Comparison of const_iterators to iterators doesn't work
!       // According to the resolution of DR179 not only the various comparison
!       // operators but also operator- must accept mixed iterator/const_iterator
!       // parameters.
!       template<typename _Iter>
  #if __cplusplus >= 201103L
! 	[[__nodiscard__, __gnu__::__always_inline__]]
! 	friend
! 	// _GLIBCXX_RESOLVE_LIB_DEFECTS
! 	// 685. reverse_iterator/move_iterator difference has invalid signatures
! 	constexpr auto
! 	operator-(const __normal_iterator& __lhs,
! 		  const __normal_iterator<_Iter, _Container>& __rhs) noexcept
! 	-> decltype(__lhs.base() - __rhs.base())
  #else
! 	friend
! 	difference_type
! 	operator-(const __normal_iterator& __lhs,
! 		  const __normal_iterator<_Iter, _Container>& __rhs)
  #endif
! 	{ return __lhs.base() - __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX_CONSTEXPR
!       difference_type
!       operator-(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
! 	_GLIBCXX_NOEXCEPT
!       { return __lhs.base() - __rhs.base(); }
  
!       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
!       friend
!       _GLIBCXX_CONSTEXPR
!       __normal_iterator
!       operator+(difference_type __n, const __normal_iterator& __i)
! 	_GLIBCXX_NOEXCEPT
!       { return __normal_iterator(__i.base() + __n); }
!     };
  
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace __gnu_cxx
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/bits/stl_uninitialized.h gcc-16-20250706/libstdc++-v3/include/bits/stl_uninitialized.h
*** gcc-16-20250629/libstdc++-v3/include/bits/stl_uninitialized.h	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/bits/stl_uninitialized.h	Sun Jul  6 22:33:59 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 377,383 ****
  			  std::__niter_base(__last),
  			  __x);
  	  else
! 	    std::__do_uninit_copy(__first, __last, __x);
  	}
  
        // Overload for pointers.
--- 377,383 ----
  			  std::__niter_base(__last),
  			  __x);
  	  else
! 	    std::__do_uninit_fill(__first, __last, __x);
  	}
  
        // Overload for pointers.
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/bits/version.def gcc-16-20250706/libstdc++-v3/include/bits/version.def
*** gcc-16-20250629/libstdc++-v3/include/bits/version.def	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/bits/version.def	Sun Jul  6 22:33:59 2025
*************** ftms = {
*** 1092,1097 ****
--- 1092,1101 ----
  ftms = {
    name = shift;
    values = {
+     v = 202202;
+     cxxmin = 23;
+   };
+   values = {
      v = 201806;
      cxxmin = 20;
    };
*************** ftms = {
*** 2029,2034 ****
--- 2033,2046 ----
      cxxmin = 26;
    };
  };
+ 
+ ftms = {
+   name = bitset;  // ...construct from string_view
+   values = {
+     v = 202306;
+     cxxmin = 26;
+   };
+ };
  
  // Standard test specifications.
  stds[97] = ">= 199711L";
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/bits/version.h gcc-16-20250706/libstdc++-v3/include/bits/version.h
*** gcc-16-20250629/libstdc++-v3/include/bits/version.h	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/bits/version.h	Sun Jul  6 22:33:59 2025
***************
*** 1224,1230 ****
  #undef __glibcxx_want_constexpr_utility
  
  #if !defined(__cpp_lib_shift)
! # if (__cplusplus >= 202002L)
  #  define __glibcxx_shift 201806L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
  #   define __cpp_lib_shift 201806L
--- 1224,1235 ----
  #undef __glibcxx_want_constexpr_utility
  
  #if !defined(__cpp_lib_shift)
! # if (__cplusplus >= 202100L)
! #  define __glibcxx_shift 202202L
! #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
! #   define __cpp_lib_shift 202202L
! #  endif
! # elif (__cplusplus >= 202002L)
  #  define __glibcxx_shift 201806L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
  #   define __cpp_lib_shift 201806L
***************
*** 2273,2276 ****
--- 2278,2291 ----
  #endif /* !defined(__cpp_lib_exception_ptr_cast) && defined(__glibcxx_want_exception_ptr_cast) */
  #undef __glibcxx_want_exception_ptr_cast
  
+ #if !defined(__cpp_lib_bitset)
+ # if (__cplusplus >  202302L)
+ #  define __glibcxx_bitset 202306L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_bitset)
+ #   define __cpp_lib_bitset 202306L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_bitset) && defined(__glibcxx_want_bitset) */
+ #undef __glibcxx_want_bitset
+ 
  #undef __glibcxx_want_all
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/std/bitset gcc-16-20250706/libstdc++-v3/include/std/bitset
*** gcc-16-20250629/libstdc++-v3/include/std/bitset	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/std/bitset	Sun Jul  6 22:33:59 2025
***************
*** 61,68 ****
--- 61,73 ----
  #endif
  
  #define __glibcxx_want_constexpr_bitset
+ #define __glibcxx_want_bitset  // ...construct from string_view
  #include <bits/version.h>
  
+ #ifdef __cpp_lib_bitset // ...construct from string_view
+ # include <string_view>
+ #endif
+ 
  #define _GLIBCXX_BITSET_BITS_PER_WORD  (__CHAR_BIT__ * __SIZEOF_LONG__)
  #define _GLIBCXX_BITSET_WORDS(__n) \
    ((__n) / _GLIBCXX_BITSET_BITS_PER_WORD + \
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 752,758 ****
     *  (Note that %bitset does @e not meet the formal requirements of a
     *  <a href="tables.html#65">container</a>.  Mainly, it lacks iterators.)
     *
!    *  The template argument, @a Nb, may be any non-negative number,
     *  specifying the number of bits (e.g., "0", "12", "1024*1024").
     *
     *  In the general unoptimized case, storage is allocated in word-sized
--- 757,763 ----
     *  (Note that %bitset does @e not meet the formal requirements of a
     *  <a href="tables.html#65">container</a>.  Mainly, it lacks iterators.)
     *
!    *  The template argument, `Nb`, may be any non-negative number,
     *  specifying the number of bits (e.g., "0", "12", "1024*1024").
     *
     *  In the general unoptimized case, storage is allocated in word-sized
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 816,843 ****
        typedef _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)> _Base;
        typedef unsigned long _WordT;
  
! #if _GLIBCXX_HOSTED
!       template<class _CharT, class _Traits, class _Alloc>
!       _GLIBCXX23_CONSTEXPR
!       void
!       _M_check_initial_position(const std::basic_string<_CharT, _Traits, _Alloc>& __s,
! 				size_t __position) const
        {
  	if (__position > __s.size())
! 	  __throw_out_of_range_fmt(__N("bitset::bitset: __position "
! 				       "(which is %zu) > __s.size() "
! 				       "(which is %zu)"),
! 				   __position, __s.size());
        }
- #endif // HOSTED
  
        _GLIBCXX23_CONSTEXPR
        void _M_check(size_t __position, const char *__s) const
        {
  	if (__position >= _Nb)
! 	  __throw_out_of_range_fmt(__N("%s: __position (which is %zu) "
! 				       ">= _Nb (which is %zu)"),
! 				   __s, __position, _Nb);
        }
  
        _GLIBCXX23_CONSTEXPR
--- 821,845 ----
        typedef _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)> _Base;
        typedef unsigned long _WordT;
  
!       template<class _Str>
!       _GLIBCXX23_CONSTEXPR void
!       _M_check_initial_position(
! 	const _Str& __s, typename _Str::size_type __position) const
        {
  	if (__position > __s.size())
! 	  __throw_out_of_range_fmt(
! 	    __N("bitset::bitset:"
! 		" __position (which is %zu) > __s.size() (which is %zu)"),
! 	    size_t(__position), size_t(__s.size()));
        }
  
        _GLIBCXX23_CONSTEXPR
        void _M_check(size_t __position, const char *__s) const
        {
  	if (__position >= _Nb)
! 	  __throw_out_of_range_fmt(
! 	    __N("%s: __position (which is %zu) >= _Nb (which is %zu)"),
! 	    __s, size_t(__position), size_t(_Nb));
        }
  
        _GLIBCXX23_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 954,965 ****
  #if _GLIBCXX_HOSTED
        /**
         *  Use a subset of a string.
!        *  @param  __s  A string of @a 0 and @a 1 characters.
!        *  @param  __position  Index of the first character in @a __s to use;
         *                    defaults to zero.
!        *  @throw  std::out_of_range  If @a pos is bigger the size of @a __s.
         *  @throw  std::invalid_argument  If a character appears in the string
!        *                                 which is neither @a 0 nor @a 1.
         */
        template<class _CharT, class _Traits, class _Alloc>
  	_GLIBCXX23_CONSTEXPR
--- 956,967 ----
  #if _GLIBCXX_HOSTED
        /**
         *  Use a subset of a string.
!        *  @param  __s  A string of `0` and `1` characters.
!        *  @param  __position  Index of the first character in `__s` to use;
         *                    defaults to zero.
!        *  @throw  std::out_of_range  If `__position > __s.size()`.
         *  @throw  std::invalid_argument  If a character appears in the string
!        *                                 which is neither `0` nor `1`.
         */
        template<class _CharT, class _Traits, class _Alloc>
  	_GLIBCXX23_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 976,988 ****
  
        /**
         *  Use a subset of a string.
!        *  @param  __s  A string of @a 0 and @a 1 characters.
!        *  @param  __position  Index of the first character in @a __s to use.
         *  @param  __n    The number of characters to copy.
!        *  @throw std::out_of_range If @a __position is bigger the size
!        *  of @a __s.
         *  @throw  std::invalid_argument  If a character appears in the string
!        *                                 which is neither @a 0 nor @a 1.
         */
        template<class _CharT, class _Traits, class _Alloc>
  	_GLIBCXX23_CONSTEXPR
--- 978,989 ----
  
        /**
         *  Use a subset of a string.
!        *  @param  __s  A string of `0` and `1` characters.
!        *  @param  __position  Index of the first character in `__s` to use.
         *  @param  __n    The number of characters to copy.
!        *  @throw  std::out_of_range  If `__position > __s.size()`.
         *  @throw  std::invalid_argument  If a character appears in the string
!        *                                 which is neither `0` nor `1`.
         */
        template<class _CharT, class _Traits, class _Alloc>
  	_GLIBCXX23_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1008,1022 ****
  	}
  #endif // HOSTED
  
  #if __cplusplus >= 201103L
        /**
         *  Construct from a character %array.
!        *  @param  __str  An %array of characters @a zero and @a one.
         *  @param  __n    The number of characters to use.
         *  @param  __zero The character corresponding to the value 0.
         *  @param  __one  The character corresponding to the value 1.
         *  @throw  std::invalid_argument If a character appears in the string
!        *                                which is neither @a __zero nor @a __one.
         */
        template<typename _CharT>
  	[[__gnu__::__nonnull__]]
--- 1009,1050 ----
  	}
  #endif // HOSTED
  
+ #ifdef __cpp_lib_bitset
+       /**
+        *  Use a subset of a string view.
+        *  @param  __s  A `string_view` of a sequence of `0` and `1` characters.
+        *  @param  __position  Index of the first character in `__s` to use.
+        *  @param  __n    The maximum number of characters from `__s` to use.
+        *  @param  __zero The character corresponding to the value 0.
+        *  @param  __one  The character corresponding to the value 1.
+        *  @throw  std::out_of_range  If `__position > __s.size()`.
+        *  @throw  std::invalid_argument  If a character appears in `__s`
+        *                                 which is neither `0` nor `1`.
+        */
+       template<class _CharT, class _Traits>
+ 	constexpr explicit
+ 	bitset(basic_string_view<_CharT, _Traits> __s,
+ 	  basic_string_view<_CharT, _Traits>::size_type __position = 0,
+ 	  basic_string_view<_CharT, _Traits>::size_type __n =
+ 	    basic_string_view<_CharT, _Traits>::npos,
+ 	  _CharT __zero = _CharT('0'), _CharT __one = _CharT('1'))
+ 	: _Base()
+ 	{
+ 	  _M_check_initial_position(__s, __position);
+ 	  _M_copy_from_ptr<_CharT, _Traits>(
+ 	    __s.data(), __s.size(), __position, __n, __zero, __one);
+ 	}
+ #endif
+ 
  #if __cplusplus >= 201103L
        /**
         *  Construct from a character %array.
!        *  @param  __str  An %array of characters `__zero` and `__one`.
         *  @param  __n    The number of characters to use.
         *  @param  __zero The character corresponding to the value 0.
         *  @param  __one  The character corresponding to the value 1.
         *  @throw  std::invalid_argument If a character appears in the string
!        *                                which is neither `__zero` nor `__one`.
         */
        template<typename _CharT>
  	[[__gnu__::__nonnull__]]
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1028,1037 ****
  	       _CharT __zero = _CharT('0'), _CharT __one = _CharT('1'))
          : _Base()
          {
- #if _GLIBCXX_HOSTED
  	  if (!__str)
  	    __throw_logic_error(__N("bitset::bitset(const _CharT*, ...)"));
- #endif
  	  using _Traits = typename __bitset::__string<_CharT>::traits_type;
  
  	  if (__n == __bitset::__string<_CharT>::npos)
--- 1056,1063 ----
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/std/mdspan gcc-16-20250706/libstdc++-v3/include/std/mdspan
*** gcc-16-20250629/libstdc++-v3/include/std/mdspan	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/std/mdspan	Sun Jul  6 22:33:59 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1004,1009 ****
--- 1004,1040 ----
        [[no_unique_address]] _S_strides_t _M_strides;
      };
  
+   template<typename _ElementType>
+     struct default_accessor
+     {
+       static_assert(!is_array_v<_ElementType>,
+ 	"ElementType must not be an array type");
+       static_assert(!is_abstract_v<_ElementType>,
+ 	"ElementType must not be an abstract class type");
+ 
+       using offset_policy = default_accessor;
+       using element_type = _ElementType;
+       using reference = element_type&;
+       using data_handle_type = element_type*;
+ 
+       constexpr
+       default_accessor() noexcept = default;
+ 
+       template<typename _OElementType>
+ 	requires is_convertible_v<_OElementType(*)[], element_type(*)[]>
+ 	constexpr
+ 	default_accessor(default_accessor<_OElementType>) noexcept
+ 	{ }
+ 
+       constexpr reference
+       access(data_handle_type __p, size_t __i) const noexcept
+       { return __p[__i]; }
+ 
+       constexpr data_handle_type
+       offset(data_handle_type __p, size_t __i) const noexcept
+       { return __p + __i; }
+     };
+ 
  _GLIBCXX_END_NAMESPACE_VERSION
  }
  #endif
diff -Nrcpad gcc-16-20250629/libstdc++-v3/include/std/ranges gcc-16-20250706/libstdc++-v3/include/std/ranges
*** gcc-16-20250629/libstdc++-v3/include/std/ranges	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/include/std/ranges	Sun Jul  6 22:33:59 2025
*************** namespace ranges
*** 660,666 ****
        : _M_value(__value)
        { }
  
!       constexpr
        iota_view(type_identity_t<_Winc> __value,
  		type_identity_t<_Bound> __bound)
        : _M_value(__value), _M_bound(__bound)
--- 660,666 ----
        : _M_value(__value)
        { }
  
!       constexpr explicit
        iota_view(type_identity_t<_Winc> __value,
  		type_identity_t<_Bound> __bound)
        : _M_value(__value), _M_bound(__bound)
*************** namespace ranges
*** 669,687 ****
  	  __glibcxx_assert( bool(__value <= __bound) );
        }
  
!       constexpr
        iota_view(_Iterator __first, _Iterator __last)
  	requires same_as<_Winc, _Bound>
  	: iota_view(__first._M_value, __last._M_value)
        { }
  
!       constexpr
        iota_view(_Iterator __first, unreachable_sentinel_t __last)
  	requires same_as<_Bound, unreachable_sentinel_t>
  	: iota_view(__first._M_value, __last)
        { }
  
!       constexpr
        iota_view(_Iterator __first, _Sentinel __last)
  	requires (!same_as<_Winc, _Bound>) && (!same_as<_Bound, unreachable_sentinel_t>)
  	: iota_view(__first._M_value, __last._M_bound)
--- 669,687 ----
  	  __glibcxx_assert( bool(__value <= __bound) );
        }
  
!       constexpr explicit
        iota_view(_Iterator __first, _Iterator __last)
  	requires same_as<_Winc, _Bound>
  	: iota_view(__first._M_value, __last._M_value)
        { }
  
!       constexpr explicit
        iota_view(_Iterator __first, unreachable_sentinel_t __last)
  	requires same_as<_Bound, unreachable_sentinel_t>
  	: iota_view(__first._M_value, __last)
        { }
  
!       constexpr explicit
        iota_view(_Iterator __first, _Sentinel __last)
  	requires (!same_as<_Winc, _Bound>) && (!same_as<_Bound, unreachable_sentinel_t>)
  	: iota_view(__first._M_value, __last._M_bound)
*************** namespace views::__adaptor
*** 1811,1817 ****
  			      && default_initializable<_Pred>)
  	= default;
  
!       constexpr
        filter_view(_Vp __base, _Pred __pred)
  	: _M_base(std::move(__base)), _M_pred(std::move(__pred))
        { }
--- 1811,1817 ----
  			      && default_initializable<_Pred>)
  	= default;
  
!       constexpr explicit
        filter_view(_Vp __base, _Pred __pred)
  	: _M_base(std::move(__base)), _M_pred(std::move(__pred))
        { }
*************** namespace views::__adaptor
*** 2188,2194 ****
  				 && default_initializable<_Fp>)
  	= default;
  
!       constexpr
        transform_view(_Vp __base, _Fp __fun)
  	: _M_base(std::move(__base)), _M_fun(std::move(__fun))
        { }
--- 2188,2194 ----
  				 && default_initializable<_Fp>)
  	= default;
  
!       constexpr explicit
        transform_view(_Vp __base, _Fp __fun)
  	: _M_base(std::move(__base)), _M_fun(std::move(__fun))
        { }
*************** namespace views::__adaptor
*** 2323,2329 ****
      public:
        take_view() requires default_initializable<_Vp> = default;
  
!       constexpr
        take_view(_Vp __base, range_difference_t<_Vp> __count)
  	: _M_base(std::move(__base)), _M_count(std::move(__count))
        { }
--- 2323,2329 ----
      public:
        take_view() requires default_initializable<_Vp> = default;
  
!       constexpr explicit
        take_view(_Vp __base, range_difference_t<_Vp> __count)
  	: _M_base(std::move(__base)), _M_count(std::move(__count))
        { }
*************** namespace views::__adaptor
*** 2562,2568 ****
  				  && default_initializable<_Pred>)
  	= default;
  
!       constexpr
        take_while_view(_Vp __base, _Pred __pred)
  	: _M_base(std::move(__base)), _M_pred(std::move(__pred))
        { }
--- 2562,2568 ----
  				  && default_initializable<_Pred>)
  	= default;
  
!       constexpr explicit
        take_while_view(_Vp __base, _Pred __pred)
  	: _M_base(std::move(__base)), _M_pred(std::move(__pred))
        { }
*************** namespace views::__adaptor
*** 2650,2656 ****
      public:
        drop_view() requires default_initializable<_Vp> = default;
  
!       constexpr
        drop_view(_Vp __base, range_difference_t<_Vp> __count)
  	: _M_base(std::move(__base)), _M_count(__count)
        { __glibcxx_assert(__count >= 0); }
--- 2650,2656 ----
      public:
        drop_view() requires default_initializable<_Vp> = default;
  
!       constexpr explicit
        drop_view(_Vp __base, range_difference_t<_Vp> __count)
  	: _M_base(std::move(__base)), _M_count(__count)
        { __glibcxx_assert(__count >= 0); }
*************** namespace views::__adaptor
*** 2804,2810 ****
  				  && default_initializable<_Pred>)
  	= default;
  
!       constexpr
        drop_while_view(_Vp __base, _Pred __pred)
  	: _M_base(std::move(__base)), _M_pred(std::move(__pred))
        { }
--- 2804,2810 ----
  				  && default_initializable<_Pred>)
  	= default;
  
!       constexpr explicit
        drop_while_view(_Vp __base, _Pred __pred)
  	: _M_base(std::move(__base)), _M_pred(std::move(__pred))
        { }
*************** namespace views::__adaptor
*** 3641,3647 ****
  				  && default_initializable<_Pattern>)
  	= default;
  
!       constexpr
        lazy_split_view(_Vp __base, _Pattern __pattern)
  	: _M_base(std::move(__base)), _M_pattern(std::move(__pattern))
        { }
--- 3641,3647 ----
  				  && default_initializable<_Pattern>)
  	= default;
  
!       constexpr explicit
        lazy_split_view(_Vp __base, _Pattern __pattern)
  	: _M_base(std::move(__base)), _M_pattern(std::move(__pattern))
        { }
*************** namespace views::__adaptor
*** 3649,3655 ****
        template<input_range _Range>
  	requires constructible_from<_Vp, views::all_t<_Range>>
  	  && constructible_from<_Pattern, single_view<range_value_t<_Range>>>
! 	constexpr
  	lazy_split_view(_Range&& __r, range_value_t<_Range> __e)
  	  : _M_base(views::all(std::forward<_Range>(__r))),
  	    _M_pattern(views::single(std::move(__e)))
--- 3649,3655 ----
        template<input_range _Range>
  	requires constructible_from<_Vp, views::all_t<_Range>>
  	  && constructible_from<_Pattern, single_view<range_value_t<_Range>>>
! 	constexpr explicit
  	lazy_split_view(_Range&& __r, range_value_t<_Range> __e)
  	  : _M_base(views::all(std::forward<_Range>(__r))),
  	    _M_pattern(views::single(std::move(__e)))
*************** namespace views::__adaptor
*** 3766,3772 ****
  			   && default_initializable<_Pattern>)
        = default;
  
!     constexpr
      split_view(_Vp __base, _Pattern __pattern)
        : _M_base(std::move(__base)), _M_pattern(std::move(__pattern))
      { }
--- 3766,3772 ----
  			   && default_initializable<_Pattern>)
        = default;
  
!     constexpr explicit
      split_view(_Vp __base, _Pattern __pattern)
        : _M_base(std::move(__base)), _M_pattern(std::move(__pattern))
      { }
*************** namespace views::__adaptor
*** 3774,3780 ****
      template<forward_range _Range>
        requires constructible_from<_Vp, views::all_t<_Range>>
  	&& constructible_from<_Pattern, single_view<range_value_t<_Range>>>
!     constexpr
      split_view(_Range&& __r, range_value_t<_Range> __e)
        : _M_base(views::all(std::forward<_Range>(__r))),
  	_M_pattern(views::single(std::move(__e)))
--- 3774,3780 ----
      template<forward_range _Range>
        requires constructible_from<_Vp, views::all_t<_Range>>
  	&& constructible_from<_Pattern, single_view<range_value_t<_Range>>>
!     constexpr explicit
      split_view(_Range&& __r, range_value_t<_Range> __e)
        : _M_base(views::all(std::forward<_Range>(__r))),
  	_M_pattern(views::single(std::move(__e)))
*************** namespace views::__adaptor
*** 7295,7301 ****
  			       && default_initializable<_Pattern>)
        = default;
  
!     constexpr
      join_with_view(_Vp __base, _Pattern __pattern)
      : _M_base(std::move(__base)), _M_pattern(std::move(__pattern))
      { }
--- 7295,7301 ----
  			       && default_initializable<_Pattern>)
        = default;
  
!     constexpr explicit
      join_with_view(_Vp __base, _Pattern __pattern)
      : _M_base(std::move(__base)), _M_pattern(std::move(__pattern))
      { }
*************** namespace views::__adaptor
*** 7303,7309 ****
      template<input_range _Range>
        requires constructible_from<_Vp, views::all_t<_Range>>
  	&& constructible_from<_Pattern, single_view<range_value_t<_InnerRange>>>
!     constexpr
      join_with_view(_Range&& __r, range_value_t<_InnerRange> __e)
      : _M_base(views::all(std::forward<_Range>(__r))),
        _M_pattern(views::single(std::move(__e)))
--- 7303,7309 ----
      template<input_range _Range>
        requires constructible_from<_Vp, views::all_t<_Range>>
  	&& constructible_from<_Pattern, single_view<range_value_t<_InnerRange>>>
!     constexpr explicit
      join_with_view(_Range&& __r, range_value_t<_InnerRange> __e)
      : _M_base(views::all(std::forward<_Range>(__r))),
        _M_pattern(views::single(std::move(__e)))
*************** namespace ranges
*** 9735,9741 ****
      end() requires (!(__detail::__simple_view<_Vs> && ...))
      {
        constexpr auto __n = sizeof...(_Vs);
!       if constexpr ((semiregular<iterator_t<_Vs>> && ...)
  		    && common_range<_Vs...[__n - 1]>)
  	return _Iterator<false>(this, in_place_index<__n - 1>,
  				ranges::end(std::get<__n - 1>(_M_views)));
--- 9735,9741 ----
      end() requires (!(__detail::__simple_view<_Vs> && ...))
      {
        constexpr auto __n = sizeof...(_Vs);
!       if constexpr (__detail::__all_forward<false, _Vs...>
  		    && common_range<_Vs...[__n - 1]>)
  	return _Iterator<false>(this, in_place_index<__n - 1>,
  				ranges::end(std::get<__n - 1>(_M_views)));
*************** namespace ranges
*** 9747,9753 ****
      end() const requires (range<const _Vs> && ...) && __detail::__concatable<const _Vs...>
      {
        constexpr auto __n = sizeof...(_Vs);
!       if constexpr ((semiregular<iterator_t<const _Vs>> && ...)
  		    && common_range<const _Vs...[__n - 1]>)
  	return _Iterator<true>(this, in_place_index<__n - 1>,
  			       ranges::end(std::get<__n - 1>(_M_views)));
--- 9747,9753 ----
      end() const requires (range<const _Vs> && ...) && __detail::__concatable<const _Vs...>
      {
        constexpr auto __n = sizeof...(_Vs);
!       if constexpr (__detail::__all_forward<true, _Vs...>
  		    && common_range<const _Vs...[__n - 1]>)
  	return _Iterator<true>(this, in_place_index<__n - 1>,
  			       ranges::end(std::get<__n - 1>(_M_views)));
diff -Nrcpad gcc-16-20250629/libstdc++-v3/src/c++11/string-inst.cc gcc-16-20250706/libstdc++-v3/src/c++11/string-inst.cc
*** gcc-16-20250629/libstdc++-v3/src/c++11/string-inst.cc	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/src/c++11/string-inst.cc	Sun Jul  6 22:33:59 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 119,132 ****
  
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace
- 
- namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
- {
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
- 
-   using std::S;
-   template bool operator==(const S::iterator&, const S::iterator&);
-   template bool operator==(const S::const_iterator&, const S::const_iterator&);
- 
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
--- 119,121 ----
diff -Nrcpad gcc-16-20250629/libstdc++-v3/src/c++23/std.cc.in gcc-16-20250706/libstdc++-v3/src/c++23/std.cc.in
*** gcc-16-20250629/libstdc++-v3/src/c++23/std.cc.in	Sun Jun 29 22:34:11 2025
--- gcc-16-20250706/libstdc++-v3/src/c++23/std.cc.in	Sun Jul  6 22:33:59 2025
*************** export namespace std
*** 278,287 ****
    }
    using std::shift_left;
    namespace ranges
!   {}
    using std::shift_right;
    namespace ranges
!   {}
    using std::sort;
    namespace ranges
    {
--- 278,291 ----
    }
    using std::shift_left;
    namespace ranges
!   {
!     using std::ranges::shift_left;
!   }
    using std::shift_right;
    namespace ranges
!   {
!     using std::ranges::shift_right;
!   }
    using std::sort;
    namespace ranges
    {
*************** export namespace std
*** 1736,1750 ****
    using std::make_const_sentinel;
  #endif
  }
- // FIXME these should be friends of __normal_iterator to avoid exporting
- // __gnu_cxx.
- export namespace __gnu_cxx
- {
-   using __gnu_cxx::operator==;
-   using __gnu_cxx::operator<=>;
-   using __gnu_cxx::operator+;
-   using __gnu_cxx::operator-;
- }
  
  // <latch>
  export namespace std
--- 1740,1745 ----
*************** export namespace std
*** 1850,1856 ****
    using std::layout_left;
    using std::layout_right;
    using std::layout_stride;
!   // FIXME layout_left_padded, layout_right_padded, default_accessor and mdspan
  }
  #endif
  
--- 1845,1852 ----
    using std::layout_left;
    using std::layout_right;
    using std::layout_stride;
!   using std::default_accessor;
!   // FIXME layout_left_padded, layout_right_padded, aligned_accessor and mdspan
  }
  #endif
  
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/1.cc gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/1.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/1.cc	Sun Jun 29 22:34:12 2025
--- gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/1.cc	Sun Jul  6 22:34:00 2025
*************** void test01(void)
*** 47,52 ****
--- 47,53 ----
    const size_t n3 = 128;
    try {
      std::bitset<n3> bit03(str01, 5);
+     VERIFY(false);
    }
    catch(std::invalid_argument& fail) {
      VERIFY( true );
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/6282.cc gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/6282.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/6282.cc	Sun Jun 29 22:34:12 2025
--- gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/6282.cc	Sun Jul  6 22:34:00 2025
*************** void test02(void)
*** 39,44 ****
--- 39,46 ----
    std::bitset<0>  z3(std::string("10101010101"));
    VERIFY( z3.any() == false );
  
+   VERIFY( z1.to_ulong() == 0 );
+   VERIFY( (z1.to_string<char,char_traits<char>,allocator<char> >().empty() ));
    try {
      z1.set(0);
      VERIFY( false );
*************** void test02(void)
*** 49,57 ****
    catch(...) {
      VERIFY( false );
    }
- 
-   VERIFY( z1.to_ulong() == 0 );
-   VERIFY( (z1.to_string<char,char_traits<char>,allocator<char> >().empty() ));
  }
  
  int main()
--- 51,56 ----
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/string_view.cc gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/string_view.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/string_view.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/string_view.cc	Sun Jul  6 22:34:00 2025
***************
*** 0 ****
--- 1,132 ----
+ // C++26 [bitset.cons]
+ 
+ // { dg-do run { target c++26 } }
+ 
+ #ifndef C
+ # define C char
+ # define L(s) s
+ #endif
+ 
+ #include <bitset>
+ #include <string>
+ #include <string_view>
+ #include <algorithm> // std::reverse, std::transform
+ #include <stdexcept>
+ #include <testsuite_hooks.h>
+ 
+ void test01()
+ {
+   // template<_C,_T>
+   // constexpr explicit
+   // bitset(const basic_string_view<_C,_T>,
+   //   size_type pos, size_type n, _C zero, _C one)
+   try {
+     std::basic_string_view<C> str(L("stuff smith sessions"));
+     const std::size_t n = 128;
+     std::bitset<n> bit(str, 5);
+     VERIFY(false);
+   }
+   catch(std::invalid_argument& fail) {
+     VERIFY( true );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
+ 
+   try {
+     std::basic_string_view<C> str(L("010101000011"));
+     const std::size_t n = 128;
+     const auto sz = str.size();
+     std::bitset<n> bit(str, 0);
+     std::basic_string<C> str02;
+     for (std::size_t i = 0; i < sz; ++i)
+       str02 += (bit.test(i) ? C('1') : C('0'));
+     std::reverse(str02.begin(), str02.end());
+     VERIFY( str02 == str );
+   }
+   catch(std::invalid_argument& fail) {
+     VERIFY( false );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
+ 
+   // substring<C> "010101000011"
+   //              "10100001"
+   try {
+     std::basic_string_view<C> str(L("010101000011"));
+     const std::size_t n = 128;
+     const auto sz = 8;
+     std::bitset<n> bit(str, 3, sz);
+     std::basic_string<C> str02;
+     for (std::size_t i = 0; i < sz; ++i)
+       str02 += (bit.test(i) ? C('1') : C('0'));
+     std::reverse(str02.begin(), str02.end());
+     VERIFY( str02 == str.substr(3, sz) );
+   }
+   catch(std::invalid_argument& fail) {
+     VERIFY( false );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
+ 
+   // "abababaaaabb", zero = 'a', one = 'b'
+   try {
+     std::basic_string_view<C> str(L("010101000011"));
+     const std::size_t n = 128;
+     const auto sz = str.size();
+     std::basic_string<C> str02(str);
+     std::transform(str02.cbegin(), str02.cend(), str02.begin(), [](auto c) {
+       return (c - C('0')) + C('a');
+     });
+     std::basic_string_view<C> str03(str02);
+     std::bitset<n> bit(str03, 0, 100, C('a'), C('b'));
+     std::basic_string<C> str04;
+     for (std::size_t i = 0; i < sz; ++i)
+       str04 += (bit.test(i) ? C('1') : C('0'));
+     std::reverse(str04.begin(), str04.end());
+     VERIFY( str04 == str );
+   }
+   catch(std::invalid_argument& fail) {
+     VERIFY( false );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
+ 
+   // "aba0aba", zero = 'a', one = 'b', '0' appears
+   try {
+     const std::size_t n = 128;
+     std::basic_string_view<C> str05(L("aba0aba"));
+     std::bitset<n> bit(str05, 0, 100, C('a'), C('b'));
+     VERIFY( false );
+   }
+   catch(std::invalid_argument& fail) {
+     VERIFY( true );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
+ 
+   // pos > str.size()
+   try {
+     std::basic_string_view<C> str(L("010101000011"));
+     const std::size_t n = 128;
+     const auto sz = str.size();
+     std::bitset<n> bit(str, sz + 1, 100);
+     VERIFY( false );
+   }
+   catch(std::out_of_range& fail) {
+     VERIFY( true );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
+ }
+ 
+ int main()
+ {
+   test01();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/string_view_wide.cc gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/string_view_wide.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/20_util/bitset/cons/string_view_wide.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/20_util/bitset/cons/string_view_wide.cc	Sun Jul  6 22:34:00 2025
***************
*** 0 ****
--- 1,8 ----
+ // C++26 [bitset.cons]
+ 
+ // { dg-do run { target c++26 } }
+ 
+ #define C wchar_t
+ #define L(s) L ## s
+ 
+ #include "./string_view.cc"
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc gcc-16-20250706/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc	Sun Jul  6 22:34:00 2025
***************
*** 0 ****
--- 1,16 ----
+ // { dg-options "-std=gnu++98" }
+ // { dg-do compile { target c++98_only } }
+ // std::deque<character types>::resize() method fails with -std=c++98
+ 
+ #include <memory>
+ #include <testsuite_iterators.h>
+ 
+ void
+ test_pr120931()
+ {
+   using __gnu_test::test_container;
+   using __gnu_test::forward_iterator_wrapper;
+   unsigned char c[1];
+   test_container<unsigned char, forward_iterator_wrapper> f(c);
+   std::uninitialized_fill(f.begin(), f.end(), 0);
+ }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default.cc gcc-16-20250706/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default.cc	Sun Jul  6 22:34:01 2025
***************
*** 0 ****
--- 1,99 ----
+ // { dg-do run { target c++23 } }
+ #include <mdspan>
+ 
+ #include <testsuite_hooks.h>
+ 
+ constexpr size_t dyn = std::dynamic_extent;
+ 
+ template<typename Accessor>
+   constexpr void
+   test_accessor_policy()
+   {
+     static_assert(std::copyable<Accessor>);
+     static_assert(std::is_nothrow_move_constructible_v<Accessor>);
+     static_assert(std::is_nothrow_move_assignable_v<Accessor>);
+     static_assert(std::is_nothrow_swappable_v<Accessor>);
+   }
+ 
+ constexpr bool
+ test_access()
+ {
+   std::default_accessor<double> accessor;
+   std::array<double, 5> a{10, 11, 12, 13, 14};
+   VERIFY(accessor.access(a.data(), 0) == 10);
+   VERIFY(accessor.access(a.data(), 4) == 14);
+   return true;
+ }
+ 
+ constexpr bool
+ test_offset()
+ {
+   std::default_accessor<double> accessor;
+   std::array<double, 5> a{10, 11, 12, 13, 14};
+   VERIFY(accessor.offset(a.data(), 0) == a.data());
+   VERIFY(accessor.offset(a.data(), 4) == a.data() + 4);
+   return true;
+ }
+ 
+ class Base
+ { };
+ 
+ class Derived : public Base
+ { };
+ 
+ constexpr void
+ test_ctor()
+ {
+   // T -> T
+   static_assert(std::is_nothrow_constructible_v<std::default_accessor<double>,
+ 						std::default_accessor<double>>);
+   static_assert(std::is_convertible_v<std::default_accessor<double>,
+ 				      std::default_accessor<double>>);
+ 
+   // T -> const T
+   static_assert(std::is_convertible_v<std::default_accessor<double>,
+ 				      std::default_accessor<const double>>);
+   static_assert(std::is_convertible_v<std::default_accessor<Derived>,
+ 				      std::default_accessor<const Derived>>);
+ 
+   // const T -> T
+   static_assert(!std::is_constructible_v<std::default_accessor<double>,
+ 					 std::default_accessor<const double>>);
+   static_assert(!std::is_constructible_v<std::default_accessor<Derived>,
+ 					 std::default_accessor<const Derived>>);
+ 
+   // T <-> volatile T
+   static_assert(std::is_convertible_v<std::default_accessor<int>,
+ 				      std::default_accessor<volatile int>>);
+   static_assert(!std::is_constructible_v<std::default_accessor<int>,
+ 					 std::default_accessor<volatile int>>);
+ 
+   // size difference
+   static_assert(!std::is_constructible_v<std::default_accessor<char>,
+ 					 std::default_accessor<int>>);
+ 
+   // signedness
+   static_assert(!std::is_constructible_v<std::default_accessor<int>,
+ 					 std::default_accessor<unsigned int>>);
+   static_assert(!std::is_constructible_v<std::default_accessor<unsigned int>,
+ 					 std::default_accessor<int>>);
+ 
+   // Derived <-> Base
+   static_assert(!std::is_constructible_v<std::default_accessor<Base>,
+ 					 std::default_accessor<Derived>>);
+   static_assert(!std::is_constructible_v<std::default_accessor<Derived>,
+ 					 std::default_accessor<Base>>);
+ 
+ }
+ 
+ int
+ main()
+ {
+   test_accessor_policy<std::default_accessor<double>>();
+   test_access();
+   static_assert(test_access());
+   test_offset();
+   static_assert(test_offset());
+   test_ctor();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default_neg.cc gcc-16-20250706/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default_neg.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/23_containers/mdspan/accessors/default_neg.cc	Sun Jul  6 22:34:01 2025
***************
*** 0 ****
--- 1,23 ----
+ // { dg-do compile { target c++23 } }
+ #include<mdspan>
+ 
+ std::default_accessor<int[3]> a; // { dg-error "required from here" }
+ 
+ class AbstractBase
+ {
+   virtual void
+   foo() const = 0;
+ };
+ 
+ class Derived : public AbstractBase
+ {
+   void
+   foo() const override
+   { }
+ };
+ 
+ std::default_accessor<Derived> b_ok;
+ std::default_accessor<AbstractBase> b_err; // { dg-error "required from here"}
+ 
+ // { dg-prune-output "ElementType must not be an array type" }
+ // { dg-prune-output "ElementType must not be an abstract" }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/remove_if/120789.cc gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/remove_if/120789.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/remove_if/120789.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/remove_if/120789.cc	Sun Jul  6 22:34:01 2025
***************
*** 0 ****
--- 1,36 ----
+ // PR libstdc++/120789 - ranges::remove_if should use ranges::iter_move
+ // { dg-do compile { target c++20 } }
+ 
+ #include <algorithm>
+ 
+ struct A
+ {
+   bool operator==(const A&) const;
+ };
+ 
+ struct B
+ {
+   B(B&&) = delete;
+   B& operator=(const A&) const;
+ 
+   operator A() const;
+   bool operator==(const B&) const;
+ };
+ 
+ struct I
+ {
+   using value_type = A;
+   using difference_type = int;
+   B operator*() const;
+   I& operator++();
+   I operator++(int);
+   bool operator==(const I&) const;
+   friend A iter_move(const I&);
+ };
+ 
+ void
+ test01()
+ {
+   std::ranges::subrange<I, I> r;
+   auto [begin, end] = std::ranges::remove_if(r, [](auto&&) { return true; });
+ }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/shift_left/constrained.cc gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/shift_left/constrained.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/shift_left/constrained.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/shift_left/constrained.cc	Sun Jul  6 22:34:02 2025
***************
*** 0 ****
--- 1,105 ----
+ // Copyright (C) 2020-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library 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.
+ 
+ // This library 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 this library; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ // { dg-do run { target c++23 } }
+ // This test is based on shift_left/1.cc.
+ 
+ #include <algorithm>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ 
+ using __gnu_test::test_range;
+ using __gnu_test::forward_iterator_wrapper;
+ using __gnu_test::bidirectional_iterator_wrapper;
+ using __gnu_test::random_access_iterator_wrapper;
+ 
+ struct X
+ {
+   int a = -1;
+   bool moved_from = false;
+ 
+   X() = default;
+ 
+   X(int a)
+     : a(a)
+   { }
+ 
+   X(const X&) = delete;
+   X& operator=(const X&) = delete;
+ 
+   X(X&& other)
+   {
+     if (this != &other)
+     *this = std::move(other);
+   }
+ 
+   X&
+   operator=(X&& other)
+   {
+     a = other.a;
+     other.moved_from = true;
+     moved_from = false;
+     return *this;
+   }
+ };
+ 
+ template<int N, template<typename> typename Wrapper>
+ void
+ test01()
+ {
+   for (int n = 0; n < N+5; n++)
+     {
+       X x[N];
+       for (int i = 0; i < N; i++)
+ 	x[i] = X{i};
+       test_range<X, Wrapper> rx(x);
+       auto [first,out] = std::ranges::shift_left(rx.begin(), rx.end(), n);
+       VERIFY( first == rx.begin() );
+       if (n < N)
+ 	{
+ 	  VERIFY( out.ptr == x+(N-n) );
+ 	  for (int i = 0; i < N-n; i++)
+ 	    {
+ 	      VERIFY( x[i].a == n+i );
+ 	      VERIFY( !x[i].moved_from );
+ 	    }
+ 	  for (int i = std::max(n, N-n); i < N; i++)
+ 	    VERIFY( x[i].moved_from );
+ 	}
+       else
+ 	{
+ 	  VERIFY( out.ptr == x );
+ 	  for (int i = 0; i < N; i++)
+ 	    {
+ 	      VERIFY( x[i].a == i );
+ 	      VERIFY( !x[i].moved_from );
+ 	    }
+ 	}
+     }
+ }
+ 
+ int
+ main()
+ {
+   test01<23, forward_iterator_wrapper>();
+   test01<23, bidirectional_iterator_wrapper>();
+   test01<23, random_access_iterator_wrapper>();
+ 
+   test01<24, forward_iterator_wrapper>();
+   test01<24, bidirectional_iterator_wrapper>();
+   test01<24, random_access_iterator_wrapper>();
+ }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/shift_right/constrained.cc gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/shift_right/constrained.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/shift_right/constrained.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/shift_right/constrained.cc	Sun Jul  6 22:34:02 2025
***************
*** 0 ****
--- 1,104 ----
+ // Copyright (C) 2020-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library 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.
+ 
+ // This library 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 this library; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ // { dg-do run { target c++23 } }
+ // This test is based on shift_right/1.cc.
+ 
+ #include <algorithm>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ 
+ using __gnu_test::test_range;
+ using __gnu_test::forward_iterator_wrapper;
+ using __gnu_test::bidirectional_iterator_wrapper;
+ using __gnu_test::random_access_iterator_wrapper;
+ 
+ struct X
+ {
+   int a = -1;
+   bool moved_from = false;
+ 
+   X() = default;
+ 
+   X(int a)
+     : a(a)
+   { }
+ 
+   X(const X&) = delete;
+   X& operator=(const X&) = delete;
+ 
+   X(X&& other)
+   {
+     if (this != &other)
+     *this = std::move(other);
+   }
+ 
+   X&
+   operator=(X&& other)
+   {
+     a = other.a;
+     other.moved_from = true;
+     moved_from = false;
+     return *this;
+   }
+ };
+ 
+ template<int N, template<typename> typename Wrapper>
+ void
+ test01()
+ {
+   for (int n = 0; n < N+5; n++)
+     {
+       X x[N];
+       for (int i = 0; i < N; i++)
+ 	x[i] = X(i);
+       test_range<X, Wrapper> rx(x);
+       auto [out,last] = std::ranges::shift_right(rx.begin(), rx.end(), n);
+       VERIFY( last == rx.end() );
+       if (n < N)
+ 	{
+ 	  VERIFY( out.ptr == x+n );
+ 	  for (int i = n; i < N; i++)
+ 	    VERIFY( x[i].a == i-n );
+ 	  for (int i = 0; i < std::min(n, N-n); i++)
+ 	    VERIFY( x[i].moved_from );
+ 	  for (int i = std::min(n, N-n); i < std::max(n, N-n); i++)
+ 	    VERIFY( !x[i].moved_from );
+ 	}
+       else
+ 	{
+ 	  VERIFY( out.ptr == x+N );
+ 	  for (int i = 0; i < N; i++)
+ 	    {
+ 	      VERIFY( x[i].a == i );
+ 	      VERIFY( !x[i].moved_from );
+ 	    }
+ 	}
+     }
+ }
+ 
+ int
+ main()
+ {
+   test01<23, forward_iterator_wrapper>();
+   test01<23, bidirectional_iterator_wrapper>();
+   test01<23, random_access_iterator_wrapper>();
+ 
+   test01<24, forward_iterator_wrapper>();
+   test01<24, bidirectional_iterator_wrapper>();
+   test01<24, random_access_iterator_wrapper>();
+ }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/unique/120789.cc gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/unique/120789.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/25_algorithms/unique/120789.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250706/libstdc++-v3/testsuite/25_algorithms/unique/120789.cc	Sun Jul  6 22:34:02 2025
***************
*** 0 ****
--- 1,36 ----
+ // PR libstdc++/120789 - ranges::unique should use ranges::iter_move
+ // { dg-do compile { target c++20 } }
+ 
+ #include <algorithm>
+ 
+ struct A
+ {
+   bool operator==(const A&) const;
+ };
+ 
+ struct B
+ {
+   B(B&&) = delete;
+   B& operator=(const A&) const;
+ 
+   operator A() const;
+   bool operator==(const B&) const;
+ };
+ 
+ struct I
+ {
+   using value_type = A;
+   using difference_type = int;
+   B operator*() const;
+   I& operator++();
+   I operator++(int);
+   bool operator==(const I&) const;
+   friend A iter_move(const I&);
+ };
+ 
+ void
+ test01()
+ {
+   std::ranges::subrange<I, I> r;
+   auto [begin, end] = std::ranges::unique(r);
+ }
diff -Nrcpad gcc-16-20250629/libstdc++-v3/testsuite/std/ranges/concat/1.cc gcc-16-20250706/libstdc++-v3/testsuite/std/ranges/concat/1.cc
*** gcc-16-20250629/libstdc++-v3/testsuite/std/ranges/concat/1.cc	Sun Jun 29 22:34:37 2025
--- gcc-16-20250706/libstdc++-v3/testsuite/std/ranges/concat/1.cc	Sun Jul  6 22:34:04 2025
*************** test04()
*** 99,104 ****
--- 99,116 ----
    using type = decltype(v);
  }
  
+ void
+ test05()
+ {
+   // PR libstdc++/120934 - views::concat is ill-formed depending on argument order
+   auto v1 = views::single(1);
+   std::vector<int> vec = {2, 3};
+   auto v2 = views::join(views::transform(vec, views::single));
+ 
+   static_assert( ranges::range<decltype(views::concat(v1, v2))> );
+   static_assert( ranges::range<decltype(views::concat(v2, v1))> );
+ }
+ 
  int
  main()
  {
*************** main()
*** 107,110 ****
--- 119,123 ----
    test02();
    test03();
    test04();
+   test05();
  }
diff -Nrcpad gcc-16-20250629/maintainer-scripts/ChangeLog gcc-16-20250706/maintainer-scripts/ChangeLog
*** gcc-16-20250629/maintainer-scripts/ChangeLog	Sun Jun 29 22:34:37 2025
--- gcc-16-20250706/maintainer-scripts/ChangeLog	Sun Jul  6 22:34:04 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-07-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	* crontab: Stop doing GCC 12 snapshots.
+ 
  2025-05-23  Richard Biener  <rguenther@suse.de>
  
  	* update_web_docs_git: Conditionalize libgdiagnostic processing
diff -Nrcpad gcc-16-20250629/maintainer-scripts/crontab gcc-16-20250706/maintainer-scripts/crontab
*** gcc-16-20250629/maintainer-scripts/crontab	Sun Jun 29 22:34:37 2025
--- gcc-16-20250706/maintainer-scripts/crontab	Sun Jul  6 22:34:04 2025
***************
*** 1,7 ****
  16  0 * * * sh /home/gccadmin/scripts/update_version_git
  50  0 * * * sh /home/gccadmin/scripts/update_web_docs_git
  55  0 * * * sh /home/gccadmin/scripts/update_web_docs_libstdcxx_git
- 32 22 * * 3 sh /home/gccadmin/scripts/gcc_release -s 12:releases/gcc-12 -l -d /sourceware/snapshot-tmp/gcc all
  32 22 * * 4 sh /home/gccadmin/scripts/gcc_release -s 13:releases/gcc-13 -l -d /sourceware/snapshot-tmp/gcc all
  32 22 * * 5 sh /home/gccadmin/scripts/gcc_release -s 14:releases/gcc-14 -l -d /sourceware/snapshot-tmp/gcc all
  32 22 * * 6 sh /home/gccadmin/scripts/gcc_release -s 15:releases/gcc-15 -l -d /sourceware/snapshot-tmp/gcc all
--- 1,6 ----
