diff -Nrcpad gcc-16-20250504/LAST_UPDATED gcc-16-20250511/LAST_UPDATED
*** gcc-16-20250504/LAST_UPDATED	Sun May  4 22:32:43 2025
--- gcc-16-20250511/LAST_UPDATED	Sun May 11 22:32:54 2025
***************
*** 1 ****
! Obtained from git: master revision fceb6022798b587c9111d0241aaff72602dcd626
--- 1 ----
! Obtained from git: master revision 37e61c793c1b22bdcfbf142cd6086da2745be596
diff -Nrcpad gcc-16-20250504/MD5SUMS gcc-16-20250511/MD5SUMS
*** gcc-16-20250504/MD5SUMS	Sun May  4 22:32:53 2025
--- gcc-16-20250511/MD5SUMS	Sun May 11 22:32:58 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20250504.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-20250511.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
*************** f34bf42b90c14687dd423c392229b49a  Change
*** 25,31 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 1402b50bea1ee5144ef9e47bf0fe7437  LAST_UPDATED
  bb7efdf3d67af3a24c7dfd5440108348  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
--- 25,31 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 728b777437775eb64f16517176ac82ed  LAST_UPDATED
  bb7efdf3d67af3a24c7dfd5440108348  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 153,159 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  03e84607a1c4478aa65bd53937ed3aea  configure
  a10daf98a334165ec89e62510a1eb0a0  configure.ac
! fb576c95dc5d6a93d02ff94bf8924e1b  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
--- 153,159 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  03e84607a1c4478aa65bd53937ed3aea  configure
  a10daf98a334165ec89e62510a1eb0a0  configure.ac
! b3c924d9b4c64caee2e6d7559e523bb4  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
*************** fb576c95dc5d6a93d02ff94bf8924e1b  contri
*** 164,170 ****
  2dcd6c7659cd1198ff7c8da4423dc0dd  contrib/check-params-in-docs.py
  6b9a7ea20f07df4c70a3c38a7478891a  contrib/check_GNU_style.py
  fa1c4b0172be6c080411619977750edb  contrib/check_GNU_style.sh
! 7d718b91ddde111d30905c2a063bc5b5  contrib/check_GNU_style_lib.py
  90007bd4812c8bc365b6f0004e86d465  contrib/check_makefile_deps.sh
  4b4bfb3a8be5ddeae3515ff55c6c1618  contrib/check_warning_flags.sh
  ffab271b81488026969b58ab7dca818a  contrib/clang-format
--- 164,170 ----
  2dcd6c7659cd1198ff7c8da4423dc0dd  contrib/check-params-in-docs.py
  6b9a7ea20f07df4c70a3c38a7478891a  contrib/check_GNU_style.py
  fa1c4b0172be6c080411619977750edb  contrib/check_GNU_style.sh
! d65fb37d5bf4325b777f5cd996b19e97  contrib/check_GNU_style_lib.py
  90007bd4812c8bc365b6f0004e86d465  contrib/check_makefile_deps.sh
  4b4bfb3a8be5ddeae3515ff55c6c1618  contrib/check_warning_flags.sh
  ffab271b81488026969b58ab7dca818a  contrib/clang-format
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 514,520 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! e782a257456a8a7b6260c432d442bba5  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 514,520 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! f0190d297667893394723609f87fd532  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 551,569 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 50e38ce1f2675eeff304744ba906c279  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 634347bfa52c68c4994c546e87d54cdd  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! e174ba4865439a08c3f60f67440dada5  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 551,569 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! c8d08aaa6c3f391b5473fa4e08dbda43  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 636b061140f23f47c242d4d7a5488ae3  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 6ab80076b34eb4c0bb7a477989d45a66  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** fce186389d317dec9c580f569a2a845a  gcc/ad
*** 772,778 ****
  c6728830f0888dc3385e474b5925c01f  gcc/ada/exp_ch13.ads
  d037443d1b61c02110e124f3c701b449  gcc/ada/exp_ch2.adb
  476e299ea88b583859604d0071046143  gcc/ada/exp_ch2.ads
! 215be17804e2918cd4dd26b52b99ea4b  gcc/ada/exp_ch3.adb
  53e0d855cd76aedff48a9e6266db49e8  gcc/ada/exp_ch3.ads
  e913cd881168d89aedbd0f61a506d772  gcc/ada/exp_ch4.adb
  689dbf89ad9d44a03b54f8ce05455a31  gcc/ada/exp_ch4.ads
--- 772,778 ----
  c6728830f0888dc3385e474b5925c01f  gcc/ada/exp_ch13.ads
  d037443d1b61c02110e124f3c701b449  gcc/ada/exp_ch2.adb
  476e299ea88b583859604d0071046143  gcc/ada/exp_ch2.ads
! 9ced630b747b44cf02c7a2d826a40aba  gcc/ada/exp_ch3.adb
  53e0d855cd76aedff48a9e6266db49e8  gcc/ada/exp_ch3.ads
  e913cd881168d89aedbd0f61a506d772  gcc/ada/exp_ch4.adb
  689dbf89ad9d44a03b54f8ce05455a31  gcc/ada/exp_ch4.ads
*************** df3f6c6882fc8f715d4cc537af0f6442  gcc/ad
*** 3080,3086 ****
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! 2eb262c6ebce77804a25a173ad139232  gcc/analyzer/ChangeLog
  c1d8dcf12e8a4e4782fe39d54eed2d1d  gcc/analyzer/access-diagram.cc
  9de61ebb9551c4e4ef3bfa77f503bfa0  gcc/analyzer/access-diagram.h
  0fbda9dacfcf6f4071f7bee8c6b7dbe9  gcc/analyzer/analysis-plan.cc
--- 3080,3086 ----
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! a0a4877c7eee917745fe4c184f3958c5  gcc/analyzer/ChangeLog
  c1d8dcf12e8a4e4782fe39d54eed2d1d  gcc/analyzer/access-diagram.cc
  9de61ebb9551c4e4ef3bfa77f503bfa0  gcc/analyzer/access-diagram.h
  0fbda9dacfcf6f4071f7bee8c6b7dbe9  gcc/analyzer/analysis-plan.cc
*************** ab7785be9752af3c41527ce7aa08e5f9  gcc/an
*** 3106,3122 ****
  269242e7e59c0f923c78aaa080a5ca62  gcc/analyzer/call-string.h
  0c33640a03f3ee40fe825f5f1e2ad950  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
! 42f7bebd8593f5e60f72fcd43d2d3ed2  gcc/analyzer/checker-event.cc
! ef66a9f6e8a3ccc6090c7a9edf311196  gcc/analyzer/checker-event.h
  7b48fd40a686c1e65eecc37e49824307  gcc/analyzer/checker-path.cc
! 23be5fa4f6b3e6dfb0080dde437af84e  gcc/analyzer/checker-path.h
  ccd93b30934aa1ee88f4ab3938c3d509  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
! c32e7524da2031913402ca558048800a  gcc/analyzer/diagnostic-manager.cc
! 810fe6182b647f31647a49f2cbe23b1e  gcc/analyzer/diagnostic-manager.h
  66966ef6aa01ef22fe422f7715c0011a  gcc/analyzer/engine.cc
  acc1f4f20384df654fa365f64ad6a6f9  gcc/analyzer/engine.h
  c31696d47421f74a13cc907d022b3935  gcc/analyzer/event-loc-info.h
--- 3106,3122 ----
  269242e7e59c0f923c78aaa080a5ca62  gcc/analyzer/call-string.h
  0c33640a03f3ee40fe825f5f1e2ad950  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
! 3f62325364760248ae18299a0bd12bf2  gcc/analyzer/checker-event.cc
! 797f03e10712c05bbb0e27862ff1823d  gcc/analyzer/checker-event.h
  7b48fd40a686c1e65eecc37e49824307  gcc/analyzer/checker-path.cc
! 1a2151bebf901fa4bb299b2c486fc38e  gcc/analyzer/checker-path.h
  ccd93b30934aa1ee88f4ab3938c3d509  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
! b12209bda59582d56544816d43225093  gcc/analyzer/diagnostic-manager.cc
! f44cc8516da447fede0702befbb862f6  gcc/analyzer/diagnostic-manager.h
  66966ef6aa01ef22fe422f7715c0011a  gcc/analyzer/engine.cc
  acc1f4f20384df654fa365f64ad6a6f9  gcc/analyzer/engine.h
  c31696d47421f74a13cc907d022b3935  gcc/analyzer/event-loc-info.h
*************** c77616ec7ed7ec81357de9544f955910  gcc/at
*** 3187,3193 ****
  05d6a8f61e165cf9438457af9042b98f  gcc/attribs.cc
  1bdf6723b4c88b5b1495f718e4dd00c7  gcc/attribs.h
  1c0257185e0c027f8530f132c40515e3  gcc/auto-inc-dec.cc
! d407226601be5a154cc16d5e1a7269c5  gcc/auto-profile.cc
  fe453e02b17197af9a9101edb6590b74  gcc/auto-profile.h
  5f6afda00ed75a73ecd5f064cf44fb15  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
--- 3187,3193 ----
  05d6a8f61e165cf9438457af9042b98f  gcc/attribs.cc
  1bdf6723b4c88b5b1495f718e4dd00c7  gcc/attribs.h
  1c0257185e0c027f8530f132c40515e3  gcc/auto-inc-dec.cc
! 3de302030b825a47ae596218c96f18fe  gcc/auto-profile.cc
  fe453e02b17197af9a9101edb6590b74  gcc/auto-profile.h
  5f6afda00ed75a73ecd5f064cf44fb15  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
*************** bbad65845fcf9cdbc5137d96f92eacab  gcc/cf
*** 3293,3352 ****
  c97195f1544d9bfc539271f27e7a26b4  gcc/cfgrtl.cc
  28d9dedd6044321fe1df02d3575f81e9  gcc/cfgrtl.h
  d2af7bef4d7e14fad28c3387b4d48c44  gcc/cgraph.cc
! d26d92cf0634256563126f085127e264  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
! b9bb70fa06239e8019ed7725a212ecc2  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! 564b8c249423519963e61185c2d3fcae  gcc/cobol/ChangeLog
! deb0e476e1a3ed05018a11cf051df8ca  gcc/cobol/Make-lang.in
  d6e5c9435942e9ec3f1d2e83926b5b0c  gcc/cobol/cbldiag.h
! f9a00ae461605a7304a751162a73851d  gcc/cobol/cdf-copy.cc
! 96528542a62ae6f6373a2a3da4617ab8  gcc/cobol/cdf.y
  f0dbfcf1dedffa22b25991dbdc846baf  gcc/cobol/cdfval.h
  77fc5e59eed5f55ff8b66d9138ca6c18  gcc/cobol/cobol-system.h
  9730cec0c0f29c48260379a6352beec7  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
  85e293b3cfd63dd6ec31e1b03363d8de  gcc/cobol/copybook.h
! f65d6595cadb8c8279ca44981013ab0c  gcc/cobol/dts.h
! 82b8e55e34100aab5497fe2b06707279  gcc/cobol/except.cc
! d172f085bd37c1917b8d0019edfcfa37  gcc/cobol/exceptg.h
! a582c03845daff3a9fb0e5edba4a14f3  gcc/cobol/gcobc
! ab0636bdd5d2169c3e8d2ed11b1ac692  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  e9f9397b294013c218ab16870d43e8ef  gcc/cobol/gcobolspec.cc
! e7f8c9fe635a0de18ab1260cd34d9fb0  gcc/cobol/genapi.cc
! c64386b215dc54b1760982f960d196bf  gcc/cobol/genapi.h
  b04330097798bdf9cbc4959b4ecf7ce8  gcc/cobol/gengen.cc
  5a15fbb14271aa588750f652642e3b68  gcc/cobol/gengen.h
! 4cd90bd6f0627ef151815a5c3246ac4e  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! 0502c52eefa3cef089927b9cf881eaad  gcc/cobol/genutil.cc
! 73263b6727413c7095ca6a4e16ca88d8  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  7b5758bc973cca5cffb0d13f9071a412  gcc/cobol/inspect.h
  9bff261865a91e8ee85d705fd5bb8143  gcc/cobol/lang-specs.h
  c0074d45ca6599230c4679735132c265  gcc/cobol/lang.opt
  d1170095b14aa5fa21862d07a27e29c8  gcc/cobol/lang.opt.urls
! 83320e131008f7d3db7b8e756e0595d9  gcc/cobol/lexio.cc
  eab918ac4f71f5b18770f9dbb8f6b2b3  gcc/cobol/lexio.h
! bd829aafeabeb3f7f93388e044b5e484  gcc/cobol/parse.y
! e676b099195560f3c72840924320d45b  gcc/cobol/parse_ante.h
  4d55488629c09ff19bd872e7dd9d0fc7  gcc/cobol/parse_util.h
! bee7d0c426d7501e6136da48aadbd7c3  gcc/cobol/scan.l
! 5262636fa3c30b6a78355fc116a79479  gcc/cobol/scan_ante.h
! 412d402c454f4c3a5364bc98cfcf9096  gcc/cobol/scan_post.h
! 8085c8fff2ef5a491a4102efc3584d9f  gcc/cobol/show_parse.h
! 3baec2eeda54a2ded9cfa5ba0a112f36  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
! 4a321fdba21794ffc91b8b957dc5c975  gcc/cobol/symbols.cc
! 1e9471d7b63250438a0df34ccc9ea98e  gcc/cobol/symbols.h
  036b7c0fd665dd2cee65ec858597b18f  gcc/cobol/symfind.cc
! 7c1542762ea306322c1babf670d6b0aa  gcc/cobol/token_names.h
  94ee230280ef44983fee5c81648f8669  gcc/cobol/udf/stored-char-length.cbl
! d1714dcbb8cc8ff64ce973ea4772a4c6  gcc/cobol/util.cc
! 736341eac068276fa296b201670b03de  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
  30202062ccc5696f6203f07ab6965763  gcc/collect2-aix.cc
--- 3293,3352 ----
  c97195f1544d9bfc539271f27e7a26b4  gcc/cfgrtl.cc
  28d9dedd6044321fe1df02d3575f81e9  gcc/cfgrtl.h
  d2af7bef4d7e14fad28c3387b4d48c44  gcc/cgraph.cc
! dc77078cfb0ca0cc5ae08b3f18bf4949  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
! 6ee8068b3cc2f923cf5e42eb111239e1  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! 2ed4d7707ed07d91433229882dd77435  gcc/cobol/ChangeLog
! 0e25dd48b4c3e56f9d9b604cd8980f36  gcc/cobol/Make-lang.in
  d6e5c9435942e9ec3f1d2e83926b5b0c  gcc/cobol/cbldiag.h
! 0fc59bb3626b6cda209f53824261beb1  gcc/cobol/cdf-copy.cc
! 3bb5c2a5f2ca5af128d40c5e880848cf  gcc/cobol/cdf.y
  f0dbfcf1dedffa22b25991dbdc846baf  gcc/cobol/cdfval.h
  77fc5e59eed5f55ff8b66d9138ca6c18  gcc/cobol/cobol-system.h
  9730cec0c0f29c48260379a6352beec7  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
  85e293b3cfd63dd6ec31e1b03363d8de  gcc/cobol/copybook.h
! d82104539470e81b006b5f9227229da7  gcc/cobol/dts.h
! e0e052655b60c48dc15466e247dc21cf  gcc/cobol/except.cc
! 1256a377e7b47a0adcf1c43a2274bf11  gcc/cobol/exceptg.h
! 604df17dfcca35e0919c19f61a592c18  gcc/cobol/gcobc
! d44f9332607dd9c0ad1d7dd811e5a531  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  e9f9397b294013c218ab16870d43e8ef  gcc/cobol/gcobolspec.cc
! 52a4e43f2242994e6ffc35305279d254  gcc/cobol/genapi.cc
! 9405cedcadb1d8d4dc1ec68fc2fb0c59  gcc/cobol/genapi.h
  b04330097798bdf9cbc4959b4ecf7ce8  gcc/cobol/gengen.cc
  5a15fbb14271aa588750f652642e3b68  gcc/cobol/gengen.h
! b948c6f7784a02c72c74464652f7367a  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! 488d365626bd7c2940c0e2d1d1228f10  gcc/cobol/genutil.cc
! 6a111bf23fa6dd512b148307c4f15b9b  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  7b5758bc973cca5cffb0d13f9071a412  gcc/cobol/inspect.h
  9bff261865a91e8ee85d705fd5bb8143  gcc/cobol/lang-specs.h
  c0074d45ca6599230c4679735132c265  gcc/cobol/lang.opt
  d1170095b14aa5fa21862d07a27e29c8  gcc/cobol/lang.opt.urls
! e0d7a16fdf4749523dfa969aa882d709  gcc/cobol/lexio.cc
  eab918ac4f71f5b18770f9dbb8f6b2b3  gcc/cobol/lexio.h
! f671e4bf371f943621e9a3baad922363  gcc/cobol/parse.y
! fdf36758a0fd775c7da30fa81e31eb81  gcc/cobol/parse_ante.h
  4d55488629c09ff19bd872e7dd9d0fc7  gcc/cobol/parse_util.h
! 118755a347fadbe244b49c857230614d  gcc/cobol/scan.l
! ce068fd0775a453bea6dac7980027779  gcc/cobol/scan_ante.h
! e15d0bd1bbc8d73dee00f50180bfcb54  gcc/cobol/scan_post.h
! 31c4d4468924864effced0de842cfc10  gcc/cobol/show_parse.h
! d75653f25ec3b747265e4ab78aa71521  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
! 1901ca81f1d02b934cfdb99894e2ce19  gcc/cobol/symbols.cc
! 29676519aa65820884a380e2464f0670  gcc/cobol/symbols.h
  036b7c0fd665dd2cee65ec858597b18f  gcc/cobol/symfind.cc
! a7b20717b0839af4783bead169c2ab02  gcc/cobol/token_names.h
  94ee230280ef44983fee5c81648f8669  gcc/cobol/udf/stored-char-length.cbl
! 5096c1ed5c707e83afb4d36022dc4393  gcc/cobol/util.cc
! ccf9c2bd04d50d1a9e737e478f1e01a3  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
  30202062ccc5696f6203f07ab6965763  gcc/collect2-aix.cc
*************** f842f1b8595f3ac795ba92c2b07085e6  gcc/co
*** 3403,3409 ****
  03a53ecd36b397fbe0846ead66505e2d  gcc/common/config/pa/pa-common.cc
  1fbcfc1a92bb13e4405bc75767cf8a36  gcc/common/config/pdp11/pdp11-common.cc
  7ee5967300d3c96a608eea63008aa893  gcc/common/config/pru/pru-common.cc
! 4f5f363a5e041f61ee63e4cc2df95f8a  gcc/common/config/riscv/riscv-common.cc
  8a5a4ee26b110f44497208d1b31e3503  gcc/common/config/riscv/riscv-ext-bitmask.def
  08537bef63b33fd56aeb2a292c9a207a  gcc/common/config/rs6000/rs6000-common.cc
  9ddaceac9f81b4798f64241b273f8e1c  gcc/common/config/rx/rx-common.cc
--- 3403,3409 ----
  03a53ecd36b397fbe0846ead66505e2d  gcc/common/config/pa/pa-common.cc
  1fbcfc1a92bb13e4405bc75767cf8a36  gcc/common/config/pdp11/pdp11-common.cc
  7ee5967300d3c96a608eea63008aa893  gcc/common/config/pru/pru-common.cc
! a8e9e29385848ea85274279c3db6e9c7  gcc/common/config/riscv/riscv-common.cc
  8a5a4ee26b110f44497208d1b31e3503  gcc/common/config/riscv/riscv-ext-bitmask.def
  08537bef63b33fd56aeb2a292c9a207a  gcc/common/config/rs6000/rs6000-common.cc
  9ddaceac9f81b4798f64241b273f8e1c  gcc/common/config/rx/rx-common.cc
*************** b5a916bb9dd788754ac9e4ad7174ee74  gcc/co
*** 3418,3424 ****
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 0b5955b5a3a665f768b928828bb7146e  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  1d528f9807496430cc01191e59f745d3  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
--- 3418,3424 ----
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! d3d293eca3338ab948f00527cdc0bad7  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  1d528f9807496430cc01191e59f745d3  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
*************** f931bc8e97c2f1358ad3ad91e902d553  gcc/co
*** 3451,3461 ****
  c9a52df251f3132f3562d3fffaa39c7b  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  b14ff14af09e35148ebaceacc90e59a7  gcc/config/aarch64/aarch64-passes.def
! 246544e41424822087bbec19b19c0e91  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
! 289754bc9c6eb2b3ec2ebb609d36de73  gcc/config/aarch64/aarch64-simd.md
  a6b5fef44720ac04efdf50efa092700a  gcc/config/aarch64/aarch64-sme.md
  221b858bba4517a3871cb07292c6b216  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
--- 3451,3461 ----
  c9a52df251f3132f3562d3fffaa39c7b  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  b14ff14af09e35148ebaceacc90e59a7  gcc/config/aarch64/aarch64-passes.def
! 4dd63ee4335a9fa37c33047e1c4e4974  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
! 84455a77397a60fecf4fc1b7438cceb5  gcc/config/aarch64/aarch64-simd.md
  a6b5fef44720ac04efdf50efa092700a  gcc/config/aarch64/aarch64-sme.md
  221b858bba4517a3871cb07292c6b216  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
*************** e2d80b89552da0c6b4cb6bede3b2e573  gcc/co
*** 3473,3487 ****
  2578221253cb8c19e9f778140a8cf9af  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! a379bc19ac24cd284fe7176d559dcd61  gcc/config/aarch64/aarch64-sve.md
! ba15eac226714e59e1ff1026c4e09ce0  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
  a2493e870eb12f5d646c24f2949e4cd3  gcc/config/aarch64/aarch64-vxworks.h
! 87c8f658f3443117d142a357314af0ea  gcc/config/aarch64/aarch64.cc
  4c2226a017b612867a61db1f7929ad43  gcc/config/aarch64/aarch64.h
! ae44971fb63fd65b641a39a184b11fb0  gcc/config/aarch64/aarch64.md
  84c23cd68c90a9be4b986aa7009ba1c9  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
--- 3473,3487 ----
  2578221253cb8c19e9f778140a8cf9af  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! ccb1f3e2a01fe07be7feaab29bf773d9  gcc/config/aarch64/aarch64-sve.md
! ba46ae529f856e893a1e7b589bd02f1a  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
  a2493e870eb12f5d646c24f2949e4cd3  gcc/config/aarch64/aarch64-vxworks.h
! b4294223a8f61bbe48e0f5b83c2ee14d  gcc/config/aarch64/aarch64.cc
  4c2226a017b612867a61db1f7929ad43  gcc/config/aarch64/aarch64.h
! 0a4ef861f9b32952abc7cecb404424ce  gcc/config/aarch64/aarch64.md
  84c23cd68c90a9be4b986aa7009ba1c9  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
*************** eafc8a2abc331243ea846fab22b8aec4  gcc/co
*** 3653,3660 ****
  485d7b0baab6c9abc2c56a9f6c467afb  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  a16ca2ab73b09afe4481044ebcec2010  gcc/config/arm/arm-tune.md
! 7d95ec920300fa051646557add91f019  gcc/config/arm/arm.cc
! fe5e2b24f803c40d73fe860e114fc6e0  gcc/config/arm/arm.h
  11e0d112671b369f4d182ac9d5c6066b  gcc/config/arm/arm.md
  a7974fb16c914604eacaf43120b8769f  gcc/config/arm/arm.opt
  d96083967a30e6eb0f75d624af2d831a  gcc/config/arm/arm.opt.urls
--- 3653,3660 ----
  485d7b0baab6c9abc2c56a9f6c467afb  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  a16ca2ab73b09afe4481044ebcec2010  gcc/config/arm/arm-tune.md
! 383fd8da0c618aec418c955a29b6f477  gcc/config/arm/arm.cc
! 0ada24c6acb631d40bb857f80959936a  gcc/config/arm/arm.h
  11e0d112671b369f4d182ac9d5c6066b  gcc/config/arm/arm.md
  a7974fb16c914604eacaf43120b8769f  gcc/config/arm/arm.opt
  d96083967a30e6eb0f75d624af2d831a  gcc/config/arm/arm.opt.urls
*************** ed2254bdda3903cf7bffcad423af98ae  gcc/co
*** 4134,4140 ****
  3880d2a102ee1c35b73e26dea425f8ed  gcc/config/i386/cpuid.h
  f700a1d35423658eaa2b4908da695bda  gcc/config/i386/cross-stdarg.h
  82964c7428d66bf1874c63a65b858957  gcc/config/i386/crtdll.h
! b5aa4c1203225b588ae08625bd7836af  gcc/config/i386/cygming.h
  f2a2f556815a6dc38e47cca165d51ea3  gcc/config/i386/cygwin-stdint.h
  1868c3b9e51f09941105430ebd8c2286  gcc/config/i386/cygwin-w64.h
  47570db058e06dc2ab076ed2f9cf4242  gcc/config/i386/cygwin.h
--- 4134,4140 ----
  3880d2a102ee1c35b73e26dea425f8ed  gcc/config/i386/cpuid.h
  f700a1d35423658eaa2b4908da695bda  gcc/config/i386/cross-stdarg.h
  82964c7428d66bf1874c63a65b858957  gcc/config/i386/crtdll.h
! a88cd1f0f7f1bf0a6d51c7239f2cf7a2  gcc/config/i386/cygming.h
  f2a2f556815a6dc38e47cca165d51ea3  gcc/config/i386/cygwin-stdint.h
  1868c3b9e51f09941105430ebd8c2286  gcc/config/i386/cygwin-w64.h
  47570db058e06dc2ab076ed2f9cf4242  gcc/config/i386/cygwin.h
*************** c242989ba84f31157338b4714b4248e1  gcc/co
*** 4174,4180 ****
  2afb8c15e388bbdb218228ca7c8afb72  gcc/config/i386/haswell.md
  ebf8fdac06861901e2744eb4d97b15c5  gcc/config/i386/host-cygwin.cc
  3d9c9e8494474be5ac7db986b95cbdcf  gcc/config/i386/host-i386-darwin.cc
! fdf4ae0ccca294b8f1ce4d53f2bbf5fa  gcc/config/i386/host-mingw32.cc
  c527fd639b424e1e0a95494e13e8cad2  gcc/config/i386/hresetintrin.h
  597ec35a360b8b37f5d1e4483b508834  gcc/config/i386/i386-builtin-types.awk
  5090ae3207d0bedc79ecdcec7c2cb71b  gcc/config/i386/i386-builtin-types.def
--- 4174,4180 ----
  2afb8c15e388bbdb218228ca7c8afb72  gcc/config/i386/haswell.md
  ebf8fdac06861901e2744eb4d97b15c5  gcc/config/i386/host-cygwin.cc
  3d9c9e8494474be5ac7db986b95cbdcf  gcc/config/i386/host-i386-darwin.cc
! 2df56b26eb137c3cee0794cd9a30c433  gcc/config/i386/host-mingw32.cc
  c527fd639b424e1e0a95494e13e8cad2  gcc/config/i386/hresetintrin.h
  597ec35a360b8b37f5d1e4483b508834  gcc/config/i386/i386-builtin-types.awk
  5090ae3207d0bedc79ecdcec7c2cb71b  gcc/config/i386/i386-builtin-types.def
*************** b1d3b888c9cd80df50837a2c205587f2  gcc/co
*** 4186,4193 ****
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
  d107f5e5a50d63132e88d2f92a6a05f3  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
! b3b6e74040dc468a021803029f49bddd  gcc/config/i386/i386-features.cc
! 94adc181549d171cf2618530e3b49ff7  gcc/config/i386/i386-features.h
  6eb6541c33da88d0910200287b50cdff  gcc/config/i386/i386-isa.def
  795643c7d23acf02568d7fa7acad0138  gcc/config/i386/i386-modes.def
  a97f792ecc42136eee12cf1271ed8254  gcc/config/i386/i386-options.cc
--- 4186,4193 ----
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
  d107f5e5a50d63132e88d2f92a6a05f3  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
! a5086796596eb262eebe02e357566970  gcc/config/i386/i386-features.cc
! fb530c14c39bd893098ee7672f916548  gcc/config/i386/i386-features.h
  6eb6541c33da88d0910200287b50cdff  gcc/config/i386/i386-isa.def
  795643c7d23acf02568d7fa7acad0138  gcc/config/i386/i386-modes.def
  a97f792ecc42136eee12cf1271ed8254  gcc/config/i386/i386-options.cc
*************** a97f792ecc42136eee12cf1271ed8254  gcc/co
*** 4198,4206 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! e066cf49641c4df5d5b8298eb977b6ba  gcc/config/i386/i386.cc
! ed3a6ea9477d8813136db1c5c04ec6b0  gcc/config/i386/i386.h
! fa3cd35b2b38f63138971b5f36570c66  gcc/config/i386/i386.md
  ea8b7d9e98fea8671919d0f7fad86757  gcc/config/i386/i386.opt
  56dd2039e03b3ae92142eb68be464b98  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
--- 4198,4206 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 223913cf535b646f8238ea58457783b8  gcc/config/i386/i386.cc
! e3623d578e96daf8701066579cfb6dd7  gcc/config/i386/i386.h
! 16210ad84699ffa38621d9d560fd063f  gcc/config/i386/i386.md
  ea8b7d9e98fea8671919d0f7fad86757  gcc/config/i386/i386.opt
  56dd2039e03b3ae92142eb68be464b98  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
*************** fc41e4ebf77dd1f54ddeec4e60428d5e  gcc/co
*** 4245,4251 ****
  1d9e8c2f64fa31f36bfe9ac83a296943  gcc/config/i386/pmmintrin.h
  62337355ef8c4334a0cc9c1db0cfc0da  gcc/config/i386/popcntintrin.h
  d17b84bc85c341e7f386b3b24b231070  gcc/config/i386/ppro.md
! 094acc8ef344ee92ca1457dd8099eab8  gcc/config/i386/predicates.md
  e10e34eef814ce6c5e09777d378d36d3  gcc/config/i386/prfchiintrin.h
  eed7a3601ce61f497dcfc5655e5da7a6  gcc/config/i386/prfchwintrin.h
  bc11b09d2de8ba6b9ec2392f1cebdbd9  gcc/config/i386/raointintrin.h
--- 4245,4251 ----
  1d9e8c2f64fa31f36bfe9ac83a296943  gcc/config/i386/pmmintrin.h
  62337355ef8c4334a0cc9c1db0cfc0da  gcc/config/i386/popcntintrin.h
  d17b84bc85c341e7f386b3b24b231070  gcc/config/i386/ppro.md
! d6bd6278617fe9d514e6ef828650ca74  gcc/config/i386/predicates.md
  e10e34eef814ce6c5e09777d378d36d3  gcc/config/i386/prfchiintrin.h
  eed7a3601ce61f497dcfc5655e5da7a6  gcc/config/i386/prfchwintrin.h
  bc11b09d2de8ba6b9ec2392f1cebdbd9  gcc/config/i386/raointintrin.h
*************** b4cde95b709fc93c90bf4d6b3edc7fd0  gcc/co
*** 4311,4317 ****
  78c5d4aaa3e531354ff15f5de8bbe5f6  gcc/config/i386/x-mingw32
  1453972221e67e9b66910b97c6444e98  gcc/config/i386/x-mingw32-utf8
  458dd4e367214623fc01b5e796d65485  gcc/config/i386/x86-64.h
! 164249291b528e4e1b7a1205948331f3  gcc/config/i386/x86-tune-costs.h
  17e3f95274600e3d41c671903847d8ec  gcc/config/i386/x86-tune-sched-atom.cc
  acfa3e6ce1f37bbad35e49e06b663ea9  gcc/config/i386/x86-tune-sched-bd.cc
  13fcb5234b2d8208c12932d96efef72b  gcc/config/i386/x86-tune-sched-core.cc
--- 4311,4317 ----
  78c5d4aaa3e531354ff15f5de8bbe5f6  gcc/config/i386/x-mingw32
  1453972221e67e9b66910b97c6444e98  gcc/config/i386/x-mingw32-utf8
  458dd4e367214623fc01b5e796d65485  gcc/config/i386/x86-64.h
! 1a8b58eefca19359fa5d02ee4f2d2d30  gcc/config/i386/x86-tune-costs.h
  17e3f95274600e3d41c671903847d8ec  gcc/config/i386/x86-tune-sched-atom.cc
  acfa3e6ce1f37bbad35e49e06b663ea9  gcc/config/i386/x86-tune-sched-bd.cc
  13fcb5234b2d8208c12932d96efef72b  gcc/config/i386/x86-tune-sched-core.cc
*************** d697f9dcab04ba2434d7a21bdd7fad59  gcc/co
*** 4557,4563 ****
  86740ad1c195e245467e5a71426dceb0  gcc/config/mingw/mingw-stdint.h
  fd57a92693a8dcf9e4ddd91ee77800d5  gcc/config/mingw/mingw.opt
  19d5796358fa93b7d6fe22a02604a407  gcc/config/mingw/mingw.opt.urls
! 32fba47e231d8585650326649503072a  gcc/config/mingw/mingw32.h
  1481c2fe532a4627555acec909c44e93  gcc/config/mingw/msformat-c.cc
  804488f591e9812eba4596b9f7120153  gcc/config/mingw/t-cygming
  4b984eaba49cfc32096447ecc8a8d30a  gcc/config/mingw/winnt-cxx.cc
--- 4557,4563 ----
  86740ad1c195e245467e5a71426dceb0  gcc/config/mingw/mingw-stdint.h
  fd57a92693a8dcf9e4ddd91ee77800d5  gcc/config/mingw/mingw.opt
  19d5796358fa93b7d6fe22a02604a407  gcc/config/mingw/mingw.opt.urls
! edc4c311c5ce51d78ae963c2bdf66fbf  gcc/config/mingw/mingw32.h
  1481c2fe532a4627555acec909c44e93  gcc/config/mingw/msformat-c.cc
  804488f591e9812eba4596b9f7120153  gcc/config/mingw/t-cygming
  4b984eaba49cfc32096447ecc8a8d30a  gcc/config/mingw/winnt-cxx.cc
*************** fd57a92693a8dcf9e4ddd91ee77800d5  gcc/co
*** 4565,4572 ****
  5ac3e65a2b4e8a0e77f19d4d0931ec03  gcc/config/mingw/winnt-dll.cc
  ce9dde5e44ad144027da2e35c7e97ef8  gcc/config/mingw/winnt-dll.h
  e4b2f8fb1d66b9d417e6a49457b25003  gcc/config/mingw/winnt-stubs.cc
! d0040e540d24db37c1679062c0dea169  gcc/config/mingw/winnt.cc
! fb5bca5a3689a97a5ae2f40b7432cfb7  gcc/config/mingw/winnt.h
  2dad819a1af61bda883b08c7310f4ced  gcc/config/mips/10000.md
  58b10461c7d9049333ab922d8faba17c  gcc/config/mips/20kc.md
  a07dd57521c3ce510a685b35c79f0bac  gcc/config/mips/24k.md
--- 4565,4572 ----
  5ac3e65a2b4e8a0e77f19d4d0931ec03  gcc/config/mingw/winnt-dll.cc
  ce9dde5e44ad144027da2e35c7e97ef8  gcc/config/mingw/winnt-dll.h
  e4b2f8fb1d66b9d417e6a49457b25003  gcc/config/mingw/winnt-stubs.cc
! 7650f27fe6bcaa8c653382a8f87f27f7  gcc/config/mingw/winnt.cc
! 324c4d27ae846cabeba6e2e64e6275f6  gcc/config/mingw/winnt.h
  2dad819a1af61bda883b08c7310f4ced  gcc/config/mips/10000.md
  58b10461c7d9049333ab922d8faba17c  gcc/config/mips/20kc.md
  a07dd57521c3ce510a685b35c79f0bac  gcc/config/mips/24k.md
*************** d6da8f84e5835bd14f146fc765bcb39d  gcc/co
*** 4895,4903 ****
  cd13b51383c99c08d86250b61fed3805  gcc/config/pru/pru.opt.urls
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
! 81827306988efad07b1063e86fed4fba  gcc/config/riscv/autovec-opt.md
  4032274539da6915927b3fb611848f38  gcc/config/riscv/autovec.md
! 15bc9c31100152784b51ee2899408f51  gcc/config/riscv/bitmanip.md
  0a28e5e046394c81a6a87e3ee05c1df9  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
  d404c19d5b1a2aca0a73917bb692bd96  gcc/config/riscv/corev.md
--- 4895,4903 ----
  cd13b51383c99c08d86250b61fed3805  gcc/config/pru/pru.opt.urls
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
! 16012b91acb33dc648282832bd8ef1b5  gcc/config/riscv/autovec-opt.md
  4032274539da6915927b3fb611848f38  gcc/config/riscv/autovec.md
! a76fc69ac639b44a9d8c4ec7520c0e75  gcc/config/riscv/bitmanip.md
  0a28e5e046394c81a6a87e3ee05c1df9  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
  d404c19d5b1a2aca0a73917bb692bd96  gcc/config/riscv/corev.md
*************** a8964e5c7fad78fa42fc5b8f0dc2e91b  gcc/co
*** 4907,4920 ****
  fdf40414be0404faa2f689ccff02d68d  gcc/config/riscv/generic-ooo.md
  a124ceec225b4a292b25b31a9a635a5e  gcc/config/riscv/generic-vector-ooo.md
  b7e955ddfed9efbb0296ef639c095e2a  gcc/config/riscv/generic.md
! 61d4e45605684724c79f183b08672f37  gcc/config/riscv/genrvv-type-indexer.cc
  473ed80ccf8dc1ff43e427a45cca3a1e  gcc/config/riscv/gnu.h
! 7f6f44ba18fbe0b711e3714cfd11006e  gcc/config/riscv/iterators.md
  85139511ec0cad0144207dc8efc0ed90  gcc/config/riscv/linux.h
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
! 3d61850acd950a0bca784aa5c7375de7  gcc/config/riscv/predicates.md
  d7a63bbbf6653fc311084e8bb09d713b  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  f85cbab1d6c91f626b6e4c56c31f8eb3  gcc/config/riscv/riscv-c.cc
--- 4907,4920 ----
  fdf40414be0404faa2f689ccff02d68d  gcc/config/riscv/generic-ooo.md
  a124ceec225b4a292b25b31a9a635a5e  gcc/config/riscv/generic-vector-ooo.md
  b7e955ddfed9efbb0296ef639c095e2a  gcc/config/riscv/generic.md
! d8e970a7377ae8ee7892f014d5bbc979  gcc/config/riscv/genrvv-type-indexer.cc
  473ed80ccf8dc1ff43e427a45cca3a1e  gcc/config/riscv/gnu.h
! 4e30eb4d51786f677ce1c181647193e1  gcc/config/riscv/iterators.md
  85139511ec0cad0144207dc8efc0ed90  gcc/config/riscv/linux.h
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
! 524361cff2d291f40d597f932bdcb3d0  gcc/config/riscv/predicates.md
  d7a63bbbf6653fc311084e8bb09d713b  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  f85cbab1d6c91f626b6e4c56c31f8eb3  gcc/config/riscv/riscv-c.cc
*************** f039a446b908189e7bac54e9eed4aa0e  gcc/co
*** 4925,4942 ****
  1b0b6b632f747d9387ef25821e8673b4  gcc/config/riscv/riscv-feature-bits.h
  b467d35485b39b25863e918609a322d0  gcc/config/riscv/riscv-ftypes.def
  b1bc6d82a24b7b0e658a43956a37419c  gcc/config/riscv/riscv-modes.def
! 2b3bbaf831944c3ad3b4219f260ade71  gcc/config/riscv/riscv-opts.h
! 028368b39011fff2cdc58337d388aaa8  gcc/config/riscv/riscv-passes.def
! cc4d538f7d66895b427db54b9660a953  gcc/config/riscv/riscv-protos.h
  446f0f39c6f980e246ea56f1233e9271  gcc/config/riscv/riscv-scalar-crypto.def
  8599f55379a8c8fc0b569c7401645a66  gcc/config/riscv/riscv-selftests.cc
  4c94b064f758f7bdf05e99a02b8e15ed  gcc/config/riscv/riscv-shorten-memrefs.cc
  62b31689063eeeca8f0e7ae25da92d0a  gcc/config/riscv/riscv-sr.cc
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
! 6e4e2a0f934c6d930c9d9243d5c89f92  gcc/config/riscv/riscv-subset.h
  be3e0da2403121c429e21501de9c9b5f  gcc/config/riscv/riscv-target-attr.cc
  4cbbf5da024adfc46f4d953b73b5e9b3  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
  689f453a4cdf7fa3e64a7f4bfba8f7dd  gcc/config/riscv/riscv-vector-builtins-bases.h
  bdc5f6caf56fd0411faf705e9c32ccd4  gcc/config/riscv/riscv-vector-builtins-functions.def
--- 4925,4943 ----
  1b0b6b632f747d9387ef25821e8673b4  gcc/config/riscv/riscv-feature-bits.h
  b467d35485b39b25863e918609a322d0  gcc/config/riscv/riscv-ftypes.def
  b1bc6d82a24b7b0e658a43956a37419c  gcc/config/riscv/riscv-modes.def
! 17bdf7a6151e24ef0620d05b563759d1  gcc/config/riscv/riscv-opts.h
! 2c59654f5f7fe2689efd370c0441b6bd  gcc/config/riscv/riscv-passes.def
! 02bd5d07b4bddc7504151f3f1e2aee01  gcc/config/riscv/riscv-protos.h
  446f0f39c6f980e246ea56f1233e9271  gcc/config/riscv/riscv-scalar-crypto.def
  8599f55379a8c8fc0b569c7401645a66  gcc/config/riscv/riscv-selftests.cc
  4c94b064f758f7bdf05e99a02b8e15ed  gcc/config/riscv/riscv-shorten-memrefs.cc
  62b31689063eeeca8f0e7ae25da92d0a  gcc/config/riscv/riscv-sr.cc
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
! 83d157e0773f265cbf4c3c1da7f147e9  gcc/config/riscv/riscv-subset.h
  be3e0da2403121c429e21501de9c9b5f  gcc/config/riscv/riscv-target-attr.cc
  4cbbf5da024adfc46f4d953b73b5e9b3  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
+ c5d0fc7f3c761408e16bbc7f6f2aa300  gcc/config/riscv/riscv-vect-permconst.cc
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
  689f453a4cdf7fa3e64a7f4bfba8f7dd  gcc/config/riscv/riscv-vector-builtins-bases.h
  bdc5f6caf56fd0411faf705e9c32ccd4  gcc/config/riscv/riscv-vector-builtins-functions.def
*************** bdc5f6caf56fd0411faf705e9c32ccd4  gcc/co
*** 4946,4961 ****
  54b6fa3d472102d0e97af63d437cf5dd  gcc/config/riscv/riscv-vector-builtins.cc
  74c291180c302842c646af24c77d184c  gcc/config/riscv/riscv-vector-builtins.def
  f75c79d146d75e5489bb9983fcdd05f6  gcc/config/riscv/riscv-vector-builtins.h
! 3ab2c03f8df3835afe50fe4842b35c33  gcc/config/riscv/riscv-vector-costs.cc
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
  9a0be0e3c4d4b0eec09eef7dee2a028a  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 16405221848e3a8449963c23eb4e7478  gcc/config/riscv/riscv.cc
  1153302a8d65cedebba8e1a3f67931b2  gcc/config/riscv/riscv.h
! ee951805d90d51373854e72950fffa3d  gcc/config/riscv/riscv.md
! c799356a57b52ab91ff324ab22516fba  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
  a8044652cefd826404f261518f9e2321  gcc/config/riscv/riscv_crypto.h
--- 4947,4962 ----
  54b6fa3d472102d0e97af63d437cf5dd  gcc/config/riscv/riscv-vector-builtins.cc
  74c291180c302842c646af24c77d184c  gcc/config/riscv/riscv-vector-builtins.def
  f75c79d146d75e5489bb9983fcdd05f6  gcc/config/riscv/riscv-vector-builtins.h
! 7a7cc1051558e6d9890d9fc402d76691  gcc/config/riscv/riscv-vector-costs.cc
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
  9a0be0e3c4d4b0eec09eef7dee2a028a  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! cd2389592a4623623274e8541e006f52  gcc/config/riscv/riscv.cc
  1153302a8d65cedebba8e1a3f67931b2  gcc/config/riscv/riscv.h
! 03c4b28769423854beeddf4f8fc50582  gcc/config/riscv/riscv.md
! 976a4e1262545091aeff1fdadb127c0d  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
  a8044652cefd826404f261518f9e2321  gcc/config/riscv/riscv_crypto.h
*************** faca69fa18f3f779cd3ee4d6a53e6193  gcc/co
*** 4977,4983 ****
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
! eeb5331a1eeca9299967d7177826ce33  gcc/config/riscv/t-riscv
  51c5ea17e60737c695a38285dfce555d  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
--- 4978,4984 ----
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
! 7bb03c123ce859ee7eba92f52b5205d3  gcc/config/riscv/t-riscv
  51c5ea17e60737c695a38285dfce555d  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
*************** bcf728ad2379630774fd5bb529d4ee86  gcc/co
*** 4988,4994 ****
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! 073c4a219e9c43d9d1bea059e2275722  gcc/config/riscv/vector-iterators.md
  2aac5fc6721c093a0f679d0e14d196e1  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
--- 4989,4995 ----
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! 2ec1c8b2689f478526f7c8d1e873d766  gcc/config/riscv/vector-iterators.md
  2aac5fc6721c093a0f679d0e14d196e1  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
*************** d7112093049d4abbc421609d032b7358  gcc/co
*** 5216,5225 ****
  107e065c4a74bb968d44f38ee30d0698  gcc/config/s390/s390-modes.def
  6fdfe66fdde3f81b83dc16c27ac7df3f  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
! 4bbcb1bde4546fee12249a01f76cb56e  gcc/config/s390/s390-protos.h
! 4ac63e901157d3dc66a54e981bffe9e7  gcc/config/s390/s390.cc
  f162b44703353c72956061efcbe580d7  gcc/config/s390/s390.h
! a71dab2465c50a816144f258baf600b7  gcc/config/s390/s390.md
  fa4475320c7a3767bf9accfa736efcc6  gcc/config/s390/s390.opt
  a70af895ec82511886ce63dc841e63e1  gcc/config/s390/s390.opt.urls
  b9ecea5f97b2e15b60d770050a07f0d1  gcc/config/s390/s390intrin.h
--- 5217,5226 ----
  107e065c4a74bb968d44f38ee30d0698  gcc/config/s390/s390-modes.def
  6fdfe66fdde3f81b83dc16c27ac7df3f  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
! 94c7aecc0d353c9aa984b4bcea01590b  gcc/config/s390/s390-protos.h
! 75525747a5d69b03b677bbd985184c99  gcc/config/s390/s390.cc
  f162b44703353c72956061efcbe580d7  gcc/config/s390/s390.h
! b42cac4e5bd67eda61880170ca30e9a1  gcc/config/s390/s390.md
  fa4475320c7a3767bf9accfa736efcc6  gcc/config/s390/s390.opt
  a70af895ec82511886ce63dc841e63e1  gcc/config/s390/s390.opt.urls
  b9ecea5f97b2e15b60d770050a07f0d1  gcc/config/s390/s390intrin.h
*************** dfb9fde7c7559a50905b02c01b6d6ee8  gcc/co
*** 5232,5238 ****
  bc0fb519f0c53f7b5e44aadede6fbfad  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  d225211a59c66716b9cad3d9a2f13af4  gcc/config/s390/vecintrin.h
! 351ea2661de2b72c12795611857698d3  gcc/config/s390/vector.md
  8f88205b80cb5c8a16a0f55c1bbc53ab  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  f9d87cd50e032287752597f9c084e3f5  gcc/config/sh/constraints.md
--- 5233,5239 ----
  bc0fb519f0c53f7b5e44aadede6fbfad  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  d225211a59c66716b9cad3d9a2f13af4  gcc/config/s390/vecintrin.h
! 3aa76d8e6405963faa51d0151f8e3a34  gcc/config/s390/vector.md
  8f88205b80cb5c8a16a0f55c1bbc53ab  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  f9d87cd50e032287752597f9c084e3f5  gcc/config/sh/constraints.md
*************** f3a2992c8e85b13e50b261e26924d83f  gcc/co
*** 5481,5493 ****
  87fc5c87547999f715031b4ff99fb67b  gcc/config/xtensa/xtensa-dynconfig.cc
  c7be35a23fd70ac184dd9072319304c7  gcc/config/xtensa/xtensa-opts.h
  e59f31891252abdd41eedc784b25ed6b  gcc/config/xtensa/xtensa-protos.h
! f871bc00d7e05c10ef5277cad8f27aa4  gcc/config/xtensa/xtensa.cc
  5cb04061b3da377a69382a940d1039cf  gcc/config/xtensa/xtensa.h
  6c41f581d014120fecf4738375010780  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! b31a0fb032d9e72293dcb11bb6da520a  gcc/configure
! 627e2a993a728ff76a6527cfbcb997ce  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
--- 5482,5494 ----
  87fc5c87547999f715031b4ff99fb67b  gcc/config/xtensa/xtensa-dynconfig.cc
  c7be35a23fd70ac184dd9072319304c7  gcc/config/xtensa/xtensa-opts.h
  e59f31891252abdd41eedc784b25ed6b  gcc/config/xtensa/xtensa-protos.h
! debcbe0ab4271c29f9e7f149f11b27ff  gcc/config/xtensa/xtensa.cc
  5cb04061b3da377a69382a940d1039cf  gcc/config/xtensa/xtensa.h
  6c41f581d014120fecf4738375010780  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 5583738d9d6612bf0f58bc6646eb1048  gcc/configure
! 557acf946ffe45f6e70048ecf9601f9c  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5497,5503 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  2a5216aefb9cdf4b270ef8e599cc794f  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 44e7ae293ced49359e39f550ef0a4e4c  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5498,5504 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  2a5216aefb9cdf4b270ef8e599cc794f  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 31fcabe56eef97f8c127a2c5979f79a1  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp
*** 5536,5542 ****
  b09d7ab3506bc7d8aeef0ddfbca588a9  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! 2c38ad8854ef986bb8ebfa18a19b2624  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
  f749639c06fb1a8e259bd762fd131b3f  gcc/cp/constexpr.cc
  d132f7f4c080ce3048977e23e33b9b1c  gcc/cp/constraint.cc
--- 5537,5543 ----
  b09d7ab3506bc7d8aeef0ddfbca588a9  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! 41859d8bfc4d47833b075577add8363c  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
  f749639c06fb1a8e259bd762fd131b3f  gcc/cp/constexpr.cc
  d132f7f4c080ce3048977e23e33b9b1c  gcc/cp/constraint.cc
*************** a46a06074cd68181251e3541b4689021  gcc/cp
*** 5551,5557 ****
  7475950f94ad8c7218f451feb5e71424  gcc/cp/cp-objcp-common.h
  6a7554ee20d49ef2b66e0b7cc2a696a1  gcc/cp/cp-trait.def
  ce9f2ccac9e2657417018bc8f8064421  gcc/cp/cp-tree.def
! f0f0504609d2f255a498fa42ebf6a8a1  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
  64450079a2dd9e5a8767bb5e4bf3d904  gcc/cp/cvt.cc
  28a2733b7abed60b2b102105bb7cebaf  gcc/cp/cxx-pretty-print.cc
--- 5552,5558 ----
  7475950f94ad8c7218f451feb5e71424  gcc/cp/cp-objcp-common.h
  6a7554ee20d49ef2b66e0b7cc2a696a1  gcc/cp/cp-trait.def
  ce9f2ccac9e2657417018bc8f8064421  gcc/cp/cp-tree.def
! 44182fbb2fc0412c377220ce5e905f04  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
  64450079a2dd9e5a8767bb5e4bf3d904  gcc/cp/cvt.cc
  28a2733b7abed60b2b102105bb7cebaf  gcc/cp/cxx-pretty-print.cc
*************** e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp
*** 5559,5565 ****
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
  b527af0ab311117213e40060ee8c0021  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! e0410cc035ac7d226e68eb3547437d74  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  fb321e18e88028e7fd051da3ec4f5b6e  gcc/cp/error.cc
  86f47b28d673601022d0205cdd718f9d  gcc/cp/except.cc
--- 5560,5566 ----
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
  b527af0ab311117213e40060ee8c0021  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! ed25471eb9a7b0ed8426ac5beaf6af03  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  fb321e18e88028e7fd051da3ec4f5b6e  gcc/cp/error.cc
  86f47b28d673601022d0205cdd718f9d  gcc/cp/except.cc
*************** e7fe06956aada61bcaae5168ad47a9c1  gcc/cp
*** 5584,5590 ****
  e307cd2481b4d87a27cab40dea7c3afb  gcc/cp/optimize.cc
  3ef702d4f34b8fcb5f764ceed2514988  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
! e3ed13c4fad4730183f56b8d6e75a054  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  0ead9094e2e0b9fd6034c5cb83e232a8  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
--- 5585,5591 ----
  e307cd2481b4d87a27cab40dea7c3afb  gcc/cp/optimize.cc
  3ef702d4f34b8fcb5f764ceed2514988  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
! 6902e462a11e0c76b51f0a4dda7d8db8  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  0ead9094e2e0b9fd6034c5cb83e232a8  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
*************** b9d078b88658c87d713e175705b687be  gcc/df
*** 5879,5893 ****
  66523dd93f89ddda9400b525ef7736b9  gcc/dfp.cc
  3a50d04564ba93f9be134a744fdd40f1  gcc/dfp.h
  aa13c8ce0ee0d35ca8e78fef45b93463  gcc/diagnostic-buffer.h
! 2fa0c5aeaa9f47417aaa1d8823bf1d4d  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
! 8591e605da96c7b429014b975bd4f939  gcc/diagnostic-format-json.cc
! 905419ea56e05ddee3330ac69cef4617  gcc/diagnostic-format-sarif.cc
! 8c3e84e768fb17143e1d3ae5de31e6ee  gcc/diagnostic-format-sarif.h
  0be3d31017b5c71132af3b72e12f5de2  gcc/diagnostic-format-text.cc
  66be909d880de2f75a896a45bf395ab6  gcc/diagnostic-format-text.h
  b5c51195e6a718f41eac587ecac1bc2f  gcc/diagnostic-format.h
--- 5880,5896 ----
  66523dd93f89ddda9400b525ef7736b9  gcc/dfp.cc
  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
! a8b9600d40f3d24d0da0014591732104  gcc/diagnostic-format-html.cc
! 6641ef1cb8f529ccd664b0be9825f5a0  gcc/diagnostic-format-html.h
! d306b1c2d243e470e6dace9e9b9feb76  gcc/diagnostic-format-json.cc
! 61f95df5bdbef545f0ad3dd04e2d5ac3  gcc/diagnostic-format-sarif.cc
! 1b19f73dad314e0e6051d3657540cf0c  gcc/diagnostic-format-sarif.h
  0be3d31017b5c71132af3b72e12f5de2  gcc/diagnostic-format-text.cc
  66be909d880de2f75a896a45bf395ab6  gcc/diagnostic-format-text.h
  b5c51195e6a718f41eac587ecac1bc2f  gcc/diagnostic-format.h
*************** e472f6066cc64e9f1cee0136404f0751  gcc/di
*** 5898,5912 ****
  124a9446918f0c1e7a8586ac4aea6729  gcc/diagnostic-macro-unwinding.h
  065e0c81be159417eacd100742107ecc  gcc/diagnostic-metadata.h
  e32f47c03714e4be891aef1903c8a04f  gcc/diagnostic-output-file.h
! 94992fc0d21e0b6802109ee5a5c94ff8  gcc/diagnostic-path.cc
! f9aa42c3949fe8350dd491e4c2322156  gcc/diagnostic-path.h
  f076eff7f3e051217ab4840269c685f8  gcc/diagnostic-show-locus.cc
  81a24429bc8eb52cbe24d574c6ec7e53  gcc/diagnostic-spec.cc
  375a39d1eff397ae7fcdce6e05c76d50  gcc/diagnostic-spec.h
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
! 78d057bdc9291db521b1bc4681e81239  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
! 7d15099f66e7f83cf41f108f6a512aec  gcc/diagnostic.h
  bec68218d528467fd119bf2cd02bc358  gcc/digraph.cc
  18e73120a6e21ceac1adce40777000cf  gcc/digraph.h
  bb82bca6383082ead28f6f21f0a6223f  gcc/doc/analyzer.texi
--- 5901,5915 ----
  124a9446918f0c1e7a8586ac4aea6729  gcc/diagnostic-macro-unwinding.h
  065e0c81be159417eacd100742107ecc  gcc/diagnostic-metadata.h
  e32f47c03714e4be891aef1903c8a04f  gcc/diagnostic-output-file.h
! f2ff47d3ccd0c593ec36e3b0d7623c81  gcc/diagnostic-path.cc
! c8cf51c44328a35a27753d130a351bd5  gcc/diagnostic-path.h
  f076eff7f3e051217ab4840269c685f8  gcc/diagnostic-show-locus.cc
  81a24429bc8eb52cbe24d574c6ec7e53  gcc/diagnostic-spec.cc
  375a39d1eff397ae7fcdce6e05c76d50  gcc/diagnostic-spec.h
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
! 63780c4dae685b261355641df247f399  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
! 133cbf0d28595e70f7bb74f62e112850  gcc/diagnostic.h
  bec68218d528467fd119bf2cd02bc358  gcc/digraph.cc
  18e73120a6e21ceac1adce40777000cf  gcc/digraph.h
  bb82bca6383082ead28f6f21f0a6223f  gcc/doc/analyzer.texi
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 5949,5967 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  9452a1b0e4db9a14ba8f8806961ae80b  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! ba15f6a2f3975e8834682b471221cdb7  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
  8258127c283eb86e07e4235453e8f336  gcc/doc/libgdiagnostics/conf.py
  ad0e2d047092c8659655e677a43966ee  gcc/doc/libgdiagnostics/index.rst
  642a964912e66e816e321e71891b81ec  gcc/doc/libgdiagnostics/make.bat
  6848bc36bd1b675b84d5b8aec59685d8  gcc/doc/libgdiagnostics/topics/diagnostic-manager.rst
  a7bea9ecf04c0cd9ecf9672ecf8322c5  gcc/doc/libgdiagnostics/topics/diagnostics.rst
  1f63cad855ba6a1f526a9e6f34fad68a  gcc/doc/libgdiagnostics/topics/execution-paths.rst
  250f44ab2a231fb8b791329c27af8d3f  gcc/doc/libgdiagnostics/topics/fix-it-hints.rst
! ce3511358078b3f41b7c86f1926c6b62  gcc/doc/libgdiagnostics/topics/index.rst
! 40a69a2a595294939ac9d6c444460ced  gcc/doc/libgdiagnostics/topics/logical-locations.rst
  94567ac644895fb88b40155f06787984  gcc/doc/libgdiagnostics/topics/message-formatting.rst
  40685321954d4fa5d32a979167f6cb18  gcc/doc/libgdiagnostics/topics/metadata.rst
  183c104feaddaeab02d7705dce8f67d4  gcc/doc/libgdiagnostics/topics/physical-locations.rst
--- 5952,5971 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  9452a1b0e4db9a14ba8f8806961ae80b  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 96a956d6c2497c2bc24abab9803526dd  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
  8258127c283eb86e07e4235453e8f336  gcc/doc/libgdiagnostics/conf.py
  ad0e2d047092c8659655e677a43966ee  gcc/doc/libgdiagnostics/index.rst
  642a964912e66e816e321e71891b81ec  gcc/doc/libgdiagnostics/make.bat
+ 80b3df289b601fdf68437b788fcf8039  gcc/doc/libgdiagnostics/topics/compatibility.rst
  6848bc36bd1b675b84d5b8aec59685d8  gcc/doc/libgdiagnostics/topics/diagnostic-manager.rst
  a7bea9ecf04c0cd9ecf9672ecf8322c5  gcc/doc/libgdiagnostics/topics/diagnostics.rst
  1f63cad855ba6a1f526a9e6f34fad68a  gcc/doc/libgdiagnostics/topics/execution-paths.rst
  250f44ab2a231fb8b791329c27af8d3f  gcc/doc/libgdiagnostics/topics/fix-it-hints.rst
! 42c179743a08d689881479616e6b6d87  gcc/doc/libgdiagnostics/topics/index.rst
! 0b3e6a74a7440c5c5b5183b821cc7295  gcc/doc/libgdiagnostics/topics/logical-locations.rst
  94567ac644895fb88b40155f06787984  gcc/doc/libgdiagnostics/topics/message-formatting.rst
  40685321954d4fa5d32a979167f6cb18  gcc/doc/libgdiagnostics/topics/metadata.rst
  183c104feaddaeab02d7705dce8f67d4  gcc/doc/libgdiagnostics/topics/physical-locations.rst
*************** fd3bf27e33907464460ab9208cdd2240  gcc/do
*** 5999,6005 ****
  06d0869eb2bec892f989f31bcd7da233  gcc/doc/tm.texi.in
  c4168f9f01adf4dd8adc647c04107142  gcc/doc/tree-ssa.texi
  ae9630d440297a3022b231623c8406fc  gcc/doc/trouble.texi
! f9298f5f9c283444a4eda432afe4cbb4  gcc/doc/ux.texi
  a1be2415e4997dcc307935ed9a162b33  gcc/dojump.cc
  b0e42f8859b351c85a95aef45fde4bb0  gcc/dojump.h
  ec551149b4d908a5cc9e68b1f75c2afa  gcc/dominance.cc
--- 6003,6009 ----
  06d0869eb2bec892f989f31bcd7da233  gcc/doc/tm.texi.in
  c4168f9f01adf4dd8adc647c04107142  gcc/doc/tree-ssa.texi
  ae9630d440297a3022b231623c8406fc  gcc/doc/trouble.texi
! b94b7a4d6266f1e322684f068256dad9  gcc/doc/ux.texi
  a1be2415e4997dcc307935ed9a162b33  gcc/dojump.cc
  b0e42f8859b351c85a95aef45fde4bb0  gcc/dojump.h
  ec551149b4d908a5cc9e68b1f75c2afa  gcc/dominance.cc
*************** c2aaa943f52a93ac601eb2571747ce3f  gcc/do
*** 6008,6014 ****
  8f4782b8e70ef348f013d1ae50051f97  gcc/domwalk.h
  6ae0851ed68d2cc21f533a4af7284561  gcc/double-int.cc
  36e421802c745ad35ea5d36bb0f28dce  gcc/double-int.h
! 5bc1432e516f98ab8531edc9619d1085  gcc/dse.cc
  af0971ba9c5420512d37fa9e39c93077  gcc/dump-context.h
  5ccd6da562821d5e9409303de179ca23  gcc/dumpfile.cc
  8670da1568e881564969be1aa91c7260  gcc/dumpfile.h
--- 6012,6018 ----
  8f4782b8e70ef348f013d1ae50051f97  gcc/domwalk.h
  6ae0851ed68d2cc21f533a4af7284561  gcc/double-int.cc
  36e421802c745ad35ea5d36bb0f28dce  gcc/double-int.h
! 7b5eb9e4eed4806160ff0f72ad03915f  gcc/dse.cc
  af0971ba9c5420512d37fa9e39c93077  gcc/dump-context.h
  5ccd6da562821d5e9409303de179ca23  gcc/dumpfile.cc
  8670da1568e881564969be1aa91c7260  gcc/dumpfile.h
*************** e518c37d94908385da07142b92ea8cdb  gcc/dw
*** 6019,6025 ****
  186b01005d892edba3b03fc17bd0dc8f  gcc/dwarf2codeview.h
  baaae59ceda4df837a6f62ffb0f29ee7  gcc/dwarf2ctf.cc
  1d0191caafac1774f50a47175d915ea0  gcc/dwarf2ctf.h
! a510c5f6cb185981b4d5871ef70f5ab2  gcc/dwarf2out.cc
  7ff70632352b65c214e02360ed6d6aae  gcc/dwarf2out.h
  fdd976759ee89958c91a4010e53c0f02  gcc/early-remat.cc
  e0339faf7da1ffc9030bc3a53b41cc1c  gcc/edit-context.cc
--- 6023,6029 ----
  186b01005d892edba3b03fc17bd0dc8f  gcc/dwarf2codeview.h
  baaae59ceda4df837a6f62ffb0f29ee7  gcc/dwarf2ctf.cc
  1d0191caafac1774f50a47175d915ea0  gcc/dwarf2ctf.h
! f66ca867874a951d1208d335f597c04f  gcc/dwarf2out.cc
  7ff70632352b65c214e02360ed6d6aae  gcc/dwarf2out.h
  fdd976759ee89958c91a4010e53c0f02  gcc/early-remat.cc
  e0339faf7da1ffc9030bc3a53b41cc1c  gcc/edit-context.cc
*************** a798cdca802a57ffa3473ab610b37c86  gcc/fo
*** 6057,6063 ****
  1ab71911154b1105730df248fcbb5ce7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! d1b355050d454d6d7d1c241e2a719e53  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6061,6067 ----
  1ab71911154b1105730df248fcbb5ce7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! e0a0cdc3a6b109d1c97e0743ae65e9e0  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** db21881c77a22fd3dbfe253c364af5ee  gcc/fo
*** 6087,6093 ****
  6b01ec523f3bee8e2469370d106896e3  gcc/fortran/arith.h
  1f47886d616538f880e240f661990624  gcc/fortran/array.cc
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
! 812dd35f27393074dc40efeb1306e4ba  gcc/fortran/check.cc
  ec152c8d16c33705590d8b2ddbcad0b7  gcc/fortran/class.cc
  60b1462a2f8d5fc08582de65eb85c8da  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
--- 6091,6097 ----
  6b01ec523f3bee8e2469370d106896e3  gcc/fortran/arith.h
  1f47886d616538f880e240f661990624  gcc/fortran/array.cc
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
! e62c0dddc621d789069283909758290a  gcc/fortran/check.cc
  ec152c8d16c33705590d8b2ddbcad0b7  gcc/fortran/class.cc
  60b1462a2f8d5fc08582de65eb85c8da  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
*************** b7e224f665bb5044ce35ed09435bd4fb  gcc/fo
*** 6099,6105 ****
  8f33d3cd143f8abd7293e089afa94452  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
  5eb64efcc949ffd1b8a68b073277aead  gcc/fortran/decl.cc
! 917fd2716f1eef2f47d4f032e14958ad  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  6d20731255b02e4f2f921333bee171f3  gcc/fortran/dump-parse-tree.cc
  860343539ea7488e7bb44b94ea2b0f77  gcc/fortran/error.cc
--- 6103,6109 ----
  8f33d3cd143f8abd7293e089afa94452  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
  5eb64efcc949ffd1b8a68b073277aead  gcc/fortran/decl.cc
! c33e2c4c7527bec8a125dd093dc59f2a  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  6d20731255b02e4f2f921333bee171f3  gcc/fortran/dump-parse-tree.cc
  860343539ea7488e7bb44b94ea2b0f77  gcc/fortran/error.cc
*************** d85e2f2fc3ee4721563bd47719063fb6  gcc/fo
*** 6108,6117 ****
  e188a9b3cb73106cab46a15d36a12b66  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
! cf57c5801670d8dfd9444fefa9c0d1fd  gcc/fortran/gfortran.h
  d29bb6813221f46b4cde9df77292c412  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! 208c95af2cf8c8baaea7c1bf24ffd2d3  gcc/fortran/interface.cc
  9e9287904be19f52fa94c40d2683cfe8  gcc/fortran/intrinsic.cc
  70dd32ae163321b5491726a011e7b091  gcc/fortran/intrinsic.h
  9652060587347896bf4e055031c0beab  gcc/fortran/intrinsic.texi
--- 6112,6121 ----
  e188a9b3cb73106cab46a15d36a12b66  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
! 257d005ac9f4aaa1bdbef32fa2ebf950  gcc/fortran/gfortran.h
  d29bb6813221f46b4cde9df77292c412  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! 5b932ef150fbb2f40ad9da6a623f8cfe  gcc/fortran/interface.cc
  9e9287904be19f52fa94c40d2683cfe8  gcc/fortran/intrinsic.cc
  70dd32ae163321b5491726a011e7b091  gcc/fortran/intrinsic.h
  9652060587347896bf4e055031c0beab  gcc/fortran/intrinsic.texi
*************** e1af2a4e4b63d9970c78a257f54cd3b2  gcc/fo
*** 6125,6131 ****
  2e69cb4e17cc2e89fd21228231798659  gcc/fortran/lang.opt
  9c43410ca32214bfab9763966c01547a  gcc/fortran/lang.opt.urls
  33cf77e4943bfb687d3a0bd5fa94ec58  gcc/fortran/libgfortran.h
! cf8dcd2e7c13e6297aa5601df3eec7f9  gcc/fortran/match.cc
  047778859aa899389e3b7e65c1439faa  gcc/fortran/match.h
  8181d5e935b96288d9a51fb8138faefb  gcc/fortran/matchexp.cc
  297213add624aabc75e1e83d2e504eef  gcc/fortran/mathbuiltins.def
--- 6129,6135 ----
  2e69cb4e17cc2e89fd21228231798659  gcc/fortran/lang.opt
  9c43410ca32214bfab9763966c01547a  gcc/fortran/lang.opt.urls
  33cf77e4943bfb687d3a0bd5fa94ec58  gcc/fortran/libgfortran.h
! 7c68f69965e5bb49d258d83ab6cb2fdd  gcc/fortran/match.cc
  047778859aa899389e3b7e65c1439faa  gcc/fortran/match.h
  8181d5e935b96288d9a51fb8138faefb  gcc/fortran/matchexp.cc
  297213add624aabc75e1e83d2e504eef  gcc/fortran/mathbuiltins.def
*************** cf8dcd2e7c13e6297aa5601df3eec7f9  gcc/fo
*** 6135,6142 ****
  8376eba2060129f13c5146a7773b2af7  gcc/fortran/options.cc
  481905febb41a25db05b80d06034bc70  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
! 593d202178567cbd7b52997dbd200869  gcc/fortran/primary.cc
! f58d6a59af07f403c22a8ca80d18abb5  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  5cf8b6765becb264ea43ca1b370e393a  gcc/fortran/simplify.cc
--- 6139,6146 ----
  8376eba2060129f13c5146a7773b2af7  gcc/fortran/options.cc
  481905febb41a25db05b80d06034bc70  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
! 1cf1562d97db565ece685237001c2e59  gcc/fortran/primary.cc
! 7fc2fd902b48117f13bad728f15d6cf0  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  5cf8b6765becb264ea43ca1b370e393a  gcc/fortran/simplify.cc
*************** f64d06b1e52d45504c386a430738dccf  gcc/fo
*** 6156,6162 ****
  0ea370a601d81713b8f4041c3d21cedf  gcc/fortran/trans-openmp.cc
  0396764dfdf16466c5e59e1744c93a42  gcc/fortran/trans-stmt.cc
  9caf8a2f93e6cf5e2a567a3aa18f957c  gcc/fortran/trans-stmt.h
! 88e47983056bf84e8b7dd5981ac93d41  gcc/fortran/trans-types.cc
  422959ab20fd75df3766a03597227fd2  gcc/fortran/trans-types.h
  54131318d1d1405d58e24ee3cc51e594  gcc/fortran/trans.cc
  54e59c2c0e95e495fc23ebb71f917fc5  gcc/fortran/trans.h
--- 6160,6166 ----
  0ea370a601d81713b8f4041c3d21cedf  gcc/fortran/trans-openmp.cc
  0396764dfdf16466c5e59e1744c93a42  gcc/fortran/trans-stmt.cc
  9caf8a2f93e6cf5e2a567a3aa18f957c  gcc/fortran/trans-stmt.h
! 3910394d74aab50fba42ab60b9b75ad3  gcc/fortran/trans-types.cc
  422959ab20fd75df3766a03597227fd2  gcc/fortran/trans-types.h
  54131318d1d1405d58e24ee3cc51e594  gcc/fortran/trans.cc
  54e59c2c0e95e495fc23ebb71f917fc5  gcc/fortran/trans.h
*************** c4e07547b91be991d1bed6c22015cec2  gcc/gc
*** 6186,6192 ****
  a01ec87393c0315f282b6a4f5444012b  gcc/gcov-io.cc
  b9ae583911b0dfc11e96e21548fad63d  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
! f269d02900a77fe74111832833bf535c  gcc/gcov.cc
  2a8393570ec2f0f06d815562e3e84f78  gcc/gcse-common.cc
  592e70d614695b5fba65cd68c9112587  gcc/gcse-common.h
  7078a71e12a0dab8d83016b3f1948bf4  gcc/gcse.cc
--- 6190,6196 ----
  a01ec87393c0315f282b6a4f5444012b  gcc/gcov-io.cc
  b9ae583911b0dfc11e96e21548fad63d  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
! 75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
  2a8393570ec2f0f06d815562e3e84f78  gcc/gcse-common.cc
  592e70d614695b5fba65cd68c9112587  gcc/gcse-common.h
  7078a71e12a0dab8d83016b3f1948bf4  gcc/gcse.cc
*************** d23c1b55e0de2e6e8884410e882b1b87  gcc/ge
*** 6229,6235 ****
  29ee68ccc9844e3580e3e9f6da577778  gcc/genpeep.cc
  28d50caf61c98bed97742228c437ee13  gcc/genpreds.cc
  7ef07a14a26d6ca95f84a510ac497b42  gcc/genrecog.cc
! b6a642365300b6a950c9eb15a4ecd67e  gcc/gensupport.cc
  b2448ada2a0bff917b804ee48360ab03  gcc/gensupport.h
  575cd36582b31d032be413d7eb1b6a95  gcc/gentarget-def.cc
  d285de23bd302c6655bc95327336a8ec  gcc/genversion.cc
--- 6233,6239 ----
  29ee68ccc9844e3580e3e9f6da577778  gcc/genpeep.cc
  28d50caf61c98bed97742228c437ee13  gcc/genpreds.cc
  7ef07a14a26d6ca95f84a510ac497b42  gcc/genrecog.cc
! b3871ec7bfbae048743120701fe55ae0  gcc/gensupport.cc
  b2448ada2a0bff917b804ee48360ab03  gcc/gensupport.h
  575cd36582b31d032be413d7eb1b6a95  gcc/gentarget-def.cc
  d285de23bd302c6655bc95327336a8ec  gcc/genversion.cc
*************** da09d1e31d3994eb3d6958074d7b7ce5  gcc/gi
*** 6246,6253 ****
  613cd84d6a9d33c8a47ce0b484fe65cc  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! 4b4041fcad2ac71b1dcc8921274e83bf  gcc/gimple-fold.cc
! 8780d2011b6a9ef6c285eead522a3286  gcc/gimple-fold.h
  98652c967ce7f8dda9a1c398caa0996a  gcc/gimple-harden-conditionals.cc
  34959112cc04df5744be2b160e2f9d80  gcc/gimple-harden-control-flow.cc
  46c40ebab120d543476a2e46ac063bba  gcc/gimple-if-to-switch.cc
--- 6250,6257 ----
  613cd84d6a9d33c8a47ce0b484fe65cc  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! af2f7042f07ed2c4e9574947bf734ed9  gcc/gimple-fold.cc
! 185d4ab557138640727d9a9c05260d7e  gcc/gimple-fold.h
  98652c967ce7f8dda9a1c398caa0996a  gcc/gimple-harden-conditionals.cc
  34959112cc04df5744be2b160e2f9d80  gcc/gimple-harden-control-flow.cc
  46c40ebab120d543476a2e46ac063bba  gcc/gimple-if-to-switch.cc
*************** fc5706ae421aa8f2f9bba7fe2c637237  gcc/gi
*** 6313,6319 ****
  19e41ad97511268bfc78109e4dbf8065  gcc/gimple-warn-recursion.cc
  1c27797b28d9b5ff89ecc329a5cad7a8  gcc/gimple.cc
  2b31c9448b3ca4914742ffde943425c0  gcc/gimple.def
! 7b54c92c89565c6c9bbb4f315cb34c27  gcc/gimple.h
  140b5c45a362b9c0c981b683560d4ef8  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
  8c53ac4f655bf4ed40f3c2f5775f0ba6  gcc/gimplify.cc
--- 6317,6323 ----
  19e41ad97511268bfc78109e4dbf8065  gcc/gimple-warn-recursion.cc
  1c27797b28d9b5ff89ecc329a5cad7a8  gcc/gimple.cc
  2b31c9448b3ca4914742ffde943425c0  gcc/gimple.def
! 45503ce6e3f25d368673d334a7c46936  gcc/gimple.h
  140b5c45a362b9c0c981b683560d4ef8  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
  8c53ac4f655bf4ed40f3c2f5775f0ba6  gcc/gimplify.cc
*************** b0418c0b5b0600719b633f4afcd328ea  gcc/in
*** 6456,6462 ****
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! feae14d2f99de1cf6b556107c71318fe  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
  2956ae29acd688fd2229744edabdc027  gcc/ipa-fnsummary.cc
--- 6460,6466 ----
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! 83301dfe7ea8ece23eded9072136d0f7  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
  2956ae29acd688fd2229744edabdc027  gcc/ipa-fnsummary.cc
*************** fef6f27045737cc29ebf2dbbd22dda02  gcc/ip
*** 6467,6474 ****
  005f3683b94c9cf2ef95442dcaaa8771  gcc/ipa-icf.cc
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  afa2616e2d58a9137deaabc102d2d7c1  gcc/ipa-inline-analysis.cc
! 21cf6b747b00eabd67bc12a5600bfa83  gcc/ipa-inline-transform.cc
! 0c24fe3edf73abfc9c6fff12239692de  gcc/ipa-inline.cc
  229bac80ef5400801cf4edfd97790ef8  gcc/ipa-inline.h
  19c0cbbd70e071bd63dbb0527d02423e  gcc/ipa-locality-cloning.cc
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
--- 6471,6478 ----
  005f3683b94c9cf2ef95442dcaaa8771  gcc/ipa-icf.cc
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  afa2616e2d58a9137deaabc102d2d7c1  gcc/ipa-inline-analysis.cc
! 0e7e9a25bfff19db564e8c572dda4dc5  gcc/ipa-inline-transform.cc
! d09d1d21291bcbca56c1e293683b3f7f  gcc/ipa-inline.cc
  229bac80ef5400801cf4edfd97790ef8  gcc/ipa-inline.h
  19c0cbbd70e071bd63dbb0527d02423e  gcc/ipa-locality-cloning.cc
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
*************** dd0f6eb04e9df630e28cdd746652fdbc  gcc/ji
*** 6598,6620 ****
  a683bef6f6721b574c76acc1efb5050c  gcc/jit/notes.txt
  aa4d0dc684f454901e907706abe9140d  gcc/json-parsing.cc
  81ace1f55dac7790c08a0af7205755ad  gcc/json-parsing.h
! fccafb7fece8c837c0a30d87dffb0f13  gcc/json.cc
! aacec8a8d9ba9f3bc7f066ea94cf81d7  gcc/json.h
  47f18749c5685cd9ae918c4288aa5bf4  gcc/jump.cc
  83a72f3e6c50fc5ea098d18cc8c61886  gcc/langhooks-def.h
  a3b66c94bb9836451a5a4e7e00d59aea  gcc/langhooks.cc
  599d97bd29c2fd711d6aba59eeb21211  gcc/langhooks.h
  75deba840ba0746416d8a7516027f7b7  gcc/late-combine.cc
! 31af2def627df6f945b01ab60b45011f  gcc/lazy-diagnostic-path.cc
! dc04255cb4f201884e54c46f65032e74  gcc/lazy-diagnostic-path.h
  82e3d15b2545a4e7a7397d6396eb74fe  gcc/lcm.cc
  bdf8ae675ae5000d854fe2874116b2f8  gcc/lcm.h
  027270d0be504f25a7efb49e1e3179bb  gcc/libfuncs.h
! 29ba18b7550c8218f7d3e899f457069e  gcc/libgdiagnostics++.h
! 22d6872dba04e57e7524e12befd240fe  gcc/libgdiagnostics.cc
! aceebd75eec9890570f948ead0434e38  gcc/libgdiagnostics.h
! 24d57ad5e22a72da4b9bea4116a4211d  gcc/libgdiagnostics.map
! 211af8646237e8416a69801477861bf2  gcc/libsarifreplay.cc
  5e320a3249f5b8b266e2c69c6282315e  gcc/libsarifreplay.h
  5c6a6e21474ca46c652e3149d4068fe3  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
--- 6602,6624 ----
  a683bef6f6721b574c76acc1efb5050c  gcc/jit/notes.txt
  aa4d0dc684f454901e907706abe9140d  gcc/json-parsing.cc
  81ace1f55dac7790c08a0af7205755ad  gcc/json-parsing.h
! 050f3124bc0b966ee56bf6aef5ba85b4  gcc/json.cc
! d4441c216144e8178e5c35e33874f04b  gcc/json.h
  47f18749c5685cd9ae918c4288aa5bf4  gcc/jump.cc
  83a72f3e6c50fc5ea098d18cc8c61886  gcc/langhooks-def.h
  a3b66c94bb9836451a5a4e7e00d59aea  gcc/langhooks.cc
  599d97bd29c2fd711d6aba59eeb21211  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
  027270d0be504f25a7efb49e1e3179bb  gcc/libfuncs.h
! 79fe569ebf6fe058b6ca4777d240fa68  gcc/libgdiagnostics++.h
! d6e135b167cb1f68e1851b553aa7cd51  gcc/libgdiagnostics.cc
! 5709edc2c86b3b266f851e186a7492ef  gcc/libgdiagnostics.h
! 84f2ddafd88e9e988ae44973bb81f33f  gcc/libgdiagnostics.map
! 3fb132c63fb7252b1081f8d48b376e6d  gcc/libsarifreplay.cc
  5e320a3249f5b8b266e2c69c6282315e  gcc/libsarifreplay.h
  5c6a6e21474ca46c652e3149d4068fe3  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
*************** aceebd75eec9890570f948ead0434e38  gcc/li
*** 6622,6628 ****
  30b8e3e407f46ad2cb39260ec4bab9f6  gcc/lock-and-run.sh
  7bf480c85a74d6690a5657de1434aef1  gcc/lockfile.cc
  03fdf33413400a8644c324d657debba0  gcc/lockfile.h
! f8c8e97d4dea2c5c8d278e2d5a3db8dc  gcc/logical-location.h
  ef7626e8221c409d195fdcfa019fb4cd  gcc/loop-doloop.cc
  154eba32ec80f6804e8861149e26652c  gcc/loop-init.cc
  6e39bd9aab94c794b8cc992d0cadd9ae  gcc/loop-invariant.cc
--- 6626,6632 ----
  30b8e3e407f46ad2cb39260ec4bab9f6  gcc/lock-and-run.sh
  7bf480c85a74d6690a5657de1434aef1  gcc/lockfile.cc
  03fdf33413400a8644c324d657debba0  gcc/lockfile.h
! 803748f717a53dfe6c94971f937b0156  gcc/logical-location.h
  ef7626e8221c409d195fdcfa019fb4cd  gcc/loop-doloop.cc
  154eba32ec80f6804e8861149e26652c  gcc/loop-init.cc
  6e39bd9aab94c794b8cc992d0cadd9ae  gcc/loop-invariant.cc
*************** f8f8f93a11e3960a35e56fdfffdf4889  gcc/lr
*** 6641,6647 ****
  d5cf2fbf4d35e8e1f64d1638b2993c85  gcc/lra-spills.cc
  e5fef2ffe59f5bb8bf855af92be9ce6a  gcc/lra.cc
  f34f18b0bf45561aad0763e10bc1ecb1  gcc/lra.h
! c541f395499a535c0ea6a8bffe113196  gcc/lto-cgraph.cc
  3c0edd5f81587bb2a1bebb7979c19aa8  gcc/lto-compress.cc
  6081736069853cccad4e30dab7992217  gcc/lto-compress.h
  85f4f18c0f46c0ae649aceb458fe3ed8  gcc/lto-ltrans-cache.cc
--- 6645,6651 ----
  d5cf2fbf4d35e8e1f64d1638b2993c85  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
  85f4f18c0f46c0ae649aceb458fe3ed8  gcc/lto-ltrans-cache.cc
*************** e44c0bf9cc0411d7bd57c6585eb6d0e4  gcc/lt
*** 6679,6685 ****
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 6b731988c23ae1b4b025c6210605f32a  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6683,6689 ----
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 6d9a8566cdf0d737aefa5b0fd8ce8682  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** f2f6ad340399124ac1dd7765e1b675a5  gcc/m2
*** 6738,6744 ****
  b3c98d490dd50cdd4e4de316e0deca54  gcc/m2/gm2-compiler/M2GCCDeclare.def
  0334dee0562359e9a335b23e63acc113  gcc/m2/gm2-compiler/M2GCCDeclare.mod
  3d68446acff53fae7c5d6c425f0cf67e  gcc/m2/gm2-compiler/M2GenGCC.def
! 73ed9d0b7f066f5a3b9ab81f63050868  gcc/m2/gm2-compiler/M2GenGCC.mod
  273c623529a07acbf2f80b58e2d7567e  gcc/m2/gm2-compiler/M2Graph.def
  4e2b3a2e0b4cc7af0785ab9e41438e6b  gcc/m2/gm2-compiler/M2Graph.mod
  0d543e40ef3f1bcdf8edf9e06baa1edb  gcc/m2/gm2-compiler/M2LangDump.def
--- 6742,6748 ----
  b3c98d490dd50cdd4e4de316e0deca54  gcc/m2/gm2-compiler/M2GCCDeclare.def
  0334dee0562359e9a335b23e63acc113  gcc/m2/gm2-compiler/M2GCCDeclare.mod
  3d68446acff53fae7c5d6c425f0cf67e  gcc/m2/gm2-compiler/M2GenGCC.def
! 4304e125ac84b77de47e28550c396339  gcc/m2/gm2-compiler/M2GenGCC.mod
  273c623529a07acbf2f80b58e2d7567e  gcc/m2/gm2-compiler/M2Graph.def
  4e2b3a2e0b4cc7af0785ab9e41438e6b  gcc/m2/gm2-compiler/M2Graph.mod
  0d543e40ef3f1bcdf8edf9e06baa1edb  gcc/m2/gm2-compiler/M2LangDump.def
*************** feac1271dd2de34f953140b4b62a2c73  gcc/m2
*** 6817,6823 ****
  731c6ffb9b31221c7fee837869eff0a9  gcc/m2/gm2-compiler/PCBuild.bnf
  428e2092f5708fd9cf986ae14771fff1  gcc/m2/gm2-compiler/PCBuild.def
  333e3b954ec138cdfb9ac52c7fc37ee9  gcc/m2/gm2-compiler/PCSymBuild.def
! 69db265f935b32813aca3d1a08f68578  gcc/m2/gm2-compiler/PCSymBuild.mod
  674904f1d941d249c3e960622fc886f7  gcc/m2/gm2-compiler/PHBuild.bnf
  08361e38dfa7f065be723afaa04d8986  gcc/m2/gm2-compiler/PHBuild.def
  b521bc37b844fd46fdfddcf3d2287f13  gcc/m2/gm2-compiler/PathName.def
--- 6821,6827 ----
  731c6ffb9b31221c7fee837869eff0a9  gcc/m2/gm2-compiler/PCBuild.bnf
  428e2092f5708fd9cf986ae14771fff1  gcc/m2/gm2-compiler/PCBuild.def
  333e3b954ec138cdfb9ac52c7fc37ee9  gcc/m2/gm2-compiler/PCSymBuild.def
! e524773f84b80cb2ecbe501fc5711e67  gcc/m2/gm2-compiler/PCSymBuild.mod
  674904f1d941d249c3e960622fc886f7  gcc/m2/gm2-compiler/PHBuild.bnf
  08361e38dfa7f065be723afaa04d8986  gcc/m2/gm2-compiler/PHBuild.def
  b521bc37b844fd46fdfddcf3d2287f13  gcc/m2/gm2-compiler/PathName.def
*************** fabfc816f99fb184266e92ed4a85b7a4  gcc/m2
*** 6830,6836 ****
  7e7c5313b631435b03f974e72c20d104  gcc/m2/gm2-compiler/SymbolKey.def
  be245258e0123a45bbd9a47e859deb50  gcc/m2/gm2-compiler/SymbolKey.mod
  cf0941f82ecf4cf575e26e963235b675  gcc/m2/gm2-compiler/SymbolTable.def
! c632780738a1a884aeaac1bb6aca09b4  gcc/m2/gm2-compiler/SymbolTable.mod
  4e5bbaec9cd1341e4e14b9951485e75b  gcc/m2/gm2-compiler/bnflex.def
  34956a3ca2f84a677fbf711642452563  gcc/m2/gm2-compiler/bnflex.mod
  3ba721399af75ed8db2b223d9947d26d  gcc/m2/gm2-compiler/cflex.def
--- 6834,6840 ----
  7e7c5313b631435b03f974e72c20d104  gcc/m2/gm2-compiler/SymbolKey.def
  be245258e0123a45bbd9a47e859deb50  gcc/m2/gm2-compiler/SymbolKey.mod
  cf0941f82ecf4cf575e26e963235b675  gcc/m2/gm2-compiler/SymbolTable.def
! a0b7d3f4130fcfabdf1ce7311a3c9c7c  gcc/m2/gm2-compiler/SymbolTable.mod
  4e5bbaec9cd1341e4e14b9951485e75b  gcc/m2/gm2-compiler/bnflex.def
  34956a3ca2f84a677fbf711642452563  gcc/m2/gm2-compiler/bnflex.mod
  3ba721399af75ed8db2b223d9947d26d  gcc/m2/gm2-compiler/cflex.def
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7622,7628 ****
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  db2ee1a68662c8370d59f7e4f6cf917b  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 6359d4793145f1dd4962b861f03dfd96  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
--- 7626,7632 ----
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  db2ee1a68662c8370d59f7e4f6cf917b  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 14b793da0f08024f228f394009a72743  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
*************** fcb5b7227342c442bcddbcc06eaddcdc  gcc/op
*** 7703,7709 ****
  58f02a8817c05c6681ba150251b166e8  gcc/optinfo.h
  1c30e8950551cbe97bda991d288b7bb7  gcc/options-urls-cc-gen.awk
  06a83d971fd3a11f54c904ab9260cc09  gcc/opts-common.cc
! 3572ddf474164bed1da8aa4037f60df6  gcc/opts-diagnostic.cc
  bd138c731d5ef02ebe19e25375c465c8  gcc/opts-diagnostic.h
  dc49add7ae35ac8842b786b817fd79b3  gcc/opts-global.cc
  079a115ae417106f3e7f42b0272b866d  gcc/opts-jobserver.h
--- 7707,7713 ----
  58f02a8817c05c6681ba150251b166e8  gcc/optinfo.h
  1c30e8950551cbe97bda991d288b7bb7  gcc/options-urls-cc-gen.awk
  06a83d971fd3a11f54c904ab9260cc09  gcc/opts-common.cc
! d07f1879b2cefcb7c42874ef3308019b  gcc/opts-diagnostic.cc
  bd138c731d5ef02ebe19e25375c465c8  gcc/opts-diagnostic.h
  dc49add7ae35ac8842b786b817fd79b3  gcc/opts-global.cc
  079a115ae417106f3e7f42b0272b866d  gcc/opts-jobserver.h
*************** b69c0a60b87460456bf02111f39310dd  gcc/se
*** 8353,8382 ****
  8352df111cb1e4c8fe8cbf4b30002511  gcc/sel-sched-ir.h
  3c55426387224f4699c9d51fdbd5b547  gcc/sel-sched.cc
  22faf0ae842883b3a08f6e9137ac2315  gcc/sel-sched.h
! abee29b6a59ce7e6267f1c8176e2f57a  gcc/selftest-diagnostic-path.cc
! 506361911aa7f7ba575530bfa2300e7a  gcc/selftest-diagnostic-path.h
  60a6c5bd5960cea7c7c426b1443c533e  gcc/selftest-diagnostic-show-locus.h
! 9048e12d15abd6e1e6a0bd3415e4c560  gcc/selftest-diagnostic.cc
! 87f7119e7acf5a607a7030767cb8fc78  gcc/selftest-diagnostic.h
  109061be2ca9df2d7941d134aabdf120  gcc/selftest-json.cc
  065d0522cc6ea795703e89270514b149  gcc/selftest-json.h
! 0723f123eaa763a79f331e280bc6e392  gcc/selftest-logical-location.cc
! 5aa9370f7781e6117014c2ac08dc7391  gcc/selftest-logical-location.h
  22224372e5a2696e660289e86b2696a5  gcc/selftest-rtl.cc
  ab96230d11b93b85d4d1b85cc5d494ab  gcc/selftest-rtl.h
! 9c11fdcb0197b171430d85d5acf49bf7  gcc/selftest-run-tests.cc
  777b0025fe2356f118cb24f2302ae4ff  gcc/selftest-tree.h
  220320c985328c0546a9a80a7353964e  gcc/selftest.cc
! db4a76b5381c9c4017cdb2459622d0c4  gcc/selftest.h
  71b83bf173726493d9fee558216a2e02  gcc/sese.cc
  62e0bec4b0ac9f8e027af35a2c2e2330  gcc/sese.h
  9123313dafdd85df1e747e738274ee2c  gcc/shortest-paths.h
  cf0f1ba732134068141dc67a09cd47ce  gcc/shrink-wrap.cc
  125f9b6a6cf86e28e0a76470fb3c1f11  gcc/shrink-wrap.h
  50d9999185408bcae454174489317b68  gcc/signop.h
! e5d40573610fb7583cb771d99f436041  gcc/simple-diagnostic-path.cc
! c8b2977ee32b0a12bea49921d2ec0c00  gcc/simple-diagnostic-path.h
! 6cb88f8be6ddcbe3e7056ee3ea547adf  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
  599fc125220850c86939202313a6f733  gcc/sparseset.cc
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
--- 8357,8386 ----
  8352df111cb1e4c8fe8cbf4b30002511  gcc/sel-sched-ir.h
  3c55426387224f4699c9d51fdbd5b547  gcc/sel-sched.cc
  22faf0ae842883b3a08f6e9137ac2315  gcc/sel-sched.h
! 0f03d3badfef7fb7c66d72631c12e55f  gcc/selftest-diagnostic-path.cc
! 077cb17f489943323e35c165fe527d78  gcc/selftest-diagnostic-path.h
  60a6c5bd5960cea7c7c426b1443c533e  gcc/selftest-diagnostic-show-locus.h
! 3dfba798c74c337636b64e676e955ffb  gcc/selftest-diagnostic.cc
! 1b76756b9679c77ba0df2582680d7356  gcc/selftest-diagnostic.h
  109061be2ca9df2d7941d134aabdf120  gcc/selftest-json.cc
  065d0522cc6ea795703e89270514b149  gcc/selftest-json.h
! cf6dc6ad925fca1cf0c021015c344469  gcc/selftest-logical-location.cc
! 74ebb02c30bec8d1c45c78a387c5ee18  gcc/selftest-logical-location.h
  22224372e5a2696e660289e86b2696a5  gcc/selftest-rtl.cc
  ab96230d11b93b85d4d1b85cc5d494ab  gcc/selftest-rtl.h
! 9fd8fee0950cc650b4e3340f0710c8fa  gcc/selftest-run-tests.cc
  777b0025fe2356f118cb24f2302ae4ff  gcc/selftest-tree.h
  220320c985328c0546a9a80a7353964e  gcc/selftest.cc
! 97d530c74f46b94c4de5ab31fbd2d38d  gcc/selftest.h
  71b83bf173726493d9fee558216a2e02  gcc/sese.cc
  62e0bec4b0ac9f8e027af35a2c2e2330  gcc/sese.h
  9123313dafdd85df1e747e738274ee2c  gcc/shortest-paths.h
  cf0f1ba732134068141dc67a09cd47ce  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
! 287e93fc212bb88d388154a5042a315c  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
  599fc125220850c86939202313a6f733  gcc/sparseset.cc
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8430,8436 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 74b1cf2233b07d8fc6799ccb026f1c0f  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8434,8440 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! cc69408b69707db692333b34dec57f92  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** d05ac6fedd74d96b8e1466d0110a8fdb  gcc/te
*** 14397,14404 ****
  215a2b0959e47205085dc8ab2dea5181  gcc/testsuite/cobol.dg/group1/pointer1.cob
  763d4c9a2cbca2b2ac0a07933c54862f  gcc/testsuite/cobol.dg/group1/simple-arithmetic.cob
  9e254bdae56a5c8d106f6559999ae973  gcc/testsuite/cobol.dg/group1/simple-classes.cob
! e6506adcce16e102a54735fb17bb1159  gcc/testsuite/cobol.dg/group1/simple-if.cob
  352864656e5132dd6192fdb77af9987a  gcc/testsuite/cobol.dg/group1/simple-perform.cob
  0c8262ef265dd1714f65d56d9efd8a4d  gcc/testsuite/cobol.dg/group2/88_level_with_FALSE_IS_clause.cob
  1d136358908b310454c8f9b5d93e9505  gcc/testsuite/cobol.dg/group2/88_level_with_FILLER.cob
  0daefa9454d2fcfd38eab59b677c2f0b  gcc/testsuite/cobol.dg/group2/88_level_with_THRU.cob
--- 14401,14414 ----
  215a2b0959e47205085dc8ab2dea5181  gcc/testsuite/cobol.dg/group1/pointer1.cob
  763d4c9a2cbca2b2ac0a07933c54862f  gcc/testsuite/cobol.dg/group1/simple-arithmetic.cob
  9e254bdae56a5c8d106f6559999ae973  gcc/testsuite/cobol.dg/group1/simple-classes.cob
! 0cc60851f56f7ed82c6a307ff07078c5  gcc/testsuite/cobol.dg/group1/simple-if.cob
  352864656e5132dd6192fdb77af9987a  gcc/testsuite/cobol.dg/group1/simple-perform.cob
+ 03d9e0410a78ac1572fca647e641b070  gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob
+ 1ab98bfe6cbef69dac2f301c94c9c93b  gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out
+ 26c1ac1d56c360477adc8efe577f1a5e  gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob
+ 79adac8c671790504a142ab2392cf927  gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out
+ 291db84fb7e37ae587f8903785b25b1d  gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob
+ 2901c188067e745960930ae0bfdd4749  gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out
  0c8262ef265dd1714f65d56d9efd8a4d  gcc/testsuite/cobol.dg/group2/88_level_with_FALSE_IS_clause.cob
  1d136358908b310454c8f9b5d93e9505  gcc/testsuite/cobol.dg/group2/88_level_with_FILLER.cob
  0daefa9454d2fcfd38eab59b677c2f0b  gcc/testsuite/cobol.dg/group2/88_level_with_THRU.cob
*************** e6506adcce16e102a54735fb17bb1159  gcc/te
*** 14410,14420 ****
--- 14420,14450 ----
  474497d0d9932a1aab0b9170a17813c6  gcc/testsuite/cobol.dg/group2/ADD_CORRESPONDING.cob
  767d019c56f84421d2032de38d5d7a66  gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.cob
  8fd96e62b5175b3043acd696faa33b48  gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.out
+ 308a00db2b24d1c4748c016e221cfaed  gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob
+ 0e8abc3ff0162b7f5b0a39a7c5184573  gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out
+ 8f0656d61e90ca0e664146f324d6a710  gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob
+ 2b1582f66ad9f780abf8a240d7a2362c  gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out
+ 3f46e56a7a70b93a9ec8f0338c27535c  gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob
+ 330041faa87c3b309191307bb47d50e8  gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob
  7cd127ee703dda8fd87b3d893fb1a1ac  gcc/testsuite/cobol.dg/group2/ALPHABETIC-LOWER_test.cob
  4813e57661505d12b8d076d95b58763b  gcc/testsuite/cobol.dg/group2/ALPHABETIC-UPPER_test.cob
  51db431e076a4f40819ee3a98ebd545b  gcc/testsuite/cobol.dg/group2/ALPHABETIC_test.cob
+ 9de32e3a40a5725b946d743b98d349f0  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob
+ aff0f09a3eba923f1e9dbff586adddb7  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out
+ 0aa406fd2c4bb80f4a52187ccca601ca  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob
+ 1f7449eeeb89ffaad20f5e0371fb5c23  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out
+ 3ef70635d96c1f906130c519db9716b8  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob
+ fd54d0316d26094ad051387055973254  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out
+ 7d15adc805acb940d24d04a2ec408e45  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob
+ 32833b6da2fe6c3630d21fccc504eaa4  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob
+ a759f684e27357ca4bac1c1fecf39802  gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out
+ f8d2ab98ca2b042e089c9758ae3a2b30  gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob
+ ce7bdbfa73ff92ed34eac3534df66e86  gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out
+ c7cf12c0e90e1d426210bb32a56623a3  gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob
  738b5e86f6b162a7f4b44d0ecfedf06b  gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.cob
  b13823e6ef73b208ab307bb3612a5ce8  gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.out
+ 04bb991b042a76cfcf01bc1c8817a56a  gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob
+ 56a12a09adb0c17ac03345d06ae419b3  gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out
  f4905b3cede4cad548e4f57e046904d7  gcc/testsuite/cobol.dg/group2/COMP-6_arithmetic.cob
  4c557552ba46fff61c6bba359bbd2426  gcc/testsuite/cobol.dg/group2/COMP-6_arithmetic.out
  2060aa8f44c5912adef0f47ec97a60cb  gcc/testsuite/cobol.dg/group2/COMP-6_numeric_test.cob
*************** baa95b2447f116f5a631da79ad316762  gcc/te
*** 14425,14436 ****
--- 14455,14479 ----
  e597ad321e86d60527f8c7000011bc2b  gcc/testsuite/cobol.dg/group2/COMP-6_used_with_MOVE.out
  eb99b99c9e6dabc94c8069e3bad4a645  gcc/testsuite/cobol.dg/group2/COMPUTE_multiplication_to_FIX4.cob
  c0496fa7d0e5acfed15b3bde8f302ebc  gcc/testsuite/cobol.dg/group2/COMPUTE_multiplication_to_FIX4.out
+ 7d985ae4194b9390f54f136df8642114  gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob
+ d37be4e494df6cbb370f405931df02e6  gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out
+ c04168a2acd1bc44234f01ab517cfb97  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob
+ 889ec5fde47e76be7c971e6deca40cd0  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
+ c5cf04eb9938774927bb9fc355958f13  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
+ 40ee71e6000b91748c4cd8f864a83cd2  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
  51d5769dbd81a9e375bce8bcd01a3840  gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
+ e3cc25d3e34c98b2bc1d9014612f3464  gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob
  5a5abbc24fc75759207ca6686fa86a79  gcc/testsuite/cobol.dg/group2/Compare_COMP-2_with_floating-point_literal.cob
  f7e4a3f2c5c85ddeb645aecc5792a186  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.cob
  770e7f54918037f396938dcd095f8cf0  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.out
  4ceb6523fae1934daa01b428e6d5b854  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.cob
  33011658a399a6a9be5c37899eb4a306  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.out
+ 26032dd568fd1bfb10fc1b817396c802  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob
+ 7d1e4c4461dc538a7b081cd9ab9a781f  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out
+ 0343efd58f9da12b239e6d571691602b  gcc/testsuite/cobol.dg/group2/Complex_IF.cob
+ 441e3a4f6a2da5b2f89b7f633fa3ad23  gcc/testsuite/cobol.dg/group2/Complex_IF.out
+ c3fc0b5b4a5207f75f31c3f153fe63ef  gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob
+ cda4428dac30cd85aca26da3ca3f7520  gcc/testsuite/cobol.dg/group2/Concatenation_operator.out
  f3ca8e281db42abc9943d0fa7c38d798  gcc/testsuite/cobol.dg/group2/Contained_program_visibility__3_.cob
  f5497e8935b43ea0c29ad7500d8689a8  gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.cob
  40200625b438d75f97febca3f471e303  gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.out
*************** b3d5fc2d4df2b935a379f0eca20cf15a  gcc/te
*** 14452,14457 ****
--- 14495,14510 ----
  84315cd1eac36ec2ab6248bb81f1c443  gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.out
  e8eb1625cf1bf0a19bc7e28773fdd2d5  gcc/testsuite/cobol.dg/group2/DEBUG_Line.cob
  e63f1cd9d134b515c696bba014cb1dff  gcc/testsuite/cobol.dg/group2/DEBUG_Line.out
+ 020056f99a3f85893322ab8e2d0ee543  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob
+ aafaf4e72769812a7c6252f63c7c0c66  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out
+ 76a11ca63a2a964c4dcac1449578dd76  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob
+ 871a17bb2c1aacc38b547cba0b4390b2  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out
+ 6c9696b1107c8acd86a9755fae819387  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob
+ 049d86b26e87f2345599dec9004709c6  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out
+ ab92263ab6dfc24c4a0c606696f4f6e1  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob
+ 049d86b26e87f2345599dec9004709c6  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out
+ fd9430749a440e568057ebda5d8b3a14  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob
+ 20c0a856e7157356b21d2254ce9c991d  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out
  4828b4306ea036529b36c0bb44d8b712  gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.cob
  018756473be729c6950d876365dc573b  gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.out
  e7fe51602fe10ca42c5fe456512ba76c  gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII__2_.cob
*************** c69954f56fcc483a81f9930ef5a010cc  gcc/te
*** 14466,14471 ****
--- 14519,14528 ----
  e1a5fc78e52a4348f53e9fcdcc6b849c  gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.out
  9231024e09658f2c0b51c5863c9ff925  gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob
  4d861c72470e2812c684041e91621642  gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out
+ dd8c6393c06b4230c216b0d2985c7d04  gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob
+ 71114c6e947dbc572836dc13b66e981d  gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out
+ b2ddfc5676452eaa657c53fed65d0c04  gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob
+ b190c55e6f544248ffcabacd76c76fc8  gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out
  dc52fd3893842d57477c07b7ab30b016  gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob
  612112a8ffee04167daaa2bc2a1c9631  gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out
  2b4e9b7084d7b6f0d982f80f1bc1eca8  gcc/testsuite/cobol.dg/group2/EVALUATE_condition__2_.cob
*************** dc52fd3893842d57477c07b7ab30b016  gcc/te
*** 14474,14479 ****
--- 14531,14548 ----
  81ce28588b2b73f5386b5a67a8c4983a  gcc/testsuite/cobol.dg/group2/EVALUATE_doubled_WHEN.out
  6c9a6e7a5666de16640af114337126d9  gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.cob
  ed5a6aa98312fb3870ac8ff7290b6548  gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.out
+ c3f57ed3e785263bd5bc1a11e5861290  gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob
+ 52a7f942d80b85e3e73e3ff8b22276bf  gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob
+ d36f8f9425c4a8000ad9c4a97185aca5  gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out
+ aa1720f718ef240d3daee562b785968f  gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob
+ 30ba69874bf877e7942aa9267564e81f  gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out
+ 97606b94b868e2e008b042559073a65c  gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob
+ 5fe71ed47fbfd1c9732d0d55b7498960  gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob
+ 6acf9b0d605a58415d5a29fd842dee44  gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out
+ ef38a3c35d6d1c92713a58b802edb16a  gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob
+ 0cb3a3dc88e7eed83ac94513e259bc5e  gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out
+ 18535704cb2e88b1cf3c4bb117c1e498  gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob
+ e41dd883ade6ec80e48d3831162987be  gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out
  a5bc55a19aac50fe6e2eab8eeb6db994  gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.cob
  250ae5f323e99de59af8a58b18f592e9  gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.out
  a9ea9148bd9d7d8e58c2f43b9fb45819  gcc/testsuite/cobol.dg/group2/FUNCTION_ACOS.cob
*************** e20062d5967eee32cece32410ee28ffc  gcc/te
*** 14614,14619 ****
--- 14683,14690 ----
  db7ffe2c01cc3731d9709182dc2a2056  gcc/testsuite/cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob
  99f57082b8394f028588ff82c46c39d9  gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob
  607cf19be0770d73f7d3b5ec45f2d2b9  gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out
+ ec91588e98bc7e4e7ee785627a66d2f0  gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob
+ d64b7fc84a379356d3c1ace327a9ae49  gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out
  8bc30bbd5af3931c5987010e1d132185  gcc/testsuite/cobol.dg/group2/Floating_continuation_indicator__1_.cob
  ba6b3227a078619c9a062cd5ce2edeb7  gcc/testsuite/cobol.dg/group2/Floating_continuation_indicator__1_.out
  63ff422fa3042c8264e56b8bcb428dbc  gcc/testsuite/cobol.dg/group2/GLOBAL_FD__1_.cob
*************** c7fa947f8d0bc34a12532d5fcd5f2624  gcc/te
*** 14669,14677 ****
--- 14740,14756 ----
  7a9665b9b0209c94433773c7ad518c72  gcc/testsuite/cobol.dg/group2/INSPECT_TALLYING_REPLACING_ISO_Example.out
  1da66825f23b1fdfdb39ab98eff13f46  gcc/testsuite/cobol.dg/group2/INSPECT_TRAILING.cob
  eac533e1d20c6fc3182209d89d95dce1  gcc/testsuite/cobol.dg/group2/INSPECT_TRAILING.out
+ 3ec6de10463d8d6cd1a8a964f7866bae  gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob
+ 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
+ b7b5c0b13c0986bd9870b8774c94506f  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out
+ 1673dc1d35fc0941c252aa3d338886b7  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob
+ b7b5c0b13c0986bd9870b8774c94506f  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out
  23e5d4acb2cfe1daabc7c1196edf48e9  gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob
  60b725f10c9c85c70d97880dfe8191b3  gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out
  4ca8d1c9c513d53c80702fd0b0d90ff9  gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob
*************** c37d3a6c238b882f0bdd37216ad6f2e2  gcc/te
*** 14682,14692 ****
--- 14761,14795 ----
  68b329da9893e34099c7d8ad5cb9c940  gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out
  6d1a930a76d4ab5cc520ba673d35ff38  gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob
  68b329da9893e34099c7d8ad5cb9c940  gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out
+ 19fd942f8e59f704767cd4c3801d15eb  gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob
+ d36f8f9425c4a8000ad9c4a97185aca5  gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out
+ 5ebd149ed7f04a25c51fa7d8de980d8c  gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob
+ 97c01b68b11637098435c3a02e14bd02  gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob
+ 1e6c9ca775f50b1b92cdcb94da587ce1  gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out
+ b769d75207f79ebe3eb2563bb30dd3af  gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob
+ 30919e1201a8434fdc9703fe9f44220e  gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out
+ 76e9e3faeedd3093f630747e1e553d7e  gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob
+ 0a11f109c59b17f4d98bfef38f072257  gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out
+ f29c6d152229f76d4f713afb775c12ec  gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob
+ 289564f851db3c7eaa453fd128838cef  gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out
+ 93987462255f141a33e3e46599d42432  gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob
+ efa0252ae468d0d532211e8789da5ca2  gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out
+ df1c0f569b9f309795cfc3ac22dac71d  gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob
+ c94667798e53c8974de0912e64b9f68a  gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob
+ 2c123c5dbbc69e721ee716529140b779  gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob
+ 8f8c59936f320caa5cbf1e76e96e0bf4  gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob
  0c0ecf77a8e923475016b253a23bcada  gcc/testsuite/cobol.dg/group2/MULTIPLY_BY_literal_in_INITIAL_program.cob
  87b0bc0c9121907b31f6ee3692914a41  gcc/testsuite/cobol.dg/group2/MULTIPLY_to_FIX4.cob
  cf6cb0baac26cccf2005d78a4a1afb78  gcc/testsuite/cobol.dg/group2/MULTIPLY_to_FIX4.out
+ 94f742027b483c887f7c7d9b88ce3763  gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob
+ 92cebaacd47235a03b5cdfc283882a86  gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out
  860bb03d750b0e6019c8c327424cfe69  gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.cob
  4138538135757cec647177acf7df8383  gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out
+ 74218fe0c6b8b43e4de4bc3003808fd7  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
+ 1ca492b7a58e4937f96a4f5658dd5109  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
+ 2132911af2c47babd039e20a0db5df2b  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob
+ 1ca492b7a58e4937f96a4f5658dd5109  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out
+ 12c0eded4796b227fdba9f06f2750ed7  gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob
  5161d2856532911f6000decbf4a94043  gcc/testsuite/cobol.dg/group2/Numeric_operations__1_.cob
  98fd8157724545e43c15a0a98294b8af  gcc/testsuite/cobol.dg/group2/Numeric_operations__2_.cob
  28a8c6a41a47ecd245f6d919206e8f3c  gcc/testsuite/cobol.dg/group2/Numeric_operations__3_.cob
*************** cf6cb0baac26cccf2005d78a4a1afb78  gcc/te
*** 14694,14699 ****
--- 14797,14805 ----
  283cefe1696fad0d72e2fe9feb37c82d  gcc/testsuite/cobol.dg/group2/Numeric_operations__5_.cob
  f8541a2487ec2c1ec0315c33f8353f7a  gcc/testsuite/cobol.dg/group2/Numeric_operations__7_.cob
  d52ba26b5b8852b2b84b61c6178bf74c  gcc/testsuite/cobol.dg/group2/Numeric_operations__8_.cob
+ 10b319abadd72ac43d077c2c8abc4b29  gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob
+ ffadeb7f068a020678b9d84378d57a88  gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob
+ a190093222cd87b2cfc63630a06ab84f  gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out
  3a7c9ac63710b9bf9e307d6c2a2e15f2  gcc/testsuite/cobol.dg/group2/Offset_overflow.cob
  1dcca23355272056f04fe8bf20edfce0  gcc/testsuite/cobol.dg/group2/Offset_overflow.out
  9c84934cecd7d57e9badb90f27ae5490  gcc/testsuite/cobol.dg/group2/Offset_underflow.cob
*************** dcd8593c5a4b24a84b102089db6380bb  gcc/te
*** 14716,14725 ****
--- 14822,14842 ----
  5896e728b5c04b4052a5b32df688d156  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_used_with_INITIALIZE.out
  b300246edd93d2e432dc797364e34d4f  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_used_with_MOVE.cob
  ff6a0c9a67d9d8da4dc2990fd3c74ca5  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_used_with_MOVE.out
+ 3c471fd2bf3ab723cf0d9de45db50eb8  gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob
+ ff9955b77b5d71505880b825a02d148d  gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob
+ e3cbddf76f9632ea000d7a5beec1b0ea  gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob
+ f447900f3d80fb422f0e33541a0a216c  gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob
+ a3a031c83f7e6f75afedffdeac38a3ee  gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob
  f81e4d1631666dc73cab672753a19f96  gcc/testsuite/cobol.dg/group2/POINTER__display.cob
  1a03d00f7a2dbbf286fe10017695b9e0  gcc/testsuite/cobol.dg/group2/POINTER__display.out
  b998cc667e7bffb26d211ded81f2ea9a  gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.cob
  ae1cac648a1ff6940b99fbaaedea1b6e  gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.out
+ ddc1206a8eee9490055e91297ef1f969  gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob
+ 3808cca0e34b8c45520af32017d2be67  gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out
+ 038d6a02037bfd4730dd1a5d0e6fa0e5  gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob
+ 86aff1382616475acd4027fc4a483952  gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out
+ 75dfdc364dc4cb8d9203030c20a0193a  gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob
+ 306b917492c853025f4e121e140dee5c  gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out
  448a75a2b6dd9b774660282c8eb9b9db  gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.cob
  01fa1923d7242ef724d4c43d1ded0d40  gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.out
  bd5f52542e3c7acb921b24bc4f5a7c1d  gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.cob
*************** de18d438e9f2018ba6c22153beb87973  gcc/te
*** 14740,14751 ****
--- 14857,14886 ----
  dc1dafad7c3c0c3499ca87dd61a0cb48  gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.out
  e38fa87f68f46664a4a725247faeaab1  gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.cob
  0bba0c9388bb78c11a2533fbadc2974e  gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.out
+ c63f4ece442994445b3b97fe2a8108dd  gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob
+ 43121e1ed7ce9778e6515a6349aeef22  gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out
  2abb04d0384876e94a8ebacbc571d302  gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob
  ed75a024a3fc8efd498fecff6e287928  gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out
  7bf14a602d7a0547e0f9f2164a3df0c3  gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob
  0a74c346e7576df97fc8cd5eda3c6f43  gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out
  3a05b449be7a9a0c7692038ca6fa06e2  gcc/testsuite/cobol.dg/group2/Repository_functions_clause.cob
  295a45c9a89fce7d2454228853007a55  gcc/testsuite/cobol.dg/group2/Repository_functions_clause.out
+ 551208604a39f8c738cb04d9f3974c15  gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob
+ 5bf43d6c0e0a558aadbd49c154ddb2c2  gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob
+ 67b7a6e377e56135eafa5ca5bee77713  gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob
+ 79c7d1cb85a494559fd0b684a57f9610  gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob
+ 4c0be3d6a1647497be537a28be82aeff  gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out
+ 174e83c4551c443a8cada72eb7490f43  gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob
+ 60568a7a1509ccec1196f00551390628  gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out
+ 1e60801f92662a00d2d0251bd9a22d72  gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob
+ 17e17c62bf9081a1ce5669bfc908c04f  gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out
+ 44864579b2b9e89a3f8efbc748ef644e  gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob
+ 5f6e08b25387e623d5bda7820b74d798  gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out
+ da4c31a3bdb07cd296d7d6c9ce1f9f79  gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob
+ bfe9a0e1b08273f3d0f06b4b69cff91b  gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob
+ 9e9aafcfe8f4f958de32e91230e49790  gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob
+ 431cfffda18b4925568723730bb76095  gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out
+ 53ea64d68396f6b00adec1fc82ac8a37  gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob
  404f41d00a6cdadc15664ec7458639f4  gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.cob
  5cde5131bc03a36e9d12bccadc6a28a0  gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.out
  f5fd4be048d78f148c18cc810bf4e8f5  gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.cob
*************** f5fd4be048d78f148c18cc810bf4e8f5  gcc/te
*** 14757,14762 ****
--- 14892,14899 ----
  f1433e4ad768b452d26c539bc7c90c60  gcc/testsuite/cobol.dg/group2/Simple_floating-point_VALUE_and_MOVE.out
  ef7879926c9e6fc15a9b649742410f18  gcc/testsuite/cobol.dg/group2/Simple_p-scaling.cob
  80c9433022b9df365ff07308d32b9336  gcc/testsuite/cobol.dg/group2/Simple_p-scaling.out
+ da9195f694cdf531af045955fcb1be4f  gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob
+ fb4f975832cfa17a33f58aba4b9cb092  gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out
  7f3d1774a5a66e799e1f242a238d9ead  gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob
  935e5657c4ee72898cfbc35dcd96645b  gcc/testsuite/cobol.dg/group2/Static_reference_modification.out
  f63ca4b717f71c2f2a1bf43cab87b9fe  gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.cob
*************** ec066836b3ad69bb7892cc5d9a34cc93  gcc/te
*** 14767,14772 ****
--- 14904,14919 ----
  bf21188860d25a68d2f9c85951bdde9b  gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.out
  491ea987363ee8408cc92ed94c3156c1  gcc/testsuite/cobol.dg/group2/UDF_with_recursion.cob
  7941221362e9e3a59bf6bc5f15a12beb  gcc/testsuite/cobol.dg/group2/UDF_with_recursion.out
+ 37efd0098c6603b02633159392087a45  gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob
+ 54ecfd7028c403ed7b72366f1bf5fe52  gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob
+ 509be5022c900a7a34acd8eb097a0c6e  gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob
+ bdbf9d12e14720fb7081dad4477a7bae  gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob
+ 94779fadfcd69b9dabbc720f231c4593  gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob
+ db11d5a6931ffe03ab944182745e5364  gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out
+ 3d52c7ffaea8a5516030f13da4a7ec1a  gcc/testsuite/cobol.dg/group2/_-static__compilation.cob
+ 57663a45c549ad6b8504e86b91faf92b  gcc/testsuite/cobol.dg/group2/_-static__compilation.out
+ 7ccbb0b17254a4346153a02e58218979  gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob
+ e54e577d8de75b710938fa62794487fc  gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out
  a75f94d635d6f81fcf6e666df78229f2  gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.cob
  5bc38b398042105e78868858a0adf5fd  gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.out
  5ee523a5b423e4957df5452b15a66ba1  gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.cob
*************** b6f3cbabd3fb752ace73590e7135e551  gcc/te
*** 19567,19572 ****
--- 19714,19720 ----
  14a6242de0a2e59abd4b2ccf95495c91  gcc/testsuite/g++.dg/cpp1y/constexpr-ptrsub1.C
  3ebd2f678927c3d6b60ebc749680a96e  gcc/testsuite/g++.dg/cpp1y/constexpr-recursion1.C
  b3f600f6748096c5ac4271189599f1d0  gcc/testsuite/g++.dg/cpp1y/constexpr-recursion2.C
+ 12c0eb97ac41d27ddcd63f19ad672387  gcc/testsuite/g++.dg/cpp1y/constexpr-recursion3.C
  777febedb9b77383ec600e70a1668eb9  gcc/testsuite/g++.dg/cpp1y/constexpr-ref1.C
  60f807456796c8ef2678ab89851a8dd9  gcc/testsuite/g++.dg/cpp1y/constexpr-reinterpret3.C
  4f2e969a81be7a57cb28aad1fa0f584e  gcc/testsuite/g++.dg/cpp1y/constexpr-reinterpret4.C
*************** ca398f2b2e8443dc7a94b70c83a40ca1  gcc/te
*** 21206,21211 ****
--- 21354,21361 ----
  1494c15487c9bc95ba5295fa3498592b  gcc/testsuite/g++.dg/cpp2a/concepts-nondep2.C
  7ceb4140c2faad64ec92d7cee1fa713b  gcc/testsuite/g++.dg/cpp2a/concepts-nondep3.C
  a6eb0831ebd2429090207fd4ded81c24  gcc/testsuite/g++.dg/cpp2a/concepts-nondep4.C
+ 4980bdd61337c3b80f121690312812eb  gcc/testsuite/g++.dg/cpp2a/concepts-nondep5.C
+ 25f5af062af86f61a0ac1622ed0c8274  gcc/testsuite/g++.dg/cpp2a/concepts-nondep6.C
  346f87c83404f356f2db97a19e1e04a2  gcc/testsuite/g++.dg/cpp2a/concepts-p1141.C
  517f6d7a5f4dd6f650d5d9a39a8a2f24  gcc/testsuite/g++.dg/cpp2a/concepts-p2092.C
  c02adf26d58e820807cae8699c98d45a  gcc/testsuite/g++.dg/cpp2a/concepts-p2113a.C
*************** f713831318164c8a8d53cee4f41a5feb  gcc/te
*** 21341,21347 ****
  7bff00217f0937919ad829a2aa4986de  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat1.C
  494a9362815e7269cd14d3b6eb900c68  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat2.C
  c74823853141d61f8e8a8e1d3a3f8bd4  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat3.C
! 333e80767f9ac98151ff6ec608cef8ab  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C
  a5dcc7f1104645e397389de9dc3d2362  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat5.C
  05d0c4aeef396d36ed2d0d824682b06c  gcc/testsuite/g++.dg/cpp2a/concepts-redecl1.C
  89a75de6ffea2b5931b15021369b2a4e  gcc/testsuite/g++.dg/cpp2a/concepts-requires1.C
--- 21491,21497 ----
  7bff00217f0937919ad829a2aa4986de  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat1.C
  494a9362815e7269cd14d3b6eb900c68  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat2.C
  c74823853141d61f8e8a8e1d3a3f8bd4  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat3.C
! 58cbdb27d3cbc7ef7d656e1588509527  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C
  a5dcc7f1104645e397389de9dc3d2362  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat5.C
  05d0c4aeef396d36ed2d0d824682b06c  gcc/testsuite/g++.dg/cpp2a/concepts-redecl1.C
  89a75de6ffea2b5931b15021369b2a4e  gcc/testsuite/g++.dg/cpp2a/concepts-requires1.C
*************** e25bc28f0b6e34ad034e87a07431c5ce  gcc/te
*** 21662,21668 ****
  a5ab0c1acf96ddc777b5af2b1b69b23d  gcc/testsuite/g++.dg/cpp2a/constinit13.C
  5ec173deec75e686b7e414c08b6d07cf  gcc/testsuite/g++.dg/cpp2a/constinit14.C
  94ee35190fa1fe7affa8b19c3f096e85  gcc/testsuite/g++.dg/cpp2a/constinit15.C
! b4a46903f1578c613195d03127dbcae5  gcc/testsuite/g++.dg/cpp2a/constinit16.C
  6711d333549a07ea54942f18c64f8a0a  gcc/testsuite/g++.dg/cpp2a/constinit17.C
  5f1a0d190f7b063f2ab37e1844af8991  gcc/testsuite/g++.dg/cpp2a/constinit18.C
  788c9769d26d7dc940ca016c456aa46b  gcc/testsuite/g++.dg/cpp2a/constinit19.C
--- 21812,21818 ----
  a5ab0c1acf96ddc777b5af2b1b69b23d  gcc/testsuite/g++.dg/cpp2a/constinit13.C
  5ec173deec75e686b7e414c08b6d07cf  gcc/testsuite/g++.dg/cpp2a/constinit14.C
  94ee35190fa1fe7affa8b19c3f096e85  gcc/testsuite/g++.dg/cpp2a/constinit15.C
! 5818de1ec9e9c9b804f4d4270e20d353  gcc/testsuite/g++.dg/cpp2a/constinit16.C
  6711d333549a07ea54942f18c64f8a0a  gcc/testsuite/g++.dg/cpp2a/constinit17.C
  5f1a0d190f7b063f2ab37e1844af8991  gcc/testsuite/g++.dg/cpp2a/constinit18.C
  788c9769d26d7dc940ca016c456aa46b  gcc/testsuite/g++.dg/cpp2a/constinit19.C
*************** ea31517e527d7eb88edeeab341ec1a8b  gcc/te
*** 21680,21686 ****
  a36a7ca1d0eff1f81629dd71a462961f  gcc/testsuite/g++.dg/cpp2a/decomp1-aux.cc
  97d028d9e7af8226aa281ebcad5bf29f  gcc/testsuite/g++.dg/cpp2a/decomp1.C
  3f0f0087d8090182027f49fb3162aad7  gcc/testsuite/g++.dg/cpp2a/decomp10.C
! aad29b064fff817ac1e3a613ef44faf8  gcc/testsuite/g++.dg/cpp2a/decomp2.C
  8f3b9a6346c7c909ec6ae92d8da636ac  gcc/testsuite/g++.dg/cpp2a/decomp3.C
  c45bd99bf81821c6c33a6bec2da4fce3  gcc/testsuite/g++.dg/cpp2a/decomp4.C
  0cbb7f35ec543d54c041228759e5d4b2  gcc/testsuite/g++.dg/cpp2a/decomp5.C
--- 21830,21836 ----
  a36a7ca1d0eff1f81629dd71a462961f  gcc/testsuite/g++.dg/cpp2a/decomp1-aux.cc
  97d028d9e7af8226aa281ebcad5bf29f  gcc/testsuite/g++.dg/cpp2a/decomp1.C
  3f0f0087d8090182027f49fb3162aad7  gcc/testsuite/g++.dg/cpp2a/decomp10.C
! b43ef64f974b1072708b231b049e3ed4  gcc/testsuite/g++.dg/cpp2a/decomp2.C
  8f3b9a6346c7c909ec6ae92d8da636ac  gcc/testsuite/g++.dg/cpp2a/decomp3.C
  c45bd99bf81821c6c33a6bec2da4fce3  gcc/testsuite/g++.dg/cpp2a/decomp4.C
  0cbb7f35ec543d54c041228759e5d4b2  gcc/testsuite/g++.dg/cpp2a/decomp5.C
*************** dd6972e7b92113e6456388c099d1d0fc  gcc/te
*** 22554,22562 ****
--- 22704,22715 ----
  f15a595e6ec58a7465aebec0a57e3df4  gcc/testsuite/g++.dg/diagnostic/function-color1.C
  3ba4c3c8b2c3fcce20e48ba33926269f  gcc/testsuite/g++.dg/diagnostic/functional-cast-to-array-type-1.C
  69ce128025964839ee0839b726a643f1  gcc/testsuite/g++.dg/diagnostic/incomplete-type-1.C
+ 98bc2260c315c3b2ba9c2325d225be86  gcc/testsuite/g++.dg/diagnostic/incomplete-type-2.C
+ 66e501d02a8554cc10eeda65a7e8ba23  gcc/testsuite/g++.dg/diagnostic/incomplete-type-2a.C
  b4e50b6bf0aa4ab59b9a9cb6e129a903  gcc/testsuite/g++.dg/diagnostic/inconsistent-deduction-1.C
  35450697df4db69677623dcc4bc44bf5  gcc/testsuite/g++.dg/diagnostic/inhibit-warn-1.C
  52261a78171046d8af667baa598b3996  gcc/testsuite/g++.dg/diagnostic/inhibit-warn-2.C
+ ad85d4d35e993bf787607ebe9b7902e3  gcc/testsuite/g++.dg/diagnostic/inhibit-warn-3.C
  6d7540ee092b9f6493a209b3d3f89d93  gcc/testsuite/g++.dg/diagnostic/integral-array-size-1.C
  a435c50bbe06411da7ec50c48b8deb26  gcc/testsuite/g++.dg/diagnostic/lang-dump-1.C
  37b0194164dc105d145926e992c5fffa  gcc/testsuite/g++.dg/diagnostic/local1.C
*************** c4e9e836f72626730cc2876443c9d998  gcc/te
*** 25159,25164 ****
--- 25312,25318 ----
  e66c84f48f938ed2bb548ce51957afce  gcc/testsuite/g++.dg/ipa/pr113757.C
  d248bf5deb963f7dfbec9babb6fb70df  gcc/testsuite/g++.dg/ipa/pr116572.C
  9183db2978d574bc26d43a0d942ec920  gcc/testsuite/g++.dg/ipa/pr118243.C
+ 6cd3566146c3d805aaa4fc95d93401c3  gcc/testsuite/g++.dg/ipa/pr120146.C
  02f3704c0511b2d171c55dbf09c64325  gcc/testsuite/g++.dg/ipa/pr43695.C
  5345293723ad062b59b168c319738e1e  gcc/testsuite/g++.dg/ipa/pr43812.C
  b001cbe3dfdeb7d2a1061f024aa08ea4  gcc/testsuite/g++.dg/ipa/pr44372.C
*************** b0c0786c803eaf05e6755f729c87257e  gcc/te
*** 29617,29622 ****
--- 29771,29783 ----
  3bf0c0d4697ad1ada3cda87b9bc2dc61  gcc/testsuite/g++.dg/rtti/typeid8.C
  1f8ec1c3ba15e07e5cd63d52ea64abab  gcc/testsuite/g++.dg/rtti/typeid9.C
  1f6dccfd0b7bb5ffeb1fce36767c67d0  gcc/testsuite/g++.dg/rtti/undeclared1.C
+ 13ec6b1e53a69c190e7472f3d0c0202e  gcc/testsuite/g++.dg/sarif-output/logical-locations-1.C
+ 001f2d6fa6aa48fa72bcae762239962e  gcc/testsuite/g++.dg/sarif-output/logical-locations-1.py
+ b755386b601011353d28c87a9a68a77a  gcc/testsuite/g++.dg/sarif-output/logical-locations-2.C
+ 36f6783f5de1456e225c3021b9d1c711  gcc/testsuite/g++.dg/sarif-output/logical-locations-2.py
+ 3cabfac1c8007a189f66bf9bcb77d4fc  gcc/testsuite/g++.dg/sarif-output/logical-locations-3.C
+ b4bd37522628a12b55d31f340b563b70  gcc/testsuite/g++.dg/sarif-output/logical-locations-3.py
+ 3800c90b4f234cb8ed1530b657306249  gcc/testsuite/g++.dg/sarif-output/sarif-output.exp
  aee2d86d69331bf86f4fc179eaf2f8aa  gcc/testsuite/g++.dg/semicolon-fixits.C
  358da784b700bf42b91032b2ceb71406  gcc/testsuite/g++.dg/simulate-thread/atomics-1.C
  3357bf9a2204710e948cb278fb4c4266  gcc/testsuite/g++.dg/simulate-thread/atomics-2.C
*************** b74251af1154060812e45ff5697e903e  gcc/te
*** 37236,37241 ****
--- 37397,37403 ----
  9e6057d653e40c53fabdac3cf7cf9dfd  gcc/testsuite/g++.target/i386/pr116896-3.C
  c6fc9957abb94d73bf6685e341312513  gcc/testsuite/g++.target/i386/pr118068.C
  309d3ebda65ef0d79e21d0a9c0310055  gcc/testsuite/g++.target/i386/pr119689.C
+ 38180dda246555aa4a3e76db7cd452f1  gcc/testsuite/g++.target/i386/pr120036.C
  55fb67abf6517f92b1a0240d2c06b5c5  gcc/testsuite/g++.target/i386/pr35513-1.C
  14dde546e4eefec7aa6d1ac41261cb16  gcc/testsuite/g++.target/i386/pr35513-2.C
  1c706f97b6d93c0124dc4a203c98f6d2  gcc/testsuite/g++.target/i386/pr57362.C
*************** e24f0e502cef393d2dbeeea684980651  gcc/te
*** 37425,37430 ****
--- 37587,37593 ----
  d8ba8c12676113bab781623c9b4c8a1f  gcc/testsuite/g++.target/riscv/pr119832.C
  4c45e102d6dd19ee08a476904b64542d  gcc/testsuite/g++.target/riscv/pr96759.C
  ac37e529bda1269045c3681cc4b425dd  gcc/testsuite/g++.target/riscv/pr97682.C
+ daceaf1f0da7e5c955e4b13180536bca  gcc/testsuite/g++.target/riscv/redundant-andi.C
  6e6f612caa7b4f4e5eea9cd6bba4227b  gcc/testsuite/g++.target/riscv/redundant-bitmap-1.C
  7079827a2e9106d7dd26baf0312903e6  gcc/testsuite/g++.target/riscv/redundant-bitmap-2.C
  5e656f7ba916750fdf3fd708236e7e9a  gcc/testsuite/g++.target/riscv/redundant-bitmap-3.C
*************** beabf14243b2b65800f0733144ef725e  gcc/te
*** 47476,47481 ****
--- 47639,47647 ----
  dc12526b2575b25bbb0263164484aeb3  gcc/testsuite/gcc.dg/hoist-register-pressure-1.c
  0df11bb9dd20d8cf406324e2baa18d83  gcc/testsuite/gcc.dg/hoist-register-pressure-2.c
  dd0c3d86be7753351dad89d50055a01e  gcc/testsuite/gcc.dg/hoist-register-pressure-3.c
+ 1010470d2b35619d2f4a98c1e6fa225e  gcc/testsuite/gcc.dg/html-output/html-output.exp
+ b8ec5fe4c9b79ab341b7f8254518341f  gcc/testsuite/gcc.dg/html-output/missing-semicolon.c
+ e77b07af7581d7409e7b270a789ea26e  gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
  87ba2fabf5289d6525439ba48a5c27f8  gcc/testsuite/gcc.dg/hwasan/hwasan.exp
  f20946bfbddc67e74cf619bd02e31549  gcc/testsuite/gcc.dg/hwasan/nested-functions-0.c
  36c11146134a4d86c84c359d41e52a7c  gcc/testsuite/gcc.dg/hwasan/nested-functions-1.c
*************** c8d0678c2016d21f4da748a79301946a  gcc/te
*** 47807,47812 ****
--- 47973,47979 ----
  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
  c8295ff7fd7e271d17e7609620f5dfcb  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
*************** b9cc7cb6d7d65f984ee0a8985b8e0e6e  gcc/te
*** 48158,48164 ****
  4c9f4a6440d7bd9fa3f564ee6b91b50c  gcc/testsuite/gcc.dg/lto/materialize-1_1.c
  ae3d0968e71a8445a5ea662452d0f5ce  gcc/testsuite/gcc.dg/lto/modref-1_0.c
  99c5a2a8670ef4b0b82cb919884648f5  gcc/testsuite/gcc.dg/lto/modref-1_1.c
! f98a566b3b2ff6733ed676024f2fb9f5  gcc/testsuite/gcc.dg/lto/modref-2_0.c
  81b29b4be5c510dcb3e2600cad9e406b  gcc/testsuite/gcc.dg/lto/modref-3_0.c
  1eb5a5a9618f46e44dc9d6ee2a4c8bc4  gcc/testsuite/gcc.dg/lto/modref-3_1.c
  cbe8129904b881293ad63c724322c5f7  gcc/testsuite/gcc.dg/lto/modref-4_0.c
--- 48325,48331 ----
  4c9f4a6440d7bd9fa3f564ee6b91b50c  gcc/testsuite/gcc.dg/lto/materialize-1_1.c
  ae3d0968e71a8445a5ea662452d0f5ce  gcc/testsuite/gcc.dg/lto/modref-1_0.c
  99c5a2a8670ef4b0b82cb919884648f5  gcc/testsuite/gcc.dg/lto/modref-1_1.c
! 5b169ea7e4377d5b74d4e4bc6b8d1733  gcc/testsuite/gcc.dg/lto/modref-2_0.c
  81b29b4be5c510dcb3e2600cad9e406b  gcc/testsuite/gcc.dg/lto/modref-3_0.c
  1eb5a5a9618f46e44dc9d6ee2a4c8bc4  gcc/testsuite/gcc.dg/lto/modref-3_1.c
  cbe8129904b881293ad63c724322c5f7  gcc/testsuite/gcc.dg/lto/modref-4_0.c
*************** e3ddc8e23b73e7cb4adfdd561a49abfd  gcc/te
*** 48260,48266 ****
  729e7df711f59da5edc3a02fe050b9eb  gcc/testsuite/gcc.dg/lto/pr60461_0.c
  fb92fea16dbb92181a81b79e2e378036  gcc/testsuite/gcc.dg/lto/pr60720_0.c
  06c25fe0c80b8959051a62f8f034710a  gcc/testsuite/gcc.dg/lto/pr60720_1.c
! b39c95dd508be9e9b7ac18fc3a8513a3  gcc/testsuite/gcc.dg/lto/pr60779_0.c
  1a1c88217af601fc3c63c36ed0c97179  gcc/testsuite/gcc.dg/lto/pr60779_1.c
  c1c0cfd303506bc9c3f34fb6cf1e23cd  gcc/testsuite/gcc.dg/lto/pr60820_0.c
  c712274fdef323c534029cdcf691aa73  gcc/testsuite/gcc.dg/lto/pr60820_1.c
--- 48427,48433 ----
  729e7df711f59da5edc3a02fe050b9eb  gcc/testsuite/gcc.dg/lto/pr60461_0.c
  fb92fea16dbb92181a81b79e2e378036  gcc/testsuite/gcc.dg/lto/pr60720_0.c
  06c25fe0c80b8959051a62f8f034710a  gcc/testsuite/gcc.dg/lto/pr60720_1.c
! ccafcbcd2accc57e1b54fe7ab4fdd851  gcc/testsuite/gcc.dg/lto/pr60779_0.c
  1a1c88217af601fc3c63c36ed0c97179  gcc/testsuite/gcc.dg/lto/pr60779_1.c
  c1c0cfd303506bc9c3f34fb6cf1e23cd  gcc/testsuite/gcc.dg/lto/pr60820_0.c
  c712274fdef323c534029cdcf691aa73  gcc/testsuite/gcc.dg/lto/pr60820_1.c
*************** bb20191ab0ad6e0d6ba368003d857339  gcc/te
*** 48857,48874 ****
  ac52c5d4de0c71ac6754e0b97aa2d1aa  gcc/testsuite/gcc.dg/plugin/diagnostic-test-text-art-none.c
  42f7a9a0ce93b9a8f3456309a30456af  gcc/testsuite/gcc.dg/plugin/diagnostic-test-text-art-unicode-bw.c
  60342111ed9bfef70e8686e973bb3988  gcc/testsuite/gcc.dg/plugin/diagnostic-test-text-art-unicode-color.c
- fbb9711baad09cde99957e2e6993f7e4  gcc/testsuite/gcc.dg/plugin/diagnostic-test-xhtml-1.c
  34c7b4e34dfe3469b8dd42ca4a14f1bd  gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc
  760ef2ce64f353acb078fd7035069296  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.cc
  db3e6ef9ec4da923b133090fdbe255cc  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.cc
  55c90f2e521240707723c45e6dbb1902  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.cc
  75e9c4ca32ac5c1329afb3fd1be6a829  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_nesting.cc
! a8b508b3d17c3ec120061518cc8349d5  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.cc
  0a37946450abc0b85ed4c74f29640091  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc
  1ccc719787fbe42fe419d1cbaff567f7  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_string_literals.cc
  b6d4440d9bc5c3c1e7f4a283f75cdff7  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_text_art.cc
  5717eba351963438141001f9817dac7f  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.cc
- 7b4afb7e54762919d5ba7d98074b7535  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.cc
  07558668b4c054118c12c8514bb94698  gcc/testsuite/gcc.dg/plugin/dump-1.c
  88c83e306ac4f214fd9bc80a3eba0054  gcc/testsuite/gcc.dg/plugin/dump-2.c
  2f6c0c2319ecba4687d8ba0acc7e8ffd  gcc/testsuite/gcc.dg/plugin/dump_plugin.cc
--- 49024,49039 ----
  ac52c5d4de0c71ac6754e0b97aa2d1aa  gcc/testsuite/gcc.dg/plugin/diagnostic-test-text-art-none.c
  42f7a9a0ce93b9a8f3456309a30456af  gcc/testsuite/gcc.dg/plugin/diagnostic-test-text-art-unicode-bw.c
  60342111ed9bfef70e8686e973bb3988  gcc/testsuite/gcc.dg/plugin/diagnostic-test-text-art-unicode-color.c
  34c7b4e34dfe3469b8dd42ca4a14f1bd  gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc
  760ef2ce64f353acb078fd7035069296  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.cc
  db3e6ef9ec4da923b133090fdbe255cc  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.cc
  55c90f2e521240707723c45e6dbb1902  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.cc
  75e9c4ca32ac5c1329afb3fd1be6a829  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_nesting.cc
! 7a7a20c91af2e903f8c7c359a1fc02b5  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.cc
  0a37946450abc0b85ed4c74f29640091  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc
  1ccc719787fbe42fe419d1cbaff567f7  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_string_literals.cc
  b6d4440d9bc5c3c1e7f4a283f75cdff7  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_text_art.cc
  5717eba351963438141001f9817dac7f  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.cc
  07558668b4c054118c12c8514bb94698  gcc/testsuite/gcc.dg/plugin/dump-1.c
  88c83e306ac4f214fd9bc80a3eba0054  gcc/testsuite/gcc.dg/plugin/dump-2.c
  2f6c0c2319ecba4687d8ba0acc7e8ffd  gcc/testsuite/gcc.dg/plugin/dump_plugin.cc
*************** f9c7b381fd9a66507c89840b72cbbd96  gcc/te
*** 48898,48914 ****
  4644aff4e3d9b41ef0b44eb441b3e574  gcc/testsuite/gcc.dg/plugin/known-fns-1.c
  d3e84ae842f69911a3ac0ceb96542627  gcc/testsuite/gcc.dg/plugin/location-overflow-test-1.c
  b584a46252319e63ce8a18cd3d89f07c  gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c
  502e1f072faf23c44132129d5a080fdb  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-1.h
  8bc743f30102ffbfb1bc6a409fc63a2e  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-2.h
  6d6028de00b79eb5be6f42b7a4332c90  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.c
  96ff609825b6520f9e9cc6f866930933  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.h
! d14b8eacad95240d9a9693740543d326  gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc
  c323b7b4ac0cf2caa641c6bb31350375  gcc/testsuite/gcc.dg/plugin/must-tail-call-1.c
  de7a6b85ff1667e6ef4b89117e774f2d  gcc/testsuite/gcc.dg/plugin/must-tail-call-2.c
  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
! 092914f07826463324254b782d57d525  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
--- 49063,49085 ----
  4644aff4e3d9b41ef0b44eb441b3e574  gcc/testsuite/gcc.dg/plugin/known-fns-1.c
  d3e84ae842f69911a3ac0ceb96542627  gcc/testsuite/gcc.dg/plugin/location-overflow-test-1.c
  b584a46252319e63ce8a18cd3d89f07c  gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c
+ 9e170fe1467d0a1b2ec0d3baf50cff4b  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-1.h
+ 668a3b5ad920346b135fa852ca249d17  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-2.h
+ be795e2075413ef468ce241bac4503e2  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047.c
+ 6a52c4783a498c1b2c1277c4196e9800  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-1.h
+ 668a3b5ad920346b135fa852ca249d17  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-2.h
+ d599542d2bc9679a29260101b5c82178  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061.c
  502e1f072faf23c44132129d5a080fdb  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-1.h
  8bc743f30102ffbfb1bc6a409fc63a2e  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-2.h
  6d6028de00b79eb5be6f42b7a4332c90  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.c
  96ff609825b6520f9e9cc6f866930933  gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.h
! 47922d1e280d753ecebc1c5e88e9463e  gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc
  c323b7b4ac0cf2caa641c6bb31350375  gcc/testsuite/gcc.dg/plugin/must-tail-call-1.c
  de7a6b85ff1667e6ef4b89117e774f2d  gcc/testsuite/gcc.dg/plugin/must-tail-call-2.c
  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
! 2990433671ef6071145b08b31dbbede4  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
*************** cccc06652033bffb0ed73a8f12d234c2  gcc/te
*** 49529,49535 ****
  c7a64c754e3bec3fcb350f02eeca455c  gcc/testsuite/gcc.dg/pr119001-2.c
  33c13391b7d0c5d156ce1488a8cece3f  gcc/testsuite/gcc.dg/pr119071.c
  a3d075dd1b96232581aa40c9e02294e1  gcc/testsuite/gcc.dg/pr119151.c
! e5e5df197c2e12c60a1250e1ecaeb3eb  gcc/testsuite/gcc.dg/pr119160.c
  23b8c99f9e2dfda91a95f1195ab38bfd  gcc/testsuite/gcc.dg/pr119183.c
  5b4015cb994569a43c505c35b96cda44  gcc/testsuite/gcc.dg/pr119204.c
  749c769f6f099fb46192e06fcacafc89  gcc/testsuite/gcc.dg/pr119287.c
--- 49700,49706 ----
  c7a64c754e3bec3fcb350f02eeca455c  gcc/testsuite/gcc.dg/pr119001-2.c
  33c13391b7d0c5d156ce1488a8cece3f  gcc/testsuite/gcc.dg/pr119071.c
  a3d075dd1b96232581aa40c9e02294e1  gcc/testsuite/gcc.dg/pr119151.c
! c13ce026e69ffee8d255e1d9e1c0e024  gcc/testsuite/gcc.dg/pr119160.c
  23b8c99f9e2dfda91a95f1195ab38bfd  gcc/testsuite/gcc.dg/pr119183.c
  5b4015cb994569a43c505c35b96cda44  gcc/testsuite/gcc.dg/pr119204.c
  749c769f6f099fb46192e06fcacafc89  gcc/testsuite/gcc.dg/pr119287.c
*************** a38b813746f78dafd9d21f9226897ece  gcc/te
*** 49544,49551 ****
--- 49715,49724 ----
  049190a5759317b31fbb993a0bbcaeac  gcc/testsuite/gcc.dg/pr119664.c
  d46c3d817ec7eb626ac716e18003ed0b  gcc/testsuite/gcc.dg/pr119712.c
  e33af444b933ae4b76c6fd6ea535e112  gcc/testsuite/gcc.dg/pr119717.c
+ 212cef6b05e312dbd1f377cf4e35ab99  gcc/testsuite/gcc.dg/pr120048.c
  2518844f3bab4851f61e1608c80ae741  gcc/testsuite/gcc.dg/pr120057-1.c
  cb7b5505103ef079e746dd619a21ee86  gcc/testsuite/gcc.dg/pr120057-2.c
+ 5db833c38de3e5ade44290c729fb748c  gcc/testsuite/gcc.dg/pr120074.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** b1250df26ff8ccc22fe46e310c4934e6  gcc/te
*** 51212,51218 ****
  a357c4dca7ce74a04dd61ff432ff8404  gcc/testsuite/gcc.dg/pr87490.c
  9f5835dddff06438d1493a4e9eb56c06  gcc/testsuite/gcc.dg/pr87600-1.c
  941bf2bb808441fd8f30ce9dc0733891  gcc/testsuite/gcc.dg/pr87600-2.c
! 28c810126f7d3c5ae3071696d39f9f29  gcc/testsuite/gcc.dg/pr87600.h
  b7d45912d0dac5e2ce046c07528b0357  gcc/testsuite/gcc.dg/pr87672.c
  1e2ee0fcf0cc52376376b86486419c06  gcc/testsuite/gcc.dg/pr87746.c
  224228e72fa0c94015acbd06f5823e98  gcc/testsuite/gcc.dg/pr87790.c
--- 51385,51391 ----
  a357c4dca7ce74a04dd61ff432ff8404  gcc/testsuite/gcc.dg/pr87490.c
  9f5835dddff06438d1493a4e9eb56c06  gcc/testsuite/gcc.dg/pr87600-1.c
  941bf2bb808441fd8f30ce9dc0733891  gcc/testsuite/gcc.dg/pr87600-2.c
! c7fdb0e64cd1717425576831f1a0c220  gcc/testsuite/gcc.dg/pr87600.h
  b7d45912d0dac5e2ce046c07528b0357  gcc/testsuite/gcc.dg/pr87672.c
  1e2ee0fcf0cc52376376b86486419c06  gcc/testsuite/gcc.dg/pr87746.c
  224228e72fa0c94015acbd06f5823e98  gcc/testsuite/gcc.dg/pr87790.c
*************** b6a6442523e13cc8d22cef6d9b29643f  gcc/te
*** 51272,51278 ****
  b8275290466222c56ac76a85e9dc3e4f  gcc/testsuite/gcc.dg/pr89211.c
  6d86fe504f8715d8b161e54c57b05401  gcc/testsuite/gcc.dg/pr8927-1.c
  805c3b6133ae2a2da39e43c108f2cb04  gcc/testsuite/gcc.dg/pr89278.c
! 13b0978ff33d0cbc1a13a239910c73d5  gcc/testsuite/gcc.dg/pr89313.c
  a5a40cce7e2363c072bc64b0d5c4e25b  gcc/testsuite/gcc.dg/pr89314.c
  f7950ed4d54333553c86f865d0081b4f  gcc/testsuite/gcc.dg/pr89340.c
  e0bb97c06584dce3955740a9322025ef  gcc/testsuite/gcc.dg/pr89342.c
--- 51445,51451 ----
  b8275290466222c56ac76a85e9dc3e4f  gcc/testsuite/gcc.dg/pr89211.c
  6d86fe504f8715d8b161e54c57b05401  gcc/testsuite/gcc.dg/pr8927-1.c
  805c3b6133ae2a2da39e43c108f2cb04  gcc/testsuite/gcc.dg/pr89278.c
! 9f6074ff8f226351303b0a1939b89695  gcc/testsuite/gcc.dg/pr89313.c
  a5a40cce7e2363c072bc64b0d5c4e25b  gcc/testsuite/gcc.dg/pr89314.c
  f7950ed4d54333553c86f865d0081b4f  gcc/testsuite/gcc.dg/pr89340.c
  e0bb97c06584dce3955740a9322025ef  gcc/testsuite/gcc.dg/pr89342.c
*************** d29f5dbd5ce72ebe101793547b043347  gcc/te
*** 53257,53270 ****
  1336e40e86c7e304aee9bfcb04c162c0  gcc/testsuite/gcc.dg/torture/pr118953.c
  b37f032d37111cbd36d647ed8de79d98  gcc/testsuite/gcc.dg/torture/pr118954.c
  041b8ac36bd7b3e13fbc63deea99d65f  gcc/testsuite/gcc.dg/torture/pr119099.c
! f6a4ab6f3670efed8330288522d1a7fc  gcc/testsuite/gcc.dg/torture/pr119131-1.c
  36f48d63adf7bb938767e81b1f86fcfa  gcc/testsuite/gcc.dg/torture/pr119133.c
  9c991c1fac1df6e51a434cc28f3d3d0d  gcc/testsuite/gcc.dg/torture/pr119417.c
  6286b6d7f9b6777b4b6d41fea79f96cb  gcc/testsuite/gcc.dg/torture/pr119532.c
  bfdab77482901ca4badc096a22704326  gcc/testsuite/gcc.dg/torture/pr119599-1.c
  acc45859ec226bf8d285f9821bc84cff  gcc/testsuite/gcc.dg/torture/pr119973.c
  8759f48b7e824cedc5d50fae356fb24b  gcc/testsuite/gcc.dg/torture/pr120006.c
  849af32ae6aef1e9b7999f2c32ff0f83  gcc/testsuite/gcc.dg/torture/pr120059-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
--- 53430,53447 ----
  1336e40e86c7e304aee9bfcb04c162c0  gcc/testsuite/gcc.dg/torture/pr118953.c
  b37f032d37111cbd36d647ed8de79d98  gcc/testsuite/gcc.dg/torture/pr118954.c
  041b8ac36bd7b3e13fbc63deea99d65f  gcc/testsuite/gcc.dg/torture/pr119099.c
! 8e0bf786b66848fc99e8d4538c7093f8  gcc/testsuite/gcc.dg/torture/pr119131-1.c
  36f48d63adf7bb938767e81b1f86fcfa  gcc/testsuite/gcc.dg/torture/pr119133.c
  9c991c1fac1df6e51a434cc28f3d3d0d  gcc/testsuite/gcc.dg/torture/pr119417.c
  6286b6d7f9b6777b4b6d41fea79f96cb  gcc/testsuite/gcc.dg/torture/pr119532.c
  bfdab77482901ca4badc096a22704326  gcc/testsuite/gcc.dg/torture/pr119599-1.c
  acc45859ec226bf8d285f9821bc84cff  gcc/testsuite/gcc.dg/torture/pr119973.c
  8759f48b7e824cedc5d50fae356fb24b  gcc/testsuite/gcc.dg/torture/pr120006.c
+ faa7f4600800bdbdaab47877d0fb7746  gcc/testsuite/gcc.dg/torture/pr120043.c
  849af32ae6aef1e9b7999f2c32ff0f83  gcc/testsuite/gcc.dg/torture/pr120059-1.c
+ 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
  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
*************** e9ccf5561ec154e17b83f854b31ffdb3  gcc/te
*** 55397,55404 ****
  23ce2f2fa5c30c3b31998ecd5455631c  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-38.c
  a66b4d75c24b7b87fa85665ce41632e4  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-39.c
  abf36d925f7053c105cfd3f71d64a6a7  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-4.c
! f833c6ecf2070a21485d7371d3d5c264  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c
! 60db39225686824831c17d6407f84bb6  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c
  7664e29425f34ef07612177b81863392  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-42.c
  3c44a65c826682b3396bf01a82563554  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-43.c
  402ebdf60f0253784d996d6aa3f5a60d  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-44.c
--- 55574,55581 ----
  23ce2f2fa5c30c3b31998ecd5455631c  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-38.c
  a66b4d75c24b7b87fa85665ce41632e4  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-39.c
  abf36d925f7053c105cfd3f71d64a6a7  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-4.c
! 469d8ec83aa0cdb5460ffa0c2a5600b4  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c
! 30a4e921a5b006a8c137e48d39b25f78  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c
  7664e29425f34ef07612177b81863392  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-42.c
  3c44a65c826682b3396bf01a82563554  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-43.c
  402ebdf60f0253784d996d6aa3f5a60d  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-44.c
*************** ad2bfdd6a893fdb581e5cffc0c618d52  gcc/te
*** 55575,55580 ****
--- 55752,55758 ----
  b8236d8ce423075243050d2ed9692781  gcc/testsuite/gcc.dg/tree-ssa/pr118517.c
  6d2d98158a34d9ab09e487779a321f3d  gcc/testsuite/gcc.dg/tree-ssa/pr118637.c
  269c5fb72451371e1dde1dd85e06c989  gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c
+ 9f16ee3f51fd11f2ecc69288d35eb523  gcc/testsuite/gcc.dg/tree-ssa/pr120080.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
  9945ed7002a5f7d4918e8ff5eb4cb647  gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c
*************** fc05082a4654700efb64a6850ebe2949  gcc/te
*** 55702,55708 ****
  9f9141fd955640b20014b74999b32076  gcc/testsuite/gcc.dg/tree-ssa/pr30314.c
  b30f3a905d9cb1c07a3b7b7325d275a2  gcc/testsuite/gcc.dg/tree-ssa/pr30375.c
  573cf597efe5e1b29a3d6c30a72feb89  gcc/testsuite/gcc.dg/tree-ssa/pr30978.c
! 1abc5a684a68d03301f4fc1147b86a17  gcc/testsuite/gcc.dg/tree-ssa/pr31261.c
  300102f2c58251d43634d5abfd4fba78  gcc/testsuite/gcc.dg/tree-ssa/pr31521.c
  5a9052bdc105ad513c4664e8f70869e7  gcc/testsuite/gcc.dg/tree-ssa/pr31531-1.c
  246086e5e2ae0892b32fa54f0c2c8c8c  gcc/testsuite/gcc.dg/tree-ssa/pr31531-2.c
--- 55880,55886 ----
  9f9141fd955640b20014b74999b32076  gcc/testsuite/gcc.dg/tree-ssa/pr30314.c
  b30f3a905d9cb1c07a3b7b7325d275a2  gcc/testsuite/gcc.dg/tree-ssa/pr30375.c
  573cf597efe5e1b29a3d6c30a72feb89  gcc/testsuite/gcc.dg/tree-ssa/pr30978.c
! a471c96a60a01dfc07a0d410442f77a8  gcc/testsuite/gcc.dg/tree-ssa/pr31261.c
  300102f2c58251d43634d5abfd4fba78  gcc/testsuite/gcc.dg/tree-ssa/pr31521.c
  5a9052bdc105ad513c4664e8f70869e7  gcc/testsuite/gcc.dg/tree-ssa/pr31531-1.c
  246086e5e2ae0892b32fa54f0c2c8c8c  gcc/testsuite/gcc.dg/tree-ssa/pr31531-2.c
*************** be86bc81622216478087ebb0eb3b5c80  gcc/te
*** 57475,57480 ****
--- 57653,57660 ----
  69bc1904ec983301921e4284e77813fb  gcc/testsuite/gcc.dg/vect/bb-slp-pr114249.c
  2e8ef919adf71384d818b8d001167e81  gcc/testsuite/gcc.dg/vect/bb-slp-pr114435.c
  70f6ab93795e7362efbb766199500951  gcc/testsuite/gcc.dg/vect/bb-slp-pr114799.c
+ 449a56358af2ecccab64ebf0a2c70ef8  gcc/testsuite/gcc.dg/vect/bb-slp-pr115777.c
+ 7985ca78d6f56c0a2c1475513068be88  gcc/testsuite/gcc.dg/vect/bb-slp-pr119960-1.c
  d46400927215059ca9b31c5b97f6e386  gcc/testsuite/gcc.dg/vect/bb-slp-pr54400.c
  5472e7bf338627077f4e6ce8cce9944e  gcc/testsuite/gcc.dg/vect/bb-slp-pr58135.c
  7e19c3d3a663aa66906a8c708aec1d4e  gcc/testsuite/gcc.dg/vect/bb-slp-pr65935.c
*************** d6220e03e06d838a0de45843cf47a605  gcc/te
*** 58968,58973 ****
--- 59148,59156 ----
  e3103917941df88fd427f58c02de199c  gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa7.c
  a9f60b255bd045a55a1c552ca8a26db4  gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa8.c
  0931b2635277269f10668825e1fef46f  gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa9.c
+ 90cc5ab3d9018cf2d36987fb47ac2d3b  gcc/testsuite/gcc.dg/vect/vect-early-break_134-pr120089.c
+ 3081c4b62e6b3d9d8577275748ef795d  gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c
+ d69a35cfdc5358c8603e5c2e35112d75  gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c
  73bc7475d6af2bd77455abec5df316e4  gcc/testsuite/gcc.dg/vect/vect-early-break_14.c
  e90473e2ecf7c08db9278bdca5060773  gcc/testsuite/gcc.dg/vect/vect-early-break_15.c
  2232d395ceff11af9b28f269e86162c9  gcc/testsuite/gcc.dg/vect/vect-early-break_16.c
*************** a81a97f4a56c119cab9c8d7bdf895b21  gcc/te
*** 59419,59438 ****
  17860616151d9700d7693707e8b6be2b  gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c
  b0cb1e21e14035b1194c4f3f4e68becc  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
  c36c3ad97cfbf1be43ad8307f7b3eba0  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16b.c
! 6dd7759928949b527e0ea02fa471bebe  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c
! 044c9b2d662041834e07c2a69e31c0d3  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c
  28bb9727bb68f19dffb44f934f029e2d  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16e.c
  ce5218ee978fa8c2bf295aa7d2d4c9a5  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16f.c
  df907a0bedf6430cc4e5e0086f3ac9ab  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c
  30dd07bd633247c311c2eb04d6ecefe8  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17b.c
! 0106d8b247a8ff5ee3b66ccfa4bf0b38  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c
! ed21d67c5bcb927b5be474180ae64807  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c
  bf533adb9e5c51763d56908279be7daa  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17e.c
  8bc74210842e1c3ef85cd6b16de4b591  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17f.c
  ee711a645968f35d0d88969943f997df  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c
  bb816b62d1cccb292fd79316f6930a5b  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18b.c
! 4e7c4fecb527ef6a2d0c2374ee0c3e24  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c
! 603f412c2708d33f257f32af435e1437  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c
  b909da935d057e1e3a2fd43bee466656  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18e.c
  c8ce1f539ab725deadb9940aa9fc03d4  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18f.c
  b0cd25f77f52d4eebc59d342a34d3672  gcc/testsuite/gcc.dg/vect/vect-simd-clone-19.c
--- 59602,59621 ----
  17860616151d9700d7693707e8b6be2b  gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c
  b0cb1e21e14035b1194c4f3f4e68becc  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
  c36c3ad97cfbf1be43ad8307f7b3eba0  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16b.c
! 235df25db312428ee0327cc99566c491  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c
! 1dedb37c82844ddd86275fde6d32c493  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c
  28bb9727bb68f19dffb44f934f029e2d  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16e.c
  ce5218ee978fa8c2bf295aa7d2d4c9a5  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16f.c
  df907a0bedf6430cc4e5e0086f3ac9ab  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c
  30dd07bd633247c311c2eb04d6ecefe8  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17b.c
! 8914ba9fbe02eab11aa1bdc58c53f2d5  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c
! 2c5804b394976fd97e4251f6e3a5f024  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c
  bf533adb9e5c51763d56908279be7daa  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17e.c
  8bc74210842e1c3ef85cd6b16de4b591  gcc/testsuite/gcc.dg/vect/vect-simd-clone-17f.c
  ee711a645968f35d0d88969943f997df  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c
  bb816b62d1cccb292fd79316f6930a5b  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18b.c
! adae6c0d76240f5c777e53659ee248f0  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c
! a3d17e5ab474fc3beb8862101208a853  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c
  b909da935d057e1e3a2fd43bee466656  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18e.c
  c8ce1f539ab725deadb9940aa9fc03d4  gcc/testsuite/gcc.dg/vect/vect-simd-clone-18f.c
  b0cd25f77f52d4eebc59d342a34d3672  gcc/testsuite/gcc.dg/vect/vect-simd-clone-19.c
*************** ed80808a6a48521e174e06ce44642e0c  gcc/te
*** 61671,61677 ****
  c117eaeade3674a6a21013315de55b26  gcc/testsuite/gcc.target/aarch64/pr99873_1.c
  c45bc47433163208f0aec414ada73705  gcc/testsuite/gcc.target/aarch64/pr99873_2.c
  18c52a2faa4e83538abeef107e3b4d8a  gcc/testsuite/gcc.target/aarch64/pr99873_3.c
! 5e9a238ae88bfc957497e635ed104144  gcc/testsuite/gcc.target/aarch64/pr99988.c
  6abd9df2e9c6482903f6b17629c288d1  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1.c
  cc4f69997a3864b3299f1b4809507883  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1b.c
  be30d927e2df67d4fe2786d0d026bbaa  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_2.c
--- 61854,61860 ----
  c117eaeade3674a6a21013315de55b26  gcc/testsuite/gcc.target/aarch64/pr99873_1.c
  c45bc47433163208f0aec414ada73705  gcc/testsuite/gcc.target/aarch64/pr99873_2.c
  18c52a2faa4e83538abeef107e3b4d8a  gcc/testsuite/gcc.target/aarch64/pr99873_3.c
! ae5cf71ae02c3cde7a67cfb54ec03bbe  gcc/testsuite/gcc.target/aarch64/pr99988.c
  6abd9df2e9c6482903f6b17629c288d1  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1.c
  cc4f69997a3864b3299f1b4809507883  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1b.c
  be30d927e2df67d4fe2786d0d026bbaa  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_2.c
*************** c837aa90d4f65fe43a41a1df66ecddaa  gcc/te
*** 65356,65362 ****
  065185852393d4ba6508c94833c67eb2  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_3.c
  dbd822adb848a971885a06967432c628  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_4.c
  cffa63a742186323feab22505915a6e9  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_5.c
! 4427e079ae4e96814bee01be95c9fa65  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_6.c
  e681aa76b7413f54146a5660729b0f7c  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_7.c
  92c276aa826427c641795daf9568c67a  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_8.c
  05382618b8c4ba6e308d6b5ff864fab5  gcc/testsuite/gcc.target/aarch64/sve/acle/general/bic_1.c
--- 65539,65545 ----
  065185852393d4ba6508c94833c67eb2  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_3.c
  dbd822adb848a971885a06967432c628  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_4.c
  cffa63a742186323feab22505915a6e9  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_5.c
! e1e1569e7833d66a82f4148d1aae172a  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_6.c
  e681aa76b7413f54146a5660729b0f7c  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_7.c
  92c276aa826427c641795daf9568c67a  gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_8.c
  05382618b8c4ba6e308d6b5ff864fab5  gcc/testsuite/gcc.target/aarch64/sve/acle/general/bic_1.c
*************** cbc14176bcaf520187ca5e1cb7a290ba  gcc/te
*** 65479,65485 ****
  f4c9f8f5a8d604bc447fb7d463e7735f  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_2.c
  14793ed2e5397935138c3dfaf3068f34  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_3.c
  0806391c016c8debb474b7d2ccb7f9e1  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_4.c
! ba734365b41c2307c8f246196db5fb40  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_5.c
  961cd5bf40c30fe194d6c5a5bb165705  gcc/testsuite/gcc.target/aarch64/sve/addsub_1.c
  56d4c411c942789ba83621762b5183d3  gcc/testsuite/gcc.target/aarch64/sve/addsub_2.c
  b55e3f8dc6c4519bfc6514735054694b  gcc/testsuite/gcc.target/aarch64/sve/adr_1.c
--- 65662,65668 ----
  f4c9f8f5a8d604bc447fb7d463e7735f  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_2.c
  14793ed2e5397935138c3dfaf3068f34  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_3.c
  0806391c016c8debb474b7d2ccb7f9e1  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_4.c
! a01ecfddff6a97f8ab51ac44399e1b21  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_5.c
  961cd5bf40c30fe194d6c5a5bb165705  gcc/testsuite/gcc.target/aarch64/sve/addsub_1.c
  56d4c411c942789ba83621762b5183d3  gcc/testsuite/gcc.target/aarch64/sve/addsub_2.c
  b55e3f8dc6c4519bfc6514735054694b  gcc/testsuite/gcc.target/aarch64/sve/adr_1.c
*************** a04b176d1f4debec96b6eb4ccec14017  gcc/te
*** 65754,65767 ****
  71c5caab96e622a30a87c1e7d8fe0048  gcc/testsuite/gcc.target/aarch64/sve/cost_model_11.c
  246db2ce2d061b4faf830feefc2d4165  gcc/testsuite/gcc.target/aarch64/sve/cost_model_12.c
  f5f51f0ce22434617d58b4330621ef23  gcc/testsuite/gcc.target/aarch64/sve/cost_model_13.c
! c5c994981c93e2e000c8d8ff085fc54e  gcc/testsuite/gcc.target/aarch64/sve/cost_model_14.c
  d5b139bd861ddd97284d5f818eb70a78  gcc/testsuite/gcc.target/aarch64/sve/cost_model_15.c
  e918451f74d084e54a9a7ceb98f0bf8e  gcc/testsuite/gcc.target/aarch64/sve/cost_model_2.c
  8814c7380f5de0a24225ed6e4ac88c89  gcc/testsuite/gcc.target/aarch64/sve/cost_model_3.c
! bd604bfadfafeee51abf031d456ada7f  gcc/testsuite/gcc.target/aarch64/sve/cost_model_4.c
! 51a1e8a5cf0138fd5b2354face18a382  gcc/testsuite/gcc.target/aarch64/sve/cost_model_5.c
! cc0c9e0c6024d95df387c59dbbc3b810  gcc/testsuite/gcc.target/aarch64/sve/cost_model_6.c
! 287d12acddbd300dbe42a10ea2ecfd6a  gcc/testsuite/gcc.target/aarch64/sve/cost_model_7.c
  9c0a5e176f4950c32fccce38a15933c4  gcc/testsuite/gcc.target/aarch64/sve/cost_model_8.c
  97597f2f4511beabf3ac0c0a8a5e54a4  gcc/testsuite/gcc.target/aarch64/sve/cost_model_9.c
  fd871baa3308fac8d6f5e696e21d3e32  gcc/testsuite/gcc.target/aarch64/sve/cse_sve_vl_constants_1.c
--- 65937,65950 ----
  71c5caab96e622a30a87c1e7d8fe0048  gcc/testsuite/gcc.target/aarch64/sve/cost_model_11.c
  246db2ce2d061b4faf830feefc2d4165  gcc/testsuite/gcc.target/aarch64/sve/cost_model_12.c
  f5f51f0ce22434617d58b4330621ef23  gcc/testsuite/gcc.target/aarch64/sve/cost_model_13.c
! ff2b9241bd177f9b139fbf6fbf043cb3  gcc/testsuite/gcc.target/aarch64/sve/cost_model_14.c
  d5b139bd861ddd97284d5f818eb70a78  gcc/testsuite/gcc.target/aarch64/sve/cost_model_15.c
  e918451f74d084e54a9a7ceb98f0bf8e  gcc/testsuite/gcc.target/aarch64/sve/cost_model_2.c
  8814c7380f5de0a24225ed6e4ac88c89  gcc/testsuite/gcc.target/aarch64/sve/cost_model_3.c
! a8a25f8db5e9498491012098a710bc72  gcc/testsuite/gcc.target/aarch64/sve/cost_model_4.c
! 0add08eb61d6826ccc492635d021fc78  gcc/testsuite/gcc.target/aarch64/sve/cost_model_5.c
! b194a978ee74059cc3e702a67f6efd7d  gcc/testsuite/gcc.target/aarch64/sve/cost_model_6.c
! e6056f8769c9e755c4865c320478f63c  gcc/testsuite/gcc.target/aarch64/sve/cost_model_7.c
  9c0a5e176f4950c32fccce38a15933c4  gcc/testsuite/gcc.target/aarch64/sve/cost_model_8.c
  97597f2f4511beabf3ac0c0a8a5e54a4  gcc/testsuite/gcc.target/aarch64/sve/cost_model_9.c
  fd871baa3308fac8d6f5e696e21d3e32  gcc/testsuite/gcc.target/aarch64/sve/cse_sve_vl_constants_1.c
*************** cb93afa281da4a2d3cf91e28d3cc69bf  gcc/te
*** 65907,65912 ****
--- 66090,66096 ----
  aad68f8e924a8c091e990343009eb711  gcc/testsuite/gcc.target/aarch64/sve/ld1r_2.c
  8c6fc9ab810188210a988ce10c21452b  gcc/testsuite/gcc.target/aarch64/sve/ld1r_2_run.c
  035072d856617adf9545fdab7c0ec9ea  gcc/testsuite/gcc.target/aarch64/sve/ldst_ptrue_128_to_neon.c
+ b7a8d8626343550884700e0f894b1406  gcc/testsuite/gcc.target/aarch64/sve/ldst_ptrue_pat_128_to_neon.c
  1ea09f2a19c46ad516d0eb5b6d131af4  gcc/testsuite/gcc.target/aarch64/sve/live_1.c
  923bb31c870842be1bdc0760f07e09fa  gcc/testsuite/gcc.target/aarch64/sve/live_1_run.c
  39ed1486d973a97f97b58e0b6c511eab  gcc/testsuite/gcc.target/aarch64/sve/load_const_offset_1.c
*************** dbe89864fb99377871dd0d209abfd059  gcc/te
*** 66196,66213 ****
  ff2ac4b70a46e17015348c2091d8ca97  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_512.c
  4d884f04b08f8626de41656c2dc89c2b  gcc/testsuite/gcc.target/aarch64/sve/pcs/unprototyped_1.c
  dbe533f64021d2fa4e2cf74186903196  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_1.c
! 80d14a04b840bc3a3bd811fa2114d12d  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f16.c
! 286af88e1a731089d99cbc7b1ea2e1fe  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f32.c
! f127b8b40a1ff4bcaff27aee662292e6  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f64.c
! 8688e403e419da4380c38860e4c13bb9  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_mf8.c
! d051fbb29828ca8034e333484fbbca74  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s16.c
! 1b829d24f5286017ea5f91ce232c890b  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s32.c
! 2a842db4f74dccbf184a4bfc67696447  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s64.c
! 891c4efe75f04b2650a60ecc278f3998  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s8.c
! c8051d438f3559bb51bdf7f23df5e8b4  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u16.c
! 3bda56f7c9d9a02448bb01c7fa1ac729  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c
! 64f58d32f1f6e53fb82de95204847208  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u64.c
! be784ca9a5ddf6f066bc7915b4142d38  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u8.c
  85a82347712f37364a3d0b53b010504a  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_3_nosc.c
  0d2b1da457c317494bd523774a232651  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_3_sc.c
  57917e2d5014450641adb15f9801307e  gcc/testsuite/gcc.target/aarch64/sve/pcs/vpcs_1.c
--- 66380,66397 ----
  ff2ac4b70a46e17015348c2091d8ca97  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_512.c
  4d884f04b08f8626de41656c2dc89c2b  gcc/testsuite/gcc.target/aarch64/sve/pcs/unprototyped_1.c
  dbe533f64021d2fa4e2cf74186903196  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_1.c
! 137a20c72bf0967e9dfa06e3cfc38442  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f16.c
! 028675972ec81ed19039f2ca5accca46  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f32.c
! 8ce890de233e7e66ba419b4ed95c2b3c  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f64.c
! 7ff5e0f7e041ef151a559f8cd2980ccc  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_mf8.c
! f7b0aacec1e45b10755438874af7ee95  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s16.c
! cd2cb5c3e2da9ab31c1481d7b9a003a6  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s32.c
! 0e8e75badae172b7078216345703be3a  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s64.c
! 2fe9e4d3396f4bf240618b5c1122244f  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s8.c
! 1483e0851596b8848875d53f9258327b  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u16.c
! 5e2d5ac9a0afccfd7a1471ffc1b8b487  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c
! f08d260351556fa526d2efd22741feac  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u64.c
! c4376c1119d32edd62dbdbdd08e49357  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u8.c
  85a82347712f37364a3d0b53b010504a  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_3_nosc.c
  0d2b1da457c317494bd523774a232651  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_3_sc.c
  57917e2d5014450641adb15f9801307e  gcc/testsuite/gcc.target/aarch64/sve/pcs/vpcs_1.c
*************** be784ca9a5ddf6f066bc7915b4142d38  gcc/te
*** 66215,66221 ****
  700c78d8823bf7739fa28027793d9f21  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10.c
  97cb7e7106f61ce2e128ef8e2b287a5c  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10_run.c
  554f0eec3d39895e8e465acc9954378d  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_1_run.c
! d78130ede7fe7a8c472ebbcb4da07037  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c
  40ef61fe1aa9144c65314b0f7a98fa78  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2_run.c
  f247489d5a83c25a52bba3f69ccf6256  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3.c
  12e45901cb5e8fffa6c192620053ac14  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3_run.c
--- 66399,66405 ----
  700c78d8823bf7739fa28027793d9f21  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10.c
  97cb7e7106f61ce2e128ef8e2b287a5c  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10_run.c
  554f0eec3d39895e8e465acc9954378d  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_1_run.c
! 11928fb92734ba578ca3c71362426cd8  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c
  40ef61fe1aa9144c65314b0f7a98fa78  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2_run.c
  f247489d5a83c25a52bba3f69ccf6256  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3.c
  12e45901cb5e8fffa6c192620053ac14  gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3_run.c
*************** e84d1cb8e3ce67d9fc555c73dccf9a6f  gcc/te
*** 66359,66364 ****
--- 66543,66549 ----
  e9e92c2ec92da9f29261bd9d1a3cace4  gcc/testsuite/gcc.target/aarch64/sve/pred_elim_1.c
  bc00a0e0dea7500ecba0544bd58c0277  gcc/testsuite/gcc.target/aarch64/sve/pred_elim_2.c
  5db11794c73b7fe99d963e6944cfc839  gcc/testsuite/gcc.target/aarch64/sve/ptest_1.c
+ d9e5fc3ae7f311f70ee05c06f1575ee5  gcc/testsuite/gcc.target/aarch64/sve/ptrue_ldr_str.c
  be3bc45b321c4b84deacc9d04819a288  gcc/testsuite/gcc.target/aarch64/sve/recip_1.c
  10036db7501b487e51b495a4a2d24cca  gcc/testsuite/gcc.target/aarch64/sve/recip_1_run.c
  3add3c4eeb186f7df0ea71734e4f8388  gcc/testsuite/gcc.target/aarch64/sve/recip_2.c
*************** ab115fc66c3ca381694901b3efd77092  gcc/te
*** 66438,66447 ****
  b742592bc8045ec0015168c8f288d8a7  gcc/testsuite/gcc.target/aarch64/sve/sibcall_1.c
  490e20f75641a2353722e04a16e7826a  gcc/testsuite/gcc.target/aarch64/sve/simd_imm.c
  f4445d4c3ee24e3e195328a507b2d59e  gcc/testsuite/gcc.target/aarch64/sve/simd_imm_mov.c
! ea96e0c3148179cba37c3aa8410afe8f  gcc/testsuite/gcc.target/aarch64/sve/single_1.c
! aff4971b5f3193b9e2a927dfa176b6d6  gcc/testsuite/gcc.target/aarch64/sve/single_2.c
! dc2e19332dc2abe19e6f3ebbfdb15163  gcc/testsuite/gcc.target/aarch64/sve/single_3.c
! f7ebb6b139ec5de7aac9309c7c1525fb  gcc/testsuite/gcc.target/aarch64/sve/single_4.c
  be62ee77685e07cba780bef99d05a7eb  gcc/testsuite/gcc.target/aarch64/sve/single_5.c
  2b5533c811869448f2c015cec02da768  gcc/testsuite/gcc.target/aarch64/sve/slp_1.c
  2d92793326712b8d9999095da4e74955  gcc/testsuite/gcc.target/aarch64/sve/slp_10.c
--- 66623,66632 ----
  b742592bc8045ec0015168c8f288d8a7  gcc/testsuite/gcc.target/aarch64/sve/sibcall_1.c
  490e20f75641a2353722e04a16e7826a  gcc/testsuite/gcc.target/aarch64/sve/simd_imm.c
  f4445d4c3ee24e3e195328a507b2d59e  gcc/testsuite/gcc.target/aarch64/sve/simd_imm_mov.c
! bd41758e7f9337d1504182a29ac2f34a  gcc/testsuite/gcc.target/aarch64/sve/single_1.c
! 0021a0b0c231fa7c1306d6bfb4968e05  gcc/testsuite/gcc.target/aarch64/sve/single_2.c
! c69b4bba1e19dad1933f8dab40b611ec  gcc/testsuite/gcc.target/aarch64/sve/single_3.c
! 6a7ed656f683a5152eaca3d77adad186  gcc/testsuite/gcc.target/aarch64/sve/single_4.c
  be62ee77685e07cba780bef99d05a7eb  gcc/testsuite/gcc.target/aarch64/sve/single_5.c
  2b5533c811869448f2c015cec02da768  gcc/testsuite/gcc.target/aarch64/sve/slp_1.c
  2d92793326712b8d9999095da4e74955  gcc/testsuite/gcc.target/aarch64/sve/slp_10.c
*************** bf66f155c3e51c7d9f592a9699731758  gcc/te
*** 66681,66689 ****
  8005b0ab9d7eedc978d5b99f7de4fa47  gcc/testsuite/gcc.target/aarch64/sve/while_3.c
  0186967af4403f0f512a25d1c41fc1e0  gcc/testsuite/gcc.target/aarch64/sve/while_4.c
  fd4824fd92e0b806bf8d2e820d9e2c5c  gcc/testsuite/gcc.target/aarch64/sve/while_6.c
! 432632d5abefa44cd95c1b3b901c2720  gcc/testsuite/gcc.target/aarch64/sve/while_7.c
  e0827e71dc0b198a8866bfb6f12de9f0  gcc/testsuite/gcc.target/aarch64/sve/while_8.c
! 0bd6e1dd04054025d14be1102f2f9c66  gcc/testsuite/gcc.target/aarch64/sve/while_9.c
  27d8ceeb490cb745489607f06b508b65  gcc/testsuite/gcc.target/aarch64/sve/xorsign_1.c
  f243fb7673b198d762744d4c5937bfb6  gcc/testsuite/gcc.target/aarch64/sve/xorsign_1_run.c
  e13b38f2990120fb563c7e3296667346  gcc/testsuite/gcc.target/aarch64/sve/zip1_1.c
--- 66866,66874 ----
  8005b0ab9d7eedc978d5b99f7de4fa47  gcc/testsuite/gcc.target/aarch64/sve/while_3.c
  0186967af4403f0f512a25d1c41fc1e0  gcc/testsuite/gcc.target/aarch64/sve/while_4.c
  fd4824fd92e0b806bf8d2e820d9e2c5c  gcc/testsuite/gcc.target/aarch64/sve/while_6.c
! d56013852a700217e713a6bc374cab92  gcc/testsuite/gcc.target/aarch64/sve/while_7.c
  e0827e71dc0b198a8866bfb6f12de9f0  gcc/testsuite/gcc.target/aarch64/sve/while_8.c
! b9893dda4a7c7e766d6503b50fda4902  gcc/testsuite/gcc.target/aarch64/sve/while_9.c
  27d8ceeb490cb745489607f06b508b65  gcc/testsuite/gcc.target/aarch64/sve/xorsign_1.c
  f243fb7673b198d762744d4c5937bfb6  gcc/testsuite/gcc.target/aarch64/sve/xorsign_1_run.c
  e13b38f2990120fb563c7e3296667346  gcc/testsuite/gcc.target/aarch64/sve/zip1_1.c
*************** b84f1f7cf1693c2d82dffe64a42da3b4  gcc/te
*** 68888,68894 ****
  3df621a2a6702666801f613e2c1e9223  gcc/testsuite/gcc.target/arm/armv8_1m-fp64-move-1.c
  6d693ceeceae55f1fff94a935992216e  gcc/testsuite/gcc.target/arm/armv8_1m-shift-imm-1.c
  c6c1c759a610556eca59987a77084f45  gcc/testsuite/gcc.target/arm/armv8_1m-shift-reg-1.c
! 53e11cdab71cca17d6fdaf4ed9224a30  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
  5790d3efd74c1ddf5aeb2e8743385c60  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-2.c
  6385d3494ed7d5dcaa3d33b79fcfc366  gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
  2f54b8d253156a2be1577d30ce773f07  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
--- 69073,69079 ----
  3df621a2a6702666801f613e2c1e9223  gcc/testsuite/gcc.target/arm/armv8_1m-fp64-move-1.c
  6d693ceeceae55f1fff94a935992216e  gcc/testsuite/gcc.target/arm/armv8_1m-shift-imm-1.c
  c6c1c759a610556eca59987a77084f45  gcc/testsuite/gcc.target/arm/armv8_1m-shift-reg-1.c
! 5b3a2c86441e5d4b83712d58687052e0  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
  5790d3efd74c1ddf5aeb2e8743385c60  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-2.c
  6385d3494ed7d5dcaa3d33b79fcfc366  gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
  2f54b8d253156a2be1577d30ce773f07  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
*************** d342ed599b70d74fac5ae924c1a4a586  gcc/te
*** 78786,78793 ****
  fe06960188ec5cc97489b2af74d70a7c  gcc/testsuite/gcc.target/i386/minmax-3.c
  5760adec235bd90e28e149784a2dd119  gcc/testsuite/gcc.target/i386/minmax-4.c
  d4c118eef6b8875d77744f1ffe44777e  gcc/testsuite/gcc.target/i386/minmax-5.c
! 036d7236e17ac64b72e0827de729208e  gcc/testsuite/gcc.target/i386/minmax-6.c
! 07ceb25b9f45c41125f7a2b2889a6e5c  gcc/testsuite/gcc.target/i386/minmax-7.c
  72997bf36a09ab6e36d6be7b9917f67c  gcc/testsuite/gcc.target/i386/minmax-8.c
  594b46b8314909192567bd4a3b7a2b54  gcc/testsuite/gcc.target/i386/minmax-9.c
  be79d4764ced90c9229ac843869cdc05  gcc/testsuite/gcc.target/i386/mmx-1.c
--- 78971,78978 ----
  fe06960188ec5cc97489b2af74d70a7c  gcc/testsuite/gcc.target/i386/minmax-3.c
  5760adec235bd90e28e149784a2dd119  gcc/testsuite/gcc.target/i386/minmax-4.c
  d4c118eef6b8875d77744f1ffe44777e  gcc/testsuite/gcc.target/i386/minmax-5.c
! 783cc636ce6666bb0cd6c259bc2e95e1  gcc/testsuite/gcc.target/i386/minmax-6.c
! 4cbd2382e31502b879c6af2aeea362eb  gcc/testsuite/gcc.target/i386/minmax-7.c
  72997bf36a09ab6e36d6be7b9917f67c  gcc/testsuite/gcc.target/i386/minmax-8.c
  594b46b8314909192567bd4a3b7a2b54  gcc/testsuite/gcc.target/i386/minmax-9.c
  be79d4764ced90c9229ac843869cdc05  gcc/testsuite/gcc.target/i386/mmx-1.c
*************** c9065d2ec6fc0f6750fa18d0a76c0c4c  gcc/te
*** 79564,79570 ****
  d8cca194dc6db82d20ea1426711cc2ea  gcc/testsuite/gcc.target/i386/pr111267.c
  9355c41ef1e78b70305475dee4bed5c8  gcc/testsuite/gcc.target/i386/pr111306.c
  1459550770245224c9edce111674e4e5  gcc/testsuite/gcc.target/i386/pr111340.c
! c3b540d210cdd6d752703accbc3ec6e6  gcc/testsuite/gcc.target/i386/pr111657-1.c
  5792d8414a49aa4afbf19fa324e6fc73  gcc/testsuite/gcc.target/i386/pr111657.c
  a0deeb2fd02e25d52715f4bf6138a2b1  gcc/testsuite/gcc.target/i386/pr111673.c
  d4cd7dbfdbbd5e89e09dc648e484762b  gcc/testsuite/gcc.target/i386/pr111698.c
--- 79749,79755 ----
  d8cca194dc6db82d20ea1426711cc2ea  gcc/testsuite/gcc.target/i386/pr111267.c
  9355c41ef1e78b70305475dee4bed5c8  gcc/testsuite/gcc.target/i386/pr111306.c
  1459550770245224c9edce111674e4e5  gcc/testsuite/gcc.target/i386/pr111340.c
! a231d26ce4244edcd729290ba1c4c8ec  gcc/testsuite/gcc.target/i386/pr111657-1.c
  5792d8414a49aa4afbf19fa324e6fc73  gcc/testsuite/gcc.target/i386/pr111657.c
  a0deeb2fd02e25d52715f4bf6138a2b1  gcc/testsuite/gcc.target/i386/pr111673.c
  d4cd7dbfdbbd5e89e09dc648e484762b  gcc/testsuite/gcc.target/i386/pr111698.c
*************** ff72d102e6495b395a41c9ca344439f9  gcc/te
*** 79744,79749 ****
--- 79929,79936 ----
  568e67a3d2e1f459fbe474e59f248d01  gcc/testsuite/gcc.target/i386/pr117839-1a.c
  85c6f30c7af9f57afd13c4835c6a4753  gcc/testsuite/gcc.target/i386/pr117839-1b.c
  b3b074d0d46662a421a46ccd8c6a9024  gcc/testsuite/gcc.target/i386/pr117839-2.c
+ 2e7f59532288a833101c61f048549348  gcc/testsuite/gcc.target/i386/pr117839-3a.c
+ 4f36e762711d454d020d6f95654acc6a  gcc/testsuite/gcc.target/i386/pr117839-3b.c
  240efd923aa4bf46c4d60d1eb61f94ed  gcc/testsuite/gcc.target/i386/pr117860.c
  74ee7dbf306b8ed9f2be2b62f28be23e  gcc/testsuite/gcc.target/i386/pr117926.c
  e08bbff7cf306c118f15daf27a5ece77  gcc/testsuite/gcc.target/i386/pr117930.c
*************** ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/te
*** 79799,79805 ****
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
  bb420ee68e25b3f2c223a9b99a8e7c79  gcc/testsuite/gcc.target/i386/pr119784a.c
  038406363ec46be9b531268d03546b94  gcc/testsuite/gcc.target/i386/pr119784b.c
! 469ed16c44451739a0f4f6687fcda00b  gcc/testsuite/gcc.target/i386/pr119919.c
  b03b1d817538a863277c823b5e4cdf75  gcc/testsuite/gcc.target/i386/pr12092-1.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
--- 79986,79993 ----
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
  bb420ee68e25b3f2c223a9b99a8e7c79  gcc/testsuite/gcc.target/i386/pr119784a.c
  038406363ec46be9b531268d03546b94  gcc/testsuite/gcc.target/i386/pr119784b.c
! 940e784d589973675da003c24eabc2ee  gcc/testsuite/gcc.target/i386/pr119919.c
! 0a65f7a12fa8d04fa79c2af4b21b5f14  gcc/testsuite/gcc.target/i386/pr120031.c
  b03b1d817538a863277c823b5e4cdf75  gcc/testsuite/gcc.target/i386/pr12092-1.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
*************** dec686a8a3bbaf2cceca1f05fdd13a92  gcc/te
*** 81358,81364 ****
  031e44a32929718a17cbe4b6ea75e08b  gcc/testsuite/gcc.target/i386/pr91400-1.c
  2927fee3df69b51f89e75e36cc47211e  gcc/testsuite/gcc.target/i386/pr91400-2.c
  3b4e2b2c32d8bdc5a1a5b4ef145bdefc  gcc/testsuite/gcc.target/i386/pr91408.c
! 465260947117edd42727cff06d0c488e  gcc/testsuite/gcc.target/i386/pr91446.c
  ab6ee2072fb61291268093129ba13ec6  gcc/testsuite/gcc.target/i386/pr91461-1.c
  de1bf3bf26a0088e97654cd462f8a1f6  gcc/testsuite/gcc.target/i386/pr91461-2.c
  811082e592579f750af07ca87c986f2c  gcc/testsuite/gcc.target/i386/pr91461-3.c
--- 81546,81552 ----
  031e44a32929718a17cbe4b6ea75e08b  gcc/testsuite/gcc.target/i386/pr91400-1.c
  2927fee3df69b51f89e75e36cc47211e  gcc/testsuite/gcc.target/i386/pr91400-2.c
  3b4e2b2c32d8bdc5a1a5b4ef145bdefc  gcc/testsuite/gcc.target/i386/pr91408.c
! 11ef6b9690be9d4442808cf91cf4c920  gcc/testsuite/gcc.target/i386/pr91446.c
  ab6ee2072fb61291268093129ba13ec6  gcc/testsuite/gcc.target/i386/pr91461-1.c
  de1bf3bf26a0088e97654cd462f8a1f6  gcc/testsuite/gcc.target/i386/pr91461-2.c
  811082e592579f750af07ca87c986f2c  gcc/testsuite/gcc.target/i386/pr91461-3.c
*************** c39efc4096726785a0d8fb50d2037679  gcc/te
*** 81699,81705 ****
  a3e5a8589b650ac289a1ebcf789619f6  gcc/testsuite/gcc.target/i386/pr99754-1.c
  4b02ca6501588dc1490c310e786ee13e  gcc/testsuite/gcc.target/i386/pr99754-2.c
  5f031f82b484c0f439288d4926362365  gcc/testsuite/gcc.target/i386/pr99863.c
! 3e24fab4cd6a98c884b490eae74a3aaf  gcc/testsuite/gcc.target/i386/pr99881.c
  939447bef72a36fa24dc61bac7010b1b  gcc/testsuite/gcc.target/i386/pr99905.c
  bb74fe2f09b19928e6c4047fee136b0b  gcc/testsuite/gcc.target/i386/prefer-vector-width-attr.c
  d9c90a27fd6b9568c79455bcaf9faacc  gcc/testsuite/gcc.target/i386/prefetchi-1.c
--- 81887,81893 ----
  a3e5a8589b650ac289a1ebcf789619f6  gcc/testsuite/gcc.target/i386/pr99754-1.c
  4b02ca6501588dc1490c310e786ee13e  gcc/testsuite/gcc.target/i386/pr99754-2.c
  5f031f82b484c0f439288d4926362365  gcc/testsuite/gcc.target/i386/pr99863.c
! e2033457a6fda578099d3b1c2092a4fa  gcc/testsuite/gcc.target/i386/pr99881.c
  939447bef72a36fa24dc61bac7010b1b  gcc/testsuite/gcc.target/i386/pr99905.c
  bb74fe2f09b19928e6c4047fee136b0b  gcc/testsuite/gcc.target/i386/prefer-vector-width-attr.c
  d9c90a27fd6b9568c79455bcaf9faacc  gcc/testsuite/gcc.target/i386/prefetchi-1.c
*************** cb18f5be95ab3fbf67fc1c5e4ef5ba2b  gcc/te
*** 84939,84945 ****
  13d1d93ef325676e26cb149464158713  gcc/testsuite/gcc.target/powerpc/block-cmp-2.c
  c46592d7ef2d4d65a6e7d37781eb6aa8  gcc/testsuite/gcc.target/powerpc/block-cmp-3.c
  27f0261afae3e1d9a6470641dcf8cf23  gcc/testsuite/gcc.target/powerpc/block-cmp-4.c
! 47ac68f4cf1fb91de16644ace1749dd7  gcc/testsuite/gcc.target/powerpc/block-cmp-8.c
  6ca72bb96e1e039c04bfc616836714ed  gcc/testsuite/gcc.target/powerpc/block-cmp-9.c
  d71e4fffd67fe9a02068065c31f40a8c  gcc/testsuite/gcc.target/powerpc/block-move-1.c
  acce3a59dc7d4ef94160abede8f06c07  gcc/testsuite/gcc.target/powerpc/block-move-2.c
--- 85127,85133 ----
  13d1d93ef325676e26cb149464158713  gcc/testsuite/gcc.target/powerpc/block-cmp-2.c
  c46592d7ef2d4d65a6e7d37781eb6aa8  gcc/testsuite/gcc.target/powerpc/block-cmp-3.c
  27f0261afae3e1d9a6470641dcf8cf23  gcc/testsuite/gcc.target/powerpc/block-cmp-4.c
! 4ec558244f0dd31816ab009c12ab4b2a  gcc/testsuite/gcc.target/powerpc/block-cmp-8.c
  6ca72bb96e1e039c04bfc616836714ed  gcc/testsuite/gcc.target/powerpc/block-cmp-9.c
  d71e4fffd67fe9a02068065c31f40a8c  gcc/testsuite/gcc.target/powerpc/block-move-1.c
  acce3a59dc7d4ef94160abede8f06c07  gcc/testsuite/gcc.target/powerpc/block-move-2.c
*************** f7737384a7159c5bd9e77bc68c389061  gcc/te
*** 87647,87653 ****
--- 87835,87851 ----
  bad48fcddbccb04e04d47ed0b59c88a4  gcc/testsuite/gcc.target/riscv/arch-42.c
  1a3ea38dc0280965c0841bdbc081d11a  gcc/testsuite/gcc.target/riscv/arch-43.c
  1444d5eac58c7bc0f24b8b26d283ed13  gcc/testsuite/gcc.target/riscv/arch-44.c
+ 7be02cc81fc5fe78b43fb71dcc3c3afd  gcc/testsuite/gcc.target/riscv/arch-45.c
+ 936fbd75b112c3c681b0bde692d7344b  gcc/testsuite/gcc.target/riscv/arch-46.c
+ d2849a782af5feeff9a0e140e5dc5935  gcc/testsuite/gcc.target/riscv/arch-47.c
+ 01f9351fc443e06042e5fa20f07c8b06  gcc/testsuite/gcc.target/riscv/arch-48.c
+ 4bc56ca04c014f10bc8290513d25e3f2  gcc/testsuite/gcc.target/riscv/arch-49.c
  c94d482c7ef976b5a86a9679daf9ddc1  gcc/testsuite/gcc.target/riscv/arch-5.c
+ c757fc49f54223fc5d30159e042cdbd4  gcc/testsuite/gcc.target/riscv/arch-50.c
+ 1ce8ea52ed40d6f9cb466d50bdae791f  gcc/testsuite/gcc.target/riscv/arch-51.c
+ 6e4c5f77f447a39e20e303c9571d2beb  gcc/testsuite/gcc.target/riscv/arch-52.c
+ 51b1e1bbfe22714ab695a93974508b0e  gcc/testsuite/gcc.target/riscv/arch-53.c
+ bec789a6108435830e82b6fdd221cb51  gcc/testsuite/gcc.target/riscv/arch-54.c
  2cd6ade559b1ab254703146aa7008e18  gcc/testsuite/gcc.target/riscv/arch-6.c
  81519955d6644acb55c78120405494a5  gcc/testsuite/gcc.target/riscv/arch-7.c
  def4ef484e9166f9a01c65a411a9d916  gcc/testsuite/gcc.target/riscv/arch-8.c
*************** a0ec9e9b1278bec59b5f6fb4473ae0be  gcc/te
*** 88030,88035 ****
--- 88228,88235 ----
  1f185dea80449f2a4c268c953b9fbe22  gcc/testsuite/gcc.target/riscv/interrupt-no-lpad.c
  756572791a9293ef57d0855c156c1c04  gcc/testsuite/gcc.target/riscv/interrupt-smode.c
  1cc7f11cb8b3790c544cfd62150e6d44  gcc/testsuite/gcc.target/riscv/interrupt-umode.c
+ 371709295f3134754428c912bd5e3ee4  gcc/testsuite/gcc.target/riscv/ior-synthesis-1.c
+ 016fae660b0d8d24c12a8ce81c7bc0c0  gcc/testsuite/gcc.target/riscv/ior-synthesis-2.c
  278f220a2e34d94cefdb9ca25089a8fb  gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c
  4fb2a135047684bf2c5c829019b86d4a  gcc/testsuite/gcc.target/riscv/large-model.c
  9ae56141fab814505fcf7366ef12db85  gcc/testsuite/gcc.target/riscv/li.c
*************** bba0977f2acac23e269d463cd1b7ba52  gcc/te
*** 88387,88392 ****
--- 88587,88593 ----
  0be9cd6857f2505997bc83cad628e9aa  gcc/testsuite/gcc.target/riscv/pr114139.c
  a7b01bd6393c053eb2052773c0ca4b69  gcc/testsuite/gcc.target/riscv/pr114277.c
  55a41664e9844961c91357e97dc9ba27  gcc/testsuite/gcc.target/riscv/pr114442.c
+ 406442864655cfad642a9a03f659bc19  gcc/testsuite/gcc.target/riscv/pr114512.c
  ac7457bb5fc81b14b0c132cfa32ee677  gcc/testsuite/gcc.target/riscv/pr114639-1.c
  8ff44c408c80d6686eacf2c8c9416fb4  gcc/testsuite/gcc.target/riscv/pr114639-2.c
  d23feb07adfb6b3ced3305b407aec532  gcc/testsuite/gcc.target/riscv/pr114639-3.c
*************** b22a15e86fb70037feb383a055b6e153  gcc/te
*** 88439,88444 ****
--- 88640,88648 ----
  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
+ b62a32eafb5e661786b5ef2b03b30be9  gcc/testsuite/gcc.target/riscv/pr119971.c
+ d7b10be51739976c3b0ea4b16c390ba8  gcc/testsuite/gcc.target/riscv/pr120137.c
+ a21d4b9178b49fb0fb65552af24e2832  gcc/testsuite/gcc.target/riscv/pr120154.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
*************** b22db7cfa496fe0bb94903110522efed  gcc/te
*** 88459,88465 ****
  48d9a95b7bb3cd7b695c72be51eac234  gcc/testsuite/gcc.target/riscv/predef-16.c
  981b22f8d0822eb392cc684aea295a02  gcc/testsuite/gcc.target/riscv/predef-17.c
  a335b5e1909d390294a0a65a294b3327  gcc/testsuite/gcc.target/riscv/predef-18.c
! 8d80b8aaed9d043aa47a529b596be0ec  gcc/testsuite/gcc.target/riscv/predef-19.c
  10ce20b4a3c09fe45ad7f7591166acdd  gcc/testsuite/gcc.target/riscv/predef-2.c
  1dae05fb7ee217e838eabf1f45e7114e  gcc/testsuite/gcc.target/riscv/predef-20.c
  42182dd604c357b7c179981ed12114de  gcc/testsuite/gcc.target/riscv/predef-21.c
--- 88663,88669 ----
  48d9a95b7bb3cd7b695c72be51eac234  gcc/testsuite/gcc.target/riscv/predef-16.c
  981b22f8d0822eb392cc684aea295a02  gcc/testsuite/gcc.target/riscv/predef-17.c
  a335b5e1909d390294a0a65a294b3327  gcc/testsuite/gcc.target/riscv/predef-18.c
! a5e976aa0dff1643b4f1d0681591fc25  gcc/testsuite/gcc.target/riscv/predef-19.c
  10ce20b4a3c09fe45ad7f7591166acdd  gcc/testsuite/gcc.target/riscv/predef-2.c
  1dae05fb7ee217e838eabf1f45e7114e  gcc/testsuite/gcc.target/riscv/predef-20.c
  42182dd604c357b7c179981ed12114de  gcc/testsuite/gcc.target/riscv/predef-21.c
*************** f95d4e0ecca41e722099be6b52b3efe7  gcc/te
*** 90686,90691 ****
--- 90890,90954 ----
  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
+ 9f3af6349238898358501a90ae3e36f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
+ 226df478404500dcdb3b751407c9b69c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
+ a3488045da46a2f8238fde3618b82e87  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
+ 35ce94f155eb43df9c396eadf643b263  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i16.c
+ 7210488a763556bb37a9ed3d13f4698a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i32.c
+ b1cf428dd630424e8cc47b125cc8c8cd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i64.c
+ 781ff559d9433553538b67c21a1890a3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i8.c
+ 341e613c0953d22653a43ab9ecf03bd4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u16.c
+ c961d5f08d566e1403ce1b8636b2d95f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u32.c
+ 013eadc2d1061812d12a55676a67c147  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u64.c
+ a72efc0a9ec7b09534cd2279bbe8610e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u8.c
+ 4bb239bebd4d93dce202996093d1b1d9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i16.c
+ 7749561637924ff704d645c15623046e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i32.c
+ 615a3888aa3db5d9fb9501d68877484f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i64.c
+ c3b7bc0237fa7ab6b993327b614223a4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i8.c
+ 3d61f8ecbd814fcc4b16db0fcecc7cd9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u16.c
+ 52f55f1605322a1380fa2b52b01083d2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u32.c
+ 860514773a7d832ed052f0b1897b174d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u64.c
+ a1189155f49152782ce4bd651ae3bb45  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u8.c
+ 82388073c3922af1bdf1aae940d5b6b5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i16.c
+ e9f5be66a69b63b8c25e77046af34936  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i32.c
+ 8fc0cf584614f984aafecbe7b68513a4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i64.c
+ 5b9c649b6f2ebc6c7bdfdd7312f531fa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i8.c
+ 18cedd46ce62cb26c3a82ec4927adfc3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u16.c
+ cbac5ca33f15edf43ad183aeaf367973  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u32.c
+ 048366431ec50673bdb17520f8a4f6c7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u64.c
+ e7e79abca3770a320d6c1577919cd2db  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u8.c
+ 836822279a941b43dc37e5bead2a92f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i16.c
+ f8a94b86d4efa91c57e731e1632f7244  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i32.c
+ ebf46616191adcc9937d3dff1e7c0ba7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i64.c
+ bacb5f8a5f94a43e3f59221a77c59465  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i8.c
+ ad5e5cdc5f647f14b1b86ed79570cb30  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u16.c
+ cf7fcb005341c8e2261c1fe47a838f40  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u32.c
+ 76e5f0a1ddf6138858972cb6268aea3b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u64.c
+ 732d387f6ee7af0b5201999832943da4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u8.c
+ 07e00d7dd2f0222727ca9aa15990a9d2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i16.c
+ 9d507d2912d6eb90efa1bc6cf1ae7baf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i32.c
+ 8125dc06f5d8c3dcc4e71d2e6ed52f4a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i64.c
+ 35a3c593589caa9322b37d14e2af7306  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i8.c
+ 23e5dc1f379bd170013efac8a2cd26e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u16.c
+ d753225300a8bad59632e719c6a4caad  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u32.c
+ b3119575a222b3b20fa68fab4b47a8b1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u64.c
+ 675c7be3766562ae2fc1da3286921e90  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u8.c
+ eacff17c15f751755caffcb29f5ada8c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i16.c
+ ac6d1793ad88670e041af29ece76bbcb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i32.c
+ c95ed0c544afdd6e5bcd14fd1ebd71b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i64.c
+ 1410d286fc120e87b7f3592af44c95a5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i8.c
+ 5773637f5ca6ee5d7fa7e3d9c25df2df  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u16.c
+ 8221e410dfe57b423f73711148b3e020  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u32.c
+ c2c3e145816ea275c6804298cefb8bcf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u64.c
+ 1e92f11f617787fe735098d169fd55bf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u8.c
+ 1dfa1dd19362759bd19dbaf708965cc8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c
+ 79e78d088db2ba0b73ab7a0daf2a6223  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c
+ d0ff69950639fb858ae3cada5f0b9819  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i64.c
+ 3aeafdc385897006fa5b3a47b280490b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i8.c
+ a0903d4f6a5d0d23d4a10a493982b994  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u16.c
+ 8b0d0abef7040531b482916f3a044364  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u32.c
+ f17c4b0ae2f76142d6a1a17df1d6f7fa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u64.c
+ 454a206b513df96d32967b2d33c2d401  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u8.c
  836cc87f131d9d080542fe18ca8f7841  gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-run.c
  f1082aad0502554eeebed17813742243  gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c
  c63c1dda7e0edaae3a19ada81d8d2297  gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c
*************** a12844f0084e0e0246932d95226af1bf  gcc/te
*** 91037,91042 ****
--- 91300,91306 ----
  b06ed08bf3da5416e1d78a9dabf45320  gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-strategy-4.c
  815e6f8ac54e92d2fc4ae4690f90efd0  gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-strategy-5.c
  a6a0efbccb5c7ec4343d758307d8a44a  gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-strategy.h
+ e79abad469c6a31420d992a282467962  gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c
  f8d68eda8e75610f3abd8282856cc66e  gcc/testsuite/gcc.target/riscv/rvv/base/dup-1.c
  4b95c2c6a750dec788a04b8733aedbfa  gcc/testsuite/gcc.target/riscv/rvv/base/dup-2.c
  acb83c56941b40cd27490db738df6ef7  gcc/testsuite/gcc.target/riscv/rvv/base/fixed-point-vxrm-error.c
*************** bd5fe2ac8c7ea125bd674e1aa8150399  gcc/te
*** 91633,91639 ****
  8b2c7404cd85cf68ef9f9b68577ae5cc  gcc/testsuite/gcc.target/riscv/rvv/base/zvksh-intrinsic.c
  c408b1a7f84e4b815e85476963221ae9  gcc/testsuite/gcc.target/riscv/rvv/base/zvl-unimplemented-1.c
  527003a16d82851a0dd57a93c29bcab7  gcc/testsuite/gcc.target/riscv/rvv/base/zvl-unimplemented-2.c
! 2ff1f9c66474a8d855e27dc90b9858b7  gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
  ecf4c4ab418350831d4471534a47d02a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-1.c
  0886d2586a892610401ae61b27c200f1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-2.c
  72b9d84e2f500b6b64e40b19b6e2f66b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-3.c
--- 91897,91903 ----
  8b2c7404cd85cf68ef9f9b68577ae5cc  gcc/testsuite/gcc.target/riscv/rvv/base/zvksh-intrinsic.c
  c408b1a7f84e4b815e85476963221ae9  gcc/testsuite/gcc.target/riscv/rvv/base/zvl-unimplemented-1.c
  527003a16d82851a0dd57a93c29bcab7  gcc/testsuite/gcc.target/riscv/rvv/base/zvl-unimplemented-2.c
! abcf176e84612215d7a4bb01e5aafc34  gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
  ecf4c4ab418350831d4471534a47d02a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-1.c
  0886d2586a892610401ae61b27c200f1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-2.c
  72b9d84e2f500b6b64e40b19b6e2f66b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-3.c
*************** c0a4bee5eba1cce4e72b7fe92728426b  gcc/te
*** 92802,92807 ****
--- 93066,93074 ----
  eba52e984a37427da6fa1233257ff6a9  gcc/testsuite/gcc.target/riscv/tls_1.x
  dbe67905fc0f65b7be7d2f96a6c490e6  gcc/testsuite/gcc.target/riscv/tlsdesc.c
  76005de0a7c1ca66b1b06de3c53ad1c2  gcc/testsuite/gcc.target/riscv/weak-1.c
+ 46c65ef5612e82f5d9ee2842af6c427b  gcc/testsuite/gcc.target/riscv/xor-synthesis-1.c
+ 857d7c1adabe9cb7d94b5f83613082d2  gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c
+ 9eb551876f81b7e2201fe6c61dc463a0  gcc/testsuite/gcc.target/riscv/xor-synthesis-3.c
  3a0dce9fff2935c0bd21176ef52d68a3  gcc/testsuite/gcc.target/riscv/xtheadba-addsl.c
  3bfc3f4f2cc9a87e45901bd3aaa79d03  gcc/testsuite/gcc.target/riscv/xtheadba.c
  dbc96b7e417aa40d019fa7730add3692  gcc/testsuite/gcc.target/riscv/xtheadbb-ext-1.c
*************** cc6086a551f06fe43ba1143dd3b45a0f  gcc/te
*** 92903,92909 ****
  034755623c7d07978a584f1f4a9fca31  gcc/testsuite/gcc.target/riscv/zbb-min-max.c
  3ef81d36e50eb61cd5acb30a75c2df00  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-01.c
  ae2eedb5d93df4bf4c2298ef65fc68d4  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-02.c
! bffe7cc5c1dc9a4f97053f435e503a6a  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-03.c
  8ddf5edcf9404b9799022233cca4d49a  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-04.c
  0ce29ce3b4df0cc99645b8e7ed0eb6ab  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-05.c
  64a85d6e239f17171ebcad5e6b979725  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-06.c
--- 93170,93176 ----
  034755623c7d07978a584f1f4a9fca31  gcc/testsuite/gcc.target/riscv/zbb-min-max.c
  3ef81d36e50eb61cd5acb30a75c2df00  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-01.c
  ae2eedb5d93df4bf4c2298ef65fc68d4  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-02.c
! dc6f8b5f80e721870422c74d7b5d0cb2  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-03.c
  8ddf5edcf9404b9799022233cca4d49a  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-04.c
  0ce29ce3b4df0cc99645b8e7ed0eb6ab  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-05.c
  64a85d6e239f17171ebcad5e6b979725  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-06.c
*************** ed8807784132f9e94878b1bae2639eb9  gcc/te
*** 93466,93471 ****
--- 93733,93740 ----
  daf32d359b4f5080aef58859b29870b9  gcc/testsuite/gcc.target/s390/vector/align-1.c
  6bf626314f1db50adc71184824f22bba  gcc/testsuite/gcc.target/s390/vector/align-2.c
  37d2afe5f257fe6c269b2baa787ffe41  gcc/testsuite/gcc.target/s390/vector/combine-shift-vec.c
+ 13ec17668ab763edb0f51028d04fd865  gcc/testsuite/gcc.target/s390/vector/cstoreti-1.c
+ 12edf735060133c36443e9629e6d1dd4  gcc/testsuite/gcc.target/s390/vector/cstoreti-2.c
  6cc464ecc62d96faaaa310208a8e68a1  gcc/testsuite/gcc.target/s390/vector/fp-signedint-convert-1.c
  46b2fde5b404f026a3a58cb93ab82b82  gcc/testsuite/gcc.target/s390/vector/fp-unsignedint-convert-1.c
  8a6c46e492362a7ae789676034c82a23  gcc/testsuite/gcc.target/s390/vector/int128-1.c
*************** d0dda7d4f02cde55063cdbc07f9865df  gcc/te
*** 101759,101765 ****
  566e25d512fab9b0fe403d4bcaab5cce  gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
  2fe0da2c9dbe8582e4644dc6911d0c0a  gcc/testsuite/gfortran.dg/do_concurrent_9.f90
  cbd9864a0e437c82bc4732c67efaffeb  gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
! 1d039446471af31f4f0ac7ed0bf10b61  gcc/testsuite/gfortran.dg/do_concurrent_basic.f90
  eec12ded6b543d22e4513f1fd5b84033  gcc/testsuite/gfortran.dg/do_concurrent_constraints.f90
  c4a3ee13c42841a8c629fe8c2fcf7be8  gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
  18f04dae2541d916379e0bbb761855b0  gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
--- 102028,102034 ----
  566e25d512fab9b0fe403d4bcaab5cce  gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
  2fe0da2c9dbe8582e4644dc6911d0c0a  gcc/testsuite/gfortran.dg/do_concurrent_9.f90
  cbd9864a0e437c82bc4732c67efaffeb  gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
! 7910395d8f0f8e1c4c3b19bf52ac51b4  gcc/testsuite/gfortran.dg/do_concurrent_basic.f90
  eec12ded6b543d22e4513f1fd5b84033  gcc/testsuite/gfortran.dg/do_concurrent_constraints.f90
  c4a3ee13c42841a8c629fe8c2fcf7be8  gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
  18f04dae2541d916379e0bbb761855b0  gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
*************** daa1172ed1d5a6072057b20aaca3b1ec  gcc/te
*** 103611,103616 ****
--- 103880,103886 ----
  f9932e22f4bc6baa989154035dbac7c1  gcc/testsuite/gfortran.dg/guality/arg1.f90
  0b8fd6ccf67a7f794af2e9d3338903c4  gcc/testsuite/gfortran.dg/guality/guality.exp
  d4160e104059a3b57d5b80ddb9140570  gcc/testsuite/gfortran.dg/guality/pr119190.f90
+ f6dc189e3efd8e05cb4f9668eaf8fdbe  gcc/testsuite/gfortran.dg/guality/pr120193.f90
  9e2790792b04c03a1a0860c862a27b4b  gcc/testsuite/gfortran.dg/guality/pr41558.f90
  26d42c53448fb26d2b66a4b1d93693d3  gcc/testsuite/gfortran.dg/hollerith.f90
  855af7807ad9d75aef7ff85c2859a0c2  gcc/testsuite/gfortran.dg/hollerith2.f90
*************** f054b9fef3440dee368c1f671c20d141  gcc/te
*** 104027,104032 ****
--- 104297,104304 ----
  acaf66d3dc5deb01e00f08388b6101b3  gcc/testsuite/gfortran.dg/interface_58.f90
  6770c57536e39f9caad1a00388c94004  gcc/testsuite/gfortran.dg/interface_59.f90
  a63ff5460cdc25350f43a09d899581db  gcc/testsuite/gfortran.dg/interface_6.f90
+ bf9bf5f797c809b218621993da43cbb7  gcc/testsuite/gfortran.dg/interface_60.f90
+ 85a77119c68cac58df232d99d18cd405  gcc/testsuite/gfortran.dg/interface_61.f90
  b4d472d28fc0ac004218dc87eb241306  gcc/testsuite/gfortran.dg/interface_7.f90
  9b6e2c6769e8d31142faefbb1e2b8fa0  gcc/testsuite/gfortran.dg/interface_8.f90
  741aacf0bd439f6874a87ea56712aadc  gcc/testsuite/gfortran.dg/interface_9.f90
*************** bfe9a93946cdb6a9b66dd7249e65330d  gcc/te
*** 105298,105304 ****
  1c099fc2477935ea4f6d6e213b94eb2f  gcc/testsuite/gfortran.dg/pr119836_2.f90
  f4f853788012858a0134517250a7832c  gcc/testsuite/gfortran.dg/pr119836_3.f90
  a961dfda22a9cdab00655e080457bd32  gcc/testsuite/gfortran.dg/pr119836_4.f90
! 94b25bca84a1fe6e98969d5194ba6d24  gcc/testsuite/gfortran.dg/pr119948.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
--- 105570,105582 ----
  1c099fc2477935ea4f6d6e213b94eb2f  gcc/testsuite/gfortran.dg/pr119836_2.f90
  f4f853788012858a0134517250a7832c  gcc/testsuite/gfortran.dg/pr119836_3.f90
  a961dfda22a9cdab00655e080457bd32  gcc/testsuite/gfortran.dg/pr119836_4.f90
! 8a73c3d21e2517a33bb24d479ee49a4d  gcc/testsuite/gfortran.dg/pr119948.f90
! 0aa06bb713ed3dd03bc512a34518210f  gcc/testsuite/gfortran.dg/pr120049_a.f90
! 38ba5cfd4681c69d997eef7b122252a0  gcc/testsuite/gfortran.dg/pr120049_b.f90
! 9cab825b7d82f17e4206621b6f50a699  gcc/testsuite/gfortran.dg/pr120152_1.f90
! e79a5fff5c4841ba8e2da41f54be1c1c  gcc/testsuite/gfortran.dg/pr120152_2.f90
! 5b917458eb8d86935d5781cfdfe8f5e7  gcc/testsuite/gfortran.dg/pr120153.f90
! 202dad9f0793d2c5775eb22b1d871383  gcc/testsuite/gfortran.dg/pr120158.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
*************** feae5c6b3876f53ada61b3aa3da68e31  gcc/te
*** 106970,106975 ****
--- 107248,107254 ----
  c00e10e2dedc2a4d4050941a3ae36ab2  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_3.f90
  d175a283aab741037bd1bdee76a76fa5  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_4.f90
  c5cef3aa9c3895b4e6b38e993481ff14  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_5.f90
+ 446033cb0484da91a769a31c11989942  gcc/testsuite/gfortran.dg/transfer_array_subref.f90
  fdabd8c65dcb8fb1bfe06c29c937c219  gcc/testsuite/gfortran.dg/transfer_assumed_size_1.f90
  1c08633181f8b50ad8fd08ed1f4f207f  gcc/testsuite/gfortran.dg/transfer_char_kind4.f90
  0d5a3d18a1eeb0de1ca65d86e1cd68f8  gcc/testsuite/gfortran.dg/transfer_check_1.f90
*************** d37915b685c2a7c61b2bd33dc4233b8f  gcc/te
*** 109157,109162 ****
--- 109436,109443 ----
  e76b1c3500d64c1264105e435866a79a  gcc/testsuite/gm2/pim/pass/goodprocint3.mod
  45f32c78d6fe03bad619ad83eb7210f0  gcc/testsuite/gm2/pim/pass/hello.mod
  05a8a29ef9946b4cedf81b22c2379652  gcc/testsuite/gm2/pim/pass/hexstring.mod
+ f8a265d8d064329a48d8fb8a627463fe  gcc/testsuite/gm2/pim/pass/highbit.mod
+ 0e0dfb52c307c38cab7fcc3a2a14fa5a  gcc/testsuite/gm2/pim/pass/highbit2.mod
  deec7e02a3ff68e431b9625fb1dc63b5  gcc/testsuite/gm2/pim/pass/highexp.mod
  f9cd141a6b4217bff724f01cca0dd4dd  gcc/testsuite/gm2/pim/pass/impa.mod
  7fcce148cc6f79808942e1d78a86c6be  gcc/testsuite/gm2/pim/pass/impb.def
*************** f01f6a92460103019cb9d3f27c479ef9  gcc/te
*** 111439,111444 ****
--- 111720,111730 ----
  b143f8a11acbf26720d0836e04874836  gcc/testsuite/gnat.dg/opt105.adb
  43266125cef592b6eaa7a9074c70ea58  gcc/testsuite/gnat.dg/opt105_pkg.adb
  ef6aab3ddf23751e6c8af372ba52012c  gcc/testsuite/gnat.dg/opt105_pkg.ads
+ 1962ea0f694c7aaf1ff3137c189868f8  gcc/testsuite/gnat.dg/opt106.adb
+ f8a43d7dd54caabde100374f7144dfc3  gcc/testsuite/gnat.dg/opt106_pkg1.adb
+ ab899fc6f72925f8084209d5187582d5  gcc/testsuite/gnat.dg/opt106_pkg1.ads
+ acc696967fd0d2302cfab5304ee3a970  gcc/testsuite/gnat.dg/opt106_pkg2.adb
+ e4a127b46129811de1774562e29fb8fc  gcc/testsuite/gnat.dg/opt106_pkg2.ads
  5d50fb38b1ab84c39760906cb103c522  gcc/testsuite/gnat.dg/opt10_pkg.ads
  603264d4afdd2fd2174ea9c4cf4653ed  gcc/testsuite/gnat.dg/opt11.adb
  53160585b3a5d820b653e1e0d5f14c75  gcc/testsuite/gnat.dg/opt11.ads
*************** a7bd734382497172aa271ae6f28c2872  gcc/te
*** 112043,112048 ****
--- 112329,112335 ----
  4ee6f85529262f699db7820d6a2c74dc  gcc/testsuite/gnat.dg/specs/fe_inlining.ads
  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
  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
*************** e87a7723ddb82de7bd960a324539538f  gcc/te
*** 114872,114878 ****
  b44378e468c0382151ed8994ace386ff  gcc/testsuite/lib/g++-dg.exp
  c345df92b75960dbcf02dc790324b5c6  gcc/testsuite/lib/g++.exp
  8fd60242e028a3c0b9360a52d67cb069  gcc/testsuite/lib/gcc-defs.exp
! 24aef3e25614ae34eb87dc77f3ec277f  gcc/testsuite/lib/gcc-dg.exp
  4ce14b2651c02595541e337529a858a7  gcc/testsuite/lib/gcc-gdb-test.exp
  5d11df299efe6269fcdaed3cf91ebd4a  gcc/testsuite/lib/gcc-simulate-thread.exp
  c652081610935366b7989df767a74c8b  gcc/testsuite/lib/gcc.exp
--- 115159,115165 ----
  b44378e468c0382151ed8994ace386ff  gcc/testsuite/lib/g++-dg.exp
  c345df92b75960dbcf02dc790324b5c6  gcc/testsuite/lib/g++.exp
  8fd60242e028a3c0b9360a52d67cb069  gcc/testsuite/lib/gcc-defs.exp
! 64d94c4dd4533bc17b89e001336ef92b  gcc/testsuite/lib/gcc-dg.exp
  4ce14b2651c02595541e337529a858a7  gcc/testsuite/lib/gcc-gdb-test.exp
  5d11df299efe6269fcdaed3cf91ebd4a  gcc/testsuite/lib/gcc-simulate-thread.exp
  c652081610935366b7989df767a74c8b  gcc/testsuite/lib/gcc.exp
*************** cde7364d679bf019115a37fca70a6f52  gcc/te
*** 114891,114896 ****
--- 115178,115184 ----
  628b339f01ad2b5a5afbfe6c0220ad31  gcc/testsuite/lib/go-dg.exp
  a658e6e3511698723b87be3277ba706d  gcc/testsuite/lib/go-torture.exp
  450868d4f15f0faade8c693e132ee071  gcc/testsuite/lib/go.exp
+ 4d4ee74f8efa14144bb881dddf7109e4  gcc/testsuite/lib/htmltest.py
  8699bdd60911dccd7ce56e96f4032646  gcc/testsuite/lib/hwasan-dg.exp
  570d1ec9b7a393a25ac703df89bbc0ee  gcc/testsuite/lib/lto.exp
  645e8af17b334c4e279636a7b47dacbe  gcc/testsuite/lib/mike-g++.exp
*************** cdfac88acd33dec95625eb0cca4bc571  gcc/te
*** 114916,114921 ****
--- 115204,115210 ----
  b1906d02580c467cf4242e775596ac53  gcc/testsuite/lib/sarif.py
  3bab5edb1612d4cf66f2a8f5c4e2ae61  gcc/testsuite/lib/scanasm.exp
  83e6c25542a5f84dc92619a64a4fe0e7  gcc/testsuite/lib/scandump.exp
+ 67189798dcf413cd565b99dee45a8f39  gcc/testsuite/lib/scanhtml.exp
  f17c3b8bef5ec71bda9ad84ca4b914ae  gcc/testsuite/lib/scanipa.exp
  fd03e108300403306a7858e519bd3e59  gcc/testsuite/lib/scanlang.exp
  86e70acdb5b44ab73fe4ca953e089c5f  gcc/testsuite/lib/scanltrans.exp
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 114929,114935 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! f54f12fc6f43f7f3ff5fba3f34466d85  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
--- 115218,115224 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 1434d7d3777b92bdb1629607b49055c6  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
*************** a94d6ed40eb56b13b3aa84af9140e7aa  gcc/te
*** 114957,114968 ****
  2ba040d5b04e2624d022fd983821ed4a  gcc/testsuite/libgdiagnostics.dg/test-labelled-ranges.c
  dd4649e4bf88e02656157d5ee3e16bae  gcc/testsuite/libgdiagnostics.dg/test-labelled-ranges.cc
  41696a2e031be075798d4708f3e542d4  gcc/testsuite/libgdiagnostics.dg/test-labelled-ranges.py
! d612089592bdacc39f354f41452fb815  gcc/testsuite/libgdiagnostics.dg/test-logical-location-c.py
! abae5783143c7b74909b4e8edd32a4f3  gcc/testsuite/libgdiagnostics.dg/test-logical-location.c
  f1a0e78f1b655e672939cd8c3f01139b  gcc/testsuite/libgdiagnostics.dg/test-metadata-c.py
  8908b5e3eb88ff5a3ef9785ff3ac6bb8  gcc/testsuite/libgdiagnostics.dg/test-metadata.c
  95d9cf174141475f2b01e734e9a5b240  gcc/testsuite/libgdiagnostics.dg/test-multiple-lines-c.py
  9c1ae4d6de3ac35f5a21098a72e3349d  gcc/testsuite/libgdiagnostics.dg/test-multiple-lines.c
  a70977ae05d2dfba2c8cc4b60fe94109  gcc/testsuite/libgdiagnostics.dg/test-no-column-c.py
  266b34e0c204ab478010e316d8de7244  gcc/testsuite/libgdiagnostics.dg/test-no-column.c
  d97a2ede9b276271fe7da53d984c46c9  gcc/testsuite/libgdiagnostics.dg/test-no-diagnostics-c.py
--- 115246,115260 ----
  2ba040d5b04e2624d022fd983821ed4a  gcc/testsuite/libgdiagnostics.dg/test-labelled-ranges.c
  dd4649e4bf88e02656157d5ee3e16bae  gcc/testsuite/libgdiagnostics.dg/test-labelled-ranges.cc
  41696a2e031be075798d4708f3e542d4  gcc/testsuite/libgdiagnostics.dg/test-labelled-ranges.py
! 00c816edbc3a50d853332da7e3423c11  gcc/testsuite/libgdiagnostics.dg/test-logical-location-c.py
! 5e005c4b2bb45b1bc008da94aef65a7b  gcc/testsuite/libgdiagnostics.dg/test-logical-location.c
! a3ceaadd005179c882a804f755357620  gcc/testsuite/libgdiagnostics.dg/test-logical-location.cc
  f1a0e78f1b655e672939cd8c3f01139b  gcc/testsuite/libgdiagnostics.dg/test-metadata-c.py
  8908b5e3eb88ff5a3ef9785ff3ac6bb8  gcc/testsuite/libgdiagnostics.dg/test-metadata.c
  95d9cf174141475f2b01e734e9a5b240  gcc/testsuite/libgdiagnostics.dg/test-multiple-lines-c.py
  9c1ae4d6de3ac35f5a21098a72e3349d  gcc/testsuite/libgdiagnostics.dg/test-multiple-lines.c
+ 835720a23698d89b73c5e6cf6081b8cf  gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json-c.py
+ d99e58b0d09b00c936b9bd4f82c99516  gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json.c
  a70977ae05d2dfba2c8cc4b60fe94109  gcc/testsuite/libgdiagnostics.dg/test-no-column-c.py
  266b34e0c204ab478010e316d8de7244  gcc/testsuite/libgdiagnostics.dg/test-no-column.c
  d97a2ede9b276271fe7da53d984c46c9  gcc/testsuite/libgdiagnostics.dg/test-no-diagnostics-c.py
*************** d97a2ede9b276271fe7da53d984c46c9  gcc/te
*** 114971,114977 ****
  6caf27887b7cf5483cadb8e400e58add  gcc/testsuite/libgdiagnostics.dg/test-note-with-fix-it-hint.c
  d2aafb04b11f754e8a7b58940fb81a01  gcc/testsuite/libgdiagnostics.dg/test-text-sink-options.c
  374e6d77246944f845a8918b230a46ba  gcc/testsuite/libgdiagnostics.dg/test-warning-c.py
! d83a743a8fb59adde663b5b1a24eb26d  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py
  a02790f7323a8705c3fe757ac7eb628b  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path.c
  ae2bb8c35d78ca989bee19306de93d2d  gcc/testsuite/libgdiagnostics.dg/test-warning.c
  39ea3e6a3c64aa59fce2cc514bdd991f  gcc/testsuite/libgdiagnostics.dg/test-write-sarif-to-file-c.py
--- 115263,115269 ----
  6caf27887b7cf5483cadb8e400e58add  gcc/testsuite/libgdiagnostics.dg/test-note-with-fix-it-hint.c
  d2aafb04b11f754e8a7b58940fb81a01  gcc/testsuite/libgdiagnostics.dg/test-text-sink-options.c
  374e6d77246944f845a8918b230a46ba  gcc/testsuite/libgdiagnostics.dg/test-warning-c.py
! 41bb88418abb3c2dceb336d993318f0d  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py
  a02790f7323a8705c3fe757ac7eb628b  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path.c
  ae2bb8c35d78ca989bee19306de93d2d  gcc/testsuite/libgdiagnostics.dg/test-warning.c
  39ea3e6a3c64aa59fce2cc514bdd991f  gcc/testsuite/libgdiagnostics.dg/test-write-sarif-to-file-c.py
*************** e8f8000787067fbf63460ed56e1fd29e  gcc/te
*** 117290,117312 ****
  5eecf3163a174bd8047aec53c9145ab2  gcc/testsuite/rust/link/trait_import_1.rs
  7ba67c515a5228a7472fd045dd8397a0  gcc/testsuite/rust/rustc/README.md
  efd93d54e933def690c5f068247aaaf0  gcc/testsuite/rust/rustc/rustc.exp
! 1c509e7de614067f3a4c311d8b0db801  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.1-not-an-object.sarif
! 1fb9285eeda89fc811197f062bdf5861  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-missing-arguments-for-placeholders.sarif
! 0acc6d67ec2503b475d43ed0ae18601a  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-not-enough-arguments-for-placeholders.sarif
! 731315e23b12bf2083f2d368e55ef03c  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.5-unescaped-braces.sarif
! 8f80fddc63a4f2acb5c1cc78cd836788  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-no-version.sarif
! 6cedb9f811bfc76c050966e93d377b73  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-version-not-a-string.sarif
! d910e34d972a2ae4d2e025eec96192ac  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-bad-runs.sarif
! d6a4a204a74a774a181e641101ff2e16  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-no-runs.sarif
! 633a1bf47adebfbd899b126c43d1aed5  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-non-object-in-runs.sarif
! b70421e28928ce62950398e225340002  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.27.10-bad-level.sarif
! c5873409f1f9ad155233907eea12e297  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.33.3-index-out-of-range.sarif
! 339832dd89f5eafdc953376af61734f6  gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif
  e3b2cd7e659905aae30293135919e468  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif
  984abc6c1fa0578f7f070ea81531b615  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-1.sarif
  a5f27c1dd2784330c1b584360a486c85  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-2.sarif
  5dd4a200df47d1689bc6aca933cb9b44  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-3.sarif
  4234e9442988f3b10195df51ecbb9f02  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.28.6-annotations-1.sarif
  d857a4331f097987a1bb7433f321c1c0  gcc/testsuite/sarif-replay.dg/2.1.0-valid/error-with-note.sarif
  eb63c8ccd144fcb7c3f54ce6920d725c  gcc/testsuite/sarif-replay.dg/2.1.0-valid/escaped-braces.sarif
  0cc960ceb5aae05d1918cf826e8a2d24  gcc/testsuite/sarif-replay.dg/2.1.0-valid/malloc-vs-local-4.c.sarif
--- 117582,117606 ----
  5eecf3163a174bd8047aec53c9145ab2  gcc/testsuite/rust/link/trait_import_1.rs
  7ba67c515a5228a7472fd045dd8397a0  gcc/testsuite/rust/rustc/README.md
  efd93d54e933def690c5f068247aaaf0  gcc/testsuite/rust/rustc/rustc.exp
! f5ea66a6a877aa916f3f82001c49ac06  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.1-not-an-object.sarif
! 8791a7771ec677bb1bee8509ae76bd30  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-missing-arguments-for-placeholders.sarif
! 09c8bffa3745e01b11f240c362133fbf  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-not-enough-arguments-for-placeholders.sarif
! b94a49f1fde613c1c390114faa9fe21d  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.5-unescaped-braces.sarif
! b41436d3c539242f6fdfaf81086be389  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-no-version.sarif
! ebb17fbc96c75e97e6e7834ce108d123  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-version-not-a-string.sarif
! 08e633788353087f8bb3382c8b47e23a  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-bad-runs.sarif
! 190589cb9dd035b25efd76d823b6862e  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-no-runs.sarif
! f3185388ead2920f3d24cc702ffdaed7  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-non-object-in-runs.sarif
! dcca2356651dbcc61d225f2af14de39c  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.27.10-bad-level.sarif
! 1c93cac1fe90f32a29c00896064bef42  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.33.3-index-out-of-range.sarif
! 7b5a5f8637280fb420dd43c789b33d9b  gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif
  e3b2cd7e659905aae30293135919e468  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif
  984abc6c1fa0578f7f070ea81531b615  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-1.sarif
  a5f27c1dd2784330c1b584360a486c85  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-2.sarif
  5dd4a200df47d1689bc6aca933cb9b44  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-3.sarif
  4234e9442988f3b10195df51ecbb9f02  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.28.6-annotations-1.sarif
+ e70f2852bac8d2f4f94124af298eb001  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif
+ f7226a417a6156e62d6cb64ecfbb3853  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif
  d857a4331f097987a1bb7433f321c1c0  gcc/testsuite/sarif-replay.dg/2.1.0-valid/error-with-note.sarif
  eb63c8ccd144fcb7c3f54ce6920d725c  gcc/testsuite/sarif-replay.dg/2.1.0-valid/escaped-braces.sarif
  0cc960ceb5aae05d1918cf826e8a2d24  gcc/testsuite/sarif-replay.dg/2.1.0-valid/malloc-vs-local-4.c.sarif
*************** a48b85120f042a19d52da08d304cc287  gcc/tr
*** 117396,117402 ****
  e43a555cdaab9a97ba3910364910f865  gcc/tree-data-ref.h
  f01aeac56dffd44808096094e2bf76c1  gcc/tree-dfa.cc
  7ccb47a2df405aa08b45cb7f5fca6385  gcc/tree-dfa.h
! ea868912d411038cbfcc9008608b28a3  gcc/tree-diagnostic-client-data-hooks.cc
  2e869fb8c2c129d455393a91b03e0982  gcc/tree-diagnostic.cc
  21e7c804e59b1471314ee9c773a41ed1  gcc/tree-diagnostic.h
  061a86cf1b2c01bdde3dc32a0701f5b5  gcc/tree-dump.cc
--- 117690,117696 ----
  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
*************** f9731b5179d6c364587220c2aea59a3e  gcc/tr
*** 117406,117412 ****
  f3e814f679f1b8d21b1c54ad5ee16856  gcc/tree-emutls.cc
  e046a9c4874579f81515c4b3d9106b63  gcc/tree-hash-traits.h
  7e063b1edd28723f3f432596c39cfbee  gcc/tree-hasher.h
! e14744b5f500a4c01221207e438177b8  gcc/tree-if-conv.cc
  002c9568898504ca2025dcacf5151fd6  gcc/tree-if-conv.h
  dbe6b6114696eccb16929a6a255e4cd8  gcc/tree-inline.cc
  326f91431bfd3c15d8ddd74699d666e6  gcc/tree-inline.h
--- 117700,117706 ----
  f3e814f679f1b8d21b1c54ad5ee16856  gcc/tree-emutls.cc
  e046a9c4874579f81515c4b3d9106b63  gcc/tree-hash-traits.h
  7e063b1edd28723f3f432596c39cfbee  gcc/tree-hasher.h
! 3b55b5e5e173904c824977c38dc00a9c  gcc/tree-if-conv.cc
  002c9568898504ca2025dcacf5151fd6  gcc/tree-if-conv.h
  dbe6b6114696eccb16929a6a255e4cd8  gcc/tree-inline.cc
  326f91431bfd3c15d8ddd74699d666e6  gcc/tree-inline.h
*************** dbe6b6114696eccb16929a6a255e4cd8  gcc/tr
*** 117414,117421 ****
  ef1cb0fba517532ecda9f4e0dd5218f7  gcc/tree-into-ssa.h
  71aa2d4206ac8bd978b5efd19148dd74  gcc/tree-iterator.cc
  1a3fc26573e4e592efe69f41168a65fa  gcc/tree-iterator.h
! 895dbd14591fc7db545d14d807d8005d  gcc/tree-logical-location.cc
! 80af8ac0e9cecde1b6fc0ea6124521cf  gcc/tree-logical-location.h
  809e077fea6aa1e38be693ae0a16dee1  gcc/tree-loop-distribution.cc
  62502d6fd9aa927353d7437dc2a6da17  gcc/tree-nested.cc
  b9bad013f5186a6cf78fe8adbe457945  gcc/tree-nested.h
--- 117708,117715 ----
  ef1cb0fba517532ecda9f4e0dd5218f7  gcc/tree-into-ssa.h
  71aa2d4206ac8bd978b5efd19148dd74  gcc/tree-iterator.cc
  1a3fc26573e4e592efe69f41168a65fa  gcc/tree-iterator.h
! 5d198acea1fa3dd4c92cdfe9fffa065e  gcc/tree-logical-location.cc
! 0ffb67ad0ccbbc0705e9a36d7ad48724  gcc/tree-logical-location.h
  809e077fea6aa1e38be693ae0a16dee1  gcc/tree-loop-distribution.cc
  62502d6fd9aa927353d7437dc2a6da17  gcc/tree-nested.cc
  b9bad013f5186a6cf78fe8adbe457945  gcc/tree-nested.h
*************** beaa17685ead93eee17f6373d004c4c4  gcc/tr
*** 117434,117440 ****
  bbbc61c764eab6baf4f05f8c97e7235d  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
  f2fea638426d89fe9ea58081e5c46b3a  gcc/tree-profile.cc
! b2ea6fc51eae4a47de35dc40a3f0235c  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
  221a6a553d9f6f7ecbfc9061956add14  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
--- 117728,117734 ----
  bbbc61c764eab6baf4f05f8c97e7235d  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
  221a6a553d9f6f7ecbfc9061956add14  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
*************** adfc498b0c97a8123c02d418757df496  gcc/tr
*** 117455,117465 ****
  ac4bc0bb050755c3e348029c5befafed  gcc/tree-ssa-dse.cc
  a6d83be241a72da1740cf6c5b2ce7d52  gcc/tree-ssa-dse.h
  c2bfee2b31ff0129fc730cb3ac7a0137  gcc/tree-ssa-forwprop.cc
! 417b731d1c8923a0eb41474c924dd760  gcc/tree-ssa-ifcombine.cc
  488acc5feebebd58899e9146d82d4af4  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
  02e9a1bf25d500979aa57640611d72bc  gcc/tree-ssa-loop-ch.cc
! 84691099cdde1ae34e51f9ee79aa8383  gcc/tree-ssa-loop-im.cc
  21088fa37f899ccd0056bf3486157db9  gcc/tree-ssa-loop-ivcanon.cc
  16adb8fe3a072acbebf0e97867daeb3a  gcc/tree-ssa-loop-ivopts.cc
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
--- 117749,117759 ----
  ac4bc0bb050755c3e348029c5befafed  gcc/tree-ssa-dse.cc
  a6d83be241a72da1740cf6c5b2ce7d52  gcc/tree-ssa-dse.h
  c2bfee2b31ff0129fc730cb3ac7a0137  gcc/tree-ssa-forwprop.cc
! 0915c4bbeb42abdda8799c2b27e5db12  gcc/tree-ssa-ifcombine.cc
  488acc5feebebd58899e9146d82d4af4  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
  02e9a1bf25d500979aa57640611d72bc  gcc/tree-ssa-loop-ch.cc
! dded0ae90495fa0bc20b75515f44ff61  gcc/tree-ssa-loop-im.cc
  21088fa37f899ccd0056bf3486157db9  gcc/tree-ssa-loop-ivcanon.cc
  16adb8fe3a072acbebf0e97867daeb3a  gcc/tree-ssa-loop-ivopts.cc
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
*************** fbcc93539b376489c1256eb8cf2d4800  gcc/tr
*** 117468,117474 ****
  66f54027c40abbb5a8ce78570af5f508  gcc/tree-ssa-loop-niter.cc
  189317c0b965ddd0ee491f8e45af4b0d  gcc/tree-ssa-loop-niter.h
  523a4b7c5b7113009b3b1f0f514d0cd3  gcc/tree-ssa-loop-prefetch.cc
! 164c07dbb4079f7d4f41eb0101ed3193  gcc/tree-ssa-loop-split.cc
  57dcd3919dadb6f23e2bcefe55f7cd14  gcc/tree-ssa-loop-unswitch.cc
  2f97e7f187f4f4cce48b71489ef542a0  gcc/tree-ssa-loop.cc
  538146c17730f67ffcc58afdfcc93712  gcc/tree-ssa-loop.h
--- 117762,117768 ----
  66f54027c40abbb5a8ce78570af5f508  gcc/tree-ssa-loop-niter.cc
  189317c0b965ddd0ee491f8e45af4b0d  gcc/tree-ssa-loop-niter.h
  523a4b7c5b7113009b3b1f0f514d0cd3  gcc/tree-ssa-loop-prefetch.cc
! 00d71257ae0536e64bdea226f1e5ef5f  gcc/tree-ssa-loop-split.cc
  57dcd3919dadb6f23e2bcefe55f7cd14  gcc/tree-ssa-loop-unswitch.cc
  2f97e7f187f4f4cce48b71489ef542a0  gcc/tree-ssa-loop.cc
  538146c17730f67ffcc58afdfcc93712  gcc/tree-ssa-loop.h
*************** fbcc93539b376489c1256eb8cf2d4800  gcc/tr
*** 117476,117487 ****
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
  0ed882dedcd92c361bc556587aaa4b74  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
! af8452def778e67f0d86fbbdc4fa3866  gcc/tree-ssa-phiopt.cc
  0864f59d85045caee0a643f82fa6d20c  gcc/tree-ssa-phiprop.cc
  2dc49a3648eb85067602e95bd942eb2a  gcc/tree-ssa-pre.cc
  207e8eba5552b33b5aae2de6e7c1f35d  gcc/tree-ssa-propagate.cc
  299c5d8dabcb4a4d30bab51fbedc4e68  gcc/tree-ssa-propagate.h
! 233d764ee886ccb3223d08a55f2a1ddc  gcc/tree-ssa-reassoc.cc
  258492cd7ef04be49374ea1e670f3b5b  gcc/tree-ssa-reassoc.h
  b15613ad1a2afd3a460a5db9078fce05  gcc/tree-ssa-sccvn.cc
  952cb2484413ce2cf094a52b596dc078  gcc/tree-ssa-sccvn.h
--- 117770,117781 ----
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
  0ed882dedcd92c361bc556587aaa4b74  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
! 1f4fbb5443118ac391d7021b04c89a44  gcc/tree-ssa-phiopt.cc
  0864f59d85045caee0a643f82fa6d20c  gcc/tree-ssa-phiprop.cc
  2dc49a3648eb85067602e95bd942eb2a  gcc/tree-ssa-pre.cc
  207e8eba5552b33b5aae2de6e7c1f35d  gcc/tree-ssa-propagate.cc
  299c5d8dabcb4a4d30bab51fbedc4e68  gcc/tree-ssa-propagate.h
! 9515681f0fd9c70f852eb417ea1ff9df  gcc/tree-ssa-reassoc.cc
  258492cd7ef04be49374ea1e670f3b5b  gcc/tree-ssa-reassoc.h
  b15613ad1a2afd3a460a5db9078fce05  gcc/tree-ssa-sccvn.cc
  952cb2484413ce2cf094a52b596dc078  gcc/tree-ssa-sccvn.h
*************** aa25adbcb019dd38a66ce237df54ae1d  gcc/tr
*** 117490,117496 ****
  1565dc0d975d174e5d53e4889ab223e3  gcc/tree-ssa-sink.cc
  f8a95ebe86d335b810e43ab71cae5b43  gcc/tree-ssa-strlen.cc
  817cd7b593b9ca11ac7464ee683d8f98  gcc/tree-ssa-strlen.h
! a1094c2ceff525c3440bb32a804d4f1d  gcc/tree-ssa-structalias.cc
  8236d4d91b8701a8daadc2f8a12d4752  gcc/tree-ssa-tail-merge.cc
  18ba2469cfdfbd297fe2b0120e69a84c  gcc/tree-ssa-ter.cc
  3094df71c80e187685e4e97e428d64f4  gcc/tree-ssa-ter.h
--- 117784,117790 ----
  1565dc0d975d174e5d53e4889ab223e3  gcc/tree-ssa-sink.cc
  f8a95ebe86d335b810e43ab71cae5b43  gcc/tree-ssa-strlen.cc
  817cd7b593b9ca11ac7464ee683d8f98  gcc/tree-ssa-strlen.h
! 7e81fd7c0f8ed03ed6de344fdae263bf  gcc/tree-ssa-structalias.cc
  8236d4d91b8701a8daadc2f8a12d4752  gcc/tree-ssa-tail-merge.cc
  18ba2469cfdfbd297fe2b0120e69a84c  gcc/tree-ssa-ter.cc
  3094df71c80e187685e4e97e428d64f4  gcc/tree-ssa-ter.h
*************** e1160ec41d297563bde6aef7f5306fa2  gcc/tr
*** 117511,117531 ****
  58d5ce00761a2f46b9daffbc63a9b1d3  gcc/tree-streamer-out.cc
  22cddc57dea71a3e5c57e033b6f86476  gcc/tree-streamer.cc
  6714826bb9cd5f171a08cbabcb1da8e6  gcc/tree-streamer.h
! e8f01b7e3f64d8a51178c3219cabb7ef  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  7286ca79f7a1747d76089d76bc171abd  gcc/tree-tailcall.cc
! 3ca7fb9c7d26183dd1366c776301506b  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  cc0bdf3f684b251509b8552d2d8549a3  gcc/tree-vect-loop-manip.cc
! 579ba2e68e0e500efcb62a18f9814a6c  gcc/tree-vect-loop.cc
  372af0798474bbe8961bb0eece748041  gcc/tree-vect-patterns.cc
  baa70369c21f662d5e61d1296052d231  gcc/tree-vect-slp-patterns.cc
! 79e291fd0ebd5bbdf2d63a82a49d2932  gcc/tree-vect-slp.cc
! a702dfcc7a1a3043df89d62cbf2eaa09  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  6a5457c324d4279acbd82f147f1dd823  gcc/tree-vectorizer.cc
! f5c90b57853064f13fc6868527a2ea7e  gcc/tree-vectorizer.h
  cb2defb55935eac3f24944ba204230f0  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
  415ce023fed5d6876500bc4dcf6c29f8  gcc/tree.cc
--- 117805,117825 ----
  58d5ce00761a2f46b9daffbc63a9b1d3  gcc/tree-streamer-out.cc
  22cddc57dea71a3e5c57e033b6f86476  gcc/tree-streamer.cc
  6714826bb9cd5f171a08cbabcb1da8e6  gcc/tree-streamer.h
! 1001d7e4347de60f6d9e93f421ad5d6f  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  7286ca79f7a1747d76089d76bc171abd  gcc/tree-tailcall.cc
! 2a9d02531d373e9030a89a8b56a73896  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  cc0bdf3f684b251509b8552d2d8549a3  gcc/tree-vect-loop-manip.cc
! c002c500fcbe95817affe0efa6b88a58  gcc/tree-vect-loop.cc
  372af0798474bbe8961bb0eece748041  gcc/tree-vect-patterns.cc
  baa70369c21f662d5e61d1296052d231  gcc/tree-vect-slp-patterns.cc
! 3a0f36854254b3b48fda6f53ad2c8f34  gcc/tree-vect-slp.cc
! 36bcae9b7f14f1e09f07d910bd295986  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  6a5457c324d4279acbd82f147f1dd823  gcc/tree-vectorizer.cc
! 4b31ff56c4f59285db490173cc51d9d8  gcc/tree-vectorizer.h
  cb2defb55935eac3f24944ba204230f0  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
  415ce023fed5d6876500bc4dcf6c29f8  gcc/tree.cc
*************** d72991a60a600bb2f927c55d8c886217  gcc/ve
*** 117570,117576 ****
  54a3885ae2d326266cc13ab447394d8f  gcc/vector-builder.h
  40fec2b7bbea0b654d0704244caa4e9c  gcc/vmsdbg.h
  c2784afc7476e44bc70100f7c350e07b  gcc/vmsdbgout.cc
! 33d29d6d32171e6ef1c77c4f29ed00e1  gcc/vr-values.cc
  0901703123c4198bb16fc8076912bd2e  gcc/vr-values.h
  9ce284cb128dc6f9cadddec86a09bb4a  gcc/vtable-verify.cc
  cdaf5a05f59e5ac25581747f6a7b4fe9  gcc/vtable-verify.h
--- 117864,117870 ----
  54a3885ae2d326266cc13ab447394d8f  gcc/vector-builder.h
  40fec2b7bbea0b654d0704244caa4e9c  gcc/vmsdbg.h
  c2784afc7476e44bc70100f7c350e07b  gcc/vmsdbgout.cc
! 1c385f3f9c1183e6721b747a39267d0d  gcc/vr-values.cc
  0901703123c4198bb16fc8076912bd2e  gcc/vr-values.h
  9ce284cb128dc6f9cadddec86a09bb4a  gcc/vtable-verify.cc
  cdaf5a05f59e5ac25581747f6a7b4fe9  gcc/vtable-verify.h
*************** c7399bbb7eadd31d7cd04991cd79c238  includ
*** 117656,117662 ****
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  c01f38de8270d558b8d3ecac839d3bbf  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! c3edf4186ec0f5ee4ef9817f0462928f  libatomic/ChangeLog
  71c1b6c36a41008494bf13a4a0863768  libatomic/Makefile.am
  4edf5a5514d9eb3764c1536ce393dfb2  libatomic/Makefile.in
  04a8eb275561484cf0d6f8c459a38177  libatomic/acinclude.m4
--- 117950,117956 ----
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  c01f38de8270d558b8d3ecac839d3bbf  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! 60b4d744144fba44c12174d540047dd4  libatomic/ChangeLog
  71c1b6c36a41008494bf13a4a0863768  libatomic/Makefile.am
  4edf5a5514d9eb3764c1536ce393dfb2  libatomic/Makefile.in
  04a8eb275561484cf0d6f8c459a38177  libatomic/acinclude.m4
*************** b62c913583a1c24be476956037b71a99  libato
*** 117723,117729 ****
  7f7cbf5cf0b5b7eaf13a26b895cabed6  libatomic/testsuite/Makefile.in
  ed1ed157638cd6b95884f216e3414581  libatomic/testsuite/config/default.exp
  3e77a79fd1e00a1f4e5fbf507474e1e5  libatomic/testsuite/lib/libatomic-dg.exp
! f0110044cfaebc731bd5468da4c8d4e2  libatomic/testsuite/lib/libatomic.exp
  9eab2bd493af1db9811d52bbbef2a805  libatomic/testsuite/libatomic-site-extra.exp.in
  6b8763cc8b07ca01040138d742a984f0  libatomic/testsuite/libatomic.c/atomic-compare-exchange-1.c
  773f995ba0a3ab509251361826397852  libatomic/testsuite/libatomic.c/atomic-compare-exchange-2.c
--- 118017,118023 ----
  7f7cbf5cf0b5b7eaf13a26b895cabed6  libatomic/testsuite/Makefile.in
  ed1ed157638cd6b95884f216e3414581  libatomic/testsuite/config/default.exp
  3e77a79fd1e00a1f4e5fbf507474e1e5  libatomic/testsuite/lib/libatomic-dg.exp
! 64915dff2d4513942794e67acc165a35  libatomic/testsuite/lib/libatomic.exp
  9eab2bd493af1db9811d52bbbef2a805  libatomic/testsuite/libatomic-site-extra.exp.in
  6b8763cc8b07ca01040138d742a984f0  libatomic/testsuite/libatomic.c/atomic-compare-exchange-1.c
  773f995ba0a3ab509251361826397852  libatomic/testsuite/libatomic.c/atomic-compare-exchange-2.c
*************** cffdeae41b78da05839b193e90188f55  libcod
*** 117858,117864 ****
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! 9a9297ff2629eebde5e31fb89f52b432  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  e80a909ca87015a009bee9588bb84a64  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
--- 118152,118158 ----
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! cacc3c7a814cdb6526feba0055fccfb5  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  e80a909ca87015a009bee9588bb84a64  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
*************** b07c7863f0e7ad4e6a0915d66fc9e582  libcpp
*** 117870,117876 ****
  ea784e8b4e934b5966c1fa9ff3767729  libcpp/directives.cc
  fe94628a876ca876eb1ac6dc396c0068  libcpp/errors.cc
  edcd9f141150c148f5c5c9584a446394  libcpp/expr.cc
! cde77f3d550834cad6ce61dd7fd070f1  libcpp/files.cc
  97faf9e969cb255f2a2a91e0e7ac3c32  libcpp/generated_cpp_wcwidth.h
  c496c50691c37464e0aacc985cc3ab1e  libcpp/identifiers.cc
  625e2785c1c28cbca2c662f92d67cf2b  libcpp/include/cpplib.h
--- 118164,118170 ----
  ea784e8b4e934b5966c1fa9ff3767729  libcpp/directives.cc
  fe94628a876ca876eb1ac6dc396c0068  libcpp/errors.cc
  edcd9f141150c148f5c5c9584a446394  libcpp/expr.cc
! ce74c78c2cb27bcdeac8a9b0400712cd  libcpp/files.cc
  97faf9e969cb255f2a2a91e0e7ac3c32  libcpp/generated_cpp_wcwidth.h
  c496c50691c37464e0aacc985cc3ab1e  libcpp/identifiers.cc
  625e2785c1c28cbca2c662f92d67cf2b  libcpp/include/cpplib.h
*************** d516a30568fd33a5e69be4374f27812f  libcpp
*** 117882,117888 ****
  3f05e522dd9325c9807fc4f662533f7b  libcpp/init.cc
  a0d37c297f3d462529b502a4e1bd2378  libcpp/internal.h
  4e6255f45482c932e22abfa044142804  libcpp/lex.cc
! ad5dcc2a907d0a900801519a49cb42cf  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  9ca45c4c9e1829d625f4cc03b82debd1  libcpp/macro.cc
  b4c085899eca6fc0e5ddc81d15fc2e67  libcpp/makeucnid.cc
--- 118176,118182 ----
  3f05e522dd9325c9807fc4f662533f7b  libcpp/init.cc
  a0d37c297f3d462529b502a4e1bd2378  libcpp/internal.h
  4e6255f45482c932e22abfa044142804  libcpp/lex.cc
! afb53d91467e0952508a757742351dd6  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  9ca45c4c9e1829d625f4cc03b82debd1  libcpp/macro.cc
  b4c085899eca6fc0e5ddc81d15fc2e67  libcpp/makeucnid.cc
*************** f017ba40c4699f1549cd341ad688007f  libgcc
*** 119940,119976 ****
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! 698bd1a28bd458b4bff846d325e0118a  libgcobol/ChangeLog
  573e7a1dee0641f56d9b797b23dff44b  libgcobol/Makefile.am
  23cf4646d213d05645a0bf48209b374d  libgcobol/Makefile.in
  ff016a65ce3c24bdd22207044f2a126e  libgcobol/README
  8c9140838556aedbca129aeaedf0855b  libgcobol/acinclude.m4
  0bf6afe766a6886d2ac1f175300477f2  libgcobol/aclocal.m4
! 01d874537a0c1097b229eb5d5af518e1  libgcobol/charmaps.cc
  08bac5426c592bca32b87e76cd4a87a1  libgcobol/charmaps.h
! c2c1d8d31406591cf8641e2cd5d4678c  libgcobol/common-defs.h
! 610133bb62ccfb1c4eb23271ab7e7607  libgcobol/config.h.in
! b2c1b65a39aee80e678a632f466f689c  libgcobol/configure
! 362cff9fb2d86274b240ed9531e33854  libgcobol/configure.ac
  5aec96a7dfdb0d6e7b10cc13d65c53a3  libgcobol/configure.tgt
! 795e97e53b8fe43c41e1b6169e9c2294  libgcobol/constants.cc
  50c34404ebdad01c82b97ac6d262d7a2  libgcobol/ec.h
! c3916da3eb612bdfc67ae057bd7b08e3  libgcobol/exceptl.h
! 66de12cb333e2e94c4776354fcee4eab  libgcobol/gcobolio.h
! b609e2cae4a20192f8ddbcdeedb9186f  libgcobol/gfileio.cc
  4c5dc966be490381f53924b2441c9300  libgcobol/gfileio.h
! 1c551b7ea1202a1193beb270bd283e05  libgcobol/gmath.cc
  9b52995346d1f02cab9c3e2b816722d6  libgcobol/gmath.h
! 5881cd0ff37c21fe0bf8e1ff26736e24  libgcobol/intrinsic.cc
  b40580a5065188e3a6887000b8ab9de2  libgcobol/io.cc
  b054056cc4fe4de7a78d34e43f2f3bab  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! ab5ceec27db3c928f977137e07f98ee5  libgcobol/libgcobol.cc
  a92501f6652c6261f981817076ae3254  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
! 63059d663bb3435781f5a0b59b103ad5  libgcobol/valconv.cc
  04c19ca3fa2ce47103a80f82c288c484  libgcobol/valconv.h
! 4515dad9264792b86137ee6880f876ed  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
--- 120234,120270 ----
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! 23011eb4bcb45a397657e191eb387e1e  libgcobol/ChangeLog
  573e7a1dee0641f56d9b797b23dff44b  libgcobol/Makefile.am
  23cf4646d213d05645a0bf48209b374d  libgcobol/Makefile.in
  ff016a65ce3c24bdd22207044f2a126e  libgcobol/README
  8c9140838556aedbca129aeaedf0855b  libgcobol/acinclude.m4
  0bf6afe766a6886d2ac1f175300477f2  libgcobol/aclocal.m4
! 4bcfcd26cbcae0acad6250357010ed20  libgcobol/charmaps.cc
  08bac5426c592bca32b87e76cd4a87a1  libgcobol/charmaps.h
! 22021e192da309ea1422cf473b6f77d4  libgcobol/common-defs.h
! 55c6d7709ebd3974b38cdddffc6c29f3  libgcobol/config.h.in
! 960f1025f03e1402396993e2527513be  libgcobol/configure
! 7acbee643dbc269e7c4fddc8279d5bff  libgcobol/configure.ac
  5aec96a7dfdb0d6e7b10cc13d65c53a3  libgcobol/configure.tgt
! dfb3fee8b4c51e1872d66bcc6c4a3e1c  libgcobol/constants.cc
  50c34404ebdad01c82b97ac6d262d7a2  libgcobol/ec.h
! fbd99afdab52fcee0543b901042350ef  libgcobol/exceptl.h
! 9ae4fae6502f4e31ffd3818d68206d29  libgcobol/gcobolio.h
! 78a9e85e510ce6ae40b2970f215bc476  libgcobol/gfileio.cc
  4c5dc966be490381f53924b2441c9300  libgcobol/gfileio.h
! 4feed2758b460380fb46278ff9ed4c18  libgcobol/gmath.cc
  9b52995346d1f02cab9c3e2b816722d6  libgcobol/gmath.h
! 891bc150793c21e6e16b3b8f83658a31  libgcobol/intrinsic.cc
  b40580a5065188e3a6887000b8ab9de2  libgcobol/io.cc
  b054056cc4fe4de7a78d34e43f2f3bab  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! fbb2e2b0af4397cc13c501a4a3c299aa  libgcobol/libgcobol.cc
  a92501f6652c6261f981817076ae3254  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
! 93cffe2f9fb0783054d070bd71223ff0  libgcobol/valconv.cc
  04c19ca3fa2ce47103a80f82c288c484  libgcobol/valconv.h
! 8055da91d49093e266cd468f2ecd4707  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
*************** a25a190e02c8ba2caa2c3dee224eba51  libgfo
*** 119995,120002 ****
  aa424ddf6a9e4e08b8023d3d5b371a0d  libgfortran/ChangeLog-2023
  09537a69736f655d1e0ccf28367d3ddf  libgfortran/ChangeLog-2024
  16ba29cf4184ed00d26fe02df17c83d7  libgfortran/ISO_Fortran_binding.h
! 44aefb120ad00e6d4eaf97832a3e0a72  libgfortran/Makefile.am
! a3dd5473adb7fc60c0121b193324d835  libgfortran/Makefile.in
  43f0b2981fb15d556a8ee8292ef70ba8  libgfortran/acinclude.m4
  77dad7b87b2adfbfda676696055ef90f  libgfortran/aclocal.m4
  c89d50fda6cbf50698f2d324f8a6ec7e  libgfortran/c99_protos.h
--- 120289,120296 ----
  aa424ddf6a9e4e08b8023d3d5b371a0d  libgfortran/ChangeLog-2023
  09537a69736f655d1e0ccf28367d3ddf  libgfortran/ChangeLog-2024
  16ba29cf4184ed00d26fe02df17c83d7  libgfortran/ISO_Fortran_binding.h
! dff439751d0f684d621dfa4cd7358321  libgfortran/Makefile.am
! 7a19a44169283cb020a346caff128ab8  libgfortran/Makefile.in
  43f0b2981fb15d556a8ee8292ef70ba8  libgfortran/acinclude.m4
  77dad7b87b2adfbfda676696055ef90f  libgfortran/aclocal.m4
  c89d50fda6cbf50698f2d324f8a6ec7e  libgfortran/c99_protos.h
*************** dad7b7c6789f84c625d23027ea5d4ae3  libgfo
*** 120391,120401 ****
  df8469bbb67460c431842b2c54e53c82  libgfortran/generated/maxloc0_16_i2.c
  a16c7142a153ebf7d5d6e435c7d89e77  libgfortran/generated/maxloc0_16_i4.c
  549a4071938007d866fbb0a82f0f22bf  libgfortran/generated/maxloc0_16_i8.c
! 160bb110765445b10eac90f793aef48e  libgfortran/generated/maxloc0_16_m1.c
! 39c56f39e53c6712d59d9b3f9d872c86  libgfortran/generated/maxloc0_16_m16.c
! 584864b9b411009b6f21c01485b01789  libgfortran/generated/maxloc0_16_m2.c
! 3156d3b51564892a026bb1ef11c0bca1  libgfortran/generated/maxloc0_16_m4.c
! 3a3b4d9c73355b3820a41b86748964cf  libgfortran/generated/maxloc0_16_m8.c
  7820c9fb5ed5d032114356e869dc5f1c  libgfortran/generated/maxloc0_16_r10.c
  8d4f932bf7641bf91517d4fc38471267  libgfortran/generated/maxloc0_16_r16.c
  81b5c254a405c225f45ea7608dca7b99  libgfortran/generated/maxloc0_16_r17.c
--- 120685,120695 ----
  df8469bbb67460c431842b2c54e53c82  libgfortran/generated/maxloc0_16_i2.c
  a16c7142a153ebf7d5d6e435c7d89e77  libgfortran/generated/maxloc0_16_i4.c
  549a4071938007d866fbb0a82f0f22bf  libgfortran/generated/maxloc0_16_i8.c
! 9d87ff1e143c7c07b2fe69060db6bbc7  libgfortran/generated/maxloc0_16_m1.c
! 147dc09d40c9dc388388dd44d4aa07f2  libgfortran/generated/maxloc0_16_m16.c
! e2062bb116c1f35960e5166460f15774  libgfortran/generated/maxloc0_16_m2.c
! b862113cf3798535e7b9c28bbdbbbb2e  libgfortran/generated/maxloc0_16_m4.c
! c8e90dc0816a14aec68b6ed7d953d04e  libgfortran/generated/maxloc0_16_m8.c
  7820c9fb5ed5d032114356e869dc5f1c  libgfortran/generated/maxloc0_16_r10.c
  8d4f932bf7641bf91517d4fc38471267  libgfortran/generated/maxloc0_16_r16.c
  81b5c254a405c225f45ea7608dca7b99  libgfortran/generated/maxloc0_16_r17.c
*************** c843116bacf191a5257b118c306a96b9  libgfo
*** 120408,120418 ****
  619cf8a497a097efd9d766c56dd6e9e2  libgfortran/generated/maxloc0_4_i2.c
  1c80d791312ab1ffba82cf186294fe39  libgfortran/generated/maxloc0_4_i4.c
  f0f943f738834fdcc9e1e2d68972c491  libgfortran/generated/maxloc0_4_i8.c
! 0c55d66775948180150e45d2c406efc3  libgfortran/generated/maxloc0_4_m1.c
! 2b1a015664daf5c55bc1ca88822ce9e3  libgfortran/generated/maxloc0_4_m16.c
! 784813550eae9d177f89830272ed1a1a  libgfortran/generated/maxloc0_4_m2.c
! 7dcc536ebc63c862bab2af9cca67a1cc  libgfortran/generated/maxloc0_4_m4.c
! 67917cd7dd5da531bda919642bd75691  libgfortran/generated/maxloc0_4_m8.c
  c253a75b8e58e1757faccb8c6acf71ca  libgfortran/generated/maxloc0_4_r10.c
  a4b61dffb736bcd82e3b6aa1c3bed71d  libgfortran/generated/maxloc0_4_r16.c
  3e164563b9ad66b35ae038804bd6eb8a  libgfortran/generated/maxloc0_4_r17.c
--- 120702,120712 ----
  619cf8a497a097efd9d766c56dd6e9e2  libgfortran/generated/maxloc0_4_i2.c
  1c80d791312ab1ffba82cf186294fe39  libgfortran/generated/maxloc0_4_i4.c
  f0f943f738834fdcc9e1e2d68972c491  libgfortran/generated/maxloc0_4_i8.c
! 24712ca5128f9d892491a332e76754f3  libgfortran/generated/maxloc0_4_m1.c
! 6065808b3be577e925e7f8583953155a  libgfortran/generated/maxloc0_4_m16.c
! e2945d557eb17c8b9076faae2684f4c6  libgfortran/generated/maxloc0_4_m2.c
! 78897c2bc1c957317217dfd9dfeb0032  libgfortran/generated/maxloc0_4_m4.c
! 91619c142b3e2ca32d9204dd39e71e66  libgfortran/generated/maxloc0_4_m8.c
  c253a75b8e58e1757faccb8c6acf71ca  libgfortran/generated/maxloc0_4_r10.c
  a4b61dffb736bcd82e3b6aa1c3bed71d  libgfortran/generated/maxloc0_4_r16.c
  3e164563b9ad66b35ae038804bd6eb8a  libgfortran/generated/maxloc0_4_r17.c
*************** aef76e89e98478df282a0d537c9bb2ff  libgfo
*** 120425,120435 ****
  68940fab157ac658d7c9bf659a42d67f  libgfortran/generated/maxloc0_8_i2.c
  fdcdea6842638a5c42495fc5f1b1cbca  libgfortran/generated/maxloc0_8_i4.c
  96d1a856d52f9ee4fb83884e6a5e3b10  libgfortran/generated/maxloc0_8_i8.c
! e393ee060463a40ab2a35a4bbddc1fd6  libgfortran/generated/maxloc0_8_m1.c
! ac521b561e22ab282403bc1849e44b07  libgfortran/generated/maxloc0_8_m16.c
! 1dd4370bfcabb4b41cd774a7e939d2b9  libgfortran/generated/maxloc0_8_m2.c
! 1a62acbff945ff17ca7bc4708ffe0d36  libgfortran/generated/maxloc0_8_m4.c
! e35a58a8e46716c0426839c9a79e7c0d  libgfortran/generated/maxloc0_8_m8.c
  669be684c62c2ab8113f040a122c2fc1  libgfortran/generated/maxloc0_8_r10.c
  be828e2f9482fb6f7cf5af2d1cafb362  libgfortran/generated/maxloc0_8_r16.c
  b235049fd0fb70aefca5b98d84448d1c  libgfortran/generated/maxloc0_8_r17.c
--- 120719,120729 ----
  68940fab157ac658d7c9bf659a42d67f  libgfortran/generated/maxloc0_8_i2.c
  fdcdea6842638a5c42495fc5f1b1cbca  libgfortran/generated/maxloc0_8_i4.c
  96d1a856d52f9ee4fb83884e6a5e3b10  libgfortran/generated/maxloc0_8_i8.c
! 1a451b474233ca9d8fea768a7c4f83a7  libgfortran/generated/maxloc0_8_m1.c
! 30bf87843a0e002f6bc5f025824646e5  libgfortran/generated/maxloc0_8_m16.c
! 4dab0e7b5ba5e2da692ffca659ab0239  libgfortran/generated/maxloc0_8_m2.c
! 54010eafc46b73f358e12a6d2020aa30  libgfortran/generated/maxloc0_8_m4.c
! 3b13cb82ead568ab9faf7ce901198ed4  libgfortran/generated/maxloc0_8_m8.c
  669be684c62c2ab8113f040a122c2fc1  libgfortran/generated/maxloc0_8_r10.c
  be828e2f9482fb6f7cf5af2d1cafb362  libgfortran/generated/maxloc0_8_r16.c
  b235049fd0fb70aefca5b98d84448d1c  libgfortran/generated/maxloc0_8_r17.c
*************** eba2725b3fd4771a5b1bad48b2761a33  libgfo
*** 120442,120451 ****
  c62e6a694bab2fbce0a02a86d8d37206  libgfortran/generated/maxloc1_16_i2.c
  e74fadaaa8707366eb592476129408a2  libgfortran/generated/maxloc1_16_i4.c
  bf7456ecb86d9445e5983acefc747d4c  libgfortran/generated/maxloc1_16_i8.c
! b0cfaae9b9253112b9d6d539f2de7219  libgfortran/generated/maxloc1_16_m1.c
! 282c05acf28a98132b6653d5f786ee36  libgfortran/generated/maxloc1_16_m2.c
! daece998012c11d663030d68a51f0bb8  libgfortran/generated/maxloc1_16_m4.c
! 84cf394c78971eb8b699d82c62c0d08d  libgfortran/generated/maxloc1_16_m8.c
  df2fe8c79d52586344d08578e4edfa4d  libgfortran/generated/maxloc1_16_r10.c
  eb7a9f2313c9b09f44560db9a23504df  libgfortran/generated/maxloc1_16_r16.c
  7a0d7e2dc9e20c291c737e8ebbc60b0a  libgfortran/generated/maxloc1_16_r17.c
--- 120736,120746 ----
  c62e6a694bab2fbce0a02a86d8d37206  libgfortran/generated/maxloc1_16_i2.c
  e74fadaaa8707366eb592476129408a2  libgfortran/generated/maxloc1_16_i4.c
  bf7456ecb86d9445e5983acefc747d4c  libgfortran/generated/maxloc1_16_i8.c
! c12b57f2b0210bf6c6b7aaff51906256  libgfortran/generated/maxloc1_16_m1.c
! ce72acbfdd6045160b44300411d3f07f  libgfortran/generated/maxloc1_16_m16.c
! d9fe5bcab54bf5af06514547d1e3404b  libgfortran/generated/maxloc1_16_m2.c
! 3a4256951bd1b9b28407e65b75505945  libgfortran/generated/maxloc1_16_m4.c
! 3a79f8db43ca865ae615fcade40a95c6  libgfortran/generated/maxloc1_16_m8.c
  df2fe8c79d52586344d08578e4edfa4d  libgfortran/generated/maxloc1_16_r10.c
  eb7a9f2313c9b09f44560db9a23504df  libgfortran/generated/maxloc1_16_r16.c
  7a0d7e2dc9e20c291c737e8ebbc60b0a  libgfortran/generated/maxloc1_16_r17.c
*************** c507fc2e66ec574faee3219eb3144b46  libgfo
*** 120458,120468 ****
  e52232cebdac212023a61a56619c2a44  libgfortran/generated/maxloc1_4_i2.c
  f1e3cba6dd27158603c4d6cf077f942a  libgfortran/generated/maxloc1_4_i4.c
  313907089e259e55f2491af268bebaa9  libgfortran/generated/maxloc1_4_i8.c
! cf98699372bc73ef6d3c4f82f75284ca  libgfortran/generated/maxloc1_4_m1.c
! 09a8932b29e60e68fa048a9536db50ca  libgfortran/generated/maxloc1_4_m16.c
! fb2d7b3ff312c8f56ef4368b88c58362  libgfortran/generated/maxloc1_4_m2.c
! d20a4b3912157d4bf60b09746f7bb0b6  libgfortran/generated/maxloc1_4_m4.c
! 3bb7d561369952d8f984020706837238  libgfortran/generated/maxloc1_4_m8.c
  5b1577a3f3e4bbf842f5b849867cad83  libgfortran/generated/maxloc1_4_r10.c
  6a0f8837f31b291f27309cb53e49a0c4  libgfortran/generated/maxloc1_4_r16.c
  9f588351fd28ef8e20a5623ce93a59a5  libgfortran/generated/maxloc1_4_r17.c
--- 120753,120763 ----
  e52232cebdac212023a61a56619c2a44  libgfortran/generated/maxloc1_4_i2.c
  f1e3cba6dd27158603c4d6cf077f942a  libgfortran/generated/maxloc1_4_i4.c
  313907089e259e55f2491af268bebaa9  libgfortran/generated/maxloc1_4_i8.c
! 1bfbbb666a13a53fcea3fce71c4b27bf  libgfortran/generated/maxloc1_4_m1.c
! 4ef9b7c8eab28f664a9d5077655f0cff  libgfortran/generated/maxloc1_4_m16.c
! 768d03c26047d5763215237325a5b973  libgfortran/generated/maxloc1_4_m2.c
! 2521804819c001c5dc1f511afdc0ccc6  libgfortran/generated/maxloc1_4_m4.c
! b11acb8eca8664dbda7262a67565825f  libgfortran/generated/maxloc1_4_m8.c
  5b1577a3f3e4bbf842f5b849867cad83  libgfortran/generated/maxloc1_4_r10.c
  6a0f8837f31b291f27309cb53e49a0c4  libgfortran/generated/maxloc1_4_r16.c
  9f588351fd28ef8e20a5623ce93a59a5  libgfortran/generated/maxloc1_4_r17.c
*************** acf5c81c4ab5a9e6697a44e20d172e2d  libgfo
*** 120475,120485 ****
  028d2b330373f81a647baf9a63cedfbc  libgfortran/generated/maxloc1_8_i2.c
  3f643c098ec0ebf26207db9d01ee625b  libgfortran/generated/maxloc1_8_i4.c
  9b57d8642a825f853fc39df445f7e6b8  libgfortran/generated/maxloc1_8_i8.c
! 30476ddf2fa8b485f115e51aff1d2818  libgfortran/generated/maxloc1_8_m1.c
! 9a28bd47f25c16981e5f92c2916872f2  libgfortran/generated/maxloc1_8_m16.c
! a6407c18314734fd022e5662e0294e9e  libgfortran/generated/maxloc1_8_m2.c
! 981e65fd1fb262843906b80e67d85194  libgfortran/generated/maxloc1_8_m4.c
! 04bc2284f060a82b0cc660899e5aecb2  libgfortran/generated/maxloc1_8_m8.c
  a5538f936916019edbe6eb586eefad22  libgfortran/generated/maxloc1_8_r10.c
  22638b0085f2141a903df07c24d8d29c  libgfortran/generated/maxloc1_8_r16.c
  b0b0f18b4a4e9a2f027e0926258e37b3  libgfortran/generated/maxloc1_8_r17.c
--- 120770,120780 ----
  028d2b330373f81a647baf9a63cedfbc  libgfortran/generated/maxloc1_8_i2.c
  3f643c098ec0ebf26207db9d01ee625b  libgfortran/generated/maxloc1_8_i4.c
  9b57d8642a825f853fc39df445f7e6b8  libgfortran/generated/maxloc1_8_i8.c
! 0525a837bed7e68ee55831c6935b3083  libgfortran/generated/maxloc1_8_m1.c
! 6cfb67139c32ba80137682c90f0f77fe  libgfortran/generated/maxloc1_8_m16.c
! 085e2653d8fdb7fafc3977ab5d46e945  libgfortran/generated/maxloc1_8_m2.c
! 347e7f033fc595ddc92223125dc20902  libgfortran/generated/maxloc1_8_m4.c
! 83c1d3375ff9434fdc40136d7d165c15  libgfortran/generated/maxloc1_8_m8.c
  a5538f936916019edbe6eb586eefad22  libgfortran/generated/maxloc1_8_r10.c
  22638b0085f2141a903df07c24d8d29c  libgfortran/generated/maxloc1_8_r16.c
  b0b0f18b4a4e9a2f027e0926258e37b3  libgfortran/generated/maxloc1_8_r17.c
*************** a10202db8770adae52b1dce48d7a9ec2  libgfo
*** 120502,120512 ****
  f53afc8b9c86ca0ddc693e82e87de988  libgfortran/generated/maxval_i2.c
  6bf86c67e22ebfe43f188dc643059db8  libgfortran/generated/maxval_i4.c
  55141f70a5064f36d896bdad18d0a95f  libgfortran/generated/maxval_i8.c
! 9309e2d800ba94aa505efeda3308b1cd  libgfortran/generated/maxval_m1.c
! 056ca1967323929c7ce3b7763f1f80fb  libgfortran/generated/maxval_m16.c
! a8d255859b817fa07e34697aeac1ab7d  libgfortran/generated/maxval_m2.c
! 17261ca7ebdcaabb6734fc065adc5cc4  libgfortran/generated/maxval_m4.c
! e6c92a47db622cc9d1ac9ec8d39cb0b8  libgfortran/generated/maxval_m8.c
  39e930ec37ce56356a74830fb3a3216d  libgfortran/generated/maxval_r10.c
  aeab205938d6bab5d8319052dc6c3377  libgfortran/generated/maxval_r16.c
  e3ddd8a76a0f88fd0cb9ef759cd2773f  libgfortran/generated/maxval_r17.c
--- 120797,120807 ----
  f53afc8b9c86ca0ddc693e82e87de988  libgfortran/generated/maxval_i2.c
  6bf86c67e22ebfe43f188dc643059db8  libgfortran/generated/maxval_i4.c
  55141f70a5064f36d896bdad18d0a95f  libgfortran/generated/maxval_i8.c
! a09e7758408863a8d09097176d422b6b  libgfortran/generated/maxval_m1.c
! aee821dc1cf43984a98caa739138eec4  libgfortran/generated/maxval_m16.c
! 84e9726150340486088bd3eb09bfe895  libgfortran/generated/maxval_m2.c
! 38782a2ad1d52b618192a165f21b36c1  libgfortran/generated/maxval_m4.c
! a925befd87ae715223b61e2ae23c36ac  libgfortran/generated/maxval_m8.c
  39e930ec37ce56356a74830fb3a3216d  libgfortran/generated/maxval_r10.c
  aeab205938d6bab5d8319052dc6c3377  libgfortran/generated/maxval_r16.c
  e3ddd8a76a0f88fd0cb9ef759cd2773f  libgfortran/generated/maxval_r17.c
*************** b98698922a8d329364583b849ae66dd1  libgfo
*** 120804,120810 ****
  825bc3c7f45b36f9ca82fb7b083bcd7d  libgfortran/generated/unpack_r17.c
  8fcbe32bf70b0c8c128b4ab3cd41eae7  libgfortran/generated/unpack_r4.c
  f803423e0f42de429e6d05db06ea0511  libgfortran/generated/unpack_r8.c
! 3d1af775c6d2370f3140e9cdb0a41cb6  libgfortran/gfortran.map
  081eb3c616ff1dc25f948c3390a45c25  libgfortran/ieee/ieee_arithmetic.F90
  29aa422de12addef93a6a64a3de7acf1  libgfortran/ieee/ieee_exceptions.F90
  526e069d40bcb9a6d33f16725646afed  libgfortran/ieee/ieee_features.F90
--- 121099,121105 ----
  825bc3c7f45b36f9ca82fb7b083bcd7d  libgfortran/generated/unpack_r17.c
  8fcbe32bf70b0c8c128b4ab3cd41eae7  libgfortran/generated/unpack_r4.c
  f803423e0f42de429e6d05db06ea0511  libgfortran/generated/unpack_r8.c
! 0b3d4947a8c1e742bfc79cc9926300ba  libgfortran/gfortran.map
  081eb3c616ff1dc25f948c3390a45c25  libgfortran/ieee/ieee_arithmetic.F90
  29aa422de12addef93a6a64a3de7acf1  libgfortran/ieee/ieee_exceptions.F90
  526e069d40bcb9a6d33f16725646afed  libgfortran/ieee/ieee_features.F90
*************** b12c12580817fdd69991728b7f81f679  libgfo
*** 120849,120855 ****
  beab16b72785559deecadd1ce2b3a919  libgfortran/intrinsics/pack_generic.c
  ccc51f15a414cec35d1c667bb904c354  libgfortran/intrinsics/perror.c
  63bbffde487f5a10bb0f1ef1c24fb1ff  libgfortran/intrinsics/rand.c
! f3e770d92fdf10e59f0682249f59ad63  libgfortran/intrinsics/random.c
  980afd31fe2acdb19847ed694cc1b91e  libgfortran/intrinsics/random_init.f90
  6b1232a2364572f1170ef84c6ce57d43  libgfortran/intrinsics/reduce.c
  8dcb1de4a7f8bbbd027cafb7c6a627af  libgfortran/intrinsics/rename.c
--- 121144,121150 ----
  beab16b72785559deecadd1ce2b3a919  libgfortran/intrinsics/pack_generic.c
  ccc51f15a414cec35d1c667bb904c354  libgfortran/intrinsics/perror.c
  63bbffde487f5a10bb0f1ef1c24fb1ff  libgfortran/intrinsics/rand.c
! 552287eeae7a446f05ee4a24c3f652ed  libgfortran/intrinsics/random.c
  980afd31fe2acdb19847ed694cc1b91e  libgfortran/intrinsics/random_init.f90
  6b1232a2364572f1170ef84c6ce57d43  libgfortran/intrinsics/reduce.c
  8dcb1de4a7f8bbbd027cafb7c6a627af  libgfortran/intrinsics/rename.c
*************** c7169b01bb969daf7e30948005f39988  libgfo
*** 120890,120896 ****
  1c54bed7757f4af9f4ad352a00614fd9  libgfortran/io/list_read.c
  bc0fa60eac17837b1c762e97a8c08673  libgfortran/io/lock.c
  d043bdbc42f0d079e46ba78d36d7d784  libgfortran/io/open.c
! fa8c3abd0f354521bcc23aa747c190fe  libgfortran/io/read.c
  bbdb872460edfc4fcf1cd9dc179d1a09  libgfortran/io/size_from_kind.c
  e083c5b62de7b249a0804185110e86ab  libgfortran/io/transfer.c
  805eb28f9ed2d311c364b9576cc0626d  libgfortran/io/transfer128.c
--- 121185,121191 ----
  1c54bed7757f4af9f4ad352a00614fd9  libgfortran/io/list_read.c
  bc0fa60eac17837b1c762e97a8c08673  libgfortran/io/lock.c
  d043bdbc42f0d079e46ba78d36d7d784  libgfortran/io/open.c
! d48a4345efa3ebd21fbcc13f864cb82c  libgfortran/io/read.c
  bbdb872460edfc4fcf1cd9dc179d1a09  libgfortran/io/size_from_kind.c
  e083c5b62de7b249a0804185110e86ab  libgfortran/io/transfer.c
  805eb28f9ed2d311c364b9576cc0626d  libgfortran/io/transfer128.c
*************** ae6c5100027c00b1dee83df8a20d56ac  libgfo
*** 120934,120940 ****
  9b3c805c9825c7f9db7ca20972103ff8  libgfortran/m4/in_pack.m4
  106df9a6dfffc3dd117c54706ff1bb5e  libgfortran/m4/in_unpack.m4
  bcc34dd2812f475c425ce9ed5c0afb2c  libgfortran/m4/iparity.m4
! 4f485e84c613e8aa7191941553032a19  libgfortran/m4/iparm.m4
  44c260e36d1fb1fec70c2deed856623d  libgfortran/m4/matmul.m4
  404f92b6c287e61378cd84f231b65850  libgfortran/m4/matmul_internal.m4
  6786592bda50da3680d84241fc597d70  libgfortran/m4/matmulavx128.m4
--- 121229,121235 ----
  9b3c805c9825c7f9db7ca20972103ff8  libgfortran/m4/in_pack.m4
  106df9a6dfffc3dd117c54706ff1bb5e  libgfortran/m4/in_unpack.m4
  bcc34dd2812f475c425ce9ed5c0afb2c  libgfortran/m4/iparity.m4
! a0c59c07599c968a763da08daacff7fd  libgfortran/m4/iparm.m4
  44c260e36d1fb1fec70c2deed856623d  libgfortran/m4/matmul.m4
  404f92b6c287e61378cd84f231b65850  libgfortran/m4/matmul_internal.m4
  6786592bda50da3680d84241fc597d70  libgfortran/m4/matmulavx128.m4
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 126530,126536 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 1a9fc0571addce470da6fc4a9f610168  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  883cfea6de23904b83d6bd58a729c866  libgomp/Makefile.am
  54c7bc8277669e3bf5f1a3db179ae206  libgomp/Makefile.in
--- 126825,126831 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 9986097e2ed4db79a6082df58b302e6a  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  883cfea6de23904b83d6bd58a729c866  libgomp/Makefile.am
  54c7bc8277669e3bf5f1a3db179ae206  libgomp/Makefile.in
*************** ae0dcb4c08025996b4bf4550cf72832e  libgom
*** 126723,126729 ****
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! 9dc99d143175d2ead27690e788549e94  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
  75cc672a1bf25974c5f4c5e3bc1a74b1  libgomp/testsuite/libgomp.c++/affinity-1.C
--- 127018,127024 ----
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! 06f9ccc43e7dfb9ea326ea15f452a1ec  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
  75cc672a1bf25974c5f4c5e3bc1a74b1  libgomp/testsuite/libgomp.c++/affinity-1.C
*************** df9584266f64e9e94cc353ad659850cb  libgom
*** 127418,127424 ****
  ee4539179e248da5dfa461b6f38b711a  libgomp/testsuite/libgomp.c-target/aarch64/simd-aligned.c
  caca1aa745e9df985dc965e87fc08c02  libgomp/testsuite/libgomp.c-target/aarch64/simd-nontemporal.c
  22339699e5ead02323ff39f1b6fe0db9  libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c
! 8a9f248e8f293171e99f2de7e100db25  libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c
  9827d700d634869b090c7636cc855819  libgomp/testsuite/libgomp.c/address-space-1.c
  35d465afcc91bf0b02e92e10cee649bb  libgomp/testsuite/libgomp.c/affinity-1.c
  fe6e22f8c0d2e289ecbd5ea26c9ed1bc  libgomp/testsuite/libgomp.c/affinity-2.c
--- 127713,127719 ----
  ee4539179e248da5dfa461b6f38b711a  libgomp/testsuite/libgomp.c-target/aarch64/simd-aligned.c
  caca1aa745e9df985dc965e87fc08c02  libgomp/testsuite/libgomp.c-target/aarch64/simd-nontemporal.c
  22339699e5ead02323ff39f1b6fe0db9  libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c
! 3e38202a9a5de0a29a80148a97ba15d8  libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c
  9827d700d634869b090c7636cc855819  libgomp/testsuite/libgomp.c/address-space-1.c
  35d465afcc91bf0b02e92e10cee649bb  libgomp/testsuite/libgomp.c/affinity-1.c
  fe6e22f8c0d2e289ecbd5ea26c9ed1bc  libgomp/testsuite/libgomp.c/affinity-2.c
*************** ae4ee25a98b96a2f6bbcd9bc817b5b90  libgom
*** 127583,127596 ****
  6619bda92e7a29f372b1a0bc19ef2c79  libgomp/testsuite/libgomp.c/icv-2.c
  ab8fb6b2dba448c76952c99dc073b531  libgomp/testsuite/libgomp.c/interop-cublas-full.c
  ee19f42594a2dbadbc455736a8e69944  libgomp/testsuite/libgomp.c/interop-cublas-libonly.c
! 88241d0198849c261f9a84fe2a366085  libgomp/testsuite/libgomp.c/interop-cuda-full.c
! 216da7d0f9f00dbb1f36275f90bfdb73  libgomp/testsuite/libgomp.c/interop-cuda-libonly.c
  ee1bca91c6e853556cd65170329412cb  libgomp/testsuite/libgomp.c/interop-fr-1.c
! 411f456cdae4206f1c6b7bb9c2844cd2  libgomp/testsuite/libgomp.c/interop-hip-amd-full.c
! 707b2b7f4c1a6018a023bb35553751a3  libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c
! 1380229f1169a4b27d98b3ab384698b6  libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c
! 0e1d28aa42aed220fad001225c1a700e  libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c
! fb0d75923f110e73f687dab61a6cd570  libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c
  25c99e27bb2ee18183687ba2fd6a9060  libgomp/testsuite/libgomp.c/interop-hip.h
  95e6215f7e92437a942ec58e5dd545bf  libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c
  4445da243b1fcd63d8ec2a6af1f99e15  libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c
--- 127878,127891 ----
  6619bda92e7a29f372b1a0bc19ef2c79  libgomp/testsuite/libgomp.c/icv-2.c
  ab8fb6b2dba448c76952c99dc073b531  libgomp/testsuite/libgomp.c/interop-cublas-full.c
  ee19f42594a2dbadbc455736a8e69944  libgomp/testsuite/libgomp.c/interop-cublas-libonly.c
! c62e07c17fc715e8074d127b1c0571a5  libgomp/testsuite/libgomp.c/interop-cuda-full.c
! 7206b8cf6705a23f6948b4c9b0c48a82  libgomp/testsuite/libgomp.c/interop-cuda-libonly.c
  ee1bca91c6e853556cd65170329412cb  libgomp/testsuite/libgomp.c/interop-fr-1.c
! 070843f3ae770b12906ee280061629b8  libgomp/testsuite/libgomp.c/interop-hip-amd-full.c
! 0ca95c8bb659450d929a3e0afc99536c  libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c
! 9e5bec1c71f6fe561293ae3c8f778c72  libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c
! 813823249e0addca7d4dc1fe119c127e  libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c
! 9c26fe02cd8d0d7c0f5985037fc37ded  libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c
  25c99e27bb2ee18183687ba2fd6a9060  libgomp/testsuite/libgomp.c/interop-hip.h
  95e6215f7e92437a942ec58e5dd545bf  libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c
  4445da243b1fcd63d8ec2a6af1f99e15  libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c
*************** fb0d75923f110e73f687dab61a6cd570  libgom
*** 127598,127604 ****
  0f1e2ad9f4304e2b19abf50063219cdd  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c
  ee6acb3089ae16656715ede5acd4a769  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c
  73994b391db11a9fa8269d17021fc731  libgomp/testsuite/libgomp.c/interop-hipblas.h
! 6f7c55f00e313172f1997c520a5994f2  libgomp/testsuite/libgomp.c/interop-hsa.c
  60295e2f73526594a93b118333ca7ff3  libgomp/testsuite/libgomp.c/lib-1.c
  af9d852282ae3da623a0727f1df789ab  libgomp/testsuite/libgomp.c/lib-2.c
  954e001a86eca6e39424518360cc7b36  libgomp/testsuite/libgomp.c/linear-1.c
--- 127893,127899 ----
  0f1e2ad9f4304e2b19abf50063219cdd  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c
  ee6acb3089ae16656715ede5acd4a769  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c
  73994b391db11a9fa8269d17021fc731  libgomp/testsuite/libgomp.c/interop-hipblas.h
! b892336be3124a54b2f99643e2295959  libgomp/testsuite/libgomp.c/interop-hsa.c
  60295e2f73526594a93b118333ca7ff3  libgomp/testsuite/libgomp.c/lib-1.c
  af9d852282ae3da623a0727f1df789ab  libgomp/testsuite/libgomp.c/lib-2.c
  954e001a86eca6e39424518360cc7b36  libgomp/testsuite/libgomp.c/linear-1.c
*************** dacc8946cc2bbcc4839a0b9754c0dc62  libgom
*** 128140,128149 ****
  271e2d9d749e1f5890f336e5f24f7826  libgomp/testsuite/libgomp.fortran/imperfect3.f90
  1c26032f958727f57e30b4319a2304c4  libgomp/testsuite/libgomp.fortran/imperfect4.f90
  a38a422e315bd08e01ae56187b2d4580  libgomp/testsuite/libgomp.fortran/inner-1.f90
! b581f5f75d3ef1fa1aaab152940cc90c  libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90
! 6df279350947d2d022757fb33f1520d8  libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90
! ceec1b445569a65bc161936f1c43f6e1  libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90
! ef1d60e586a93c455960a3000e818865  libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90
  e1956151e0a1b58e3b37a0ee0654547f  libgomp/testsuite/libgomp.fortran/interop-hip.h
  90c092c2be0665ce5d2321dde75daca3  libgomp/testsuite/libgomp.fortran/interop-routines-1.F90
  4870363962ab0a448c018370ffd79024  libgomp/testsuite/libgomp.fortran/interop-routines-2.F90
--- 128435,128444 ----
  271e2d9d749e1f5890f336e5f24f7826  libgomp/testsuite/libgomp.fortran/imperfect3.f90
  1c26032f958727f57e30b4319a2304c4  libgomp/testsuite/libgomp.fortran/imperfect4.f90
  a38a422e315bd08e01ae56187b2d4580  libgomp/testsuite/libgomp.fortran/inner-1.f90
! 74bb13042a4b59fe2b61b594cd6ce69c  libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90
! fd7083d48f6704610b027165b5e1a28d  libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90
! c6b6960279848b26c0bd46292fbf4dc9  libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90
! a4c46d78e0663318d6aeee652e093864  libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90
  e1956151e0a1b58e3b37a0ee0654547f  libgomp/testsuite/libgomp.fortran/interop-hip.h
  90c092c2be0665ce5d2321dde75daca3  libgomp/testsuite/libgomp.fortran/interop-routines-1.F90
  4870363962ab0a448c018370ffd79024  libgomp/testsuite/libgomp.fortran/interop-routines-2.F90
*************** fb198f79d07000ba2794e9cc222e90f8  libgom
*** 128171,128177 ****
  e0c7a627e2c061377a19883807aabfe2  libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90
  6b6de91ce089e96b58d531319cf398d4  libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90
  0240fb14a61ab47fba407a3a8493bfc6  libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90
! 6ac483ce7553e0f56e0a85f9bc2dec1e  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
  794f9311ffd6c98b9329dc06aa6a39e3  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
  fe829ea13169aa018e2a5ad40e7581b9  libgomp/testsuite/libgomp.fortran/map-subarray-2.f90
--- 128466,128473 ----
  e0c7a627e2c061377a19883807aabfe2  libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90
  6b6de91ce089e96b58d531319cf398d4  libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90
  0240fb14a61ab47fba407a3a8493bfc6  libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90
! 10190778b4af6170854bedfa75244a91  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90
! 11a2994612dda1ea5d074b912ea7e4aa  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
  794f9311ffd6c98b9329dc06aa6a39e3  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
  fe829ea13169aa018e2a5ad40e7581b9  libgomp/testsuite/libgomp.fortran/map-subarray-2.f90
*************** e52d95644dc6f186070f349a5903ca72  libibe
*** 129664,129670 ****
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  9ee73c41e33c5385829971172a184c87  libiberty/xstrndup.c
  264565e1673eec920dc95fb09d4605ea  libiberty/xvasprintf.c
! 55649c74572877102f496e4c86eeb7f0  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  9615a863768090f60933c0f1de86e7b0  libitm/Makefile.in
  354a4dc018f4a1bb610d11d1743d3cb1  libitm/aatree.cc
--- 129960,129966 ----
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  9ee73c41e33c5385829971172a184c87  libiberty/xstrndup.c
  264565e1673eec920dc95fb09d4605ea  libiberty/xvasprintf.c
! dd1cde83cbe935c303b7310da34fd85a  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  9615a863768090f60933c0f1de86e7b0  libitm/Makefile.in
  354a4dc018f4a1bb610d11d1743d3cb1  libitm/aatree.cc
*************** ed458d8c7ab1ec6b1715cb658a7b794e  libitm
*** 129743,129749 ****
  797cc50d34c62697d9fd84bbc39b5a6b  libitm/testsuite/Makefile.in
  ed1ed157638cd6b95884f216e3414581  libitm/testsuite/config/default.exp
  9ab92f2310c96121666b692e1660d24f  libitm/testsuite/lib/libitm-dg.exp
! 7da1e51d9aaeea1b7a8b4d2b2dce99d9  libitm/testsuite/lib/libitm.exp
  6af7b44a8dbc773c3cec463165e3f600  libitm/testsuite/libitm.c++/c++.exp
  11785412cb94b04ecc293453486ad223  libitm/testsuite/libitm.c++/dropref.C
  d806946f2845368f69a6513f60b085d2  libitm/testsuite/libitm.c++/eh-1.C
--- 130039,130045 ----
  797cc50d34c62697d9fd84bbc39b5a6b  libitm/testsuite/Makefile.in
  ed1ed157638cd6b95884f216e3414581  libitm/testsuite/config/default.exp
  9ab92f2310c96121666b692e1660d24f  libitm/testsuite/lib/libitm-dg.exp
! 7b5554a28cbafcb4a556d48dcc492325  libitm/testsuite/lib/libitm.exp
  6af7b44a8dbc773c3cec463165e3f600  libitm/testsuite/libitm.c++/c++.exp
  11785412cb94b04ecc293453486ad223  libitm/testsuite/libitm.c++/dropref.C
  d806946f2845368f69a6513f60b085d2  libitm/testsuite/libitm.c++/eh-1.C
*************** a50aaef4b803051d8c8de65277787205  libobj
*** 129830,129836 ****
  1529c9317f23aa02b19c43cda7528d66  libobjc/selector.c
  e48bb3c47cdcb1bfade3ef0007f5a149  libobjc/sendmsg.c
  06be35842165837797461a0db264aeea  libobjc/thr.c
! 480559496c44e1e19282894c91a389fc  libphobos/ChangeLog
  e188e263b43a1566b83ecb298034d491  libphobos/Makefile.am
  156e9416d3f91f179bb662effed69086  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
--- 130126,130132 ----
  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
*************** fbb3c30724cb241010afacb0505c53e7  libpho
*** 129839,129845 ****
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
  0fbc6aac226228d33e1f5810b09eee59  libphobos/configure
  122f630ac036808d09fb88947d310aff  libphobos/configure.ac
! e67224389d81028699fa5631b7a00893  libphobos/configure.tgt
  63ec818a02a0e071420a85b12fbfd563  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
  ddebe4c1ba53d5a98f1cbfe28019c009  libphobos/libdruntime/MERGE
--- 130135,130141 ----
  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
*************** c1a103b661be58e2c1a62e8aab13650e  libpho
*** 130614,130620 ****
  b81634158692fb497ef681c9278150b2  libphobos/testsuite/Makefile.am
  97770c81eecf58810bba1406e17155af  libphobos/testsuite/Makefile.in
  afab865e426381d138e76896579cb353  libphobos/testsuite/config/default.exp
! b567031c21b7b8f9e8fedf7281a7f5f4  libphobos/testsuite/lib/libphobos-dg.exp
  1999f40e93f2b276e103ac8dfdac5a06  libphobos/testsuite/lib/libphobos.exp
  01be04287e1609c3b4b0921de1e8849c  libphobos/testsuite/libphobos.aa/aa.exp
  bdf16dafaa6a389d60b373bd2cb66abd  libphobos/testsuite/libphobos.aa/test_aa.d
--- 130910,130916 ----
  b81634158692fb497ef681c9278150b2  libphobos/testsuite/Makefile.am
  97770c81eecf58810bba1406e17155af  libphobos/testsuite/Makefile.in
  afab865e426381d138e76896579cb353  libphobos/testsuite/config/default.exp
! 74550539b96033d70dbe2edccbe033ad  libphobos/testsuite/lib/libphobos-dg.exp
  1999f40e93f2b276e103ac8dfdac5a06  libphobos/testsuite/lib/libphobos.exp
  01be04287e1609c3b4b0921de1e8849c  libphobos/testsuite/libphobos.aa/aa.exp
  bdf16dafaa6a389d60b373bd2cb66abd  libphobos/testsuite/libphobos.aa/test_aa.d
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 131490,131496 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 4208903edd76c5a1d03607dc2ab7a491  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 131786,131792 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 82bf581b4fe521bd815d5e3129409f59  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a94321c8d0dbbc71741ebf0f1cc9828c  libstd
*** 131521,131529 ****
  b569b721263ae74c6a8e285903fb9906  libstdc++-v3/Makefile.am
  5ae0a394d413d225772c3b38a114cce2  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! f801ad9baad07e266be912cfec758b44  libstdc++-v3/acinclude.m4
  13f29ef95664bfe876c83f7743ca504d  libstdc++-v3/aclocal.m4
! 3db093be66a490a9df3a791f64d34dd4  libstdc++-v3/config.h.in
  9e25b4e524e0d639f272a9e96bab0ce3  libstdc++-v3/config/abi/compatibility.h
  0be6fea010f86e442ad030f82858fb73  libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
  730569c0ef38f6e6322b3c4ac65253ce  libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
--- 131817,131825 ----
  b569b721263ae74c6a8e285903fb9906  libstdc++-v3/Makefile.am
  5ae0a394d413d225772c3b38a114cce2  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 8666d07ef9b8e6c6bfdcb59ce3e116ee  libstdc++-v3/acinclude.m4
  13f29ef95664bfe876c83f7743ca504d  libstdc++-v3/aclocal.m4
! be75bd5b7d919ff69f604dfbb6bc65e9  libstdc++-v3/config.h.in
  9e25b4e524e0d639f272a9e96bab0ce3  libstdc++-v3/config/abi/compatibility.h
  0be6fea010f86e442ad030f82858fb73  libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
  730569c0ef38f6e6322b3c4ac65253ce  libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
*************** ed199f6700a016816d625b286bf25ead  libstd
*** 131715,131723 ****
  8913cf14e458f9cfae745a0d939c97e4  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  e29a526ec89ed09bf39b0aa4fd4c5d79  libstdc++-v3/config/os/vxworks/ctype_inline.h
  788b66dfe66c25c24ff60bf253c9c7ff  libstdc++-v3/config/os/vxworks/os_defines.h
! 478bb531ef9cb3ab0f673e64b8b8aece  libstdc++-v3/configure
  315146bda822dcbf6f5677aac62442a6  libstdc++-v3/configure.ac
! 546d8799acc0db2a2a28b658d5665dc3  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
  55ecb88d091a7c97abd35f475cf97c2b  libstdc++-v3/doc/Makefile.am
  d66f986053e4755f0517ff5cfe90b2b5  libstdc++-v3/doc/Makefile.in
--- 132011,132019 ----
  8913cf14e458f9cfae745a0d939c97e4  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  e29a526ec89ed09bf39b0aa4fd4c5d79  libstdc++-v3/config/os/vxworks/ctype_inline.h
  788b66dfe66c25c24ff60bf253c9c7ff  libstdc++-v3/config/os/vxworks/os_defines.h
! 73af792365723fa4e3eb3b70a332f8c7  libstdc++-v3/configure
  315146bda822dcbf6f5677aac62442a6  libstdc++-v3/configure.ac
! ac3fcbca7e705b180f7e9e96ab97e2ec  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
  55ecb88d091a7c97abd35f475cf97c2b  libstdc++-v3/doc/Makefile.am
  d66f986053e4755f0517ff5cfe90b2b5  libstdc++-v3/doc/Makefile.in
*************** d66f986053e4755f0517ff5cfe90b2b5  libstd
*** 131726,131732 ****
  520db39aef0e2a59418132af88b897ed  libstdc++-v3/doc/doxygen/mainpage.html
  92f5430d44f06426f0d19bffc186ad05  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! 093d173a914422cd19c7708bc2d0e736  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
--- 132022,132028 ----
  520db39aef0e2a59418132af88b897ed  libstdc++-v3/doc/doxygen/mainpage.html
  92f5430d44f06426f0d19bffc186ad05  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! 575fc7a15bb0116a3eb836e702ee9792  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
*************** e2e099be3dd6a4b7a940a7232635ee2c  libstd
*** 132151,132158 ****
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! c78681db088e6c2a324c1eeb9abb8eda  libstdc++-v3/include/Makefile.am
! b08a39f51d72ac622e2e5e257ae3897b  libstdc++-v3/include/Makefile.in
  9909a8468983e231e92c9e286c9765fb  libstdc++-v3/include/backward/auto_ptr.h
  83254dbbadebf6a7aeb58f3cdbf117e9  libstdc++-v3/include/backward/backward_warning.h
  38985095b8ea422bf8bfa31ec65d803c  libstdc++-v3/include/backward/binders.h
--- 132447,132454 ----
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! 4a93e29891af312e41b8ea1955a7f0bb  libstdc++-v3/include/Makefile.am
! b5f81e9376eb03ca88250508f79a7519  libstdc++-v3/include/Makefile.in
  9909a8468983e231e92c9e286c9765fb  libstdc++-v3/include/backward/auto_ptr.h
  83254dbbadebf6a7aeb58f3cdbf117e9  libstdc++-v3/include/backward/backward_warning.h
  38985095b8ea422bf8bfa31ec65d803c  libstdc++-v3/include/backward/binders.h
*************** a155d2afa910d24be0955f42c4585228  libstd
*** 132180,132186 ****
  5384dfbb9eb9731df3aca40e40d55350  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  2ac54ed5e0fab6bc6f771ecb2e9a9757  libstdc++-v3/include/bits/chrono.h
! f174e14bb7b97d31dfd02ff21c38f6df  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
--- 132476,132482 ----
  5384dfbb9eb9731df3aca40e40d55350  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  2ac54ed5e0fab6bc6f771ecb2e9a9757  libstdc++-v3/include/bits/chrono.h
! 7fa0d6e1eeff4588d8b8cecee70e9fff  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
*** 132234,132240 ****
  8a8a359cdcce476304e0c7a41f405f02  libstdc++-v3/include/bits/parse_numbers.h
  5c23229552297aa0937e1eac544c60e6  libstdc++-v3/include/bits/postypes.h
  5f3f6621fe24c343d0311ca670a32765  libstdc++-v3/include/bits/predefined_ops.h
! a1eafc81a005edb89695920d9a34f970  libstdc++-v3/include/bits/ptr_traits.h
  083ee9dbf4a8803183e5f6a5d02a1c4f  libstdc++-v3/include/bits/quoted_string.h
  053e1de38aef43bbaf1a9a4af1e3ad2f  libstdc++-v3/include/bits/random.h
  924981b1c29c7c7b010418607af71d7b  libstdc++-v3/include/bits/random.tcc
--- 132530,132536 ----
  8a8a359cdcce476304e0c7a41f405f02  libstdc++-v3/include/bits/parse_numbers.h
  5c23229552297aa0937e1eac544c60e6  libstdc++-v3/include/bits/postypes.h
  5f3f6621fe24c343d0311ca670a32765  libstdc++-v3/include/bits/predefined_ops.h
! 26211880ae17ac4d714473ad1bc786e4  libstdc++-v3/include/bits/ptr_traits.h
  083ee9dbf4a8803183e5f6a5d02a1c4f  libstdc++-v3/include/bits/quoted_string.h
  053e1de38aef43bbaf1a9a4af1e3ad2f  libstdc++-v3/include/bits/random.h
  924981b1c29c7c7b010418607af71d7b  libstdc++-v3/include/bits/random.tcc
*************** ba1901789908a4eca42f3ec20afebc3a  libstd
*** 132278,132284 ****
  bf0e42750b9f0a11336d82706c33fedb  libstdc++-v3/include/bits/stl_deque.h
  8bd7e182b77be76921e6f1bead44217f  libstdc++-v3/include/bits/stl_function.h
  c6b4511debfbf2f7971dbae97dbcc998  libstdc++-v3/include/bits/stl_heap.h
! 1409bd1de1d3f09c84df2c825bf7e414  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
--- 132574,132580 ----
  bf0e42750b9f0a11336d82706c33fedb  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
*************** a229b5c8ad2904a3b3173239225596c4  libstd
*** 132318,132325 ****
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  7e44d906c5281d878723bac525e69466  libstdc++-v3/include/bits/vector.tcc
! 30c5a7804529db5e1faa292970a993b9  libstdc++-v3/include/bits/version.def
! 17a710d761b11b2e99b69273b7e0e6a2  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
--- 132614,132621 ----
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  7e44d906c5281d878723bac525e69466  libstdc++-v3/include/bits/vector.tcc
! 4270c426672a33e62e3cc2933a1c1cc2  libstdc++-v3/include/bits/version.def
! dc3ea988ce87b3ecee37dfd59b0cbf2d  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
*************** a46e56be8a5c7864bcb2f77a72d54330  libstd
*** 132416,132422 ****
  68805c660b948571bc792c03bff11310  libstdc++-v3/include/debug/array
  194fe21cb1d17e540e307f40839dd3a0  libstdc++-v3/include/debug/assertions.h
  dd865626b86d03c572a7b3ba8d459208  libstdc++-v3/include/debug/bitset
! 80ffd9396e36ed0eb5124a5fe3264bd2  libstdc++-v3/include/debug/debug.h
  6a32c920e39a02b78bb914632c4cc645  libstdc++-v3/include/debug/deque
  8b11b77754a41dfc2a3b22f49f17a211  libstdc++-v3/include/debug/formatter.h
  da0db59aefe20f491dc59d3f49cf1c6c  libstdc++-v3/include/debug/forward_list
--- 132712,132718 ----
  68805c660b948571bc792c03bff11310  libstdc++-v3/include/debug/array
  194fe21cb1d17e540e307f40839dd3a0  libstdc++-v3/include/debug/assertions.h
  dd865626b86d03c572a7b3ba8d459208  libstdc++-v3/include/debug/bitset
! d04ab77d57ea4da4e9368ea91a58b0b9  libstdc++-v3/include/debug/debug.h
  6a32c920e39a02b78bb914632c4cc645  libstdc++-v3/include/debug/deque
  8b11b77754a41dfc2a3b22f49f17a211  libstdc++-v3/include/debug/formatter.h
  da0db59aefe20f491dc59d3f49cf1c6c  libstdc++-v3/include/debug/forward_list
*************** faf9f2ab717f81b1e1f120be7de31c23  libstd
*** 132514,132520 ****
  7da2b16ba42c2a096eafa6d90cd4935a  libstdc++-v3/include/ext/algorithm
  1e85d61b1ab664fe9e83e4d05536cf0c  libstdc++-v3/include/ext/aligned_buffer.h
  b538cf34d296f3161c57558eea3bca8b  libstdc++-v3/include/ext/alloc_traits.h
! 1212e26f4d06ed389ac5490747e2f1ae  libstdc++-v3/include/ext/atomicity.h
  cd7c7fb3fb3d1f59882fb99a31eee718  libstdc++-v3/include/ext/bitmap_allocator.h
  cc0f2a5daeafb6e08b62720e44d9bd80  libstdc++-v3/include/ext/cast.h
  9543d5277e2a8ea51632d885f21ed4fa  libstdc++-v3/include/ext/cmath
--- 132810,132816 ----
  7da2b16ba42c2a096eafa6d90cd4935a  libstdc++-v3/include/ext/algorithm
  1e85d61b1ab664fe9e83e4d05536cf0c  libstdc++-v3/include/ext/aligned_buffer.h
  b538cf34d296f3161c57558eea3bca8b  libstdc++-v3/include/ext/alloc_traits.h
! 854b4d6287d544695fc53e4ef926b96b  libstdc++-v3/include/ext/atomicity.h
  cd7c7fb3fb3d1f59882fb99a31eee718  libstdc++-v3/include/ext/bitmap_allocator.h
  cc0f2a5daeafb6e08b62720e44d9bd80  libstdc++-v3/include/ext/cast.h
  9543d5277e2a8ea51632d885f21ed4fa  libstdc++-v3/include/ext/cmath
*************** eb20df8190cb844a12f9fd68d043bcf0  libstd
*** 132839,132845 ****
  7997eb362a00f19f0f8e29fe72718fba  libstdc++-v3/include/parallel/unique_copy.h
  322d276913feb4b729019573db0593af  libstdc++-v3/include/parallel/workstealing.h
  37ac2dd1c7910a98bcbb9619d27add88  libstdc++-v3/include/precompiled/extc++.h
! f0e7cc468f73a8275305a72b5912aab4  libstdc++-v3/include/precompiled/stdc++.h
  a62eb60403f5499c2d4a096e6a68b92b  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  6aa52d6b70bfb53073697375741dff45  libstdc++-v3/include/pstl/algorithm_fwd.h
--- 133135,133141 ----
  7997eb362a00f19f0f8e29fe72718fba  libstdc++-v3/include/parallel/unique_copy.h
  322d276913feb4b729019573db0593af  libstdc++-v3/include/parallel/workstealing.h
  37ac2dd1c7910a98bcbb9619d27add88  libstdc++-v3/include/precompiled/extc++.h
! d0f4471e1f57d82282a8108ba7cb716f  libstdc++-v3/include/precompiled/stdc++.h
  a62eb60403f5499c2d4a096e6a68b92b  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  6aa52d6b70bfb53073697375741dff45  libstdc++-v3/include/pstl/algorithm_fwd.h
*************** ae347741e840ff43bfc0c1800ecdbf63  libstd
*** 132852,132861 ****
  0b0a3983fbed012140824669c804e50a  libstdc++-v3/include/pstl/glue_memory_defs.h
  7d755330869711b38d6e8dd35b486645  libstdc++-v3/include/pstl/glue_memory_impl.h
  9470d07762f86ba4655154491929a328  libstdc++-v3/include/pstl/glue_numeric_defs.h
! 652ee4efa524646a5f52e79ed472110b  libstdc++-v3/include/pstl/glue_numeric_impl.h
  f9819c3fbab884d0ff4d0150023c3826  libstdc++-v3/include/pstl/memory_impl.h
  46b7494faaf72186343f13f46db3cac4  libstdc++-v3/include/pstl/numeric_fwd.h
! 132bbb9d90975f7f11e2ba4b77bc3bbf  libstdc++-v3/include/pstl/numeric_impl.h
  531b6552c2b0ded549ed9bc9b03bebf4  libstdc++-v3/include/pstl/parallel_backend.h
  c6ea5607259b8e63bb887db39136b942  libstdc++-v3/include/pstl/parallel_backend_serial.h
  eb7da829c52c944d7125a8a18352a312  libstdc++-v3/include/pstl/parallel_backend_tbb.h
--- 133148,133157 ----
  0b0a3983fbed012140824669c804e50a  libstdc++-v3/include/pstl/glue_memory_defs.h
  7d755330869711b38d6e8dd35b486645  libstdc++-v3/include/pstl/glue_memory_impl.h
  9470d07762f86ba4655154491929a328  libstdc++-v3/include/pstl/glue_numeric_defs.h
! 721eb8a76c61c8d807bffbca4dc5edc7  libstdc++-v3/include/pstl/glue_numeric_impl.h
  f9819c3fbab884d0ff4d0150023c3826  libstdc++-v3/include/pstl/memory_impl.h
  46b7494faaf72186343f13f46db3cac4  libstdc++-v3/include/pstl/numeric_fwd.h
! eada13df7ada6f474684700aa57c2da8  libstdc++-v3/include/pstl/numeric_impl.h
  531b6552c2b0ded549ed9bc9b03bebf4  libstdc++-v3/include/pstl/parallel_backend.h
  c6ea5607259b8e63bb887db39136b942  libstdc++-v3/include/pstl/parallel_backend_serial.h
  eb7da829c52c944d7125a8a18352a312  libstdc++-v3/include/pstl/parallel_backend_tbb.h
*************** f6c65bdf51be390263eb6c028a8aa327  libstd
*** 132885,132891 ****
  c2e511ae49957a9f02446e544d201582  libstdc++-v3/include/std/filesystem
  f178b6bdcfd6bb2ca46e3cdf19989aaf  libstdc++-v3/include/std/flat_map
  8a5fa0a4bb554b2db8c2fed26a6993ca  libstdc++-v3/include/std/flat_set
! a0bd6adfc9b1f18348fb1ed61d8357a3  libstdc++-v3/include/std/format
  fa4316749922813b44f2ee282452813b  libstdc++-v3/include/std/forward_list
  e790ae6877466aa86b47f36d201e8563  libstdc++-v3/include/std/fstream
  5b0f9576e4006baf8a1aba30625aa30c  libstdc++-v3/include/std/functional
--- 133181,133187 ----
  c2e511ae49957a9f02446e544d201582  libstdc++-v3/include/std/filesystem
  f178b6bdcfd6bb2ca46e3cdf19989aaf  libstdc++-v3/include/std/flat_map
  8a5fa0a4bb554b2db8c2fed26a6993ca  libstdc++-v3/include/std/flat_set
! 9e7ceb0d9ebae7712e5c3cf8932860fd  libstdc++-v3/include/std/format
  fa4316749922813b44f2ee282452813b  libstdc++-v3/include/std/forward_list
  e790ae6877466aa86b47f36d201e8563  libstdc++-v3/include/std/fstream
  5b0f9576e4006baf8a1aba30625aa30c  libstdc++-v3/include/std/functional
*************** ed6663b9ff729b09c2bacefa3568d1fc  libstd
*** 132902,132912 ****
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
  ba52fc2e0904a31a08183de15bd8c424  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  0c1cb418026be858b68ab6539158db68  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
! dc13616d50b61cc61eb87d25bacd6a19  libstdc++-v3/include/std/numeric
  79b194dcc53ff3f04fcf800d0fc26cfa  libstdc++-v3/include/std/optional
  5d2c4f92cc15a2b4491886b629aabc08  libstdc++-v3/include/std/ostream
  8883599080e145869428c2dc9e59e2d3  libstdc++-v3/include/std/print
--- 133198,133209 ----
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
+ e304ffdb5c06ee3728aaa6fa1365beda  libstdc++-v3/include/std/mdspan
  ba52fc2e0904a31a08183de15bd8c424  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  0c1cb418026be858b68ab6539158db68  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
! b944796362aa39fc1cba3747d2247464  libstdc++-v3/include/std/numeric
  79b194dcc53ff3f04fcf800d0fc26cfa  libstdc++-v3/include/std/optional
  5d2c4f92cc15a2b4491886b629aabc08  libstdc++-v3/include/std/ostream
  8883599080e145869428c2dc9e59e2d3  libstdc++-v3/include/std/print
*************** c9dcdd9b0b5c806e787dc702505f57e1  libstd
*** 133213,133219 ****
  ac9644e2d8390587379964f6b7e51ef0  libstdc++-v3/src/c++17/floating_to_chars.cc
  7c668fe3f79c2610268b1bc631741ad5  libstdc++-v3/src/c++17/fs_dir.cc
  38394abc0e937c8a15f74a60356f174a  libstdc++-v3/src/c++17/fs_ops.cc
! f5a89254ae1d1bf53829159bd06faad2  libstdc++-v3/src/c++17/fs_path.cc
  31b8948691651bc14d435c8e7b6fa79b  libstdc++-v3/src/c++17/memory_resource.cc
  4f2f44032e04f77de92166a02f76089d  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
--- 133510,133516 ----
  ac9644e2d8390587379964f6b7e51ef0  libstdc++-v3/src/c++17/floating_to_chars.cc
  7c668fe3f79c2610268b1bc631741ad5  libstdc++-v3/src/c++17/fs_dir.cc
  38394abc0e937c8a15f74a60356f174a  libstdc++-v3/src/c++17/fs_ops.cc
! 94b95a511b91830b1c3dbfdf235ec988  libstdc++-v3/src/c++17/fs_path.cc
  31b8948691651bc14d435c8e7b6fa79b  libstdc++-v3/src/c++17/memory_resource.cc
  4f2f44032e04f77de92166a02f76089d  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
*************** b01c0cfbca4e753f78f74ab41ce26267  libstd
*** 133241,133250 ****
  3665d657cc35c7afb8b5cc7bae0ef058  libstdc++-v3/src/c++23/Makefile.am
  d85f3a53465585d54b96880e79456c79  libstdc++-v3/src/c++23/Makefile.in
  3c95970ad4fd23117b63a99dd3241ebe  libstdc++-v3/src/c++23/libstdc++.modules.json.in
! 2f142e6a788b76b05091ff09d99ae47c  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
! 0ccb6a49e13d246e9bac9d819a862159  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
--- 133538,133547 ----
  3665d657cc35c7afb8b5cc7bae0ef058  libstdc++-v3/src/c++23/Makefile.am
  d85f3a53465585d54b96880e79456c79  libstdc++-v3/src/c++23/Makefile.in
  3c95970ad4fd23117b63a99dd3241ebe  libstdc++-v3/src/c++23/libstdc++.modules.json.in
! 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
! 5323b40ee000ff13cbdaa0cae5c64c8b  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
*************** cc42abd3f12e4e2d740c196077e9dfbd  libstd
*** 136761,136766 ****
--- 137058,137069 ----
  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
+ c77c12d9a752d73ac0446480be0cdf3e  libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
+ 58d322becec5c5e65c19f17834e2a082  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
+ d4de13f0203d7d66539b205b64e6fdf5  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
+ 74773d6a3d965e479de89f3fe5d7058d  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
+ 7dddbd46b2322b83e499829b9330469c  libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
+ 7196a8d4e5daa826af8ebfb07fa7ed3e  libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
  351e436ffeeb8e47804c6992b75a81cb  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
  5bf01016c0929346c0086fb8a71129b5  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
  e49224c2f36823b4ec1be684dd0c8090  libstdc++-v3/testsuite/23_containers/multimap/48101-2_neg.cc
*************** ec4a55fe42b566507f392a398ef5adc5  libstd
*** 138970,138977 ****
  b46bab0d782bcf241352fd3063b9c3ef  libstdc++-v3/testsuite/26_numerics/partial_sum/lwg2055.cc
  6da589649446a5910010c573a75cbbdb  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/2.cc
  e4acb888bbf39f45fff83f251f7420fd  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/pod.cc
! e4a16c3ad7049351e7aa5c01c10241f5  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc
  c77f5444168b58d256585ece5f094189  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/adjacent_difference.cc
  248df0829f90cb1d8e89a85fce08aa0a  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/reduce.cc
  f2befccb7997036bb753da67e9e718b5  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/scan.cc
  2f68d0ffd63ef33412e1a1bd5399db50  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/transform_reduce.cc
--- 139273,139281 ----
  b46bab0d782bcf241352fd3063b9c3ef  libstdc++-v3/testsuite/26_numerics/partial_sum/lwg2055.cc
  6da589649446a5910010c573a75cbbdb  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/2.cc
  e4acb888bbf39f45fff83f251f7420fd  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/pod.cc
! 034bcd1acf32b6a92e4cb86398c96eec  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc
  c77f5444168b58d256585ece5f094189  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/adjacent_difference.cc
+ 07eecdd6435db1d054345dc88e7a5951  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/move_only.cc
  248df0829f90cb1d8e89a85fce08aa0a  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/reduce.cc
  f2befccb7997036bb753da67e9e718b5  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/scan.cc
  2f68d0ffd63ef33412e1a1bd5399db50  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/transform_reduce.cc
*************** d8b5c7bbcaa9de60c969091d64c33068  libstd
*** 140214,140219 ****
--- 140518,140524 ----
  8827bc9f09af2eced5f1d143bac148f2  libstdc++-v3/testsuite/27_io/filesystem/path/compare/lwg2936.cc
  d406f9f786619de550b6d317827282fe  libstdc++-v3/testsuite/27_io/filesystem/path/compare/path.cc
  09db1d962da8c300144c6fe67a87123b  libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc
+ 9b500ed50c013cdbd0290f1d06786f83  libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc
  f9564ca33867f98acac58615ac2496ea  libstdc++-v3/testsuite/27_io/filesystem/path/concat/92853.cc
  a11e1676ce109cebd57b9180939646b0  libstdc++-v3/testsuite/27_io/filesystem/path/concat/94063.cc
  ac83ba1d2034f5ffe1e0fdb36e996b29  libstdc++-v3/testsuite/27_io/filesystem/path/concat/path.cc
*************** ad4d0e37f9c3cd2fddce7c9f9008c951  libstd
*** 141364,141369 ****
--- 141669,141675 ----
  ad770979eea82aaceea1cc0c911a2a0a  libstdc++-v3/testsuite/experimental/filesystem/path/compare/compare.cc
  405c2389ab893cf75376cdcfadf3f39e  libstdc++-v3/testsuite/experimental/filesystem/path/compare/path.cc
  1b1233a0d5a89bc6333811d22af3027f  libstdc++-v3/testsuite/experimental/filesystem/path/compare/strings.cc
+ 83f8a63ee6afbdafe75f08d3ab59ded7  libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc
  c81179c8345b2c7cea96af7f701d9a7a  libstdc++-v3/testsuite/experimental/filesystem/path/concat/path.cc
  d007e99ea64e98101aa9ed705d31d597  libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
  c06b01e19066f0d4ffa4faa5202f4e3e  libstdc++-v3/testsuite/experimental/filesystem/path/construct/100630.cc
*************** a87e1152f6bc2804b93ce070a51eeb54  libstd
*** 142505,142510 ****
--- 142811,142817 ----
  9cd4d6791c125e40939cae77277f928d  libstdc++-v3/testsuite/std/time/format/pr117085.cc
  419cdd8872b10325a937888fac85a489  libstdc++-v3/testsuite/std/time/format/pr117214.cc
  107c8c7bd6daa477dad84b5cfee3eacf  libstdc++-v3/testsuite/std/time/format/pr119517.cc
+ 7151cef2bf017dd6ee0e0ee9830b8909  libstdc++-v3/testsuite/std/time/format/pr120114.cc
  2be47743c9d490923037b020cfc220b7  libstdc++-v3/testsuite/std/time/freestanding.cc
  e1b4a0af956607fcdfe6d75e391ae49c  libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
  4ba93d13314c788e419728411ae7229d  libstdc++-v3/testsuite/std/time/hh_mm_ss/109772.cc
*************** a44ae6829c2d6cbdbd08359d948c3328  libstd
*** 143299,143305 ****
  8b5ea64e3eece45f10f299183d0e13bd  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  39cc83ca69ddbbe398dd79a2ba6b5499  libtool.m4
! 85ca8faa35c361fa9df0796ffd91be0f  libvtv/ChangeLog
  2d74ef98580bcc9fd2c7902f0022be3a  libvtv/Makefile.am
  b1170aae9472f26fdc8326737dc22aba  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
--- 143606,143612 ----
  8b5ea64e3eece45f10f299183d0e13bd  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  39cc83ca69ddbbe398dd79a2ba6b5499  libtool.m4
! 7d21efee86ad257c87cd43a3555c9c11  libvtv/ChangeLog
  2d74ef98580bcc9fd2c7902f0022be3a  libvtv/Makefile.am
  b1170aae9472f26fdc8326737dc22aba  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
*************** aef48e6e222ecdfc5d416dc52541151f  libvtv
*** 143312,143318 ****
  4835ec70e1fbcd9acd3c280c0060afa4  libvtv/testsuite/Makefile.am
  fda4739e0005be93900b671246d786ff  libvtv/testsuite/Makefile.in
  bda652a1aa34b11f3f9cd940b1b0c629  libvtv/testsuite/config/default.exp
! f2f173b97a24edb63425420b6dafac67  libvtv/testsuite/lib/libvtv-dg.exp
  23cdea9b6b348caec27ef4f42a08de8f  libvtv/testsuite/lib/libvtv.exp
  dc26824f08dd227e0cba7e7ebc8f4d3a  libvtv/testsuite/libvtv.cc/bb_tests.cc
  9d9288724a9873c407e84c96ef43f56a  libvtv/testsuite/libvtv.cc/const_vtable.cc
--- 143619,143625 ----
  4835ec70e1fbcd9acd3c280c0060afa4  libvtv/testsuite/Makefile.am
  fda4739e0005be93900b671246d786ff  libvtv/testsuite/Makefile.in
  bda652a1aa34b11f3f9cd940b1b0c629  libvtv/testsuite/config/default.exp
! 44c5c94dc23170fc0c737070a2ecb341  libvtv/testsuite/lib/libvtv-dg.exp
  23cdea9b6b348caec27ef4f42a08de8f  libvtv/testsuite/lib/libvtv.exp
  dc26824f08dd227e0cba7e7ebc8f4d3a  libvtv/testsuite/libvtv.cc/bb_tests.cc
  9d9288724a9873c407e84c96ef43f56a  libvtv/testsuite/libvtv.cc/const_vtable.cc
diff -Nrcpad gcc-16-20250504/contrib/ChangeLog gcc-16-20250511/contrib/ChangeLog
*** gcc-16-20250504/contrib/ChangeLog	Sun May  4 22:32:13 2025
--- gcc-16-20250511/contrib/ChangeLog	Sun May 11 22:32:07 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-05-09  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* check_GNU_style_lib.py: Remove literal prefix.
+ 
  2025-05-01  Gerald Pfeifer  <gerald@pfeifer.com>
  
  	* config-list.mk: Update FreeBSD targets to version 13.
diff -Nrcpad gcc-16-20250504/contrib/check_GNU_style_lib.py gcc-16-20250511/contrib/check_GNU_style_lib.py
*** gcc-16-20250504/contrib/check_GNU_style_lib.py	Sun May  4 22:32:13 2025
--- gcc-16-20250511/contrib/check_GNU_style_lib.py	Sun May 11 22:32:07 2025
*************** def check_GNU_style_file(file, format):
*** 279,285 ****
      patch = PatchSet(file)
  
      for pfile in patch.added_files + patch.modified_files:
!         t = pfile.target_file.lstrip('b/')
          # Skip testsuite files
          if 'testsuite' in t or t.endswith('.py'):
              continue
--- 279,287 ----
      patch = PatchSet(file)
  
      for pfile in patch.added_files + patch.modified_files:
!         t = pfile.target_file
!         if t.startswith('b/'):
!             t = t[2:]
          # Skip testsuite files
          if 'testsuite' in t or t.endswith('.py'):
              continue
diff -Nrcpad gcc-16-20250504/gcc/ChangeLog gcc-16-20250511/gcc/ChangeLog
*** gcc-16-20250504/gcc/ChangeLog	Sun May  4 22:32:13 2025
--- gcc-16-20250511/gcc/ChangeLog	Sun May 11 22:32:07 2025
***************
*** 1,3 ****
--- 1,1016 ----
+ 2025-05-10  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/92080
+ 	PR target/117839
+ 	* config/i386/i386-features.cc (replace_vector_const): Change
+ 	dest to src.
+ 
+ 2025-05-10  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* config/i386/i386-features.cc
+ 	(general_scalar_chain::vector_const_cost): Add BB parameter; handle
+ 	size costs; use COSTS_N_INSNS to compute move costs.
+ 	(general_scalar_chain::compute_convert_gain): Use optimize_bb_for_size
+ 	instead of optimize_insn_for size; use COSTS_N_INSNS to compute move costs;
+ 	update calls of general_scalar_chain::vector_const_cost; use
+ 	ix86_cost->integer_to_sse.
+ 	(timode_immed_const_gain): Add bb parameter; use
+ 	optimize_bb_for_size_p.
+ 	(timode_scalar_chain::compute_convert_gain): Use optimize_bb_for_size_p.
+ 	* config/i386/i386-features.h (class general_scalar_chain): Update
+ 	prototype of vector_const_cost.
+ 	* config/i386/i386.h (struct processor_costs): Add integer_to_sse.
+ 	* config/i386/x86-tune-costs.h (struct processor_costs): Copy
+ 	sse_to_integer to integer_to_sse everywhere.
+ 
+ 2025-05-10  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	PR tree-optimization/120080
+ 	* tree-switch-conversion.cc (bit_test_cluster::find_bit_tests):
+ 	Replace assert with return.
+ 
+ 2025-05-10  Shreya Munnangi  <smunnangi1@ventanamicro.com>
+ 
+ 	* config/riscv/iterators.md (OPTAB): New iterator.
+ 	* config/riscv/predicates.md (arith_or_zbs_operand): Remove.
+ 	(reg_or_const_int_operand): New predicate.
+ 	* config/riscv/riscv-protos.h (synthesize_ior_xor): Prototype.
+ 	* config/riscv/riscv.cc (synthesize_ior_xor): New function.
+ 	* config/riscv/riscv.md (ior/xor expander): Use synthesize_ior_xor.
+ 
+ 2025-05-10  LIU Hao  <lh_mouse@126.com>
+ 
+ 	PR target/111107
+ 	* config/i386/cygming.h (PREFERRED_STACK_BOUNDARY_DEFAULT): Override
+ 	definition from i386.h.
+ 	(STACK_REALIGN_DEFAULT): Undefine, as it no longer has an effect.
+ 	* config/i386/i386.cc (ix86_update_stack_boundary): Force minimum
+ 	128-bit alignment if `force_align_arg_pointer`.
+ 
+ 2025-05-10  Anton Blanchard  <antonb@tenstorrent.com>
+ 
+ 	* config/riscv/bitmanip.md (crc_rev<ANYI1:mode><ANYI:mode>4): Check
+ 	TARGET_ZVBC.
+ 	* config/riscv/riscv.cc (expand_crc_using_clmul): Emit code using
+ 	vclmul if TARGET_ZVBC.
+ 
+ 2025-05-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* vr-values.cc (simplify_using_ranges::simplify) <BIT_AND_EXPR>:
+ 	Do not call simplify_bit_ops_using_ranges for boolean types whose
+ 	precision is not 1.
+ 
+ 2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/114166
+ 	* tree-vect-stmts.cc (vectorizable_operation): Lower also
+ 	bitwise operations on word-mode vectors.
+ 
+ 2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.cc (vectorizable_operation): Remve non-SLP
+ 	path.
+ 
+ 2025-05-09  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* gimple.h (gimple_cond_true_canonical_p): New function.
+ 	(gimple_cond_false_canonical_p): New function.
+ 	* gimple-fold.cc (replace_stmt_with_simplification): Return
+ 	false if replacing the operands of GIMPLE_COND with an INTEGER_CST
+ 	and already in canonical form.
+ 
+ 2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/120182
+ 	* dse.cc (canon_address): Constant addresses have no
+ 	separate store group.
+ 
+ 2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119960
+ 	* tree-vect-slp.cc (vect_slp_can_convert_to_external):
+ 	Handle cases where defs from multiple BBs are ordered
+ 	by their dominance relation.
+ 
+ 2025-05-09  Jørgen Kvalsvik  <j@lambda.is>
+ 
+ 	PR gcov-profile/120086
+ 	* gcov.cc (print_prime_path_lines): Use unsigned, format with
+ 	%u.
+ 	(print_prime_path_source): Likewise.
+ 	(output_path_coverage): Format with HOST_SIZE_T_PRINT_UNSIGNED,
+ 	use unsigned for pathno.
+ 
+ 2025-05-09  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (*aarch64_sve_ptrue<mode>_ldr_str):
+ 	Add define_insn_and_split to fold predicated SVE loads/stores with
+ 	ptrue predicates to unpredicated instructions.
+ 
+ 2025-05-09  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116792
+ 	* Makefile.in (OBJS-libcommon): Add diagnostic-format-html.o.
+ 	* diagnostic-format-html.cc: Move here from
+ 	testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.cc.
+ 	Simplify includes.  Rename "xhtml" to "html" throughout.
+ 	(write_escaped_text): Drop.
+ 	(class xhtml_stream_output_format): Drop.
+ 	(class html_file_output_format): Reimplement using
+ 	diagnostic_output_file.
+ 	(diagnostic_output_format_init_xhtml): Drop.
+ 	(diagnostic_output_format_init_xhtml_stderr): Drop.
+ 	(diagnostic_output_format_init_xhtml_file): Drop.
+ 	(diagnostic_output_format_open_html_file): New.
+ 	(make_html_sink): New.
+ 	(xhtml_format_selftests): Convert to...
+ 	(diagnostic_format_html_cc_tests): ...this.
+ 	(plugin_is_GPL_compatible): Drop.
+ 	(plugin_init): Drop.
+ 	* diagnostic-format-html.h: New file.
+ 	* doc/invoke.texi (-fdiagnostics-add-output=): Add
+ 	"experimental-html" scheme.
+ 	* opts-diagnostic.cc: Include "diagnostic-format-html.h".
+ 	(class html_scheme_handler): New.
+ 	(output_factory::output_factory): Add html_scheme_handler.
+ 	(html_scheme_handler::make_sink): New.
+ 	* selftest-run-tests.cc (selftest::run_tests): Call the new
+ 	selftests.
+ 	* selftest.h (selftest::diagnostic_format_html_cc_tests): New
+ 	decl.
+ 
+ 2025-05-08  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* gimple-fold.cc (replace_stmt_with_simplification): Return false
+ 	if replacing `bool_var != 0` with `bool_var` in GIMPLE_COND.
+ 
+ 2025-05-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* tree-vect-loop.cc (get_initial_def_for_reduction): Remove.
+ 	(vect-create_epilog_for_reduction): Remove non-SLP path.
+ 	(vectorize_fold_left_reduction): Likewise.
+ 	(vectorizable_lane_reducing): Likewise.
+ 	(vectorizable_reduction): Likewise.
+ 	(vect_transform_reduction): Likewise.
+ 	(vect_transform_cycle_phi): Likewise.
+ 	(vectorizable_lc_phi): Remove non-SLP PATH and split into...
+ 	(vect_transform_lc_phi): ... this.
+ 	(update_epilogue_loop_vinfo): Update comment.
+ 	* tree-vect-stmts.cc (vect_analyze_stmt): Update call to
+ 	vectorizable_lc_phi.
+ 	(vect_transform_stmt): Update calls to vect_transform_reduction and
+ 	vect_transform_cycle_phi.  Rename call from vectorizable_lc_phi to
+ 	vect_transform_lc_phi.
+ 	* tree-vectorizer.h (vect_transform_reduction): Update declaration.
+ 	(vect_transform_cycle_phi): Likewise.
+ 	(vectorizable_lc_phi): Likewise.
+ 	(vect_transform_lc_phi): New.
+ 
+ 2025-05-08  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* gensupport.cc (conlist::conlist): Pass a location to the constructor.
+ 	Only allow skipping of non-alpha-numeric characters when parsing a
+ 	number and only allow '=', '+' or '%'.  Add some error checking when
+ 	parsing an operand number.
+ 	(parse_section_layout): Pass the location to the conlist constructor.
+ 	(parse_section): Allow an optional list of forbidden characters.
+ 	If specified, reject strings containing them.
+ 	(convert_syntax): Reject '=', '+' or '%' in an alternative.
+ 
+ 2025-05-08  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (@aarch64_pred_<optab><mode>): Move
+ 	commutative marker to the cons specification.
+ 	(add<mode>3): Likewise.
+ 	(@aarch64_pred_<su>abd<mode>): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(*cond_<optab><mode>_z): Likewise.
+ 	(<optab><mode>3): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(*aarch64_pred_abd<mode>_relaxed): Likewise.
+ 	(*aarch64_pred_abd<mode>_strict): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(@aarch64_pred_fma<mode>): Likewise.
+ 	(@aarch64_pred_fnma<mode>): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	* config/aarch64/aarch64-sve2.md (@aarch64_sve_<su>clamp<mode>): Move
+ 	commutative marker to the cons specification.
+ 	(*aarch64_sve_<su>clamp<mode>_x): Likewise.
+ 	(@aarch64_sve_fclamp<mode>): Likewise.
+ 	(*aarch64_sve_fclamp<mode>_x): Likewise.
+ 	(*aarch64_sve2_nor<mode>): Likewise.
+ 	(*aarch64_sve2_nand<mode>): Likewise.
+ 	(*aarch64_pred_faminmax_fused): Likewise.
+ 	* config/aarch64/aarch64.md (*loadwb_pre_pair_<ldst_sz>): Move the
+ 	early-clobber marker to the relevant alternative.
+ 	(*storewb_pre_pair_<ldst_sz>): Likewise.
+ 	(*add<mode>3_aarch64): Move commutative marker to the cons
+ 	specification.
+ 	(*addsi3_aarch64_uxtw): Likewise.
+ 	(*add<mode>3_poly_1): Likewise.
+ 	(add<mode>3_compare0): Likewise.
+ 	(*addsi3_compare0_uxtw): Likewise.
+ 	(*add<mode>3nr_compare0): Likewise.
+ 	(<optab><mode>3): Likewise.
+ 	(*<optab>si3_uxtw): Likewise.
+ 	(*and<mode>3_compare0): Likewise.
+ 	(*andsi3_compare0_uxtw): Likewise.
+ 	(@aarch64_and<mode>3nr_compare0): Likewise.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116352
+ 	* tree-vect-slp.cc (vect_build_slp_tree_2): When compressing
+ 	operands from a two-operator node make sure the resulting
+ 	operation does not mix defs from different basic-blocks.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120043
+ 	* tree-ssa-phiopt.cc (cond_store_replacement): Check
+ 	whether the store is to readonly memory.
+ 
+ 2025-05-08  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116938
+ 	* tree-ssa-phiopt.cc (move_stmt): Use rewrite_to_defined_overflow
+ 	isntead of manually doing the rewrite of the VCE.
+ 
+ 2025-05-08  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/120122
+ 	PR tree-optimization/116939
+ 	* gimple-fold.h (gimple_with_undefined_signed_overflow): Rename to ..
+ 	(rewrite_to_defined_overflow): This.
+ 	(gimple_needing_rewrite_undefined): Rename to ...
+ 	(rewrite_to_defined_unconditional): this.
+ 	* gimple-fold.cc (gimple_with_undefined_signed_overflow): Rename to ...
+ 	(gimple_needing_rewrite_undefined): This. Return true for VCE with integral
+ 	types of smaller precision.
+ 	(rewrite_to_defined_overflow): Rename to ...
+ 	(rewrite_to_defined_unconditional): This. Handle VCE rewriting to a cast.
+ 	* tree-if-conv.cc: s/gimple_with_undefined_signed_overflow/gimple_needing_rewrite_undefined/
+ 	s/rewrite_to_defined_overflow/rewrite_to_defined_unconditional.
+ 	* tree-scalar-evolution.cc: Likewise
+ 	* tree-ssa-ifcombine.cc: Likewise.
+ 	* tree-ssa-loop-im.cc: Likewise.
+ 	* tree-ssa-loop-split.cc: Likewise.
+ 	* tree-ssa-reassoc.cc: Likewise.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/120146
+ 	* tree-ssa-structalias.cc (create_variable_info_for): If
+ 	the symtab cannot tell us whether all refs to a variable
+ 	are explicit assume they are not.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119589
+ 	PR tree-optimization/119586
+ 	PR tree-optimization/119155
+ 	* tree-vect-stmts.cc (vectorizable_store): Verify
+ 	DR_STEP_ALIGNMENT preserves DR_TARGET_ALIGNMENT when
+ 	VF > 1 and VMAT_STRIDED_SLP.  Use vector aligned accesses when
+ 	we can.
+ 	(vectorizable_load): Likewise.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120143
+ 	* tree-vect-data-refs.cc (vect_analyze_early_break_dependences):
+ 	Move/update the original stmts, not the pattern stmts which
+ 	lack virtual operands and are not in the IL.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120089
+ 	* tree-vect-stmts.cc (vect_stmt_relevant_p): Mark all
+ 	PHIs live when not already so and doing early-break
+ 	vectorization.
+ 	(vect_mark_stmts_to_be_vectorized): Skip virtual PHIs.
+ 	* tree-vect-slp.cc (vect_analyze_slp): Robustify handling
+ 	of early-break forced IVs.
+ 
+ 2025-05-08  Pengxuan Zheng  <quic_pzheng@quicinc.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (aarch64_exact_log2_inverse): New.
+ 	* config/aarch64/aarch64-simd.md (aarch64_simd_vec_set_zero<mode>):
+ 	Update pattern accordingly.
+ 	* config/aarch64/aarch64.cc (aarch64_exact_log2_inverse): New.
+ 	* simplify-rtx.cc (simplify_context::simplify_ternary_operation):
+ 	Canonicalize vec_merge.
+ 
+ 2025-05-07  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/120137
+ 	PR target/120154
+ 	* config/riscv/riscv-vect-permconst.cc (process_bb): Verify each
+ 	canonicalized element fits into the vector element mode.
+ 
+ 2025-05-07  Dongyan Chen  <chendongyan@isrc.iscas.ac.cn>
+ 
+ 	* common/config/riscv/riscv-common.cc: New extension.
+ 	* config/riscv/riscv.opt: Ditto.
+ 
+ 2025-05-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/91323
+ 	* config/arm/arm.cc (arm_select_cc_mode): Use CCFPEmode for LTGT.
+ 
+ 2025-05-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/110796
+ 	PR target/118446
+ 	* config/arm/arm.h (REVERSIBLE_CC_MODE): FP modes are only
+ 	reversible if flag_finite_math_only.
+ 	* config/arm/arm.cc (arm_select_cc_mode): Return CCFPmode for all
+ 	FP comparisons if flag_finite_math_only.
+ 
+ 2025-05-07  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/111276
+ 	* gimple-fold.cc (arith_code_with_undefined_signed_overflow): Make static.
+ 	(gimple_with_undefined_signed_overflow): New function.
+ 	* gimple-fold.h (arith_code_with_undefined_signed_overflow): Remove.
+ 	(gimple_with_undefined_signed_overflow): Add declaration.
+ 	* tree-if-conv.cc (if_convertible_gimple_assign_stmt_p): Use
+ 	gimple_with_undefined_signed_overflow instead of manually
+ 	checking lhs and the code of the stmt.
+ 	(predicate_statements): Likewise.
+ 	* tree-ssa-ifcombine.cc (ifcombine_rewrite_to_defined_overflow): Likewise.
+ 	* tree-ssa-loop-im.cc (move_computations_worker): Likewise.
+ 	* tree-ssa-reassoc.cc (update_range_test): Likewise. Reformat.
+ 	* tree-scalar-evolution.cc (final_value_replacement_loop): Use
+ 	gimple_with_undefined_signed_overflow instead of
+ 	arith_code_with_undefined_signed_overflow.
+ 	* tree-ssa-loop-split.cc (split_loop): Likewise.
+ 
+ 2025-05-07  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* tree-ssa-loop-im.cc (compute_invariantness): Hoist to the always executed point
+ 	if ignorning the cost.
+ 
+ 2025-05-07  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost): Add FLOAT_EXPR;
+ 	FIX_TRUNC_EXPR and vec_promote_demote costs.
+ 
+ 2025-05-07  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	PR target/117978
+ 	* config/aarch64/aarch64-protos.h: Declare
+ 	aarch64_emit_load_store_through_mode and aarch64_sve_maskloadstore.
+ 	* config/aarch64/aarch64-sve.md
+ 	(maskload<mode><vpred>): New define_expand folding maskloads with
+ 	certain predicate patterns to ASIMD loads.
+ 	(*aarch64_maskload<mode><vpred>): Renamed from maskload<mode><vpred>.
+ 	(maskstore<mode><vpred>): New define_expand folding maskstores with
+ 	certain predicate patterns to ASIMD stores.
+ 	(*aarch64_maskstore<mode><vpred>): Renamed from maskstore<mode><vpred>.
+ 	* config/aarch64/aarch64.cc
+ 	(aarch64_emit_load_store_through_mode): New function emitting a
+ 	load/store through subregs of a given mode.
+ 	(aarch64_emit_sve_pred_move): Refactor to use
+ 	aarch64_emit_load_store_through_mode.
+ 	(aarch64_expand_maskloadstore): New function to emit ASIMD loads/stores
+ 	for maskloads/stores with SVE predicates with VL1, VL2, VL4, VL8, or
+ 	VL16 patterns.
+ 	(aarch64_partial_ptrue_length): New function returning number of leading
+ 	set bits in a predicate.
+ 
+ 2025-05-07  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390-protos.h (s390_expand_cstoreti4): New
+ 	function.
+ 	* config/s390/s390.cc (s390_expand_cstoreti4): New function.
+ 	* config/s390/s390.md (CC_SUZ): New mode iterator.
+ 	(l): New mode attribute.
+ 	(cc_tolower): New mode attribute.
+ 	* config/s390/vector.md (cstoreti4): New expander.
+ 	(*vec_cmpv2di_lane0_<cc_tolower>): New insn.
+ 	(*vec_cmpti_<cc_tolower>): New insn.
+ 
+ 2025-05-07  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120036
+ 	* config/i386/i386-features.cc (ix86_get_vector_load_mode):
+ 	Handle 8/4/2 bytes.
+ 	(remove_redundant_vector_load): If the mode size is smaller than
+ 	its natural size, first insert an extra move with a QI vector
+ 	SUBREG of the same size to avoid validate_subreg failure.
+ 
+ 2025-05-07  hongtao.liu  <hongtao.liu@intel.com>
+ 
+ 	PR gcov-profile/118508
+ 	* auto-profile.cc
+ 	(autofdo_source_profile::get_callsite_total_count): Fix name
+ 	mismatch for fortran.
+ 
+ 2025-05-07  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* config/riscv/riscv.md (*branch<ANYI:mode>_shiftedarith_equals_zero):
+ 	Avoid generating unnecessary andi.  Fix formatting.
+ 
+ 2025-05-06  Dongyan Chen  <chendongyan@isrc.iscas.ac.cn>
+ 
+ 	* common/config/riscv/riscv-common.cc: New extension.
+ 
+ 2025-05-06  Mingzhu Yan  <yanmingzhu@iscas.ac.cn>
+ 
+ 	* common/config/riscv/riscv-common.cc (riscv_ext_version_table): New
+ 	extension.
+ 	(riscv_ext_flag_table) Ditto.
+ 	* config/riscv/riscv.opt: New mask.
+ 	* doc/invoke.texi (RISC-V Options): New extension
+ 
+ 2025-05-06  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* config/i386/i386.cc (ix86_rtx_costs): Cost FLOAT, UNSIGNED_FLOAT,
+ 	FIX, UNSIGNED_FIX.
+ 	* config/i386/i386.h (struct processor_costs): Add
+ 	cvtsi2ss, cvtss2si, cvtpi2ps, cvtps2pi.
+ 	* config/i386/x86-tune-costs.h (struct processor_costs): Update tables.
+ 
+ 2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/119852
+ 	* cgraph.h (cgraph_node::create_clone): Remove the default value of
+ 	argument suffix.  Update function comment.
+ 	* cgraphclones.cc (cgraph_node::create_clone): Update function comment.
+ 	* ipa-inline-transform.cc (clone_inlined_nodes): Pass NULL to suffix
+ 	of create_clone explicitely.
+ 	* ipa-inline.cc (recursive_inlining): Likewise.
+ 	* lto-cgraph.cc (input_node): Likewise.
+ 
+ 2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* cgraph.h (cgraph_node::create_version_clone_with_body): Fix function
+ 	comment.  Change the name of clone_name to suffix, in line with the
+ 	function definition.
+ 	* cgraphclones.cc (cgraph_node::create_version_clone_with_body): Fix
+ 	function comment.
+ 
+ 2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/119852
+ 	* cgraphclones.cc (dump_callgraph_transformation): Document the
+ 	function.  Do not dump if suffix is NULL.
+ 
+ 2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* doc/invoke.texi (Developer Options): Document -fdump-ipa-clones.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* selftest-diagnostic.cc (test_diagnostic_context::report): Use
+ 	diagnostic_option_id rather than plain int.
+ 	* selftest-diagnostic.h (test_diagnostic_context::report):
+ 	Likewise.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR sarif-replay/117988
+ 	* json.cc (json::pointer::token::token): New ctors.
+ 	(json::pointer::token::~token): New.
+ 	(json::pointer::token::operator=): New.
+ 	(json::object::set): Set the value's m_pointer_token.
+ 	(json::array::append): Likewise.
+ 	* json.h (json::pointer::token): New struct.
+ 	(json::value::get_pointer_token): New accessor.
+ 	(json::value::m_pointer_token): New field.
+ 	* libsarifreplay.cc (get_logical_location_kind_for_json_kind):
+ 	New.
+ 	(make_logical_location_from_jv): New.
+ 	(sarif_replayer::report_problem): Set the logical location of the
+ 	diagnostic.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic-format-sarif.cc (maybe_get_sarif_kind): Add cases for
+ 	new kinds of logical location.
+ 	* doc/libgdiagnostics/topics/logical-locations.rst: Add new kinds
+ 	of logical location for handling XML and JSON.
+ 	* libgdiagnostics.cc (impl_logical_location_manager::get_kind):
+ 	Add cases for new kinds of logical location.
+ 	(diagnostic_text_sink::text_starter): Likewise, introducing a
+ 	macro for this.
+ 	(diagnostic_manager_debug_dump_logical_location): Likewise.
+ 	* libgdiagnostics.h (enum diagnostic_logical_location_kind_t): Add
+ 	new kinds of logical location for handling XML and JSON.
+ 	* libsarifreplay.cc (handle_logical_location_object): Add entries
+ 	to "kind_values" for decoding sarif logical location kinds
+ 	relating to XML and JSON.
+ 	* logical-location.h (enum logical_location_kind): Add new kinds
+ 	of logical location for handling XML and JSON.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116176
+ 	* diagnostic-format-sarif.cc (class sarif_array_of_unique): New
+ 	template.
+ 	(class sarif_logical_location): Move here from
+ 	diagnostic-format-sarif.h.
+ 	(sarif_builder::m_cached_logical_locs): New.
+ 	(sarif_builder::sarif_builder): Initialize it.
+ 	(sarif_builder::set_any_logical_locs_arr): Call
+ 	make_minimal_sarif_logical_location rather than
+ 	make_sarif_logical_location_object.
+ 	(sarif_property_bag::set_logical_location): Likewise.
+ 	(make_sarif_logical_location_object): Replace with...
+ 	(sarif_builder::ensure_sarif_logical_location_for): ...this.
+ 	Capture "parentIndex" property.  Consolidate into
+ 	theRuns.logicalLocations.
+ 	(sarif_builder::make_minimal_sarif_logical_location): New.
+ 	(sarif_builder::make_run_object): Add "index" properties to
+ 	m_cached_logical_locs and move it to theRuns.logicalLocations.
+ 	(selftest::test_sarif_array_of_unique_1): New.
+ 	(selftest::test_sarif_array_of_unique_2): New.
+ 	(selftest::diagnostic_format_sarif_cc_tests): Call the new
+ 	selftests.
+ 	* diagnostic-format-sarif.h (class sarif_logical_location): Move
+ 	to diagnostic-format-sarif.cc.
+ 	(make_sarif_logical_location_object): Drop decl.
+ 	* json.cc (value::compare): New.
+ 	(object::compare): New.
+ 	(selftest::fail_comparison): New.
+ 	(selftest::assert_json_equal): New.
+ 	(ASSERT_JSON_EQ): New.
+ 	(selftest::assert_json_non_equal): New.
+ 	(ASSERT_JSON_NE): New.
+ 	(selftest::test_comparisons): New.
+ 	(selftest::json_cc_tests): Call the new selftest.
+ 	* json.h (json::value::dyn_cast_object): New vfunc.
+ 	(json::object::dyn_cast_object): New vfunc impl.
+ 	(json::object::compare): New decl.
+ 	* libgdiagnostics.cc
+ 	(impl_logical_location_manager::get_parent): New.
+ 	* logical-location.h (logical_location_manager::get_parent): New
+ 	vfunc impl.
+ 	* selftest-logical-location.h
+ 	(test_logical_location_manager::get_parent): New vfunc impl.
+ 	* tree-logical-location.cc (assert_valid_tree): New.
+ 	(tree_logical_location_manager::get_short_name): Support types as
+ 	well as decls.
+ 	(tree_logical_location_manager::get_name_with_scope): Gracefully
+ 	handle non-decl nodes.
+ 	(tree_logical_location_manager::get_internal_name): Likewise.
+ 	(tree_logical_location_manager::get_kind): Don't attempt to handle
+ 	null nodes.  Handle NAMESPACE_DECL and RECORD_TYPE.
+ 	(tree_logical_location_manager::get_name_for_path_output):
+ 	Gracefully handle non-decl nodes.
+ 	(tree_logical_location_manager::get_parent): New.
+ 	* tree-logical-location.h
+ 	(tree_logical_location_manager::get_parent): New vfunc impl.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic-client-data-hooks.h: Include "logical-location.h".
+ 	(diagnostic_client_data_hooks::get_logical_location_manager): New.
+ 	(diagnostic_client_data_hooks::get_current_logical_location):
+ 	Convert return type from const logical_location * to
+ 	logical_location.
+ 	* diagnostic-format-json.cc: Include
+ 	"diagnostic-client-data-hooks.h".
+ 	(make_json_for_path): Update to use logical_location_manager from
+ 	the context.
+ 	* diagnostic-format-sarif.cc
+ 	(sarif_builder::get_logical_location_manager): New.
+ 	(sarif_builder::make_location_object): Update type of logical_loc
+ 	from "const logical_location *" to "logical_location".
+ 	(sarif_builder::set_any_logical_locs_arr): Likewise.
+ 	(sarif_builder::m_logical_loc_mgr): New field.
+ 	(sarif_result::on_nested_diagnostic): Use logical_location default
+ 	ctor rather than nullptr.
+ 	(sarif_builder::sarif_builder): Initialize m_logical_loc_mgr from
+ 	context's client data hooks.
+ 	(sarif_builder::make_locations_arr): Convert type of logical_loc
+ 	from from "const logical_location *" to "logical_location".
+ 	(sarif_builder::set_any_logical_locs_arr): Likewise.  Pass manager
+ 	to make_sarif_logical_location_object.
+ 	(sarif_builder::make_location_object): Likewise.
+ 	(sarif_property_bag::set_logical_location): New.
+ 	(make_sarif_logical_location_object): Update for introduction of
+ 	logical_location_manager.
+ 	(populate_thread_flow_location_object): Pass builder to
+ 	ev.maybe_add_sarif_properties.
+ 	(selftest::test_make_location_object): Use logical_location
+ 	default ctor rather than nullptr.
+ 	* diagnostic-format-sarif.h (class logical_location): Replace
+ 	forward decl with include of "logical-location.h".
+ 	(class sarif_builder): New forward decl.
+ 	(sarif_property_bag::set_logical_location): New.
+ 	(make_sarif_logical_location_object): Add "mgr" param.
+ 	* diagnostic-path.cc
+ 	(diagnostic_path::get_first_event_in_a_function): Update for
+ 	change of logical_location type.
+ 	(per_thread_summary::per_thread_summary): Pass in
+ 	"logical_loc_mgr".
+ 	(per_thread_summary::m_logical_loc_mgr): New field.
+ 	(event_range::m_logical_loc): Update for change of
+ 	logical_location type.
+ 	(path_summary::get_logical_location_manager): New accessor.
+ 	(path_summary::m_logical_loc_mgr): New field.
+ 	(path_summary::get_or_create_events_for_thread_id): Pass
+ 	m_logical_loc_mgr to per_thread_summary ctor.
+ 	(path_summary::path_summary): Initialize m_logical_loc_mgr.
+ 	(thread_event_printer::print_swimlane_for_event_range): Add param
+ 	"logical_loc_mgr".  Update for change in logical_loc type.
+ 	(print_path_summary_as_text): Pass manager to
+ 	thread_event_printer::print_swimlane_for_event_range.
+ 	(diagnostic_text_output_format::print_path): Update for
+ 	introduction of logical_location_manager.
+ 	* diagnostic-path.h: Include "logical-location.h".
+ 	(class sarif_builder): New forward decl.
+ 	(diagnostic_event::get_logical_location): Convert return type from
+ 	"const logical_location *" to "logical_location".
+ 	(diagnostic_event::maybe_add_sarif_properties): Add sarif_builder
+ 	param.
+ 	(diagnostic_path::get_logical_location_manager): New accessor.
+ 	(diagnostic_path::diagnostic_path): New ctor, taking manager.
+ 	(diagnostic_path::m_logical_loc_mgr): New field.
+ 	* diagnostic.cc
+ 	(diagnostic_context::get_logical_location_manager): New.
+ 	(logical_location::function_p): Convert to...
+ 	(logical_location_manager::function_p): ...this.
+ 	* diagnostic.h (class logical_location): Replace forward decl
+ 	with...
+ 	(class logical_location_manager): ...this.
+ 	(diagnostic_context::get_logical_location_manager): New decl.
+ 	* lazy-diagnostic-path.cc
+ 	(selftest::test_lazy_path::test_lazy_path): Pass m_logical_loc_mgr
+ 	to path ctor.
+ 	(selftest::test_lazy_path::make_inner_path): Likewise.
+ 	(selftest::test_lazy_path::m_logical_loc_mgr): New field.
+ 	* lazy-diagnostic-path.h
+ 	(lazy_diagnostic_path::lazy_diagnostic_path): New ctor.
+ 	* libgdiagnostics.cc (struct diagnostic_logical_location): Convert
+ 	from subclass of logical_location to a plain struct, dropping
+ 	accessors.
+ 	(class impl_logical_location_manager): New.
+ 	(impl_diagnostic_client_data_hooks::get_logical_location_manager):
+ 	New
+ 	(impl_diagnostic_client_data_hooks::m_logical_location_manager):
+ 	New field.
+ 	(diagnostic_manager::get_logical_location_manager): New.
+ 	(libgdiagnostics_path_event::get_logical_location): Reimplement.
+ 	(diagnostic_execution_path::diagnostic_execution_path): Add
+ 	logical_loc_mgr and pass to base class.
+ 	(diagnostic_execution_path::same_function_p): Update for change to
+ 	logical_location type.
+ 	(diagnostic::add_execution_path): Pass logical_loc_mgr to path
+ 	ctor.
+ 	(impl_diagnostic_client_data_hooks::get_current_logical_location):
+ 	Reimplement.
+ 	(diagnostic_text_sink::text_starter): Reimplement printing of
+ 	logical location.
+ 	(diagnostic_manager::new_execution_path): Pass mgr to path ctor.
+ 	(diagnostic_manager_debug_dump_logical_location): Update for
+ 	changes to diagnostic_logical_location.
+ 	(diagnostic_logical_location_get_kind): Likewise.
+ 	(diagnostic_logical_location_get_parent): Likewise.
+ 	(diagnostic_logical_location_get_short_name): Likewise.
+ 	(diagnostic_logical_location_get_fully_qualified_name): Likewise.
+ 	(diagnostic_logical_location_get_decorated_name): Likewise.
+ 	* logical-location.h (class logical_location_manager): New.
+ 	(class logical_location): Convert to typedef of
+ 	logical_location_manager::key.
+ 	* selftest-diagnostic-path.cc
+ 	(selftest::test_diagnostic_path::test_diagnostic_path): Pass
+ 	m_test_logical_loc_mgr to base ctor.
+ 	(selftest::test_diagnostic_path::same_function_p): Use pointer
+ 	comparison.
+ 	(selftest::test_diagnostic_path::add_event): Use
+ 	logical_location_from_funcname.
+ 	(selftest::test_diagnostic_path::add_thread_event): Likewise.
+ 	(selftest::test_diagnostic_path::logical_location_from_funcname):
+ 	New.
+ 	(selftest::test_diagnostic_event::test_diagnostic_event): Fix
+ 	indentation.  Pass logical_location rather than const char *.
+ 	* selftest-diagnostic-path.h
+ 	(selftest::test_diagnostic_event::test_diagnostic_event):
+ 	Likewise.
+ 	(selftest::test_diagnostic_event::get_logical_location): Update
+ 	for change to logical_location type.
+ 	(selftest::test_diagnostic_event::get_function_name): Drop.
+ 	(selftest::test_diagnostic_event::m_logical_loc): Convert from
+ 	test_logical_location to logical_location.
+ 	(selftest::test_diagnostic_path::logical_location_from_funcname):
+ 	New.
+ 	(selftest::test_diagnostic_path::m_test_logical_loc_mgr): New
+ 	field.
+ 	* selftest-logical-location.cc: Include "selftest.h".
+ 	(selftest::test_logical_location::test_logical_location): Drop.
+ 	(selftest::test_logical_location_manager::~test_logical_location_manager):
+ 	New.
+ 	(selftest::test_logical_location::get_short_name): Replace with...
+ 	(selftest::test_logical_location_manager::get_short_name):
+ 	...this.
+ 	(selftest::test_logical_location::get_name_with_scope): Replace
+ 	with...
+ 	(selftest::test_logical_location_manager::get_name_with_scope):
+ 	...this.
+ 	(selftest::test_logical_location::get_internal_name): Replace
+ 	with...
+ 	(selftest::test_logical_location_manager::get_internal_name):
+ 	...this.
+ 	(selftest::test_logical_location::get_kind): Replace with...
+ 	(selftest::test_logical_location_manager::get_kind): ...this.
+ 	(selftest::test_logical_location::get_name_for_path_output):
+ 	Replace with...
+ 	(selftest::test_logical_location_manager::get_name_for_path_output):
+ 	...this.
+ 	(selftest::test_logical_location_manager::logical_location_from_funcname):
+ 	New.
+ 	(selftest::test_logical_location_manager::item_from_funcname):
+ 	New.
+ 	(selftest::selftest_logical_location_cc_tests): New.
+ 	* selftest-logical-location.h (class test_logical_location):
+ 	Replace with...
+ 	(class test_logical_location_manager): ...this.
+ 	* selftest-run-tests.cc (selftest::run_tests): Call
+ 	selftest_logical_location_cc_tests.
+ 	* selftest.h (selftest::selftest_logical_location_cc_tests): New
+ 	decl.
+ 	* simple-diagnostic-path.cc
+ 	(simple_diagnostic_path::simple_diagnostic_path): Add
+ 	"logical_loc_mgr" param and pass it to base ctor.
+ 	(simple_diagnostic_event::simple_diagnostic_event): Update init of
+ 	m_logical_loc.
+ 	(selftest::test_intraprocedural_path): Update for changes to
+ 	logical locations.
+ 	* simple-diagnostic-path.h: Likewise.
+ 	* tree-diagnostic-client-data-hooks.cc
+ 	(compiler_data_hooks::get_logical_location_manger): New.
+ 	(compiler_data_hooks::get_current_logical_location): Update.
+ 	(compiler_data_hooks::m_current_fndecl_logical_loc): Replace
+ 	with...
+ 	(compiler_data_hooks::m_logical_location_manager): ...this.
+ 	* tree-logical-location.cc
+ 	(compiler_logical_location::get_short_name_for_tree): Replace
+ 	with...
+ 	(tree_logical_location_manager::get_short_name): ...this.
+ 	(compiler_logical_location::get_name_with_scope_for_tree): Replace
+ 	with...
+ 	(tree_logical_location_manager::get_name_with_scope): ...this.
+ 	(compiler_logical_location::get_internal_name_for_tree): Replace
+ 	with...
+ 	(tree_logical_location_manager::get_internal_name): ...this.
+ 	(compiler_logical_location::get_kind_for_tree): Replace with...
+ 	(tree_logical_location_manager::get_kind): ...this.
+ 	(compiler_logical_location::get_name_for_tree_for_path_output):
+ 	Replace with...
+ 	(tree_logical_location_manager::get_name_for_path_output):
+ 	...this.
+ 	(tree_logical_location::get_short_name): Drop.
+ 	(tree_logical_location::get_name_with_scope): Drop.
+ 	(tree_logical_location::get_internal_name): Drop.
+ 	(tree_logical_location::get_kind): Drop.
+ 	(tree_logical_location::get_name_for_path_output): Drop.
+ 	(current_fndecl_logical_location::get_short_name): Drop.
+ 	(current_fndecl_logical_location::get_name_with_scope): Drop.
+ 	(current_fndecl_logical_location::get_internal_name): Drop.
+ 	(current_fndecl_logical_location::get_kind): Drop.
+ 	(current_fndecl_logical_location::get_name_for_path_output): Drop.
+ 	* tree-logical-location.h (class compiler_logical_location): Drop.
+ 	(class tree_logical_location): Drop.
+ 	(class current_fndecl_logical_location): Drop.
+ 	(class tree_logical_location_manager): New.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* doc/libgdiagnostics/topics/compatibility.rst: New file, based
+ 	on gcc/jit/docs/topics/compatibility.rst.
+ 	* doc/libgdiagnostics/topics/index.rst: Add compatibility.rst.
+ 	* doc/libgdiagnostics/topics/logical-locations.rst (Accessors):
+ 	New section.
+ 	* libgdiagnostics++.h (logical_location::operator bool): New.
+ 	(logical_location::operator==): New.
+ 	(logical_location::operator!=): New.
+ 	(logical_location::get_kind): New.
+ 	(logical_location::get_parent): New.
+ 	(logical_location::get_short_name): New.
+ 	(logical_location::get_fully_qualified_name): New.
+ 	(logical_location::get_decorated_name): New.
+ 	* libgdiagnostics.cc
+ 	(diagnostic_logical_location::get_fully_qualified_name): New.
+ 	(diagnostic_logical_location_get_kind): New entrypoint.
+ 	(diagnostic_logical_location_get_parent): New entrypoint.
+ 	(diagnostic_logical_location_get_short_name): New entrypoint.
+ 	(diagnostic_logical_location_get_fully_qualified_name): New
+ 	entrypoint.
+ 	(diagnostic_logical_location_get_decorated_name): New entrypoint.
+ 	* libgdiagnostics.h
+ 	(LIBDIAGNOSTICS_HAVE_LOGICAL_LOCATION_ACCESSORS): New define.
+ 	(diagnostic_logical_location_get_kind): New entrypoint.
+ 	(diagnostic_logical_location_get_parent): New entrypoint.
+ 	(diagnostic_logical_location_get_short_name): New entrypoint.
+ 	(diagnostic_logical_location_get_fully_qualified_name): New
+ 	entrypoint.
+ 	(diagnostic_logical_location_get_decorated_name): New entrypoint.
+ 	* libgdiagnostics.map (LIBGDIAGNOSTICS_ABI_1): New.
+ 
+ 2025-05-06  Shreya Munnangi  <smunnangi1@ventanamicro.com>
+ 
+ 	PR middle-end/114512
+ 	* config/riscv/bitmanip.md (bext* patterns): New patterns for
+ 	bext recognition plus splitter for extracting variable bit from
+ 	a constant.
+ 	* config/riscv/predicates.md (bitpos_mask_operand): New predicate.
+ 
+ 2025-05-06  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/autovec-opt.md (*<optab>_vx_<mode>): Add new
+ 	combine to convert vec_duplicate + vadd.vv to vaddvx on GR2VR
+ 	cost.
+ 	* config/riscv/riscv.cc (riscv_rtx_costs): Take care of the cost
+ 	when vec_dup and vadd v, vec_dup(x).
+ 	* config/riscv/vector-iterators.md: Add new iterator for vx.
+ 
+ 2025-05-06  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-protos.h (get_gr2vr_cost): Add new decl to
+ 	get the cost of gr2vr.
+ 	* config/riscv/riscv-vector-costs.cc (costs::adjust_stmt_cost):
+ 	Leverage the helper function to get the cost of gr2vr.
+ 	* config/riscv/riscv.cc (riscv_register_move_cost): Ditto.
+ 	(riscv_builtin_vectorization_cost): Ditto.
+ 	(get_gr2vr_cost): Add new impl of the helper function.
+ 
+ 2025-05-06  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-opts.h (RVV_GR2VR_COST_UNPROVIDED): Add
+ 	new macro to indicate the param is not provided.
+ 	* config/riscv/riscv.opt: Add new option --pararm=gpr2vr-cost.
+ 
+ 2025-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/1157777
+ 	* tree-vectorizer.h (_slp_tree::avoid_stlf_fail): New member.
+ 	* tree-vect-slp.cc (_slp_tree::_slp_tree): Initialize it.
+ 	(vect_print_slp_tree): Dump it.
+ 	* tree-vect-data-refs.cc (vect_slp_analyze_instance_dependence):
+ 	For dataflow dependent loads of a store check whether there's
+ 	a cross-iteration data dependence that for sure prohibits
+ 	store-to-load forwarding and mark involved loads.
+ 	* tree-vect-stmts.cc (get_group_load_store_type): For avoid_stlf_fail
+ 	marked loads use VMAT_ELEMENTWISE.
+ 
+ 2025-05-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/120074
+ 	* gimple-fold.cc (fold_truth_andor_for_ifcombine): For
+ 	lsignbit && l_xor case, punt if ll_bitsize != lr_bitsize.  Similarly
+ 	for rsignbit && r_xor case, punt if rl_bitsize != rr_bitsize.
+ 	Formatting fix.
+ 
+ 2025-05-06  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* config/i386/i386.cc (ix86_tls_index): Add ifdef.
+ 
+ 2025-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120031
+ 	* match.pd ((nop_outer_cast)-(inner_cast)var -> -(outer_cast)(var)):
+ 	Allow inner conversions that are not widenings when the outer
+ 	type is unsigned.
+ 
+ 2025-05-06  LIU Hao  <lh_mouse@126.com>
+ 
+ 	PR pch/14940
+ 	* config/i386/host-mingw32.cc (mingw32_gt_pch_use_address):
+ 	Replace the loop that attempted to map the PCH only to its
+ 	original address with more adaptive operations
+ 
+ 2025-05-06  Julian Waters  <tanksherman27@gmail.com>
+ 	    Eric Botcazou  <botcazou@adacore.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 	    Liu Hao  <lh_mouse@126.com>
+ 
+ 	* config/i386/i386.cc (ix86_legitimate_constant_p): Handle new UNSPEC.
+ 	(legitimate_pic_operand_p): Handle new UNSPEC.
+ 	(legitimate_pic_address_disp_p): Handle new UNSPEC.
+ 	(ix86_legitimate_address_p): Handle new UNSPEC.
+ 	(ix86_tls_index_symbol): New symbol for _tls_index.
+ 	(ix86_tls_index): Handle creation of _tls_index symbol.
+ 	(legitimize_tls_address): Create thread local access sequence.
+ 	(output_pic_addr_const): Handle new UNSPEC.
+ 	(i386_output_dwarf_dtprel): Handle new UNSPEC.
+ 	(i386_asm_output_addr_const_extra): Handle new UNSPEC.
+ 	* config/i386/i386.h (TARGET_WIN32_TLS): Define.
+ 	* config/i386/i386.md: New UNSPEC.
+ 	* config/i386/predicates.md: Handle new UNSPEC.
+ 	* config/mingw/mingw32.h (TARGET_WIN32_TLS): Define.
+ 	(TARGET_ASM_SELECT_SECTION): Define.
+ 	(DEFAULT_TLS_SEG_REG): Define.
+ 	* config/mingw/winnt.cc (mingw_pe_select_section): Select proper TLS section.
+ 	(mingw_pe_unique_section): Handle TLS section.
+ 	* config/mingw/winnt.h (mingw_pe_select_section): Declare.
+ 	* configure: Regenerate.
+ 	* configure.ac: New check for broken linker thread local support
+ 
+ 2025-05-05  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/119971
+ 	* config/riscv/bitmanip.md (rotation with masked count): Rewrite
+ 	as define_insn patterns.  Fix formatting.
+ 	* config/riscv/riscv.md (shift with masked count): Similarly.
+ 
+ 2025-05-05  Uros Bizjak  <ubizjak@gmail.com>
+ 	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR target/120019
+ 	* config/i386/i386.cc (ix86_print_operand): Handle 'v' operand
+ 	modifier to emit segment override prefix.
+ 	* config/i386/i386.md (*strmovdi_rex_1): Use %v operand modifier
+ 	to emit segment override prefix.
+ 	(*strmovsi_1): Ditto.
+ 	(*strmovhi_1): Ditto.
+ 	(*strmovqi_1): Ditto.
+ 	(*rep_movdi_rex64): Ditto.
+ 	(*rep_movsi): Ditto.
+ 	(*rep_movqi): Ditto.
+ 
+ 2025-05-05  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120048
+ 	* ipa-cp.cc (ipcp_store_vr_results): Check for UNDEFINED.
+ 
+ 2025-05-05  Kyle Huey  <khuey@kylehuey.com>
+ 
+ 	* dwarf2out.cc (resolve_addr_in_expr): Propagate dtprel into the address
+ 	table when appropriate.
+ 
+ 2025-05-05  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/118163
+ 	PR c++/118392
+ 	* diagnostic.cc (diagnostic_context::initialize): Initialize
+ 	m_diagnostic_groups.m_inhibiting_notes_from.
+ 	(diagnostic_context::inhibit_notes_in_group): New.
+ 	(diagnostic_context::notes_inhibited_in_group): New
+ 	(diagnostic_context::report_diagnostic): Call
+ 	inhibit_notes_in_group and notes_inhibited_in_group.
+ 	(diagnostic_context::end_group): Call inhibit_notes_in_group.
+ 	(diagnostic_context::pop_nesting_level): Ditto.
+ 	* diagnostic.h (diagnostic_context::m_diagnostic_groups): Add
+ 	member to track the depth at which a warning has been inhibited.
+ 	(diagnostic_context::notes_inhibited_in_group): Declare.
+ 	(diagnostic_context::inhibit_notes_in_group): Declare.
+ 	* doc/ux.texi: Document diagnostic_group behavior with regards
+ 	to inhibited warnings.
+ 
+ 2025-05-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386.md (truncsfbf2): Fix comment typo,
+ 	unsafte -> unsafe.
+ 
+ 2025-05-05  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/genrvv-type-indexer.cc: Apply clang-format to the
+ 	file.
+ 
+ 2025-05-04  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* config.gcc (riscv): Add riscv-vect-permcost.o to extra_objs.
+ 	* config/riscv/riscv-passes.def (pass_vector_permcost): Add new pass.
+ 	* config/riscv/riscv-protos.h (make_pass_vector_permconst): Declare.
+ 	* config/riscv/riscv-vect-permconst.cc: New file.
+ 	* config/riscv/t-riscv: Add build rule for riscv-vect-permcost.o
+ 
+ 2025-05-04  Jin Ma  <jinma@linux.alibaba.com>
+ 	    Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* config/riscv/riscv.cc (riscv_print_operand): Add H.
+ 	* doc/extend.texi: Document for H.
+ 
+ 2025-05-04  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_register_move_cost): Handle
+ 	subclasses with vector registers as well.
+ 
+ 2025-05-04  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR target/119900
+ 	* cgraph.cc (cgraph_edge::maybe_hot_p): Add
+ 	a variant accepting a sreal scale; use reliability of
+ 	profile.
+ 	* cgraph.h (cgraph_edge::maybe_hot_p): Declare
+ 	a varaint accepting a sreal scale.
+ 	* ipa-inline.cc (callee_speedup): New function.
+ 	(want_inline_small_function_p): add early return
+ 	and avoid duplicated lookup of summaries; use scaled
+ 	maybe_hot predicate.
+ 
+ 2025-05-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_emit_frm_mode_set): Refactor
+ 	the frm mode set by removing fsrmsi_restore_volatile.
+ 	* config/riscv/vector-iterators.md (unspecv): Remove as
+ 	unnecessary.
+ 	* config/riscv/vector.md (fsrmsi_restore_volatile): Ditto.
+ 
  2025-05-03  Jan Hubicka  <hubicka@ucw.cz>
  
  	* config/i386/i386.cc (unspec_pcmp_p): New function.
diff -Nrcpad gcc-16-20250504/gcc/DATESTAMP gcc-16-20250511/gcc/DATESTAMP
*** gcc-16-20250504/gcc/DATESTAMP	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/DATESTAMP	Sun May 11 22:32:07 2025
***************
*** 1 ****
! 20250504
--- 1 ----
! 20250511
diff -Nrcpad gcc-16-20250504/gcc/Makefile.in gcc-16-20250511/gcc/Makefile.in
*** gcc-16-20250504/gcc/Makefile.in	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/Makefile.in	Sun May 11 22:32:07 2025
*************** OBJS = \
*** 1850,1855 ****
--- 1850,1856 ----
  # Objects in libcommon.a, potentially used by all host binaries and with
  # no target dependencies.
  OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
+ 	diagnostic-format-html.o \
  	diagnostic-format-json.o \
  	diagnostic-format-sarif.o \
  	diagnostic-format-text.o \
diff -Nrcpad gcc-16-20250504/gcc/ada/ChangeLog gcc-16-20250511/gcc/ada/ChangeLog
*** gcc-16-20250504/gcc/ada/ChangeLog	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/ada/ChangeLog	Sun May 11 22:32:07 2025
***************
*** 1,3 ****
--- 1,9 ----
+ 2025-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/120104
+ 	* exp_ch3.adb (Expand_Freeze_Record_Type): For a controlled tagged
+ 	type, freeze only the controlled primitives that are present.
+ 
  2025-04-30  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/112958
diff -Nrcpad gcc-16-20250504/gcc/ada/exp_ch3.adb gcc-16-20250511/gcc/ada/exp_ch3.adb
*** gcc-16-20250504/gcc/ada/exp_ch3.adb	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/ada/exp_ch3.adb	Sun May 11 22:32:07 2025
*************** package body Exp_Ch3 is
*** 6321,6339 ****
              --  frozen inside.
  
              if Is_Controlled (Typ) then
!                Append_Freeze_Actions (Typ,
!                  Freeze_Entity
!                    (Find_Controlled_Prim_Op (Typ, Name_Initialize), Typ));
  
!                if not Is_Limited_Type (Typ) then
!                   Append_Freeze_Actions (Typ,
!                     Freeze_Entity
!                       (Find_Controlled_Prim_Op (Typ, Name_Adjust), Typ));
!                end if;
  
!                Append_Freeze_Actions (Typ,
!                  Freeze_Entity
!                    (Find_Controlled_Prim_Op (Typ, Name_Finalize), Typ));
              end if;
  
              --  Freeze rest of primitive operations. There is no need to handle
--- 6321,6347 ----
              --  frozen inside.
  
              if Is_Controlled (Typ) then
!                declare
!                   Prim : Entity_Id;
  
!                begin
!                   Prim := Find_Controlled_Prim_Op (Typ, Name_Initialize);
!                   if Present (Prim) then
!                      Append_Freeze_Actions (Typ, Freeze_Entity (Prim, Typ));
!                   end if;
  
!                   if not Is_Limited_Type (Typ) then
!                      Prim := Find_Controlled_Prim_Op (Typ, Name_Adjust);
!                      if Present (Prim) then
!                         Append_Freeze_Actions (Typ, Freeze_Entity (Prim, Typ));
!                      end if;
!                   end if;
! 
!                   Prim := Find_Controlled_Prim_Op (Typ, Name_Finalize);
!                   if Present (Prim) then
!                      Append_Freeze_Actions (Typ, Freeze_Entity (Prim, Typ));
!                   end if;
!                end;
              end if;
  
              --  Freeze rest of primitive operations. There is no need to handle
diff -Nrcpad gcc-16-20250504/gcc/analyzer/ChangeLog gcc-16-20250511/gcc/analyzer/ChangeLog
*** gcc-16-20250504/gcc/analyzer/ChangeLog	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/analyzer/ChangeLog	Sun May 11 22:32:08 2025
***************
*** 1,3 ****
--- 1,29 ----
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* checker-event.cc (checker_event::checker_event): Update
+ 	initialization of m_logical_loc.
+ 	(checker_event::maybe_add_sarif_properties): Add "builder" param.
+ 	Replace call to make_sarif_logical_location_object with call to
+ 	sarif_property_bag::set_logical_location.
+ 	(superedge_event::maybe_add_sarif_properties): Add "builder"
+ 	param.
+ 	* checker-event.h (checker_event::get_logical_location):
+ 	Reimplement.
+ 	(checker_event::maybe_add_sarif_properties): Add "builder" param.
+ 	(checker_event::maybe_add_sarif_properties): Add "builder" param.
+ 	(checker_event::m_logical_loc): Convert from tree_logical_location
+ 	to logical_location.
+ 	(superedge_event::maybe_add_sarif_properties): Add sarif_builder
+ 	param.
+ 	* checker-path.h (checker_path::checker_path): Add logical_loc_mgr
+ 	param.
+ 	* diagnostic-manager.cc
+ 	(diagnostic_manager::emit_saved_diagnostic): Pass logical location
+ 	manager to emission_path ctor.
+ 	(diagnostic_manager::get_logical_location_manager): New.
+ 	* diagnostic-manager.h
+ 	(diagnostic_manager::get_logical_location_manager): New decl.
+ 
  2025-04-30  David Malcolm  <dmalcolm@redhat.com>
  
  	* sm-malloc.cc (malloc_diagnostic::describe_state_change): Tweak
diff -Nrcpad gcc-16-20250504/gcc/analyzer/checker-event.cc gcc-16-20250511/gcc/analyzer/checker-event.cc
*** gcc-16-20250504/gcc/analyzer/checker-event.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/analyzer/checker-event.cc	Sun May 11 22:32:08 2025
*************** checker_event::checker_event (enum event
*** 112,118 ****
    m_original_depth (loc_info.m_depth),
    m_effective_depth (loc_info.m_depth),
    m_pending_diagnostic (NULL), m_emission_id (),
!   m_logical_loc (loc_info.m_fndecl)
  {
    /* Update effective fndecl and depth if inlining has been recorded.  */
    if (flag_analyzer_undo_inlining)
--- 112,119 ----
    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))
  {
    /* Update effective fndecl and depth if inlining has been recorded.  */
    if (flag_analyzer_undo_inlining)
*************** checker_event::checker_event (enum event
*** 122,128 ****
  	{
  	  m_effective_fndecl = info.get_inner_fndecl ();
  	  m_effective_depth += info.get_extra_frames ();
! 	  m_logical_loc = tree_logical_location (m_effective_fndecl);
  	}
      }
  }
--- 123,130 ----
  	{
  	  m_effective_fndecl = info.get_inner_fndecl ();
  	  m_effective_depth += info.get_extra_frames ();
! 	  m_logical_loc
! 	    = tree_logical_location_manager::key_from_tree (m_effective_fndecl);
  	}
      }
  }
*************** checker_event::get_meaning () const
*** 141,147 ****
  
  void
  checker_event::
! maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj) const
  {
    sarif_property_bag &props = thread_flow_loc_obj.get_or_create_properties ();
  #define PROPERTY_PREFIX "gcc/analyzer/checker_event/"
--- 143,150 ----
  
  void
  checker_event::
! maybe_add_sarif_properties (sarif_builder &builder,
! 			    sarif_object &thread_flow_loc_obj) const
  {
    sarif_property_bag &props = thread_flow_loc_obj.get_or_create_properties ();
  #define PROPERTY_PREFIX "gcc/analyzer/checker_event/"
*************** maybe_add_sarif_properties (sarif_object
*** 150,161 ****
    props.set_string (PROPERTY_PREFIX "kind", event_kind_to_string (m_kind));
  
    if (m_original_fndecl != m_effective_fndecl)
!     {
!       tree_logical_location logical_loc (m_original_fndecl);
!       props.set<sarif_logical_location>
! 	(PROPERTY_PREFIX "original_fndecl",
! 	 make_sarif_logical_location_object (logical_loc));
!     }
    if (m_original_depth != m_effective_depth)
      props.set_integer (PROPERTY_PREFIX "original_depth", m_original_depth);
  #undef PROPERTY_PREFIX
--- 153,163 ----
    props.set_string (PROPERTY_PREFIX "kind", event_kind_to_string (m_kind));
  
    if (m_original_fndecl != m_effective_fndecl)
!     props.set_logical_location
!       (PROPERTY_PREFIX "original_fndecl",
!        builder,
!        tree_logical_location_manager::key_from_tree (m_original_fndecl));
! 
    if (m_original_depth != m_effective_depth)
      props.set_integer (PROPERTY_PREFIX "original_depth", m_original_depth);
  #undef PROPERTY_PREFIX
*************** state_change_event::get_meaning () const
*** 502,511 ****
     for superedge_event.  */
  
  void
! superedge_event::maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj)
    const
  {
!   checker_event::maybe_add_sarif_properties (thread_flow_loc_obj);
    sarif_property_bag &props = thread_flow_loc_obj.get_or_create_properties ();
  #define PROPERTY_PREFIX "gcc/analyzer/superedge_event/"
    if (m_sedge)
--- 504,514 ----
     for superedge_event.  */
  
  void
! superedge_event::maybe_add_sarif_properties (sarif_builder &builder,
! 					     sarif_object &thread_flow_loc_obj)
    const
  {
!   checker_event::maybe_add_sarif_properties (builder, thread_flow_loc_obj);
    sarif_property_bag &props = thread_flow_loc_obj.get_or_create_properties ();
  #define PROPERTY_PREFIX "gcc/analyzer/superedge_event/"
    if (m_sedge)
diff -Nrcpad gcc-16-20250504/gcc/analyzer/checker-event.h gcc-16-20250511/gcc/analyzer/checker-event.h
*** gcc-16-20250504/gcc/analyzer/checker-event.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/analyzer/checker-event.h	Sun May 11 22:32:08 2025
*************** public:
*** 100,111 ****
  
    location_t get_location () const final override { return m_loc; }
    int get_stack_depth () const final override { return m_effective_depth; }
!   const logical_location *get_logical_location () const final override
    {
!     if (m_effective_fndecl)
!       return &m_logical_loc;
!     else
!       return NULL;
    }
    meaning get_meaning () const override;
    bool connect_to_next_event_p () const override { return false; }
--- 100,108 ----
  
    location_t get_location () const final override { return m_loc; }
    int get_stack_depth () const final override { return m_effective_depth; }
!   logical_location get_logical_location () const final override
    {
!     return m_logical_loc;
    }
    meaning get_meaning () const override;
    bool connect_to_next_event_p () const override { return false; }
*************** public:
*** 115,121 ****
    }
  
    void
!   maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj) const override;
  
    /* Additional functionality.  */
    tree get_fndecl () const { return m_effective_fndecl; }
--- 112,119 ----
    }
  
    void
!   maybe_add_sarif_properties (sarif_builder &,
! 			      sarif_object &thread_flow_loc_obj) const override;
  
    /* Additional functionality.  */
    tree get_fndecl () const { return m_effective_fndecl; }
*************** protected:
*** 154,160 ****
    int m_effective_depth;
    pending_diagnostic *m_pending_diagnostic;
    diagnostic_event_id_t m_emission_id; // only set once all pruning has occurred
!   tree_logical_location m_logical_loc;
  };
  
  /* A concrete event subclass for a purely textual event, for use in
--- 152,158 ----
    int m_effective_depth;
    pending_diagnostic *m_pending_diagnostic;
    diagnostic_event_id_t m_emission_id; // only set once all pruning has occurred
!   logical_location m_logical_loc;
  };
  
  /* A concrete event subclass for a purely textual event, for use in
*************** public:
*** 391,397 ****
  class superedge_event : public checker_event
  {
  public:
!   void maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj)
      const override;
  
    /* Mark this edge event as being either an interprocedural call or
--- 389,396 ----
  class superedge_event : public checker_event
  {
  public:
!   void maybe_add_sarif_properties (sarif_builder &,
! 				   sarif_object &thread_flow_loc_obj)
      const override;
  
    /* Mark this edge event as being either an interprocedural call or
diff -Nrcpad gcc-16-20250504/gcc/analyzer/checker-path.h gcc-16-20250511/gcc/analyzer/checker-path.h
*** gcc-16-20250504/gcc/analyzer/checker-path.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/analyzer/checker-path.h	Sun May 11 22:32:08 2025
*************** namespace ana {
*** 31,38 ****
  class checker_path : public diagnostic_path
  {
  public:
!   checker_path (logger *logger)
!   : diagnostic_path (),
      m_thread ("main"),
      m_logger (logger)
    {}
--- 31,39 ----
  class checker_path : public diagnostic_path
  {
  public:
!   checker_path (const logical_location_manager &logical_loc_mgr,
! 		logger *logger)
!   : diagnostic_path (logical_loc_mgr),
      m_thread ("main"),
      m_logger (logger)
    {}
diff -Nrcpad gcc-16-20250504/gcc/analyzer/diagnostic-manager.cc gcc-16-20250511/gcc/analyzer/diagnostic-manager.cc
*** gcc-16-20250504/gcc/analyzer/diagnostic-manager.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/analyzer/diagnostic-manager.cc	Sun May 11 22:32:08 2025
*************** diagnostic_manager::emit_saved_diagnosti
*** 1580,1586 ****
  
    /* This is the diagnostic_path subclass that will be built for
       the diagnostic.  */
!   checker_path emission_path (get_logger ());
  
    /* Populate emission_path with a full description of EPATH.  */
    build_emission_path (pb, *epath, &emission_path);
--- 1580,1587 ----
  
    /* This is the diagnostic_path subclass that will be built for
       the diagnostic.  */
!   checker_path emission_path (get_logical_location_manager (),
! 			      get_logger ());
  
    /* Populate emission_path with a full description of EPATH.  */
    build_emission_path (pb, *epath, &emission_path);
*************** diagnostic_manager::emit_saved_diagnosti
*** 1656,1661 ****
--- 1657,1671 ----
      }
  }
  
+ const logical_location_manager &
+ diagnostic_manager::get_logical_location_manager () const
+ {
+   gcc_assert (global_dc);
+   auto mgr = global_dc->get_logical_location_manager ();
+   gcc_assert (mgr);
+   return *mgr;
+ }
+ 
  /* Emit a "path" of events to EMISSION_PATH describing the exploded path
     EPATH within EG.  */
  
diff -Nrcpad gcc-16-20250504/gcc/analyzer/diagnostic-manager.h gcc-16-20250511/gcc/analyzer/diagnostic-manager.h
*** gcc-16-20250504/gcc/analyzer/diagnostic-manager.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/analyzer/diagnostic-manager.h	Sun May 11 22:32:08 2025
*************** public:
*** 191,196 ****
--- 191,199 ----
    }
  
  private:
+   const logical_location_manager &
+   get_logical_location_manager () const;
+ 
    void build_emission_path (const path_builder &pb,
  			    const exploded_path &epath,
  			    checker_path *emission_path) const;
diff -Nrcpad gcc-16-20250504/gcc/auto-profile.cc gcc-16-20250511/gcc/auto-profile.cc
*** gcc-16-20250504/gcc/auto-profile.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/auto-profile.cc	Sun May 11 22:32:08 2025
*************** autofdo_source_profile::get_callsite_tot
*** 848,855 ****
  
    function_instance *s = get_function_instance_by_inline_stack (stack);
    if (s == NULL
!       || afdo_string_table->get_index (IDENTIFIER_POINTER (
!              DECL_ASSEMBLER_NAME (edge->callee->decl))) != s->name ())
      return 0;
  
    return s->total_count ();
--- 848,855 ----
  
    function_instance *s = get_function_instance_by_inline_stack (stack);
    if (s == NULL
!       ||(afdo_string_table->get_index_by_decl (edge->callee->decl)
! 	 != s->name()))
      return 0;
  
    return s->total_count ();
diff -Nrcpad gcc-16-20250504/gcc/cgraph.h gcc-16-20250511/gcc/cgraph.h
*** gcc-16-20250504/gcc/cgraph.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cgraph.h	Sun May 11 22:32:08 2025
*************** struct GTY((tag ("SYMTAB_FUNCTION"))) cg
*** 965,979 ****
       If the new node is being inlined into another one, NEW_INLINED_TO should be
       the outline function the new one is (even indirectly) inlined to.
       All hooks will see this in node's inlined_to, when invoked.
!      Can be NULL if the node is not inlined.  SUFFIX is string that is appended
!      to the original name.  */
    cgraph_node *create_clone (tree decl, profile_count count,
  			     bool update_original,
  			     vec<cgraph_edge *> redirect_callers,
  			     bool call_duplication_hook,
  			     cgraph_node *new_inlined_to,
  			     ipa_param_adjustments *param_adjustments,
! 			     const char *suffix = NULL);
  
    /* Create callgraph node clone with new declaration.  The actual body will be
       copied later at compilation stage.  The name of the new clone will be
--- 965,983 ----
       If the new node is being inlined into another one, NEW_INLINED_TO should be
       the outline function the new one is (even indirectly) inlined to.
       All hooks will see this in node's inlined_to, when invoked.
!      Should be NULL if the node is not inlined.
! 
!      SUFFIX is string that is appended to the original name, it should only be
!      NULL if NEW_INLINED_TO is not NULL or if the clone being created is
!      temporary and a record about it should not be added into the ipa-clones
!      dump file.  */
    cgraph_node *create_clone (tree decl, profile_count count,
  			     bool update_original,
  			     vec<cgraph_edge *> redirect_callers,
  			     bool call_duplication_hook,
  			     cgraph_node *new_inlined_to,
  			     ipa_param_adjustments *param_adjustments,
! 			     const char *suffix);
  
    /* Create callgraph node clone with new declaration.  The actual body will be
       copied later at compilation stage.  The name of the new clone will be
*************** struct GTY((tag ("SYMTAB_FUNCTION"))) cg
*** 1020,1030 ****
       TREE_MAP is a mapping of tree nodes we want to replace with
       new ones (according to results of prior analysis).
  
!      If non-NULL ARGS_TO_SKIP determine function parameters to remove
!      from new version.
!      If SKIP_RETURN is true, the new version will return void.
       If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
       If non_NULL NEW_ENTRY determine new entry BB of the clone.
  
       If TARGET_ATTRIBUTES is non-null, when creating a new declaration,
       add the attributes to DECL_ATTRIBUTES.  And call valid_attribute_p
--- 1024,1035 ----
       TREE_MAP is a mapping of tree nodes we want to replace with
       new ones (according to results of prior analysis).
  
!      If non-NULL PARAM_ADJUSTMENTS determine how function formal parameters
!      should be modified in the new version and if it should return void.
       If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
       If non_NULL NEW_ENTRY determine new entry BB of the clone.
+      SUFFIX is a string that will be used to create a new name for the new
+      function.
  
       If TARGET_ATTRIBUTES is non-null, when creating a new declaration,
       add the attributes to DECL_ATTRIBUTES.  And call valid_attribute_p
*************** struct GTY((tag ("SYMTAB_FUNCTION"))) cg
*** 1039,1045 ****
      (vec<cgraph_edge *> redirect_callers,
       vec<ipa_replace_map *, va_gc> *tree_map,
       ipa_param_adjustments *param_adjustments,
!      bitmap bbs_to_copy, basic_block new_entry_block, const char *clone_name,
       tree target_attributes = NULL_TREE, bool version_decl = true);
  
    /* Insert a new cgraph_function_version_info node into cgraph_fnver_htab
--- 1044,1050 ----
      (vec<cgraph_edge *> redirect_callers,
       vec<ipa_replace_map *, va_gc> *tree_map,
       ipa_param_adjustments *param_adjustments,
!      bitmap bbs_to_copy, basic_block new_entry_block, const char *suffix,
       tree target_attributes = NULL_TREE, bool version_decl = true);
  
    /* Insert a new cgraph_function_version_info node into cgraph_fnver_htab
diff -Nrcpad gcc-16-20250504/gcc/cgraphclones.cc gcc-16-20250511/gcc/cgraphclones.cc
*** gcc-16-20250504/gcc/cgraphclones.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cgraphclones.cc	Sun May 11 22:32:08 2025
*************** cgraph_node::expand_all_artificial_thunk
*** 307,318 ****
        e = e->next_caller;
  }
  
  void
  dump_callgraph_transformation (const cgraph_node *original,
  			       const cgraph_node *clone,
  			       const char *suffix)
  {
!   if (symtab->ipa_clones_dump_file)
      {
        fprintf (symtab->ipa_clones_dump_file,
  	       "Callgraph clone;%s;%d;%s;%d;%d;%s;%d;%s;%d;%d;%s\n",
--- 307,326 ----
        e = e->next_caller;
  }
  
+ /* Dump information about creation of a call graph node clone to the dump file
+    created by the -fdump-ipa-clones option.  ORIGINAL is the function being
+    cloned, CLONE is the new clone.  SUFFIX is a string that helps identify the
+    reason for cloning, often it is the suffix used by a particular IPA pass to
+    create unique function names.  SUFFIX can be NULL and in that case the
+    dumping will not take place, which must be the case only for helper clones
+    which will never be emitted to the output.  */
+ 
  void
  dump_callgraph_transformation (const cgraph_node *original,
  			       const cgraph_node *clone,
  			       const char *suffix)
  {
!   if (suffix && symtab->ipa_clones_dump_file)
      {
        fprintf (symtab->ipa_clones_dump_file,
  	       "Callgraph clone;%s;%d;%s;%d;%d;%s;%d;%s;%d;%d;%s\n",
*************** localize_profile (cgraph_node *n)
*** 358,366 ****
  
     If the new node is being inlined into another one, NEW_INLINED_TO should be
     the outline function the new one is (even indirectly) inlined to.  All hooks
!    will see this in node's inlined_to, when invoked.  Can be NULL if the
     node is not inlined.
  
     If PARAM_ADJUSTMENTS is non-NULL, the parameter manipulation information
     will be overwritten by the new structure.  Otherwise the new node will
     share parameter manipulation information with the original node.  */
--- 366,379 ----
  
     If the new node is being inlined into another one, NEW_INLINED_TO should be
     the outline function the new one is (even indirectly) inlined to.  All hooks
!    will see this in node's inlined_to, when invoked.  Should be NULL if the
     node is not inlined.
  
+    SUFFIX is string that is appended to the original name, it should only be
+    NULL if NEW_INLINED_TO is not NULL or if the clone being created is
+    temporary and a record about it should not be added into the ipa-clones dump
+    file.
+ 
     If PARAM_ADJUSTMENTS is non-NULL, the parameter manipulation information
     will be overwritten by the new structure.  Otherwise the new node will
     share parameter manipulation information with the original node.  */
*************** cgraph_node::create_version_clone (tree
*** 994,1004 ****
     TREE_MAP is a mapping of tree nodes we want to replace with
     new ones (according to results of prior analysis).
  
!    If non-NULL ARGS_TO_SKIP determine function parameters to remove
!    from new version.
!    If SKIP_RETURN is true, the new version will return void.
     If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
     If non_NULL NEW_ENTRY determine new entry BB of the clone.
  
     If TARGET_ATTRIBUTES is non-null, when creating a new declaration,
     add the attributes to DECL_ATTRIBUTES.  And call valid_attribute_p
--- 1007,1018 ----
     TREE_MAP is a mapping of tree nodes we want to replace with
     new ones (according to results of prior analysis).
  
!    If non-NULL PARAM_ADJUSTMENTS determine how function formal parameters
!    should be modified in the new version and if it should return void.
     If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
     If non_NULL NEW_ENTRY determine new entry BB of the clone.
+    SUFFIX is a string that will be used to create a new name for the new
+    function.
  
     If TARGET_ATTRIBUTES is non-null, when creating a new declaration,
     add the attributes to DECL_ATTRIBUTES.  And call valid_attribute_p
diff -Nrcpad gcc-16-20250504/gcc/cobol/ChangeLog gcc-16-20250511/gcc/cobol/ChangeLog
*** gcc-16-20250504/gcc/cobol/ChangeLog	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/ChangeLog	Sun May 11 22:32:08 2025
***************
*** 1,3 ****
--- 1,205 ----
+ 2025-05-10  Robert Dubner  <rdubner@symas.com>
+ 
+ 	PR cobol/119337
+ 	* Make-lang.in: Change how $(FLEX) is invoked.
+ 	* cdf.y: Change parser tokens.
+ 	* gcobc: Changed how name is inferred for PR119337
+ 	* gcobol.1: Documentation for SOURCE format heuristic
+ 	* genapi.cc: Eliminate __gg__odo_violation.
+ 	(parser_display_field): Change comment.
+ 	* genutil.cc:Eliminate __gg__odo_violation.
+ 	(REFER): New macro for analyzing subscript/refmod calculations.
+ 	(get_integer_value): Likewise.
+ 	(get_data_offset): Eliminate __gg__odo_violation.
+ 	(scale_by_power_of_ten_N): Eliminate unnecessary var_decl_rdigits operation.
+ 	(refer_is_clean): Check for FldLiteralN.
+ 	(REFER_CHECK): Eliminate.
+ 	(refer_refmod_length): Streamline var_decl_rdigits processing.
+ 	(refer_fill_depends): Likewise.
+ 	(refer_offset): Streamline processing when FldLiteralN.
+ 	(refer_size): Tag with REFER macro.
+ 	(refer_size_dest): Likewise.
+ 	(refer_size_source): Likewise.
+ 	* genutil.h (get_integer_value): Delete declaration for odo_violation;
+ 	change comment for get_integer_value
+ 	(REFER_CHECK): Delete declaration.
+ 	(refer_check): Delete #define.
+ 	* lexio.cc (is_fixed_format): Changes for source format auto-detect.
+ 	(is_reference_format): Likewise.
+ 	(check_source_format_directive): Likewise.
+ 	(valid_sequence_area): Likewise.
+ 	(is_p): Likewise.
+ 	(is_program_id): Likewise.
+ 	(likely_nist_file): Likewise.
+ 	(infer_reference_format): Likewise.
+ 	(cdftext::free_form_reference_format): Likewise.
+ 	* parse.y: Token changes.
+ 	* parse_ante.h (class tokenset_t):  Likewise.
+ 	(class current_tokens_t):  Likewise.
+ 	(cmd_or_env_special_of): Likewise.
+ 	* scan.l:  Likewise.
+ 	* scan_ante.h (bcomputable): Likewise.
+ 	(keyword_alias_add): Likewise.
+ 	(struct bint_t): Likewise.
+ 	(binary_integer_usage): Likewise.
+ 	(binary_integer_usage_of): Likewise.
+ 	* scan_post.h (start_condition_str): Likewise.
+ 	* symbols.cc (symbol_table_init): Formatting.
+ 	* symbols.h (struct cbl_field_data_t): Add "input" method to field_data_t.
+ 	(keyword_alias_add): Add forward declaration.
+ 	(binary_integer_usage_of): Likewise.
+ 	* token_names.h: Change list of tokens.
+ 	* util.cc (iso_cobol_word): Change list of COBOL reserved words.
+ 
+ 2025-05-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR cobol/119217
+ 	* symbols.h (NAME_MAX): Define fallback.
+ 
+ 2025-05-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR cobol/119217
+ 	* dts.h (csub_match): Initialize rm_so, rm_eo fields explicitly.
+ 
+ 2025-05-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR cobol/119217
+ 	* cdf-copy.cc (GLOB_BRACE): Define fallback.
+ 	(GLOB_TILDE): Likewise.
+ 
+ 2025-05-05  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cdf.y: Exceptions.
+ 	* except.cc (cbl_enabled_exception_t::dump): Likewise.
+ 	(cbl_enabled_exceptions_t::dump): Likewise.
+ 	(cbl_enabled_exceptions_t::status): Likewise.
+ 	(cbl_enabled_exceptions_t::encode): Likewise.
+ 	(cbl_enabled_exceptions_t::turn_on_off): Likewise.
+ 	(cbl_enabled_exceptions_t::match): Likewise.
+ 	(declarative_runtime_match): Likewise. Likewise.
+ 	* exceptg.h (struct cbl_exception_files_t): Likewise.
+ 	(class exception_turn_t): Likewise.
+ 	(apply_cdf_turn): Likewise.
+ 	* genapi.cc (treeplet_fill_source): Use refer_offset().
+ 	(function_handle_from_name): Likewise.
+ 	(parser_initialize_programs): Likewise.
+ 	(parser_statement_begin): Likewise.
+ 	(array_of_long_long): Exceptions.
+ 	(parser_compile_ecs): Exceptions.
+ 	(parser_compile_dcls): Exceptions.
+ 	(store_location_stuff): Exceptions.
+ 	(initialize_variable_internal): Use refer_offset().
+ 	(compare_binary_binary): Use refer_offset().
+ 	(cobol_compare): Use refer_offset().
+ 	(paragraph_label): Formatting.
+ 	(parser_goto): Use refer_offset().
+ 	(parser_perform_times): Likewise.
+ 	(internal_perform_through_times): Likewise.
+ 	(parser_enter_file): Exceptions.
+ 	(psa_FldLiteralN): Add comment.
+ 	(parser_accept): Use refer_offset().
+ 	(parser_accept_command_line): Likewise.
+ 	(parser_accept_command_line_count): Likewise.
+ 	(parser_accept_envar): Likewise.
+ 	(parser_set_envar): Likewise.
+ 	(parser_display_internal): Likewise.
+ 	(parser_initialize_table): Likewise.
+ 	(parser_sleep): Likewise.
+ 	(parser_allocate): Likewise.
+ 	(parser_free): Likewise.
+ 	(parser_division): Likewise.
+ 	(parser_relop_long): Likewise.
+ 	(parser_see_stop_run): Likewise.
+ 	(parser_classify): Likewise.
+ 	(parser_file_add): Include symbol_table_index in __gg__file_init().
+ 	(parser_file_open): Use refer_offset().
+ 	(parser_file_write): Move forward declaration of store_location_stuff().
+ 	(parser_file_start): Use refer_offset().
+ 	(parser_inspect_conv): Likewise:
+ 	(parser_intrinsic_numval_c): Likewise:
+ 	(parser_intrinsic_subst): Likewise:
+ 	(parser_intrinsic_call_1): Likewise:
+ 	(parser_intrinsic_call_2): Likewise:
+ 	(parser_intrinsic_call_3): Likewise:
+ 	(parser_intrinsic_call_4): Likewise:
+ 	(parser_sort): Likewise:
+ 	(parser_return_start): Exceptions.
+ 	(parser_unstring): Use refer_offset().
+ 	(create_and_call): Likewise.
+ 	(parser_set_pointers): Use refer_offset().
+ 	(parser_program_hierarchy): Comment.
+ 	(parser_set_handled): Exceptions; removed.
+ 	(parser_set_file_number): Exceptions; removed.
+ 	(stash_exceptions): Exceptions; removed.
+ 	(parser_exception_prepare): Exceptions; removed.
+ 	(parser_match_exception): Exceptions; eliminate blob.
+ 	(parser_check_fatal_exception): Exceptions.
+ 	(parser_push_exception): Create.
+ 	(parser_pop_exception): Create.
+ 	(mh_identical): Use refer_offset().
+ 	(mh_source_is_literalN): Likewise.
+ 	(mh_dest_is_float): Likewise.
+ 	(mh_numeric_display): Likewise.
+ 	(mh_little_endian): Likewise.
+ 	(mh_source_is_group): Likewise.
+ 	(move_helper): Likewise.
+ 	(binary_initial_from_float128): Formatting; change error message.
+ 	(initial_from_float128): Change name to "initial_from_initial"
+ 	(initial_from_initial): Add one byte to allocation for figconsts.
+ 	(parser_symbol_add): Use initial_from_initial().
+ 	(parser_symbol_add): Eliminate unneeded logic around actually_create...
+ 	* genapi.h: Exceptions.
+ 	* genmath.cc (fast_add): Use refer_offset().
+ 	(fast_subtract): Likewise.
+ 	(fast_multiply): Likewise.
+ 	(fast_divide): Likewise.
+ 	* genutil.cc: Exceptions; various global definitions.
+ 	(get_integer_value): Comment.
+ 	(get_data_offset_dest): Eliminate.
+ 	(get_data_offset_source): Rename to get_data_offset().
+ 	(get_data_offset): Use refer_offset().
+ 	(get_binary_value): Likewise; eliminate use of literal_decl_node.
+ 	(build_array_of_treeplets): Likewise.
+ 	(build_array_of_fourplets): Likewise.
+ 	(REFER_CHECK): Comment:
+ 	(refer_refmod_length): Use get_any_capacity(); use refer_offset;
+ 	set reflen to integer_one_node.
+ 	(refer_offset_dest): Change name to refer_offset.
+ 	(refer_offset): Use get_data_offset().
+ 	(refer_size_dest): Change name to refer_size().
+ 	(refer_size): Use get_any_capacity().
+ 	(refer_offset_source): Use refer_offset().
+ 	(refer_size_source): Likewise.
+ 	(qualified_data_source): Likewise.
+ 	(qualified_data_dest): Likewise.
+ 	(qualified_data_location): Likewise.
+ 	* genutil.h: Exceptions; changes to global declarations.
+ 	* lexio.cc (likely_nist_file): Added to detect NIST file format.
+ 	(cdftext::free_form_reference_format): Handle NIST file format.
+ 	* parse.y: (strip_trailing_zeroes): Added.
+ 	Changes for exceptions.
+ 	* parse_ante.h (parse_error_inc): Likewise.
+ 	(YYLLOC_DEFAULT): Likewise.
+ 	(static_cast): Likewise.
+ 	(is_cobol_word): Change to is_cobol_charset.
+ 	(is_cobol_charset): Refine allowed characters.
+ 	(require_numeric): Change to require integer.
+ 	(require_integer): Likewise.
+ 	(current_enabled_ecs): Exceptions.
+ 	(is_integer_literal): Change interpretation.
+ 	(procedure_division_ready): Exceptions.
+ 	(statement_epilog): Likewise.
+ 	(statement_begin): Likewise.
+ 	* show_parse.h: Changes to GCOBOL_SHOW handling.
+ 	* structs.cc: Add symbol_index to cblc_file_t structure.
+ 	* symbols.cc (field_str): Repair .initial handling in FldLiteralN.
+ 	* symbols.h (struct cbl_field_t): Eliminate literal_decl_node.
+ 	(current_enabled_ecs): Exceptions.
+ 	* util.cc (cbl_message): Add final newline to error message.
+ 	(ftoupper): Added.
+ 	(iso_cobol_word): Add list of ISO reserved words.
+ 	* util.h (ftoupper): Added.
+ 
  2025-05-02  Jakub Jelinek  <jakub@redhat.com>
  
  	PR cobol/119364
diff -Nrcpad gcc-16-20250504/gcc/cobol/Make-lang.in gcc-16-20250511/gcc/cobol/Make-lang.in
*** gcc-16-20250504/gcc/cobol/Make-lang.in	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/Make-lang.in	Sun May 11 22:32:08 2025
*************** cobol/cdf.cc: cobol/cdf.y
*** 157,163 ****
  FLEX_WARNING = warning, dangerous trailing context
  
  cobol/scan.cc: cobol/scan.l
! 	$(FLEX) -o$@ $(LFLAGS) $< >$@~ 2>&1
  	awk  '! /$(FLEX_WARNING)/ {print > "/dev/stderr"; nerr++}	\
  	     END {print "$(FLEX):", NR, "messages" > "/dev/stderr";	\
  		  exit nerr}' $@~
--- 157,163 ----
  FLEX_WARNING = warning, dangerous trailing context
  
  cobol/scan.cc: cobol/scan.l
! 	$(FLEX) -o$@ $(LFLAGS) $< 2>$@~ || { cat $@~ >&1; exit 1; }
  	awk  '! /$(FLEX_WARNING)/ {print > "/dev/stderr"; nerr++}	\
  	     END {print "$(FLEX):", NR, "messages" > "/dev/stderr";	\
  		  exit nerr}' $@~
diff -Nrcpad gcc-16-20250504/gcc/cobol/cdf-copy.cc gcc-16-20250511/gcc/cobol/cdf-copy.cc
*** gcc-16-20250504/gcc/cobol/cdf-copy.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/cdf-copy.cc	Sun May 11 22:32:08 2025
***************
*** 42,47 ****
--- 42,57 ----
  #include "util.h"
  #include "copybook.h"
  
+ // GLOB_BRACE and GLOB_TILDE are BSD extensions.  Provide fallback definitions
+ // if necessary.
+ #ifndef GLOB_BRACE
+ #define GLOB_BRACE 0
+ #endif
+ 
+ #ifndef GLOB_TILDE
+ #define GLOB_TILDE 0
+ #endif
+ 
  #define COUNT_OF(X) (sizeof(X) / sizeof(X[0]))
  
  /*
diff -Nrcpad gcc-16-20250504/gcc/cobol/cdf.y gcc-16-20250511/gcc/cobol/cdf.y
*** gcc-16-20250504/gcc/cobol/cdf.y	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/cdf.y	Sun May 11 22:32:08 2025
*************** void input_file_status_notify();
*** 155,229 ****
  static char *display_msg;
  const char * keyword_str( int token );
  
! static class exception_turns_t {
!   typedef std::list<size_t> filelist_t;
!   typedef std::map<ec_type_t, filelist_t> ec_filemap_t;
!   ec_filemap_t exceptions;
!  public:
!   bool enabled, location;
! 
!   exception_turns_t() : enabled(false), location(false) {};
! 
!   const ec_filemap_t& exception_files() const { return exceptions; }
! 
!   struct args_t {
!     size_t nexception;
!     cbl_exception_files_t *exceptions;
!   };
! 
!   bool add_exception( ec_type_t type, const filelist_t files = filelist_t() ) {
!     ec_disposition_t disposition = ec_type_disposition(type);
!     if( disposition != ec_implemented(disposition) ) {
! 	cbl_unimplementedw("CDF: exception '%s'", ec_type_str(type));
!     }
!     auto elem = exceptions.find(type);
!     if( elem != exceptions.end() ) return false; // cannot add twice
! 
!     exceptions[type] = files;
!     return true;
!   }
! 
!   args_t args() const {
!     args_t args;
!     args.nexception = exceptions.size();
!     args.exceptions = NULL;
!     if( args.nexception ) {
!       args.exceptions = new cbl_exception_files_t[args.nexception];
!     }
!     std::transform( exceptions.begin(), exceptions.end(), args.exceptions,
!                     []( auto& input ) {
!                       cbl_exception_files_t output;
!                       output.type = input.first;
!                       output.nfile = input.second.size();
!                       output.files = NULL;
!                       if( output.nfile ) {
!                         output.files = new size_t[output.nfile];
!                         std::copy(input.second.begin(),
!                                        input.second.end(),
!                                        output.files );
!                       }
!                       return output;
!                     } );
!     return args;
!   }
! 
!   void clear() {
!     for( auto& ex : exceptions ) {
!       ex.second.clear();
!     }
!     exceptions.clear();
!     enabled = location = false;
!   }
! 
! } exception_turns;
! 
! 
! static bool
! apply_cdf_turn( exception_turns_t& turns ) {
!   for( auto elem : turns.exception_files() ) {
      std::set<size_t> files(elem.second.begin(), elem.second.end());
!     enabled_exceptions.turn_on_off(turns.enabled,
!                                    turns.location,
                                     elem.first, files);
    }
    if( getenv("GCOBOL_SHOW") ) enabled_exceptions.dump();
--- 155,168 ----
  static char *display_msg;
  const char * keyword_str( int token );
  
! exception_turn_t exception_turn;
! 			
! bool
! apply_cdf_turn( const exception_turn_t& turn ) {
!   for( auto elem : turn.exception_files() ) {
      std::set<size_t> files(elem.second.begin(), elem.second.end());
!     enabled_exceptions.turn_on_off(turn.enabled,
!                                    turn.location,
                                     elem.first, files);
    }
    if( getenv("GCOBOL_SHOW") ) enabled_exceptions.dump();
*************** apply_cdf_turn( exception_turns_t& turns
*** 241,246 ****
--- 180,186 ----
      std::set<size_t> *files;
  }
  
+ %printer { fprintf(yyo, "'%s'", $$? "true" : "false" ); } <boolean>
  %printer { fprintf(yyo, "'%s'", $$ ); } <string>
  %printer { fprintf(yyo, "%s '%s'",
  		   keyword_str($$.token),
*************** apply_cdf_turn( exception_turns_t& turns
*** 253,310 ****
  %type	<cdfarg>	namelit name_any name_one
  %type	<string>	name subscript subscripts inof
  %token <boolean>  BOOL
! %token <number>  FEATURE 363  NUMBER 302  EXCEPTION_NAME 280    "EXCEPTION NAME"
  
  %type	<cdfval>	cdf_expr
  %type	<cdfval>	cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
  %type	<cdfval>	cdf_factor
! %type	<boolean>	cdf_cond_expr override
  
  %type   <file>		filename
  %type   <files>         filenames
  
! %token BY 476
! %token COPY 360
! %token CDF_DISPLAY 382    ">>DISPLAY"
! %token IN 595
  %token NAME 286
! %token NUMSTR 304    "numeric literal"
! %token OF 676
! %token PSEUDOTEXT 711
! %token REPLACING 733
! %token LITERAL 297
! %token SUPPRESS 374
  
! %token LSUB 365    "("
! %token SUBSCRIPT 373  RSUB 370    ")"
  
! %token CDF_DEFINE 381    ">>DEFINE"
! %token CDF_IF 383    ">>IF"
! %token CDF_ELSE 384    ">>ELSE"
! %token CDF_END_IF 385    ">>END-IF"
! %token CDF_EVALUATE 386    ">>EVALUATE"
! %token CDF_WHEN 387    ">>WHEN"
! %token CDF_END_EVALUATE 388    ">>END-EVALUATE"
  
! %token AS 458  CONSTANT 359  DEFINED 361
  %type	<boolean>	     DEFINED
! %token OTHER 688  PARAMETER_kw 366    "PARAMETER"
! %token OFF 677  OVERRIDE 367
! %token THRU 929
! %token TRUE_kw 803    "True"
  
! %token CALL_COBOL 389    "CALL"
! %token CALL_VERBATIM 390    "CALL (as C)"
  
! %token TURN 805  CHECKING 486  LOCATION 639  ON 679  WITH 831
  
! %left OR 930
! %left AND 931
! %right NOT 932
! %left '<'  '>'  '='  NE 933  LE 934  GE 935
  %left '-'  '+'
  %left '*'  '/'
! %right NEG 937
  
  %define api.prefix {ydf}
  %define api.token.prefix{YDF_}
--- 193,250 ----
  %type	<cdfarg>	namelit name_any name_one
  %type	<string>	name subscript subscripts inof
  %token <boolean>  BOOL
! %token <number>  FEATURE 365  NUMBER 303  EXCEPTION_NAME 280    "EXCEPTION NAME"
  
  %type	<cdfval>	cdf_expr
  %type	<cdfval>	cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
  %type	<cdfval>	cdf_factor
! %type	<boolean>	cdf_cond_expr override except_check
  
  %type   <file>		filename
  %type   <files>         filenames
  
! %token BY 478
! %token COPY 362
! %token CDF_DISPLAY 384    ">>DISPLAY"
! %token IN 597
  %token NAME 286
! %token NUMSTR 305    "numeric literal"
! %token OF 678
! %token PSEUDOTEXT 713
! %token REPLACING 735
! %token LITERAL 298
! %token SUPPRESS 376
  
! %token LSUB 367    "("
! %token SUBSCRIPT 375  RSUB 372    ")"
  
! %token CDF_DEFINE 383    ">>DEFINE"
! %token CDF_IF 385    ">>IF"
! %token CDF_ELSE 386    ">>ELSE"
! %token CDF_END_IF 387    ">>END-IF"
! %token CDF_EVALUATE 388    ">>EVALUATE"
! %token CDF_WHEN 389    ">>WHEN"
! %token CDF_END_EVALUATE 390    ">>END-EVALUATE"
  
! %token AS 460  CONSTANT 361  DEFINED 363
  %type	<boolean>	     DEFINED
! %token OTHER 690  PARAMETER_kw 368    "PARAMETER"
! %token OFF 679  OVERRIDE 369
! %token THRU 931
! %token TRUE_kw 805    "True"
  
! %token CALL_COBOL 391    "CALL"
! %token CALL_VERBATIM 392    "CALL (as C)"
  
! %token TURN 807  CHECKING 488  LOCATION 641  ON 681  WITH 833
  
! %left OR 932
! %left AND 933
! %right NOT 934
! %left '<'  '>'  '='  NE 935  LE 936  GE 937
  %left '-'  '+'
  %left '*'  '/'
! %right NEG 939
  
  %define api.prefix {ydf}
  %define api.token.prefix{YDF_}
*************** override:	%empty   { $$ = false; }
*** 443,450 ****
  
  cdf_turn:	TURN except_names except_check
  		{
! 		  apply_cdf_turn(exception_turns);
! 		  exception_turns.clear();
  		}
  		;
  
--- 383,390 ----
  
  cdf_turn:	TURN except_names except_check
  		{
! 		  apply_cdf_turn(exception_turn);
! 		  exception_turn.clear();
  		}
  		;
  
*************** except_names: 	except_name
*** 463,484 ****
  		;
  except_name:	EXCEPTION_NAME[ec] {
  		  assert($ec != ec_none_e);
! 		  exception_turns.add_exception(ec_type_t($ec));
  		}
  	|	EXCEPTION_NAME[ec] filenames {
  		  assert($ec != ec_none_e);
! 		  std::list<size_t> files;
! 		  std::copy( $filenames->begin(), $filenames->end(),
! 		                  std::back_inserter(files) );
! 		  exception_turns.add_exception(ec_type_t($ec), files);
  		}
  		;
  
! except_check:	CHECKING on  { exception_turns.enabled = true; }
! 	|	CHECKING OFF { exception_turns.enabled = false; }
  	|	CHECKING on with LOCATION
  		{
! 		  exception_turns.enabled = exception_turns.location = true;
  		}
  		;
  
--- 403,422 ----
  		;
  except_name:	EXCEPTION_NAME[ec] {
  		  assert($ec != ec_none_e);
! 		  exception_turn.add_exception(ec_type_t($ec));
  		}
  	|	EXCEPTION_NAME[ec] filenames {
  		  assert($ec != ec_none_e);
! 		  std::list<size_t> files($filenames->begin(), $filenames->end());
! 		  exception_turn.add_exception(ec_type_t($ec), files);
  		}
  		;
  
! except_check:	CHECKING on  { $$ = exception_turn.enable(true); }
! 	|	CHECKING OFF { $$ = exception_turn.enable(false); }
  	|	CHECKING on with LOCATION
  		{
! 		  $$ = exception_turn.enable(true, true);
  		}
  		;
  
*************** cdf_if:		CDF_IF cdf_cond_expr {
*** 510,516 ****
  		  scanner_parsing(YDF_CDF_IF, $2);
  		}
  	|	CDF_IF error {
- 		  ////if( scanner_parsing() ) yyerrok;
  		} CDF_END_IF { // not pushed, don't pop
  		  if( ! scanner_parsing() ) YYACCEPT;
  		}
--- 448,453 ----
*************** cdf_eval_obj:	cdf_cond_expr
*** 529,546 ****
          ;
  
  cdf_cond_expr:	BOOL
! 	|	NAME DEFINED[maybe]
  		{
  		  auto p = dictionary.find($1);
  		  bool found = p != dictionary.end();
! 		  if( !$maybe ) found = ! found;
! 		  if( ! found ) {
! 		    $$ = !$2;
! 		    dbgmsg("CDF: %s not found in dictionary (result %s)",
  			   $1, $$? "true" : "false");
  		  } else {
! 		    $$ = $2;
! 		    dbgmsg("CDF: %s found in dictionary (result %s)",
  			   $1, $$? "true" : "false");
  		  }
  		}
--- 466,482 ----
          ;
  
  cdf_cond_expr:	BOOL
! 	|	NAME DEFINED
  		{
  		  auto p = dictionary.find($1);
  		  bool found = p != dictionary.end();
! 		  if( !$DEFINED ) found = ! found;
! 		  $$ = found;
! 		  if( found ) {
! 		    dbgmsg("CDF: %s found in dictionary (result %s)",
  			   $1, $$? "true" : "false");
  		  } else {
! 		    dbgmsg("CDF: %s not found in dictionary (result %s)",
  			   $1, $$? "true" : "false");
  		  }
  		}
diff -Nrcpad gcc-16-20250504/gcc/cobol/dts.h gcc-16-20250511/gcc/cobol/dts.h
*** gcc-16-20250504/gcc/cobol/dts.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/dts.h	Sun May 11 22:32:08 2025
*************** namespace dts {
*** 33,39 ****
        : input(input)
        , first(NULL), second(NULL), matched(false)
      {
!       static regmatch_t empty = { -1, -1 };
        regmatch_t& self(*this);
        self = empty;
      }
--- 33,40 ----
        : input(input)
        , first(NULL), second(NULL), matched(false)
      {
!       static regmatch_t empty;
!       empty.rm_so = empty.rm_eo = -1;
        regmatch_t& self(*this);
        self = empty;
      }
diff -Nrcpad gcc-16-20250504/gcc/cobol/except.cc gcc-16-20250511/gcc/cobol/except.cc
*** gcc-16-20250504/gcc/cobol/except.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/except.cc	Sun May 11 22:32:08 2025
***************
*** 43,48 ****
--- 43,49 ----
  #include "gengen.h"
  #include "../../libgcobol/exceptl.h"
  #include "util.h"
+ #include "genutil.h"
  
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
*************** ec_level( ec_type_t ec ) {
*** 74,176 ****
    return 3;
  }
  
  cbl_enabled_exceptions_t enabled_exceptions;
  
  void
  cbl_enabled_exceptions_t::dump() const {
    if( empty() ) {
!     cbl_message(2,  "cbl_enabled_exceptions_t:  no exceptions" );
      return;
    }
    int i = 1;
    for( auto& elem : *this ) {
!     cbl_message(2, "cbl_enabled_exceptions_t: %2d  {%s, %s, %s, %zu}",
             i++,
!            elem.enabled?  " enabled" : "disabled",
!            elem.location? "location" : "    none",
             ec_type_str(elem.ec),
             elem.file );
    }
  }
  
  
! bool
  cbl_enabled_exceptions_t::turn_on_off( bool enabled,
                                         bool location,
                                         ec_type_t type,
                                         std::set<size_t> files )
  {
!   // A Level 3 EC is added unilaterally; it can't knock out a lower level.
    if( ec_level(type) == 3 ) {
      if( files.empty() ) {
!       auto elem = cbl_enabled_exception_t(enabled, location, type);
!       apply(elem);
!       return true;
      }
  
      for( size_t file : files ) {
!       auto elem = cbl_enabled_exception_t(enabled, location, type, file);
!       apply(elem);
      }
!     return true;
    }
  
!   // std::set::erase_if became available only in C++20.
!   if( enabled ) { // remove any disabled
      if( files.empty() ) {
!       auto p = begin();
!       while( p != end() ) {
! 	if( !p->enabled && ec_cmp(type, p->ec) ) {
! 	  p = erase(p);
! 	} else {
! 	  ++p;
! 	}
!       }
!     } else {
!       for( size_t file: files ) {
!         auto p = begin();
!         while( p != end() ) {
! 	  if( !p->enabled && file == p->file && ec_cmp(type, p->ec) ) {
! 	    p = erase(p);
! 	  } else {
! 	    ++p;
! 	  }
! 	}
!       }
      }
!     auto elem = cbl_enabled_exception_t(enabled, location, type);
!     apply(elem);
!     return true;
    }
    assert(!enabled);
    assert(ec_level(type) < 3);
  
    if( files.empty() ) {
      if( type == ec_all_e ) {
        clear();
!       return true;
      }
!     // Remove any matching Level-2 or Level-3 ECs, regardless of their files.
      auto p = begin();
      while( end() != (p = std::find_if( begin(), end(),
                                         [ec = type]( const auto& elem ) {
                                           return
-                                            elem.enabled &&
                                             elem.ec != ec_all_e &&
                                             ec_cmp(ec, elem.ec); } )) ) {
        erase(p);
      }
!     // Keep the EC as an exception if a higher-level would othewise apply.
      p = std::find_if( begin(), end(),
                        [ec = type]( const auto& elem ) {
                          return
-                           elem.enabled &&
                            (elem.ec == ec_all_e || elem.ec < ec) &&
                            elem.file == 0 &&
                            ec_cmp(ec, elem.ec); } );
      if( p != end() ) {
!       auto elem = cbl_enabled_exception_t(enabled, location, type);
!       apply(elem);
      }
    } else {
      // Remove any matching or lower-level EC for the same file.
--- 75,213 ----
    return 3;
  }
  
+ void
+ cbl_enabled_exception_t::dump( int i ) const {
+   cbl_message(2, "cbl_enabled_exception_t: %2d  {%s, %s, %s, %zu}",
+ 	      i,
+ 	      location? "location" : "    none",
+ 	      ec_type_str(ec),
+ 	      file );
+ }
+ 
  cbl_enabled_exceptions_t enabled_exceptions;
  
  void
  cbl_enabled_exceptions_t::dump() const {
+   extern int yydebug;
+   int debug = 1;
+   std::swap(debug, yydebug); // dbgmsg needs yydebug
+ 
    if( empty() ) {
!     dbgmsg("cbl_enabled_exceptions_t:  no exceptions" );
!     std::swap(debug, yydebug);
      return;
    }
    int i = 1;
    for( auto& elem : *this ) {
!     dbgmsg("cbl_enabled_exceptions_t: %2d  {%s, %s, %zu}",
             i++,
!            elem.location? "with location" : "  no location", 
             ec_type_str(elem.ec),
             elem.file );
    }
+   std::swap(debug, yydebug);
  }
  
+ uint32_t 
+ cbl_enabled_exceptions_t::status() const {
+   uint32_t status_word = 0;
+   for( const auto& ena : *this ) {
+     status_word |= (EC_ALL_E & ena.ec );
+   }
+   return status_word;
+ }
  
! std::vector<uint64_t>
! cbl_enabled_exceptions_t::encode() const {
!   std::vector<uint64_t> encoded;
!   auto p = std::back_inserter(encoded);
!   for( const auto& ec : *this ) {
!     *p++ = ec.location;
!     *p++ = ec.ec;
!     *p++ = ec.file;
!   }
!   return encoded;
! }
! 
! void
  cbl_enabled_exceptions_t::turn_on_off( bool enabled,
                                         bool location,
                                         ec_type_t type,
                                         std::set<size_t> files )
  {
!   // Update current enabled ECs tree on leaving this function. 
!   class update_parser_t {
!     const cbl_enabled_exceptions_t& ecs;
!   public:
!     update_parser_t(const cbl_enabled_exceptions_t& ecs) : ecs(ecs) {}
!     ~update_parser_t() {
!       tree ena = parser_compile_ecs(ecs.encode());
!       current_enabled_ecs(ena);
!     }
!   } update_parser(*this);
!   
!   // A Level 3 EC is added unilaterally; it can't affect a higher level.
    if( ec_level(type) == 3 ) {
      if( files.empty() ) {
!       auto elem = cbl_enabled_exception_t(location, type);
!       apply(enabled, elem);
!       return;
      }
  
      for( size_t file : files ) {
!       auto elem = cbl_enabled_exception_t(location, type, file);
!       apply(enabled, elem);
      }
!     return;
    }
  
!   // A new Level 1 or Level 2 EC is likewise simply added. 
!   if( enabled ) {
      if( files.empty() ) {
!       auto elem = cbl_enabled_exception_t(location, type);
!       apply(enabled, elem);
!       return;
      }
!     for( size_t file: files ) {
!       auto elem = cbl_enabled_exception_t(location, type, file);
!       apply(enabled, elem);
!     }
!     return;
    }
+ 
    assert(!enabled);
    assert(ec_level(type) < 3);
  
+   /*
+    * >> TURN EC [files] CHECKING OFF
+    */
+   
    if( files.empty() ) {
+     // A Level 1 EC with no files disables all ECs
      if( type == ec_all_e ) {
        clear();
!       return;
      }
!     // Because TURN CHECKING OFF mentioned no files, Remove any matching
!     // Level-2 or Level-3 ECs, regardless of their files.
      auto p = begin();
      while( end() != (p = std::find_if( begin(), end(),
                                         [ec = type]( const auto& elem ) {
                                           return
                                             elem.ec != ec_all_e &&
                                             ec_cmp(ec, elem.ec); } )) ) {
        erase(p);
      }
!     // Keep the EC as an override if a higher-level would othewise apply.
      p = std::find_if( begin(), end(),
                        [ec = type]( const auto& elem ) {
                          return
                            (elem.ec == ec_all_e || elem.ec < ec) &&
                            elem.file == 0 &&
                            ec_cmp(ec, elem.ec); } );
      if( p != end() ) {
!       auto elem = cbl_enabled_exception_t(location, type);
!       apply(enabled, elem);
      }
    } else {
      // Remove any matching or lower-level EC for the same file.
*************** cbl_enabled_exceptions_t::turn_on_off( b
*** 179,211 ****
        while( end() != (p = std::find_if( begin(), end(),
                                           [ec = type, file]( const auto& elem ) {
                                             return
-                                              elem.enabled &&
                                               // ec is higher level and matches
                                               (ec == ec_all_e || ec <= elem.ec) &&
                                               file == elem.file &&
                                               ec_cmp(ec, elem.ec); } )) ) {
          erase(p);
        }
!       // Keep the EC as an exception if a higher-level would othewise apply.
        p = std::find_if( begin(), end(),
                          [ec = type, file]( const auto& elem ) {
                            return
-                             elem.enabled &&
                              (elem.ec == ec_all_e || elem.ec < ec) &&
                              file == elem.file &&
                              ec_cmp(ec, elem.ec); } );
        if( p != end() ) {
!         auto elem = cbl_enabled_exception_t(enabled, location, type, file);
!         apply(elem);
        }
      }
    }
! 
!   return true;
  }
  
  const cbl_enabled_exception_t *
! cbl_enabled_exceptions_t::match( ec_type_t type, size_t file ) {
    auto output = enabled_exception_match( begin(), end(), type, file );
    return output != end()? &*output : NULL;
  }
--- 216,245 ----
        while( end() != (p = std::find_if( begin(), end(),
                                           [ec = type, file]( const auto& elem ) {
                                             return
                                               // ec is higher level and matches
                                               (ec == ec_all_e || ec <= elem.ec) &&
                                               file == elem.file &&
                                               ec_cmp(ec, elem.ec); } )) ) {
          erase(p);
        }
!       // Keep the EC as an override if a higher-level would othewise apply.
        p = std::find_if( begin(), end(),
                          [ec = type, file]( const auto& elem ) {
                            return
                              (elem.ec == ec_all_e || elem.ec < ec) &&
                              file == elem.file &&
                              ec_cmp(ec, elem.ec); } );
        if( p != end() ) {
!         auto elem = cbl_enabled_exception_t(location, type, file);
!         apply(enabled, elem);
        }
      }
    }
!   return;
  }
  
  const cbl_enabled_exception_t *
! cbl_enabled_exceptions_t::match( ec_type_t type, size_t file ) const {
    auto output = enabled_exception_match( begin(), end(), type, file );
    return output != end()? &*output : NULL;
  }
*************** declarative_runtime_match( cbl_field_t *
*** 328,358 ****
    static auto yes = new_temporary(FldConditional);
    static auto psection = new_temporary(FldNumericBin5);
  
!   // Send blob, get declarative section index.
!   auto index = new_temporary(FldNumericBin5);
!   parser_match_exception(index, declaratives);
! 
!   auto p = declaratives->data.initial;
!   const auto dcls = reinterpret_cast<const cbl_declarative_t *>(p);
!   size_t ndcl = dcls[0].section; // overloaded
  
!   // Compare returned index to each section index.
!   for( auto p = dcls + 1; p < dcls + 1 + ndcl; p++ ) {
!     parser_set_numeric( psection, p->section );
!     parser_relop( yes, index, eq_op, psection );
!     parser_if( yes );
!     auto section = cbl_label_of(symbol_at(p->section));
!     parser_perform(section);
!     parser_label_goto(lave);
!     parser_else();
!     parser_fi();
    }
  
    parser_label_label(lave);
- 
-   // A performed declarative may clear the raised exception with RESUME.
-   // If not cleared and fatal, the default handler will exit.
-   parser_check_fatal_exception();
  }
  
  ec_type_t
--- 362,401 ----
    static auto yes = new_temporary(FldConditional);
    static auto psection = new_temporary(FldNumericBin5);
  
!   IF( var_decl_exception_code, ne_op, integer_zero_node ) {
!     // Send blob, get declarative section index.
!     auto index = new_temporary(FldNumericBin5);
!     parser_match_exception(index);
!     auto p = declaratives->data.initial;
!     const auto dcls = reinterpret_cast<const cbl_declarative_t *>(p);
!     size_t ndcl = dcls[0].section; // overloaded
  
!     // Compare returned index to each section index.
!     for( auto p = dcls + 1; p < dcls + 1 + ndcl; p++ ) {
!       parser_set_numeric( psection, p->section );
!       parser_relop( yes, index, eq_op, psection );
!       parser_if( yes );
!       auto section = cbl_label_of(symbol_at(p->section));
!       parser_push_exception();
!       parser_perform(section);
!       parser_pop_exception();
!       parser_label_goto(lave);
!       parser_else();
!       parser_fi();
!     }
    }
+   ELSE {
+     if( getenv("TRACE1") )
+       {
+ 	gg_printf(">>>>>>( %d )(%s) __gg__exception_code is zero\n",
+ 		  build_int_cst_type(INT, cobol_location().first_line),
+ 		  gg_string_literal(__func__),
+ 		  NULL_TREE);
+       }
+   }
+   ENDIF
  
    parser_label_label(lave);
  }
  
  ec_type_t
diff -Nrcpad gcc-16-20250504/gcc/cobol/exceptg.h gcc-16-20250511/gcc/cobol/exceptg.h
*** gcc-16-20250504/gcc/cobol/exceptg.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/exceptg.h	Sun May 11 22:32:08 2025
*************** ec_implemented( ec_disposition_t disposi
*** 44,61 ****
    return ec_disposition_t( size_t(disposition) & ~0x80 );
  }
  
- 
  // >>TURN arguments
! struct cbl_exception_files_t {
!   ec_type_t type;
!   size_t nfile;
!   size_t *files;
!   bool operator<( const cbl_exception_files_t& that ) {
!     return type < that.type;
    }
  };
  
  size_t symbol_declaratives_add( size_t program,
                                  const std::list<cbl_declarative_t>& dcls );
  
  #endif
--- 44,105 ----
    return ec_disposition_t( size_t(disposition) & ~0x80 );
  }
  
  // >>TURN arguments
! class exception_turn_t;
! bool apply_cdf_turn( const exception_turn_t& turn );
! 
! class exception_turn_t {
!   friend bool apply_cdf_turn( const exception_turn_t& turn );
!   typedef std::list<size_t> filelist_t;
!   typedef std::map<ec_type_t, filelist_t> ec_filemap_t;
!   ec_filemap_t exceptions;
!   bool enabled, location;
!  public:
! 
!   exception_turn_t() : enabled(false), location(false) {};
! 
!   exception_turn_t( ec_type_t ec, bool enabled = true )
!     : enabled(enabled)
!   {
!     add_exception(ec);
!   } 
! 
!   bool enable( bool enabled ) {
!     return this->enabled = enabled;
!   } 
!   bool enable( bool enabled, bool location ) {
!     this->location = location;
!     return this->enabled = enabled;
!   } 
! 
!   const ec_filemap_t& exception_files() const { return exceptions; }
! 
!   bool add_exception( ec_type_t type, const filelist_t files = filelist_t() ) {
!     ec_disposition_t disposition = ec_type_disposition(type);
!     if( disposition != ec_implemented(disposition) ) {
! 	cbl_unimplementedw("CDF: exception '%s'", ec_type_str(type));
!     }
!     auto elem = exceptions.find(type);
!     if( elem != exceptions.end() ) return false; // cannot add twice
! 
!     exceptions[type] = files;
!     return true;
!   }
! 
!   void clear() {
!     for( auto& ex : exceptions ) {
!       ex.second.clear();
!     }
!     exceptions.clear();
!     enabled = location = false;
    }
+ 
  };
  
  size_t symbol_declaratives_add( size_t program,
                                  const std::list<cbl_declarative_t>& dcls );
  
  #endif
+ 
+ 
+ 
diff -Nrcpad gcc-16-20250504/gcc/cobol/gcobc gcc-16-20250511/gcc/cobol/gcobc
*** gcc-16-20250504/gcc/cobol/gcobc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/gcobc	Sun May 11 22:32:08 2025
*************** do
*** 142,147 ****
--- 142,152 ----
  
      if [ "$pending_arg" ]
      then
+         case $pending_arg in
+             -o) output_name="$opt"  # capture named output file
+                 ;;
+         esac
+ 
          opts="$opts $pending_arg $opt"
          pending_arg=
          continue
*************** do
*** 392,398 ****
              ;;
          # -main
          # -nomain
!         # -o
          # -O0, -Ox
          -O | -O2 | -Os) warn "$opt"
                          ;;
--- 397,409 ----
              ;;
          # -main
          # -nomain
! 
!         -o) pending_arg=$opt
!             ;;
!         -o*) output_name=$opt ## non-empty means do not infer
!              opts="$opts $opt"
!             ;;
! 
          # -O0, -Ox
          -O | -O2 | -Os) warn "$opt"
                          ;;
*************** do
*** 432,438 ****
          -x) mode=
              ;;
  
!         *) opts="$opts $opt" # pass through
             ;;
      esac
  done
--- 443,465 ----
          -x) mode=
              ;;
  
!         -) output_name=a.out # nonnull to prevent overriding gcc default
!            opts="$opts /dev/stdin"
!            ;;
! 
!         *) 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"
!            fi    
!            opts="$opts $opt" # pass through
             ;;
      esac
  done
diff -Nrcpad gcc-16-20250504/gcc/cobol/gcobol.1 gcc-16-20250511/gcc/cobol/gcobol.1
*** gcc-16-20250504/gcc/cobol/gcobol.1	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/gcobol.1	Sun May 11 22:32:08 2025
*************** Define a CDF name (for use with
*** 97,104 ****
  to have the value of
  .Ar expr .
  .It Fl E
! Write the CDF-processed \*[lang] input to standard output in free-form
! reference format.  Certain non-\*[lang]  markers are included in the
  output to indicate where copybook files were included.  For
  line-number consistency with the input, blank lines are retained.
  .Pp
--- 97,105 ----
  to have the value of
  .Ar expr .
  .It Fl E
! Write the CDF-processed \*[lang] input to standard output in
! .Em "free-form reference format".
! Certain non-\*[lang] markers are included in the
  output to indicate where copybook files were included.  For
  line-number consistency with the input, blank lines are retained.
  .Pp
*************** and
*** 147,159 ****
  in that order.
  .It Fl ffixed-form
  Use strict
! .Em "Reference Format"
  in reading the \*[lang] input:
  72-character lines, with a 6-character sequence area, and an indicator
  column.  Data past column 72 are ignored.
  .It Fl ffree-form
  Force the \*[lang] input to be interpreted as
! .Em "free format" .
  Line breaks are insignificant, except that
  .Ql *
  at the start of a line acts as a comment marker.
--- 148,160 ----
  in that order.
  .It Fl ffixed-form
  Use strict
! .Em "fixed-form reference format"
  in reading the \*[lang] input:
  72-character lines, with a 6-character sequence area, and an indicator
  column.  Data past column 72 are ignored.
  .It Fl ffree-form
  Force the \*[lang] input to be interpreted as
! .Em "free-form reference format".
  Line breaks are insignificant, except that
  .Ql *
  at the start of a line acts as a comment marker.
*************** the entire program could appear on one l
*** 187,198 ****
  .Pp
  By default,
  .Nm
! auto-detects the source code format by examining the
! .Em "sequence number area"
! of the first line of the first file: if those characters are all
! digits or blanks, the file is assumed to be in
! .Em "reference format" ,
  with the indicator area in column 7.
  .Pp
  .
  .It Fl fcobol-exceptions Ar exception Op Ns , Ns Ar exception Ns ...
--- 188,210 ----
  .Pp
  By default,
  .Nm
! auto-detects the source code format by examining the line that
! contains the text "program-id".  When there are characters on past column 72 
! on that line, the file is assumed to be in 
! .Em "extended source format",
  with the indicator area in column 7.
+ Otherwise, columns 1-6 are examined. If those characters are all digits
+ or blanks, the file is assumed to be in
+ .Em "fixed-form reference format",
+ also with the indicator in column 7.
+ 
+ If not auto-detected as 
+ .Em "fixed-form reference format" 
+ or 
+ .Em "extended source format",
+ the file is assumed to be in 
+ .Em "free-form reference format".
+ 
  .Pp
  .
  .It Fl fcobol-exceptions Ar exception Op Ns , Ns Ar exception Ns ...
*************** to standard error as a warning message.
*** 1000,1008 ****
  may be one of:
  .Bl -tag -compact
  .It Sy FIXED
! Source conforms to \*[lang] Reference Format with unlimited line length.
  .It Sy FREE
! Line endings and indentation are ignored by the compiler, except that a
  .Ql "*"
  at the beginning of a line is recognized as a comment.
  .El
--- 1012,1023 ----
  may be one of:
  .Bl -tag -compact
  .It Sy FIXED
! Source conforms to \*[lang] 
! .Em "fixed-form reference format"
! with unlimited line length.
  .It Sy FREE
! Source conforms to \*[lang] 
! .Em "free-form reference format".
  .Ql "*"
  at the beginning of a line is recognized as a comment.
  .El
diff -Nrcpad gcc-16-20250504/gcc/cobol/genapi.cc gcc-16-20250511/gcc/cobol/genapi.cc
*** gcc-16-20250504/gcc/cobol/genapi.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/genapi.cc	Sun May 11 22:32:08 2025
*************** void
*** 117,123 ****
  treeplet_fill_source(TREEPLET &treeplet, cbl_refer_t &refer)
    {
    treeplet.pfield = gg_get_address_of(refer.field->var_decl_node);
!   treeplet.offset = refer_offset_source(refer);
    treeplet.length = refer_size_source(refer);
    }
  
--- 117,123 ----
  treeplet_fill_source(TREEPLET &treeplet, cbl_refer_t &refer)
    {
    treeplet.pfield = gg_get_address_of(refer.field->var_decl_node);
!   treeplet.offset = refer_offset(refer);
    treeplet.length = refer_size_source(refer);
    }
  
*************** function_handle_from_name(cbl_refer_t &n
*** 796,802 ****
      else
        {
        gg_memcpy(gg_get_address_of(function_handle),
!                 qualified_data_source(name),
                  sizeof_pointer);
        }
      return function_handle;
--- 796,802 ----
      else
        {
        gg_memcpy(gg_get_address_of(function_handle),
!                 qualified_data_location(name),
                  sizeof_pointer);
        }
      return function_handle;
*************** function_handle_from_name(cbl_refer_t &n
*** 837,843 ****
                                        "__gg__function_handle_from_name",
                                        build_int_cst_type(INT, current_function->our_symbol_table_index),
                                        gg_get_address_of(name.field->var_decl_node),
!                                       refer_offset_source(name),
                                        refer_size_source(  name),
                                        NULL_TREE)));
        }
--- 837,843 ----
                                        "__gg__function_handle_from_name",
                                        build_int_cst_type(INT, current_function->our_symbol_table_index),
                                        gg_get_address_of(name.field->var_decl_node),
!                                       refer_offset(name),
                                        refer_size_source(  name),
                                        NULL_TREE)));
        }
*************** parser_initialize_programs(size_t nprogs
*** 878,884 ****
    for( size_t i=0; i<nprogs; i++ )
      {
      tree function_handle = function_handle_from_name( progs[i],
!                                                       COBOL_FUNCTION_RETURN_TYPE);
      gg_call(VOID,
              "__gg__to_be_canceled",
              gg_cast(SIZE_T, function_handle),
--- 878,884 ----
    for( size_t i=0; i<nprogs; i++ )
      {
      tree function_handle = function_handle_from_name( progs[i],
!                                                     COBOL_FUNCTION_RETURN_TYPE);
      gg_call(VOID,
              "__gg__to_be_canceled",
              gg_cast(SIZE_T, function_handle),
*************** parser_initialize_programs(size_t nprogs
*** 886,916 ****
      }
    }
  
! void parser_statement_begin()
    {
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
      char ach[64];
!     snprintf  (ach, sizeof(ach),
                " yylineno %d first/last %d/%d",
                yylineno,
                cobol_location().first_line,
                cobol_location().last_line );
      SHOW_PARSE_TEXT(ach);
      SHOW_PARSE_END
      }
! 
  
    if( gg_get_current_line_number() == DEFAULT_LINE_NUMBER )
      {
!     // This code is prevents anomolies when the first line of a program is
!     // a PERFORM <proc> ... TEST AFTER ... UNTIL ...
      gg_set_current_line_number(CURRENT_LINE_NUMBER-1);
      gg_assign(var_decl_nop, build_int_cst_type(INT, 106));
      }
  
    gg_set_current_line_number(CURRENT_LINE_NUMBER);
    }
  
  static void
--- 886,1051 ----
      }
    }
  
! static
! tree
! array_of_long_long(const char *name, const std::vector<uint64_t>& vals)
!   {
!   // We need to create a file-static static array of 64-bit integers:
!   tree array_of_ulonglong_type = build_array_type_nelts(ULONGLONG, vals.size()+1);
!   tree array_of_ulonglong = gg_define_variable( array_of_ulonglong_type,
!                                                 name,
!                                                 vs_file_static);
!   // We have the array.  Now we need to build the constructor for it
!   tree constr = make_node(CONSTRUCTOR);
!   TREE_TYPE(constr) = array_of_ulonglong_type;
!   TREE_STATIC(constr)    = 1;
!   TREE_CONSTANT(constr)  = 1;
! 
!   // The first element of the array contains the number of elements to follow
!   CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr),
!                           build_int_cst_type(SIZE_T, 0),
!                           build_int_cst_type(ULONGLONG, vals.size()) );
!   for(size_t i=0; i<vals.size(); i++)
!     {
!     CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr),
!                             build_int_cst_type(SIZE_T, i+1),
!                             build_int_cst_type(ULONGLONG, vals[i]) );
!     }
!   DECL_INITIAL(array_of_ulonglong) = constr;
!   return array_of_ulonglong;
!   }
! 
! /*
!  * As ECs are enabled and disabled with >>TURN, the compiler updates its list
!  * of enabled ECs (and any files they apply to). It encodes this list as an
!  * array of integers.  parser_compile_ecs converts that array as a static
!  * compile-time vector, which it returns to the compiler.
!  *
!  * Before each statement, the compiler determines what possible EC handling the
!  * program can do.  If there's an overlap between potential ECs and
!  * Declaratives, it passes the current pair of static arrays to
!  * parser_statement_begin(), which installs them, for that statement, in the
!  * library.
!  *
!  * After each statement, to effect EC handling, the statement epilog calls uses
!  * parser_match_exception to invoke __gg_match_exception(), which returns the
!  * symbol table index of the matched Declarative, if any.  That "ladder"
!  * Performs the matched declarative, and execution continues with the next
!  * statement.
!  */
! tree parser_compile_ecs( const std::vector<uint64_t>& ecs )
!   {
!   char ach[32];
!   static int counter = 1;
!   sprintf(ach, "_ecs_table_%d", counter++);
!   tree retval =  array_of_long_long(ach, ecs);
!   SHOW_IF_PARSE(nullptr)
!     {
!     SHOW_PARSE_HEADER
!     char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", ecs.size(), retval);
!     SHOW_PARSE_TEXT(ach)
!     SHOW_PARSE_END
!     }
!   TRACE1
!     {
!     TRACE1_HEADER
!     char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", ecs.size(), retval);
!     TRACE1_TEXT_ABC("", ach, "");
!     TRACE1_END
!     }
!   return retval;
!   }
! 
! /*
!  * At the beginning of Procedure Division, we may encounter DECLARATIVES
!  * SECTION.  If so, the compiler composes a list of zero or more Declaratives
!  * as cbl_declarative_t, representing the USE statement of each
!  * Declarative. These are encoded as an array of integers, which are returned
!  * to the compiler for use by parser_statement_begin(). Although the list of
!  * declaratives never changes for a program, CALL may change which program is
!  * invoked, and thus the set of active Declaratives.  By passing them for each
!  * statement, code generation is relieved of referring to global variable.
!  */
! tree parser_compile_dcls( const std::vector<uint64_t>& dcls )
!   {
!   char ach[32];
!   static int counter = 1;
!   sprintf(ach, "_dcls_table_%d", counter++);
! 
!   tree retval =  array_of_long_long(ach, dcls);
!   SHOW_IF_PARSE(nullptr)
!     {
!     SHOW_PARSE_HEADER
!     char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", dcls.size(), retval);
!     SHOW_PARSE_TEXT(ach);
!     SHOW_PARSE_END
!     }
! 
!   TRACE1
!     {
!     TRACE1_HEADER
!     char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", dcls.size(), retval);
!     TRACE1_TEXT_ABC("", ach, "");
!     TRACE1_END
!     }
!   return retval;
!   }
! 
! static void store_location_stuff(const cbl_name_t statement_name);
! 
! void
! parser_statement_begin( const cbl_name_t statement_name, tree ecs, tree dcls )
    {
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
      char ach[64];
!     snprintf( ach, sizeof(ach),
                " yylineno %d first/last %d/%d",
                yylineno,
                cobol_location().first_line,
                cobol_location().last_line );
      SHOW_PARSE_TEXT(ach);
+     if( true || ecs || dcls )
+       {
+       SHOW_PARSE_INDENT
+       snprintf( ach, sizeof(ach),
+                 "Sending ecs/dcls %p / %p", ecs, dcls);
+       SHOW_PARSE_TEXT(ach);
+       }
      SHOW_PARSE_END
      }
!   TRACE1
!     {
!     TRACE1_HEADER
!     char ach[64];
!     snprintf(ach, sizeof(ach), " ecs/dcls %p / %p", ecs, dcls);
!     TRACE1_TEXT_ABC("", ach, "");
!     TRACE1_END
!     }
  
    if( gg_get_current_line_number() == DEFAULT_LINE_NUMBER )
      {
!     // This code is intended to prevert GDB anomalies when the first line of a
!     // program is a PERFORM <proc> ... TEST AFTER ... UNTIL ...
      gg_set_current_line_number(CURRENT_LINE_NUMBER-1);
      gg_assign(var_decl_nop, build_int_cst_type(INT, 106));
      }
  
+   store_location_stuff(statement_name);
    gg_set_current_line_number(CURRENT_LINE_NUMBER);
+ 
+   gg_call(VOID,
+           "__gg__set_exception_environment",
+           ecs  ? gg_get_address_of(ecs) : null_pointer_node,
+           dcls ? gg_get_address_of(dcls) : null_pointer_node,
+           NULL_TREE);
+   
+   gcc_assert( gg_trans_unit.function_stack.size() );
    }
  
  static void
*************** initialize_variable_internal( cbl_refer_
*** 1130,1136 ****
      gg_call(VOID,
              "__gg__initialize_variable",
              gg_get_address_of(refer.field->var_decl_node),
!             refer_offset_dest(refer),
              build_int_cst_type(INT, flag_bits),
              NULL_TREE);
      }
--- 1265,1271 ----
      gg_call(VOID,
              "__gg__initialize_variable",
              gg_get_address_of(refer.field->var_decl_node),
!             refer_offset(refer),
              build_int_cst_type(INT, flag_bits),
              NULL_TREE);
      }
*************** compare_binary_binary(tree return_int,
*** 1823,1834 ****
    get_binary_value(left_side,
                     NULL,
                     left_side_ref->field,
!                    refer_offset_source(*left_side_ref),
                     hilo_left);
    get_binary_value(right_side,
                     NULL,
                     right_side_ref->field,
!                    refer_offset_source(*right_side_ref),
                     hilo_right);
    IF( hilo_left, eq_op, integer_one_node )
      {
--- 1958,1969 ----
    get_binary_value(left_side,
                     NULL,
                     left_side_ref->field,
!                    refer_offset(*left_side_ref),
                     hilo_left);
    get_binary_value(right_side,
                     NULL,
                     right_side_ref->field,
!                    refer_offset(*right_side_ref),
                     hilo_right);
    IF( hilo_left, eq_op, integer_one_node )
      {
*************** cobol_compare(  tree return_int,
*** 2002,2008 ****
                            "__gg__literaln_alpha_compare",
                            gg_string_literal(buffer),
                            gg_get_address_of(righty->field->var_decl_node),
!                           refer_offset_source(*righty),
                            refer_size_source(  *righty),
                            build_int_cst_type(INT,
                                          (righty->all ? REFER_T_MOVE_ALL : 0)),
--- 2137,2143 ----
                            "__gg__literaln_alpha_compare",
                            gg_string_literal(buffer),
                            gg_get_address_of(righty->field->var_decl_node),
!                           refer_offset(*righty),
                            refer_size_source(  *righty),
                            build_int_cst_type(INT,
                                          (righty->all ? REFER_T_MOVE_ALL : 0)),
*************** cobol_compare(  tree return_int,
*** 2075,2085 ****
                  INT,
                  "__gg__compare",
                  gg_get_address_of(left_side_ref.field->var_decl_node),
!                 refer_offset_source(left_side_ref),
                  refer_size_source(  left_side_ref),
                  build_int_cst_type(INT, leftflags),
                  gg_get_address_of(right_side_ref.field->var_decl_node),
!                 refer_offset_source(right_side_ref),
                  refer_size_source(  right_side_ref),
                  build_int_cst_type(INT, rightflags),
                  integer_zero_node,
--- 2210,2220 ----
                  INT,
                  "__gg__compare",
                  gg_get_address_of(left_side_ref.field->var_decl_node),
!                 refer_offset(left_side_ref),
                  refer_size_source(  left_side_ref),
                  build_int_cst_type(INT, leftflags),
                  gg_get_address_of(right_side_ref.field->var_decl_node),
!                 refer_offset(right_side_ref),
                  refer_size_source(  right_side_ref),
                  build_int_cst_type(INT, rightflags),
                  integer_zero_node,
*************** paragraph_label(struct cbl_proc_t *proce
*** 2445,2452 ****
    char *section_name = section ? section->name : nullptr;
  
    size_t deconflictor = symbol_label_id(procedure->label);
!   
!   char *psz1 = 
    xasprintf(
            "%s PARAGRAPH %s of %s in %s (" HOST_SIZE_T_PRINT_DEC ")",
            ASM_COMMENT_START,
--- 2580,2587 ----
    char *section_name = section ? section->name : nullptr;
  
    size_t deconflictor = symbol_label_id(procedure->label);
! 
!   char *psz1 =
    xasprintf(
            "%s PARAGRAPH %s of %s in %s (" HOST_SIZE_T_PRINT_DEC ")",
            ASM_COMMENT_START,
*************** paragraph_label(struct cbl_proc_t *proce
*** 2454,2460 ****
            section_name ? section_name: "(null)" ,
            current_function->our_unmangled_name ? current_function->our_unmangled_name: "" ,
            (fmt_size_t)deconflictor );
-   
    gg_insert_into_assembler(psz1);
  
    SHOW_PARSE
--- 2589,2594 ----
*************** parser_goto( cbl_refer_t value_ref, size
*** 2940,2946 ****
      get_binary_value( value,
                        NULL,
                        value_ref.field,
!                       refer_offset_source(value_ref));
      // Convert it from one-based to zero-based:
      gg_decrement(value);
      // Check to see if the value is in the range 0...narg-1:
--- 3074,3080 ----
      get_binary_value( value,
                        NULL,
                        value_ref.field,
!                       refer_offset(value_ref));
      // Convert it from one-based to zero-based:
      gg_decrement(value);
      // Check to see if the value is in the range 0...narg-1:
*************** parser_perform_times( cbl_label_t *proc_
*** 3130,3136 ****
    get_binary_value( counter,
                      NULL,
                      count.field,
!                     refer_offset_source(count));
  
    // Make sure the initial count is valid:
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
--- 3264,3270 ----
    get_binary_value( counter,
                      NULL,
                      count.field,
!                     refer_offset(count));
  
    // Make sure the initial count is valid:
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
*************** internal_perform_through_times(   cbl_la
*** 3278,3284 ****
    get_binary_value( counter,
                      NULL,
                      count.field,
!                     refer_offset_source(count));
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
      {
      internal_perform_through(proc_1, proc_2, true); // true means suppress_nexting
--- 3412,3418 ----
    get_binary_value( counter,
                      NULL,
                      count.field,
!                     refer_offset(count));
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
      {
      internal_perform_through(proc_1, proc_2, true); // true means suppress_nexting
*************** parser_enter_file(const char *filename)
*** 3419,3426 ****
    A = gg_declare_variable(B, C, NULL_TREE, vs_external_reference)
  
      SET_VAR_DECL(var_decl_exception_code         , INT    , "__gg__exception_code");
-     SET_VAR_DECL(var_decl_exception_handled      , INT    , "__gg__exception_handled");
-     SET_VAR_DECL(var_decl_exception_file_number  , INT    , "__gg__exception_file_number");
      SET_VAR_DECL(var_decl_exception_file_status  , INT    , "__gg__exception_file_status");
      SET_VAR_DECL(var_decl_exception_file_name    , CHAR_P , "__gg__exception_file_name");
      SET_VAR_DECL(var_decl_exception_statement    , CHAR_P , "__gg__exception_statement");
--- 3553,3558 ----
*************** parser_enter_file(const char *filename)
*** 3432,3438 ****
  
      SET_VAR_DECL(var_decl_default_compute_error  , INT    , "__gg__default_compute_error");
      SET_VAR_DECL(var_decl_rdigits                , INT    , "__gg__rdigits");
-     SET_VAR_DECL(var_decl_odo_violation          , INT    , "__gg__odo_violation");
      SET_VAR_DECL(var_decl_unique_prog_id         , SIZE_T , "__gg__unique_prog_id");
  
      SET_VAR_DECL(var_decl_entry_location         , VOID_P , "__gg__entry_pointer");
--- 3564,3569 ----
*************** psa_FldLiteralN(struct cbl_field_t *fiel
*** 4002,4007 ****
--- 4133,4143 ----
                                            vs_static);
    DECL_INITIAL(new_var_decl) = wide_int_to_tree(var_type, value);
    field->data_decl_node = new_var_decl;
+ 
+   // Note that during compilation, the integer value, assuming it can be
+   // contained in 128-bit integers, can be accessed with
+   //
+   //  wi::to_wide( DECL_INITIAL(new_var_decl) )
    }
  
  static void
*************** parser_accept(  struct cbl_refer_t refer
*** 4110,4116 ****
            "__gg__accept",
            environment,
            gg_get_address_of(refer.field->var_decl_node),
!           refer_offset_dest(refer),
            refer_size_dest(refer),
            NULL_TREE);
    }
--- 4246,4252 ----
            "__gg__accept",
            environment,
            gg_get_address_of(refer.field->var_decl_node),
!           refer_offset(refer),
            refer_size_dest(refer),
            NULL_TREE);
    }
*************** parser_accept_command_line( cbl_refer_t
*** 4201,4207 ****
                gg_call_expr( INT,
                              "__gg__get_command_line",
                              gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset_dest(tgt),
                              refer_size_dest(tgt),
                              NULL_TREE));
      if( error )
--- 4337,4343 ----
                gg_call_expr( INT,
                              "__gg__get_command_line",
                              gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset(tgt),
                              refer_size_dest(tgt),
                              NULL_TREE));
      if( error )
*************** parser_accept_command_line( cbl_refer_t
*** 4248,4257 ****
                gg_call_expr(  INT,
                              "__gg__get_argv",
                              gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset_dest(tgt),
                              refer_size_dest(tgt),
                              gg_get_address_of(source.field->var_decl_node),
!                             refer_offset_dest(source),
                              refer_size_dest(source),
                              NULL_TREE));
      if( error )
--- 4384,4393 ----
                gg_call_expr(  INT,
                              "__gg__get_argv",
                              gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset(tgt),
                              refer_size_dest(tgt),
                              gg_get_address_of(source.field->var_decl_node),
!                             refer_offset(source),
                              refer_size_dest(source),
                              NULL_TREE));
      if( error )
*************** parser_accept_command_line_count( cbl_re
*** 4331,4337 ****
    gg_call(  VOID,
              "__gg__get_argc",
              gg_get_address_of(tgt.field->var_decl_node),
!             refer_offset_dest(tgt),
              refer_size_dest(tgt),
              NULL_TREE);
    }
--- 4467,4473 ----
    gg_call(  VOID,
              "__gg__get_argc",
              gg_get_address_of(tgt.field->var_decl_node),
!             refer_offset(tgt),
              refer_size_dest(tgt),
              NULL_TREE);
    }
*************** parser_accept_envar(struct cbl_refer_t t
*** 4369,4378 ****
              gg_call_expr( INT,
                            "__gg__accept_envar",
                            gg_get_address_of(tgt.field->var_decl_node),
!                           refer_offset_dest(tgt),
                            refer_size_dest(tgt),
                            gg_get_address_of(envar.field->var_decl_node),
!                           refer_offset_source(envar),
                            refer_size_source(envar),
                            NULL_TREE));
    if( error )
--- 4505,4514 ----
              gg_call_expr( INT,
                            "__gg__accept_envar",
                            gg_get_address_of(tgt.field->var_decl_node),
!                           refer_offset(tgt),
                            refer_size_dest(tgt),
                            gg_get_address_of(envar.field->var_decl_node),
!                           refer_offset(envar),
                            refer_size_source(envar),
                            NULL_TREE));
    if( error )
*************** parser_set_envar( struct cbl_refer_t nam
*** 4441,4450 ****
    gg_call(BOOL,
            "__gg__set_envar",
            gg_get_address_of(name.field->var_decl_node),
!           refer_offset_source(name),
            refer_size_source(name),
            gg_get_address_of(value.field->var_decl_node),
!           refer_offset_source(value),
            refer_size_source(value),
            NULL_TREE);
    }
--- 4577,4586 ----
    gg_call(BOOL,
            "__gg__set_envar",
            gg_get_address_of(name.field->var_decl_node),
!           refer_offset(name),
            refer_size_source(name),
            gg_get_address_of(value.field->var_decl_node),
!           refer_offset(value),
            refer_size_source(value),
            NULL_TREE);
    }
*************** parser_display_internal(tree file_descri
*** 4941,4947 ****
        gg_call(VOID,
                "__gg__display",
                gg_get_address_of(refer.field->var_decl_node),
!               refer_offset_source(refer),
                refer_size_source(  refer),
                file_descriptor,
                advance ? integer_one_node : integer_zero_node,
--- 5077,5083 ----
        gg_call(VOID,
                "__gg__display",
                gg_get_address_of(refer.field->var_decl_node),
!               refer_offset(refer),
                refer_size_source(  refer),
                file_descriptor,
                advance ? integer_one_node : integer_zero_node,
*************** parser_display_field(cbl_field_t *field)
*** 4963,4968 ****
--- 5099,5114 ----
                                  DISPLAY_NO_ADVANCE);
    }
  
+ /*
+  * The first parameter to parser_display is the "device" upon which to display
+  * the data. Besides normal devices, these may include elements that define the
+  * Unix command line and environment:
+  *  1.  ARG_NUM_e, the ARGUMENT-NUMBER
+  *  2.  ARG_VALUE_e, the ARGUMENT-VALUE
+  *  3.  ENV_NAME_e, the ENVIRONMENT-NAME
+  *  4.  ENV_VALUE_e, the ENVIRONMENT-VALUE
+  * that need special care and feeding. 
+  */
  void
  parser_display( const struct cbl_special_name_t *upon,
                  struct cbl_refer_t refs[],
*************** parser_initialize_table(size_t nelem,
*** 5675,5681 ****
            "__gg__mirror_range",
            build_int_cst_type(SIZE_T, nelem),
            gg_get_address_of(src.field->var_decl_node),
!           refer_offset_source(src),
            build_int_cst_type(SIZE_T, nspan),
            tspans,
            build_int_cst_type(SIZE_T, table),
--- 5821,5827 ----
            "__gg__mirror_range",
            build_int_cst_type(SIZE_T, nelem),
            gg_get_address_of(src.field->var_decl_node),
!           refer_offset(src),
            build_int_cst_type(SIZE_T, nspan),
            tspans,
            build_int_cst_type(SIZE_T, table),
*************** void parser_sleep(cbl_refer_t seconds)
*** 5831,5843 ****
    if( seconds.field )
      {
      gg_get_address_of(seconds.field->var_decl_node);
!     //refer_offset_source(seconds);
      //refer_size_source(seconds);
  
      gg_call(VOID,
              "__gg__sleep",
              gg_get_address_of(seconds.field->var_decl_node),
!             refer_offset_source(seconds),
              refer_size_source(seconds),
              NULL_TREE);
      }
--- 5977,5989 ----
    if( seconds.field )
      {
      gg_get_address_of(seconds.field->var_decl_node);
!     //refer_offset(seconds);
      //refer_size_source(seconds);
  
      gg_call(VOID,
              "__gg__sleep",
              gg_get_address_of(seconds.field->var_decl_node),
!             refer_offset(seconds),
              refer_size_source(seconds),
              NULL_TREE);
      }
*************** parser_allocate(cbl_refer_t size_or_base
*** 6145,6158 ****
    gg_call(VOID,
            "__gg__allocate",
            gg_get_address_of(size_or_based.field->var_decl_node),
!           refer_offset_source(size_or_based) ,
            initialized ? integer_one_node : integer_zero_node,
            build_int_cst_type(INT, default_byte),
            f_working ? gg_get_address_of(f_working->var_decl_node) : null_pointer_node,
            f_local   ? gg_get_address_of(f_local->  var_decl_node) : null_pointer_node,
            returning.field ? gg_get_address_of(returning.field->var_decl_node)
                            : null_pointer_node,
!           returning.field ? refer_offset_source(returning)
                            : size_t_zero_node,
            NULL_TREE);
    walk_initialization(size_or_based.field, initialized, false);
--- 6291,6304 ----
    gg_call(VOID,
            "__gg__allocate",
            gg_get_address_of(size_or_based.field->var_decl_node),
!           refer_offset(size_or_based) ,
            initialized ? integer_one_node : integer_zero_node,
            build_int_cst_type(INT, default_byte),
            f_working ? gg_get_address_of(f_working->var_decl_node) : null_pointer_node,
            f_local   ? gg_get_address_of(f_local->  var_decl_node) : null_pointer_node,
            returning.field ? gg_get_address_of(returning.field->var_decl_node)
                            : null_pointer_node,
!           returning.field ? refer_offset(returning)
                            : size_t_zero_node,
            NULL_TREE);
    walk_initialization(size_or_based.field, initialized, false);
*************** parser_free( size_t n, cbl_refer_t refer
*** 6178,6184 ****
      gg_call(VOID,
              "__gg__deallocate",
              gg_get_address_of(p->field->var_decl_node),
!             refer_offset_source(*p),
              p->addr_of ? integer_one_node : integer_zero_node,
              NULL_TREE);
      walk_initialization(p->field, false, true);
--- 6324,6330 ----
      gg_call(VOID,
              "__gg__deallocate",
              gg_get_address_of(p->field->var_decl_node),
!             refer_offset(*p),
              p->addr_of ? integer_one_node : integer_zero_node,
              NULL_TREE);
      walk_initialization(p->field, false, true);
*************** parser_division(cbl_division_t division,
*** 6681,6689 ****
  
            if( args[i].refer.field->attr & any_length_e )
              {
!             // gg_printf("side channel: Length of \"%s\" is %ld\n", 
                        // member(args[i].refer.field->var_decl_node, "name"),
!                       // gg_array_value(var_decl_call_parameter_lengths, rt_i), 
                        // NULL_TREE);
  
              // Get the length from the global lengths[] side channel.  Don't
--- 6827,6835 ----
  
            if( args[i].refer.field->attr & any_length_e )
              {
!             // gg_printf("side channel: Length of \"%s\" is %ld\n",
                        // member(args[i].refer.field->var_decl_node, "name"),
!                       // gg_array_value(var_decl_call_parameter_lengths, rt_i),
                        // NULL_TREE);
  
              // Get the length from the global lengths[] side channel.  Don't
*************** parser_relop_long(cbl_field_t *tgt,
*** 7161,7167 ****
    get_binary_value( tree_b,
                      NULL,
                      bref.field,
!                     refer_offset_source(bref) );
  
    static tree comp_res = gg_define_variable(LONG, "..prl_comp_res", vs_file_static);
    gg_assign(comp_res, gg_subtract(tree_a, tree_b));
--- 7307,7313 ----
    get_binary_value( tree_b,
                      NULL,
                      bref.field,
!                     refer_offset(bref) );
  
    static tree comp_res = gg_define_variable(LONG, "..prl_comp_res", vs_file_static);
    gg_assign(comp_res, gg_subtract(tree_a, tree_b));
*************** parser_see_stop_run(struct cbl_refer_t e
*** 7283,7289 ****
      get_binary_value( returned_value,
                        NULL,
                        exit_status.field,
!                       refer_offset_source(exit_status));
      TRACE1
        {
        TRACE1_REFER(" exit_status ", exit_status, "")
--- 7429,7435 ----
      get_binary_value( returned_value,
                        NULL,
                        exit_status.field,
!                       refer_offset(exit_status));
      TRACE1
        {
        TRACE1_REFER(" exit_status ", exit_status, "")
*************** parser_classify(    cbl_field_t *tgt,
*** 7498,7504 ****
                             "__gg__classify",
                             build_int_cst_type(INT, type),
                             gg_get_address_of(candidate.field->var_decl_node),
!                            refer_offset_dest(candidate),
                             refer_size_dest(candidate),
                             NULL_TREE),
                ne_op,
--- 7644,7650 ----
                             "__gg__classify",
                             build_int_cst_type(INT, type),
                             gg_get_address_of(candidate.field->var_decl_node),
!                            refer_offset(candidate),
                             refer_size_dest(candidate),
                             NULL_TREE),
                ne_op,
*************** parser_file_add(struct cbl_file_t *file)
*** 9022,9031 ****
--- 9168,9180 ----
            __func__);
      }
  
+   size_t symbol_table_index = symbol_index(symbol_elem_of(file));
+ 
    gg_call(VOID,
            "__gg__file_init",
            gg_get_address_of(new_var_decl),
            gg_string_literal(file->name),
+           build_int_cst_type(SIZE_T, symbol_table_index),
            array_of_keys,
            key_numbers,
            unique_flags,
*************** parser_file_add(struct cbl_file_t *file)
*** 9046,9053 ****
    file->var_decl_node = new_var_decl;
    }
  
- static void store_location_stuff(const cbl_name_t statement_name);
- 
  void
  parser_file_open( size_t nfiles, struct cbl_file_t *files[], int mode_char )
    {
--- 9195,9200 ----
*************** parser_file_write( cbl_file_t *file,
*** 9378,9384 ****
      get_binary_value( value,
                        NULL,
                        advance.field,
!                       refer_offset_source(advance));
      gg_assign(t_advance, gg_cast(INT, value));
      }
    else
--- 9525,9531 ----
      get_binary_value( value,
                        NULL,
                        advance.field,
!                       refer_offset(advance));
      gg_assign(t_advance, gg_cast(INT, value));
      }
    else
*************** parser_file_start(struct cbl_file_t *fil
*** 9635,9641 ****
      get_binary_value( length,
                        NULL,
                        length_ref.field,
!                       refer_offset_dest(length_ref));
      }
  
    store_location_stuff("START");
--- 9782,9788 ----
      get_binary_value( length,
                        NULL,
                        length_ref.field,
!                       refer_offset(length_ref));
      }
  
    store_location_stuff("START");
*************** parser_inspect_conv(cbl_refer_t input,
*** 10054,10080 ****
            backward ? integer_one_node : integer_zero_node,
            input.field ? gg_get_address_of(input.field->var_decl_node)
                        : null_pointer_node,
!           refer_offset_source(input),
            refer_size_source(input),
            original.field ? gg_get_address_of(original.field->var_decl_node)
                           : null_pointer_node,
!           refer_offset_dest(original),
            refer_size_dest(original),
            replacement.field ? gg_get_address_of(
                                replacement.field->var_decl_node)
                              : null_pointer_node,
!           refer_offset_source(replacement),
            replacement.all ? build_int_cst_type(SIZE_T, -1LL)
                            : refer_size_source(replacement),
            after.identifier_4.field ? gg_get_address_of(
                                          after.identifier_4.field->var_decl_node)
                                     : null_pointer_node,
!           refer_offset_source(after.identifier_4),
            refer_size_source(after.identifier_4),
            before.identifier_4.field ? gg_get_address_of(
                                         before.identifier_4.field->var_decl_node)
                                      : null_pointer_node,
!           refer_offset_source(before.identifier_4),
            refer_size_source(before.identifier_4),
            NULL_TREE
            );
--- 10201,10227 ----
            backward ? integer_one_node : integer_zero_node,
            input.field ? gg_get_address_of(input.field->var_decl_node)
                        : null_pointer_node,
!           refer_offset(input),
            refer_size_source(input),
            original.field ? gg_get_address_of(original.field->var_decl_node)
                           : null_pointer_node,
!           refer_offset(original),
            refer_size_dest(original),
            replacement.field ? gg_get_address_of(
                                replacement.field->var_decl_node)
                              : null_pointer_node,
!           refer_offset(replacement),
            replacement.all ? build_int_cst_type(SIZE_T, -1LL)
                            : refer_size_source(replacement),
            after.identifier_4.field ? gg_get_address_of(
                                          after.identifier_4.field->var_decl_node)
                                     : null_pointer_node,
!           refer_offset(after.identifier_4),
            refer_size_source(after.identifier_4),
            before.identifier_4.field ? gg_get_address_of(
                                         before.identifier_4.field->var_decl_node)
                                      : null_pointer_node,
!           refer_offset(before.identifier_4),
            refer_size_source(before.identifier_4),
            NULL_TREE
            );
*************** parser_intrinsic_numval_c( cbl_field_t *
*** 10124,10133 ****
              "__gg__test_numval_c",
              gg_get_address_of(f->var_decl_node),
              gg_get_address_of(input.field->var_decl_node),
!             refer_offset_source(input),
              refer_size_source(input),
              currency.field ? gg_get_address_of(currency.field->var_decl_node) : null_pointer_node,
!             refer_offset_source(currency),
              refer_size_source(currency),
              NULL_TREE
              );
--- 10271,10280 ----
              "__gg__test_numval_c",
              gg_get_address_of(f->var_decl_node),
              gg_get_address_of(input.field->var_decl_node),
!             refer_offset(input),
              refer_size_source(input),
              currency.field ? gg_get_address_of(currency.field->var_decl_node) : null_pointer_node,
!             refer_offset(currency),
              refer_size_source(currency),
              NULL_TREE
              );
*************** parser_intrinsic_numval_c( cbl_field_t *
*** 10138,10147 ****
              "__gg__numval_c",
              gg_get_address_of(f->var_decl_node),
              gg_get_address_of(input.field->var_decl_node),
!             refer_offset_source(input),
              refer_size_source(input),
              currency.field ? gg_get_address_of(currency.field->var_decl_node) : null_pointer_node,
!             refer_offset_source(currency),
              refer_size_source(currency),
              NULL_TREE
              );
--- 10285,10294 ----
              "__gg__numval_c",
              gg_get_address_of(f->var_decl_node),
              gg_get_address_of(input.field->var_decl_node),
!             refer_offset(input),
              refer_size_source(input),
              currency.field ? gg_get_address_of(currency.field->var_decl_node) : null_pointer_node,
!             refer_offset(currency),
              refer_size_source(currency),
              NULL_TREE
              );
*************** parser_intrinsic_subst( cbl_field_t *f,
*** 10199,10205 ****
            "__gg__substitute",
            gg_get_address_of(f->var_decl_node),
            gg_get_address_of(ref1.field->var_decl_node),
!           refer_offset_source(ref1),
            refer_size_source(ref1),
            build_int_cst_type(SIZE_T, argc),
            control,
--- 10346,10352 ----
            "__gg__substitute",
            gg_get_address_of(f->var_decl_node),
            gg_get_address_of(ref1.field->var_decl_node),
!           refer_offset(ref1),
            refer_size_source(ref1),
            build_int_cst_type(SIZE_T, argc),
            control,
*************** parser_intrinsic_call_1( cbl_field_t *tg
*** 10421,10427 ****
              function_name,
              gg_get_address_of(tgt->var_decl_node),
              gg_get_address_of(ref1.field->var_decl_node),
!             refer_offset_source(ref1),
              refer_size_source(ref1),
              NULL_TREE);
      }
--- 10568,10574 ----
              function_name,
              gg_get_address_of(tgt->var_decl_node),
              gg_get_address_of(ref1.field->var_decl_node),
!             refer_offset(ref1),
              refer_size_source(ref1),
              NULL_TREE);
      }
*************** parser_intrinsic_call_2( cbl_field_t *tg
*** 10464,10473 ****
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            gg_get_address_of(ref1.field->var_decl_node),
!           refer_offset_source(ref1),
            refer_size_source(ref1),
            ref2.field ? gg_get_address_of(ref2.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref2),
            refer_size_source(ref2),
            NULL_TREE);
    TRACE1
--- 10611,10620 ----
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            gg_get_address_of(ref1.field->var_decl_node),
!           refer_offset(ref1),
            refer_size_source(ref1),
            ref2.field ? gg_get_address_of(ref2.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref2),
            refer_size_source(ref2),
            NULL_TREE);
    TRACE1
*************** parser_intrinsic_call_3( cbl_field_t *tg
*** 10514,10526 ****
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            ref1.field ? gg_get_address_of(ref1.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref1),
            refer_size_source(ref1),
            ref2.field ? gg_get_address_of(ref2.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref2),
            refer_size_source(ref2),
            ref3.field ? gg_get_address_of(ref3.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref3),
            refer_size_source(ref3),
            NULL_TREE);
    TRACE1
--- 10661,10673 ----
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            ref1.field ? gg_get_address_of(ref1.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref1),
            refer_size_source(ref1),
            ref2.field ? gg_get_address_of(ref2.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref2),
            refer_size_source(ref2),
            ref3.field ? gg_get_address_of(ref3.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref3),
            refer_size_source(ref3),
            NULL_TREE);
    TRACE1
*************** parser_intrinsic_call_4( cbl_field_t *tg
*** 10569,10584 ****
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            ref1.field ? gg_get_address_of(ref1.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref1),
            refer_size_source(ref1),
            ref2.field ? gg_get_address_of(ref2.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref2),
            refer_size_source(ref2),
            ref3.field ? gg_get_address_of(ref3.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref3),
            refer_size_source(ref3),
            ref4.field ? gg_get_address_of(ref4.field->var_decl_node) : null_pointer_node,
!           refer_offset_source(ref4),
            refer_size_source(ref4),
            NULL_TREE);
    TRACE1
--- 10716,10731 ----
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            ref1.field ? gg_get_address_of(ref1.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref1),
            refer_size_source(ref1),
            ref2.field ? gg_get_address_of(ref2.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref2),
            refer_size_source(ref2),
            ref3.field ? gg_get_address_of(ref3.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref3),
            refer_size_source(ref3),
            ref4.field ? gg_get_address_of(ref4.field->var_decl_node) : null_pointer_node,
!           refer_offset(ref4),
            refer_size_source(ref4),
            NULL_TREE);
    TRACE1
*************** parser_sort(cbl_refer_t tableref,
*** 11207,11213 ****
    gg_call(VOID,
            "__gg__sort_table",
            gg_get_address_of(tableref.field->var_decl_node),
!           refer_offset_source(tableref),
            gg_cast(SIZE_T, depending_on),
            build_int_cst_type(SIZE_T, key_index),
            all_keys,
--- 11354,11360 ----
    gg_call(VOID,
            "__gg__sort_table",
            gg_get_address_of(tableref.field->var_decl_node),
!           refer_offset(tableref),
            gg_cast(SIZE_T, depending_on),
            build_int_cst_type(SIZE_T, key_index),
            all_keys,
*************** parser_return_start( cbl_file_t *workfil
*** 11503,11509 ****
  
    IF( member(workfile, "io_status"), lt_op, build_int_cst(INT, FsKeySeq) )
      {
!     // The read didn't succeed because of an end-of-file condition
      gg_append_statement(workfile->addresses->at_end.go_to);
      }
    ELSE
--- 11650,11662 ----
  
    IF( member(workfile, "io_status"), lt_op, build_int_cst(INT, FsKeySeq) )
      {
!     // The read didn't succeed because of an end-of-file condition.
! 
!     // Because there is an AT END clause, we suppress the error condition that
!     // was raised.
!     gg_assign(var_decl_exception_code, integer_zero_node);
! 
!     // And then we jump to the at_end code:
      gg_append_statement(workfile->addresses->at_end.go_to);
      }
    ELSE
*************** parser_unstring(cbl_refer_t src,
*** 11931,11946 ****
              gg_call_expr( INT,
                            "__gg__unstring",
                            gg_get_address_of(src.field->var_decl_node),
!                           refer_offset_source(src),
                            refer_size_source(src),
                            build_int_cst_type(SIZE_T, ndelimited),
                            t_alls,
                            build_int_cst_type(SIZE_T, noutputs),
                            pointer.field ? gg_get_address_of(pointer.field->var_decl_node) : null_pointer_node,
!                           refer_offset_dest(pointer),
                            refer_size_dest(pointer),
                            tally.field ? gg_get_address_of(tally.field->var_decl_node) : null_pointer_node,
!                           refer_offset_dest(tally),
                            refer_size_dest(tally),
                            NULL_TREE)
                            );
--- 12084,12099 ----
              gg_call_expr( INT,
                            "__gg__unstring",
                            gg_get_address_of(src.field->var_decl_node),
!                           refer_offset(src),
                            refer_size_source(src),
                            build_int_cst_type(SIZE_T, ndelimited),
                            t_alls,
                            build_int_cst_type(SIZE_T, noutputs),
                            pointer.field ? gg_get_address_of(pointer.field->var_decl_node) : null_pointer_node,
!                           refer_offset(pointer),
                            refer_size_dest(pointer),
                            tally.field ? gg_get_address_of(tally.field->var_decl_node) : null_pointer_node,
!                           refer_offset(tally),
                            refer_size_dest(tally),
                            NULL_TREE)
                            );
*************** create_and_call(size_t narg,
*** 12207,12213 ****
      else
        {
        gg_assign(location,
!                 qualified_data_source(args[i].refer)),
        gg_assign(length,
                  refer_size_source(args[i].refer));
        }
--- 12360,12366 ----
      else
        {
        gg_assign(location,
!                 qualified_data_location(args[i].refer)),
        gg_assign(length,
                  refer_size_source(args[i].refer));
        }
*************** create_and_call(size_t narg,
*** 12336,12342 ****
                                  INT128,
                                  "__gg__fetch_call_by_value_value",
                                  gg_get_address_of(args[i].refer.field->var_decl_node),
!                                 refer_offset_source(args[i].refer),
                                  refer_size_source(args[i].refer),
                                  NULL_TREE)));
                }
--- 12489,12495 ----
                                  INT128,
                                  "__gg__fetch_call_by_value_value",
                                  gg_get_address_of(args[i].refer.field->var_decl_node),
!                                 refer_offset(args[i].refer),
                                  refer_size_source(args[i].refer),
                                  NULL_TREE)));
                }
*************** create_and_call(size_t narg,
*** 12349,12355 ****
                                  INT128,
                                  "__gg__fetch_call_by_value_value",
                                  gg_get_address_of(args[i].refer.field->var_decl_node),
!                                 refer_offset_source(args[i].refer),
                                  refer_size_source(args[i].refer),
                                  NULL_TREE)));
                }
--- 12502,12508 ----
                                  INT128,
                                  "__gg__fetch_call_by_value_value",
                                  gg_get_address_of(args[i].refer.field->var_decl_node),
!                                 refer_offset(args[i].refer),
                                  refer_size_source(args[i].refer),
                                  NULL_TREE)));
                }
*************** create_and_call(size_t narg,
*** 12398,12404 ****
        // we were given a returned::field, so find its location and length:
        gg_assign(returned_location,
                  gg_add( member(returned.field->var_decl_node, "data"),
!                         refer_offset_dest(returned)));
        gg_assign(returned_length,
                  gg_cast(TREE_TYPE(returned_length), refer_size_dest(returned)));
  
--- 12551,12557 ----
        // we were given a returned::field, so find its location and length:
        gg_assign(returned_location,
                  gg_add( member(returned.field->var_decl_node, "data"),
!                         refer_offset(returned)));
        gg_assign(returned_length,
                  gg_cast(TREE_TYPE(returned_length), refer_size_dest(returned)));
  
*************** create_and_call(size_t narg,
*** 12418,12424 ****
          {
          // There is a valid pointer.  Do the assignment.
          move_tree(returned.field,
!                   refer_offset_dest(returned),
                    returned_value,
                    integer_one_node);
          }
--- 12571,12577 ----
          {
          // There is a valid pointer.  Do the assignment.
          move_tree(returned.field,
!                   refer_offset(returned),
                    returned_value,
                    integer_one_node);
          }
*************** create_and_call(size_t narg,
*** 12442,12448 ****
        gg_call(VOID,
                "__gg__int128_to_qualified_field",
                gg_get_address_of(returned.field->var_decl_node),
!               refer_offset_dest(returned),
                refer_size_dest(returned),
                gg_cast(INT128, returned_value),
                gg_cast(INT, member(returned.field->var_decl_node, "rdigits")),
--- 12595,12601 ----
        gg_call(VOID,
                "__gg__int128_to_qualified_field",
                gg_get_address_of(returned.field->var_decl_node),
!               refer_offset(returned),
                refer_size_dest(returned),
                gg_cast(INT128, returned_value),
                gg_cast(INT, member(returned.field->var_decl_node, "rdigits")),
*************** create_and_call(size_t narg,
*** 12464,12470 ****
        tree returned_length   = gg_define_size_t();
        // we were given a returned::field, so find its location and length:
        gg_assign(returned_location,
!                 qualified_data_source(returned));
        gg_assign(returned_length,
                  refer_size_source(returned));
  
--- 12617,12623 ----
        tree returned_length   = gg_define_size_t();
        // we were given a returned::field, so find its location and length:
        gg_assign(returned_location,
!                 qualified_data_location(returned));
        gg_assign(returned_length,
                  refer_size_source(returned));
  
*************** parser_set_pointers( size_t ntgt, cbl_re
*** 12879,12885 ****
        // This is something like SET varp TO ENTRY "ref".
        tree function_handle = function_handle_from_name(source,
                                                     COBOL_FUNCTION_RETURN_TYPE);
!       gg_memcpy(qualified_data_dest(tgts[i]),
                  gg_get_address_of(function_handle),
                  sizeof_pointer);
        }
--- 13032,13038 ----
        // This is something like SET varp TO ENTRY "ref".
        tree function_handle = function_handle_from_name(source,
                                                     COBOL_FUNCTION_RETURN_TYPE);
!       gg_memcpy(qualified_data_location(tgts[i]),
                  gg_get_address_of(function_handle),
                  sizeof_pointer);
        }
*************** parser_set_pointers( size_t ntgt, cbl_re
*** 12899,12908 ****
        gg_call(  VOID,
                  "__gg__set_pointer",
                  gg_get_address_of(tgts[i].field->var_decl_node),
!                 refer_offset_dest(tgts[i]),
                  build_int_cst_type(INT, tgts[i].addr_of  ? REFER_T_ADDRESS_OF : 0),
                  source.field ? gg_get_address_of(source.field->var_decl_node) : null_pointer_node,
!                 refer_offset_source(source),
                  build_int_cst_type(INT, source.addr_of  ? REFER_T_ADDRESS_OF : 0),
                  NULL_TREE
                  );
--- 13052,13061 ----
        gg_call(  VOID,
                  "__gg__set_pointer",
                  gg_get_address_of(tgts[i].field->var_decl_node),
!                 refer_offset(tgts[i]),
                  build_int_cst_type(INT, tgts[i].addr_of  ? REFER_T_ADDRESS_OF : 0),
                  source.field ? gg_get_address_of(source.field->var_decl_node) : null_pointer_node,
!                 refer_offset(source),
                  build_int_cst_type(INT, source.addr_of  ? REFER_T_ADDRESS_OF : 0),
                  NULL_TREE
                  );
*************** void
*** 12976,12986 ****
  parser_program_hierarchy( const struct cbl_prog_hier_t& hier )
    {
    Analyze();
!   /*  The complication in this routine is that it gets called near the end
!       of every program-id.  And it keeps growing.  The reason is because the
!       parser doesn't know when it is working on the last program of a list of
!       nested programs.  So, we just do what we need to do, and we keep track
!       of what we've already built so that we don't build it more than once.
        */
    SHOW_PARSE
      {
--- 13129,13139 ----
  parser_program_hierarchy( const struct cbl_prog_hier_t& hier )
    {
    Analyze();
!   /*  This routine gets called near the end of every program-id.  It keeps
!       growing because the parser doesn't know when it is working on the last
!       program of a list of nested programs.  So, we just do what we need to do,
!       and we keep track of what we've already built so that we don't build it
!       more than once.
        */
    SHOW_PARSE
      {
*************** parser_program_hierarchy( const struct c
*** 13205,13277 ****
    }
  
  void
- parser_set_handled(ec_type_t ec_handled)
-   {
-   if( mode_syntax_only() ) return;
-   SHOW_PARSE
-     {
-     SHOW_PARSE_HEADER
-     char ach[64];
-     sprintf(ach, "ec_type_t: 0x" HOST_SIZE_T_PRINT_HEX_PURE,
-             (fmt_size_t)ec_handled);
-     SHOW_PARSE_TEXT(ach);
-     SHOW_PARSE_END
-     }
- 
-   TRACE1
-     {
-     TRACE1_HEADER
-     TRACE1_END
-     }
- 
-   if( gg_trans_unit.function_stack.size() )
-     {
-     if( ec_handled )
-       {
-       // We assume that exception_handled is zero, always.  We only make it
-       // non-zero when something needs to be done.  __gg__match_exception is
-       // in charge of setting it back to zero.
-       gg_assign(var_decl_exception_handled,
-                 build_int_cst_type(INT, (int)ec_handled));
-       }
-     }
-   else
-     {
-     yywarn("parser_set_handled() called between programs");
-     }
-   }
- 
- void
- parser_set_file_number(int file_number)
-   {
-   if( mode_syntax_only() ) return;
-   SHOW_PARSE
-     {
-     SHOW_PARSE_HEADER
-     char ach[32];
-     sprintf(ach, "file number: %d", file_number);
-     SHOW_PARSE_TEXT(ach);
-     SHOW_PARSE_END
-     }
- 
-   TRACE1
-     {
-     TRACE1_HEADER
-     TRACE1_END
-     }
- 
-   if( gg_trans_unit.function_stack.size() )
-     {
-     gg_assign(var_decl_exception_file_number,
-               build_int_cst_type(INT, file_number));
-     }
-   else
-     {
-     yywarn("parser_set_file_number() called between programs");
-     }
-   }
- 
- void
  parser_set_numeric(struct cbl_field_t *tgt, ssize_t value)
    {
    Analyze();
--- 13358,13363 ----
*************** parser_set_numeric(struct cbl_field_t *t
*** 13298,13407 ****
    }
  
  static void
- stash_exceptions( const cbl_enabled_exceptions_array_t *enabled )
-   {
-   // We need to create a static array of bytes
-   size_t nec = enabled->nec;
-   size_t sz = int_size_in_bytes(cbl_enabled_exception_type_node);
-   size_t narg = nec * sz;
-   cbl_enabled_exception_t *p = enabled->ecs;
- 
-   static size_t prior_nec = 0;
-   static size_t max_nec   = 0;
-   static cbl_enabled_exception_t *prior_p;
- 
-   bool we_got_new_data = false;
-   if( prior_nec != nec )
-     {
-     we_got_new_data = true;
-     }
-   else
-     {
-     // The nec counts are the same.
-     for(size_t i=0; i<nec; i++)
-       {
-       if( p[i].enabled != prior_p[i].enabled
-           || p[i].location != prior_p[i].location
-           || p[i].ec != prior_p[i].ec
-           || p[i].file != prior_p[i].file )
-         {
-         we_got_new_data = true;
-         break;
-         }
-       }
-     }
- 
-   if( !we_got_new_data )
-     {
-     return;
-     }
- 
-   if( nec > max_nec )
-     {
-     max_nec = nec;
-     prior_p = (cbl_enabled_exception_t *)
-               xrealloc(prior_p, max_nec * sizeof(cbl_enabled_exception_t));
-     }
- 
-   memcpy((unsigned char *)prior_p, (unsigned char *)p,
-          nec * sizeof(cbl_enabled_exception_t));
- 
-   static int count = 1;
- 
-   tree array_of_chars_type;
-   tree array_of_chars;
- 
-   if( narg )
-     {
-     char ach[32];
-     sprintf(ach, "_ec_array_%d", count++);
-     array_of_chars_type = build_array_type_nelts(UCHAR, narg);
- 
-     // We have the array.  Now we need to build the constructor for it
-     tree constr = make_node(CONSTRUCTOR);
-     TREE_TYPE(constr) = array_of_chars_type;
-     TREE_STATIC(constr)    = 1;
-     TREE_CONSTANT(constr)  = 1;
-     unsigned char *q = XALLOCAVEC(unsigned char, sz);
- 
-     for(size_t i=0; i<nec; i++)
-       {
-       memset(q, '\0', sz);
-       tree enabled = constant_boolean_node(p[i].enabled, BOOL);
-       tree location = constant_boolean_node(p[i].location, BOOL);
-       tree ec = build_int_cst(UINT, p[i].ec);
-       tree file = build_int_cst(SIZE_T, p[i].file);
-       tree fld = TYPE_FIELDS(cbl_enabled_exception_type_node);
-       native_encode_expr(enabled, q + tree_to_uhwi(byte_position(fld)),
-                          int_size_in_bytes(BOOL));
-       fld = TREE_CHAIN(fld);
-       native_encode_expr(location, q + tree_to_uhwi(byte_position(fld)),
-                          int_size_in_bytes(BOOL));
-       fld = TREE_CHAIN(fld);
-       native_encode_expr(ec, q + tree_to_uhwi(byte_position(fld)),
-                          int_size_in_bytes(UINT));
-       fld = TREE_CHAIN(fld);
-       native_encode_expr(file, q + tree_to_uhwi(byte_position(fld)),
-                          int_size_in_bytes(SIZE_T));
-       for(size_t j=0; j<sz; j++)
-         {
-         CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr),
-                                 build_int_cst_type(SIZE_T, i*sz + j),
-                                 build_int_cst_type(UCHAR, q[j]));
-         }
-       }
-     array_of_chars = gg_define_variable(array_of_chars_type, ach, vs_static);
-     DECL_INITIAL(array_of_chars) = constr;
- 
-     gg_call(VOID,
-             "__gg__stash_exceptions",
-             build_int_cst_type(SIZE_T, enabled->nec),
-             narg ? gg_get_address_of(array_of_chars) : null_pointer_node,
-             NULL_TREE);
-     }
-   }
- 
- static void
  store_location_stuff(const cbl_name_t statement_name)
    {
    if( exception_location_active && !current_declarative_section_name() )
--- 13384,13389 ----
*************** store_location_stuff(const cbl_name_t st
*** 13446,13484 ****
    }
  
  void
- parser_exception_prepare( const cbl_name_t statement_name,
-                           const cbl_enabled_exceptions_array_t *enabled )
-   {
-   Analyze();
-   SHOW_PARSE
-     {
-     SHOW_PARSE_HEADER
-     SHOW_PARSE_TEXT(enabled->nec? " stashing " : " skipping ")
-     SHOW_PARSE_TEXT(statement_name)
-     SHOW_PARSE_END
-     }
- 
-   TRACE1
-     {
-     TRACE1_HEADER
-     TRACE1_END
-     }
- 
-   if( enabled->nec )
-     {
-     if( gg_trans_unit.function_stack.size() )
-       {
-       stash_exceptions(enabled);
-       store_location_stuff(statement_name);
-       }
-     else
-       {
-       yywarn("parser_exception_prepare() called between programs");
-       }
-     }
-   }
- 
- void
  parser_exception_clear()
    {
    if( mode_syntax_only() ) return;
--- 13428,13433 ----
*************** parser_exception_raise(ec_type_t ec)
*** 13506,13513 ****
    }
  
  void
! parser_match_exception(cbl_field_t *index,
!                        cbl_field_t *blob )
    {
    Analyze();
    SHOW_PARSE
--- 13455,13461 ----
    }
  
  void
! parser_match_exception(cbl_field_t *index)
    {
    Analyze();
    SHOW_PARSE
*************** parser_match_exception(cbl_field_t *inde
*** 13515,13528 ****
      SHOW_PARSE_HEADER
      SHOW_PARSE_FIELD(" index   ", index)
      SHOW_PARSE_INDENT
-     if( blob )
-       {
-       SHOW_PARSE_FIELD("blob    ", blob)
-       }
-     else
-       {
-       SHOW_PARSE_TEXT("blob    is NULL")
-       }
      SHOW_PARSE_END
      }
  
--- 13463,13468 ----
*************** parser_match_exception(cbl_field_t *inde
*** 13531,13552 ****
      TRACE1_HEADER
      TRACE1_FIELD("index   ", index, "")
      TRACE1_INDENT
-     TRACE1_TEXT("blob    ")
-     if( blob )
-       {
-       TRACE1_TEXT(blob->name)
-       }
-     else
-       {
-       TRACE1_TEXT("is NULL")
-       }
      TRACE1_END
      }
  
    gg_call(VOID,
            "__gg__match_exception",
            gg_get_address_of(index->var_decl_node),
-           blob ? blob->var_decl_node : null_pointer_node,
            NULL_TREE);
  
    TRACE1
--- 13471,13482 ----
*************** parser_check_fatal_exception()
*** 13569,13580 ****
      SHOW_PARSE_TEXT(" Check for fatal EC...")
      SHOW_PARSE_END
      }
!   gg_call(VOID,
!           "__gg__check_fatal_exception",
!           NULL_TREE);
    }
  
  void
  parser_clear_exception()
    {
    Analyze();
--- 13499,13529 ----
      SHOW_PARSE_TEXT(" Check for fatal EC...")
      SHOW_PARSE_END
      }
!   TRACE1
!     {
!     TRACE1_HEADER
!     TRACE1_TEXT(" Check for fatal EC...")
!     TRACE1_END
!     }
! 
!     gg_call(VOID,
!             "__gg__check_fatal_exception",
!             NULL_TREE);
    }
  
  void
+ parser_push_exception()
+   {
+   gg_call(VOID, "__gg__exception_push", NULL_TREE);
+   }
+ 
+ void
+ parser_pop_exception()
+   {
+   gg_call(VOID, "__gg__exception_pop", NULL_TREE);
+   }
+   
+ void
  parser_clear_exception()
    {
    Analyze();
*************** mh_identical(cbl_refer_t &destref,
*** 13736,13742 ****
          SHOW_PARSE_TEXT("mh_identical()");
          }
        gg_memcpy(gg_add(member(destref.field->var_decl_node,   "data"),
!                        refer_offset_dest(destref)),
                  gg_add(member(sourceref.field->var_decl_node, "data"),
                         tsource.offset),
                  build_int_cst_type(SIZE_T, sourceref.field->data.capacity));
--- 13685,13691 ----
          SHOW_PARSE_TEXT("mh_identical()");
          }
        gg_memcpy(gg_add(member(destref.field->var_decl_node,   "data"),
!                        refer_offset(destref)),
                  gg_add(member(sourceref.field->var_decl_node, "data"),
                         tsource.offset),
                  build_int_cst_type(SIZE_T, sourceref.field->data.capacity));
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13777,13783 ****
          gg_call(VOID,
                  "__gg__psz_to_alpha_move",
                  gg_get_address_of(destref.field->var_decl_node),
!                 refer_offset_dest(destref),
                  refer_size_dest(destref),
                  gg_string_literal(buffer),
                  build_int_cst_type(SIZE_T, strlen(sourceref.field->data.initial)),
--- 13726,13732 ----
          gg_call(VOID,
                  "__gg__psz_to_alpha_move",
                  gg_get_address_of(destref.field->var_decl_node),
!                 refer_offset(destref),
                  refer_size_dest(destref),
                  gg_string_literal(buffer),
                  build_int_cst_type(SIZE_T, strlen(sourceref.field->data.initial)),
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13815,13827 ****
                {
                // We are dealing with a negative number
                gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset_dest(destref)),
                                  build_int_cst_type(UCHAR, 0xFF),
                                  build_int_cst_type(SIZE_T, 8));
                }
              ELSE
                gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset_dest(destref)),
                                  build_int_cst_type(UCHAR, 0x00),
                                  build_int_cst_type(SIZE_T, 8));
                ENDIF
--- 13764,13776 ----
                {
                // We are dealing with a negative number
                gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
                                  build_int_cst_type(UCHAR, 0xFF),
                                  build_int_cst_type(SIZE_T, 8));
                }
              ELSE
                gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
                                  build_int_cst_type(UCHAR, 0x00),
                                  build_int_cst_type(SIZE_T, 8));
                ENDIF
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13830,13836 ****
              {
              // The too-short source is positive.
                gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset_dest(destref)),
                                build_int_cst_type(UCHAR, 0x00),
                                build_int_cst_type(SIZE_T, 8));
              }
--- 13779,13785 ----
              {
              // The too-short source is positive.
                gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
                                build_int_cst_type(UCHAR, 0x00),
                                build_int_cst_type(SIZE_T, 8));
              }
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13839,13845 ****
          tree literalN_value = get_literalN_value(sourceref.field);
          scale_by_power_of_ten_N(literalN_value, -sourceref.field->data.rdigits);
          gg_memcpy(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset_dest(destref)),
                    gg_get_address_of(literalN_value),
                    build_int_cst_type(SIZE_T, sourceref.field->data.capacity));
          moved = true;
--- 13788,13794 ----
          tree literalN_value = get_literalN_value(sourceref.field);
          scale_by_power_of_ten_N(literalN_value, -sourceref.field->data.rdigits);
          gg_memcpy(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
                    gg_get_address_of(literalN_value),
                    build_int_cst_type(SIZE_T, sourceref.field->data.capacity));
          moved = true;
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13900,13906 ****
          tree dest_location = gg_indirect(
                      gg_cast(build_pointer_type(dest_type),
                              gg_add(member(destref.field->var_decl_node, "data"),
!                                    refer_offset_dest(destref))));
          gg_assign(dest_location, gg_cast(dest_type, source));
          moved = true;
          break;
--- 13849,13855 ----
          tree dest_location = gg_indirect(
                      gg_cast(build_pointer_type(dest_type),
                              gg_add(member(destref.field->var_decl_node, "data"),
!                                    refer_offset(destref))));
          gg_assign(dest_location, gg_cast(dest_type, source));
          moved = true;
          break;
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13929,13935 ****
          gg_call(INT,
                  "__gg__int128_to_qualified_field",
                  gg_get_address_of(destref.field->var_decl_node),
!                 refer_offset_dest(destref),
                  refer_size_dest(destref),
                  gg_cast(INT128, literalN_value),
                  build_int_cst_type(INT, sourceref.field->data.rdigits),
--- 13878,13884 ----
          gg_call(INT,
                  "__gg__int128_to_qualified_field",
                  gg_get_address_of(destref.field->var_decl_node),
!                 refer_offset(destref),
                  refer_size_dest(destref),
                  gg_cast(INT128, literalN_value),
                  build_int_cst_type(INT, sourceref.field->data.rdigits),
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13960,13966 ****
          gg_call(VOID,
                  "__gg__string_to_alpha_edited_ascii",
                  gg_add( member(destref.field->var_decl_node, "data"),
!                         refer_offset_dest(destref) ),
                  gg_string_literal(sourceref.field->data.initial),
                  build_int_cst_type(INT, strlen(sourceref.field->data.initial)),
                  gg_string_literal(destref.field->data.picture),
--- 13909,13915 ----
          gg_call(VOID,
                  "__gg__string_to_alpha_edited_ascii",
                  gg_add( member(destref.field->var_decl_node, "data"),
!                         refer_offset(destref) ),
                  gg_string_literal(sourceref.field->data.initial),
                  build_int_cst_type(INT, strlen(sourceref.field->data.initial)),
                  gg_string_literal(destref.field->data.picture),
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 13972,13978 ****
        case FldFloat:
          {
          tree tdest = gg_add(member(destref.field->var_decl_node, "data"),
!                             refer_offset_dest(destref) );
          switch( destref.field->data.capacity )
            {
            // For some reason, using FLOAT128 in the build_pointer_type causes
--- 13921,13927 ----
        case FldFloat:
          {
          tree tdest = gg_add(member(destref.field->var_decl_node, "data"),
!                             refer_offset(destref) );
          switch( destref.field->data.capacity )
            {
            // For some reason, using FLOAT128 in the build_pointer_type causes
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14076,14082 ****
              gg_call(VOID,
                      "__gg__float32_from_int128",
                      gg_get_address_of(destref.field->var_decl_node),
!                     refer_offset_dest(destref),
                      tsource.pfield,
                      tsource.offset,
                      build_int_cst_type(INT, rounded),
--- 14025,14031 ----
              gg_call(VOID,
                      "__gg__float32_from_int128",
                      gg_get_address_of(destref.field->var_decl_node),
!                     refer_offset(destref),
                      tsource.pfield,
                      tsource.offset,
                      build_int_cst_type(INT, rounded),
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14087,14093 ****
              gg_call(VOID,
                      "__gg__float64_from_int128",
                      gg_get_address_of(destref.field->var_decl_node),
!                     refer_offset_dest(destref),
                      tsource.pfield,
                      tsource.offset,
                      build_int_cst_type(INT, rounded),
--- 14036,14042 ----
              gg_call(VOID,
                      "__gg__float64_from_int128",
                      gg_get_address_of(destref.field->var_decl_node),
!                     refer_offset(destref),
                      tsource.pfield,
                      tsource.offset,
                      build_int_cst_type(INT, rounded),
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14098,14104 ****
              gg_call(VOID,
                      "__gg__float128_from_int128",
                      gg_get_address_of(destref.field->var_decl_node),
!                     refer_offset_dest(destref),
                      tsource.pfield,
                      tsource.offset,
                      build_int_cst_type(INT, rounded),
--- 14047,14053 ----
              gg_call(VOID,
                      "__gg__float128_from_int128",
                      gg_get_address_of(destref.field->var_decl_node),
!                     refer_offset(destref),
                      tsource.pfield,
                      tsource.offset,
                      build_int_cst_type(INT, rounded),
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14140,14148 ****
              tree stype = float_type_of(&sourceref);
  
              tree tdest = gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset_dest(destref));
              tree source = gg_add(member(sourceref.field->var_decl_node, "data"),
!                                 refer_offset_source(sourceref));
              gg_assign(gg_indirect(gg_cast(build_pointer_type(dtype), tdest)),
                        gg_cast(dtype,
                                gg_indirect(gg_cast(build_pointer_type(stype),
--- 14089,14097 ----
              tree stype = float_type_of(&sourceref);
  
              tree tdest = gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref));
              tree source = gg_add(member(sourceref.field->var_decl_node, "data"),
!                                 refer_offset(sourceref));
              gg_assign(gg_indirect(gg_cast(build_pointer_type(dtype), tdest)),
                        gg_cast(dtype,
                                gg_indirect(gg_cast(build_pointer_type(stype),
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14159,14165 ****
                            gg_call_expr( INT,
                                  "__gg__float64_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset_dest(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE));
--- 14108,14114 ----
                            gg_call_expr( INT,
                                  "__gg__float64_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE));
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14169,14175 ****
                            gg_call( INT,
                                  "__gg__float64_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset_dest(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE);
--- 14118,14124 ----
                            gg_call( INT,
                                  "__gg__float64_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE);
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14186,14192 ****
                              gg_call_expr( INT,
                                  "__gg__float32_from_64",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset_dest(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE));
--- 14135,14141 ----
                              gg_call_expr( INT,
                                  "__gg__float32_from_64",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE));
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14196,14202 ****
                              gg_call( INT,
                                  "__gg__float32_from_64",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset_dest(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE);
--- 14145,14151 ----
                              gg_call( INT,
                                  "__gg__float32_from_64",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE);
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14211,14217 ****
                              gg_call_expr( INT,
                                  "__gg__float32_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset_dest(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE));
--- 14160,14166 ----
                              gg_call_expr( INT,
                                  "__gg__float32_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE));
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14221,14227 ****
                              gg_call( INT,
                                  "__gg__float32_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset_dest(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE);
--- 14170,14176 ----
                              gg_call( INT,
                                  "__gg__float32_from_128",
                                  gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
                                  tsource.pfield,
                                  tsource.offset,
                                  NULL_TREE);
*************** mh_numeric_display( cbl_refer_t &destref
*** 14328,14334 ****
      static tree source_p  = gg_define_variable(UCHAR_P, "..mhnd_source", vs_file_static); // The source data pointer
      static tree source_ep = gg_define_variable(UCHAR_P, "..mhnd_source_e", vs_file_static); // When we need an end pointer
  
!     gg_assign(dest_p,   qualified_data_dest(destref));
      gg_assign(source_p, gg_add(member(sourceref.field, "data"),
                                 tsource.offset));
  
--- 14277,14283 ----
      static tree source_p  = gg_define_variable(UCHAR_P, "..mhnd_source", vs_file_static); // The source data pointer
      static tree source_ep = gg_define_variable(UCHAR_P, "..mhnd_source_e", vs_file_static); // When we need an end pointer
  
!     gg_assign(dest_p,   qualified_data_location(destref));
      gg_assign(source_p, gg_add(member(sourceref.field, "data"),
                                 tsource.offset));
  
*************** mh_numeric_display( cbl_refer_t &destref
*** 14668,14674 ****
          if( destref.field->attr & leading_e )
            {
            // The sign bit goes into the first byte:
!           gg_assign(dest_p, qualified_data_dest(destref));
            }
          else
            {
--- 14617,14623 ----
          if( destref.field->attr & leading_e )
            {
            // The sign bit goes into the first byte:
!           gg_assign(dest_p, qualified_data_location(destref));
            }
          else
            {
*************** mh_little_endian( cbl_refer_t &destref,
*** 14830,14836 ****
        // Get binary value from float actually scales the source value to the
        // dest:: rdigits
        copy_little_endian_into_place(destref.field,
!                                     refer_offset_dest(destref),
                                      source,
                                      destref.field->data.rdigits,
                                      check_for_error,
--- 14779,14785 ----
        // Get binary value from float actually scales the source value to the
        // dest:: rdigits
        copy_little_endian_into_place(destref.field,
!                                     refer_offset(destref),
                                      source,
                                      destref.field->data.rdigits,
                                      check_for_error,
*************** mh_little_endian( cbl_refer_t &destref,
*** 14844,14850 ****
                          sourceref.field,
                          tsource.offset);
        copy_little_endian_into_place(destref.field,
!                                     refer_offset_dest(destref),
                                      source,
                                      sourceref.field->data.rdigits,
                                      check_for_error,
--- 14793,14799 ----
                          sourceref.field,
                          tsource.offset);
        copy_little_endian_into_place(destref.field,
!                                     refer_offset(destref),
                                      source,
                                      sourceref.field->data.rdigits,
                                      check_for_error,
*************** mh_source_is_group( cbl_refer_t &destref
*** 14867,14873 ****
      // We are moving a group to a something.  The rule here is just move as
      // many bytes as you can, and, if necessary, fill with spaces
      tree tdest   = gg_add( member(destref.field->var_decl_node, "data"),
!                            refer_offset_dest(destref));
      tree tsource = gg_add( member(sourceref.field->var_decl_node, "data"),
                             tsrc.offset);
      tree dbytes  = refer_size_dest(destref);
--- 14816,14822 ----
      // We are moving a group to a something.  The rule here is just move as
      // many bytes as you can, and, if necessary, fill with spaces
      tree tdest   = gg_add( member(destref.field->var_decl_node, "data"),
!                            refer_offset(destref));
      tree tsource = gg_add( member(sourceref.field->var_decl_node, "data"),
                             tsrc.offset);
      tree dbytes  = refer_size_dest(destref);
*************** move_helper(tree size_error,        // T
*** 14935,14941 ****
        stash_size = destref.field->data.capacity;
        gg_assign(stash, gg_cast(UCHAR_P, gg_realloc(stash, stash_size)));
        }
!     st_data = qualified_data_dest(destref);
      st_size = refer_size_dest(destref);
      gg_memcpy(stash,
                st_data,
--- 14884,14890 ----
        stash_size = destref.field->data.capacity;
        gg_assign(stash, gg_cast(UCHAR_P, gg_realloc(stash, stash_size)));
        }
!     st_data = qualified_data_location(destref);
      st_size = refer_size_dest(destref);
      gg_memcpy(stash,
                st_data,
*************** move_helper(tree size_error,        // T
*** 15072,15078 ****
                  gg_call_expr( INT,
                                "__gg__move_literala",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset_dest(destref),
                                refer_size_dest(destref),
                                build_int_cst_type(INT, rounded_parameter),
                                build_string_literal(source_length,
--- 15021,15027 ----
                  gg_call_expr( INT,
                                "__gg__move_literala",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset(destref),
                                refer_size_dest(destref),
                                build_int_cst_type(INT, rounded_parameter),
                                build_string_literal(source_length,
*************** move_helper(tree size_error,        // T
*** 15085,15091 ****
                  gg_call     ( INT,
                                "__gg__move_literala",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset_dest(destref),
                                refer_size_dest(destref),
                                build_int_cst_type(INT, rounded_parameter),
                                build_string_literal(source_length,
--- 15034,15040 ----
                  gg_call     ( INT,
                                "__gg__move_literala",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset(destref),
                                refer_size_dest(destref),
                                build_int_cst_type(INT, rounded_parameter),
                                build_string_literal(source_length,
*************** move_helper(tree size_error,        // T
*** 15128,15134 ****
                  gg_call_expr( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset_dest(destref),
                                refer_size_dest(destref),
                                tsource.pfield,
                                tsource.offset,
--- 15077,15083 ----
                  gg_call_expr( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset(destref),
                                refer_size_dest(destref),
                                tsource.pfield,
                                tsource.offset,
*************** move_helper(tree size_error,        // T
*** 15142,15148 ****
                  gg_call     ( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset_dest(destref),
                                refer_size_dest(destref),
                                tsource.pfield,
                                tsource.offset,
--- 15091,15097 ----
                  gg_call     ( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset(destref),
                                refer_size_dest(destref),
                                tsource.pfield,
                                tsource.offset,
*************** binary_initial_from_float128(cbl_field_t
*** 15301,15314 ****
      case 4:
      case 8:
      case 16:
!       type = build_nonstandard_integer_type (field->data.capacity
! 					     * BITS_PER_UNIT, 0);
        native_encode_wide_int (type, i, (unsigned char *)retval,
! 			      field->data.capacity);
        break;
      default:
        fprintf(stderr,
!               "Trouble in initial_from_float128 at %s() %s:%d\n",
                __func__,
                __FILE__,
                __LINE__);
--- 15250,15263 ----
      case 4:
      case 8:
      case 16:
!       type = build_nonstandard_integer_type ( field->data.capacity
!                                               * BITS_PER_UNIT, 0);
        native_encode_wide_int (type, i, (unsigned char *)retval,
!                               field->data.capacity);
        break;
      default:
        fprintf(stderr,
!               "Trouble in binary_initial_from_float128 at %s() %s:%d\n",
                __func__,
                __FILE__,
                __LINE__);
*************** digits_from_float128(char *retval, cbl_f
*** 15367,15379 ****
    }
  
  static char *
! initial_from_float128(cbl_field_t *field)
    {
    Analyze();
    // This routine returns an xmalloced buffer that is intended to replace the
    // data.initial member of the incoming field.
  
!   //fprintf(stderr, "initial_from_float128 %s\n", field->name);
  
    char *retval = NULL;
    int rdigits;
--- 15316,15328 ----
    }
  
  static char *
! initial_from_initial(cbl_field_t *field)
    {
    Analyze();
    // This routine returns an xmalloced buffer that is intended to replace the
    // data.initial member of the incoming field.
  
!   //fprintf(stderr, "initial_from_initial %s\n", field->name);
  
    char *retval = NULL;
    int rdigits;
*************** initial_from_float128(cbl_field_t *field
*** 15433,15440 ****
        }
      if( set_return )
        {
!       retval = (char *)xmalloc(field->data.capacity);
        memset(retval, const_char, field->data.capacity);
        return retval;
        }
      }
--- 15382,15390 ----
        }
      if( set_return )
        {
!       retval = (char *)xmalloc(field->data.capacity+1);
        memset(retval, const_char, field->data.capacity);
+       retval[field->data.capacity] = '\0';
        return retval;
        }
      }
*************** initial_from_float128(cbl_field_t *field
*** 15739,15755 ****
          case 4:
            value = real_value_truncate (TYPE_MODE (FLOAT), value);
            native_encode_real (SCALAR_FLOAT_TYPE_MODE (FLOAT), &value,
! 			      (unsigned char *)retval, 4, 0);
            break;
          case 8:
            value = real_value_truncate (TYPE_MODE (DOUBLE), value);
            native_encode_real (SCALAR_FLOAT_TYPE_MODE (DOUBLE), &value,
! 			      (unsigned char *)retval, 8, 0);
            break;
          case 16:
            value = real_value_truncate (TYPE_MODE (FLOAT128), value);
            native_encode_real (SCALAR_FLOAT_TYPE_MODE (FLOAT128), &value,
! 			      (unsigned char *)retval, 16, 0);
            break;
          }
        break;
--- 15689,15705 ----
          case 4:
            value = real_value_truncate (TYPE_MODE (FLOAT), value);
            native_encode_real (SCALAR_FLOAT_TYPE_MODE (FLOAT), &value,
!                               (unsigned char *)retval, 4, 0);
            break;
          case 8:
            value = real_value_truncate (TYPE_MODE (DOUBLE), value);
            native_encode_real (SCALAR_FLOAT_TYPE_MODE (DOUBLE), &value,
!                               (unsigned char *)retval, 8, 0);
            break;
          case 16:
            value = real_value_truncate (TYPE_MODE (FLOAT128), value);
            native_encode_real (SCALAR_FLOAT_TYPE_MODE (FLOAT128), &value,
!                               (unsigned char *)retval, 16, 0);
            break;
          }
        break;
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16838,16844 ****
  
      if( new_var->data.initial )
        {
!       new_initial = initial_from_float128(new_var);
        }
      if( new_initial )
        {
--- 16788,16794 ----
  
      if( new_var->data.initial )
        {
!       new_initial = initial_from_initial(new_var);
        }
      if( new_initial )
        {
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16858,16906 ****
      else
        {
        new_initial = new_var->data.initial;
-       if( !new_initial )
-         {
-         if( length_of_initial_string )
-           {
-           gcc_unreachable();
-           }
-         }
-       else
-         {
-         if( new_var->type == FldLiteralN )
-           {
-           // We need to convert this string to the internal character set
-           // char *buffer = NULL;
-           // size_t buffer_size = 0;
-           // raw_to_internal(&buffer,
-                           // &buffer_size,
-                           // new_var->data.initial,
-                           // strlen(new_var->data.initial));
-           // new_initial = bufer;
-           // length_of_initial_string = strlen(new_var->data.initial)+1;
-           }
-         }
        }
  
      actual_allocate:
!     // if( level_88_string )
!       // {
!       // actually_create_the_static_field( new_var,
!                                         // data_area,
!                                         // level_88_string_size,
!                                         // level_88_string,
!                                         // immediate_parent,
!                                         // new_var_decl);
!       // }
!     // else
!       {
!       actually_create_the_static_field( new_var,
!                                         data_area,
!                                         length_of_initial_string,
!                                         new_initial,
!                                         immediate_parent,
!                                         new_var_decl);
!       }
  
      if( level_88_string )
        {
--- 16808,16822 ----
      else
        {
        new_initial = new_var->data.initial;
        }
  
      actual_allocate:
!     actually_create_the_static_field( new_var,
!                                       data_area,
!                                       length_of_initial_string,
!                                       new_initial,
!                                       immediate_parent,
!                                       new_var_decl);
  
      if( level_88_string )
        {
diff -Nrcpad gcc-16-20250504/gcc/cobol/genapi.h gcc-16-20250511/gcc/cobol/genapi.h
*** gcc-16-20250504/gcc/cobol/genapi.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/genapi.h	Sun May 11 22:32:08 2025
*************** void parser_return_atend( cbl_file_t *fi
*** 518,530 ****
  void parser_return_notatend( cbl_file_t *file );
  void parser_return_finish( cbl_file_t *file );
  
- void parser_exception_prepare( const cbl_name_t statement_name,
-                                const cbl_enabled_exceptions_array_t *enabled );
- 
- //void parser_exception_condition( cbl_field_t *ec );
- 
  struct cbl_exception_file;
- struct cbl_exception_files_t;
  
  void parser_exception_raise(ec_type_t ec);
  
--- 518,524 ----
*************** void parser_call_exception_end( cbl_labe
*** 533,542 ****
  
  //void parser_stash_exceptions(const cbl_enabled_exceptions_array_t *enabled);
  
! void parser_match_exception(cbl_field_t *index,
!                             cbl_field_t *blob);
  void parser_check_fatal_exception();
  void parser_clear_exception();
  
  void parser_call_targets_dump();
  size_t parser_call_target_update( size_t caller,
--- 527,537 ----
  
  //void parser_stash_exceptions(const cbl_enabled_exceptions_array_t *enabled);
  
! void parser_match_exception(cbl_field_t *index);
  void parser_check_fatal_exception();
  void parser_clear_exception();
+ void parser_push_exception();
+ void parser_pop_exception();
  
  void parser_call_targets_dump();
  size_t parser_call_target_update( size_t caller,
*************** void parser_print_long(const char *fmt,
*** 569,576 ****
  void parser_print_string(const char *ach);
  void parser_print_string(const char *fmt, const char *ach); // fmt needs to have a %s in it
  void parser_set_statement(const char *statement);
- void parser_set_handled(ec_type_t ec_handled);
- void parser_set_file_number(int file_number);
  void parser_exception_clear();
  
  void parser_init_list_size(int count_of_variables);
--- 564,569 ----
*************** void parser_init_list();
*** 579,584 ****
  
  tree file_static_variable(tree type, const char *name);
  
! void parser_statement_begin();
  
  #endif
--- 572,580 ----
  
  tree file_static_variable(tree type, const char *name);
  
! void parser_statement_begin( const cbl_name_t name, tree ecs, tree dcls );
! 
! tree parser_compile_ecs( const std::vector<uint64_t>& ecs );
! tree parser_compile_dcls( const std::vector<uint64_t>& dcls );
  
  #endif
diff -Nrcpad gcc-16-20250504/gcc/cobol/genmath.cc gcc-16-20250511/gcc/cobol/genmath.cc
*** gcc-16-20250504/gcc/cobol/genmath.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/genmath.cc	Sun May 11 22:32:08 2025
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 413,419 ****
        get_binary_value( sum,
                          NULL,
                          A[0].field,
!                         refer_offset_source(A[0]));
  
        // Add in the rest of them:
        for(size_t i=1; i<nA; i++)
--- 413,419 ----
        get_binary_value( sum,
                          NULL,
                          A[0].field,
!                         refer_offset(A[0]));
  
        // Add in the rest of them:
        for(size_t i=1; i<nA; i++)
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 421,427 ****
          get_binary_value( addend,
                            NULL,
                            A[i].field,
!                           refer_offset_source(A[i]));
          gg_assign(sum, gg_add(sum, addend));
          }
        //gg_printf("The intermediate sum is %ld\n", gg_cast(LONG, sum), NULL_TREE);
--- 421,427 ----
          get_binary_value( addend,
                            NULL,
                            A[i].field,
!                           refer_offset(A[i]));
          gg_assign(sum, gg_add(sum, addend));
          }
        //gg_printf("The intermediate sum is %ld\n", gg_cast(LONG, sum), NULL_TREE);
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 431,437 ****
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset_dest(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( format == giving_e )
            {
--- 431,437 ----
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( format == giving_e )
            {
*************** fast_subtract(size_t nC, cbl_num_result_
*** 495,506 ****
  
        tree sum     = gg_define_variable(term_type);
        tree addend  = gg_define_variable(term_type);
!       get_binary_value(sum, NULL, A[0].field, refer_offset_dest(A[0]));
  
        // Add in the rest of them:
        for(size_t i=1; i<nA; i++)
          {
!         get_binary_value(sum, NULL, A[i].field, refer_offset_dest(A[i]));
          gg_assign(sum, gg_add(sum, addend));
          }
        //gg_printf("The intermediate sum is %ld\n", gg_cast(LONG, sum), NULL_TREE);
--- 495,506 ----
  
        tree sum     = gg_define_variable(term_type);
        tree addend  = gg_define_variable(term_type);
!       get_binary_value(sum, NULL, A[0].field, refer_offset(A[0]));
  
        // Add in the rest of them:
        for(size_t i=1; i<nA; i++)
          {
!         get_binary_value(sum, NULL, A[i].field, refer_offset(A[i]));
          gg_assign(sum, gg_add(sum, addend));
          }
        //gg_printf("The intermediate sum is %ld\n", gg_cast(LONG, sum), NULL_TREE);
*************** fast_subtract(size_t nC, cbl_num_result_
*** 508,514 ****
        if( format == giving_e )
          {
          // We now subtract the sum from B[0]
!         get_binary_value(addend, NULL, B[0].field, refer_offset_dest(B[0]));
          gg_assign(sum, gg_subtract(addend, sum));
          }
  
--- 508,514 ----
        if( format == giving_e )
          {
          // We now subtract the sum from B[0]
!         get_binary_value(addend, NULL, B[0].field, refer_offset(B[0]));
          gg_assign(sum, gg_subtract(addend, sum));
          }
  
*************** fast_subtract(size_t nC, cbl_num_result_
*** 517,523 ****
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset_dest(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( format == giving_e )
            {
--- 517,523 ----
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( format == giving_e )
            {
*************** fast_multiply(size_t nC, cbl_num_result_
*** 575,586 ****
  
        tree valA    = gg_define_variable(term_type);
        tree valB    = gg_define_variable(term_type);
!       get_binary_value(valA, NULL, A[0].field, refer_offset_dest(A[0]));
  
        if( nB )
          {
          // This is a MULTIPLY Format 2
!         get_binary_value(valB, NULL, B[0].field, refer_offset_dest(B[0]));
          }
  
        if(nB)
--- 575,586 ----
  
        tree valA    = gg_define_variable(term_type);
        tree valB    = gg_define_variable(term_type);
!       get_binary_value(valA, NULL, A[0].field, refer_offset(A[0]));
  
        if( nB )
          {
          // This is a MULTIPLY Format 2
!         get_binary_value(valB, NULL, B[0].field, refer_offset(B[0]));
          }
  
        if(nB)
*************** fast_multiply(size_t nC, cbl_num_result_
*** 593,599 ****
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset_dest(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
            {
--- 593,599 ----
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
            {
*************** fast_divide(size_t nC, cbl_num_result_t
*** 653,665 ****
        tree divisor  = gg_define_variable(term_type);
        tree dividend = gg_define_variable(term_type);
        tree quotient = NULL_TREE;
!       get_binary_value(divisor, NULL, A[0].field, refer_offset_dest(A[0]));
  
        if( nB )
          {
          // This is a MULTIPLY Format 2, where we are dividing A into B and
          // assigning that to C
!         get_binary_value(dividend, NULL, B[0].field, refer_offset_dest(B[0]));
  
          quotient = gg_define_variable(term_type);
          // Yes, in this case the divisor and dividend are switched.  Things are
--- 653,665 ----
        tree divisor  = gg_define_variable(term_type);
        tree dividend = gg_define_variable(term_type);
        tree quotient = NULL_TREE;
!       get_binary_value(divisor, NULL, A[0].field, refer_offset(A[0]));
  
        if( nB )
          {
          // This is a MULTIPLY Format 2, where we are dividing A into B and
          // assigning that to C
!         get_binary_value(dividend, NULL, B[0].field, refer_offset(B[0]));
  
          quotient = gg_define_variable(term_type);
          // Yes, in this case the divisor and dividend are switched.  Things are
*************** fast_divide(size_t nC, cbl_num_result_t
*** 672,678 ****
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset_dest(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
            {
--- 672,678 ----
          {
          tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
!                                 refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
            {
*************** fast_divide(size_t nC, cbl_num_result_t
*** 696,702 ****
          if( remainder.field )
            {
            tree dest_addr = gg_add(member(remainder.field->var_decl_node, "data"),
!                                   refer_offset_dest(remainder));
            dest_type = tree_type_from_size(remainder.field->data.capacity, 0);
            ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
--- 696,702 ----
          if( remainder.field )
            {
            tree dest_addr = gg_add(member(remainder.field->var_decl_node, "data"),
!                                   refer_offset(remainder));
            dest_type = tree_type_from_size(remainder.field->data.capacity, 0);
            ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
diff -Nrcpad gcc-16-20250504/gcc/cobol/genutil.cc gcc-16-20250511/gcc/cobol/genutil.cc
*** gcc-16-20250504/gcc/cobol/genutil.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/genutil.cc	Sun May 11 22:32:08 2025
*************** bool suppress_dest_depends = false;
*** 57,64 ****
  std::vector<std::string>current_filename;
  
  tree var_decl_exception_code;         // int         __gg__exception_code;
- tree var_decl_exception_handled;      // int         __gg__exception_handled;
- tree var_decl_exception_file_number;  // int         __gg__exception_file_number;
  tree var_decl_exception_file_status;  // int         __gg__exception_file_status;
  tree var_decl_exception_file_name;    // const char *__gg__exception_file_name;
  tree var_decl_exception_statement;    // const char *__gg__exception_statement;
--- 57,62 ----
*************** tree var_decl_exception_paragraph;    //
*** 70,76 ****
  
  tree var_decl_default_compute_error;  // int         __gg__default_compute_error;
  tree var_decl_rdigits;                // int         __gg__rdigits;
- tree var_decl_odo_violation;          // int         __gg__odo_violation;
  tree var_decl_unique_prog_id;         // size_t      __gg__unique_prog_id;
  
  tree var_decl_entry_location;         // This is for managing ENTRY statements
--- 68,73 ----
*************** tree var_decl_treeplet_4s; // SIZE_T_P
*** 109,114 ****
--- 106,123 ----
  tree var_decl_nop;                // int         __gg__nop;
  tree var_decl_main_called;        // int         __gg__main_called;
  
+ #if 0
+ #define REFER
+ #else
+ #define REFER do                                \
+   {                                             \
+   if( getenv("REFER") )                         \
+     {                                           \
+     fprintf(stderr, "REFER %s\n", __func__);    \
+     }                                           \
+   }while(0);
+ #endif
+ 
  int
  get_scaled_rdigits(cbl_field_t *field)
    {
*************** get_integer_value(tree value,
*** 228,233 ****
--- 237,247 ----
                    tree         offset,
                    bool check_for_fractional_digits)
    {
+   if(field->type == FldLiteralN)
+     {
+     }
+ 
+ 
    Analyze();
    // Call this routine when you know the result has to be an integer with no
    // rdigits.  This routine became necessary the first time I saw an
*************** get_integer_value(tree value,
*** 265,271 ****
    }
  
  static
! tree
  get_any_capacity(cbl_field_t *field)
    {
    if( field->attr & (any_length_e | intermediate_e) )
--- 279,285 ----
    }
  
  static
! tree  // This is a SIZE_T
  get_any_capacity(cbl_field_t *field)
    {
    if( field->attr & (any_length_e | intermediate_e) )
*************** get_any_capacity(cbl_field_t *field)
*** 274,484 ****
      }
    else
      {
!     return build_int_cst_type(LONG, field->data.capacity);
      }
    }
  
  static tree
! get_data_offset_dest(cbl_refer_t &refer,
                  int *pflags = NULL)
    {
!   Analyze();
!   // This routine returns a tree which is the size_t offset to the data in the
!   // refer/field
! 
!   // Because this is for destination/receiving variables, OCCURS DEPENDING ON
!   // is not checked.
! 
!   tree retval = gg_define_variable(SIZE_T);
!   gg_assign(retval, size_t_zero_node);
! 
!   // We have a refer.
!   // At the very least, we have an constant offset
!   int all_flags = 0;
!   int all_flag_bit = 1;
! 
!   static tree value64 = gg_define_variable(LONG, ".._gdod_value64", vs_file_static);
! 
!   if( refer.nsubscript )
!     {
!     // We have at least one subscript:
! 
!     // Figure we have three subscripts, so nsubscript is 3
!     // Figure that the subscripts are {5, 4, 3}
! 
!     // We expect that starting from refer.field, that three of our ancestors --
!     // call them A1, A2, and A3 -- have occurs clauses.
! 
!     // We need to start with the rightmost subscript, and work our way up through
!     // our parents.  As we find each parent with an OCCURS, we increment qual_data
!     // by (subscript-1)*An->data.capacity
! 
!     // Establish the field_t pointer for walking up through our ancestors:
!     cbl_field_t *parent = refer.field;
! 
!     // Note the backwards test, because refer->nsubscript is an unsigned value
!     for(size_t i=refer.nsubscript-1; i<refer.nsubscript; i-- )
!       {
!       // We need to search upward for an ancestor with occurs_max:
!       while(parent)
!         {
!         if( parent->occurs.ntimes() )
!           {
!           break;
!           }
!         parent = parent_of(parent);
!         }
!       // we might have an error condition at this point:
!       if( !parent )
!         {
!         cbl_internal_error("Too many subscripts");
!         }
!       // Pick up the integer value of the subscript:
!       static tree subscript  = gg_define_variable(LONG, "..gdod_subscript", vs_file_static);
! 
!       get_integer_value(subscript,
!                         refer.subscripts[i].field,
!                         refer_offset_dest(refer.subscripts[i]),
!                         CHECK_FOR_FRACTIONAL_DIGITS);
!       IF( var_decl_rdigits,
!           ne_op,
!           integer_zero_node )
!         {
!         // The subscript isn't an integer
!         set_exception_code(ec_bound_subscript_e);
!         }
!       ELSE
!         {
!         }
!       ENDIF
! 
! //      gg_printf("%s(): We have a subscript of %d from %s\n",
! //                  gg_string_literal(__func__),
! //                  subscript,
! //                  gg_string_literal(refer.subscripts[i].field->name),
! //                  NULL_TREE);
! 
!       if( (refer.subscripts[i].field->attr & FIGCONST_MASK) == zero_value_e )
!         {
!         // This refer is a figconst ZERO; we treat it as an ALL ZERO
!         // This is our internal representation for ALL, as in TABLE(ALL)
! 
!         // Set the subscript to 1
!         gg_assign(subscript,
!                   build_int_cst_type( TREE_TYPE(subscript), 1));
!         // Flag this position as ALL
!         all_flags |= all_flag_bit;
!         }
!       all_flag_bit <<= 1;
! 
!       // Subscript is now a one-based integer
!       // Make it zero-based:
! 
!       gg_decrement(subscript);
! 
!       IF( subscript, lt_op, gg_cast(TREE_TYPE(subscript), integer_zero_node) )
!         {
!         // The subscript is too small
!         set_exception_code(ec_bound_subscript_e);
!         gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript), 0));
!         }
!       ELSE
!         {
!         // gg_printf("parent->occurs.ntimes() is %d\n", build_int_cst_type(INT, parent->occurs.ntimes()), NULL_TREE);
!         IF( subscript,
!             ge_op,
!             build_int_cst_type(TREE_TYPE(subscript), parent->occurs.ntimes()) )
!           {
!           // The subscript is too large
!           set_exception_code(ec_bound_subscript_e);
!           gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript), 0));
!           }
!         ELSE
!           {
!           // We have a good subscript:
!           // Check for an ODO violation:
!           if( parent->occurs.depending_on )
!             {
!             cbl_field_t *depending_on = cbl_field_of(symbol_at(parent->occurs.depending_on));
!             get_integer_value(value64, depending_on);
!             IF( subscript, ge_op, value64 )
!               {
!               gg_assign(var_decl_odo_violation, integer_one_node);
!               }
!             ELSE
!               ENDIF
!             }
! 
!           tree augment = gg_multiply(subscript, get_any_capacity(parent));
!           gg_assign(retval, gg_add(retval, gg_cast(SIZE_T, augment)));
!           }
!           ENDIF
!         }
!         ENDIF
!       parent = parent_of(parent);
!       }
!     }
! 
!   if( refer.refmod.from )
!     {
!     // We have a refmod to deal with
!     static tree refstart = gg_define_variable(LONG, "..gdos_refstart", vs_file_static);
! 
!     get_integer_value(refstart,
!                       refer.refmod.from->field,
!                       refer_offset_source(*refer.refmod.from),
!                       CHECK_FOR_FRACTIONAL_DIGITS);
!     IF( var_decl_rdigits,
!         ne_op,
!         integer_zero_node )
!       {
!       // refmod offset is not an integer, and has to be
!       set_exception_code(ec_bound_ref_mod_e);
!       }
!     ELSE
!       ENDIF
! 
!     // Make refstart zero-based:
!     gg_decrement(refstart);
! 
!     IF( refstart, lt_op, gg_cast(LONG, integer_zero_node) )
!       {
!       set_exception_code(ec_bound_ref_mod_e);
!       gg_assign(refstart, build_int_cst_type(TREE_TYPE(refstart), 0));
!       }
!     ELSE
!       {
!       tree capacity = get_any_capacity(refer.field);
!       IF( refstart, gt_op, gg_cast(LONG, capacity) )
!         {
!         set_exception_code(ec_bound_ref_mod_e);
!         gg_assign(refstart, build_int_cst_type(TREE_TYPE(refstart), 0));
!         }
!       ELSE
!         ENDIF
!       }
!       ENDIF
! 
!     // We have a good refstart
!     gg_assign(retval, gg_add(retval, gg_cast(SIZE_T, refstart)));
!     }
! 
!   if( pflags )
      {
!     *pflags = all_flags;
      }
- 
- //  gg_printf("*****>>>>> %s(): returning %p\n",
- //            gg_string_literal(__func__),
- //            retval,
- //            NULL_TREE);
-   return retval;
-   }
- 
- static tree
- get_data_offset_source(cbl_refer_t &refer,
-                 int *pflags = NULL)
-   {
    Analyze();
    // This routine returns a tree which is the size_t offset to the data in the
    // refer/field
--- 288,306 ----
      }
    else
      {
!     return build_int_cst_type(SIZE_T, field->data.capacity);
      }
    }
  
  static tree
! get_data_offset(cbl_refer_t &refer,
                  int *pflags = NULL)
    {
!   REFER;
!   if( getenv("REFER") )
      {
!     fprintf(stderr, "      %s %s\n", refer.field->name, refer.field->data.initial);
      }
    Analyze();
    // This routine returns a tree which is the size_t offset to the data in the
    // refer/field
*************** get_data_offset_source(cbl_refer_t &refe
*** 535,541 ****
  
        get_integer_value(subscript,
                          refer.subscripts[i].field,
!                         refer_offset_source(refer.subscripts[i]),
                          CHECK_FOR_FRACTIONAL_DIGITS);
        IF( var_decl_rdigits,
            ne_op,
--- 357,363 ----
  
        get_integer_value(subscript,
                          refer.subscripts[i].field,
!                         refer_offset(refer.subscripts[i]),
                          CHECK_FOR_FRACTIONAL_DIGITS);
        IF( var_decl_rdigits,
            ne_op,
*************** get_data_offset_source(cbl_refer_t &refe
*** 543,548 ****
--- 365,371 ----
          {
          // The subscript isn't an integer
          set_exception_code(ec_bound_subscript_e);
+         gg_assign(var_decl_rdigits, integer_zero_node);
          }
        ELSE
          {
*************** get_data_offset_source(cbl_refer_t &refe
*** 600,606 ****
              get_integer_value(value64, depending_on);
              IF( subscript, ge_op, value64 )
                {
!               gg_assign(var_decl_odo_violation, integer_one_node);
                }
              ELSE
                ENDIF
--- 423,429 ----
              get_integer_value(value64, depending_on);
              IF( subscript, ge_op, value64 )
                {
!               set_exception_code(ec_bound_odo_e);
                }
              ELSE
                ENDIF
*************** get_data_offset_source(cbl_refer_t &refe
*** 623,629 ****
  
      get_integer_value(refstart,
                        refer.refmod.from->field,
!                       refer_offset_source(*refer.refmod.from),
                        CHECK_FOR_FRACTIONAL_DIGITS);
      IF( var_decl_rdigits,
          ne_op,
--- 446,452 ----
  
      get_integer_value(refstart,
                        refer.refmod.from->field,
!                       refer_offset(*refer.refmod.from),
                        CHECK_FOR_FRACTIONAL_DIGITS);
      IF( var_decl_rdigits,
          ne_op,
*************** get_data_offset_source(cbl_refer_t &refe
*** 631,636 ****
--- 454,460 ----
        {
        // refmod offset is not an integer, and has to be
        set_exception_code(ec_bound_ref_mod_e);
+       gg_assign(var_decl_rdigits, integer_zero_node);
        }
      ELSE
        ENDIF
*************** get_data_offset_source(cbl_refer_t &refe
*** 645,651 ****
        }
      ELSE
        {
!       tree capacity = get_any_capacity(refer.field);
        IF( refstart, gt_op, gg_cast(LONG, capacity) )
          {
          set_exception_code(ec_bound_ref_mod_e);
--- 469,475 ----
        }
      ELSE
        {
!       tree capacity = get_any_capacity(refer.field);  // This is a size_t
        IF( refstart, gt_op, gg_cast(LONG, capacity) )
          {
          set_exception_code(ec_bound_ref_mod_e);
*************** get_binary_value( tree value,
*** 710,716 ****
        {
        if( SCALAR_FLOAT_TYPE_P(value) )
          {
!         gg_assign(value, gg_cast(TREE_TYPE(value), field->literal_decl_node));
          }
        else
          {
--- 534,540 ----
        {
        if( SCALAR_FLOAT_TYPE_P(value) )
          {
!         cbl_internal_error("Can't get float value from %s", field->name);
          }
        else
          {
*************** scale_by_power_of_ten_N(tree value,
*** 1331,1347 ****
    Analyzer.Message("takes int N");
    if( N == 0 )
      {
-     if( check_for_fractional )
-       {
-       gg_assign(var_decl_rdigits, integer_zero_node);
-       }
      }
    else if( N > 0 )
      {
-     if( check_for_fractional )
-       {
-       gg_assign(var_decl_rdigits, integer_zero_node);
-       }
      tree value_type = TREE_TYPE(value);
      FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(N);
      gg_assign(value, gg_multiply(value, wide_int_to_tree( value_type,
--- 1155,1163 ----
*************** scale_by_power_of_ten_N(tree value,
*** 1361,1367 ****
          gg_assign(var_decl_rdigits, integer_one_node);
          }
        ELSE
-         gg_assign(var_decl_rdigits, integer_zero_node);
          ENDIF
        }
      gg_assign(value, gg_divide(value, wide_int_to_tree( value_type,
--- 1177,1182 ----
*************** build_array_of_treeplets( int ngroup,
*** 1758,1764 ****
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_1o, i),
!                     refer_offset_source(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_1s, i),
                      refer_size_source(refers[i]));
            }
--- 1573,1579 ----
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_1o, i),
!                     refer_offset(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_1s, i),
                      refer_size_source(refers[i]));
            }
*************** build_array_of_treeplets( int ngroup,
*** 1770,1776 ****
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_2o, i),
!                     refer_offset_source(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_2s, i),
                      refer_size_source(refers[i]));
            }
--- 1585,1591 ----
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_2o, i),
!                     refer_offset(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_2s, i),
                      refer_size_source(refers[i]));
            }
*************** build_array_of_treeplets( int ngroup,
*** 1782,1788 ****
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_3o, i),
!                     refer_offset_source(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_3s, i),
                      refer_size_source(refers[i]));
            }
--- 1597,1603 ----
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_3o, i),
!                     refer_offset(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_3s, i),
                      refer_size_source(refers[i]));
            }
*************** build_array_of_treeplets( int ngroup,
*** 1794,1800 ****
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_4o, i),
!                     refer_offset_source(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_4s, i),
                      refer_size_source(refers[i]));
            }
--- 1609,1615 ----
                      refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
                                      : gg_cast(cblc_field_p_type_node, null_pointer_node));
            gg_assign(gg_array_value(var_decl_treeplet_4o, i),
!                     refer_offset(refers[i]));
            gg_assign(gg_array_value(var_decl_treeplet_4s, i),
                      refer_size_source(refers[i]));
            }
*************** build_array_of_fourplets( int ngroup,
*** 1839,1845 ****
        gg_assign(gg_array_value(var_decl_treeplet_1f, i),
                  gg_get_address_of(refers[i].field->var_decl_node));
        gg_assign(gg_array_value(var_decl_treeplet_1o, i),
!                 refer_offset_source(refers[i], &flag_bits));
        gg_assign(gg_array_value(var_decl_treeplet_1s, i),
                  refer_size_source(refers[i]));
        gg_assign(gg_array_value(var_decl_fourplet_flags, i),
--- 1654,1660 ----
        gg_assign(gg_array_value(var_decl_treeplet_1f, i),
                  gg_get_address_of(refers[i].field->var_decl_node));
        gg_assign(gg_array_value(var_decl_treeplet_1o, i),
!                 refer_offset(refers[i], &flag_bits));
        gg_assign(gg_array_value(var_decl_treeplet_1s, i),
                  refer_size_source(refers[i]));
        gg_assign(gg_array_value(var_decl_fourplet_flags, i),
*************** get_literal_string(cbl_field_t *field)
*** 1914,1924 ****
  bool
  refer_is_clean(cbl_refer_t &refer)
    {
!   if( !refer.field )
      {
      // It is routine for a refer to have no field.  It happens when the parser
!     // passes us a refer for an optional parameter that has been ommitted, for
      // example.
      return true;
      }
  
--- 1729,1742 ----
  bool
  refer_is_clean(cbl_refer_t &refer)
    {
!   if( !refer.field || refer.field->type == FldLiteralN )
      {
      // It is routine for a refer to have no field.  It happens when the parser
!     // passes us a refer for an optional parameter that has been omitted, for
      // example.
+     
+     // It is also the case that a FldLiteralN will never have suscripts, or the
+     // like.
      return true;
      }
  
*************** refer_is_clean(cbl_refer_t &refer)
*** 1931,1985 ****
            ;
    }
  
! void
! REFER_CHECK(const char *func,
!             int         line,
!             cbl_refer_t &refer
!             )
!   {
!   static int counter=1;
! 
!   if( counter == 5 )
!     {
!     fprintf(stderr, "DING! %d\n", counter);
!     }
! 
! 
!   fprintf(stderr,
!           "ct REFER_CHECK(%d): %s():%d %s\n",
!           counter,
!           func,
!           line,
!           refer.field->name);
! 
!   gg_printf("rt REFER_CHECK(%d): %s():%d %s (%s)\n",
!             build_int_cst_type(INT, counter),
!             gg_string_literal(func),
!             build_int_cst_type(INT, line),
!             gg_string_literal(refer.field->name),
!             gg_string_literal(cbl_field_type_str(refer.field->type)),
!             NULL_TREE);
!   counter+=1;
!   }
! 
  static
  tree  // size_t
  refer_refmod_length(cbl_refer_t &refer)
    {
    Analyze();
    if( refer.refmod.from || refer.refmod.len )
      {
-     // First, check for compile-time errors
      static tree refstart = gg_define_variable(LONG, "..rrl_refstart", vs_file_static);
      static tree reflen   = gg_define_variable(LONG, "..rrl_reflen", vs_file_static);
  
!     tree rt_capacity = get_any_capacity(refer.field);
! 
!     gg_assign(reflen, gg_cast(TREE_TYPE(reflen), integer_one_node));
  
      get_integer_value(refstart,
                        refer.refmod.from->field,
!                       refer_offset_source(*refer.refmod.from),
                        CHECK_FOR_FRACTIONAL_DIGITS);
      IF( var_decl_rdigits,
          ne_op,
--- 1749,1774 ----
            ;
    }
  
! /*  This routine returns the length portion of a refmod(start:length) reference.
!     It extracts both the start and the length so that it can add them together
!     to make sure that result falls within refer.capacity.
!     */
  static
  tree  // size_t
  refer_refmod_length(cbl_refer_t &refer)
    {
+   REFER;
    Analyze();
    if( refer.refmod.from || refer.refmod.len )
      {
      static tree refstart = gg_define_variable(LONG, "..rrl_refstart", vs_file_static);
      static tree reflen   = gg_define_variable(LONG, "..rrl_reflen", vs_file_static);
  
!     tree rt_capacity = get_any_capacity(refer.field); // This is a size_t
  
      get_integer_value(refstart,
                        refer.refmod.from->field,
!                       refer_offset(*refer.refmod.from),
                        CHECK_FOR_FRACTIONAL_DIGITS);
      IF( var_decl_rdigits,
          ne_op,
*************** refer_refmod_length(cbl_refer_t &refer)
*** 1987,1992 ****
--- 1776,1782 ----
        {
        set_exception_code(ec_bound_ref_mod_e);
        gg_assign(refstart, gg_cast(LONG, integer_one_node));
+       gg_assign(var_decl_rdigits, integer_zero_node);
        }
      ELSE
        ENDIF
*************** refer_refmod_length(cbl_refer_t &refer)
*** 1998,2003 ****
--- 1788,1795 ----
        {
        set_exception_code(ec_bound_ref_mod_e);
        gg_assign(refstart, gg_cast(LONG, integer_zero_node));
+       // Set reflen to one here, because otherwise it won't be established.
+       gg_assign(reflen, gg_cast(TREE_TYPE(reflen), integer_one_node));
        }
      ELSE
        {
*************** refer_refmod_length(cbl_refer_t &refer)
*** 2005,2010 ****
--- 1797,1804 ----
          {
          set_exception_code(ec_bound_ref_mod_e);
          gg_assign(refstart, gg_cast(LONG, integer_zero_node));
+         // Set reflen to one here, because otherwise it won't be established.
+         gg_assign(reflen, gg_cast(TREE_TYPE(reflen), integer_one_node));
          }
        ELSE
          {
*************** refer_refmod_length(cbl_refer_t &refer)
*** 2012,2018 ****
            {
            get_integer_value(reflen,
                              refer.refmod.len->field,
!                             refer_offset_source(*refer.refmod.len),
                              CHECK_FOR_FRACTIONAL_DIGITS);
            IF( var_decl_rdigits,
                ne_op,
--- 1806,1812 ----
            {
            get_integer_value(reflen,
                              refer.refmod.len->field,
!                             refer_offset(*refer.refmod.len),
                              CHECK_FOR_FRACTIONAL_DIGITS);
            IF( var_decl_rdigits,
                ne_op,
*************** refer_refmod_length(cbl_refer_t &refer)
*** 2021,2026 ****
--- 1815,1821 ----
              // length is not an integer
              set_exception_code(ec_bound_ref_mod_e);
              gg_assign(reflen, gg_cast(LONG, integer_one_node));
+             gg_assign(var_decl_rdigits, integer_zero_node);
              }
            ELSE
              {
*************** refer_refmod_length(cbl_refer_t &refer)
*** 2044,2053 ****
  
                // Our intentions are honorable.  But at this point, where
                // we notice that start + length is too long, the
!               // get_data_offset_source routine has already been run and
                // it's too late to actually change the refstart.  There are
                // theoretical solutions to this -- mainly,
!               // get_data_offset_source needs to check the start + len for
                // validity.  But I am not going to do it now.  Think of this
                // as the TODO item.
                gg_assign(refstart, gg_cast(LONG, integer_zero_node));
--- 1839,1848 ----
  
                // Our intentions are honorable.  But at this point, where
                // we notice that start + length is too long, the
!               // get_data_offset routine has already been run and
                // it's too late to actually change the refstart.  There are
                // theoretical solutions to this -- mainly,
!               // get_data_offset needs to check the start + len for
                // validity.  But I am not going to do it now.  Think of this
                // as the TODO item.
                gg_assign(refstart, gg_cast(LONG, integer_zero_node));
*************** static
*** 2084,2089 ****
--- 1879,1885 ----
  tree // size_t
  refer_fill_depends(cbl_refer_t &refer)
    {
+   REFER;
    // This returns a positive number which is the amount a depends-limited
    // capacity needs to be reduced.
    Analyze();
*************** refer_fill_depends(cbl_refer_t &refer)
*** 2114,2119 ****
--- 1910,1916 ----
      // This needs to evaluate to an integer
      set_exception_code(ec_bound_odo_e);
      gg_assign(value64, build_int_cst_type(TREE_TYPE(value64), odo->occurs.bounds.upper));
+     gg_assign(var_decl_rdigits, integer_zero_node);
      }
    ELSE
      ENDIF
*************** refer_fill_depends(cbl_refer_t &refer)
*** 2156,2228 ****
    }
  
  tree  // size_t
! refer_offset_dest(cbl_refer_t &refer)
    {
!   Analyze();
!   // This has to be on the stack, because there are places where this routine
!   // is called twice before the results are used.
  
    if( !refer.field )
      {
      return size_t_zero_node;
      }
  
!   if( !refer.nsubscript )
      {
!     return get_data_offset_dest(refer);
      }
  
!   gg_assign(var_decl_odo_violation, integer_zero_node);
! 
!   tree retval = gg_define_variable(SIZE_T);
!   gg_assign(retval, get_data_offset_dest(refer));
!   IF( var_decl_odo_violation, ne_op, integer_zero_node )
!     {
!     set_exception_code(ec_bound_odo_e);
!     }
!   ELSE
!     ENDIF
    return retval;
    }
  
! tree  // size_t
! refer_size_dest(cbl_refer_t &refer)
    {
    Analyze();
!   //static tree retval = gg_define_variable(SIZE_T, "..rsd_retval", vs_file_static);
!   tree retval = gg_define_variable(SIZE_T);
  
    if( !refer.field )
      {
      return size_t_zero_node;
      }
    if( refer_is_clean(refer) )
      {
-     // When the refer has no modifications, we return zero, which is interpreted
-     // as "use the original length"
      return get_any_capacity(refer.field);
      }
  
    // Step the first:  Get the actual full length:
-   if( refer.field->attr & (intermediate_e | any_length_e) )
-     {
-     // This is an intermediate; use the length that might have changed
-     // because of a FUNCTION TRIM, or whatnot.
- 
-     // We also pick up capacity for variables that were specified in
-     // linkage as ANY LENGTH
-     gg_assign(retval, member(refer.field->var_decl_node, "capacity"));
-     }
  
!   if( refer_has_depends(refer, refer_dest) )
      {
      // Because there is a depends, we might have to change the length:
      gg_assign(retval, refer_fill_depends(refer));
      }
    else
      {
!     // Use the compile-time value
!     gg_assign(retval, build_int_cst_type(SIZE_T, refer.field->data.capacity));
      }
  
    if( refer.refmod.from || refer.refmod.len )
--- 1953,2013 ----
    }
  
  tree  // size_t
! refer_offset(cbl_refer_t &refer,
!                     int *pflags)
    {
!   // This routine calculates the effect of a refer offset on the
!   // refer.field->data location.  When there are subscripts, the data location
!   // gets augmented by the (subscript-1)*element_size calculation.  And when 
!   // there is a refmod, the data location additionally gets augmented by
!   // (refmod.from-1)
  
+   REFER;
    if( !refer.field )
      {
+     // It's common for the field to be missing.  It generally means that an
+     // optional parameter wasn't supplied.
      return size_t_zero_node;
      }
  
!   if( refer.field->type == FldLiteralN || refer.field->type == FldLiteralA )
      {
!     // We know that literals have no offset
!     return size_t_zero_node;
      }
  
!   tree retval = get_data_offset(refer, pflags);
    return retval;
    }
  
! static
! tree
! refer_size(cbl_refer_t &refer, refer_type_t refer_type)
    {
+   REFER;
    Analyze();
!   static tree retval = gg_define_variable(SIZE_T, "..rs_retval", vs_file_static);
  
    if( !refer.field )
      {
      return size_t_zero_node;
      }
+ 
    if( refer_is_clean(refer) )
      {
      return get_any_capacity(refer.field);
      }
  
    // Step the first:  Get the actual full length:
  
!   if( refer_has_depends(refer, refer_type) )
      {
      // Because there is a depends, we might have to change the length:
      gg_assign(retval, refer_fill_depends(refer));
      }
    else
      {
!     gg_assign(retval, get_any_capacity(refer.field));
      }
  
    if( refer.refmod.from || refer.refmod.len )
*************** refer_size_dest(cbl_refer_t &refer)
*** 2231,2237 ****
      // retval is the ODO based total length.
      // refmod is the length resulting from refmod(from:len)
      // We have to reduce retval by the effect of refmod:
!     tree diff = gg_subtract(build_int_cst_type(SIZE_T, refer.field->data.capacity),
                              refmod);
      gg_assign(retval, gg_subtract(retval, diff));
      }
--- 2016,2022 ----
      // retval is the ODO based total length.
      // refmod is the length resulting from refmod(from:len)
      // We have to reduce retval by the effect of refmod:
!     tree diff = gg_subtract(get_any_capacity(refer.field),
                              refmod);
      gg_assign(retval, gg_subtract(retval, diff));
      }
*************** refer_size_dest(cbl_refer_t &refer)
*** 2239,2341 ****
    }
  
  tree  // size_t
! refer_offset_source(cbl_refer_t &refer,
!                     int *pflags)
    {
!   if( !refer.field )
!     {
!     return size_t_zero_node;
!     }
!   if( !refer.nsubscript )
!     {
!     return get_data_offset_source(refer);
!     }
! 
!   Analyze();
! 
!   tree retval = gg_define_variable(SIZE_T);
!   gg_assign(var_decl_odo_violation, integer_zero_node);
! 
!   gg_assign(retval, get_data_offset_source(refer, pflags));
!   IF( var_decl_odo_violation, ne_op, integer_zero_node )
!     {
!     set_exception_code(ec_bound_odo_e);
!     }
!   ELSE
!     ENDIF
!   return retval;
    }
  
  tree  // size_t
  refer_size_source(cbl_refer_t &refer)
    {
!   if( !refer.field )
!     {
!     return size_t_zero_node;
!     }
!   if( refer_is_clean(refer) )
!     {
!     // When the refer has no modifications, we return zero, which is interpreted
!     // as "use the original length"
!     if( refer.field->attr & (intermediate_e | any_length_e) )
!       {
!       return member(refer.field->var_decl_node, "capacity");
!       }
!     else
!       {
!       return build_int_cst_type(SIZE_T, refer.field->data.capacity);
!       }
!     }
  
!   Analyze();
  
!   // Step the first:  Get the actual full length:
!   static tree retval = gg_define_variable(SIZE_T, "..rss_retval", vs_file_static);
!   if( refer.field->attr & (intermediate_e | any_length_e) )
!     {
!     // This is an intermediate; use the length that might have changed
!     // because of a FUNCTION TRIM, or whatnot.
  
!     // We also pick up capacity for variables that were specified in
!     // linkage as ANY LENGTH
!     gg_assign(retval,
!               member(refer.field->var_decl_node, "capacity"));
!     }
  
!   if( refer_has_depends(refer, refer_source) )
!     {
!     // Because there is a depends, we might have to change the length:
!     gg_assign(retval, refer_fill_depends(refer));
!     }
!   else
      {
!     // Use the compile-time value
!     gg_assign(retval, build_int_cst_type(SIZE_T, refer.field->data.capacity));
      }
  
!   if( refer.refmod.from || refer.refmod.len )
      {
!     tree refmod = refer_refmod_length(refer);
!     // retval is the ODO based total length.
!     // refmod is the length resulting from refmod(from:len)
!     // We have to reduce retval by the effect of refmod:
!     tree diff = gg_subtract(build_int_cst_type(SIZE_T, refer.field->data.capacity),
!                             refmod);
!     gg_assign(retval, gg_subtract(retval, diff));
      }
-   return retval;
-   }
  
! tree
! qualified_data_source(cbl_refer_t &refer)
!   {
!   return gg_add(member(refer.field->var_decl_node, "data"),
!                 refer_offset_source(refer));
    }
  
  tree
! qualified_data_dest(cbl_refer_t &refer)
    {
    return gg_add(member(refer.field->var_decl_node, "data"),
!                 refer_offset_dest(refer));
    }
--- 2024,2076 ----
    }
  
  tree  // size_t
! refer_size_dest(cbl_refer_t &refer)
    {
!   REFER;
!   return refer_size(refer, refer_dest);
    }
  
  tree  // size_t
  refer_size_source(cbl_refer_t &refer)
    {
!   REFER;
!   /*  There are oddities involved with refer_size_source and refer_size_dest.
!       See the comments in refer_has_depends for some explanation.  There are
!       other considerations, as well.  For example, consider a move, where you
!       have both a source and a dest.  Given that refer_size returns a static,
!       there are ways that the source and dest can trip over each other.
  
!       The logic here avoids all known cases where they might trip over each
!       other.  But there conceivably might be others,.
  
!       You have been warned.
  
!       */
  
!   // This test has to be here, otherwise there are failures in regression
!   // testing.
!   if( !refer.field )
      {
!     return size_t_zero_node;
      }
  
!   // This test has to be here, otherwise there are failures in regression
!   // testing.
!   if( refer_is_clean(refer) )
      {
!     return get_any_capacity(refer.field);
      }
  
!   // This assignment has to be here. Simply returning refer_size() results
!   // in regression testing errors.
!   static tree retval = gg_define_variable(SIZE_T, "..rss_retval", vs_file_static);
!   gg_assign(retval, refer_size(refer, refer_source));
!   return retval;
    }
  
  tree
! qualified_data_location(cbl_refer_t &refer)
    {
    return gg_add(member(refer.field->var_decl_node, "data"),
!                 refer_offset(refer));
    }
diff -Nrcpad gcc-16-20250504/gcc/cobol/genutil.h gcc-16-20250511/gcc/cobol/genutil.h
*** gcc-16-20250504/gcc/cobol/genutil.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/genutil.h	Sun May 11 22:32:08 2025
*************** extern bool suppress_dest_depends;
*** 45,52 ****
  extern std::vector<std::string>current_filename;
  
  extern tree var_decl_exception_code;         // int         __gg__exception_code;
- extern tree var_decl_exception_handled;      // int         __gg__exception_handled;
- extern tree var_decl_exception_file_number;  // int         __gg__exception_file_number;
  extern tree var_decl_exception_file_status;  // int         __gg__exception_file_status;
  extern tree var_decl_exception_file_name;    // const char *__gg__exception_file_name;
  extern tree var_decl_exception_statement;    // const char *__gg__exception_statement;
--- 45,50 ----
*************** extern tree var_decl_exception_paragraph
*** 58,64 ****
  
  extern tree var_decl_default_compute_error;  // int         __gg__default_compute_error;
  extern tree var_decl_rdigits;                // int         __gg__rdigits;
- extern tree var_decl_odo_violation;          // int         __gg__odo_violation;
  extern tree var_decl_unique_prog_id;         // size_t      __gg__unique_prog_id;
  
  extern tree var_decl_entry_location;         // This is for managing ENTRY statements
--- 56,61 ----
*************** void      set_exception_code_func(ec_typ
*** 123,129 ****
  #define set_exception_code(ec) set_exception_code_func(ec, __LINE__)
  bool      process_this_exception(ec_type_t ec);
  #define   CHECK_FOR_FRACTIONAL_DIGITS true
! void      get_integer_value(tree value,
                              cbl_field_t *field,
                              tree         offset=NULL,  // size_t
                              bool check_for_fractional_digits=false);
--- 120,126 ----
  #define set_exception_code(ec) set_exception_code_func(ec, __LINE__)
  bool      process_this_exception(ec_type_t ec);
  #define   CHECK_FOR_FRACTIONAL_DIGITS true
! void      get_integer_value(tree value,  // This is always a LONG
                              cbl_field_t *field,
                              tree         offset=NULL,  // size_t
                              bool check_for_fractional_digits=false);
*************** char     *get_literal_string(cbl_field_t
*** 143,163 ****
  
  bool      refer_is_clean(cbl_refer_t &refer);
  
! tree      refer_offset_source(cbl_refer_t &refer,
!                               int *pflags=NULL);
  tree      refer_size_source(cbl_refer_t &refer);
- tree      refer_offset_dest(cbl_refer_t &refer);
  tree      refer_size_dest(cbl_refer_t &refer);
  
! void     REFER_CHECK( const char *func,
!                       int         line,
!                       cbl_refer_t &refer
!                       );
! #define refer_check(a) REFER_CHECK(__func__, __LINE__, a)
! 
! tree      qualified_data_source(cbl_refer_t &refer);
! 
! tree      qualified_data_dest(cbl_refer_t &refer);
  
  void      build_array_of_treeplets( int ngroup,
                                      size_t N,
--- 140,151 ----
  
  bool      refer_is_clean(cbl_refer_t &refer);
  
! tree      refer_offset(cbl_refer_t &refer,
!                        int *pflags=NULL);
  tree      refer_size_source(cbl_refer_t &refer);
  tree      refer_size_dest(cbl_refer_t &refer);
  
! tree      qualified_data_location(cbl_refer_t &refer);
  
  void      build_array_of_treeplets( int ngroup,
                                      size_t N,
diff -Nrcpad gcc-16-20250504/gcc/cobol/lexio.cc gcc-16-20250511/gcc/cobol/lexio.cc
*** gcc-16-20250504/gcc/cobol/lexio.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/lexio.cc	Sun May 11 22:32:08 2025
*************** static struct {
*** 46,53 ****
--- 46,67 ----
      first_file = false;
      return tf;
    }
+   inline bool is_fixed() const { return column == 7; }
+   inline bool is_reffmt() const { return is_fixed() && right_margin == 73; }
+   inline bool is_free() const { return ! is_fixed(); }
+   
+   const char * description() const {
+     if( is_reffmt() ) return "REFERENCE";
+     if( is_fixed() ) return "FIXED";
+     if( is_free() ) return "FREE";
+     gcc_unreachable();
+   }    
  } indicator = { true, false, 0, 0 };
  
+ // public source format test functions
+ bool is_fixed_format() { return indicator.is_fixed(); }
+ bool is_reference_format() { return indicator.is_reffmt(); }
+ 
  static bool debug_mode = false;
  
  /*
*************** cobol_set_indicator_column( int column )
*** 86,95 ****
    indicator.column = column;
  }
  
- bool is_fixed_format() { return indicator.column == 7; }
- bool is_reference_format() {
-   return indicator.column == 7 && indicator.right_margin == 73;
- }
  bool include_debug()      { return indicator.column == 7 && debug_mode; }
  bool set_debug( bool tf ) { return debug_mode = tf && is_fixed_format(); }
  
--- 100,105 ----
*************** check_source_format_directive( filespan_
*** 348,360 ****
        gcc_assert(cm[3].length() == 4 || cm[3].length() == 5);
        break;
      }
!     mfile.cur = const_cast<char*>(cm[0].second);
      dbgmsg( "%s:%d: %s format set, on line " HOST_SIZE_T_PRINT_UNSIGNED,
              __func__, __LINE__,
              indicator.column == 7? "FIXED" : "FREE",
              (fmt_size_t)mfile.lineno() );
!     erase_line(const_cast<char*>(cm[0].first),
!                const_cast<char*>(cm[0].second));
    }
  }
  
--- 358,371 ----
        gcc_assert(cm[3].length() == 4 || cm[3].length() == 5);
        break;
      }
! 
      dbgmsg( "%s:%d: %s format set, on line " HOST_SIZE_T_PRINT_UNSIGNED,
              __func__, __LINE__,
              indicator.column == 7? "FIXED" : "FREE",
              (fmt_size_t)mfile.lineno() );
!     char *bol = indicator.is_fixed()? mfile.cur : const_cast<char*>(cm[0].first);
!     erase_line(bol, const_cast<char*>(cm[0].second));
!     mfile.cur = const_cast<char*>(cm[0].second);
    }
  }
  
*************** struct buffer_t : public bytespan_t {
*** 393,409 ****
    }
  };
  
! static bool
! valid_sequence_area( const char *p, const char *eodata ) {
!   const char *pend = p + 6;
!   if ( eodata < pend ) return false;
  
!   for( ; p < pend; p++ ) {
!     if( ! (ISDIGIT(*p) || *p == SPACE) ) {
!       return false;
      }
    }
!   return true; // characters either digits or blanks
  }
  
  const char * esc( size_t len, const char input[] );
--- 404,425 ----
    }
  };
  
! static inline bool is_p( char ch ) { return TOUPPER(ch) == 'P'; }
  
! static bool
! is_program_id( const char *p, const char *eol ) {
!   static const std::string program_id("PROGRAM-ID");
!   auto eop = p + program_id.size();
!   if( eop < eol ) {
!     // PROGRAM-ID must be followed by a dot, perhaps with intervening whitespace.
!     for( const char *dot=eop; dot < eol && *dot != '.'; dot++ ) {
!       if( !ISSPACE(*dot) ) return false;
      }
+     std::string line (p, eop);
+     std::transform(line.begin(), line.end(), line.begin(), ::toupper);
+     return line == program_id;
    }
!   return false;
  }
  
  const char * esc( size_t len, const char input[] );
*************** cdftext::map_file( int fd ) {
*** 1604,1609 ****
--- 1620,1673 ----
  
  bool lexio_dialect_mf();
  
+ /*
+  * A valid sequence area is 6 digits or blanks at the begining of the line that
+  * contains PROGRAM-ID. Return NULL if no valid sequence area, else return
+  * pointer to BOL.
+  */
+ static const char *
+ valid_sequence_area( const char *data, const char *eodata ) {
+   
+   for( const char *p = data;
+        (p = std::find_if(p, eodata, is_p)) != eodata;
+        p++ )
+   {
+     auto eol = std::find(p, eodata, '\n');
+     if( p == data || ISSPACE(p[-1]) ) {
+       if( is_program_id(p, eol) ) {  // found program-id token
+ 	const char *bol = p;
+ 	for( ; data <= bol-1 && bol[-1] != '\n'; --bol )
+ 	  ;
+ 	if( 6 < p - bol ) {
+ 	  if( std::all_of(bol, bol+6, ::isdigit) ) {
+ 	    return bol;
+ 	  }
+ 	  if( std::all_of(bol, bol+6, ::isblank) ) {
+ 	    return bol;
+ 	  }
+ 	  break;
+ 	}
+       }
+     }
+   }
+   return nullptr;  
+ }
+ 
+ /*
+  * Reference Format -- valid COBOL between columns 8 and 72 -- has data after
+  * column 72 on the PROGRAM-ID line. Extended Reference Format (that allows
+  * longer lines) has no reason to follow the PROGRAM-ID with more stuff.
+  */
+ static bool
+ infer_reference_format( const char *bol, const char *eodata ) {
+   assert(bol);
+   auto eol = std::find(bol, eodata, '\n');
+   if( 72 < eol - bol ) {
+     return ! std::all_of(bol + 72, eol, ::isspace);
+   }
+   return false;
+ }
+ 
  filespan_t
  cdftext::free_form_reference_format( int input ) {
    filespan_t source_buffer = map_file(input);
*************** cdftext::free_form_reference_format( int
*** 1622,1646 ****
    } current( mfile.data );
  
    /*
!    * If the format is not explicitly set on the command line, test the
!    * first 6 bytes of the first file to determine the format
!    * heuristically. If the first 6 characters are only digits or
!    * blanks, then the file is in fixed format.
     */
- 
    if( indicator.inference_pending()  ) {
!     const char *p = mfile.data;
!     while( p < mfile.eodata ) {
!       const char * pend =
!         std::find(p, const_cast<const char *>(mfile.eodata), '\n');
!       if( 6 < pend - p ) break;
!       p = pend;
!       if( p < mfile.eodata) p++;
      }
-     if( valid_sequence_area(p, mfile.eodata) ) indicator.column = 7;
  
      dbgmsg("%s:%d: %s format detected", __func__, __LINE__,
!            indicator.column == 7? "FIXED" : "FREE");
    }
  
    while( mfile.next_line() ) {
--- 1686,1704 ----
    } current( mfile.data );
  
    /*
!    * Infer source code format. 
     */
    if( indicator.inference_pending()  ) {
!     const char *bol = valid_sequence_area(mfile.data, mfile.eodata);
!     if( bol ) {
!       indicator.column = 7;
!       if( infer_reference_format(bol, mfile.eodata) ) {
! 	indicator.right_margin = 73;
!       }
      }
  
      dbgmsg("%s:%d: %s format detected", __func__, __LINE__,
!            indicator.description());
    }
  
    while( mfile.next_line() ) {
diff -Nrcpad gcc-16-20250504/gcc/cobol/parse.y gcc-16-20250511/gcc/cobol/parse.y
*** gcc-16-20250504/gcc/cobol/parse.y	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/parse.y	Sun May 11 22:32:08 2025
***************
*** 332,338 ****
  			NUMED     "NUMERIC-EDITED picture"
  			NUMED_CR  "NUMERIC-EDITED CR picture"
  			NUMED_DB  "NUMERIC-EDITED DB picture"
! %token  <number>        NINEDOT NINES NINEV PIC_P
  %token  <string>        SPACES
  %token  <literal>       LITERAL
  %token  <number>        END EOP
--- 332,338 ----
  			NUMED     "NUMERIC-EDITED picture"
  			NUMED_CR  "NUMERIC-EDITED CR picture"
  			NUMED_DB  "NUMERIC-EDITED DB picture"
! %token  <number>        NINEDOT NINES NINEV PIC_P ONES
  %token  <string>        SPACES
  %token  <literal>       LITERAL
  %token  <number>        END EOP
***************
*** 341,347 ****
  %token  <number>        NUMBER NEGATIVE
  %token  <numstr>        NUMSTR    "numeric literal"
  %token  <number>        OVERFLOW_kw "OVERFLOW"
! %token  <computational> COMPUTATIONAL
  
  %token  <boolean>       PERFORM BACKWARD
  %token  <number>        POSITIVE
--- 341,347 ----
  %token  <number>        NUMBER NEGATIVE
  %token  <numstr>        NUMSTR    "numeric literal"
  %token  <number>        OVERFLOW_kw "OVERFLOW"
! %token  <computational> BINARY_INTEGER COMPUTATIONAL
  
  %token  <boolean>       PERFORM BACKWARD
  %token  <number>        POSITIVE
***************
*** 573,584 ****
  			THAN TIME TIMES
  			TO TOP
  			TOP_LEVEL
! 			TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw "True" TRY
! 			TURN TYPE TYPEDEF
  
! 			ULENGTH UNBOUNDED UNIT UNITS UNIT_RECORD UNTIL UP UPON
! 			UPOS UPPER_CASE USAGE USING USUBSTR USUPPLEMENTARY
! 			UTILITY UUID4 UVALID UWIDTH
  
  			VALUE VARIANCE VARYING VOLATILE
  
--- 573,584 ----
  			THAN TIME TIMES
  			TO TOP
  			TOP_LEVEL
! 			TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw "True"
! 			TRY TURN TYPE TYPEDEF
  
! 			ULENGTH UNBOUNDED UNIT UNITS UNIT_RECORD UNTIL
! 			UP UPON UPOS UPPER_CASE USAGE USING 
! 			USUBSTR USUPPLEMENTARY UTILITY UUID4 UVALID UWIDTH
  
  			VALUE VARIANCE VARYING VOLATILE
  
***************
*** 659,665 ****
  %type   <number>        star_cbl_opt close_how
  
  %type   <number>        test_before usage_clause1 might_be
! %type   <boolean>       all optional sign_leading on_off initialized strong
  %type   <number>        count data_clauses data_clause
  %type   <number>        nine nines nps relop spaces_etc reserved_value signed
  %type   <number>        variable_type
--- 659,665 ----
  %type   <number>        star_cbl_opt close_how
  
  %type   <number>        test_before usage_clause1 might_be
! %type   <boolean>       all optional sign_leading on_off initialized strong is_signed
  %type   <number>        count data_clauses data_clause
  %type   <number>        nine nines nps relop spaces_etc reserved_value signed
  %type   <number>        variable_type
***************
*** 701,706 ****
--- 701,707 ----
                          relative_key_clause reserve_clause sharing_clause
  
  %type   <file>          filename read_body write_body delete_body
+ %type   <file>		start_impl start_cond start_body
  %type   <rewrite_t>     rewrite_body
  %type   <min_max>       record_vary rec_contains from_to record_desc
  %type   <file_op>       read_file rewrite1 write_file
***************
*** 714,720 ****
  %type   <refer>         move_tgt selected_name read_key read_into vary_by
  %type   <refer>         accept_refer num_operand envar search_expr any_arg
  %type   <accept_func>	accept_body
! %type   <refers>        expr_list subscripts arg_list free_tgts
  %type   <targets>       move_tgts set_tgts
  %type   <field>         search_varying
  %type   <field>         search_term search_terms
--- 715,721 ----
  %type   <refer>         move_tgt selected_name read_key read_into vary_by
  %type   <refer>         accept_refer num_operand envar search_expr any_arg
  %type   <accept_func>	accept_body
! %type   <refers>        subscript_exprs subscripts arg_list free_tgts
  %type   <targets>       move_tgts set_tgts
  %type   <field>         search_varying
  %type   <field>         search_term search_terms
***************
*** 800,806 ****
  
  %type   <switches>      upsi_entry
  
! %type   <special>       acceptable disp_target
  %type   <display>       disp_body
  
  %type   <false_domain>  domains domain
--- 801,807 ----
  
  %type   <switches>      upsi_entry
  
! %type   <special>       acceptable disp_upon
  %type   <display>       disp_body
  
  %type   <false_domain>  domains domain
***************
*** 1338,1347 ****
        return strlen(lit.data) == lit.len? lit.data : NULL;
    }
  
    static inline char * string_of( const REAL_VALUE_TYPE &cce ) {
        char output[64];
        real_to_decimal( output, &cce, sizeof(output), 32, 0 );
! 
        char decimal = symbol_decimal_point();
        std::replace(output, output + strlen(output), '.', decimal);
        return xstrdup(output);
--- 1339,1393 ----
        return strlen(lit.data) == lit.len? lit.data : NULL;
    }
  
+   static inline void strip_trailing_zeroes(char * const psz)
+     {
+     if( yydebug) return;
+     // The idea here is to take the output of real_to_decimal and make it
+     // more integer friendly.  Any integer value that can be expressed in 1
+     // to MAX_FIXED_POINT_DIGITS digits is converted to a string without a
+     // decimal point and no exponent.
+     char *pdot = strchr(psz, '.');
+     char *pe = strchr(psz, 'e');
+     char *pnz = pe-1;
+     while(*pnz == '0')
+       {
+       pnz--;
+       }
+     // pdot points to the decimal point.
+     // pe points to the 'e'.
+     // pnz points to the rightmost non-zero significand digit.
+ 
+     // Put the exponent on top of the trailing zeroes:
+     memmove(pnz+1, pe, strlen(pe)+1);
+     pe = pnz+1;
+     int exp = atoi(pe+1);
+     // Compute the number digits to the right of the decimal point:
+     int non_zero_digits = pe - (pdot+1);
+     if( exp >= 1 && exp <= MAX_FIXED_POINT_DIGITS && non_zero_digits <= exp)
+       {
+       // Further simplification is possible, because the value does not actually
+       // need a decimal point.  That's because we are dealing with something
+       // like 1.e+0, or 1.23e2 or 1.23e3
+ 
+       // Terminate the value where the 'e' is now:
+       *pe = '\0';
+       // Figure out where the extra zeroes will go:
+       pe -= 1;
+       // Get rid of the decimal place:
+       memmove(pdot, pdot+1, strlen(pdot)+1);
+       // Tack on the additional zeroes:
+       for(int i=0; i<exp - non_zero_digits; i++)
+         {
+         *pe++ = '0';
+         }
+       *pe++ = '\0';
+       }
+     }
+ 
    static inline char * string_of( const REAL_VALUE_TYPE &cce ) {
        char output[64];
        real_to_decimal( output, &cce, sizeof(output), 32, 0 );
!       strip_trailing_zeroes(output);
        char decimal = symbol_decimal_point();
        std::replace(output, output + strlen(output), '.', decimal);
        return xstrdup(output);
*************** namestr:        ctx_name {
*** 1662,1670 ****
                                $$.prefix);
                      YYERROR;
                    }
!                   if( !is_cobol_word($$.data) ) {
  		    error_msg(@1, "literal '%s' must be a COBOL or C identifier",
!                               $$.data);
                    }
                  }
                  ;
--- 1708,1716 ----
                                $$.prefix);
                      YYERROR;
                    }
! 		  if( !is_cobol_charset($$.data) ) {
  		    error_msg(@1, "literal '%s' must be a COBOL or C identifier",
! 			      $$.data);
                    }
                  }
                  ;
*************** dev_mnemonic:	device_name is NAME
*** 2462,2484 ****
                  }
  	|	NAME[device] is NAME[name]
  		{
! 		  static const std::map< std::string, special_name_t > fujitsus
! 		  { // Fujitsu calls these "function names", not device names
! 		    { "ARGUMENT-NUMBER", ARG_NUM_e },
! 		    { "ARGUMENT-VALUE", ARG_VALUE_e } ,
! 		    { "ENVIRONMENT-NAME", ENV_NAME_e },
! 		    { "ENVIRONMENT-VALUE", ENV_VALUE_e },
! 		  };
! 		  std::string device($device);
! 		  std::transform($device, $device + strlen($device),
! 		                 device.begin(), toupper);
! 		  auto p = fujitsus.find(device.c_str());
! 		  if( p == fujitsus.end() ) {
  		    error_msg(@device, "%s is not a device name");
  		  }
  
!                   cbl_special_name_t special = { 0, p->second };
!                   if( !namcpy(@name, special.name, $name) ) YYERROR;
  
                    symbol_special_add(PROGRAM, &special);
  		}
--- 2508,2521 ----
                  }
  	|	NAME[device] is NAME[name]
  		{
! 		  auto p = cmd_or_env_special_of($device);
! 		  if( !p ) {
  		    error_msg(@device, "%s is not a device name");
+ 		    YYERROR;
  		  }
  
!                   cbl_special_name_t special = { 0, *p };
!                   namcpy(@name, special.name, $name);
  
                    symbol_special_add(PROGRAM, &special);
  		}
*************** index_field1:   ctx_name[name]
*** 3240,3246 ****
  		  field.data = data;
                    if( !namcpy(@name, field.name, $name) ) YYERROR;
  
!                   auto symbol = symbol_field(PROGRAM, 0, $name);
                    if( symbol ) {
                      auto field( cbl_field_of(symbol) );
                      error_msg(@name,  "'%s' already defined on line %d",
--- 3277,3283 ----
  		  field.data = data;
                    if( !namcpy(@name, field.name, $name) ) YYERROR;
  
!                   auto symbol = symbol_field(PROGRAM, field.parent, $name);
                    if( symbol ) {
                      auto field( cbl_field_of(symbol) );
                      error_msg(@name,  "'%s' already defined on line %d",
*************** picture_clause: PIC signed nps[fore] nin
*** 4058,4064 ****
--- 4095,4107 ----
                      gcc_unreachable();
                    }
                  }
+ 	|	PIC ones
                  ;
+ ones:		ONES
+ 		{
+ 		  cbl_unimplemented("Boolean type not implemented");
+ 		}
+ 		;
  
  alphanum_pic:   alphanum_part {
                    current_field()->set_attr($1.attr);
*************** usage_clause:   usage_clause1[type]
*** 4167,4177 ****
                    }
                  }
                  ;
! usage_clause1:  usage COMPUTATIONAL[comp]   native
                  {
                    bool infer = true;
                    cbl_field_t *field = current_field();
  
                    // Some binary types have defined capacity;
                    switch($comp.type) {
                    // COMPUTATIONAL and COMP-5 rely on PICTURE.
--- 4210,4230 ----
                    }
                  }
                  ;
! usage_clause1:  usage BIT
! 		{
! 		  cbl_unimplemented("Boolean type not implemented");
! 		}
! |		usage BINARY_INTEGER [comp] is_signed
                  {
+ 		  // action for BINARY_INTEGER is repeated for COMPUTATIONAL, below. 
+ 		  // If it changes, consolidate in a function. 
                    bool infer = true;
                    cbl_field_t *field = current_field();
  
+ 		  if( ! $is_signed ) {
+ 		    $comp.signable = false;
+ 		  }
+ 
                    // Some binary types have defined capacity;
                    switch($comp.type) {
                    // COMPUTATIONAL and COMP-5 rely on PICTURE.
*************** usage_clause1:  usage COMPUTATIONAL[comp
*** 4192,4198 ****
  			  field->clear_attr(signable_e);
  		        } else {
  			  error_msg(@comp, "numeric USAGE invalid "
! 				   "with Alpnanumeric PICTURE");
  			  YYERROR;
  		        }
                          break;
--- 4245,4333 ----
  			  field->clear_attr(signable_e);
  		        } else {
  			  error_msg(@comp, "numeric USAGE invalid "
! 				           "with Alpnanumeric PICTURE");
! 			  dialect_error(@1, "Alpnanumeric COMP-5 or COMP-X", "mf");
! 			  YYERROR;
! 		        }
!                         break;
! 		      case FldNumericDisplay: // PIC 9 COMP-5 or COMP-X
! 		        if( $comp.capacity == 0xFF ) { // comp-x is a bit like comp-5
! 			  assert( field->data.digits == field->data.capacity );
! 		          if( ! dialect_mf() ) {
! 				  dialect_error(@1, "COMP-X", "mf");
! 		          }
! 			}
!                         field->type = $comp.type;
!                         field->data.capacity = type_capacity(field->type,
!                                                              field->data.digits);
! 		        break;
! 		      default: break;
!                       }
! 		    }
!                     break;
! 		  case FldPacked: // comp-6 is unsigned comp-3
! 		    assert(! $comp.signable);  // else PACKED_DECIMAL from scanner
! 		    field->attr |= separate_e;
! 		    if( ! dialect_mf() ) {
! 		      dialect_error(@1, "COMP-6", "mf");
! 		    }
!                     if( field->type == FldNumericDisplay ) {// PICTURE before USAGE
!                       infer = false;
!                       assert(field->data.capacity > 0);
!                       field->type = $comp.type;
!                       field->data.capacity = type_capacity(field->type,
!                                                            field->data.digits);
!                     }
! 		    break;
!                   default:
!                     break;
!                   }
! 
!                   if( infer ) {
!                     if( $comp.capacity > 0 ) {
!                       if( field->data.capacity > 0 ) {
!                         error_msg(@comp, "%s is BINARY type, incompatible with PICTURE",
!                                field->name);
!                         YYERROR;
!                       }
!                       field->data.capacity = $comp.capacity;
!                       field->type = $comp.type;
!                       if( $comp.signable ) {
!                         field->attr = (field->attr | signable_e);
!                       }
!                     }
!                   }
!                   $$ = $comp.type;
!                 }
! 	|	usage COMPUTATIONAL[comp] native
!                 { 
! 		  // logic below duplicates BINARY_INTEGER, above.
! 		  // If it changes, consolidate in a function. 
!                   bool infer = true;
!                   cbl_field_t *field = current_field();
! 
!                   // Some binary types have defined capacity;
!                   switch($comp.type) {
!                   // COMPUTATIONAL and COMP-5 rely on PICTURE.
!                   case FldNumericBinary:
!                     field->attr |= big_endian_e;
!                     __attribute__((fallthrough));
!                   case FldNumericBin5:
! 		    // If no capacity yet, then no picture, infer $comp.capacity.
! 		    // If field has capacity, ensure USAGE is compatible.
! 		    if( field->data.capacity > 0 ) { // PICTURE before USAGE
! 		      infer = false;
! 		      switch( field->type ) {
! 		      case FldAlphanumeric:   // PIC X COMP-5 or COMP-X
! 			assert( field->data.digits == 0 );
! 			assert( field->data.rdigits == 0 );
! 		        if( dialect_mf() ) {
!                           field->type = $comp.type;
! 			  field->clear_attr(signable_e);
! 		        } else {
! 			  error_msg(@comp, "numeric USAGE invalid "
! 				           "with Alpnanumeric PICTURE");
! 			  dialect_error(@1, "Alpnanumeric COMP-5 or COMP-X", "mf");
  			  YYERROR;
  		        }
                          break;
*************** allocate:       ALLOCATE expr[size] CHAR
*** 5259,5265 ****
                    statement_begin(@1, ALLOCATE);
                    if( $size->field->type == FldLiteralN ) {
  		    auto size = TREE_REAL_CST_PTR ($size->field->data.value_of());
!                     if( real_isneg(size) || real_iszero(size) ) { 
                        error_msg(@size, "size must be greater than 0");
                        YYERROR;
                      }
--- 5394,5400 ----
                    statement_begin(@1, ALLOCATE);
                    if( $size->field->type == FldLiteralN ) {
  		    auto size = TREE_REAL_CST_PTR ($size->field->data.value_of());
!                     if( real_isneg(size) || real_iszero(size) ) {
                        error_msg(@size, "size must be greater than 0");
                        YYERROR;
                      }
*************** compute_impl:   COMPUTE compute_body[bod
*** 5299,5305 ****
                  {
                    parser_assign( $body.ntgt, $body.tgts, *$body.expr,
                                   NULL, NULL, current.compute_label() );
!                   current.declaratives_evaluate(ec_none_e);
                  }
                  ;
  compute_cond:   COMPUTE compute_body[body] arith_errs[err]
--- 5434,5440 ----
                  {
                    parser_assign( $body.ntgt, $body.tgts, *$body.expr,
                                   NULL, NULL, current.compute_label() );
!                   current.declaratives_evaluate();
                  }
                  ;
  compute_cond:   COMPUTE compute_body[body] arith_errs[err]
*************** compute_cond:   COMPUTE compute_body[bod
*** 5307,5313 ****
                    parser_assign( $body.ntgt, $body.tgts, *$body.expr,
                                   $err.on_error, $err.not_error,
                                   current.compute_label() );
!                   current.declaratives_evaluate(ec_size_e);
                  }
                  ;
  end_compute:    %empty %prec COMPUTE
--- 5442,5448 ----
                    parser_assign( $body.ntgt, $body.tgts, *$body.expr,
                                   $err.on_error, $err.not_error,
                                   current.compute_label() );
!                   current.declaratives_evaluate();
                  }
                  ;
  end_compute:    %empty %prec COMPUTE
*************** display:        disp_body end_display
*** 5353,5359 ****
  				   args.empty()? NULL : args.data(), args.size(),
  				   DISPLAY_ADVANCE);
  		  }
! 		  current.declaratives_evaluate(ec_none_e);
                  }
          |       disp_body NO ADVANCING end_display
                  {
--- 5488,5494 ----
  				   args.empty()? NULL : args.data(), args.size(),
  				   DISPLAY_ADVANCE);
  		  }
! 		  current.declaratives_evaluate();
                  }
          |       disp_body NO ADVANCING end_display
                  {
*************** display:        disp_body end_display
*** 5369,5378 ****
  		    parser_move( dst, src );
  		  } else {
  		    parser_display($1.special,
! 				   args.empty()? NULL : args.data(), args.size(), 
  				   DISPLAY_NO_ADVANCE);
  		  }
! 		  current.declaratives_evaluate(ec_none_e);
                  }
                  ;
  end_display:    %empty
--- 5504,5513 ----
  		    parser_move( dst, src );
  		  } else {
  		    parser_display($1.special,
! 				   args.empty()? NULL : args.data(), args.size(),
  				   DISPLAY_NO_ADVANCE);
  		  }
! 		  current.declaratives_evaluate();
                  }
                  ;
  end_display:    %empty
*************** disp_body:      disp_vargs[vargs]
*** 5383,5389 ****
                    $$.special = NULL;
                    $$.vargs = $vargs;
                  }
!         |       disp_vargs[vargs] UPON disp_target[special]
                  {
                    $$.special = $special;
                    $$.vargs = $vargs;
--- 5518,5524 ----
                    $$.special = NULL;
                    $$.vargs = $vargs;
                  }
!         |       disp_vargs[vargs] UPON disp_upon[special]
                  {
                    $$.special = $special;
                    $$.vargs = $vargs;
*************** disp_vargs:     DISPLAY vargs {
*** 5395,5411 ****
                  }
                  ;
  
! disp_target:    device_name {
                    $$ = symbol_special($1.id);
                  }
          |       NAME
                  {
!                   symbol_elem_t *e = symbol_special(PROGRAM, $1);
                    if( !e ) {
!                     error_msg(@NAME, "no such special name '%s'", $NAME);
!                     YYERROR;
!                   }
!                   $$ = cbl_special_name_of(e);
                  }
                  ;
  
--- 5530,5554 ----
                  }
                  ;
  
! disp_upon:    	device_name {
                    $$ = symbol_special($1.id);
                  }
          |       NAME
                  {
!                   symbol_elem_t *e = symbol_special(PROGRAM, $NAME);
                    if( !e ) {
! 		    const special_name_t *special_type = cmd_or_env_special_of($NAME);
! 		    if( !special_type ) {
!                       error_msg(@NAME, "no such special name '%s'", $NAME);
!                       YYERROR;
! 		    }
! 		    // Add the name now, as a convenience. 
! 		    cbl_special_name_t special = { 0, *special_type };
! 		    namcpy(@NAME, special.name, $NAME);
! 
!                     e = symbol_special_add(PROGRAM, &special);
! 		  }
! 		  $$ = cbl_special_name_of(e);
                  }
                  ;
  
*************** tableish:	name subscripts[subs] refmod[r
*** 6348,6361 ****
  
  refmod:         LPAREN expr[from] ':' expr[len] ')' %prec NAME
                  {
! 		  if( ! require_numeric(@from, *$from) ) YYERROR;
! 		  if( ! require_numeric(@len, *$len) ) YYERROR;
                    $$.from = $from;
                    $$.len = $len;
                  }
          |       LPAREN expr[from] ':'           ')' %prec NAME
                  {
! 		  if( ! require_numeric(@from, *$from) ) YYERROR;
                    $$.from = $from;
                    $$.len = nullptr;
                  }
--- 6491,6504 ----
  
  refmod:         LPAREN expr[from] ':' expr[len] ')' %prec NAME
                  {
! 		  if( ! require_integer(@from, *$from) ) YYERROR;
! 		  if( ! require_integer(@len, *$len) ) YYERROR;
                    $$.from = $from;
                    $$.len = $len;
                  }
          |       LPAREN expr[from] ':'           ')' %prec NAME
                  {
! 		  if( ! require_integer(@from, *$from) ) YYERROR;
                    $$.from = $from;
                    $$.len = nullptr;
                  }
*************** stop_status:    status         { $$ = NU
*** 7016,7022 ****
                  }
                  ;
  
! subscripts:     LPAREN expr_list ')' {
  		  $$ = $2;
  		  const auto& exprs( $$->refers );
  		  bool ok = std::all_of( exprs.begin(), exprs.end(),
--- 7159,7165 ----
                  }
                  ;
  
! subscripts:     LPAREN subscript_exprs ')' {
  		  $$ = $2;
  		  const auto& exprs( $$->refers );
  		  bool ok = std::all_of( exprs.begin(), exprs.end(),
*************** subscripts:     LPAREN expr_list ')' {
*** 7036,7053 ****
  		  }
  		}
                  ;
! expr_list:	expr
  		{
! 		  if( ! require_numeric(@expr, *$expr) ) YYERROR;
  		  $$ = new refer_list_t($expr);
  		}
!         |       expr_list expr {
                    if( $1->size() == MAXIMUM_TABLE_DIMENSIONS ) {
                      error_msg(@1, "table dimensions limited to %d",
                               MAXIMUM_TABLE_DIMENSIONS);
                      YYERROR;
                    }
! 		  if( ! require_numeric(@expr, *$expr) ) YYERROR;
                    $1->push_back($2); $$ = $1;
                  }
          |       ALL {
--- 7179,7196 ----
  		  }
  		}
                  ;
! subscript_exprs:	expr
  		{
! 		  if( ! require_integer(@expr, *$expr) ) YYERROR;
  		  $$ = new refer_list_t($expr);
  		}
!         |       subscript_exprs expr {
                    if( $1->size() == MAXIMUM_TABLE_DIMENSIONS ) {
                      error_msg(@1, "table dimensions limited to %d",
                               MAXIMUM_TABLE_DIMENSIONS);
                      YYERROR;
                    }
! 		  if( ! require_integer(@expr, *$expr) ) YYERROR;
                    $1->push_back($2); $$ = $1;
                  }
          |       ALL {
*************** raise:          RAISE EXCEPTION NAME
*** 7718,7724 ****
  
  read:           read_file
                  {
!                   current.declaratives_evaluate($1.file, $1.handled);
                  }
                  ;
  
--- 7861,7867 ----
  
  read:           read_file
                  {
!                   current.declaratives_evaluate($1.file);
                  }
                  ;
  
*************** read_key:       %empty      { $$ = new c
*** 7905,7911 ****
  
  write:          write_file
                  {
!                   current.declaratives_evaluate( $1.file, $1.handled );
                  }
                  ;
  
--- 8048,8054 ----
  
  write:          write_file
                  {
!                   current.declaratives_evaluate($1.file );
                  }
                  ;
  
*************** end_delete:     %empty %prec DELETE
*** 8121,8127 ****
  
  rewrite:        rewrite1
                  {
!                   current.declaratives_evaluate($1.file, $1.handled);
                  }
                  ;
  
--- 8264,8270 ----
  
  rewrite:        rewrite1
                  {
!                   current.declaratives_evaluate($1.file);
                  }
                  ;
  
*************** end_rewrite:    %empty %prec REWRITE
*** 8162,8173 ****
                  ;
  
  start:          start_impl end_start
          |       start_cond end_start
                  ;
! start_impl:     START start_body
                  ;
  start_cond:     START start_body io_invalids {
                    parser_fi();
                  }
                  ;
  end_start:      %empty %prec START
--- 8305,8325 ----
                  ;
  
  start:          start_impl end_start
+                 {
+                   current.declaratives_evaluate($1);
+                 }
          |       start_cond end_start
+                 {
+                   current.declaratives_evaluate($1);
+                 }
                  ;
! start_impl:     START start_body {
! 		  $$ = $2;
! 		}
                  ;
  start_cond:     START start_body io_invalids {
                    parser_fi();
+ 		  $$ = $2;
                  }
                  ;
  end_start:      %empty %prec START
*************** end_start:      %empty %prec START
*** 8177,8183 ****
  start_body:     filename[file]
                  {
                    statement_begin(@$, START);
!                   file_start_args.init(@file, $file);
                    parser_file_start( $file, lt_op, 0 );
                  }
          |       filename[file] KEY relop name[key]
--- 8329,8335 ----
  start_body:     filename[file]
                  {
                    statement_begin(@$, START);
!                   $$ = file_start_args.init(@file, $file);
                    parser_file_start( $file, lt_op, 0 );
                  }
          |       filename[file] KEY relop name[key]
*************** start_body:     filename[file]
*** 8191,8216 ****
                      yywarn("START: key #%d '%s' has size %d",
                            key, $key->name, size);
                    }
!                   file_start_args.init(@file, $file);
                    parser_file_start( $file, relop_of($relop), key, ksize );
                  }
          |       filename[file] KEY relop name[key] with LENGTH expr
                  { // lexer swallows IS, although relop allows it.
                    statement_begin(@$, START);
                    int key = $file->key_one($key);
!                   file_start_args.init(@file, $file);
                    parser_file_start( $file, relop_of($relop), key, *$expr );
                  }
          |       filename[file] FIRST
                  {
                    statement_begin(@$, START);
!                   file_start_args.init(@file, $file);
                    parser_file_start( $file, lt_op, -1 );
                  }
          |       filename[file] LAST
                  {
                    statement_begin(@$, START);
!                   file_start_args.init(@file, $file);
                    parser_file_start( $file, gt_op, -2 );
                  }
                  ;
--- 8343,8368 ----
                      yywarn("START: key #%d '%s' has size %d",
                            key, $key->name, size);
                    }
!                   $$ = file_start_args.init(@file, $file);
                    parser_file_start( $file, relop_of($relop), key, ksize );
                  }
          |       filename[file] KEY relop name[key] with LENGTH expr
                  { // lexer swallows IS, although relop allows it.
                    statement_begin(@$, START);
                    int key = $file->key_one($key);
!                   $$ = file_start_args.init(@file, $file);
                    parser_file_start( $file, relop_of($relop), key, *$expr );
                  }
          |       filename[file] FIRST
                  {
                    statement_begin(@$, START);
!                   $$ = file_start_args.init(@file, $file);
                    parser_file_start( $file, lt_op, -1 );
                  }
          |       filename[file] LAST
                  {
                    statement_begin(@$, START);
!                   $$ = file_start_args.init(@file, $file);
                    parser_file_start( $file, gt_op, -2 );
                  }
                  ;
*************** inspect:        INSPECT backward inspect
*** 8906,8911 ****
--- 9058,9076 ----
  		      error_msg(@all, "ALL must be part of a figurative constant");
  		      YYERROR;
  		    }
+ 		  } else {
+ 		    cbl_field_t *match = $match->field,
+ 		                *replace = $replace_oper->field;
+ 		    if( is_literal(match) && is_literal(replace) ) {
+ 		      if( !$match->all && !$replace_oper->all) {
+ 			if( match->data.capacity != replace->data.capacity ) {
+ 			  error_msg(@match, "'%s', size %u NOT EQUAL '%s', size %u",
+ 				    nice_name_of(match), match->data.capacity, 
+ 				    nice_name_of(replace), replace->data.capacity);
+ 			  YYERROR;
+ 			}
+ 		      }
+ 		    }
  		  }
                    if( is_constant($inspected->field) ) {
                      auto name = nice_name_of($inspected->field);
*************** call_impl:      CALL call_body[body]
*** 9270,9276 ****
  		  cbl_ffi_arg_t *pargs = NULL;
                    if( narg > 0 ) {
  		    std::copy( params->elems.begin(),
! 			       params->elems.end(), args.begin() );	 
                      pargs = args.data();
                    }
                    ast_call( $body.loc, *$body.ffi_name,
--- 9435,9441 ----
  		  cbl_ffi_arg_t *pargs = NULL;
                    if( narg > 0 ) {
  		    std::copy( params->elems.begin(),
! 			       params->elems.end(), args.begin() );
                      pargs = args.data();
                    }
                    ast_call( $body.loc, *$body.ffi_name,
*************** call_cond:      CALL call_body[body] cal
*** 9287,9301 ****
  		  cbl_ffi_arg_t *pargs = NULL;
                    if( narg > 0 ) {
  		    std::copy( params->elems.begin(),
! 			       params->elems.end(), args.begin() );	 
                      pargs = args.data();
                    }
                    ast_call( $body.loc, *$body.ffi_name,
                                 *$body.ffi_returning, narg, pargs,
                                 $except.on_error, $except.not_error, false );
!                   auto handled = ec_type_t( static_cast<size_t>(ec_program_e) |
!                                             static_cast<size_t>(ec_external_e));
!                   current.declaratives_evaluate(handled);
                  }
                  ;
  end_call:       %empty %prec CALL
--- 9452,9464 ----
  		  cbl_ffi_arg_t *pargs = NULL;
                    if( narg > 0 ) {
  		    std::copy( params->elems.begin(),
! 			       params->elems.end(), args.begin() );
                      pargs = args.data();
                    }
                    ast_call( $body.loc, *$body.ffi_name,
                                 *$body.ffi_returning, narg, pargs,
                                 $except.on_error, $except.not_error, false );
!                   current.declaratives_evaluate();
                  }
                  ;
  end_call:       %empty %prec CALL
*************** string:         string_impl end_string
*** 9635,9648 ****
  string_impl:    STRING_kw string_body[body]
                  {
                    stringify($body.inputs, *$body.into.first, *$body.into.second);
!                   current.declaratives_evaluate(ec_none_e);
                  }
                  ;
  string_cond:    STRING_kw string_body[body] on_overflows[over]
                  {
                    stringify($body.inputs, *$body.into.first, *$body.into.second,
                              $over.on_error, $over.not_error);
!                   current.declaratives_evaluate(ec_overflow_e);
                  }
                  ;
  end_string:     %empty %prec LITERAL
--- 9798,9811 ----
  string_impl:    STRING_kw string_body[body]
                  {
                    stringify($body.inputs, *$body.into.first, *$body.into.second);
!                   current.declaratives_evaluate();
                  }
                  ;
  string_cond:    STRING_kw string_body[body] on_overflows[over]
                  {
                    stringify($body.inputs, *$body.into.first, *$body.into.second,
                              $over.on_error, $over.not_error);
!                   current.declaratives_evaluate();
                  }
                  ;
  end_string:     %empty %prec LITERAL
*************** end_unstring:   %empty %prec UNSTRING
*** 9781,9794 ****
  unstring_impl:  UNSTRING unstring_body[body]
                  {
                    unstringify( *$body.input, $body.delimited, $body.into );
!                   current.declaratives_evaluate(ec_none_e);
                  }
                  ;
  unstring_cond:  UNSTRING unstring_body[body] on_overflows[over]
                  {
                    unstringify( *$body.input, $body.delimited, $body.into,
                                 $over.on_error, $over.not_error );
!                   current.declaratives_evaluate(ec_overflow_e);
                  }
                  ;
  
--- 9944,9957 ----
  unstring_impl:  UNSTRING unstring_body[body]
                  {
                    unstringify( *$body.input, $body.delimited, $body.into );
!                   current.declaratives_evaluate();
                  }
                  ;
  unstring_cond:  UNSTRING unstring_body[body] on_overflows[over]
                  {
                    unstringify( *$body.input, $body.delimited, $body.into,
                                 $over.on_error, $over.not_error );
!                   current.declaratives_evaluate();
                  }
                  ;
  
*************** function_udf:   FUNCTION_UDF '(' arg_lis
*** 9963,9969 ****
                   *  var: [ALL] LITERAL, NUMSTR, instrinsic, or scalar
                   *  num_operand: signed NUMSTR/ZERO, instrinsic, or scalar
                   *  alpahaval: LITERAL, reserved_value, instrinsic, or scalar
-                  * Probably any numeric argument could be an expression.
                   */
  intrinsic:      function_udf
          |       intrinsic0
--- 10126,10131 ----
*************** intrinsic:      function_udf
*** 9989,9995 ****
  					  args.size(), args.data() );
                  }
  
!         |       PRESENT_VALUE '(' expr_list[args] ')'
                  {
                    static char s[] = "__gg__present_value";
                    location_set(@1);
--- 10151,10157 ----
  					  args.size(), args.data() );
                  }
  
!         |       PRESENT_VALUE '(' arg_list[args] ')'
                  {
                    static char s[] = "__gg__present_value";
                    location_set(@1);
*************** intrinsic:      function_udf
*** 9997,10007 ****
                    size_t n = $args->size();
                    assert(n > 0);
                    if( n < 2 ) {
!                     error_msg(@args, "PRESENT VALUE requires 2 parameters");
                      YYERROR;
                    }
                    std::vector <cbl_refer_t> args(n);
  		  std::copy( $args->begin(), $args->end(), args.begin() );
                    parser_intrinsic_callv( $$, s, args.size(), args.data() );
                  }
  
--- 10159,10173 ----
                    size_t n = $args->size();
                    assert(n > 0);
                    if( n < 2 ) {
!                     error_msg(@args, "PRESENT-VALUE requires 2 parameters");
                      YYERROR;
                    }
                    std::vector <cbl_refer_t> args(n);
  		  std::copy( $args->begin(), $args->end(), args.begin() );
+ 		  bool ok = std::all_of( args.begin(),
+ 					 args.end(), [loc = @1]( auto r ) {
+ 					     return require_numeric(loc, r); } );
+ 		  if( ! ok ) YYERROR;
                    parser_intrinsic_callv( $$, s, args.size(), args.data() );
                  }
  
*************** sign:           %empty
*** 10862,10867 ****
--- 11028,11038 ----
          |       SIGN
                  ;
  
+ is_signed:	%empty      { $$ = true; }
+ 	|	SIGNED_kw   { $$ = true; }
+ 	|	UNSIGNED_kw { $$ = false; }
+ 		;
+ 
  start_after:	%empty %prec AFTER
  	|	START AFTER varg
  		;
*************** cdf_basis:      BASIS NAME /* BASIS is n
*** 10910,10916 ****
          |       BASIS LITERAL
                  ;
  
! cdf_use:        USE DEBUGGING on labels
                  {
                    if( ! current.declarative_section_name() ) {
                      error_msg(@1, "USE valid only in DECLARATIVES");
--- 11081,11092 ----
          |       BASIS LITERAL
                  ;
  
! cdf_use:        cdf_use_when {
! 		  statement_cleanup = false;
! 		}
! 		;
! 
! cdf_use_when:	USE DEBUGGING on labels
                  {
                    if( ! current.declarative_section_name() ) {
                      error_msg(@1, "USE valid only in DECLARATIVES");
*************** cdf_use:        USE DEBUGGING on labels
*** 10928,10939 ****
                    }
                    static const cbl_label_t all = {
  		    LblNone, 0, 0,0,0, false, false, false, 0,0, ":all:" };
- 		      ////.name = { ':', 'a', 'l', 'l', ':',  } // workaround for gcc < 11.3
                    add_debugging_declarative(&all);
                   }
  
          |       USE globally mistake procedure on filenames
! 		{
                    if( ! current.declarative_section_name() ) {
  		    error_msg(@1, "USE valid only in DECLARATIVES");
                      YYERROR;
--- 11104,11114 ----
                    }
                    static const cbl_label_t all = {
  		    LblNone, 0, 0,0,0, false, false, false, 0,0, ":all:" };
                    add_debugging_declarative(&all);
                   }
  
          |       USE globally mistake procedure on filenames
! 		{ // Format 1
                    if( ! current.declarative_section_name() ) {
  		    error_msg(@1, "USE valid only in DECLARATIVES");
                      YYERROR;
*************** cdf_use:        USE DEBUGGING on labels
*** 10945,10952 ****
                                      std::back_inserter(files),
                                      file_list_t::symbol_index );
                    cbl_declarative_t declarative(current.declarative_section(),
!                                                 ec_all_e, files,
!                                                 file_mode_none_e, global);
                    current.declaratives.add(declarative);
  		}
  
--- 11120,11127 ----
                                      std::back_inserter(files),
                                      file_list_t::symbol_index );
                    cbl_declarative_t declarative(current.declarative_section(),
!                                                 ec_io_e, files,
!                                                 file_mode_any_e, global);
                    current.declaratives.add(declarative);
  		}
  
*************** cdf_use:        USE DEBUGGING on labels
*** 10959,10970 ****
                    bool global = $globally == GLOBAL;
                    std::list<size_t> files;
                    cbl_declarative_t declarative(current.declarative_section(),
!                                                 ec_all_e, files,
                                                  $io_mode, global);
                    current.declaratives.add(declarative);
                  }
!         |       USE cdf_use_excepts // Format 3: AFTER swallowed by lexer
!                 {
                    if( ! current.declarative_section_name() ) {
                      error_msg(@1, "USE valid only in DECLARATIVES");
                      YYERROR;
--- 11134,11145 ----
                    bool global = $globally == GLOBAL;
                    std::list<size_t> files;
                    cbl_declarative_t declarative(current.declarative_section(),
!                                                 ec_io_e, files,
                                                  $io_mode, global);
                    current.declaratives.add(declarative);
                  }
!         |       USE cdf_use_excepts
!                 { // Format 3 (AFTER swallowed by lexer)
                    if( ! current.declarative_section_name() ) {
                      error_msg(@1, "USE valid only in DECLARATIVES");
                      YYERROR;
*************** void ast_call( const YYLTYPE& loc, cbl_r
*** 11079,11101 ****
    parser_call( name, returning, narg, args, except, not_except, is_function );
  }
  
! static size_t
! statement_begin( const YYLTYPE& loc, int token ) {
!   // The following statement generates a message at run-time
!   // parser_print_string("statement_begin()\n");
!   location_set(loc);
!   prior_statement = token;
! 
!   parser_statement_begin();
  
!   if( token != CONTINUE ) {
      if( enabled_exceptions.size() ) {
!       current.declaratives_evaluate(ec_none_e);
!       cbl_enabled_exceptions_array_t enabled(enabled_exceptions);
!       parser_exception_prepare( keyword_str(token), &enabled );
      }
    }
!   return 0;
  }
  
  #include "parse_util.h"
--- 11254,11324 ----
    parser_call( name, returning, narg, args, except, not_except, is_function );
  }
  
! /*
!  * Check if any EC *could* be raised that would be handled by a declarative. If
!  * so, the generated statement epilog will ask the runtime library to attempt
!  * to match any raised EC with a declarative.  If not, the statement epilog
!  * will be limited to calling the default EC handler, which logs unhandled ECs
!  * [todo] and calls abort(3) for fatal ECs.
!  */
! static bool
! possible_ec() {
!   bool format_1 = current.declaratives.has_format_1();
!       
!   bool enabled = 0xFF < (current.declaratives.status()
! 			 &
! 			 enabled_exceptions.status());
!   bool epilog = enabled || format_1;
!   
!   dbgmsg("%sEC handling for DCL %08x && EC %08x with %s Format 1",
! 	 epilog? "" : "no ", 
! 	 current.declaratives.status(),
! 	 enabled_exceptions.status(), format_1? "a" : "no");
!   
!   return epilog;
! }
  
! /*
!  * If there's potential overlap between enabled ECs and Declaratives, generate
!  * a PERFORM of the _DECLARATIVES_EVAL "ladder" that matches a section number
!  * to its name, and executes the Declarative.
!  */
! static void
! statement_epilog( int token ) {
!   if( possible_ec() && token != CONTINUE ) { 
      if( enabled_exceptions.size() ) {
!       current.declaratives_evaluate();
      }
    }
!   parser_check_fatal_exception();
! }
! 
! static inline void
! statement_prolog( int token ) {
!   parser_statement_begin( keyword_str(token),
! 			  current.declaratives.runtime.ena,
! 			  current.declaratives.runtime.dcl );
! }
! 
! /*
!  * We check the EC against the Declarative status prior to parsing the
!  * statement because a TURN directive can be embedded in the statement.  An
!  * embedded directive applies to the following statement, not the one being
!  * parsed.
!  */
! static void
! statement_begin( const YYLTYPE& loc, int token ) {
!   static int prior_token = 0;
! 
!   if( statement_cleanup )  {
!     statement_epilog(prior_token);
!   } else {
!     statement_cleanup = true;
!   }
!   location_set(loc);
!   statement_prolog(token);
! 
!   prior_token = token;
  }
  
  #include "parse_util.h"
*************** tokenset_t::tokenset_t() {
*** 11137,11142 ****
--- 11360,11367 ----
  #include "token_names.h"
  }
  
+ bool iso_cobol_word( const std::string& name, bool include_context );
+ 
  // Look up the lowercase form of a keyword, excluding some CDF names.
  int
  tokenset_t::find( const cbl_name_t name, bool include_intrinsics ) {
*************** tokenset_t::find( const cbl_name_t name,
*** 11166,11182 ****
        }
    }
  
    cbl_name_t lname;
!   std::transform(name, name + strlen(name) + 1, lname, tolower);
    auto p = tokens.find(lname);
    if( p == tokens.end() ) return 0;
    int token = p->second;
  
    if( token == SECTION ) yylval.number = 0;
  
!   if( include_intrinsics ) return token;
! 
!   return intrinsic_cname(token)? 0 : token;
  }
  
  int
--- 11391,11415 ----
        }
    }
  
+   /*
+    * The input name may be one of:
+    *  1. an intrinsic function name (OK if include_intrinsics)
+    *  2. an ISO/GCC reserved word or context-sensitive word (OK)
+    *  3. a token in our token list for convenience, such as BINARY_INTEGER (bzzt)
+    */
+   
    cbl_name_t lname;
!   std::transform(name, name + strlen(name) + 1, lname, ftolower);
    auto p = tokens.find(lname);
    if( p == tokens.end() ) return 0;
    int token = p->second;
  
    if( token == SECTION ) yylval.number = 0;
  
!   if( include_intrinsics && intrinsic_cname(token) ) return token;
!   if( iso_cobol_word(uppercase(name), true) ) return token;
!   
!   return 0;
  }
  
  int
*************** ast_add( arith_t *arith ) {
*** 11645,11652 ****
  
    parser_add( nC, pC, nA, pA, arith->format, arith->on_error, arith->not_error );
  
!   ec_type_t handled = arith->on_error || arith->not_error ? ec_size_e : ec_none_e;
!   current.declaratives_evaluate(handled);
  }
  
  static bool
--- 11878,11884 ----
  
    parser_add( nC, pC, nA, pA, arith->format, arith->on_error, arith->not_error );
  
!   current.declaratives_evaluate();
  }
  
  static bool
*************** ast_subtract( arith_t *arith ) {
*** 11662,11669 ****
  
    parser_subtract( nC, pC, nA, pA, nB, pB, arith->format, arith->on_error, arith->not_error );
  
!   ec_type_t handled = arith->on_error || arith->not_error ? ec_size_e : ec_none_e;
!   current.declaratives_evaluate(handled);
    return true;
  }
  
--- 11894,11900 ----
  
    parser_subtract( nC, pC, nA, pA, nB, pB, arith->format, arith->on_error, arith->not_error );
  
!   current.declaratives_evaluate();
    return true;
  }
  
*************** ast_multiply( arith_t *arith ) {
*** 11680,11687 ****
  
    parser_multiply( nC, pC, nA, pA, nB, pB, arith->on_error, arith->not_error );
  
!   ec_type_t handled = arith->on_error || arith->not_error ? ec_size_e : ec_none_e;
!   current.declaratives_evaluate(handled);
    return true;
  }
  
--- 11911,11917 ----
  
    parser_multiply( nC, pC, nA, pA, nB, pB, arith->on_error, arith->not_error );
  
!   current.declaratives_evaluate();
    return true;
  }
  
*************** ast_divide( arith_t *arith ) {
*** 11699,11706 ****
    parser_divide( nC, pC, nA, pA, nB, pB,
                   arith->remainder, arith->on_error, arith->not_error );
  
!   ec_type_t handled = arith->on_error || arith->not_error ? ec_size_e : ec_none_e;
!   current.declaratives_evaluate(handled);
    return true;
  }
  
--- 11929,11935 ----
    parser_divide( nC, pC, nA, pA, nB, pB,
                   arith->remainder, arith->on_error, arith->not_error );
  
!   current.declaratives_evaluate();
    return true;
  }
  
*************** mode_syntax_only( cbl_division_t divisio
*** 12686,12692 ****
  bool
  mode_syntax_only() {
    return cbl_syntax_only != not_syntax_only
!     && cbl_syntax_only <= current_division;
  }
  
  void
--- 12915,12921 ----
  bool
  mode_syntax_only() {
    return cbl_syntax_only != not_syntax_only
!       && cbl_syntax_only <= current_division;
  }
  
  void
*************** require_numeric( YYLTYPE loc, cbl_refer_
*** 12845,12850 ****
--- 13074,13090 ----
    return true;
  }
  
+ static bool
+ require_integer( YYLTYPE loc, cbl_refer_t scalar ) {
+   if( is_literal(scalar.field) ) {
+     if( ! is_integer_literal(scalar.field) ) {
+       error_msg(loc, "numeric literal '%s' must be an integer",
+ 		scalar.field->pretty_name());
+       return false;
+     }
+   }
+   return require_numeric(loc, scalar);
+ }
  /* eval methods */
  
  eval_subject_t::eval_subject_t()
diff -Nrcpad gcc-16-20250504/gcc/cobol/parse_ante.h gcc-16-20250511/gcc/cobol/parse_ante.h
*** gcc-16-20250504/gcc/cobol/parse_ante.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/parse_ante.h	Sun May 11 22:32:08 2025
*************** void labels_dump();
*** 76,108 ****
  cbl_dialect_t cbl_dialect;
  size_t cbl_gcobol_features;
  
  static size_t nparse_error = 0;
  
! size_t parse_error_inc() { return ++nparse_error; }
  size_t parse_error_count() { return nparse_error; }
  void input_file_status_notify();
  
! #define YYLLOC_DEFAULT(Current, Rhs, N)					\
!   do {									\
!       if (N)								\
!         {								\
!           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
!           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
!           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
!           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
!           location_dump("parse.c", N,					\
!                         "rhs N  ", YYRHSLOC (Rhs, N));			\
!         }								\
!       else								\
!         {								\
!           (Current).first_line   =					\
!           (Current).last_line    = YYRHSLOC (Rhs, 0).last_line;		\
!           (Current).first_column =					\
!           (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);
--- 76,112 ----
  cbl_dialect_t cbl_dialect;
  size_t cbl_gcobol_features;
  
+ static enum cbl_division_t current_division;
  static size_t nparse_error = 0;
  
! size_t parse_error_inc() {
!   mode_syntax_only(current_division);
!   return ++nparse_error;
! }
  size_t parse_error_count() { return nparse_error; }
  void input_file_status_notify();
  
! #define YYLLOC_DEFAULT(Current, Rhs, N)                                 \
!   do {                                                                  \
!       if (N)                                                            \
!         {                                                               \
!           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
!           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
!           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
!           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
!           location_dump("parse.c", N,                                   \
!                         "rhs N  ", YYRHSLOC (Rhs, N));                  \
!         }                                                               \
!       else                                                              \
!         {                                                               \
!           (Current).first_line   =                                      \
!           (Current).last_line    = YYRHSLOC (Rhs, 0).last_line;         \
!           (Current).first_column =                                      \
!           (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);
*************** const char * original_picture();
*** 131,138 ****
  
  static const relop_t invalid_relop = static_cast<relop_t>(-1);
  
- static enum cbl_division_t current_division;
- 
  static cbl_refer_t null_reference;
  static cbl_field_t *literally_one, *literally_zero;
  
--- 135,140 ----
*************** has_clause( int data_clauses, data_claus
*** 181,201 ****
    return clause == (data_clauses & clause);
  }
  
  static bool
! is_cobol_word( const char name[] ) {
    auto eoname = name + strlen(name);
!   auto p = std::find_if( name, eoname,
                           []( char ch ) {
                             switch(ch) {
                             case '-':
                             case '_':
!                              return false;
                             case '$': // maybe one day (IBM allows)
                               break;
                             }
!                            return !ISALNUM(ch);
                           } );
!   return p == eoname;
  }
  
  bool
--- 183,205 ----
    return clause == (data_clauses & clause);
  }
  
+ 
  static bool
! is_cobol_charset( const char name[] ) {
    auto eoname = name + strlen(name);
!   auto ok = std::all_of( name, eoname,
                           []( char ch ) {
                             switch(ch) {
                             case '-':
                             case '_':
!                              return true;
                             case '$': // maybe one day (IBM allows)
+                              return false;
                               break;
                             }
!                            return 0 != ISALNUM(ch);
                           } );
!   return ok;
  }
  
  bool
*************** new_reference_like( const cbl_field_t& s
*** 239,245 ****
  
  static void reject_refmod( YYLTYPE loc, cbl_refer_t );
  static bool require_pointer( YYLTYPE loc, cbl_refer_t );
! static bool require_numeric( YYLTYPE loc, cbl_refer_t );
  
  struct cbl_field_t * constant_of( size_t isym );
  
--- 243,249 ----
  
  static void reject_refmod( YYLTYPE loc, cbl_refer_t );
  static bool require_pointer( YYLTYPE loc, cbl_refer_t );
! static bool require_integer( YYLTYPE loc, cbl_refer_t );
  
  struct cbl_field_t * constant_of( size_t isym );
  
*************** static class file_start_args_t {
*** 459,469 ****
    cbl_file_t *file;
  public:
    file_start_args_t() : file(NULL) {}
!   void init( YYLTYPE loc, cbl_file_t *file ) {
      this->file = file;
      if( is_sequential(file) ) {
        error_msg(loc, "START invalid with sequential file %s", file->name);
      }
    }
    bool ready() const { return file != NULL; }
    void call_parser_file_start() {
--- 463,474 ----
    cbl_file_t *file;
  public:
    file_start_args_t() : file(NULL) {}
!   cbl_file_t * init( YYLTYPE loc, cbl_file_t *file ) {
      this->file = file;
      if( is_sequential(file) ) {
        error_msg(loc, "START invalid with sequential file %s", file->name);
      }
+     return file;
    }
    bool ready() const { return file != NULL; }
    void call_parser_file_start() {
*************** teed_up_names() {
*** 923,977 ****
  }
  
  class tokenset_t {
!   std::vector<const char *>token_names;
!   std::map <std::string, int> tokens;
!   std::set<std::string> cobol_words;
! 
    static std::string
    lowercase( const cbl_name_t name ) {
      cbl_name_t lname;
      std::transform(name, name + strlen(name) + 1, lname, ftolower);
      return lname;
    }
  
   public:
    tokenset_t();
    int find( const cbl_name_t name, bool include_intrinsics );
  
!   bool equate( const YYLTYPE& loc, int token, const cbl_name_t name ) {
      auto lname( lowercase(name) );
      auto cw = cobol_words.insert(lname);
      if( ! cw.second ) {
!       error_msg(loc, "COBOL-WORDS EQUATE: %s may appear but once", name);
        return false;
      }
      auto p = tokens.find(lowercase(name));
      bool fOK = p == tokens.end();
      if( fOK ) { // name not already in use
        tokens[lname] = token;
      } else {
!       error_msg(loc, "EQUATE: %s already defined as a token", name);
      }
      return fOK;
    }
!   bool undefine( const YYLTYPE& loc, const cbl_name_t name ) {
      auto lname( lowercase(name) );
      auto cw = cobol_words.insert(lname);
      if( ! cw.second ) {
!       error_msg(loc, "COBOL-WORDS UNDEFINE: %s may appear but once", name);
        return false;
      }
      auto p = tokens.find(lname);
      bool fOK = p != tokens.end();
      if( fOK ) { // name in use
        tokens.erase(p);
      } else {
!       error_msg(loc, "UNDEFINE: %s not defined as a token", name);
      }
      return fOK;
    }
!   bool substitute( const YYLTYPE& loc, const cbl_name_t extant, int token, const cbl_name_t name ) {
!     return equate( loc, token, name ) && undefine( loc, extant );
    }
    bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
      auto lname( lowercase(name) );
--- 928,1005 ----
  }
  
  class tokenset_t {
!   // token_names is initialized from a generated header file. 
!   std::vector<const char *>token_names;  // position indicates token value
!   std::map <std::string, int> tokens;    // aliases
!   std::set<std::string> cobol_words;  // Anything in COBOL-WORDS may appear only once. 
!  public:
    static std::string
    lowercase( const cbl_name_t name ) {
      cbl_name_t lname;
      std::transform(name, name + strlen(name) + 1, lname, ftolower);
      return lname;
    }
+   static std::string
+   uppercase( const cbl_name_t name ) {
+     cbl_name_t uname;
+     std::transform(name, name + strlen(name) + 1, uname, ftoupper);
+     return uname;
+   }
  
   public:
    tokenset_t();
    int find( const cbl_name_t name, bool include_intrinsics );
  
!   bool equate( const YYLTYPE& loc, int token,
! 	       const cbl_name_t name, const cbl_name_t verb = "EQUATE") {
      auto lname( lowercase(name) );
      auto cw = cobol_words.insert(lname);
      if( ! cw.second ) {
!       error_msg(loc, "COBOL-WORDS %s: %s may appear but once", verb, name);
        return false;
      }
      auto p = tokens.find(lowercase(name));
      bool fOK = p == tokens.end();
      if( fOK ) { // name not already in use
        tokens[lname] = token;
+       dbgmsg("%s:%d: %d has alias %s", __func__, __LINE__, token, name);
      } else {
!       error_msg(loc, "%s: %s already defined as a token", verb, name);
      }
      return fOK;
    }
!   bool undefine( const YYLTYPE& loc,
! 		 const cbl_name_t name, const cbl_name_t verb = "UNDEFINE" ) {
      auto lname( lowercase(name) );
      auto cw = cobol_words.insert(lname);
      if( ! cw.second ) {
!       error_msg(loc, "COBOL-WORDS %s: %s may appear but once", verb, name);
        return false;
      }
+ 
+     // Do not erase generic, multi-type tokens COMPUTATIONAL and BINARY_INTEGER.
+     if( binary_integer_usage_of(name) ) {
+       dbgmsg("%s:%d: generic %s remains valid as a token", __func__, __LINE__, name);
+       return true;
+     }
+ 
      auto p = tokens.find(lname);
      bool fOK = p != tokens.end();
      if( fOK ) { // name in use
        tokens.erase(p);
      } else {
!       error_msg(loc, "%s: %s not defined as a token", verb, name);
      }
+     dbgmsg("%s:%d: %s removed as a valid token name", __func__, __LINE__, name);
      return fOK;
    }
!   
!   bool substitute( const YYLTYPE& loc,
! 		   const cbl_name_t extant, int token, const cbl_name_t name ) {
!     return
!       equate( loc, token, name, "SUBSTITUTE" )
!       &&
!       undefine( loc, extant, "SUBSTITUTE" );
    }
    bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
      auto lname( lowercase(name) );
*************** class current_tokens_t {
*** 1007,1030 ****
    int find( const cbl_name_t name, bool include_intrinsics ) {
      return tokens.find(name, include_intrinsics);
    }
!   bool equate( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t name ) {
!     int token = keyword_tok(keyword);
!     if( 0 == token ) {
!       error_msg(loc, "EQUATE %s: not a valid token", keyword);
!       return false;
      }
!     return tokens.equate(loc, token, name);
    }
    bool undefine( const YYLTYPE& loc, cbl_name_t keyword ) {
      return tokens.undefine(loc, keyword);
    }
!   bool substitute( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t name ) {
!     int token = keyword_tok(keyword);
!     if( 0 == token ) {
!       error_msg(loc, "SUBSTITUTE %s: not a valid token", keyword);
!       return false;
      }
!     return tokens.substitute(loc, keyword, token, name);
    }
    bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
      return tokens.reserve(loc, name);
--- 1035,1076 ----
    int find( const cbl_name_t name, bool include_intrinsics ) {
      return tokens.find(name, include_intrinsics);
    }
!   bool equate( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t alias ) {
!     int token; 
!     if( 0 == (token = binary_integer_usage_of(keyword)) ) {
!       if( 0 == (token = keyword_tok(keyword)) ) {
! 	error_msg(loc, "EQUATE %s: not a valid token", keyword);
! 	return false;
!       }
      }
!     auto name = keyword_alias_add(tokens.uppercase(keyword),
! 				  tokens.uppercase(alias));
!     if( name != keyword ) {
!       error_msg(loc, "EQUATE: %s is already an alias for %s", alias, name.c_str());
!       return false;
!     } 
!     return tokens.equate(loc, token, alias);
    }
    bool undefine( const YYLTYPE& loc, cbl_name_t keyword ) {
      return tokens.undefine(loc, keyword);
    }
!   bool substitute( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t alias ) {
!     int token; 
!     if( 0 == (token = binary_integer_usage_of(keyword)) ) {
!       if( 0 == (token = keyword_tok(keyword)) ) {
! 	error_msg(loc, "SUBSTITUTE %s: not a valid token", keyword);
! 	return false;
!       }
      }
!     auto name = keyword_alias_add(tokens.uppercase(keyword),
! 				  tokens.uppercase(alias));
!     if( name != keyword ) {
!       error_msg(loc, "SUBSTITUTE: %s is already an alias for %s", alias, name.c_str());
!       return false;
!     } 
! 
!     dbgmsg("%s:%d: %s (%d) will have alias %s", __func__, __LINE__, keyword, token, alias);
!     return tokens.substitute(loc, keyword, token, alias);
    }
    bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
      return tokens.reserve(loc, name);
*************** static class current_t {
*** 1711,1728 ****
    int first_statement;
    bool in_declaratives;
    // from command line or early TURN
!   std::list<cbl_exception_files_t> cobol_exceptions;
  
    error_labels_t error_labels;
  
    static void declarative_execute( cbl_label_t *eval ) {
-     if( !eval ) {
-       if( !enabled_exceptions.empty() ) {
-         auto index = new_temporary(FldNumericBin5);
-         parser_match_exception(index, NULL);
-       }
-       return;
-     }
      assert(eval);
      auto iprog = symbol_elem_of(eval)->program;
      if( iprog  == current_program_index() ) {
--- 1757,1767 ----
    int first_statement;
    bool in_declaratives;
    // from command line or early TURN
!   std::list<exception_turn_t> exception_turns;
  
    error_labels_t error_labels;
  
    static void declarative_execute( cbl_label_t *eval ) {
      assert(eval);
      auto iprog = symbol_elem_of(eval)->program;
      if( iprog  == current_program_index() ) {
*************** static class current_t {
*** 1825,1830 ****
--- 1864,1874 ----
      };
      std::set<file_exception_t> file_exceptions;
     public:
+     // current compiled data for enabled ECs and Declaratives, used by library.
+     struct runtime_t {
+       tree ena, dcl;
+     } runtime;
+     
      bool empty() const {
        return declaratives_list_t::empty();
      }
*************** static class current_t {
*** 1854,1867 ****
        declaratives_list_t::push_back(declarative);
        return true;
      }
    } declaratives;
  
    void exception_add( ec_type_t ec,  bool enabled = true) {
!     std::set<size_t> files;
!     enabled_exceptions.turn_on_off(enabled,
!                                    false,  // for now
!                                    ec, files);
!     if( yydebug) enabled_exceptions.dump();
    }
  
    bool typedef_add( const cbl_field_t *field ) {
--- 1898,1941 ----
        declaratives_list_t::push_back(declarative);
        return true;
      }
+ 
+     uint32_t status() const {
+       uint32_t status_word = 0;
+       for( auto dcl : *this ) {
+         status_word |= (EC_ALL_E & dcl.type );
+       }
+       return status_word;
+     }
+ 
+     bool has_format_1() const {
+       return std::any_of( begin(), end(),
+                           []( const cbl_declarative_t& dcl ) {
+                             return dcl.is_format_1();
+                           } );
+     }
+ 
+     std::vector<uint64_t> 
+     encode() const {
+       std::vector<uint64_t> encoded;
+       auto p = std::back_inserter(encoded);
+       for( const auto& dcl : *this ) {
+         *p++ = dcl.section;
+         *p++ = dcl.global;
+         *p++ = dcl.type;
+         *p++ = dcl.nfile;
+         p = std::copy(dcl.files, std::end(dcl.files), p);
+         *p++ = dcl.mode;
+       }
+       return encoded;
+     }
+ 
    } declaratives;
  
    void exception_add( ec_type_t ec,  bool enabled = true) {
!     exception_turns.push_back(exception_turn_t(ec, enabled));
!   }
!   std::list<exception_turn_t>& pending_exceptions() {
!     return exception_turns;
    }
  
    bool typedef_add( const cbl_field_t *field ) {
*************** static class current_t {
*** 2066,2072 ****
     */
    std::set<std::string>  end_program() {
      if( enabled_exceptions.size() ) {
!       declaratives_evaluate(ec_none_e);
      }
  
      assert(!programs.empty());
--- 2140,2146 ----
     */
    std::set<std::string>  end_program() {
      if( enabled_exceptions.size() ) {
!       declaratives_evaluate();
      }
  
      assert(!programs.empty());
*************** static class current_t {
*** 2128,2134 ****
      return symbol_index(symbol_elem_of(section));
    }
  
!   cbl_label_t *doing_declaratives( bool begin ) {
      if( begin ) {
        in_declaratives = true;
        return NULL;
--- 2202,2208 ----
      return symbol_index(symbol_elem_of(section));
    }
  
!   cbl_label_t * doing_declaratives( bool begin ) {
      if( begin ) {
        in_declaratives = true;
        return NULL;
*************** static class current_t {
*** 2138,2143 ****
--- 2212,2219 ----
      if( declaratives.empty() ) return NULL;
      assert(!declaratives.empty());
  
+     declaratives.runtime.dcl = parser_compile_dcls(declaratives.encode());
+ 
      size_t idcl = symbol_declaratives_add(program_index(), declaratives.as_list());
      programs.top().declaratives_index = idcl;
  
*************** static class current_t {
*** 2163,2168 ****
--- 2239,2263 ----
      std::swap( programs.top().section, section );
      return section;
    }
+   
+   ec_type_t ec_type_of( file_status_t status ) {
+     static std::vector<ec_type_t> ec_by_status {
+       /* 0 */ ec_none_e, // ec_io_warning_e if low byte is nonzero
+       /* 1 */ ec_io_at_end_e, 
+       /* 2 */ ec_io_invalid_key_e,
+       /* 3 */ ec_io_permanent_error_e,
+       /* 4 */ ec_io_logic_error_e,
+       /* 5 */ ec_io_record_operation_e,
+       /* 6 */ ec_io_file_sharing_e,
+       /* 7 */ ec_io_record_content_e,
+       /* 8 */ ec_io_imp_e, // unused, not defined by ISO
+       /* 9 */ ec_io_imp_e,
+     };
+     int status10 = static_cast<unsigned int>(status) / 10;
+     gcc_assert(ec_by_status.size() == 10);
+     gcc_assert(0 <= status10 && status10 < 10 && status10 != 8);
+     return ec_by_status[status10];
+   }
  
    /*
     * END DECLARATIVES causes:
*************** static class current_t {
*** 2180,2197 ****
     * alternative entry point (TODO).
     */
    void
!   declaratives_evaluate( cbl_file_t *file,
!                          file_status_t status = FsSuccess ) {
!     // The exception file number is assumed to be zero at all times unless
!     // it has been set to non-zero, at which point whoever picks it up and takes
!     // action on it is charged with setting it back to zero.
!     if( file )
!       {
!       parser_set_file_number((int)symbol_index(symbol_elem_of(file)));
!       }
!     // parser_set_file_number(file ? (int)symbol_index(symbol_elem_of(file)) : 0);
!     parser_set_handled((ec_type_t)status);
! 
      parser_file_stash(file);
  
      cbl_label_t *eval = programs.first_declarative();
--- 2275,2282 ----
     * alternative entry point (TODO).
     */
    void
!   declaratives_evaluate( cbl_file_t *file ) {
!     gcc_assert(file);
      parser_file_stash(file);
  
      cbl_label_t *eval = programs.first_declarative();
*************** static class current_t {
*** 2219,2225 ****
     * To indicate to the runtime-match function that we want to evaluate
     * only the exception condition, unrelated to a file, we set the
     * file register to 0 and the handled-exception register to the
!    * handled exception condition (not file status).
     *
     * declaratives_execute performs the "declarative ladder" produced
     * by declaratives_runtime_match.  That section CALLs the
--- 2304,2310 ----
     * To indicate to the runtime-match function that we want to evaluate
     * only the exception condition, unrelated to a file, we set the
     * file register to 0 and the handled-exception register to the
!    * handled exception condition. 
     *
     * declaratives_execute performs the "declarative ladder" produced
     * by declaratives_runtime_match.  That section CALLs the
*************** static class current_t {
*** 2230,2245 ****
     * index, per usual.
     */
    void
!   declaratives_evaluate( ec_type_t handled = ec_none_e ) {
!     // The exception file number  is assumed to be zero unless it has been
!     // changed to a non-zero value.  The program picking it up and referencing
!     // it is charged with setting it back to zero.
!     // parser_set_file_number(0);
! 
!     parser_set_handled(handled);
! 
      cbl_label_t *eval = programs.first_declarative();
!     declarative_execute(eval);
    }
  
    cbl_label_t * new_paragraph( cbl_label_t *para ) {
--- 2315,2323 ----
     * index, per usual.
     */
    void
!   declaratives_evaluate() {
      cbl_label_t *eval = programs.first_declarative();
!     if( eval ) declarative_execute(eval);
    }
  
    cbl_label_t * new_paragraph( cbl_label_t *para ) {
*************** static class current_t {
*** 2283,2288 ****
--- 2361,2370 ----
    cbl_label_t * compute_label() { return error_labels.compute_error; }
  } current;
  
+ void current_enabled_ecs( tree ena ) {
+   current.declaratives.runtime.ena = ena;
+ }
+ 
  #define PROGRAM current.program_index()
  
  static void
*************** literal_refmod_valid( YYLTYPE loc, const
*** 2382,2392 ****
  
  static bool
  is_integer_literal( const cbl_field_t *field ) {
!   if( is_literal(field) ) {
!     int v, n;
      const char *initial = field->data.initial;
  
!     return 1 == sscanf(initial, "%d%n", &v, &n) && n == (int)strlen(initial);
    }
    return false;
  }
--- 2464,2490 ----
  
  static bool
  is_integer_literal( const cbl_field_t *field ) {
!   if( field->type == FldLiteralN ) {
      const char *initial = field->data.initial;
  
!     switch( *initial ) {
!     case '-': case '+': ++initial;
!     }
! 
!     const char *eos = initial + strlen(initial);
!     auto p = std::find_if_not( initial, eos, fisdigit );
!     if( p == eos ) return true;
!     
!     if( *p++ == symbol_decimal_point() ) {
!       switch( *p++ ) {
!       case 'E': case 'e':
! 	switch( *p++ ) {
! 	case '+': case '-':
! 	  return std::all_of(p, eos, []( char ch ) { return ch == '0'; } );
! 	  break;
! 	}
!       }
!     }
    }
    return false;
  }
*************** special_of( const char F[], int L, const
*** 3055,3060 ****
--- 3153,3173 ----
  }
  #define special_of( F ) special_of(__func__, __LINE__, (F))
  
+ static const special_name_t *
+ cmd_or_env_special_of( std::string name ) {
+   static const std::map< std::string, special_name_t > fujitsus
+     { // Fujitsu calls these "function names", not device names
+       { "ARGUMENT-NUMBER", ARG_NUM_e },
+       { "ARGUMENT-VALUE", ARG_VALUE_e } ,
+       { "ENVIRONMENT-NAME", ENV_NAME_e },
+       { "ENVIRONMENT-VALUE", ENV_VALUE_e },
+     };
+ 
+   std::transform(name.begin(), name.end(), name.begin(), ::toupper);
+   auto p = fujitsus.find(name.c_str());
+   return p != fujitsus.end()? &p->second : nullptr;
+ }
+ 
  static inline void
  parser_add2( struct cbl_num_result_t& to,
               struct cbl_refer_t from ) {
*************** procedure_division_ready( YYLTYPE loc, c
*** 3312,3317 ****
--- 3425,3437 ----
      }
    }
  
+   // Apply ECs from the command line
+   std::list<exception_turn_t>& exception_turns = current.pending_exceptions();
+   for( const auto& exception_turn : exception_turns) {
+     apply_cdf_turn(exception_turn);
+   }
+   exception_turns.clear();
+   
    // Start the Procedure Division.
    size_t narg = ffi_args? ffi_args->elems.size() : 0;
    std::vector <cbl_ffi_arg_t> args(narg);
*************** goodnight_gracie() {
*** 3544,3549 ****
--- 3664,3674 ----
    return true;
  }
  
+ // false after USE statement, to enter Declarative with EC intact. 
+ static bool statement_cleanup = true;
+ 
+ static void statement_epilog( int token );
+ 
  const char * keyword_str( int token );
  
  static YYLTYPE current_location;
*************** location_set( const YYLTYPE& loc ) {
*** 3555,3563 ****
    return current_location = loc;
  }
  
! static int prior_statement;
! 
! static size_t statement_begin( const YYLTYPE& loc, int token );
  
  static void ast_first_statement( const YYLTYPE& loc ) {
    if( current.is_first_statement( loc ) ) {
--- 3680,3686 ----
    return current_location = loc;
  }
  
! static void statement_begin( const YYLTYPE& loc, int token );
  
  static void ast_first_statement( const YYLTYPE& loc ) {
    if( current.is_first_statement( loc ) ) {
diff -Nrcpad gcc-16-20250504/gcc/cobol/scan.l gcc-16-20250511/gcc/cobol/scan.l
*** gcc-16-20250504/gcc/cobol/scan.l	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/scan.l	Sun May 11 22:32:08 2025
*************** NP        P+|(P{COUNT})
*** 98,104 ****
  
  UNSIGNED  [[:space:]]+UNSIGNED
  SIGNED    [[:space:]]+SIGNED
- DBLLONG   (LONG-LONG|DOUBLE)
  
  ALNUM     [AX9]+
  
--- 98,103 ----
*************** USE({SPC}FOR)?		{ return USE; }
*** 976,995 ****
    COMP(UTATIONAL)?		{ return ucomputable(FldNumericBinary, 0); }
    BINARY            		{ return scomputable(FldNumericBinary, 0); }
  
!   BINARY-CHAR{SIGNED}   	{ return scomputable(FldNumericBin5, 1); }
!   BINARY-CHAR{UNSIGNED} 	{ return ucomputable(FldNumericBin5, 1); }
!   BINARY-CHAR 			{ return scomputable(FldNumericBin5, 1); }
!   BINARY-SHORT{SIGNED}  	{ return scomputable(FldNumericBin5, 2); }
!   BINARY-SHORT{UNSIGNED}	{ return ucomputable(FldNumericBin5, 2); }
!   BINARY-SHORT 			{ return scomputable(FldNumericBin5, 2); }
!   BINARY-LONG{SIGNED}   	{ return scomputable(FldNumericBin5, 4); }
!   BINARY-LONG{UNSIGNED} 	{ return ucomputable(FldNumericBin5, 4); }
!   BINARY-LONG 			{ return scomputable(FldNumericBin5, 4); }
!   BINARY-{DBLLONG}{SIGNED}	{ return scomputable(FldNumericBin5, 8); }
!   BINARY-{DBLLONG}{UNSIGNED}	{ return ucomputable(FldNumericBin5, 8); }
!   BINARY-{DBLLONG}		{ return scomputable(FldNumericBin5, 8); }
    BIT				{ not_implemented("USAGE type: BIT");
  				  return BIT; }
    FLOAT-BINARY-32		{ return ucomputable(FldFloat, 4); }
    FLOAT-BINARY-64		{ return ucomputable(FldFloat, 8); }
    FLOAT-BINARY-128		{ return ucomputable(FldFloat, 16); }
--- 975,993 ----
    COMP(UTATIONAL)?		{ return ucomputable(FldNumericBinary, 0); }
    BINARY            		{ return scomputable(FldNumericBinary, 0); }
  
!   BINARY-CHAR	   		{ return bcomputable(FldNumericBin5, 1); }
!   BINARY-SHORT	  		{ return bcomputable(FldNumericBin5, 2); }
!   BINARY-LONG	   		{ return bcomputable(FldNumericBin5, 4); }
!   BINARY-DOUBLE			{ return bcomputable(FldNumericBin5, 8); }
!   BINARY-LONG-LONG		{ if( ! dialect_mf() ) {
! 				    error_msg(yylloc, "%s requires -dialect mf", yytext);
! 				  }
! 				  return bcomputable(FldNumericBin5, 8);
! 				}
! 
    BIT				{ not_implemented("USAGE type: BIT");
  				  return BIT; }
+ 
    FLOAT-BINARY-32		{ return ucomputable(FldFloat, 4); }
    FLOAT-BINARY-64		{ return ucomputable(FldFloat, 8); }
    FLOAT-BINARY-128		{ return ucomputable(FldFloat, 16); }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1003,1008 ****
--- 1001,1009 ----
    FLOAT-LONG	  		{ return ucomputable(FldFloat, 8); }
    FLOAT-SHORT    		{ return ucomputable(FldFloat, 4); }
  
+   SIGNED			{ return SIGNED_kw; }
+   UNSIGNED			{ return UNSIGNED_kw; }
+ 
    INDEX				{ return INDEX; }
    MESSAGE-TAG			{ not_implemented("USAGE type: MESSAGE-TAG"); }
    NATIONAL			{ not_implemented("USAGE type: NATIONAL");
*************** USE({SPC}FOR)?		{ return USE; }
*** 1117,1126 ****
    FD/[[:blank:]]+       { parsing.need_level(false); return FD; }
    SD/[[:blank:]]+       { parsing.need_level(false); return SD; }
  
!   {NAME}                { // NAME here is never a token name
                            if( is_integer_token() ) return numstr_of(yytext);
  			  ydflval.string = yylval.string = xstrdup(yytext);
! 			  auto token = typed_name(yytext);
  			  return token == NAME88? NAME : token;
   			}
  
--- 1118,1131 ----
    FD/[[:blank:]]+       { parsing.need_level(false); return FD; }
    SD/[[:blank:]]+       { parsing.need_level(false); return SD; }
  
!   {NAME}                { // NAME here might be a token alias
! 		   	  int token;
! 		          if( 0 != (token = binary_integer_usage(yytext)) ) {
! 			    return token;
! 			  }
                            if( is_integer_token() ) return numstr_of(yytext);
  			  ydflval.string = yylval.string = xstrdup(yytext);
! 			  token = typed_name(yytext);
  			  return token == NAME88? NAME : token;
   			}
  
*************** USE({SPC}FOR)?		{ return USE; }
*** 1204,1209 ****
--- 1209,1219 ----
    {N9}/{N9}*[,.]?  { yylval.number = ndigit(yyleng);     return picset(NINES); }
    P+/[,.]?\r?\n    { yylval.number = yyleng;             return picset(PIC_P); }
  
+   1{1,31}/({COUNT}|[(]{NAME}[)]) {
+                          yy_push_state(picture_count);
+                          yylval.string = xstrdup(yytext); return picset(ONES); }
+   1{1,31} {              yylval.string = xstrdup(yytext); return picset(ONES); }
+ 
    {ALNUM}/{COUNT}({ALNUM}{COUNT}?)+ {
                           yy_push_state(picture_count);
                           yylval.string = xstrdup(yytext); return picset(ALNUM); }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1613,1627 ****
  		     *--p = '\0';
  		   }
  
!                    int token = keyword_tok(yylval.string);
!                    if( token ) return token;
                     if( is_integer_token() ) return numstr_of(yylval.string);
                     return typed_name(yylval.string);
                   }
    {NAME}/{OSPC}{DOTSEP} {
  		   assert(YY_START == procedure_div);
!                    int token = keyword_tok(yytext);
!                    if( token ) return token;
                     if( is_integer_token() ) return numstr_of(yytext);
  
                     ydflval.string = yylval.string = xstrdup(yytext);
--- 1623,1639 ----
  		     *--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);
! 		   int token;
! 		   if( 0 != (token = binary_integer_usage(yytext)) ) return token;
!                    if( 0 != (token = keyword_tok(yytext)) ) return token;
                     if( is_integer_token() ) return numstr_of(yytext);
  
                     ydflval.string = yylval.string = xstrdup(yytext);
*************** BASIS		{ yy_push_state(basis); return BA
*** 2468,2473 ****
--- 2480,2486 ----
                    if( YY_START == quoted1 || YY_START == quoted2 ) {
  		    error_msg(yylloc, "syntax error: unterminated string '%s'",
  			     tmpstring);
+ 		    return NO_CONDITION;
  		    cbl_internal_error("");
                    }
                    yypop_buffer_state();
diff -Nrcpad gcc-16-20250504/gcc/cobol/scan_ante.h gcc-16-20250511/gcc/cobol/scan_ante.h
*** gcc-16-20250504/gcc/cobol/scan_ante.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/scan_ante.h	Sun May 11 22:32:08 2025
*************** update_location_col( const char str[], i
*** 498,503 ****
--- 498,507 ----
      result = YY_NULL;                                           \
  }
  
+ #define bcomputable(T, C)                               \
+     yylval.computational.type=T,                        \
+     yylval.computational.capacity=C,                    \
+     yylval.computational.signable=true, BINARY_INTEGER
  #define scomputable(T, C)                               \
      yylval.computational.type=T,                        \
      yylval.computational.capacity=C,                    \
*************** static char *tmpstring = NULL;
*** 511,516 ****
--- 515,613 ----
  
  #define PROGRAM current_program_index()
  
+ // map of alias => canonical
+ static std::map <std::string, std::string> keyword_aliases;
+ 
+ const std::string& 
+ keyword_alias_add( const std::string& keyword, const std::string& alias ) {
+   auto p = keyword_aliases.find(alias);
+   if( p != keyword_aliases.end() ) return p->second; // error: do not overwrite
+   return keyword_aliases[alias] = keyword;
+ }
+ 
+ /*
+  * Because numeric USAGE types don't have distinct tokens and may have aliases,
+  * we keep a table of their canonical names, which we use if we encounter an
+  * alias.
+  */
+ struct bint_t {
+   int token;
+   cbl_field_type_t type;
+   uint32_t capacity;
+   bool signable;
+ };
+ static const std::map <std::string, bint_t > binary_integers {
+   { "COMP-X", { COMPUTATIONAL, FldNumericBin5, 0xFF, false } }, 
+   { "COMP-6", { COMPUTATIONAL, FldPacked, 0, false } }, 
+   { "COMP-5", { COMPUTATIONAL, FldNumericBin5, 0, false } }, 
+   { "COMP-4", { COMPUTATIONAL, FldNumericBinary, 0, true } }, 
+   { "COMP-2", { COMPUTATIONAL, FldFloat, 8, false } }, 
+   { "COMP-1", { COMPUTATIONAL, FldFloat, 4, false } }, 
+   { "COMP", { COMPUTATIONAL, FldNumericBinary, 0, false } }, 
+   { "COMPUTATIONAL-X", { COMPUTATIONAL, FldNumericBin5, 0xFF, false } }, 
+   { "COMPUTATIONAL-6", { COMPUTATIONAL, FldPacked, 0, false } }, 
+   { "COMPUTATIONAL-5", { COMPUTATIONAL, FldNumericBin5, 0, false } }, 
+   { "COMPUTATIONAL-4", { COMPUTATIONAL, FldNumericBinary, 0, true } }, 
+   { "COMPUTATIONAL-2", { COMPUTATIONAL, FldFloat, 8, false } }, 
+   { "COMPUTATIONAL-1", { COMPUTATIONAL, FldFloat, 4, false } }, 
+   { "COMPUTATIONAL", { COMPUTATIONAL, FldNumericBinary, 0, false } }, 
+   { "BINARY", { BINARY_INTEGER, FldNumericBinary, 0, true } }, 
+   { "BINARY-CHAR", { BINARY_INTEGER, FldNumericBin5, 1, true } }, 
+   { "BINARY-SHORT", { BINARY_INTEGER, FldNumericBin5, 2, true } }, 
+   { "BINARY-LONG", { BINARY_INTEGER, FldNumericBin5, 4, true } }, 
+   { "BINARY-DOUBLE", { BINARY_INTEGER, FldNumericBin5, 8, true } }, 
+   { "BINARY-LONG-LONG", { BINARY_INTEGER, FldNumericBin5, 8, true } }, 
+   { "FLOAT-BINARY-32", { COMPUTATIONAL, FldFloat, 4, false } }, 
+   { "FLOAT-BINARY-64", { COMPUTATIONAL, FldFloat, 8, false } }, 
+   { "FLOAT-BINARY-128", { COMPUTATIONAL, FldFloat, 16, false } }, 
+   { "FLOAT-EXTENDED", { COMPUTATIONAL, FldFloat, 16, false } }, 
+   { "FLOAT-LONG", { COMPUTATIONAL, FldFloat, 8, false } }, 
+   { "FLOAT-SHORT", { COMPUTATIONAL, FldFloat, 4, false } }, 
+ };
+ 
+ static int
+ binary_integer_usage( const char name[]) {
+   cbl_name_t uname = {};
+   std::transform(name, name + strlen(name), uname, ftoupper);
+ 
+   dbgmsg("%s:%d: checking %s in %zu keyword_aliases",
+ 	 __func__, __LINE__, uname, keyword_aliases.size() );
+ 
+   std::string key = uname;
+   auto alias = keyword_aliases.find(key);
+   if( alias != keyword_aliases.end() ) key = alias->second;
+   
+   auto p = binary_integers.find(key);
+   if( p == binary_integers.end() ) return 0;
+   
+   yylval.computational.type = p->second.type;
+   yylval.computational.capacity = p->second.capacity;
+   yylval.computational.signable = p->second.signable;
+   dbgmsg("%s:%d: %s has type %d", __func__, __LINE__,
+ 	 uname, p->second.type );
+   return p->second.token;
+ }
+       
+ int
+ binary_integer_usage_of( const char name[] ) {
+   cbl_name_t uname = {};
+   std::transform(name, name + strlen(name), uname, ftoupper);
+ 
+   auto p = binary_integers.find(uname);
+   if( p != binary_integers.end() ) {
+     int token = p->second.token;
+     switch( token ) {
+     case COMPUTATIONAL:
+     case BINARY_INTEGER:
+       return token;
+     default:
+       gcc_unreachable();
+       assert(false);
+     }
+   }
+   return 0;
+ }
+ 
  static uint32_t
  level_of( const char input[] ) {
    unsigned int output = 0;
diff -Nrcpad gcc-16-20250504/gcc/cobol/scan_post.h gcc-16-20250511/gcc/cobol/scan_post.h
*** gcc-16-20250504/gcc/cobol/scan_post.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/scan_post.h	Sun May 11 22:32:09 2025
*************** start_condition_str( int sc ) {
*** 33,45 ****
    const char *state = "???";
    switch(sc) {
    case INITIAL: state = "INITIAL"; break;
    case author_state: state = "author_state"; break;
    case basis: state = "basis"; break;
    case bool_state: state = "bool_state"; break;
    case cdf_state: state = "cdf_state"; break;
    case classify: state = "classify"; break;
!   case copy_state: state = "copy_state"; break;
    case comment_entries: state = "comment_entries"; break;
    case date_state: state = "date_state"; break;
    case datetime_fmt: state = "datetime_fmt"; break;
    case dot_state: state = "dot_state"; break;
--- 33,47 ----
    const char *state = "???";
    switch(sc) {
    case INITIAL: state = "INITIAL"; break;
+   case addr_of: state = "addr_of"; break;
    case author_state: state = "author_state"; break;
    case basis: state = "basis"; break;
    case bool_state: state = "bool_state"; break;
    case cdf_state: state = "cdf_state"; break;
    case classify: state = "classify"; break;
!   case cobol_words: state = "cobol_words"; break;
    case comment_entries: state = "comment_entries"; break;
+   case copy_state: state = "copy_state"; break;
    case date_state: state = "date_state"; break;
    case datetime_fmt: state = "datetime_fmt"; break;
    case dot_state: state = "dot_state"; break;
*************** start_condition_str( int sc ) {
*** 62,69 ****
    case quoted2: state = "quoted2"; break;
    case quoteq: state = "quoteq"; break;
    case raising: state = "raising"; break;
-   case subscripts: state = "subscripts"; break;
    case sort_state: state = "sort_state"; break;
    }
    return state;
  }
--- 64,71 ----
    case quoted2: state = "quoted2"; break;
    case quoteq: state = "quoteq"; break;
    case raising: state = "raising"; break;
    case sort_state: state = "sort_state"; break;
+   case subscripts: state = "subscripts"; break;
    }
    return state;
  }
diff -Nrcpad gcc-16-20250504/gcc/cobol/show_parse.h gcc-16-20250511/gcc/cobol/show_parse.h
*** gcc-16-20250504/gcc/cobol/show_parse.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/show_parse.h	Sun May 11 22:32:09 2025
*************** extern bool cursor_at_sol;
*** 54,64 ****
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
  #define RETURN_IF_PARSE_ONLY                    \
    do { if(  mode_syntax_only() ) return; } while(0)
  
! #define SHOW_PARSE1                      if(bSHOW_PARSE)
! #define SHOW_PARSE RETURN_IF_PARSE_ONLY; if(bSHOW_PARSE)
  
  // _HEADER and _END are generally the first and last things inside the
  // SHOW_PARSE statement.  They don't have to be; SHOW_PARSE can be used
--- 54,73 ----
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
+ /*
+  * In syntax-only mode, return immediately.  By using these macros, the parser
+  * can call code-generation functions unconditionally because it does not rely
+  * on the results.
+  */
  #define RETURN_IF_PARSE_ONLY                    \
    do { if(  mode_syntax_only() ) return; } while(0)
  
! #define RETURN_XX_PARSE_ONLY(XX)			\
!   do { if(  mode_syntax_only() ) return XX; } while(0)
! 
! #define SHOW_PARSE1                                   if(bSHOW_PARSE)
! #define SHOW_PARSE        RETURN_IF_PARSE_ONLY;       if(bSHOW_PARSE)
! #define SHOW_IF_PARSE(XX) RETURN_XX_PARSE_ONLY((XX)); if(bSHOW_PARSE)
  
  // _HEADER and _END are generally the first and last things inside the
  // SHOW_PARSE statement.  They don't have to be; SHOW_PARSE can be used
diff -Nrcpad gcc-16-20250504/gcc/cobol/structs.cc gcc-16-20250511/gcc/cobol/structs.cc
*** gcc-16-20250504/gcc/cobol/structs.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/structs.cc	Sun May 11 22:32:09 2025
*************** create_cblc_file_t()
*** 217,222 ****
--- 217,223 ----
  typedef struct cblc_file_t
      {
      char                *name;             // This is the name of the structure; might be the name of an environment variable
+     size_t               symbol_index;     // The symbol table index of the related cbl_file_t structure
      char                *filename;         // The name of the file to be opened
      FILE                *file_pointer;     // The FILE *pointer
      cblc_field_t        *default_record;   // The record_area
*************** typedef struct cblc_file_t
*** 251,258 ****
  
      tree retval = NULL_TREE;
      retval = gg_get_filelevel_struct_type_decl( "cblc_file_t",
!                                             30,
                                              CHAR_P,    "name",
                                              CHAR_P,    "filename",
                                              FILE_P,    "file_pointer",
                                              cblc_field_p_type_node, "default_record",
--- 252,260 ----
  
      tree retval = NULL_TREE;
      retval = gg_get_filelevel_struct_type_decl( "cblc_file_t",
!                                             31,
                                              CHAR_P,    "name",
+                                             SIZE_T,    "symbol_table_index",
                                              CHAR_P,    "filename",
                                              FILE_P,    "file_pointer",
                                              cblc_field_p_type_node, "default_record",
diff -Nrcpad gcc-16-20250504/gcc/cobol/symbols.cc gcc-16-20250511/gcc/cobol/symbols.cc
*** gcc-16-20250504/gcc/cobol/symbols.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/symbols.cc	Sun May 11 22:32:09 2025
*************** field_str( const cbl_field_t *field ) {
*** 1530,1535 ****
--- 1530,1552 ----
        auto n = asprintf(&s, "'%s'", data);
        gcc_assert(n);
        auto eodata = data + field->data.capacity;
+       // It is possible for data.initial to be shorter than capacity.
+       
+       // This whole thing needs to be reexamined.  There is an assumption for
+       // FldAlphanumeric values that the valid data in data.initial be the same
+       // length as data.capacity.  But that does not hold true for other types.
+       // For example, a PIC 9V9 has a capacity of two, but the initial
+       // string provided by the COBOL programmer might be "1.2".  Likewise, a
+       // PIC 999999 (capacity 5) might have a value of "1".
+       
+       for(size_t i = 0; i<field->data.capacity; i++)
+         {
+         if( data[i] == '\0' )
+           {
+           eodata = data + i;
+           break;
+           }
+         }
        if( eodata != std::find_if_not(data, eodata, fisprint) ) {
          char *p = reinterpret_cast<char*>(xrealloc(s, n + 8 + 2 * field->data.capacity));
          if( is_elementary(field->type) &&
*************** symbol_table_init(void) {
*** 2277,2283 ****
        "FILLER", 0, {}, {1,1,0,0, " "}, NULL },
      { 0, FldAlphanumeric, FldInvalid, signable_e | global_e, 0,0,2, nonarray, 0,
        "DEBUG-CONTENTS", 0, {}, {76,76,0,0, NULL}, NULL },
! };
  
    // debug registers
    assert(table.nelem + COUNT_OF(debug_registers) < table.capacity);
--- 2294,2300 ----
        "FILLER", 0, {}, {1,1,0,0, " "}, NULL },
      { 0, FldAlphanumeric, FldInvalid, signable_e | global_e, 0,0,2, nonarray, 0,
        "DEBUG-CONTENTS", 0, {}, {76,76,0,0, NULL}, NULL },
!   };
  
    // debug registers
    assert(table.nelem + COUNT_OF(debug_registers) < table.capacity);
diff -Nrcpad gcc-16-20250504/gcc/cobol/symbols.h gcc-16-20250511/gcc/cobol/symbols.h
*** gcc-16-20250504/gcc/cobol/symbols.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/symbols.h	Sun May 11 22:32:09 2025
***************
*** 46,51 ****
--- 46,56 ----
  #include <string>
  #include <vector>
  
+ // Provide fallback definition.
+ #ifndef NAME_MAX
+ #define NAME_MAX 255
+ #endif
+ 
  #define PICTURE_MAX 64
  
  extern const char *numed_message;
*************** struct cbl_field_data_t {
*** 343,351 ****
  
    cbl_field_data_t& valify() {
      assert(initial);
!     const size_t len = strlen(initial);
!     std::string input(len + 1, '\0'); // add a NUL
!     std::copy(initial, initial + len, input.begin()); 
      if( decimal_is_comma() ) {
        std::replace(input.begin(), input.end(), ',', '.');
      }
--- 348,354 ----
  
    cbl_field_data_t& valify() {
      assert(initial);
!     std::string input(initial);
      if( decimal_is_comma() ) {
        std::replace(input.begin(), input.end(), ',', '.');
      }
*************** struct cbl_field_t {
*** 513,519 ****
    tree data_decl_node;  // Reference to the run-time data of the COBOL variable
    //                    // For linkage_e variables, data_decl_node is a pointer
    //                    // to the data, rather than the actual data
-   tree literal_decl_node; // This is a FLOAT128 version of data.value
  
    void set_linkage( cbl_ffi_crv_t crv, bool optional ) {
      linkage.optional = optional;
--- 516,521 ----
*************** class name_queue_t : private std::queue<
*** 2207,2212 ****
--- 2209,2218 ----
  
  };
  
+ const std::string& keyword_alias_add( const std::string& keyword,
+ 				      const std::string& alias );
+ int binary_integer_usage_of( const char name[] );
+   
  void tee_up_empty();
  void tee_up_name( const YYLTYPE& loc, const char name[] );
  cbl_namelist_t teed_up_names();
*************** void gcc_location_set( const LOC& loc );
*** 2402,2405 ****
--- 2408,2413 ----
  //  create an entire .h module.  So, I stuck it here.
  size_t count_characters(const char *in, size_t length);
  
+ void current_enabled_ecs( tree ena );
+ 
  #endif
diff -Nrcpad gcc-16-20250504/gcc/cobol/token_names.h gcc-16-20250511/gcc/cobol/token_names.h
*** gcc-16-20250504/gcc/cobol/token_names.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/token_names.h	Sun May 11 22:32:09 2025
***************
*** 1,1373 ****
  // generated by ./token_names.h.gen ../../build/gcc/cobol/parse.h
! // Fri Mar 21 10:13:54 CET 2025
  tokens = {
!         { "identification", IDENTIFICATION_DIV }, // 258
!         { "environment", ENVIRONMENT_DIV }, // 259
!         { "procedure", PROCEDURE_DIV }, // 260
!         { "data", DATA_DIV }, // 261
!         { "file", FILE_SECT }, // 262
!         { "input-output", INPUT_OUTPUT_SECT }, // 263
!         { "linkage", LINKAGE_SECT }, // 264
!         { "local-storage", LOCAL_STORAGE_SECT }, // 265
!         { "working-storage", WORKING_STORAGE_SECT }, // 266
!         { "object-computer", OBJECT_COMPUTER }, // 267
!         { "display-of", DISPLAY_OF }, // 268
!         { "end-function", END_FUNCTION }, // 269
!         { "end-program", END_PROGRAM }, // 270
!         { "end-subprogram", END_SUBPROGRAM }, // 271
!         { "justified", JUSTIFIED }, // 272
!         { "returning", RETURNING }, // 273
!         { "no-condition", NO_CONDITION }, // 274
!         { "alnum", ALNUM }, // 275
!         { "alphed", ALPHED }, // 276
!         { "error", ERROR }, // 277
!         { "exception", EXCEPTION }, // 278
!         { "size-error", SIZE_ERROR }, // 279
!         { "exception-name", EXCEPTION_NAME }, // 280
!         { "level", LEVEL }, // 281
!         { "level66", LEVEL66 }, // 282
!         { "level78", LEVEL78 }, // 283
!         { "level88", LEVEL88 }, // 284
!         { "class-name", CLASS_NAME }, // 285
!         { "name", NAME }, // 286
!         { "name88", NAME88 }, // 287
!         { "nume", NUME }, // 288
!         { "numed", NUMED }, // 289
!         { "numed-cr", NUMED_CR }, // 290
!         { "numed-db", NUMED_DB }, // 291
!         { "ninedot", NINEDOT }, // 292
!         { "nines", NINES }, // 293
!         { "ninev", NINEV }, // 294
!         { "pic-p", PIC_P }, // 295
!         { "spaces", SPACES }, // 296
!         { "space", SPACES }, // 296
!         { "literal", LITERAL }, // 297
!         { "end", END }, // 298
!         { "eop", EOP }, // 299
!         { "filename", FILENAME }, // 300
!         { "invalid", INVALID }, // 301
!         { "number", NUMBER }, // 302
!         { "negative", NEGATIVE }, // 303
!         { "numstr", NUMSTR }, // 304
!         { "overflow", OVERFLOW_kw }, // 305
!         { "computational", COMPUTATIONAL }, // 306
!         { "perform", PERFORM }, // 307
!         { "backward", BACKWARD }, // 308
!         { "positive", POSITIVE }, // 309
!         { "pointer", POINTER }, // 310
!         { "section", SECTION }, // 311
!         { "standard-alphabet", STANDARD_ALPHABET }, // 312
!         { "switch", SWITCH }, // 313
!         { "upsi", UPSI }, // 314
!         { "zero", ZERO }, // 315
!         { "zeros", ZERO }, // 315
!         { "zeroes", ZERO }, // 315
!         { "sysin", SYSIN }, // 316
!         { "sysipt", SYSIPT }, // 317
!         { "sysout", SYSOUT }, // 318
!         { "syslist", SYSLIST }, // 319
!         { "syslst", SYSLST }, // 320
!         { "syspunch", SYSPUNCH }, // 321
!         { "syspch", SYSPCH }, // 322
!         { "console", CONSOLE }, // 323
!         { "c01", C01 }, // 324
!         { "c02", C02 }, // 325
!         { "c03", C03 }, // 326
!         { "c04", C04 }, // 327
!         { "c05", C05 }, // 328
!         { "c06", C06 }, // 329
!         { "c07", C07 }, // 330
!         { "c08", C08 }, // 331
!         { "c09", C09 }, // 332
!         { "c10", C10 }, // 333
!         { "c11", C11 }, // 334
!         { "c12", C12 }, // 335
!         { "csp", CSP }, // 336
!         { "s01", S01 }, // 337
!         { "s02", S02 }, // 338
!         { "s03", S03 }, // 339
!         { "s04", S04 }, // 340
!         { "s05", S05 }, // 341
!         { "afp-5a", AFP_5A }, // 342
!         { "stdin", STDIN }, // 343
!         { "stdout", STDOUT }, // 344
!         { "stderr", STDERR }, // 345
!         { "list", LIST }, // 346
!         { "map", MAP }, // 347
!         { "nolist", NOLIST }, // 348
!         { "nomap", NOMAP }, // 349
!         { "nosource", NOSOURCE }, // 350
!         { "might-be", MIGHT_BE }, // 351
!         { "function-udf", FUNCTION_UDF }, // 352
!         { "function-udf-0", FUNCTION_UDF_0 }, // 353
!         { "date-fmt", DATE_FMT }, // 354
!         { "time-fmt", TIME_FMT }, // 355
!         { "datetime-fmt", DATETIME_FMT }, // 356
!         { "basis", BASIS }, // 357
!         { "cbl", CBL }, // 358
!         { "constant", CONSTANT }, // 359
!         { "copy", COPY }, // 360
!         { "defined", DEFINED }, // 361
!         { "enter", ENTER }, // 362
!         { "feature", FEATURE }, // 363
!         { "insertt", INSERTT }, // 364
!         { "lsub", LSUB }, // 365
!         { "parameter", PARAMETER_kw }, // 366
!         { "override", OVERRIDE }, // 367
!         { "ready", READY }, // 368
!         { "reset", RESET }, // 369
!         { "rsub", RSUB }, // 370
!         { "service-reload", SERVICE_RELOAD }, // 371
!         { "star-cbl", STAR_CBL }, // 372
!         { "subscript", SUBSCRIPT }, // 373
!         { "suppress", SUPPRESS }, // 374
!         { "title", TITLE }, // 375
!         { "trace", TRACE }, // 376
!         { "use", USE }, // 377
!         { "cobol-words", COBOL_WORDS }, // 378
!         { "equate", EQUATE }, // 379
!         { "undefine", UNDEFINE }, // 380
!         { "cdf-define", CDF_DEFINE }, // 381
!         { "cdf-display", CDF_DISPLAY }, // 382
!         { "cdf-if", CDF_IF }, // 383
!         { "cdf-else", CDF_ELSE }, // 384
!         { "cdf-end-if", CDF_END_IF }, // 385
!         { "cdf-evaluate", CDF_EVALUATE }, // 386
!         { "cdf-when", CDF_WHEN }, // 387
!         { "cdf-end-evaluate", CDF_END_EVALUATE }, // 388
!         { "call-cobol", CALL_COBOL }, // 389
!         { "call-verbatim", CALL_VERBATIM }, // 390
!         { "if", IF }, // 391
!         { "then", THEN }, // 392
!         { "else", ELSE }, // 393
!         { "sentence", SENTENCE }, // 394
!         { "accept", ACCEPT }, // 395
!         { "add", ADD }, // 396
!         { "alter", ALTER }, // 397
!         { "call", CALL }, // 398
!         { "cancel", CANCEL }, // 399
!         { "close", CLOSE }, // 400
!         { "compute", COMPUTE }, // 401
!         { "continue", CONTINUE }, // 402
!         { "delete", DELETE }, // 403
!         { "display", DISPLAY }, // 404
!         { "divide", DIVIDE }, // 405
!         { "evaluate", EVALUATE }, // 406
!         { "exit", EXIT }, // 407
!         { "filler", FILLER_kw }, // 408
!         { "goback", GOBACK }, // 409
!         { "goto", GOTO }, // 410
!         { "initialize", INITIALIZE }, // 411
!         { "inspect", INSPECT }, // 412
!         { "merge", MERGE }, // 413
!         { "move", MOVE }, // 414
!         { "multiply", MULTIPLY }, // 415
!         { "open", OPEN }, // 416
!         { "paragraph", PARAGRAPH }, // 417
!         { "read", READ }, // 418
!         { "release", RELEASE }, // 419
!         { "return", RETURN }, // 420
!         { "rewrite", REWRITE }, // 421
!         { "search", SEARCH }, // 422
!         { "set", SET }, // 423
!         { "select", SELECT }, // 424
!         { "sort", SORT }, // 425
!         { "sort-merge", SORT_MERGE }, // 426
!         { "string", STRING_kw }, // 427
!         { "stop", STOP }, // 428
!         { "subtract", SUBTRACT }, // 429
!         { "start", START }, // 430
!         { "unstring", UNSTRING }, // 431
!         { "write", WRITE }, // 432
!         { "when", WHEN }, // 433
!         { "abs", ABS }, // 434
!         { "access", ACCESS }, // 435
!         { "acos", ACOS }, // 436
!         { "actual", ACTUAL }, // 437
!         { "advancing", ADVANCING }, // 438
!         { "after", AFTER }, // 439
!         { "all", ALL }, // 440
!         { "allocate", ALLOCATE }, // 441
!         { "alphabet", ALPHABET }, // 442
!         { "alphabetic", ALPHABETIC }, // 443
!         { "alphabetic-lower", ALPHABETIC_LOWER }, // 444
!         { "alphabetic-upper", ALPHABETIC_UPPER }, // 445
!         { "alphanumeric", ALPHANUMERIC }, // 446
!         { "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 447
!         { "also", ALSO }, // 448
!         { "alternate", ALTERNATE }, // 449
!         { "annuity", ANNUITY }, // 450
!         { "anum", ANUM }, // 451
!         { "any", ANY }, // 452
!         { "anycase", ANYCASE }, // 453
!         { "apply", APPLY }, // 454
!         { "are", ARE }, // 455
!         { "area", AREA }, // 456
!         { "areas", AREAS }, // 457
!         { "as", AS }, // 458
!         { "ascending", ASCENDING }, // 459
!         { "activating", ACTIVATING }, // 460
!         { "asin", ASIN }, // 461
!         { "assign", ASSIGN }, // 462
!         { "at", AT }, // 463
!         { "atan", ATAN }, // 464
!         { "based", BASED }, // 465
!         { "baseconvert", BASECONVERT }, // 466
!         { "before", BEFORE }, // 467
!         { "binary", BINARY }, // 468
!         { "bit", BIT }, // 469
!         { "bit-of", BIT_OF }, // 470
!         { "bit-to-char", BIT_TO_CHAR }, // 471
!         { "blank", BLANK }, // 472
!         { "block", BLOCK_kw }, // 473
!         { "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 474
!         { "bottom", BOTTOM }, // 475
!         { "by", BY }, // 476
!         { "byte", BYTE }, // 477
!         { "byte-length", BYTE_LENGTH }, // 478
!         { "cf", CF }, // 479
!         { "ch", CH }, // 480
!         { "changed", CHANGED }, // 481
!         { "char", CHAR }, // 482
!         { "char-national", CHAR_NATIONAL }, // 483
!         { "character", CHARACTER }, // 484
!         { "characters", CHARACTERS }, // 485
!         { "checking", CHECKING }, // 486
!         { "class", CLASS }, // 487
!         { "cobol", COBOL }, // 488
!         { "code", CODE }, // 489
!         { "code-set", CODESET }, // 490
!         { "collating", COLLATING }, // 491
!         { "column", COLUMN }, // 492
!         { "combined-datetime", COMBINED_DATETIME }, // 493
!         { "comma", COMMA }, // 494
!         { "command-line", COMMAND_LINE }, // 495
!         { "command-line-count", COMMAND_LINE_COUNT }, // 496
!         { "commit", COMMIT }, // 497
!         { "common", COMMON }, // 498
!         { "concat", CONCAT }, // 499
!         { "condition", CONDITION }, // 500
!         { "configuration", CONFIGURATION_SECT }, // 501
!         { "contains", CONTAINS }, // 502
!         { "content", CONTENT }, // 503
!         { "control", CONTROL }, // 504
!         { "controls", CONTROLS }, // 505
!         { "convert", CONVERT }, // 506
!         { "converting", CONVERTING }, // 507
!         { "corresponding", CORRESPONDING }, // 508
!         { "cos", COS }, // 509
!         { "count", COUNT }, // 510
!         { "currency", CURRENCY }, // 511
!         { "current", CURRENT }, // 512
!         { "current-date", CURRENT_DATE }, // 513
!         { "data", DATA }, // 514
!         { "date", DATE }, // 515
!         { "date-compiled", DATE_COMPILED }, // 516
!         { "date-of-integer", DATE_OF_INTEGER }, // 517
!         { "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 518
!         { "date-written", DATE_WRITTEN }, // 519
!         { "day", DAY }, // 520
!         { "day-of-integer", DAY_OF_INTEGER }, // 521
!         { "day-of-week", DAY_OF_WEEK }, // 522
!         { "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 523
!         { "dbcs", DBCS }, // 524
!         { "de", DE }, // 525
!         { "debugging", DEBUGGING }, // 526
!         { "decimal-point", DECIMAL_POINT }, // 527
!         { "declaratives", DECLARATIVES }, // 528
!         { "default", DEFAULT }, // 529
!         { "delimited", DELIMITED }, // 530
!         { "delimiter", DELIMITER }, // 531
!         { "depending", DEPENDING }, // 532
!         { "descending", DESCENDING }, // 533
!         { "detail", DETAIL }, // 534
!         { "direct", DIRECT }, // 535
!         { "direct-access", DIRECT_ACCESS }, // 536
!         { "down", DOWN }, // 537
!         { "duplicates", DUPLICATES }, // 538
!         { "dynamic", DYNAMIC }, // 539
!         { "e", E }, // 540
!         { "ebcdic", EBCDIC }, // 541
!         { "ec", EC }, // 542
!         { "egcs", EGCS }, // 543
!         { "entry", ENTRY }, // 544
!         { "environment", ENVIRONMENT }, // 545
!         { "equal", EQUAL }, // 546
!         { "every", EVERY }, // 547
!         { "examine", EXAMINE }, // 548
!         { "exhibit", EXHIBIT }, // 549
!         { "exp", EXP }, // 550
!         { "exp10", EXP10 }, // 551
!         { "extend", EXTEND }, // 552
!         { "external", EXTERNAL }, // 553
!         { "exception-file", EXCEPTION_FILE }, // 554
!         { "exception-file-n", EXCEPTION_FILE_N }, // 555
!         { "exception-location", EXCEPTION_LOCATION }, // 556
!         { "exception-location-n", EXCEPTION_LOCATION_N }, // 557
!         { "exception-statement", EXCEPTION_STATEMENT }, // 558
!         { "exception-status", EXCEPTION_STATUS }, // 559
!         { "factorial", FACTORIAL }, // 560
!         { "false", FALSE_kw }, // 561
!         { "fd", FD }, // 562
!         { "file-control", FILE_CONTROL }, // 563
!         { "file", FILE_KW }, // 564
!         { "file-limit", FILE_LIMIT }, // 565
!         { "final", FINAL }, // 566
!         { "finally", FINALLY }, // 567
!         { "find-string", FIND_STRING }, // 568
!         { "first", FIRST }, // 569
!         { "fixed", FIXED }, // 570
!         { "footing", FOOTING }, // 571
!         { "for", FOR }, // 572
!         { "formatted-current-date", FORMATTED_CURRENT_DATE }, // 573
!         { "formatted-date", FORMATTED_DATE }, // 574
!         { "formatted-datetime", FORMATTED_DATETIME }, // 575
!         { "formatted-time", FORMATTED_TIME }, // 576
!         { "form-overflow", FORM_OVERFLOW }, // 577
!         { "free", FREE }, // 578
!         { "fraction-part", FRACTION_PART }, // 579
!         { "from", FROM }, // 580
!         { "function", FUNCTION }, // 581
!         { "generate", GENERATE }, // 582
!         { "giving", GIVING }, // 583
!         { "global", GLOBAL }, // 584
!         { "go", GO }, // 585
!         { "group", GROUP }, // 586
!         { "heading", HEADING }, // 587
!         { "hex", HEX }, // 588
!         { "hex-of", HEX_OF }, // 589
!         { "hex-to-char", HEX_TO_CHAR }, // 590
!         { "high-values", HIGH_VALUES }, // 591
!         { "highest-algebraic", HIGHEST_ALGEBRAIC }, // 592
!         { "hold", HOLD }, // 593
!         { "ibm-360", IBM_360 }, // 594
!         { "in", IN }, // 595
!         { "include", INCLUDE }, // 596
!         { "index", INDEX }, // 597
!         { "indexed", INDEXED }, // 598
!         { "indicate", INDICATE }, // 599
!         { "initial", INITIAL_kw }, // 600
!         { "initiate", INITIATE }, // 601
!         { "input", INPUT }, // 602
!         { "installation", INSTALLATION }, // 603
!         { "interface", INTERFACE }, // 604
!         { "integer", INTEGER }, // 605
!         { "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 606
!         { "integer-of-date", INTEGER_OF_DATE }, // 607
!         { "integer-of-day", INTEGER_OF_DAY }, // 608
!         { "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 609
!         { "integer-part", INTEGER_PART }, // 610
!         { "into", INTO }, // 611
!         { "intrinsic", INTRINSIC }, // 612
!         { "invoke", INVOKE }, // 613
!         { "i-o", IO }, // 614
!         { "i-o-control", IO_CONTROL }, // 615
!         { "is", IS }, // 616
!         { "isnt", ISNT }, // 617
!         { "kanji", KANJI }, // 618
!         { "key", KEY }, // 619
!         { "label", LABEL }, // 620
!         { "last", LAST }, // 621
!         { "leading", LEADING }, // 622
!         { "left", LEFT }, // 623
!         { "length", LENGTH }, // 624
!         { "length-of", LENGTH_OF }, // 625
!         { "limit", LIMIT }, // 626
!         { "limits", LIMITS }, // 627
!         { "line", LINE }, // 628
!         { "lines", LINES }, // 629
!         { "line-counter", LINE_COUNTER }, // 630
!         { "linage", LINAGE }, // 631
!         { "linkage", LINKAGE }, // 632
!         { "locale", LOCALE }, // 633
!         { "locale-compare", LOCALE_COMPARE }, // 634
!         { "locale-date", LOCALE_DATE }, // 635
!         { "locale-time", LOCALE_TIME }, // 636
!         { "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 637
!         { "local-storage", LOCAL_STORAGE }, // 638
!         { "location", LOCATION }, // 639
!         { "lock", LOCK }, // 640
!         { "lock-on", LOCK_ON }, // 641
!         { "log", LOG }, // 642
!         { "log10", LOG10 }, // 643
!         { "lower-case", LOWER_CASE }, // 644
!         { "low-values", LOW_VALUES }, // 645
!         { "lowest-algebraic", LOWEST_ALGEBRAIC }, // 646
!         { "lparen", LPAREN }, // 647
!         { "manual", MANUAL }, // 648
!         { "maxx", MAXX }, // 649
!         { "mean", MEAN }, // 650
!         { "median", MEDIAN }, // 651
!         { "midrange", MIDRANGE }, // 652
!         { "minn", MINN }, // 653
!         { "multiple", MULTIPLE }, // 654
!         { "mod", MOD }, // 655
!         { "mode", MODE }, // 656
!         { "module-name", MODULE_NAME }, // 657
!         { "named", NAMED }, // 658
!         { "nat", NAT }, // 659
!         { "national", NATIONAL }, // 660
!         { "national-edited", NATIONAL_EDITED }, // 661
!         { "national-of", NATIONAL_OF }, // 662
!         { "native", NATIVE }, // 663
!         { "nested", NESTED }, // 664
!         { "next", NEXT }, // 665
!         { "no", NO }, // 666
!         { "note", NOTE }, // 667
!         { "nulls", NULLS }, // 668
!         { "null", NULLS }, // 668
!         { "nullptr", NULLPTR }, // 669
!         { "numeric", NUMERIC }, // 670
!         { "numeric-edited", NUMERIC_EDITED }, // 671
!         { "numval", NUMVAL }, // 672
!         { "numval-c", NUMVAL_C }, // 673
!         { "numval-f", NUMVAL_F }, // 674
!         { "occurs", OCCURS }, // 675
!         { "of", OF }, // 676
!         { "off", OFF }, // 677
!         { "omitted", OMITTED }, // 678
!         { "on", ON }, // 679
!         { "only", ONLY }, // 680
!         { "optional", OPTIONAL }, // 681
!         { "options", OPTIONS }, // 682
!         { "ord", ORD }, // 683
!         { "order", ORDER }, // 684
!         { "ord-max", ORD_MAX }, // 685
!         { "ord-min", ORD_MIN }, // 686
!         { "organization", ORGANIZATION }, // 687
!         { "other", OTHER }, // 688
!         { "otherwise", OTHERWISE }, // 689
!         { "output", OUTPUT }, // 690
!         { "packed-decimal", PACKED_DECIMAL }, // 691
!         { "padding", PADDING }, // 692
!         { "page", PAGE }, // 693
!         { "page-counter", PAGE_COUNTER }, // 694
!         { "pf", PF }, // 695
!         { "ph", PH }, // 696
!         { "pi", PI }, // 697
!         { "pic", PIC }, // 698
!         { "picture", PICTURE }, // 699
!         { "plus", PLUS }, // 700
!         { "present-value", PRESENT_VALUE }, // 701
!         { "print-switch", PRINT_SWITCH }, // 702
!         { "procedure", PROCEDURE }, // 703
!         { "procedures", PROCEDURES }, // 704
!         { "proceed", PROCEED }, // 705
!         { "process", PROCESS }, // 706
!         { "program-id", PROGRAM_ID }, // 707
!         { "program", PROGRAM_kw }, // 708
!         { "property", PROPERTY }, // 709
!         { "prototype", PROTOTYPE }, // 710
!         { "pseudotext", PSEUDOTEXT }, // 711
!         { "quotes", QUOTES }, // 712
!         { "quote", QUOTES }, // 712
!         { "random", RANDOM }, // 713
!         { "random-seed", RANDOM_SEED }, // 714
!         { "range", RANGE }, // 715
!         { "raise", RAISE }, // 716
!         { "raising", RAISING }, // 717
!         { "rd", RD }, // 718
!         { "record", RECORD }, // 719
!         { "recording", RECORDING }, // 720
!         { "records", RECORDS }, // 721
!         { "recursive", RECURSIVE }, // 722
!         { "redefines", REDEFINES }, // 723
!         { "reel", REEL }, // 724
!         { "reference", REFERENCE }, // 725
!         { "relative", RELATIVE }, // 726
!         { "rem", REM }, // 727
!         { "remainder", REMAINDER }, // 728
!         { "remarks", REMARKS }, // 729
!         { "removal", REMOVAL }, // 730
!         { "renames", RENAMES }, // 731
!         { "replace", REPLACE }, // 732
!         { "replacing", REPLACING }, // 733
!         { "report", REPORT }, // 734
!         { "reporting", REPORTING }, // 735
!         { "reports", REPORTS }, // 736
!         { "repository", REPOSITORY }, // 737
!         { "rerun", RERUN }, // 738
!         { "reserve", RESERVE }, // 739
!         { "restricted", RESTRICTED }, // 740
!         { "resume", RESUME }, // 741
!         { "reverse", REVERSE }, // 742
!         { "reversed", REVERSED }, // 743
!         { "rewind", REWIND }, // 744
!         { "rf", RF }, // 745
!         { "rh", RH }, // 746
!         { "right", RIGHT }, // 747
!         { "rounded", ROUNDED }, // 748
!         { "run", RUN }, // 749
!         { "same", SAME }, // 750
!         { "screen", SCREEN }, // 751
!         { "sd", SD }, // 752
!         { "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 753
!         { "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 754
!         { "security", SECURITY }, // 755
!         { "separate", SEPARATE }, // 756
!         { "sequence", SEQUENCE }, // 757
!         { "sequential", SEQUENTIAL }, // 758
!         { "sharing", SHARING }, // 759
!         { "simple-exit", SIMPLE_EXIT }, // 760
!         { "sign", SIGN }, // 761
!         { "sin", SIN }, // 762
!         { "size", SIZE }, // 763
!         { "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 764
!         { "source", SOURCE }, // 765
!         { "source-computer", SOURCE_COMPUTER }, // 766
!         { "special-names", SPECIAL_NAMES }, // 767
!         { "sqrt", SQRT }, // 768
!         { "stack", STACK }, // 769
!         { "standard", STANDARD }, // 770
!         { "standard-1", STANDARD_1 }, // 771
!         { "standard-deviation", STANDARD_DEVIATION }, // 772
!         { "standard-compare", STANDARD_COMPARE }, // 773
!         { "status", STATUS }, // 774
!         { "strong", STRONG }, // 775
!         { "substitute", SUBSTITUTE }, // 776
!         { "sum", SUM }, // 777
!         { "symbol", SYMBOL }, // 778
!         { "symbolic", SYMBOLIC }, // 779
!         { "synchronized", SYNCHRONIZED }, // 780
!         { "tally", TALLY }, // 781
!         { "tallying", TALLYING }, // 782
!         { "tan", TAN }, // 783
!         { "terminate", TERMINATE }, // 784
!         { "test", TEST }, // 785
!         { "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 786
!         { "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 787
!         { "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 788
!         { "test-numval", TEST_NUMVAL }, // 789
!         { "test-numval-c", TEST_NUMVAL_C }, // 790
!         { "test-numval-f", TEST_NUMVAL_F }, // 791
!         { "than", THAN }, // 792
!         { "time", TIME }, // 793
!         { "times", TIMES }, // 794
!         { "to", TO }, // 795
!         { "top", TOP }, // 796
!         { "top-level", TOP_LEVEL }, // 797
!         { "tracks", TRACKS }, // 798
!         { "track-area", TRACK_AREA }, // 799
!         { "trailing", TRAILING }, // 800
!         { "transform", TRANSFORM }, // 801
!         { "trim", TRIM }, // 802
!         { "true", TRUE_kw }, // 803
!         { "try", TRY }, // 804
!         { "turn", TURN }, // 805
!         { "type", TYPE }, // 806
!         { "typedef", TYPEDEF }, // 807
!         { "ulength", ULENGTH }, // 808
!         { "unbounded", UNBOUNDED }, // 809
!         { "unit", UNIT }, // 810
!         { "units", UNITS }, // 811
!         { "unit-record", UNIT_RECORD }, // 812
!         { "until", UNTIL }, // 813
!         { "up", UP }, // 814
!         { "upon", UPON }, // 815
!         { "upos", UPOS }, // 816
!         { "upper-case", UPPER_CASE }, // 817
!         { "usage", USAGE }, // 818
!         { "using", USING }, // 819
!         { "usubstr", USUBSTR }, // 820
!         { "usupplementary", USUPPLEMENTARY }, // 821
!         { "utility", UTILITY }, // 822
!         { "uuid4", UUID4 }, // 823
!         { "uvalid", UVALID }, // 824
!         { "uwidth", UWIDTH }, // 825
!         { "value", VALUE }, // 826
!         { "variance", VARIANCE }, // 827
!         { "varying", VARYING }, // 828
!         { "volatile", VOLATILE }, // 829
!         { "when-compiled", WHEN_COMPILED }, // 830
!         { "with", WITH }, // 831
!         { "working-storage", WORKING_STORAGE }, // 832
!         { "xml", XML }, // 833
!         { "xmlgenerate", XMLGENERATE }, // 834
!         { "xmlparse", XMLPARSE }, // 835
!         { "year-to-yyyy", YEAR_TO_YYYY }, // 836
!         { "yyyyddd", YYYYDDD }, // 837
!         { "yyyymmdd", YYYYMMDD }, // 838
!         { "arithmetic", ARITHMETIC }, // 839
!         { "attribute", ATTRIBUTE }, // 840
!         { "auto", AUTO }, // 841
!         { "automatic", AUTOMATIC }, // 842
!         { "away-from-zero", AWAY_FROM_ZERO }, // 843
!         { "background-color", BACKGROUND_COLOR }, // 844
!         { "bell", BELL }, // 845
!         { "binary-encoding", BINARY_ENCODING }, // 846
!         { "blink", BLINK }, // 847
!         { "capacity", CAPACITY }, // 848
!         { "center", CENTER }, // 849
!         { "classification", CLASSIFICATION }, // 850
!         { "cycle", CYCLE }, // 851
!         { "decimal-encoding", DECIMAL_ENCODING }, // 852
!         { "entry-convention", ENTRY_CONVENTION }, // 853
!         { "eol", EOL }, // 854
!         { "eos", EOS }, // 855
!         { "erase", ERASE }, // 856
!         { "expands", EXPANDS }, // 857
!         { "float-binary", FLOAT_BINARY }, // 858
!         { "float-decimal", FLOAT_DECIMAL }, // 859
!         { "foreground-color", FOREGROUND_COLOR }, // 860
!         { "forever", FOREVER }, // 861
!         { "full", FULL }, // 862
!         { "highlight", HIGHLIGHT }, // 863
!         { "high-order-left", HIGH_ORDER_LEFT }, // 864
!         { "high-order-right", HIGH_ORDER_RIGHT }, // 865
!         { "ignoring", IGNORING }, // 866
!         { "implements", IMPLEMENTS }, // 867
!         { "initialized", INITIALIZED }, // 868
!         { "intermediate", INTERMEDIATE }, // 869
!         { "lc-all", LC_ALL_kw }, // 870
!         { "lc-collate", LC_COLLATE_kw }, // 871
!         { "lc-ctype", LC_CTYPE_kw }, // 872
!         { "lc-messages", LC_MESSAGES_kw }, // 873
!         { "lc-monetary", LC_MONETARY_kw }, // 874
!         { "lc-numeric", LC_NUMERIC_kw }, // 875
!         { "lc-time", LC_TIME_kw }, // 876
!         { "lowlight", LOWLIGHT }, // 877
!         { "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 878
!         { "nearest-even", NEAREST_EVEN }, // 879
!         { "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 880
!         { "none", NONE }, // 881
!         { "normal", NORMAL }, // 882
!         { "numbers", NUMBERS }, // 883
!         { "prefixed", PREFIXED }, // 884
!         { "previous", PREVIOUS }, // 885
!         { "prohibited", PROHIBITED }, // 886
!         { "relation", RELATION }, // 887
!         { "required", REQUIRED }, // 888
!         { "reverse-video", REVERSE_VIDEO }, // 889
!         { "rounding", ROUNDING }, // 890
!         { "seconds", SECONDS }, // 891
!         { "secure", SECURE }, // 892
!         { "short", SHORT }, // 893
!         { "signed", SIGNED_kw }, // 894
!         { "standard-binary", STANDARD_BINARY }, // 895
!         { "standard-decimal", STANDARD_DECIMAL }, // 896
!         { "statement", STATEMENT }, // 897
!         { "step", STEP }, // 898
!         { "structure", STRUCTURE }, // 899
!         { "toward-greater", TOWARD_GREATER }, // 900
!         { "toward-lesser", TOWARD_LESSER }, // 901
!         { "truncation", TRUNCATION }, // 902
!         { "ucs-4", UCS_4 }, // 903
!         { "underline", UNDERLINE }, // 904
!         { "unsigned", UNSIGNED_kw }, // 905
!         { "utf-16", UTF_16 }, // 906
!         { "utf-8", UTF_8 }, // 907
!         { "address", ADDRESS }, // 908
!         { "end-accept", END_ACCEPT }, // 909
!         { "end-add", END_ADD }, // 910
!         { "end-call", END_CALL }, // 911
!         { "end-compute", END_COMPUTE }, // 912
!         { "end-delete", END_DELETE }, // 913
!         { "end-display", END_DISPLAY }, // 914
!         { "end-divide", END_DIVIDE }, // 915
!         { "end-evaluate", END_EVALUATE }, // 916
!         { "end-multiply", END_MULTIPLY }, // 917
!         { "end-perform", END_PERFORM }, // 918
!         { "end-read", END_READ }, // 919
!         { "end-return", END_RETURN }, // 920
!         { "end-rewrite", END_REWRITE }, // 921
!         { "end-search", END_SEARCH }, // 922
!         { "end-start", END_START }, // 923
!         { "end-string", END_STRING }, // 924
!         { "end-subtract", END_SUBTRACT }, // 925
!         { "end-unstring", END_UNSTRING }, // 926
!         { "end-write", END_WRITE }, // 927
!         { "end-if", END_IF }, // 928
!         { "thru", THRU }, // 929
!         { "through", THRU }, // 929
!         { "or", OR }, // 930
!         { "and", AND }, // 931
!         { "not", NOT }, // 932
!         { "ne", NE }, // 933
!         { "le", LE }, // 934
!         { "ge", GE }, // 935
!         { "pow", POW }, // 936
!         { "neg", NEG }, // 937
  };
  
  token_names = {
!         "IDENTIFICATION", // 0 (258)
!         "ENVIRONMENT", // 1 (259)
!         "PROCEDURE", // 2 (260)
!         "DATA", // 3 (261)
!         "FILE", // 4 (262)
!         "INPUT-OUTPUT", // 5 (263)
!         "LINKAGE", // 6 (264)
!         "LOCAL-STORAGE", // 7 (265)
!         "WORKING-STORAGE", // 8 (266)
!         "OBJECT-COMPUTER", // 9 (267)
!         "DISPLAY-OF", // 10 (268)
!         "END-FUNCTION", // 11 (269)
!         "END-PROGRAM", // 12 (270)
!         "END-SUBPROGRAM", // 13 (271)
!         "JUSTIFIED", // 14 (272)
!         "RETURNING", // 15 (273)
!         "NO-CONDITION", // 16 (274)
!         "ALNUM", // 17 (275)
!         "ALPHED", // 18 (276)
!         "ERROR", // 19 (277)
!         "EXCEPTION", // 20 (278)
!         "SIZE-ERROR", // 21 (279)
!         "EXCEPTION-NAME", // 22 (280)
!         "LEVEL", // 23 (281)
!         "LEVEL66", // 24 (282)
!         "LEVEL78", // 25 (283)
!         "LEVEL88", // 26 (284)
!         "CLASS-NAME", // 27 (285)
!         "NAME", // 28 (286)
!         "NAME88", // 29 (287)
!         "NUME", // 30 (288)
!         "NUMED", // 31 (289)
!         "NUMED-CR", // 32 (290)
!         "NUMED-DB", // 33 (291)
!         "NINEDOT", // 34 (292)
!         "NINES", // 35 (293)
!         "NINEV", // 36 (294)
!         "PIC-P", // 37 (295)
!         "SPACES", // 38 (296)
!         "LITERAL", // 39 (297)
!         "END", // 40 (298)
!         "EOP", // 41 (299)
!         "FILENAME", // 42 (300)
!         "INVALID", // 43 (301)
!         "NUMBER", // 44 (302)
!         "NEGATIVE", // 45 (303)
!         "NUMSTR", // 46 (304)
!         "OVERFLOW", // 47 (305)
!         "COMPUTATIONAL", // 48 (306)
!         "PERFORM", // 49 (307)
!         "BACKWARD", // 50 (308)
!         "POSITIVE", // 51 (309)
!         "POINTER", // 52 (310)
!         "SECTION", // 53 (311)
!         "STANDARD-ALPHABET", // 54 (312)
!         "SWITCH", // 55 (313)
!         "UPSI", // 56 (314)
!         "ZERO", // 57 (315)
!         "SYSIN", // 58 (316)
!         "SYSIPT", // 59 (317)
!         "SYSOUT", // 60 (318)
!         "SYSLIST", // 61 (319)
!         "SYSLST", // 62 (320)
!         "SYSPUNCH", // 63 (321)
!         "SYSPCH", // 64 (322)
!         "CONSOLE", // 65 (323)
!         "C01", // 66 (324)
!         "C02", // 67 (325)
!         "C03", // 68 (326)
!         "C04", // 69 (327)
!         "C05", // 70 (328)
!         "C06", // 71 (329)
!         "C07", // 72 (330)
!         "C08", // 73 (331)
!         "C09", // 74 (332)
!         "C10", // 75 (333)
!         "C11", // 76 (334)
!         "C12", // 77 (335)
!         "CSP", // 78 (336)
!         "S01", // 79 (337)
!         "S02", // 80 (338)
!         "S03", // 81 (339)
!         "S04", // 82 (340)
!         "S05", // 83 (341)
!         "AFP-5A", // 84 (342)
!         "STDIN", // 85 (343)
!         "STDOUT", // 86 (344)
!         "STDERR", // 87 (345)
!         "LIST", // 88 (346)
!         "MAP", // 89 (347)
!         "NOLIST", // 90 (348)
!         "NOMAP", // 91 (349)
!         "NOSOURCE", // 92 (350)
!         "MIGHT-BE", // 93 (351)
!         "FUNCTION-UDF", // 94 (352)
!         "FUNCTION-UDF-0", // 95 (353)
!         "DATE-FMT", // 96 (354)
!         "TIME-FMT", // 97 (355)
!         "DATETIME-FMT", // 98 (356)
!         "BASIS", // 99 (357)
!         "CBL", // 100 (358)
!         "CONSTANT", // 101 (359)
!         "COPY", // 102 (360)
!         "DEFINED", // 103 (361)
!         "ENTER", // 104 (362)
!         "FEATURE", // 105 (363)
!         "INSERTT", // 106 (364)
!         "LSUB", // 107 (365)
!         "PARAMETER", // 108 (366)
!         "OVERRIDE", // 109 (367)
!         "READY", // 110 (368)
!         "RESET", // 111 (369)
!         "RSUB", // 112 (370)
!         "SERVICE-RELOAD", // 113 (371)
!         "STAR-CBL", // 114 (372)
!         "SUBSCRIPT", // 115 (373)
!         "SUPPRESS", // 116 (374)
!         "TITLE", // 117 (375)
!         "TRACE", // 118 (376)
!         "USE", // 119 (377)
!         "COBOL-WORDS", // 120 (378)
!         "EQUATE", // 121 (379)
!         "UNDEFINE", // 122 (380)
!         "CDF-DEFINE", // 123 (381)
!         "CDF-DISPLAY", // 124 (382)
!         "CDF-IF", // 125 (383)
!         "CDF-ELSE", // 126 (384)
!         "CDF-END-IF", // 127 (385)
!         "CDF-EVALUATE", // 128 (386)
!         "CDF-WHEN", // 129 (387)
!         "CDF-END-EVALUATE", // 130 (388)
!         "CALL-COBOL", // 131 (389)
!         "CALL-VERBATIM", // 132 (390)
!         "IF", // 133 (391)
!         "THEN", // 134 (392)
!         "ELSE", // 135 (393)
!         "SENTENCE", // 136 (394)
!         "ACCEPT", // 137 (395)
!         "ADD", // 138 (396)
!         "ALTER", // 139 (397)
!         "CALL", // 140 (398)
!         "CANCEL", // 141 (399)
!         "CLOSE", // 142 (400)
!         "COMPUTE", // 143 (401)
!         "CONTINUE", // 144 (402)
!         "DELETE", // 145 (403)
!         "DISPLAY", // 146 (404)
!         "DIVIDE", // 147 (405)
!         "EVALUATE", // 148 (406)
!         "EXIT", // 149 (407)
!         "FILLER", // 150 (408)
!         "GOBACK", // 151 (409)
!         "GOTO", // 152 (410)
!         "INITIALIZE", // 153 (411)
!         "INSPECT", // 154 (412)
!         "MERGE", // 155 (413)
!         "MOVE", // 156 (414)
!         "MULTIPLY", // 157 (415)
!         "OPEN", // 158 (416)
!         "PARAGRAPH", // 159 (417)
!         "READ", // 160 (418)
!         "RELEASE", // 161 (419)
!         "RETURN", // 162 (420)
!         "REWRITE", // 163 (421)
!         "SEARCH", // 164 (422)
!         "SET", // 165 (423)
!         "SELECT", // 166 (424)
!         "SORT", // 167 (425)
!         "SORT-MERGE", // 168 (426)
!         "STRING", // 169 (427)
!         "STOP", // 170 (428)
!         "SUBTRACT", // 171 (429)
!         "START", // 172 (430)
!         "UNSTRING", // 173 (431)
!         "WRITE", // 174 (432)
!         "WHEN", // 175 (433)
!         "ABS", // 176 (434)
!         "ACCESS", // 177 (435)
!         "ACOS", // 178 (436)
!         "ACTUAL", // 179 (437)
!         "ADVANCING", // 180 (438)
!         "AFTER", // 181 (439)
!         "ALL", // 182 (440)
!         "ALLOCATE", // 183 (441)
!         "ALPHABET", // 184 (442)
!         "ALPHABETIC", // 185 (443)
!         "ALPHABETIC-LOWER", // 186 (444)
!         "ALPHABETIC-UPPER", // 187 (445)
!         "ALPHANUMERIC", // 188 (446)
!         "ALPHANUMERIC-EDITED", // 189 (447)
!         "ALSO", // 190 (448)
!         "ALTERNATE", // 191 (449)
!         "ANNUITY", // 192 (450)
!         "ANUM", // 193 (451)
!         "ANY", // 194 (452)
!         "ANYCASE", // 195 (453)
!         "APPLY", // 196 (454)
!         "ARE", // 197 (455)
!         "AREA", // 198 (456)
!         "AREAS", // 199 (457)
!         "AS", // 200 (458)
!         "ASCENDING", // 201 (459)
!         "ACTIVATING", // 202 (460)
!         "ASIN", // 203 (461)
!         "ASSIGN", // 204 (462)
!         "AT", // 205 (463)
!         "ATAN", // 206 (464)
!         "BASED", // 207 (465)
!         "BASECONVERT", // 208 (466)
!         "BEFORE", // 209 (467)
!         "BINARY", // 210 (468)
!         "BIT", // 211 (469)
!         "BIT-OF", // 212 (470)
!         "BIT-TO-CHAR", // 213 (471)
!         "BLANK", // 214 (472)
!         "BLOCK", // 215 (473)
!         "BOOLEAN-OF-INTEGER", // 216 (474)
!         "BOTTOM", // 217 (475)
!         "BY", // 218 (476)
!         "BYTE", // 219 (477)
!         "BYTE-LENGTH", // 220 (478)
!         "CF", // 221 (479)
!         "CH", // 222 (480)
!         "CHANGED", // 223 (481)
!         "CHAR", // 224 (482)
!         "CHAR-NATIONAL", // 225 (483)
!         "CHARACTER", // 226 (484)
!         "CHARACTERS", // 227 (485)
!         "CHECKING", // 228 (486)
!         "CLASS", // 229 (487)
!         "COBOL", // 230 (488)
!         "CODE", // 231 (489)
!         "CODE-SET", // 232 (490)
!         "COLLATING", // 233 (491)
!         "COLUMN", // 234 (492)
!         "COMBINED-DATETIME", // 235 (493)
!         "COMMA", // 236 (494)
!         "COMMAND-LINE", // 237 (495)
!         "COMMAND-LINE-COUNT", // 238 (496)
!         "COMMIT", // 239 (497)
!         "COMMON", // 240 (498)
!         "CONCAT", // 241 (499)
!         "CONDITION", // 242 (500)
!         "CONFIGURATION", // 243 (501)
!         "CONTAINS", // 244 (502)
!         "CONTENT", // 245 (503)
!         "CONTROL", // 246 (504)
!         "CONTROLS", // 247 (505)
!         "CONVERT", // 248 (506)
!         "CONVERTING", // 249 (507)
!         "CORRESPONDING", // 250 (508)
!         "COS", // 251 (509)
!         "COUNT", // 252 (510)
!         "CURRENCY", // 253 (511)
!         "CURRENT", // 254 (512)
!         "CURRENT-DATE", // 255 (513)
!         "DATA", // 256 (514)
!         "DATE", // 257 (515)
!         "DATE-COMPILED", // 258 (516)
!         "DATE-OF-INTEGER", // 259 (517)
!         "DATE-TO-YYYYMMDD", // 260 (518)
!         "DATE-WRITTEN", // 261 (519)
!         "DAY", // 262 (520)
!         "DAY-OF-INTEGER", // 263 (521)
!         "DAY-OF-WEEK", // 264 (522)
!         "DAY-TO-YYYYDDD", // 265 (523)
!         "DBCS", // 266 (524)
!         "DE", // 267 (525)
!         "DEBUGGING", // 268 (526)
!         "DECIMAL-POINT", // 269 (527)
!         "DECLARATIVES", // 270 (528)
!         "DEFAULT", // 271 (529)
!         "DELIMITED", // 272 (530)
!         "DELIMITER", // 273 (531)
!         "DEPENDING", // 274 (532)
!         "DESCENDING", // 275 (533)
!         "DETAIL", // 276 (534)
!         "DIRECT", // 277 (535)
!         "DIRECT-ACCESS", // 278 (536)
!         "DOWN", // 279 (537)
!         "DUPLICATES", // 280 (538)
!         "DYNAMIC", // 281 (539)
!         "E", // 282 (540)
!         "EBCDIC", // 283 (541)
!         "EC", // 284 (542)
!         "EGCS", // 285 (543)
!         "ENTRY", // 286 (544)
!         "ENVIRONMENT", // 287 (545)
!         "EQUAL", // 288 (546)
!         "EVERY", // 289 (547)
!         "EXAMINE", // 290 (548)
!         "EXHIBIT", // 291 (549)
!         "EXP", // 292 (550)
!         "EXP10", // 293 (551)
!         "EXTEND", // 294 (552)
!         "EXTERNAL", // 295 (553)
!         "EXCEPTION-FILE", // 296 (554)
!         "EXCEPTION-FILE-N", // 297 (555)
!         "EXCEPTION-LOCATION", // 298 (556)
!         "EXCEPTION-LOCATION-N", // 299 (557)
!         "EXCEPTION-STATEMENT", // 300 (558)
!         "EXCEPTION-STATUS", // 301 (559)
!         "FACTORIAL", // 302 (560)
!         "FALSE", // 303 (561)
!         "FD", // 304 (562)
!         "FILE-CONTROL", // 305 (563)
!         "FILE", // 306 (564)
!         "FILE-LIMIT", // 307 (565)
!         "FINAL", // 308 (566)
!         "FINALLY", // 309 (567)
!         "FIND-STRING", // 310 (568)
!         "FIRST", // 311 (569)
!         "FIXED", // 312 (570)
!         "FOOTING", // 313 (571)
!         "FOR", // 314 (572)
!         "FORMATTED-CURRENT-DATE", // 315 (573)
!         "FORMATTED-DATE", // 316 (574)
!         "FORMATTED-DATETIME", // 317 (575)
!         "FORMATTED-TIME", // 318 (576)
!         "FORM-OVERFLOW", // 319 (577)
!         "FREE", // 320 (578)
!         "FRACTION-PART", // 321 (579)
!         "FROM", // 322 (580)
!         "FUNCTION", // 323 (581)
!         "GENERATE", // 324 (582)
!         "GIVING", // 325 (583)
!         "GLOBAL", // 326 (584)
!         "GO", // 327 (585)
!         "GROUP", // 328 (586)
!         "HEADING", // 329 (587)
!         "HEX", // 330 (588)
!         "HEX-OF", // 331 (589)
!         "HEX-TO-CHAR", // 332 (590)
!         "HIGH-VALUES", // 333 (591)
!         "HIGHEST-ALGEBRAIC", // 334 (592)
!         "HOLD", // 335 (593)
!         "IBM-360", // 336 (594)
!         "IN", // 337 (595)
!         "INCLUDE", // 338 (596)
!         "INDEX", // 339 (597)
!         "INDEXED", // 340 (598)
!         "INDICATE", // 341 (599)
!         "INITIAL", // 342 (600)
!         "INITIATE", // 343 (601)
!         "INPUT", // 344 (602)
!         "INSTALLATION", // 345 (603)
!         "INTERFACE", // 346 (604)
!         "INTEGER", // 347 (605)
!         "INTEGER-OF-BOOLEAN", // 348 (606)
!         "INTEGER-OF-DATE", // 349 (607)
!         "INTEGER-OF-DAY", // 350 (608)
!         "INTEGER-OF-FORMATTED-DATE", // 351 (609)
!         "INTEGER-PART", // 352 (610)
!         "INTO", // 353 (611)
!         "INTRINSIC", // 354 (612)
!         "INVOKE", // 355 (613)
!         "I-O", // 356 (614)
!         "I-O-CONTROL", // 357 (615)
!         "IS", // 358 (616)
!         "ISNT", // 359 (617)
!         "KANJI", // 360 (618)
!         "KEY", // 361 (619)
!         "LABEL", // 362 (620)
!         "LAST", // 363 (621)
!         "LEADING", // 364 (622)
!         "LEFT", // 365 (623)
!         "LENGTH", // 366 (624)
!         "LENGTH-OF", // 367 (625)
!         "LIMIT", // 368 (626)
!         "LIMITS", // 369 (627)
!         "LINE", // 370 (628)
!         "LINES", // 371 (629)
!         "LINE-COUNTER", // 372 (630)
!         "LINAGE", // 373 (631)
!         "LINKAGE", // 374 (632)
!         "LOCALE", // 375 (633)
!         "LOCALE-COMPARE", // 376 (634)
!         "LOCALE-DATE", // 377 (635)
!         "LOCALE-TIME", // 378 (636)
!         "LOCALE-TIME-FROM-SECONDS", // 379 (637)
!         "LOCAL-STORAGE", // 380 (638)
!         "LOCATION", // 381 (639)
!         "LOCK", // 382 (640)
!         "LOCK-ON", // 383 (641)
!         "LOG", // 384 (642)
!         "LOG10", // 385 (643)
!         "LOWER-CASE", // 386 (644)
!         "LOW-VALUES", // 387 (645)
!         "LOWEST-ALGEBRAIC", // 388 (646)
!         "LPAREN", // 389 (647)
!         "MANUAL", // 390 (648)
!         "MAXX", // 391 (649)
!         "MEAN", // 392 (650)
!         "MEDIAN", // 393 (651)
!         "MIDRANGE", // 394 (652)
!         "MINN", // 395 (653)
!         "MULTIPLE", // 396 (654)
!         "MOD", // 397 (655)
!         "MODE", // 398 (656)
!         "MODULE-NAME", // 399 (657)
!         "NAMED", // 400 (658)
!         "NAT", // 401 (659)
!         "NATIONAL", // 402 (660)
!         "NATIONAL-EDITED", // 403 (661)
!         "NATIONAL-OF", // 404 (662)
!         "NATIVE", // 405 (663)
!         "NESTED", // 406 (664)
!         "NEXT", // 407 (665)
!         "NO", // 408 (666)
!         "NOTE", // 409 (667)
!         "NULLS", // 410 (668)
!         "NULLPTR", // 411 (669)
!         "NUMERIC", // 412 (670)
!         "NUMERIC-EDITED", // 413 (671)
!         "NUMVAL", // 414 (672)
!         "NUMVAL-C", // 415 (673)
!         "NUMVAL-F", // 416 (674)
!         "OCCURS", // 417 (675)
!         "OF", // 418 (676)
!         "OFF", // 419 (677)
!         "OMITTED", // 420 (678)
!         "ON", // 421 (679)
!         "ONLY", // 422 (680)
!         "OPTIONAL", // 423 (681)
!         "OPTIONS", // 424 (682)
!         "ORD", // 425 (683)
!         "ORDER", // 426 (684)
!         "ORD-MAX", // 427 (685)
!         "ORD-MIN", // 428 (686)
!         "ORGANIZATION", // 429 (687)
!         "OTHER", // 430 (688)
!         "OTHERWISE", // 431 (689)
!         "OUTPUT", // 432 (690)
!         "PACKED-DECIMAL", // 433 (691)
!         "PADDING", // 434 (692)
!         "PAGE", // 435 (693)
!         "PAGE-COUNTER", // 436 (694)
!         "PF", // 437 (695)
!         "PH", // 438 (696)
!         "PI", // 439 (697)
!         "PIC", // 440 (698)
!         "PICTURE", // 441 (699)
!         "PLUS", // 442 (700)
!         "PRESENT-VALUE", // 443 (701)
!         "PRINT-SWITCH", // 444 (702)
!         "PROCEDURE", // 445 (703)
!         "PROCEDURES", // 446 (704)
!         "PROCEED", // 447 (705)
!         "PROCESS", // 448 (706)
!         "PROGRAM-ID", // 449 (707)
!         "PROGRAM", // 450 (708)
!         "PROPERTY", // 451 (709)
!         "PROTOTYPE", // 452 (710)
!         "PSEUDOTEXT", // 453 (711)
!         "QUOTES", // 454 (712)
!         "RANDOM", // 455 (713)
!         "RANDOM-SEED", // 456 (714)
!         "RANGE", // 457 (715)
!         "RAISE", // 458 (716)
!         "RAISING", // 459 (717)
!         "RD", // 460 (718)
!         "RECORD", // 461 (719)
!         "RECORDING", // 462 (720)
!         "RECORDS", // 463 (721)
!         "RECURSIVE", // 464 (722)
!         "REDEFINES", // 465 (723)
!         "REEL", // 466 (724)
!         "REFERENCE", // 467 (725)
!         "RELATIVE", // 468 (726)
!         "REM", // 469 (727)
!         "REMAINDER", // 470 (728)
!         "REMARKS", // 471 (729)
!         "REMOVAL", // 472 (730)
!         "RENAMES", // 473 (731)
!         "REPLACE", // 474 (732)
!         "REPLACING", // 475 (733)
!         "REPORT", // 476 (734)
!         "REPORTING", // 477 (735)
!         "REPORTS", // 478 (736)
!         "REPOSITORY", // 479 (737)
!         "RERUN", // 480 (738)
!         "RESERVE", // 481 (739)
!         "RESTRICTED", // 482 (740)
!         "RESUME", // 483 (741)
!         "REVERSE", // 484 (742)
!         "REVERSED", // 485 (743)
!         "REWIND", // 486 (744)
!         "RF", // 487 (745)
!         "RH", // 488 (746)
!         "RIGHT", // 489 (747)
!         "ROUNDED", // 490 (748)
!         "RUN", // 491 (749)
!         "SAME", // 492 (750)
!         "SCREEN", // 493 (751)
!         "SD", // 494 (752)
!         "SECONDS-FROM-FORMATTED-TIME", // 495 (753)
!         "SECONDS-PAST-MIDNIGHT", // 496 (754)
!         "SECURITY", // 497 (755)
!         "SEPARATE", // 498 (756)
!         "SEQUENCE", // 499 (757)
!         "SEQUENTIAL", // 500 (758)
!         "SHARING", // 501 (759)
!         "SIMPLE-EXIT", // 502 (760)
!         "SIGN", // 503 (761)
!         "SIN", // 504 (762)
!         "SIZE", // 505 (763)
!         "SMALLEST-ALGEBRAIC", // 506 (764)
!         "SOURCE", // 507 (765)
!         "SOURCE-COMPUTER", // 508 (766)
!         "SPECIAL-NAMES", // 509 (767)
!         "SQRT", // 510 (768)
!         "STACK", // 511 (769)
!         "STANDARD", // 512 (770)
!         "STANDARD-1", // 513 (771)
!         "STANDARD-DEVIATION", // 514 (772)
!         "STANDARD-COMPARE", // 515 (773)
!         "STATUS", // 516 (774)
!         "STRONG", // 517 (775)
!         "SUBSTITUTE", // 518 (776)
!         "SUM", // 519 (777)
!         "SYMBOL", // 520 (778)
!         "SYMBOLIC", // 521 (779)
!         "SYNCHRONIZED", // 522 (780)
!         "TALLY", // 523 (781)
!         "TALLYING", // 524 (782)
!         "TAN", // 525 (783)
!         "TERMINATE", // 526 (784)
!         "TEST", // 527 (785)
!         "TEST-DATE-YYYYMMDD", // 528 (786)
!         "TEST-DAY-YYYYDDD", // 529 (787)
!         "TEST-FORMATTED-DATETIME", // 530 (788)
!         "TEST-NUMVAL", // 531 (789)
!         "TEST-NUMVAL-C", // 532 (790)
!         "TEST-NUMVAL-F", // 533 (791)
!         "THAN", // 534 (792)
!         "TIME", // 535 (793)
!         "TIMES", // 536 (794)
!         "TO", // 537 (795)
!         "TOP", // 538 (796)
!         "TOP-LEVEL", // 539 (797)
!         "TRACKS", // 540 (798)
!         "TRACK-AREA", // 541 (799)
!         "TRAILING", // 542 (800)
!         "TRANSFORM", // 543 (801)
!         "TRIM", // 544 (802)
!         "TRUE", // 545 (803)
!         "TRY", // 546 (804)
!         "TURN", // 547 (805)
!         "TYPE", // 548 (806)
!         "TYPEDEF", // 549 (807)
!         "ULENGTH", // 550 (808)
!         "UNBOUNDED", // 551 (809)
!         "UNIT", // 552 (810)
!         "UNITS", // 553 (811)
!         "UNIT-RECORD", // 554 (812)
!         "UNTIL", // 555 (813)
!         "UP", // 556 (814)
!         "UPON", // 557 (815)
!         "UPOS", // 558 (816)
!         "UPPER-CASE", // 559 (817)
!         "USAGE", // 560 (818)
!         "USING", // 561 (819)
!         "USUBSTR", // 562 (820)
!         "USUPPLEMENTARY", // 563 (821)
!         "UTILITY", // 564 (822)
!         "UUID4", // 565 (823)
!         "UVALID", // 566 (824)
!         "UWIDTH", // 567 (825)
!         "VALUE", // 568 (826)
!         "VARIANCE", // 569 (827)
!         "VARYING", // 570 (828)
!         "VOLATILE", // 571 (829)
!         "WHEN-COMPILED", // 572 (830)
!         "WITH", // 573 (831)
!         "WORKING-STORAGE", // 574 (832)
!         "XML", // 575 (833)
!         "XMLGENERATE", // 576 (834)
!         "XMLPARSE", // 577 (835)
!         "YEAR-TO-YYYY", // 578 (836)
!         "YYYYDDD", // 579 (837)
!         "YYYYMMDD", // 580 (838)
!         "ARITHMETIC", // 581 (839)
!         "ATTRIBUTE", // 582 (840)
!         "AUTO", // 583 (841)
!         "AUTOMATIC", // 584 (842)
!         "AWAY-FROM-ZERO", // 585 (843)
!         "BACKGROUND-COLOR", // 586 (844)
!         "BELL", // 587 (845)
!         "BINARY-ENCODING", // 588 (846)
!         "BLINK", // 589 (847)
!         "CAPACITY", // 590 (848)
!         "CENTER", // 591 (849)
!         "CLASSIFICATION", // 592 (850)
!         "CYCLE", // 593 (851)
!         "DECIMAL-ENCODING", // 594 (852)
!         "ENTRY-CONVENTION", // 595 (853)
!         "EOL", // 596 (854)
!         "EOS", // 597 (855)
!         "ERASE", // 598 (856)
!         "EXPANDS", // 599 (857)
!         "FLOAT-BINARY", // 600 (858)
!         "FLOAT-DECIMAL", // 601 (859)
!         "FOREGROUND-COLOR", // 602 (860)
!         "FOREVER", // 603 (861)
!         "FULL", // 604 (862)
!         "HIGHLIGHT", // 605 (863)
!         "HIGH-ORDER-LEFT", // 606 (864)
!         "HIGH-ORDER-RIGHT", // 607 (865)
!         "IGNORING", // 608 (866)
!         "IMPLEMENTS", // 609 (867)
!         "INITIALIZED", // 610 (868)
!         "INTERMEDIATE", // 611 (869)
!         "LC-ALL", // 612 (870)
!         "LC-COLLATE", // 613 (871)
!         "LC-CTYPE", // 614 (872)
!         "LC-MESSAGES", // 615 (873)
!         "LC-MONETARY", // 616 (874)
!         "LC-NUMERIC", // 617 (875)
!         "LC-TIME", // 618 (876)
!         "LOWLIGHT", // 619 (877)
!         "NEAREST-AWAY-FROM-ZERO", // 620 (878)
!         "NEAREST-EVEN", // 621 (879)
!         "NEAREST-TOWARD-ZERO", // 622 (880)
!         "NONE", // 623 (881)
!         "NORMAL", // 624 (882)
!         "NUMBERS", // 625 (883)
!         "PREFIXED", // 626 (884)
!         "PREVIOUS", // 627 (885)
!         "PROHIBITED", // 628 (886)
!         "RELATION", // 629 (887)
!         "REQUIRED", // 630 (888)
!         "REVERSE-VIDEO", // 631 (889)
!         "ROUNDING", // 632 (890)
!         "SECONDS", // 633 (891)
!         "SECURE", // 634 (892)
!         "SHORT", // 635 (893)
!         "SIGNED", // 636 (894)
!         "STANDARD-BINARY", // 637 (895)
!         "STANDARD-DECIMAL", // 638 (896)
!         "STATEMENT", // 639 (897)
!         "STEP", // 640 (898)
!         "STRUCTURE", // 641 (899)
!         "TOWARD-GREATER", // 642 (900)
!         "TOWARD-LESSER", // 643 (901)
!         "TRUNCATION", // 644 (902)
!         "UCS-4", // 645 (903)
!         "UNDERLINE", // 646 (904)
!         "UNSIGNED", // 647 (905)
!         "UTF-16", // 648 (906)
!         "UTF-8", // 649 (907)
!         "ADDRESS", // 650 (908)
!         "END-ACCEPT", // 651 (909)
!         "END-ADD", // 652 (910)
!         "END-CALL", // 653 (911)
!         "END-COMPUTE", // 654 (912)
!         "END-DELETE", // 655 (913)
!         "END-DISPLAY", // 656 (914)
!         "END-DIVIDE", // 657 (915)
!         "END-EVALUATE", // 658 (916)
!         "END-MULTIPLY", // 659 (917)
!         "END-PERFORM", // 660 (918)
!         "END-READ", // 661 (919)
!         "END-RETURN", // 662 (920)
!         "END-REWRITE", // 663 (921)
!         "END-SEARCH", // 664 (922)
!         "END-START", // 665 (923)
!         "END-STRING", // 666 (924)
!         "END-SUBTRACT", // 667 (925)
!         "END-UNSTRING", // 668 (926)
!         "END-WRITE", // 669 (927)
!         "END-IF", // 670 (928)
!         "THRU", // 671 (929)
!         "OR", // 672 (930)
!         "AND", // 673 (931)
!         "NOT", // 674 (932)
!         "NE", // 675 (933)
!         "LE", // 676 (934)
!         "GE", // 677 (935)
!         "POW", // 678 (936)
!         "NEG", // 679 (937)
  };
--- 1,1377 ----
  // generated by ./token_names.h.gen ../../build/gcc/cobol/parse.h
! // Thu May  8 18:53:33 EDT 2025
  tokens = {
! 	{ "identification", IDENTIFICATION_DIV }, // 258
! 	{ "environment", ENVIRONMENT_DIV }, // 259
! 	{ "procedure", PROCEDURE_DIV }, // 260
! 	{ "data", DATA_DIV }, // 261
! 	{ "file", FILE_SECT }, // 262
! 	{ "input-output", INPUT_OUTPUT_SECT }, // 263
! 	{ "linkage", LINKAGE_SECT }, // 264
! 	{ "local-storage", LOCAL_STORAGE_SECT }, // 265
! 	{ "working-storage", WORKING_STORAGE_SECT }, // 266
! 	{ "object-computer", OBJECT_COMPUTER }, // 267
! 	{ "display-of", DISPLAY_OF }, // 268
! 	{ "end-function", END_FUNCTION }, // 269
! 	{ "end-program", END_PROGRAM }, // 270
! 	{ "end-subprogram", END_SUBPROGRAM }, // 271
! 	{ "justified", JUSTIFIED }, // 272
! 	{ "returning", RETURNING }, // 273
! 	{ "no-condition", NO_CONDITION }, // 274
! 	{ "alnum", ALNUM }, // 275
! 	{ "alphed", ALPHED }, // 276
! 	{ "error", ERROR }, // 277
! 	{ "exception", EXCEPTION }, // 278
! 	{ "size-error", SIZE_ERROR }, // 279
! 	{ "exception-name", EXCEPTION_NAME }, // 280
! 	{ "level", LEVEL }, // 281
! 	{ "level66", LEVEL66 }, // 282
! 	{ "level78", LEVEL78 }, // 283
! 	{ "level88", LEVEL88 }, // 284
! 	{ "class-name", CLASS_NAME }, // 285
! 	{ "name", NAME }, // 286
! 	{ "name88", NAME88 }, // 287
! 	{ "nume", NUME }, // 288
! 	{ "numed", NUMED }, // 289
! 	{ "numed-cr", NUMED_CR }, // 290
! 	{ "numed-db", NUMED_DB }, // 291
! 	{ "ninedot", NINEDOT }, // 292
! 	{ "nines", NINES }, // 293
! 	{ "ninev", NINEV }, // 294
! 	{ "pic-p", PIC_P }, // 295
! 	{ "ones", ONES }, // 296
! 	{ "spaces", SPACES }, // 297
! 	{ "space", SPACES }, // 297
! 	{ "literal", LITERAL }, // 298
! 	{ "end", END }, // 299
! 	{ "eop", EOP }, // 300
! 	{ "filename", FILENAME }, // 301
! 	{ "invalid", INVALID }, // 302
! 	{ "number", NUMBER }, // 303
! 	{ "negative", NEGATIVE }, // 304
! 	{ "numstr", NUMSTR }, // 305
! 	{ "overflow", OVERFLOW_kw }, // 306
! 	{ "binary-integer", BINARY_INTEGER }, // 307
! 	{ "computational", COMPUTATIONAL }, // 308
! 	{ "perform", PERFORM }, // 309
! 	{ "backward", BACKWARD }, // 310
! 	{ "positive", POSITIVE }, // 311
! 	{ "pointer", POINTER }, // 312
! 	{ "section", SECTION }, // 313
! 	{ "standard-alphabet", STANDARD_ALPHABET }, // 314
! 	{ "switch", SWITCH }, // 315
! 	{ "upsi", UPSI }, // 316
! 	{ "zero", ZERO }, // 317
! 	{ "zeros", ZERO }, // 317
! 	{ "zeroes", ZERO }, // 317
! 	{ "sysin", SYSIN }, // 318
! 	{ "sysipt", SYSIPT }, // 319
! 	{ "sysout", SYSOUT }, // 320
! 	{ "syslist", SYSLIST }, // 321
! 	{ "syslst", SYSLST }, // 322
! 	{ "syspunch", SYSPUNCH }, // 323
! 	{ "syspch", SYSPCH }, // 324
! 	{ "console", CONSOLE }, // 325
! 	{ "c01", C01 }, // 326
! 	{ "c02", C02 }, // 327
! 	{ "c03", C03 }, // 328
! 	{ "c04", C04 }, // 329
! 	{ "c05", C05 }, // 330
! 	{ "c06", C06 }, // 331
! 	{ "c07", C07 }, // 332
! 	{ "c08", C08 }, // 333
! 	{ "c09", C09 }, // 334
! 	{ "c10", C10 }, // 335
! 	{ "c11", C11 }, // 336
! 	{ "c12", C12 }, // 337
! 	{ "csp", CSP }, // 338
! 	{ "s01", S01 }, // 339
! 	{ "s02", S02 }, // 340
! 	{ "s03", S03 }, // 341
! 	{ "s04", S04 }, // 342
! 	{ "s05", S05 }, // 343
! 	{ "afp-5a", AFP_5A }, // 344
! 	{ "stdin", STDIN }, // 345
! 	{ "stdout", STDOUT }, // 346
! 	{ "stderr", STDERR }, // 347
! 	{ "list", LIST }, // 348
! 	{ "map", MAP }, // 349
! 	{ "nolist", NOLIST }, // 350
! 	{ "nomap", NOMAP }, // 351
! 	{ "nosource", NOSOURCE }, // 352
! 	{ "might-be", MIGHT_BE }, // 353
! 	{ "function-udf", FUNCTION_UDF }, // 354
! 	{ "function-udf-0", FUNCTION_UDF_0 }, // 355
! 	{ "date-fmt", DATE_FMT }, // 356
! 	{ "time-fmt", TIME_FMT }, // 357
! 	{ "datetime-fmt", DATETIME_FMT }, // 358
! 	{ "basis", BASIS }, // 359
! 	{ "cbl", CBL }, // 360
! 	{ "constant", CONSTANT }, // 361
! 	{ "copy", COPY }, // 362
! 	{ "defined", DEFINED }, // 363
! 	{ "enter", ENTER }, // 364
! 	{ "feature", FEATURE }, // 365
! 	{ "insertt", INSERTT }, // 366
! 	{ "lsub", LSUB }, // 367
! 	{ "parameter", PARAMETER_kw }, // 368
! 	{ "override", OVERRIDE }, // 369
! 	{ "ready", READY }, // 370
! 	{ "reset", RESET }, // 371
! 	{ "rsub", RSUB }, // 372
! 	{ "service-reload", SERVICE_RELOAD }, // 373
! 	{ "star-cbl", STAR_CBL }, // 374
! 	{ "subscript", SUBSCRIPT }, // 375
! 	{ "suppress", SUPPRESS }, // 376
! 	{ "title", TITLE }, // 377
! 	{ "trace", TRACE }, // 378
! 	{ "use", USE }, // 379
! 	{ "cobol-words", COBOL_WORDS }, // 380
! 	{ "equate", EQUATE }, // 381
! 	{ "undefine", UNDEFINE }, // 382
! 	{ "cdf-define", CDF_DEFINE }, // 383
! 	{ "cdf-display", CDF_DISPLAY }, // 384
! 	{ "cdf-if", CDF_IF }, // 385
! 	{ "cdf-else", CDF_ELSE }, // 386
! 	{ "cdf-end-if", CDF_END_IF }, // 387
! 	{ "cdf-evaluate", CDF_EVALUATE }, // 388
! 	{ "cdf-when", CDF_WHEN }, // 389
! 	{ "cdf-end-evaluate", CDF_END_EVALUATE }, // 390
! 	{ "call-cobol", CALL_COBOL }, // 391
! 	{ "call-verbatim", CALL_VERBATIM }, // 392
! 	{ "if", IF }, // 393
! 	{ "then", THEN }, // 394
! 	{ "else", ELSE }, // 395
! 	{ "sentence", SENTENCE }, // 396
! 	{ "accept", ACCEPT }, // 397
! 	{ "add", ADD }, // 398
! 	{ "alter", ALTER }, // 399
! 	{ "call", CALL }, // 400
! 	{ "cancel", CANCEL }, // 401
! 	{ "close", CLOSE }, // 402
! 	{ "compute", COMPUTE }, // 403
! 	{ "continue", CONTINUE }, // 404
! 	{ "delete", DELETE }, // 405
! 	{ "display", DISPLAY }, // 406
! 	{ "divide", DIVIDE }, // 407
! 	{ "evaluate", EVALUATE }, // 408
! 	{ "exit", EXIT }, // 409
! 	{ "filler", FILLER_kw }, // 410
! 	{ "goback", GOBACK }, // 411
! 	{ "goto", GOTO }, // 412
! 	{ "initialize", INITIALIZE }, // 413
! 	{ "inspect", INSPECT }, // 414
! 	{ "merge", MERGE }, // 415
! 	{ "move", MOVE }, // 416
! 	{ "multiply", MULTIPLY }, // 417
! 	{ "open", OPEN }, // 418
! 	{ "paragraph", PARAGRAPH }, // 419
! 	{ "read", READ }, // 420
! 	{ "release", RELEASE }, // 421
! 	{ "return", RETURN }, // 422
! 	{ "rewrite", REWRITE }, // 423
! 	{ "search", SEARCH }, // 424
! 	{ "set", SET }, // 425
! 	{ "select", SELECT }, // 426
! 	{ "sort", SORT }, // 427
! 	{ "sort-merge", SORT_MERGE }, // 428
! 	{ "string", STRING_kw }, // 429
! 	{ "stop", STOP }, // 430
! 	{ "subtract", SUBTRACT }, // 431
! 	{ "start", START }, // 432
! 	{ "unstring", UNSTRING }, // 433
! 	{ "write", WRITE }, // 434
! 	{ "when", WHEN }, // 435
! 	{ "abs", ABS }, // 436
! 	{ "access", ACCESS }, // 437
! 	{ "acos", ACOS }, // 438
! 	{ "actual", ACTUAL }, // 439
! 	{ "advancing", ADVANCING }, // 440
! 	{ "after", AFTER }, // 441
! 	{ "all", ALL }, // 442
! 	{ "allocate", ALLOCATE }, // 443
! 	{ "alphabet", ALPHABET }, // 444
! 	{ "alphabetic", ALPHABETIC }, // 445
! 	{ "alphabetic-lower", ALPHABETIC_LOWER }, // 446
! 	{ "alphabetic-upper", ALPHABETIC_UPPER }, // 447
! 	{ "alphanumeric", ALPHANUMERIC }, // 448
! 	{ "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 449
! 	{ "also", ALSO }, // 450
! 	{ "alternate", ALTERNATE }, // 451
! 	{ "annuity", ANNUITY }, // 452
! 	{ "anum", ANUM }, // 453
! 	{ "any", ANY }, // 454
! 	{ "anycase", ANYCASE }, // 455
! 	{ "apply", APPLY }, // 456
! 	{ "are", ARE }, // 457
! 	{ "area", AREA }, // 458
! 	{ "areas", AREAS }, // 459
! 	{ "as", AS }, // 460
! 	{ "ascending", ASCENDING }, // 461
! 	{ "activating", ACTIVATING }, // 462
! 	{ "asin", ASIN }, // 463
! 	{ "assign", ASSIGN }, // 464
! 	{ "at", AT }, // 465
! 	{ "atan", ATAN }, // 466
! 	{ "based", BASED }, // 467
! 	{ "baseconvert", BASECONVERT }, // 468
! 	{ "before", BEFORE }, // 469
! 	{ "binary", BINARY }, // 470
! 	{ "bit", BIT }, // 471
! 	{ "bit-of", BIT_OF }, // 472
! 	{ "bit-to-char", BIT_TO_CHAR }, // 473
! 	{ "blank", BLANK }, // 474
! 	{ "block", BLOCK_kw }, // 475
! 	{ "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 476
! 	{ "bottom", BOTTOM }, // 477
! 	{ "by", BY }, // 478
! 	{ "byte", BYTE }, // 479
! 	{ "byte-length", BYTE_LENGTH }, // 480
! 	{ "cf", CF }, // 481
! 	{ "ch", CH }, // 482
! 	{ "changed", CHANGED }, // 483
! 	{ "char", CHAR }, // 484
! 	{ "char-national", CHAR_NATIONAL }, // 485
! 	{ "character", CHARACTER }, // 486
! 	{ "characters", CHARACTERS }, // 487
! 	{ "checking", CHECKING }, // 488
! 	{ "class", CLASS }, // 489
! 	{ "cobol", COBOL }, // 490
! 	{ "code", CODE }, // 491
! 	{ "code-set", CODESET }, // 492
! 	{ "collating", COLLATING }, // 493
! 	{ "column", COLUMN }, // 494
! 	{ "combined-datetime", COMBINED_DATETIME }, // 495
! 	{ "comma", COMMA }, // 496
! 	{ "command-line", COMMAND_LINE }, // 497
! 	{ "command-line-count", COMMAND_LINE_COUNT }, // 498
! 	{ "commit", COMMIT }, // 499
! 	{ "common", COMMON }, // 500
! 	{ "concat", CONCAT }, // 501
! 	{ "condition", CONDITION }, // 502
! 	{ "configuration", CONFIGURATION_SECT }, // 503
! 	{ "contains", CONTAINS }, // 504
! 	{ "content", CONTENT }, // 505
! 	{ "control", CONTROL }, // 506
! 	{ "controls", CONTROLS }, // 507
! 	{ "convert", CONVERT }, // 508
! 	{ "converting", CONVERTING }, // 509
! 	{ "corresponding", CORRESPONDING }, // 510
! 	{ "cos", COS }, // 511
! 	{ "count", COUNT }, // 512
! 	{ "currency", CURRENCY }, // 513
! 	{ "current", CURRENT }, // 514
! 	{ "current-date", CURRENT_DATE }, // 515
! 	{ "data", DATA }, // 516
! 	{ "date", DATE }, // 517
! 	{ "date-compiled", DATE_COMPILED }, // 518
! 	{ "date-of-integer", DATE_OF_INTEGER }, // 519
! 	{ "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 520
! 	{ "date-written", DATE_WRITTEN }, // 521
! 	{ "day", DAY }, // 522
! 	{ "day-of-integer", DAY_OF_INTEGER }, // 523
! 	{ "day-of-week", DAY_OF_WEEK }, // 524
! 	{ "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 525
! 	{ "dbcs", DBCS }, // 526
! 	{ "de", DE }, // 527
! 	{ "debugging", DEBUGGING }, // 528
! 	{ "decimal-point", DECIMAL_POINT }, // 529
! 	{ "declaratives", DECLARATIVES }, // 530
! 	{ "default", DEFAULT }, // 531
! 	{ "delimited", DELIMITED }, // 532
! 	{ "delimiter", DELIMITER }, // 533
! 	{ "depending", DEPENDING }, // 534
! 	{ "descending", DESCENDING }, // 535
! 	{ "detail", DETAIL }, // 536
! 	{ "direct", DIRECT }, // 537
! 	{ "direct-access", DIRECT_ACCESS }, // 538
! 	{ "down", DOWN }, // 539
! 	{ "duplicates", DUPLICATES }, // 540
! 	{ "dynamic", DYNAMIC }, // 541
! 	{ "e", E }, // 542
! 	{ "ebcdic", EBCDIC }, // 543
! 	{ "ec", EC }, // 544
! 	{ "egcs", EGCS }, // 545
! 	{ "entry", ENTRY }, // 546
! 	{ "environment", ENVIRONMENT }, // 547
! 	{ "equal", EQUAL }, // 548
! 	{ "every", EVERY }, // 549
! 	{ "examine", EXAMINE }, // 550
! 	{ "exhibit", EXHIBIT }, // 551
! 	{ "exp", EXP }, // 552
! 	{ "exp10", EXP10 }, // 553
! 	{ "extend", EXTEND }, // 554
! 	{ "external", EXTERNAL }, // 555
! 	{ "exception-file", EXCEPTION_FILE }, // 556
! 	{ "exception-file-n", EXCEPTION_FILE_N }, // 557
! 	{ "exception-location", EXCEPTION_LOCATION }, // 558
! 	{ "exception-location-n", EXCEPTION_LOCATION_N }, // 559
! 	{ "exception-statement", EXCEPTION_STATEMENT }, // 560
! 	{ "exception-status", EXCEPTION_STATUS }, // 561
! 	{ "factorial", FACTORIAL }, // 562
! 	{ "false", FALSE_kw }, // 563
! 	{ "fd", FD }, // 564
! 	{ "file-control", FILE_CONTROL }, // 565
! 	{ "file", FILE_KW }, // 566
! 	{ "file-limit", FILE_LIMIT }, // 567
! 	{ "final", FINAL }, // 568
! 	{ "finally", FINALLY }, // 569
! 	{ "find-string", FIND_STRING }, // 570
! 	{ "first", FIRST }, // 571
! 	{ "fixed", FIXED }, // 572
! 	{ "footing", FOOTING }, // 573
! 	{ "for", FOR }, // 574
! 	{ "formatted-current-date", FORMATTED_CURRENT_DATE }, // 575
! 	{ "formatted-date", FORMATTED_DATE }, // 576
! 	{ "formatted-datetime", FORMATTED_DATETIME }, // 577
! 	{ "formatted-time", FORMATTED_TIME }, // 578
! 	{ "form-overflow", FORM_OVERFLOW }, // 579
! 	{ "free", FREE }, // 580
! 	{ "fraction-part", FRACTION_PART }, // 581
! 	{ "from", FROM }, // 582
! 	{ "function", FUNCTION }, // 583
! 	{ "generate", GENERATE }, // 584
! 	{ "giving", GIVING }, // 585
! 	{ "global", GLOBAL }, // 586
! 	{ "go", GO }, // 587
! 	{ "group", GROUP }, // 588
! 	{ "heading", HEADING }, // 589
! 	{ "hex", HEX }, // 590
! 	{ "hex-of", HEX_OF }, // 591
! 	{ "hex-to-char", HEX_TO_CHAR }, // 592
! 	{ "high-values", HIGH_VALUES }, // 593
! 	{ "highest-algebraic", HIGHEST_ALGEBRAIC }, // 594
! 	{ "hold", HOLD }, // 595
! 	{ "ibm-360", IBM_360 }, // 596
! 	{ "in", IN }, // 597
! 	{ "include", INCLUDE }, // 598
! 	{ "index", INDEX }, // 599
! 	{ "indexed", INDEXED }, // 600
! 	{ "indicate", INDICATE }, // 601
! 	{ "initial", INITIAL_kw }, // 602
! 	{ "initiate", INITIATE }, // 603
! 	{ "input", INPUT }, // 604
! 	{ "installation", INSTALLATION }, // 605
! 	{ "interface", INTERFACE }, // 606
! 	{ "integer", INTEGER }, // 607
! 	{ "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 608
! 	{ "integer-of-date", INTEGER_OF_DATE }, // 609
! 	{ "integer-of-day", INTEGER_OF_DAY }, // 610
! 	{ "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 611
! 	{ "integer-part", INTEGER_PART }, // 612
! 	{ "into", INTO }, // 613
! 	{ "intrinsic", INTRINSIC }, // 614
! 	{ "invoke", INVOKE }, // 615
! 	{ "i-o", IO }, // 616
! 	{ "i-o-control", IO_CONTROL }, // 617
! 	{ "is", IS }, // 618
! 	{ "isnt", ISNT }, // 619
! 	{ "kanji", KANJI }, // 620
! 	{ "key", KEY }, // 621
! 	{ "label", LABEL }, // 622
! 	{ "last", LAST }, // 623
! 	{ "leading", LEADING }, // 624
! 	{ "left", LEFT }, // 625
! 	{ "length", LENGTH }, // 626
! 	{ "length-of", LENGTH_OF }, // 627
! 	{ "limit", LIMIT }, // 628
! 	{ "limits", LIMITS }, // 629
! 	{ "line", LINE }, // 630
! 	{ "lines", LINES }, // 631
! 	{ "line-counter", LINE_COUNTER }, // 632
! 	{ "linage", LINAGE }, // 633
! 	{ "linkage", LINKAGE }, // 634
! 	{ "locale", LOCALE }, // 635
! 	{ "locale-compare", LOCALE_COMPARE }, // 636
! 	{ "locale-date", LOCALE_DATE }, // 637
! 	{ "locale-time", LOCALE_TIME }, // 638
! 	{ "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 639
! 	{ "local-storage", LOCAL_STORAGE }, // 640
! 	{ "location", LOCATION }, // 641
! 	{ "lock", LOCK }, // 642
! 	{ "lock-on", LOCK_ON }, // 643
! 	{ "log", LOG }, // 644
! 	{ "log10", LOG10 }, // 645
! 	{ "lower-case", LOWER_CASE }, // 646
! 	{ "low-values", LOW_VALUES }, // 647
! 	{ "lowest-algebraic", LOWEST_ALGEBRAIC }, // 648
! 	{ "lparen", LPAREN }, // 649
! 	{ "manual", MANUAL }, // 650
! 	{ "maxx", MAXX }, // 651
! 	{ "mean", MEAN }, // 652
! 	{ "median", MEDIAN }, // 653
! 	{ "midrange", MIDRANGE }, // 654
! 	{ "minn", MINN }, // 655
! 	{ "multiple", MULTIPLE }, // 656
! 	{ "mod", MOD }, // 657
! 	{ "mode", MODE }, // 658
! 	{ "module-name", MODULE_NAME }, // 659
! 	{ "named", NAMED }, // 660
! 	{ "nat", NAT }, // 661
! 	{ "national", NATIONAL }, // 662
! 	{ "national-edited", NATIONAL_EDITED }, // 663
! 	{ "national-of", NATIONAL_OF }, // 664
! 	{ "native", NATIVE }, // 665
! 	{ "nested", NESTED }, // 666
! 	{ "next", NEXT }, // 667
! 	{ "no", NO }, // 668
! 	{ "note", NOTE }, // 669
! 	{ "nulls", NULLS }, // 670
! 	{ "null", NULLS }, // 670
! 	{ "nullptr", NULLPTR }, // 671
! 	{ "numeric", NUMERIC }, // 672
! 	{ "numeric-edited", NUMERIC_EDITED }, // 673
! 	{ "numval", NUMVAL }, // 674
! 	{ "numval-c", NUMVAL_C }, // 675
! 	{ "numval-f", NUMVAL_F }, // 676
! 	{ "occurs", OCCURS }, // 677
! 	{ "of", OF }, // 678
! 	{ "off", OFF }, // 679
! 	{ "omitted", OMITTED }, // 680
! 	{ "on", ON }, // 681
! 	{ "only", ONLY }, // 682
! 	{ "optional", OPTIONAL }, // 683
! 	{ "options", OPTIONS }, // 684
! 	{ "ord", ORD }, // 685
! 	{ "order", ORDER }, // 686
! 	{ "ord-max", ORD_MAX }, // 687
! 	{ "ord-min", ORD_MIN }, // 688
! 	{ "organization", ORGANIZATION }, // 689
! 	{ "other", OTHER }, // 690
! 	{ "otherwise", OTHERWISE }, // 691
! 	{ "output", OUTPUT }, // 692
! 	{ "packed-decimal", PACKED_DECIMAL }, // 693
! 	{ "padding", PADDING }, // 694
! 	{ "page", PAGE }, // 695
! 	{ "page-counter", PAGE_COUNTER }, // 696
! 	{ "pf", PF }, // 697
! 	{ "ph", PH }, // 698
! 	{ "pi", PI }, // 699
! 	{ "pic", PIC }, // 700
! 	{ "picture", PICTURE }, // 701
! 	{ "plus", PLUS }, // 702
! 	{ "present-value", PRESENT_VALUE }, // 703
! 	{ "print-switch", PRINT_SWITCH }, // 704
! 	{ "procedure", PROCEDURE }, // 705
! 	{ "procedures", PROCEDURES }, // 706
! 	{ "proceed", PROCEED }, // 707
! 	{ "process", PROCESS }, // 708
! 	{ "program-id", PROGRAM_ID }, // 709
! 	{ "program", PROGRAM_kw }, // 710
! 	{ "property", PROPERTY }, // 711
! 	{ "prototype", PROTOTYPE }, // 712
! 	{ "pseudotext", PSEUDOTEXT }, // 713
! 	{ "quotes", QUOTES }, // 714
! 	{ "quote", QUOTES }, // 714
! 	{ "random", RANDOM }, // 715
! 	{ "random-seed", RANDOM_SEED }, // 716
! 	{ "range", RANGE }, // 717
! 	{ "raise", RAISE }, // 718
! 	{ "raising", RAISING }, // 719
! 	{ "rd", RD }, // 720
! 	{ "record", RECORD }, // 721
! 	{ "recording", RECORDING }, // 722
! 	{ "records", RECORDS }, // 723
! 	{ "recursive", RECURSIVE }, // 724
! 	{ "redefines", REDEFINES }, // 725
! 	{ "reel", REEL }, // 726
! 	{ "reference", REFERENCE }, // 727
! 	{ "relative", RELATIVE }, // 728
! 	{ "rem", REM }, // 729
! 	{ "remainder", REMAINDER }, // 730
! 	{ "remarks", REMARKS }, // 731
! 	{ "removal", REMOVAL }, // 732
! 	{ "renames", RENAMES }, // 733
! 	{ "replace", REPLACE }, // 734
! 	{ "replacing", REPLACING }, // 735
! 	{ "report", REPORT }, // 736
! 	{ "reporting", REPORTING }, // 737
! 	{ "reports", REPORTS }, // 738
! 	{ "repository", REPOSITORY }, // 739
! 	{ "rerun", RERUN }, // 740
! 	{ "reserve", RESERVE }, // 741
! 	{ "restricted", RESTRICTED }, // 742
! 	{ "resume", RESUME }, // 743
! 	{ "reverse", REVERSE }, // 744
! 	{ "reversed", REVERSED }, // 745
! 	{ "rewind", REWIND }, // 746
! 	{ "rf", RF }, // 747
! 	{ "rh", RH }, // 748
! 	{ "right", RIGHT }, // 749
! 	{ "rounded", ROUNDED }, // 750
! 	{ "run", RUN }, // 751
! 	{ "same", SAME }, // 752
! 	{ "screen", SCREEN }, // 753
! 	{ "sd", SD }, // 754
! 	{ "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 755
! 	{ "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 756
! 	{ "security", SECURITY }, // 757
! 	{ "separate", SEPARATE }, // 758
! 	{ "sequence", SEQUENCE }, // 759
! 	{ "sequential", SEQUENTIAL }, // 760
! 	{ "sharing", SHARING }, // 761
! 	{ "simple-exit", SIMPLE_EXIT }, // 762
! 	{ "sign", SIGN }, // 763
! 	{ "sin", SIN }, // 764
! 	{ "size", SIZE }, // 765
! 	{ "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 766
! 	{ "source", SOURCE }, // 767
! 	{ "source-computer", SOURCE_COMPUTER }, // 768
! 	{ "special-names", SPECIAL_NAMES }, // 769
! 	{ "sqrt", SQRT }, // 770
! 	{ "stack", STACK }, // 771
! 	{ "standard", STANDARD }, // 772
! 	{ "standard-1", STANDARD_1 }, // 773
! 	{ "standard-deviation", STANDARD_DEVIATION }, // 774
! 	{ "standard-compare", STANDARD_COMPARE }, // 775
! 	{ "status", STATUS }, // 776
! 	{ "strong", STRONG }, // 777
! 	{ "substitute", SUBSTITUTE }, // 778
! 	{ "sum", SUM }, // 779
! 	{ "symbol", SYMBOL }, // 780
! 	{ "symbolic", SYMBOLIC }, // 781
! 	{ "synchronized", SYNCHRONIZED }, // 782
! 	{ "tally", TALLY }, // 783
! 	{ "tallying", TALLYING }, // 784
! 	{ "tan", TAN }, // 785
! 	{ "terminate", TERMINATE }, // 786
! 	{ "test", TEST }, // 787
! 	{ "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 788
! 	{ "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 789
! 	{ "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 790
! 	{ "test-numval", TEST_NUMVAL }, // 791
! 	{ "test-numval-c", TEST_NUMVAL_C }, // 792
! 	{ "test-numval-f", TEST_NUMVAL_F }, // 793
! 	{ "than", THAN }, // 794
! 	{ "time", TIME }, // 795
! 	{ "times", TIMES }, // 796
! 	{ "to", TO }, // 797
! 	{ "top", TOP }, // 798
! 	{ "top-level", TOP_LEVEL }, // 799
! 	{ "tracks", TRACKS }, // 800
! 	{ "track-area", TRACK_AREA }, // 801
! 	{ "trailing", TRAILING }, // 802
! 	{ "transform", TRANSFORM }, // 803
! 	{ "trim", TRIM }, // 804
! 	{ "true", TRUE_kw }, // 805
! 	{ "try", TRY }, // 806
! 	{ "turn", TURN }, // 807
! 	{ "type", TYPE }, // 808
! 	{ "typedef", TYPEDEF }, // 809
! 	{ "ulength", ULENGTH }, // 810
! 	{ "unbounded", UNBOUNDED }, // 811
! 	{ "unit", UNIT }, // 812
! 	{ "units", UNITS }, // 813
! 	{ "unit-record", UNIT_RECORD }, // 814
! 	{ "until", UNTIL }, // 815
! 	{ "up", UP }, // 816
! 	{ "upon", UPON }, // 817
! 	{ "upos", UPOS }, // 818
! 	{ "upper-case", UPPER_CASE }, // 819
! 	{ "usage", USAGE }, // 820
! 	{ "using", USING }, // 821
! 	{ "usubstr", USUBSTR }, // 822
! 	{ "usupplementary", USUPPLEMENTARY }, // 823
! 	{ "utility", UTILITY }, // 824
! 	{ "uuid4", UUID4 }, // 825
! 	{ "uvalid", UVALID }, // 826
! 	{ "uwidth", UWIDTH }, // 827
! 	{ "value", VALUE }, // 828
! 	{ "variance", VARIANCE }, // 829
! 	{ "varying", VARYING }, // 830
! 	{ "volatile", VOLATILE }, // 831
! 	{ "when-compiled", WHEN_COMPILED }, // 832
! 	{ "with", WITH }, // 833
! 	{ "working-storage", WORKING_STORAGE }, // 834
! 	{ "xml", XML }, // 835
! 	{ "xmlgenerate", XMLGENERATE }, // 836
! 	{ "xmlparse", XMLPARSE }, // 837
! 	{ "year-to-yyyy", YEAR_TO_YYYY }, // 838
! 	{ "yyyyddd", YYYYDDD }, // 839
! 	{ "yyyymmdd", YYYYMMDD }, // 840
! 	{ "arithmetic", ARITHMETIC }, // 841
! 	{ "attribute", ATTRIBUTE }, // 842
! 	{ "auto", AUTO }, // 843
! 	{ "automatic", AUTOMATIC }, // 844
! 	{ "away-from-zero", AWAY_FROM_ZERO }, // 845
! 	{ "background-color", BACKGROUND_COLOR }, // 846
! 	{ "bell", BELL }, // 847
! 	{ "binary-encoding", BINARY_ENCODING }, // 848
! 	{ "blink", BLINK }, // 849
! 	{ "capacity", CAPACITY }, // 850
! 	{ "center", CENTER }, // 851
! 	{ "classification", CLASSIFICATION }, // 852
! 	{ "cycle", CYCLE }, // 853
! 	{ "decimal-encoding", DECIMAL_ENCODING }, // 854
! 	{ "entry-convention", ENTRY_CONVENTION }, // 855
! 	{ "eol", EOL }, // 856
! 	{ "eos", EOS }, // 857
! 	{ "erase", ERASE }, // 858
! 	{ "expands", EXPANDS }, // 859
! 	{ "float-binary", FLOAT_BINARY }, // 860
! 	{ "float-decimal", FLOAT_DECIMAL }, // 861
! 	{ "foreground-color", FOREGROUND_COLOR }, // 862
! 	{ "forever", FOREVER }, // 863
! 	{ "full", FULL }, // 864
! 	{ "highlight", HIGHLIGHT }, // 865
! 	{ "high-order-left", HIGH_ORDER_LEFT }, // 866
! 	{ "high-order-right", HIGH_ORDER_RIGHT }, // 867
! 	{ "ignoring", IGNORING }, // 868
! 	{ "implements", IMPLEMENTS }, // 869
! 	{ "initialized", INITIALIZED }, // 870
! 	{ "intermediate", INTERMEDIATE }, // 871
! 	{ "lc-all", LC_ALL_kw }, // 872
! 	{ "lc-collate", LC_COLLATE_kw }, // 873
! 	{ "lc-ctype", LC_CTYPE_kw }, // 874
! 	{ "lc-messages", LC_MESSAGES_kw }, // 875
! 	{ "lc-monetary", LC_MONETARY_kw }, // 876
! 	{ "lc-numeric", LC_NUMERIC_kw }, // 877
! 	{ "lc-time", LC_TIME_kw }, // 878
! 	{ "lowlight", LOWLIGHT }, // 879
! 	{ "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 880
! 	{ "nearest-even", NEAREST_EVEN }, // 881
! 	{ "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 882
! 	{ "none", NONE }, // 883
! 	{ "normal", NORMAL }, // 884
! 	{ "numbers", NUMBERS }, // 885
! 	{ "prefixed", PREFIXED }, // 886
! 	{ "previous", PREVIOUS }, // 887
! 	{ "prohibited", PROHIBITED }, // 888
! 	{ "relation", RELATION }, // 889
! 	{ "required", REQUIRED }, // 890
! 	{ "reverse-video", REVERSE_VIDEO }, // 891
! 	{ "rounding", ROUNDING }, // 892
! 	{ "seconds", SECONDS }, // 893
! 	{ "secure", SECURE }, // 894
! 	{ "short", SHORT }, // 895
! 	{ "signed", SIGNED_kw }, // 896
! 	{ "standard-binary", STANDARD_BINARY }, // 897
! 	{ "standard-decimal", STANDARD_DECIMAL }, // 898
! 	{ "statement", STATEMENT }, // 899
! 	{ "step", STEP }, // 900
! 	{ "structure", STRUCTURE }, // 901
! 	{ "toward-greater", TOWARD_GREATER }, // 902
! 	{ "toward-lesser", TOWARD_LESSER }, // 903
! 	{ "truncation", TRUNCATION }, // 904
! 	{ "ucs-4", UCS_4 }, // 905
! 	{ "underline", UNDERLINE }, // 906
! 	{ "unsigned", UNSIGNED_kw }, // 907
! 	{ "utf-16", UTF_16 }, // 908
! 	{ "utf-8", UTF_8 }, // 909
! 	{ "address", ADDRESS }, // 910
! 	{ "end-accept", END_ACCEPT }, // 911
! 	{ "end-add", END_ADD }, // 912
! 	{ "end-call", END_CALL }, // 913
! 	{ "end-compute", END_COMPUTE }, // 914
! 	{ "end-delete", END_DELETE }, // 915
! 	{ "end-display", END_DISPLAY }, // 916
! 	{ "end-divide", END_DIVIDE }, // 917
! 	{ "end-evaluate", END_EVALUATE }, // 918
! 	{ "end-multiply", END_MULTIPLY }, // 919
! 	{ "end-perform", END_PERFORM }, // 920
! 	{ "end-read", END_READ }, // 921
! 	{ "end-return", END_RETURN }, // 922
! 	{ "end-rewrite", END_REWRITE }, // 923
! 	{ "end-search", END_SEARCH }, // 924
! 	{ "end-start", END_START }, // 925
! 	{ "end-string", END_STRING }, // 926
! 	{ "end-subtract", END_SUBTRACT }, // 927
! 	{ "end-unstring", END_UNSTRING }, // 928
! 	{ "end-write", END_WRITE }, // 929
! 	{ "end-if", END_IF }, // 930
! 	{ "thru", THRU }, // 931
! 	{ "through", THRU }, // 931
! 	{ "or", OR }, // 932
! 	{ "and", AND }, // 933
! 	{ "not", NOT }, // 934
! 	{ "ne", NE }, // 935
! 	{ "le", LE }, // 936
! 	{ "ge", GE }, // 937
! 	{ "pow", POW }, // 938
! 	{ "neg", NEG }, // 939
  };
  
  token_names = {
! 	"IDENTIFICATION", // 0 (258)
! 	"ENVIRONMENT", // 1 (259)
! 	"PROCEDURE", // 2 (260)
! 	"DATA", // 3 (261)
! 	"FILE", // 4 (262)
! 	"INPUT-OUTPUT", // 5 (263)
! 	"LINKAGE", // 6 (264)
! 	"LOCAL-STORAGE", // 7 (265)
! 	"WORKING-STORAGE", // 8 (266)
! 	"OBJECT-COMPUTER", // 9 (267)
! 	"DISPLAY-OF", // 10 (268)
! 	"END-FUNCTION", // 11 (269)
! 	"END-PROGRAM", // 12 (270)
! 	"END-SUBPROGRAM", // 13 (271)
! 	"JUSTIFIED", // 14 (272)
! 	"RETURNING", // 15 (273)
! 	"NO-CONDITION", // 16 (274)
! 	"ALNUM", // 17 (275)
! 	"ALPHED", // 18 (276)
! 	"ERROR", // 19 (277)
! 	"EXCEPTION", // 20 (278)
! 	"SIZE-ERROR", // 21 (279)
! 	"EXCEPTION-NAME", // 22 (280)
! 	"LEVEL", // 23 (281)
! 	"LEVEL66", // 24 (282)
! 	"LEVEL78", // 25 (283)
! 	"LEVEL88", // 26 (284)
! 	"CLASS-NAME", // 27 (285)
! 	"NAME", // 28 (286)
! 	"NAME88", // 29 (287)
! 	"NUME", // 30 (288)
! 	"NUMED", // 31 (289)
! 	"NUMED-CR", // 32 (290)
! 	"NUMED-DB", // 33 (291)
! 	"NINEDOT", // 34 (292)
! 	"NINES", // 35 (293)
! 	"NINEV", // 36 (294)
! 	"PIC-P", // 37 (295)
! 	"ONES", // 38 (296)
! 	"SPACES", // 39 (297)
! 	"LITERAL", // 40 (298)
! 	"END", // 41 (299)
! 	"EOP", // 42 (300)
! 	"FILENAME", // 43 (301)
! 	"INVALID", // 44 (302)
! 	"NUMBER", // 45 (303)
! 	"NEGATIVE", // 46 (304)
! 	"NUMSTR", // 47 (305)
! 	"OVERFLOW", // 48 (306)
! 	"BINARY-INTEGER", // 49 (307)
! 	"COMPUTATIONAL", // 50 (308)
! 	"PERFORM", // 51 (309)
! 	"BACKWARD", // 52 (310)
! 	"POSITIVE", // 53 (311)
! 	"POINTER", // 54 (312)
! 	"SECTION", // 55 (313)
! 	"STANDARD-ALPHABET", // 56 (314)
! 	"SWITCH", // 57 (315)
! 	"UPSI", // 58 (316)
! 	"ZERO", // 59 (317)
! 	"SYSIN", // 60 (318)
! 	"SYSIPT", // 61 (319)
! 	"SYSOUT", // 62 (320)
! 	"SYSLIST", // 63 (321)
! 	"SYSLST", // 64 (322)
! 	"SYSPUNCH", // 65 (323)
! 	"SYSPCH", // 66 (324)
! 	"CONSOLE", // 67 (325)
! 	"C01", // 68 (326)
! 	"C02", // 69 (327)
! 	"C03", // 70 (328)
! 	"C04", // 71 (329)
! 	"C05", // 72 (330)
! 	"C06", // 73 (331)
! 	"C07", // 74 (332)
! 	"C08", // 75 (333)
! 	"C09", // 76 (334)
! 	"C10", // 77 (335)
! 	"C11", // 78 (336)
! 	"C12", // 79 (337)
! 	"CSP", // 80 (338)
! 	"S01", // 81 (339)
! 	"S02", // 82 (340)
! 	"S03", // 83 (341)
! 	"S04", // 84 (342)
! 	"S05", // 85 (343)
! 	"AFP-5A", // 86 (344)
! 	"STDIN", // 87 (345)
! 	"STDOUT", // 88 (346)
! 	"STDERR", // 89 (347)
! 	"LIST", // 90 (348)
! 	"MAP", // 91 (349)
! 	"NOLIST", // 92 (350)
! 	"NOMAP", // 93 (351)
! 	"NOSOURCE", // 94 (352)
! 	"MIGHT-BE", // 95 (353)
! 	"FUNCTION-UDF", // 96 (354)
! 	"FUNCTION-UDF-0", // 97 (355)
! 	"DATE-FMT", // 98 (356)
! 	"TIME-FMT", // 99 (357)
! 	"DATETIME-FMT", // 100 (358)
! 	"BASIS", // 101 (359)
! 	"CBL", // 102 (360)
! 	"CONSTANT", // 103 (361)
! 	"COPY", // 104 (362)
! 	"DEFINED", // 105 (363)
! 	"ENTER", // 106 (364)
! 	"FEATURE", // 107 (365)
! 	"INSERTT", // 108 (366)
! 	"LSUB", // 109 (367)
! 	"PARAMETER", // 110 (368)
! 	"OVERRIDE", // 111 (369)
! 	"READY", // 112 (370)
! 	"RESET", // 113 (371)
! 	"RSUB", // 114 (372)
! 	"SERVICE-RELOAD", // 115 (373)
! 	"STAR-CBL", // 116 (374)
! 	"SUBSCRIPT", // 117 (375)
! 	"SUPPRESS", // 118 (376)
! 	"TITLE", // 119 (377)
! 	"TRACE", // 120 (378)
! 	"USE", // 121 (379)
! 	"COBOL-WORDS", // 122 (380)
! 	"EQUATE", // 123 (381)
! 	"UNDEFINE", // 124 (382)
! 	"CDF-DEFINE", // 125 (383)
! 	"CDF-DISPLAY", // 126 (384)
! 	"CDF-IF", // 127 (385)
! 	"CDF-ELSE", // 128 (386)
! 	"CDF-END-IF", // 129 (387)
! 	"CDF-EVALUATE", // 130 (388)
! 	"CDF-WHEN", // 131 (389)
! 	"CDF-END-EVALUATE", // 132 (390)
! 	"CALL-COBOL", // 133 (391)
! 	"CALL-VERBATIM", // 134 (392)
! 	"IF", // 135 (393)
! 	"THEN", // 136 (394)
! 	"ELSE", // 137 (395)
! 	"SENTENCE", // 138 (396)
! 	"ACCEPT", // 139 (397)
! 	"ADD", // 140 (398)
! 	"ALTER", // 141 (399)
! 	"CALL", // 142 (400)
! 	"CANCEL", // 143 (401)
! 	"CLOSE", // 144 (402)
! 	"COMPUTE", // 145 (403)
! 	"CONTINUE", // 146 (404)
! 	"DELETE", // 147 (405)
! 	"DISPLAY", // 148 (406)
! 	"DIVIDE", // 149 (407)
! 	"EVALUATE", // 150 (408)
! 	"EXIT", // 151 (409)
! 	"FILLER", // 152 (410)
! 	"GOBACK", // 153 (411)
! 	"GOTO", // 154 (412)
! 	"INITIALIZE", // 155 (413)
! 	"INSPECT", // 156 (414)
! 	"MERGE", // 157 (415)
! 	"MOVE", // 158 (416)
! 	"MULTIPLY", // 159 (417)
! 	"OPEN", // 160 (418)
! 	"PARAGRAPH", // 161 (419)
! 	"READ", // 162 (420)
! 	"RELEASE", // 163 (421)
! 	"RETURN", // 164 (422)
! 	"REWRITE", // 165 (423)
! 	"SEARCH", // 166 (424)
! 	"SET", // 167 (425)
! 	"SELECT", // 168 (426)
! 	"SORT", // 169 (427)
! 	"SORT-MERGE", // 170 (428)
! 	"STRING", // 171 (429)
! 	"STOP", // 172 (430)
! 	"SUBTRACT", // 173 (431)
! 	"START", // 174 (432)
! 	"UNSTRING", // 175 (433)
! 	"WRITE", // 176 (434)
! 	"WHEN", // 177 (435)
! 	"ABS", // 178 (436)
! 	"ACCESS", // 179 (437)
! 	"ACOS", // 180 (438)
! 	"ACTUAL", // 181 (439)
! 	"ADVANCING", // 182 (440)
! 	"AFTER", // 183 (441)
! 	"ALL", // 184 (442)
! 	"ALLOCATE", // 185 (443)
! 	"ALPHABET", // 186 (444)
! 	"ALPHABETIC", // 187 (445)
! 	"ALPHABETIC-LOWER", // 188 (446)
! 	"ALPHABETIC-UPPER", // 189 (447)
! 	"ALPHANUMERIC", // 190 (448)
! 	"ALPHANUMERIC-EDITED", // 191 (449)
! 	"ALSO", // 192 (450)
! 	"ALTERNATE", // 193 (451)
! 	"ANNUITY", // 194 (452)
! 	"ANUM", // 195 (453)
! 	"ANY", // 196 (454)
! 	"ANYCASE", // 197 (455)
! 	"APPLY", // 198 (456)
! 	"ARE", // 199 (457)
! 	"AREA", // 200 (458)
! 	"AREAS", // 201 (459)
! 	"AS", // 202 (460)
! 	"ASCENDING", // 203 (461)
! 	"ACTIVATING", // 204 (462)
! 	"ASIN", // 205 (463)
! 	"ASSIGN", // 206 (464)
! 	"AT", // 207 (465)
! 	"ATAN", // 208 (466)
! 	"BASED", // 209 (467)
! 	"BASECONVERT", // 210 (468)
! 	"BEFORE", // 211 (469)
! 	"BINARY", // 212 (470)
! 	"BIT", // 213 (471)
! 	"BIT-OF", // 214 (472)
! 	"BIT-TO-CHAR", // 215 (473)
! 	"BLANK", // 216 (474)
! 	"BLOCK", // 217 (475)
! 	"BOOLEAN-OF-INTEGER", // 218 (476)
! 	"BOTTOM", // 219 (477)
! 	"BY", // 220 (478)
! 	"BYTE", // 221 (479)
! 	"BYTE-LENGTH", // 222 (480)
! 	"CF", // 223 (481)
! 	"CH", // 224 (482)
! 	"CHANGED", // 225 (483)
! 	"CHAR", // 226 (484)
! 	"CHAR-NATIONAL", // 227 (485)
! 	"CHARACTER", // 228 (486)
! 	"CHARACTERS", // 229 (487)
! 	"CHECKING", // 230 (488)
! 	"CLASS", // 231 (489)
! 	"COBOL", // 232 (490)
! 	"CODE", // 233 (491)
! 	"CODE-SET", // 234 (492)
! 	"COLLATING", // 235 (493)
! 	"COLUMN", // 236 (494)
! 	"COMBINED-DATETIME", // 237 (495)
! 	"COMMA", // 238 (496)
! 	"COMMAND-LINE", // 239 (497)
! 	"COMMAND-LINE-COUNT", // 240 (498)
! 	"COMMIT", // 241 (499)
! 	"COMMON", // 242 (500)
! 	"CONCAT", // 243 (501)
! 	"CONDITION", // 244 (502)
! 	"CONFIGURATION", // 245 (503)
! 	"CONTAINS", // 246 (504)
! 	"CONTENT", // 247 (505)
! 	"CONTROL", // 248 (506)
! 	"CONTROLS", // 249 (507)
! 	"CONVERT", // 250 (508)
! 	"CONVERTING", // 251 (509)
! 	"CORRESPONDING", // 252 (510)
! 	"COS", // 253 (511)
! 	"COUNT", // 254 (512)
! 	"CURRENCY", // 255 (513)
! 	"CURRENT", // 256 (514)
! 	"CURRENT-DATE", // 257 (515)
! 	"DATA", // 258 (516)
! 	"DATE", // 259 (517)
! 	"DATE-COMPILED", // 260 (518)
! 	"DATE-OF-INTEGER", // 261 (519)
! 	"DATE-TO-YYYYMMDD", // 262 (520)
! 	"DATE-WRITTEN", // 263 (521)
! 	"DAY", // 264 (522)
! 	"DAY-OF-INTEGER", // 265 (523)
! 	"DAY-OF-WEEK", // 266 (524)
! 	"DAY-TO-YYYYDDD", // 267 (525)
! 	"DBCS", // 268 (526)
! 	"DE", // 269 (527)
! 	"DEBUGGING", // 270 (528)
! 	"DECIMAL-POINT", // 271 (529)
! 	"DECLARATIVES", // 272 (530)
! 	"DEFAULT", // 273 (531)
! 	"DELIMITED", // 274 (532)
! 	"DELIMITER", // 275 (533)
! 	"DEPENDING", // 276 (534)
! 	"DESCENDING", // 277 (535)
! 	"DETAIL", // 278 (536)
! 	"DIRECT", // 279 (537)
! 	"DIRECT-ACCESS", // 280 (538)
! 	"DOWN", // 281 (539)
! 	"DUPLICATES", // 282 (540)
! 	"DYNAMIC", // 283 (541)
! 	"E", // 284 (542)
! 	"EBCDIC", // 285 (543)
! 	"EC", // 286 (544)
! 	"EGCS", // 287 (545)
! 	"ENTRY", // 288 (546)
! 	"ENVIRONMENT", // 289 (547)
! 	"EQUAL", // 290 (548)
! 	"EVERY", // 291 (549)
! 	"EXAMINE", // 292 (550)
! 	"EXHIBIT", // 293 (551)
! 	"EXP", // 294 (552)
! 	"EXP10", // 295 (553)
! 	"EXTEND", // 296 (554)
! 	"EXTERNAL", // 297 (555)
! 	"EXCEPTION-FILE", // 298 (556)
! 	"EXCEPTION-FILE-N", // 299 (557)
! 	"EXCEPTION-LOCATION", // 300 (558)
! 	"EXCEPTION-LOCATION-N", // 301 (559)
! 	"EXCEPTION-STATEMENT", // 302 (560)
! 	"EXCEPTION-STATUS", // 303 (561)
! 	"FACTORIAL", // 304 (562)
! 	"FALSE", // 305 (563)
! 	"FD", // 306 (564)
! 	"FILE-CONTROL", // 307 (565)
! 	"FILE", // 308 (566)
! 	"FILE-LIMIT", // 309 (567)
! 	"FINAL", // 310 (568)
! 	"FINALLY", // 311 (569)
! 	"FIND-STRING", // 312 (570)
! 	"FIRST", // 313 (571)
! 	"FIXED", // 314 (572)
! 	"FOOTING", // 315 (573)
! 	"FOR", // 316 (574)
! 	"FORMATTED-CURRENT-DATE", // 317 (575)
! 	"FORMATTED-DATE", // 318 (576)
! 	"FORMATTED-DATETIME", // 319 (577)
! 	"FORMATTED-TIME", // 320 (578)
! 	"FORM-OVERFLOW", // 321 (579)
! 	"FREE", // 322 (580)
! 	"FRACTION-PART", // 323 (581)
! 	"FROM", // 324 (582)
! 	"FUNCTION", // 325 (583)
! 	"GENERATE", // 326 (584)
! 	"GIVING", // 327 (585)
! 	"GLOBAL", // 328 (586)
! 	"GO", // 329 (587)
! 	"GROUP", // 330 (588)
! 	"HEADING", // 331 (589)
! 	"HEX", // 332 (590)
! 	"HEX-OF", // 333 (591)
! 	"HEX-TO-CHAR", // 334 (592)
! 	"HIGH-VALUES", // 335 (593)
! 	"HIGHEST-ALGEBRAIC", // 336 (594)
! 	"HOLD", // 337 (595)
! 	"IBM-360", // 338 (596)
! 	"IN", // 339 (597)
! 	"INCLUDE", // 340 (598)
! 	"INDEX", // 341 (599)
! 	"INDEXED", // 342 (600)
! 	"INDICATE", // 343 (601)
! 	"INITIAL", // 344 (602)
! 	"INITIATE", // 345 (603)
! 	"INPUT", // 346 (604)
! 	"INSTALLATION", // 347 (605)
! 	"INTERFACE", // 348 (606)
! 	"INTEGER", // 349 (607)
! 	"INTEGER-OF-BOOLEAN", // 350 (608)
! 	"INTEGER-OF-DATE", // 351 (609)
! 	"INTEGER-OF-DAY", // 352 (610)
! 	"INTEGER-OF-FORMATTED-DATE", // 353 (611)
! 	"INTEGER-PART", // 354 (612)
! 	"INTO", // 355 (613)
! 	"INTRINSIC", // 356 (614)
! 	"INVOKE", // 357 (615)
! 	"I-O", // 358 (616)
! 	"I-O-CONTROL", // 359 (617)
! 	"IS", // 360 (618)
! 	"ISNT", // 361 (619)
! 	"KANJI", // 362 (620)
! 	"KEY", // 363 (621)
! 	"LABEL", // 364 (622)
! 	"LAST", // 365 (623)
! 	"LEADING", // 366 (624)
! 	"LEFT", // 367 (625)
! 	"LENGTH", // 368 (626)
! 	"LENGTH-OF", // 369 (627)
! 	"LIMIT", // 370 (628)
! 	"LIMITS", // 371 (629)
! 	"LINE", // 372 (630)
! 	"LINES", // 373 (631)
! 	"LINE-COUNTER", // 374 (632)
! 	"LINAGE", // 375 (633)
! 	"LINKAGE", // 376 (634)
! 	"LOCALE", // 377 (635)
! 	"LOCALE-COMPARE", // 378 (636)
! 	"LOCALE-DATE", // 379 (637)
! 	"LOCALE-TIME", // 380 (638)
! 	"LOCALE-TIME-FROM-SECONDS", // 381 (639)
! 	"LOCAL-STORAGE", // 382 (640)
! 	"LOCATION", // 383 (641)
! 	"LOCK", // 384 (642)
! 	"LOCK-ON", // 385 (643)
! 	"LOG", // 386 (644)
! 	"LOG10", // 387 (645)
! 	"LOWER-CASE", // 388 (646)
! 	"LOW-VALUES", // 389 (647)
! 	"LOWEST-ALGEBRAIC", // 390 (648)
! 	"LPAREN", // 391 (649)
! 	"MANUAL", // 392 (650)
! 	"MAXX", // 393 (651)
! 	"MEAN", // 394 (652)
! 	"MEDIAN", // 395 (653)
! 	"MIDRANGE", // 396 (654)
! 	"MINN", // 397 (655)
! 	"MULTIPLE", // 398 (656)
! 	"MOD", // 399 (657)
! 	"MODE", // 400 (658)
! 	"MODULE-NAME", // 401 (659)
! 	"NAMED", // 402 (660)
! 	"NAT", // 403 (661)
! 	"NATIONAL", // 404 (662)
! 	"NATIONAL-EDITED", // 405 (663)
! 	"NATIONAL-OF", // 406 (664)
! 	"NATIVE", // 407 (665)
! 	"NESTED", // 408 (666)
! 	"NEXT", // 409 (667)
! 	"NO", // 410 (668)
! 	"NOTE", // 411 (669)
! 	"NULLS", // 412 (670)
! 	"NULLPTR", // 413 (671)
! 	"NUMERIC", // 414 (672)
! 	"NUMERIC-EDITED", // 415 (673)
! 	"NUMVAL", // 416 (674)
! 	"NUMVAL-C", // 417 (675)
! 	"NUMVAL-F", // 418 (676)
! 	"OCCURS", // 419 (677)
! 	"OF", // 420 (678)
! 	"OFF", // 421 (679)
! 	"OMITTED", // 422 (680)
! 	"ON", // 423 (681)
! 	"ONLY", // 424 (682)
! 	"OPTIONAL", // 425 (683)
! 	"OPTIONS", // 426 (684)
! 	"ORD", // 427 (685)
! 	"ORDER", // 428 (686)
! 	"ORD-MAX", // 429 (687)
! 	"ORD-MIN", // 430 (688)
! 	"ORGANIZATION", // 431 (689)
! 	"OTHER", // 432 (690)
! 	"OTHERWISE", // 433 (691)
! 	"OUTPUT", // 434 (692)
! 	"PACKED-DECIMAL", // 435 (693)
! 	"PADDING", // 436 (694)
! 	"PAGE", // 437 (695)
! 	"PAGE-COUNTER", // 438 (696)
! 	"PF", // 439 (697)
! 	"PH", // 440 (698)
! 	"PI", // 441 (699)
! 	"PIC", // 442 (700)
! 	"PICTURE", // 443 (701)
! 	"PLUS", // 444 (702)
! 	"PRESENT-VALUE", // 445 (703)
! 	"PRINT-SWITCH", // 446 (704)
! 	"PROCEDURE", // 447 (705)
! 	"PROCEDURES", // 448 (706)
! 	"PROCEED", // 449 (707)
! 	"PROCESS", // 450 (708)
! 	"PROGRAM-ID", // 451 (709)
! 	"PROGRAM", // 452 (710)
! 	"PROPERTY", // 453 (711)
! 	"PROTOTYPE", // 454 (712)
! 	"PSEUDOTEXT", // 455 (713)
! 	"QUOTES", // 456 (714)
! 	"RANDOM", // 457 (715)
! 	"RANDOM-SEED", // 458 (716)
! 	"RANGE", // 459 (717)
! 	"RAISE", // 460 (718)
! 	"RAISING", // 461 (719)
! 	"RD", // 462 (720)
! 	"RECORD", // 463 (721)
! 	"RECORDING", // 464 (722)
! 	"RECORDS", // 465 (723)
! 	"RECURSIVE", // 466 (724)
! 	"REDEFINES", // 467 (725)
! 	"REEL", // 468 (726)
! 	"REFERENCE", // 469 (727)
! 	"RELATIVE", // 470 (728)
! 	"REM", // 471 (729)
! 	"REMAINDER", // 472 (730)
! 	"REMARKS", // 473 (731)
! 	"REMOVAL", // 474 (732)
! 	"RENAMES", // 475 (733)
! 	"REPLACE", // 476 (734)
! 	"REPLACING", // 477 (735)
! 	"REPORT", // 478 (736)
! 	"REPORTING", // 479 (737)
! 	"REPORTS", // 480 (738)
! 	"REPOSITORY", // 481 (739)
! 	"RERUN", // 482 (740)
! 	"RESERVE", // 483 (741)
! 	"RESTRICTED", // 484 (742)
! 	"RESUME", // 485 (743)
! 	"REVERSE", // 486 (744)
! 	"REVERSED", // 487 (745)
! 	"REWIND", // 488 (746)
! 	"RF", // 489 (747)
! 	"RH", // 490 (748)
! 	"RIGHT", // 491 (749)
! 	"ROUNDED", // 492 (750)
! 	"RUN", // 493 (751)
! 	"SAME", // 494 (752)
! 	"SCREEN", // 495 (753)
! 	"SD", // 496 (754)
! 	"SECONDS-FROM-FORMATTED-TIME", // 497 (755)
! 	"SECONDS-PAST-MIDNIGHT", // 498 (756)
! 	"SECURITY", // 499 (757)
! 	"SEPARATE", // 500 (758)
! 	"SEQUENCE", // 501 (759)
! 	"SEQUENTIAL", // 502 (760)
! 	"SHARING", // 503 (761)
! 	"SIMPLE-EXIT", // 504 (762)
! 	"SIGN", // 505 (763)
! 	"SIN", // 506 (764)
! 	"SIZE", // 507 (765)
! 	"SMALLEST-ALGEBRAIC", // 508 (766)
! 	"SOURCE", // 509 (767)
! 	"SOURCE-COMPUTER", // 510 (768)
! 	"SPECIAL-NAMES", // 511 (769)
! 	"SQRT", // 512 (770)
! 	"STACK", // 513 (771)
! 	"STANDARD", // 514 (772)
! 	"STANDARD-1", // 515 (773)
! 	"STANDARD-DEVIATION", // 516 (774)
! 	"STANDARD-COMPARE", // 517 (775)
! 	"STATUS", // 518 (776)
! 	"STRONG", // 519 (777)
! 	"SUBSTITUTE", // 520 (778)
! 	"SUM", // 521 (779)
! 	"SYMBOL", // 522 (780)
! 	"SYMBOLIC", // 523 (781)
! 	"SYNCHRONIZED", // 524 (782)
! 	"TALLY", // 525 (783)
! 	"TALLYING", // 526 (784)
! 	"TAN", // 527 (785)
! 	"TERMINATE", // 528 (786)
! 	"TEST", // 529 (787)
! 	"TEST-DATE-YYYYMMDD", // 530 (788)
! 	"TEST-DAY-YYYYDDD", // 531 (789)
! 	"TEST-FORMATTED-DATETIME", // 532 (790)
! 	"TEST-NUMVAL", // 533 (791)
! 	"TEST-NUMVAL-C", // 534 (792)
! 	"TEST-NUMVAL-F", // 535 (793)
! 	"THAN", // 536 (794)
! 	"TIME", // 537 (795)
! 	"TIMES", // 538 (796)
! 	"TO", // 539 (797)
! 	"TOP", // 540 (798)
! 	"TOP-LEVEL", // 541 (799)
! 	"TRACKS", // 542 (800)
! 	"TRACK-AREA", // 543 (801)
! 	"TRAILING", // 544 (802)
! 	"TRANSFORM", // 545 (803)
! 	"TRIM", // 546 (804)
! 	"TRUE", // 547 (805)
! 	"TRY", // 548 (806)
! 	"TURN", // 549 (807)
! 	"TYPE", // 550 (808)
! 	"TYPEDEF", // 551 (809)
! 	"ULENGTH", // 552 (810)
! 	"UNBOUNDED", // 553 (811)
! 	"UNIT", // 554 (812)
! 	"UNITS", // 555 (813)
! 	"UNIT-RECORD", // 556 (814)
! 	"UNTIL", // 557 (815)
! 	"UP", // 558 (816)
! 	"UPON", // 559 (817)
! 	"UPOS", // 560 (818)
! 	"UPPER-CASE", // 561 (819)
! 	"USAGE", // 562 (820)
! 	"USING", // 563 (821)
! 	"USUBSTR", // 564 (822)
! 	"USUPPLEMENTARY", // 565 (823)
! 	"UTILITY", // 566 (824)
! 	"UUID4", // 567 (825)
! 	"UVALID", // 568 (826)
! 	"UWIDTH", // 569 (827)
! 	"VALUE", // 570 (828)
! 	"VARIANCE", // 571 (829)
! 	"VARYING", // 572 (830)
! 	"VOLATILE", // 573 (831)
! 	"WHEN-COMPILED", // 574 (832)
! 	"WITH", // 575 (833)
! 	"WORKING-STORAGE", // 576 (834)
! 	"XML", // 577 (835)
! 	"XMLGENERATE", // 578 (836)
! 	"XMLPARSE", // 579 (837)
! 	"YEAR-TO-YYYY", // 580 (838)
! 	"YYYYDDD", // 581 (839)
! 	"YYYYMMDD", // 582 (840)
! 	"ARITHMETIC", // 583 (841)
! 	"ATTRIBUTE", // 584 (842)
! 	"AUTO", // 585 (843)
! 	"AUTOMATIC", // 586 (844)
! 	"AWAY-FROM-ZERO", // 587 (845)
! 	"BACKGROUND-COLOR", // 588 (846)
! 	"BELL", // 589 (847)
! 	"BINARY-ENCODING", // 590 (848)
! 	"BLINK", // 591 (849)
! 	"CAPACITY", // 592 (850)
! 	"CENTER", // 593 (851)
! 	"CLASSIFICATION", // 594 (852)
! 	"CYCLE", // 595 (853)
! 	"DECIMAL-ENCODING", // 596 (854)
! 	"ENTRY-CONVENTION", // 597 (855)
! 	"EOL", // 598 (856)
! 	"EOS", // 599 (857)
! 	"ERASE", // 600 (858)
! 	"EXPANDS", // 601 (859)
! 	"FLOAT-BINARY", // 602 (860)
! 	"FLOAT-DECIMAL", // 603 (861)
! 	"FOREGROUND-COLOR", // 604 (862)
! 	"FOREVER", // 605 (863)
! 	"FULL", // 606 (864)
! 	"HIGHLIGHT", // 607 (865)
! 	"HIGH-ORDER-LEFT", // 608 (866)
! 	"HIGH-ORDER-RIGHT", // 609 (867)
! 	"IGNORING", // 610 (868)
! 	"IMPLEMENTS", // 611 (869)
! 	"INITIALIZED", // 612 (870)
! 	"INTERMEDIATE", // 613 (871)
! 	"LC-ALL", // 614 (872)
! 	"LC-COLLATE", // 615 (873)
! 	"LC-CTYPE", // 616 (874)
! 	"LC-MESSAGES", // 617 (875)
! 	"LC-MONETARY", // 618 (876)
! 	"LC-NUMERIC", // 619 (877)
! 	"LC-TIME", // 620 (878)
! 	"LOWLIGHT", // 621 (879)
! 	"NEAREST-AWAY-FROM-ZERO", // 622 (880)
! 	"NEAREST-EVEN", // 623 (881)
! 	"NEAREST-TOWARD-ZERO", // 624 (882)
! 	"NONE", // 625 (883)
! 	"NORMAL", // 626 (884)
! 	"NUMBERS", // 627 (885)
! 	"PREFIXED", // 628 (886)
! 	"PREVIOUS", // 629 (887)
! 	"PROHIBITED", // 630 (888)
! 	"RELATION", // 631 (889)
! 	"REQUIRED", // 632 (890)
! 	"REVERSE-VIDEO", // 633 (891)
! 	"ROUNDING", // 634 (892)
! 	"SECONDS", // 635 (893)
! 	"SECURE", // 636 (894)
! 	"SHORT", // 637 (895)
! 	"SIGNED", // 638 (896)
! 	"STANDARD-BINARY", // 639 (897)
! 	"STANDARD-DECIMAL", // 640 (898)
! 	"STATEMENT", // 641 (899)
! 	"STEP", // 642 (900)
! 	"STRUCTURE", // 643 (901)
! 	"TOWARD-GREATER", // 644 (902)
! 	"TOWARD-LESSER", // 645 (903)
! 	"TRUNCATION", // 646 (904)
! 	"UCS-4", // 647 (905)
! 	"UNDERLINE", // 648 (906)
! 	"UNSIGNED", // 649 (907)
! 	"UTF-16", // 650 (908)
! 	"UTF-8", // 651 (909)
! 	"ADDRESS", // 652 (910)
! 	"END-ACCEPT", // 653 (911)
! 	"END-ADD", // 654 (912)
! 	"END-CALL", // 655 (913)
! 	"END-COMPUTE", // 656 (914)
! 	"END-DELETE", // 657 (915)
! 	"END-DISPLAY", // 658 (916)
! 	"END-DIVIDE", // 659 (917)
! 	"END-EVALUATE", // 660 (918)
! 	"END-MULTIPLY", // 661 (919)
! 	"END-PERFORM", // 662 (920)
! 	"END-READ", // 663 (921)
! 	"END-RETURN", // 664 (922)
! 	"END-REWRITE", // 665 (923)
! 	"END-SEARCH", // 666 (924)
! 	"END-START", // 667 (925)
! 	"END-STRING", // 668 (926)
! 	"END-SUBTRACT", // 669 (927)
! 	"END-UNSTRING", // 670 (928)
! 	"END-WRITE", // 671 (929)
! 	"END-IF", // 672 (930)
! 	"THRU", // 673 (931)
! 	"OR", // 674 (932)
! 	"AND", // 675 (933)
! 	"NOT", // 676 (934)
! 	"NE", // 677 (935)
! 	"LE", // 678 (936)
! 	"GE", // 679 (937)
! 	"POW", // 680 (938)
! 	"NEG", // 681 (939)
  };
diff -Nrcpad gcc-16-20250504/gcc/cobol/util.cc gcc-16-20250511/gcc/cobol/util.cc
*** gcc-16-20250504/gcc/cobol/util.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/util.cc	Sun May 11 22:32:09 2025
*************** cbl_message(int fd, const char *format_s
*** 2214,2219 ****
--- 2214,2220 ----
    char *ostring = xvasprintf(format_string, ap);
    va_end(ap);
    write(fd, ostring, strlen(ostring));
+   write(fd, "\n", 1);
    free(ostring);
    }
  
*************** int  ftolower(int c)
*** 2319,2325 ****
--- 2320,2935 ----
    {
    return TOLOWER(c);
    }
+ int  ftoupper(int c)
+   {
+   return TOUPPER(c);
+   }
  bool fisprint(int c)
    {
    return ISPRINT(c);
    };
+ 
+ // 8.9 Reserved words
+ static const std::set<std::string> reserved_words = {
+   // GCC COBOL keywords
+   "COMMAND-LINE",
+   "COMMAND-LINE-COUNT",
+ 
+   // GCC device names
+   "C01",
+   "C02",
+   "C03",
+   "C04",
+   "C05",
+   "C06",
+   "C07",
+   "C08",
+   "C09",
+   "C10",
+   "C11",
+   "C12",
+   "CONSOLE",
+   "S01",
+   "S02",
+   "S03",
+   "S04",
+   "S05",
+   "STDERR",
+   "STDIN",
+   "STDOUT",
+   "SYSIN",
+   "SYSIPT",
+   "SYSLIST",
+   "SYSLST",
+   "SYSOUT",
+   "SYSPCH",
+   "SYSPUNCH",
+   "UPSI",
+ 
+   // IBM keywords that GCC recognizes
+   "BASIS",
+   "CBL",
+   "ENTER",
+   "READY",
+   "TITLE",
+   "TRACE",
+   "ALTER",
+   "COBOL",
+   "DATE-COMPILED",
+   "DATE-WRITTEN",
+   "DBCS",
+   "DEBUGGING",
+   "EGCS",
+   "ENTRY",
+   "EVERY",
+   "INSTALLATION",
+   "I-O-CONTROL",
+   "KANJI",
+   "LABEL",
+   "NULLS",
+   "PADDING",
+   "PROCEDURES",
+   "PROCEED",
+   "RECORDING",
+   "RERUN",
+   "REVERSED",
+   "SECURITY",
+   "TALLY",
+   "VOLATILE",
+   "XML",
+   "END-START",
+   
+   // ISO 2023 keywords
+   "ACCEPT",
+   "ACCESS",
+   "ACTIVE-CLASS",
+   "ADD",
+   "ADDRESS",
+   "ADVANCING",
+   "AFTER",
+   "ALIGNED",
+   "ALL",
+   "ALLOCATE",
+   "ALPHABET",
+   "ALPHABETIC",
+   "ALPHABETIC-LOWER",
+   "ALPHABETIC-UPPER",
+   "ALPHANUMERIC",
+   "ALPHANUMERIC-EDITED",
+   "ALSO",
+   "ALTERNATE",
+   "AND",
+   "ANY",
+   "ANYCASE",
+   "ARE",
+   "AREA",
+   "AREAS",
+   "AS",
+   "ASCENDING",
+   "ASSIGN",
+   "AT",
+   "B-AND",
+   "B-NOT",
+   "B-OR",
+   "B-SHIFT-L",
+   "B-SHIFT-LC",
+   "B-SHIFT-R",
+   "B-SHIFT-RC",
+   "B-XOR",
+   "BASED",
+   "BEFORE",
+   "BINARY",
+   "BINARY-CHAR",
+   "BINARY-DOUBLE",
+   "BINARY-LONG",
+   "BINARY-SHORT",
+   "BIT",
+   "BLANK",
+   "BLOCK",
+   "BOOLEAN",
+   "BOTTOM",
+   "BY",
+   "CALL",
+   "CANCEL",
+   "CF",
+   "CH",
+   "CHARACTER",
+   "CHARACTERS",
+   "CLASS",
+   "CLASS-ID",
+   "CLOSE",
+   "CODE",
+   "CODE-SET",
+   "COL",
+   "COLLATING",
+   "COLS",
+   "COLUMN",
+   "COLUMNS",
+   "COMMA",
+   "COMMIT",
+   "COMMON",
+   "COMP",
+   "COMPUTATIONAL",
+   "COMPUTE",
+   "CONDITION",
+   "CONFIGURATION",
+   "CONSTANT",
+   "CONTAINS",
+   "CONTENT",
+   "CONTINUE",
+   "CONTROL",
+   "CONTROLS",
+   "CONVERTING",
+   "COPY",
+   "CORR",
+   "CORRESPONDING",
+   "COUNT",
+   "CRT",
+   "CURRENCY",
+   "CURSOR",
+   "DATA",
+   "DATA-POINTER",
+   "DATE",
+   "DAY",
+   "DAY-OF-WEEK",
+   "DE",
+   "DECIMAL-POINT",
+   "DECLARATIVES",
+   "DEFAULT",
+   "DELETE",
+   "DELIMITED",
+   "DELIMITER",
+   "DEPENDING",
+   "DESCENDING",
+   "DESTINATION",
+   "DETAIL",
+   "DISPLAY",
+   "DIVIDE",
+   "DIVISION",
+   "DOWN",
+   "DUPLICATES",
+   "DYNAMIC",
+   "EC",
+   "EDITING",
+   "ELSE",
+   "EMD-START",
+   "END",
+   "END-ACCEPT",
+   "END-ADD",
+   "END-CALL",
+   "END-COMPUTE",
+   "END-DELETE",
+   "END-DISPLAY",
+   "END-DIVIDE",
+   "END-EVALUATE",
+   "END-IF",
+   "END-MULTIPLY",
+   "END-OF-PAGE",
+   "END-PERFORM",
+   "END-READ",
+   "END-RECEIVE",
+   "END-RETURN",
+   "END-REWRITE",
+   "END-SEARCH",
+   "END-SEND",
+   "END-STRING",
+   "END-SUBTRACT",
+   "END-UNSTRING",
+   "END-WRITE",
+   "ENVIRONMENT",
+   "EO",
+   "EOP",
+   "EQUAL",
+   "ERROR",
+   "EVALUATE",
+   "EXCEPTION",
+   "EXCEPTION-OBJECT",
+   "EXCLUSIVE-OR",
+   "EXIT",
+   "EXTEND",
+   "EXTERNAL",
+   "FACTORY",
+   "FALSE",
+   "FARTHEST-FROM-ZERO",
+   "FD",
+   "FILE",
+   "FILE-CONTROL",
+   "FILLER",
+   "FINAL",
+   "FINALLY",
+   "FIRST",
+   "FLOAT-BINARY-128",
+   "FLOAT-BINARY-32",
+   "FLOAT-BINARY-64",
+   "FLOAT-DECIMAL-16",
+   "FLOAT-DECIMAL-34",
+   "FLOAT-EXTENDED",
+   "FLOAT-INFINITY",
+   "FLOAT-LONG",
+   "FLOAT-NOT-A-NUMBER-",
+   "FLOAT-SHORT",
+   "FOOTING",
+   "FOR",
+   "FORMAT",
+   "FREE",
+   "FROM",
+   "FUNCTION",
+   "FUNCTION-ID",
+   "FUNCTION-POINTER",
+   "GENERATE",
+   "GET",
+   "GIVING",
+   "GLOBAL",
+   "GO",
+   "GOBACK",
+   "GREATER",
+   "GROUP",
+   "GROUP-USAGE",
+   "HEADING",
+   "HIGH-VALUE",
+   "HIGH-VALUES",
+   "I-O",
+   "I-OICONTROL",
+   "IDENTIFICATION",
+   "IF",
+   "IN",
+   "IN-ARITHMETIC-RANGE",
+   "INDEX",
+   "INDEXED",
+   "INDICATE",
+   "INHERITS",
+   "INITIAL",
+   "INITIALIZE",
+   "INITIATE",
+   "INPUT",
+   "INPUT-OUTPUT",
+   "INSPECT",
+   "INTERFACE",
+   "INTERFACE-ID",
+   "INTO",
+   "INVALID",
+   "INVOKE",
+   "IS",
+   "JUST",
+   "JUSTIFIED",
+   "KEY",
+   "LAST",
+   "LEADING",
+   "LEFT",
+   "LENGTH",
+   "LESS",
+   "LIMIT",
+   "LIMITS",
+   "LINAGE",
+   "LINAGE-COUNTER",
+   "LINE",
+   "LINE-COUNTER",
+   "LINES",
+   "LINKAGE",
+   "LOCAL-STORAGE",
+   "LOCALE",
+   "LOCATION",
+   "LOCK",
+   "LOW-VALUE",
+   "LOW-VALUES",
+   "MERGE",
+   "MESSAGE-TAG",
+   "METHOD-ID",
+   "MINUS",
+   "MODE",
+   "MOVE",
+   "MULTIPLY",
+   "NATIONAL",
+   "NATIONAL-EDITED",
+   "NATIVE",
+   "NEAREST-TO-ZERO",
+   "NEGATIVE",
+   "NESTED",
+   "NEXT",
+   "NO",
+   "NOT",
+   "NULL",
+   "NUMBER",
+   "NUMERIC",
+   "NUMERIC-EDITED",
+   "OBJECT",
+   "OBJECT-COMPUTER",
+   "OBJECT-REFERENCE",
+   "OCCURS",
+   "OF",
+   "OFF",
+   "OMITTED",
+   "ON",
+   "OPEN",
+   "OPTIONAL",
+   "OPTIONS",
+   "OR",
+   "ORDER",
+   "ORGANIZATION",
+   "OTHER",
+   "OUTPUT",
+   "OVERFLOW",
+   "OVERRIDE",
+   "PACKED-DECIMAL",
+   "PAGE",
+   "PAGE-COUNTER",
+   "PERFORM",
+   "PF",
+   "PH",
+   "PIC",
+   "PICTURE",
+   "PLUS",
+   "POINTER",
+   "POSITIVE",
+   "PRESENT",
+   "PRINTING",
+   "PROCEDURE",
+   "PROGRAM",
+   "PROGRAM-ID",
+   "PROGRAM-POINTER",
+   "PROPERTY",
+   "PROTOTYPE",
+   "QUIET",
+   "QUOTE",
+   "QUOTES",
+   "RAISE",
+   "RAISING",
+   "RANDOM",
+   "RD",
+   "READ",
+   "RECEIVE",
+   "RECORD",
+   "RECORDS",
+   "REDEFINES",
+   "REEL",
+   "REFERENCE",
+   "RELATIVE",
+   "RELEASE",
+   "REMAINDER",
+   "REMOVAL",
+   "RENAMES",
+   "REPLACE",
+   "REPLACING",
+   "REPORT",
+   "REPORTING",
+   "REPORTS",
+   "REPOSITORY",
+   "RESERVE",
+   "RESET",
+   "RESUME",
+   "RETRY",
+   "RETURN",
+   "RETURNING",
+   "REWIND",
+   "REWRITE",
+   "RF",
+   "RH",
+   "RIGHT",
+   "ROLLBACK",
+   "ROUNDED",
+   "RUN",
+   "SAME",
+   "SCREEN",
+   "SD",
+   "SEARCH",
+   "SECTION",
+   "SELECT",
+   "SELF",
+   "SEND",
+   "SENTENCE",
+   "SEPARATE",
+   "SEQUENCE",
+   "SEQUENTIAL",
+   "SET",
+   "SHARING",
+   "SIGN",
+   "SIGNALING",
+   "SIZE",
+   "SORT",
+   "SORT-MERGE",
+   "SOURCE",
+   "SOURCE-COMPUTER",
+   "SOURCES",
+   "SPACE",
+   "SPACES",
+   "SPECIAL-NAMES",
+   "STANDARD",
+   "STANDARD-1",
+   "STANDARD-2",
+   "START",
+   "STATUS",
+   "STOP",
+   "STRING",
+   "SUBTRACT",
+   "SUM",
+   "SUPER",
+   "SUPPRESS",
+   "SYMBOLIC",
+   "SYNC",
+   "SYNCHRONIZED",
+   "SYSTEM-DEFAULT",
+   "TABLE",
+   "TALLYING",
+   "TERMINATE",
+   "TEST",
+   "THAN",
+   "THEN",
+   "THROUGH",
+   "THRU",
+   "TIME",
+   "TIMES",
+   "TO",
+   "TOP",
+   "TRAILING",
+   "TRUE",
+   "TYPE",
+   "TYPEDEF",
+   "UNIT",
+   "UNIVERSAL",
+   "UNLOCK",
+   "UNSTRING",
+   "UNTIL",
+   "UP",
+   "UPON",
+   "USAGE",
+   "USE",
+   "USER-DEFAULT",
+   "USING",
+   "VAL-STATUS",
+   "VALID",
+   "VALIDATE",
+   "VALIDATE-STATUS",
+   "VALUE",
+   "VALUES",
+   "VARYING",
+   "WHEN",
+   "WITH",
+   "WORKING-STORAGE",
+   "WRITE",
+   "XOR",
+   "ZERO",
+   "ZEROES",
+   "ZEROS",
+   "+",
+   "-",
+   "*",
+   "/",
+   "**",
+   "<",
+   "<=",
+   "<>",
+   "=",
+   ">",
+   ">=",
+   "&",
+   "*>",
+   "::",
+   ">>",
+ };
+ 
+ // 8.10 Context-sensitive words
+ static const std::set<std::string> context_sensitive_words = {
+   "ACTIVATING",              // MODULE-NAME intrinsic function
+   "ANUM",                    // CONVERT intrinsic function
+   "APPLY",                   // I-O-CONTROL paragraph
+   "ARITHMETIC",              // OPTIONS paragraph
+   "ATTRIBUTE",               // SET statement
+   "AUTO",                    // screen description entry
+   "AUTOMATIC",               // LOCK MODE clause
+   "AWAY-FROM-ZERO",          // ROUNDED phrase
+   "BACKGROUND-COLOR",        // screen description entry
+   "BACKWARD",                // INSPECT statement
+   "BELL",                    // screen description entry and SET attribute statement
+   "BINARY-ENCODING",         // USAGE clause and FLOAT-DECIMAL clause
+   "BLINK",                   // screen description entry and SET attribute statement
+   "BYTE",                    // CONVERT intrinsic function
+   "BYTES",                   // RECORD clause
+   "BYTE-LENGTH",             // constant entry
+   "CAPACITY",                // OCCURS clause
+   "CENTER",                  // COLUMN clause
+   "CLASSIFICATION",          // OBJECT-COMPUTER paragraph
+   "CURRENT",                 // MODULE-NAME intrinsic function
+   "CYCLE",                   // EXIT statement
+   "DECIMAL-ENCODING",        // USAGE clause and FLOAT-DECIMAL clause
+   "EOL",                     // ERASE clause in a screen description entry
+   "EOS",                     // ERASE clause in a screen description entry
+   "ENTRY-CONVENTION",        // OPTIONS paragraph
+   "ERASE",                   // screen description entry
+   "EXPANDS",                 // class-specifier and interface-specifier of the REPOSITORY paragraph
+   "FLOAT-BINARY",            // OPTIONS paragraph
+   "FLOAT-DECIMAL",           // OPTIONS paragraph
+   "FOREGROUND-COLOR",        // screen description entry
+   "FOREVER",                 // RETRY phrase
+   "FULL",                    // screen description entry
+   "HEX",                     // CONVERT intrinsic function
+   "HIGH-ORDER-LEFT",         // FLOAT-BINARY clause, FLOAT-DECIMAL clause, and USAGE clause
+   "HIGH-ORDER-RIGHT",        // FLOAT-BINARY clause, FLOAT-DECIMAL clause, and USAGE clause
+   "HIGHLIGHT",               // screen description entry and SET attribute statement
+   "IGNORING",                // READ statement
+   "IMPLEMENTS",              // FACTORY paragraph and OBJECT paragraph
+   "INITIALIZED",             // ALLOCATE statement and OCCURS clause
+   "INTERMEDIATE",            // OPTIONS paragraph
+   "INTRINSIC",               // function-specifier of the REPOSITORY paragraph
+   "LC_ALL",                  // SET statement
+   "LC_COLLATE",              // SET statement
+   "LC_CTYPE",                // SET statement
+   "LC_MESSAGES",             // SET statement
+   "LC_MONETARY",             // SET statement
+   "LC_NUMERIC",              // SET statement
+   "LC_TIME",                 // SET statement
+   "LOWLIGHT",                // screen description entry and SET attribute statement
+   "MANUAL",                  // LOCK MODE clause
+   "MULTIPLE",                // LOCK ON phrase
+   "NAT",                     // CONVERT intrinsic function
+   "NEAREST-AWAY-FROM-ZERO",  // INTERMEDIATE ROUNDING clause and ROUNDED phrase
+   "NEAREST-EVEN",            // INTERMEDIATE ROUNDING clause and ROUNDED phrase
+   "NEAREST-TOWARD-ZERO",     // INTERMEDIATE ROUNDING clause and ROUNDED phrase
+   "NONE",                    // DEFAULT clause
+   "NORMAL",                  // STOP statement
+   "NUMBERS",                 // COLUMN clause and LINE clause
+   "ONLY",                    // Object-view, SHARING clause, SHARING phrase, and USAGE clause
+   "PARAGRAPH",               // EXIT statement
+   "PREFIXED",                // DYNAMIC LENGTH STRUCTURE clause
+   "PREVIOUS",                // READ statement
+   "PROHIBITED",              // INTERMEDIATE ROUNDING clause and ROUNDED phrase
+   "RECURSIVE",               // PROGRAM-ID paragraph
+   "RELATION",                // VALIDATE-STATUS clause
+   "REQUIRED",                // screen description entry
+   "REVERSE-VIDEO",           // screen description entry and SET attribute statement
+   "ROUNDING",                // OPTIONS paragraph
+   "SECONDS",                 // RETRY phrase, CONTINUE statement
+   "SECURE",                  // screen description entry
+   "SHORT",                   // DYNAMIC LENGTH STRUCTURE clause
+   "SIGNED",                  // DYNAMIC LENGTH STRUCTURE clause and USAGE clause
+   "STACK",                   // MODULE-NAME intrinsic function
+   "STANDARD-BINARY",         // ARITHMETIC clause
+   "STANDARD-DECIMAL",        // ARITHMETIC clause
+   "STATEMENT",               // RESUME statement
+   "STEP",                    // OCCURS clause
+   "STRONG",                  // TYPEDEF clause
+   "STRUCTURE",               // DYNAMIC LENGTH STRUCTURE clause
+   "SYMBOL",                  // CURRENCY clause
+   "TOP-LEVEL",               // MODULE-NAME intrinsic function
+   "TOWARD-GREATER",          // ROUNDED phrase
+   "TOWARD-LESSER",           // ROUNDED phrase
+   "TRUNCATION",              // INTERMEDIATE ROUNDING clause and ROUNDED phrase
+   "UCS-4",                   // ALPHABET clause
+   "UNDERLINE",               // screen description entry and SET attribute statement
+   "UNSIGNED",                // USAGE clause
+   "UTF-8",                   // ALPHABET clause
+   "UTF-16",                  // ALPHABET clause
+   "YYYYDDD",                 // ACCEPT statement
+   "YYYYMMDD",                // ACCEPT statement
+ };
+ 
+ // Is the input a COBOL word, per ISO/IEC 1989:2023 (E) ?
+ // We add a few GCC-specific keywords, and our supported IBM keywords.
+ bool
+ iso_cobol_word( const std::string& name, bool include_context ) {
+   auto ok = 1 == reserved_words.count(name);
+   if( include_context && !ok ) {
+     ok = 1 == context_sensitive_words.count(name);
+   }
+   return ok;
+ }
+ 
diff -Nrcpad gcc-16-20250504/gcc/cobol/util.h gcc-16-20250511/gcc/cobol/util.h
*** gcc-16-20250504/gcc/cobol/util.h	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/cobol/util.h	Sun May 11 22:32:09 2025
*************** void cbl_errx(const char *format_string,
*** 40,45 ****
--- 40,46 ----
  bool fisdigit(int c);
  bool fisspace(int c);
  int  ftolower(int c);
+ int  ftoupper(int c);
  bool fisprint(int c);
  
  const char * cobol_filename_restore();
diff -Nrcpad gcc-16-20250504/gcc/common/config/riscv/riscv-common.cc gcc-16-20250511/gcc/common/config/riscv/riscv-common.cc
*** gcc-16-20250504/gcc/common/config/riscv/riscv-common.cc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/common/config/riscv/riscv-common.cc	Sun May 11 22:32:09 2025
*************** struct riscv_ext_version
*** 274,279 ****
--- 274,285 ----
    int minor_version;
  };
  
+ struct riscv_profiles
+ {
+   const char *profile_name;
+   const char *profile_string;
+ };
+ 
  /* All standard extensions defined in all supported ISA spec.  */
  static const struct riscv_ext_version riscv_ext_version_table[] =
  {
*************** static const struct riscv_ext_version ri
*** 327,332 ****
--- 333,339 ----
    {"zalrsc", ISA_SPEC_CLASS_NONE, 1, 0},
    {"zabha", ISA_SPEC_CLASS_NONE, 1, 0},
    {"zacas", ISA_SPEC_CLASS_NONE, 1, 0},
+   {"zama16b", ISA_SPEC_CLASS_NONE, 1, 0},
  
    {"zba", ISA_SPEC_CLASS_NONE, 1, 0},
    {"zbb", ISA_SPEC_CLASS_NONE, 1, 0},
*************** static const struct riscv_ext_version ri
*** 432,437 ****
--- 439,446 ----
    {"zcmp", ISA_SPEC_CLASS_NONE, 1, 0},
    {"zcmt", ISA_SPEC_CLASS_NONE, 1, 0},
  
+   {"sdtrig",  ISA_SPEC_CLASS_NONE, 1, 0},
+ 
    {"smaia",     ISA_SPEC_CLASS_NONE, 1, 0},
    {"smepmp",    ISA_SPEC_CLASS_NONE, 1, 0},
    {"smstateen", ISA_SPEC_CLASS_NONE, 1, 0},
*************** static const struct riscv_ext_version ri
*** 440,446 ****
--- 449,458 ----
    {"sscofpmf",  ISA_SPEC_CLASS_NONE, 1, 0},
    {"ssstateen", ISA_SPEC_CLASS_NONE, 1, 0},
    {"sstc",      ISA_SPEC_CLASS_NONE, 1, 0},
+   {"ssstrict",  ISA_SPEC_CLASS_NONE, 1, 0},
  
+   {"svade",   ISA_SPEC_CLASS_NONE, 1, 0},
+   {"svadu",   ISA_SPEC_CLASS_NONE, 1, 0},
    {"svinval", ISA_SPEC_CLASS_NONE, 1, 0},
    {"svnapot", ISA_SPEC_CLASS_NONE, 1, 0},
    {"svpbmt",  ISA_SPEC_CLASS_NONE, 1, 0},
*************** static const struct riscv_ext_version ri
*** 496,501 ****
--- 508,554 ----
    {NULL, ISA_SPEC_CLASS_NONE, 0, 0}
  };
  
+ /* This table records the mapping form RISC-V Profiles into march string.  */
+ static const riscv_profiles riscv_profiles_table[] =
+ {
+   /* RVI20U only contains the base extension 'i' as mandatory extension.  */
+   {"rvi20u64", "rv64i"},
+   {"rvi20u32", "rv32i"},
+ 
+   /* RVA20U contains the 'i,m,a,f,d,c,zicsr,zicntr,ziccif,ziccrse,ziccamoa,
+      zicclsm,za128rs' as mandatory extensions.  */
+   {"rva20u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa"
+    "_zicclsm_za128rs"},
+ 
+   /* RVA22U contains the 'i,m,a,f,d,c,zicsr,zihintpause,zba,zbb,zbs,zicntr,
+      zihpm,ziccif,ziccrse,ziccamoa, zicclsm,zic64b,za64rs,zicbom,zicbop,zicboz,
+      zfhmin,zkt' as mandatory extensions.  */
+   {"rva22u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa"
+    "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+    "_zicboz_zfhmin_zkt"},
+ 
+   /* RVA23 contains all mandatory base ISA for RVA22U64 and the new extension
+      'v,zihintntl,zvfhmin,zvbb,zvkt,zicond,zimop,zcmop,zfa,zawrs' as mandatory
+      extensions.  */
+   {"rva23u64", "rv64imafdcv_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+    "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+    "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb"
+    "_zfa_zawrs"},
+ 
+   /* RVB23 contains all mandatory base ISA for RVA22U64 and the new extension
+      'zihintntl,zicond,zimop,zcmop,zfa,zawrs' as mandatory
+      extensions.  */
+   {"rvb23u64", "rv64imafdc_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+    "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+    "_zicboz_zfhmin_zkt_zihintntl_zicond_zimop_zcmop_zcb"
+    "_zfa_zawrs"},
+ 
+   /* Currently we do not define S/M mode Profiles in gcc part.  */
+ 
+   /* Terminate the list.  */
+   {NULL, NULL}
+ };
+ 
  static const riscv_cpu_info riscv_cpu_tables[] =
  {
  #define RISCV_CORE(CORE_NAME, ARCH, TUNE) \
*************** riscv_subset_list::parsing_subset_versio
*** 1103,1108 ****
--- 1156,1207 ----
    return p;
  }
  
+ /* Parsing RISC-V Profiles in -march string.
+    Return string with mandatory extensions of Profiles.  */
+ std::string
+ riscv_subset_list::parse_profiles (const char *arch)
+ {
+   /* Checking if input string contains a Profiles.
+     There are two cases use Profiles in -march option:
+ 
+     1. Only use Profiles in '-march' as input
+     2. Mixed Profiles with other extensions
+ 
+     Use '_' to split Profiles and other extension.  */
+     std::string p(arch);
+     const size_t p_len = p.size();
+ 
+     for (int i = 0; riscv_profiles_table[i].profile_name != nullptr; ++i)
+     {
+       const std::string& p_name = riscv_profiles_table[i].profile_name;
+       const std::string& p_str = riscv_profiles_table[i].profile_string;
+       size_t pos = p.find(p_name);
+       /* Find profile at the begin.  */
+       if (pos == 0 && pos + p_name.size() <= p_len)
+ 	{
+ 	  size_t after_pos = pos + p_name.size();
+ 	  std::string after_part = p.substr(after_pos);
+ 
+ 	  /* If there're only profile, return the profile_string directly.  */
+ 	  if (after_part[0] == '\0')
+ 	    return p_str;
+ 
+ 	  /* If isn't '_' after profile, need to add it and mention the user.  */
+ 	  if (after_part[0] != '_')
+ 	  {
+ 	    warning_at (m_loc, 0, "Should use \"%c\" to contact Profiles with other "
+ 				  "extensions", '_');
+ 	    return p_str + "_" + after_part;
+ 	  }
+ 
+ 	  /* Return 'profiles_additional' extensions.  */
+ 	  return p_str + after_part;
+ 	}
+     }
+   /* Not found profile, return directly.  */
+   return p;
+ }
+ 
  /* Parsing function for base extensions, rv[32|64][i|e|g]
  
     Return Value:
*************** riscv_subset_list::parse_base_ext (const
*** 1129,1136 ****
      }
    else
      {
!       error_at (m_loc, "%<-march=%s%>: ISA string must begin with rv32 or rv64",
! 		m_arch);
        return NULL;
      }
  
--- 1228,1235 ----
      }
    else
      {
!       error_at (m_loc, "%<-march=%s%>: ISA string must begin with rv32, rv64 "
! 		"or Profiles", m_arch);
        return NULL;
      }
  
*************** riscv_subset_list::parse (const char *ar
*** 1521,1528 ****
      return NULL;
  
    riscv_subset_list *subset_list = new riscv_subset_list (arch, loc);
    const char *p = arch;
!   p = subset_list->parse_base_ext (p);
    if (p == NULL)
      goto fail;
  
--- 1620,1629 ----
      return NULL;
  
    riscv_subset_list *subset_list = new riscv_subset_list (arch, loc);
+ 
    const char *p = arch;
!   std::string a = subset_list->parse_profiles(p);
!   p = subset_list->parse_base_ext (a.c_str());
    if (p == NULL)
      goto fail;
  
*************** static const riscv_ext_flag_table_t risc
*** 1652,1657 ****
--- 1753,1759 ----
    RISCV_EXT_FLAG_ENTRY ("zalrsc",  x_riscv_za_subext, MASK_ZALRSC),
    RISCV_EXT_FLAG_ENTRY ("zabha",   x_riscv_za_subext, MASK_ZABHA),
    RISCV_EXT_FLAG_ENTRY ("zacas",   x_riscv_za_subext, MASK_ZACAS),
+   RISCV_EXT_FLAG_ENTRY ("zama16b", x_riscv_za_subext, MASK_ZAMA16B),
  
    RISCV_EXT_FLAG_ENTRY ("zba", x_riscv_zb_subext, MASK_ZBA),
    RISCV_EXT_FLAG_ENTRY ("zbb", x_riscv_zb_subext, MASK_ZBB),
*************** static const riscv_ext_flag_table_t risc
*** 1764,1772 ****
    RISCV_EXT_FLAG_ENTRY ("zcmp", x_riscv_zc_subext, MASK_ZCMP),
    RISCV_EXT_FLAG_ENTRY ("zcmt", x_riscv_zc_subext, MASK_ZCMT),
  
!   RISCV_EXT_FLAG_ENTRY ("svinval", x_riscv_sv_subext, MASK_SVINVAL),
!   RISCV_EXT_FLAG_ENTRY ("svnapot", x_riscv_sv_subext, MASK_SVNAPOT),
!   RISCV_EXT_FLAG_ENTRY ("svvptc", x_riscv_sv_subext, MASK_SVVPTC),
  
    RISCV_EXT_FLAG_ENTRY ("ztso", x_riscv_ztso_subext, MASK_ZTSO),
  
--- 1866,1876 ----
    RISCV_EXT_FLAG_ENTRY ("zcmp", x_riscv_zc_subext, MASK_ZCMP),
    RISCV_EXT_FLAG_ENTRY ("zcmt", x_riscv_zc_subext, MASK_ZCMT),
  
!   RISCV_EXT_FLAG_ENTRY ("svade",       x_riscv_sv_subext, MASK_SVADE),
!   RISCV_EXT_FLAG_ENTRY ("svadu",       x_riscv_sv_subext, MASK_SVADU),
!   RISCV_EXT_FLAG_ENTRY ("svinval",     x_riscv_sv_subext, MASK_SVINVAL),
!   RISCV_EXT_FLAG_ENTRY ("svnapot",     x_riscv_sv_subext, MASK_SVNAPOT),
!   RISCV_EXT_FLAG_ENTRY ("svvptc",      x_riscv_sv_subext, MASK_SVVPTC),
  
    RISCV_EXT_FLAG_ENTRY ("ztso", x_riscv_ztso_subext, MASK_ZTSO),
  
diff -Nrcpad gcc-16-20250504/gcc/config/aarch64/aarch64-protos.h gcc-16-20250511/gcc/config/aarch64/aarch64-protos.h
*** gcc-16-20250504/gcc/config/aarch64/aarch64-protos.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/aarch64/aarch64-protos.h	Sun May 11 22:32:09 2025
*************** rtx aarch64_ptrue_reg (machine_mode, uns
*** 1026,1031 ****
--- 1026,1033 ----
  rtx aarch64_ptrue_reg (machine_mode, machine_mode);
  rtx aarch64_pfalse_reg (machine_mode);
  bool aarch64_sve_same_pred_for_ptest_p (rtx *, rtx *);
+ void aarch64_emit_load_store_through_mode (rtx, rtx, machine_mode);
+ bool aarch64_expand_maskloadstore (rtx *, machine_mode);
  void aarch64_emit_sve_pred_move (rtx, rtx, rtx);
  void aarch64_expand_sve_mem_move (rtx, rtx, machine_mode);
  bool aarch64_maybe_expand_sve_subreg_move (rtx, rtx);
*************** void aarch64_subvti_scratch_regs (rtx, r
*** 1053,1058 ****
--- 1055,1061 ----
  				  rtx *, rtx *, rtx *);
  void aarch64_expand_subvti (rtx, rtx, rtx,
  			    rtx, rtx, rtx, rtx, bool);
+ int aarch64_exact_log2_inverse (unsigned int, rtx);
  
  
  /* Initialize builtins for SIMD intrinsics.  */
diff -Nrcpad gcc-16-20250504/gcc/config/aarch64/aarch64-simd.md gcc-16-20250511/gcc/config/aarch64/aarch64-simd.md
*** gcc-16-20250504/gcc/config/aarch64/aarch64-simd.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/aarch64/aarch64-simd.md	Sun May 11 22:32:09 2025
***************
*** 1193,1204 ****
  (define_insn "aarch64_simd_vec_set_zero<mode>"
    [(set (match_operand:VALL_F16 0 "register_operand" "=w")
  	(vec_merge:VALL_F16
! 	    (match_operand:VALL_F16 1 "aarch64_simd_imm_zero" "")
! 	    (match_operand:VALL_F16 3 "register_operand" "0")
  	    (match_operand:SI 2 "immediate_operand" "i")))]
!   "TARGET_SIMD && exact_log2 (INTVAL (operands[2])) >= 0"
    {
!     int elt = ENDIAN_LANE_N (<nunits>, exact_log2 (INTVAL (operands[2])));
      operands[2] = GEN_INT ((HOST_WIDE_INT) 1 << elt);
      return "ins\\t%0.<Vetype>[%p2], <vwcore>zr";
    }
--- 1193,1206 ----
  (define_insn "aarch64_simd_vec_set_zero<mode>"
    [(set (match_operand:VALL_F16 0 "register_operand" "=w")
  	(vec_merge:VALL_F16
! 	    (match_operand:VALL_F16 1 "register_operand" "0")
! 	    (match_operand:VALL_F16 3 "aarch64_simd_imm_zero" "")
  	    (match_operand:SI 2 "immediate_operand" "i")))]
!   "TARGET_SIMD && aarch64_exact_log2_inverse (<nunits>, operands[2]) >= 0"
    {
!     int elt = ENDIAN_LANE_N (<nunits>,
! 			     aarch64_exact_log2_inverse (<nunits>,
! 							 operands[2]));
      operands[2] = GEN_INT ((HOST_WIDE_INT) 1 << elt);
      return "ins\\t%0.<Vetype>[%p2], <vwcore>zr";
    }
diff -Nrcpad gcc-16-20250504/gcc/config/aarch64/aarch64-sve.md gcc-16-20250511/gcc/config/aarch64/aarch64-sve.md
*** gcc-16-20250504/gcc/config/aarch64/aarch64-sve.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/aarch64/aarch64-sve.md	Sun May 11 22:32:09 2025
***************
*** 702,707 ****
--- 702,724 ----
    }
  )
  
+ ;; Fold predicated loads/stores with a PTRUE predicate to unpredicated
+ ;; loads/stores after RA.
+ (define_insn_and_split "*aarch64_sve_ptrue<mode>_ldr_str"
+   [(set (match_operand:SVE_FULL 0 "aarch64_sve_nonimmediate_operand" "=Utr,w")
+ 	(unspec:SVE_FULL
+ 	  [(match_operand:<VPRED> 1 "aarch64_simd_imm_one")
+ 	   (match_operand:SVE_FULL 2 "aarch64_sve_nonimmediate_operand" "w,Utr")]
+ 	   UNSPEC_PRED_X))]
+   "TARGET_SVE && reload_completed
+    && (<MODE>mode == VNx16QImode || !BYTES_BIG_ENDIAN)
+    && ((REG_P (operands[0]) && MEM_P (operands[2]))
+        || (REG_P (operands[2]) && MEM_P (operands[0])))"
+   "#"
+   "&& 1"
+   [(set (match_dup 0)
+ 	(match_dup 2))])
+ 
  ;; Unpredicated moves that cannot use LDR and STR, i.e. partial vectors
  ;; or vectors for which little-endian ordering isn't acceptable.  Memory
  ;; accesses require secondary reloads.
***************
*** 1286,1292 ****
  ;; -------------------------------------------------------------------------
  
  ;; Predicated LD1 (single).
! (define_insn "maskload<mode><vpred>"
    [(set (match_operand:SVE_ALL 0 "register_operand" "=w")
  	(unspec:SVE_ALL
  	  [(match_operand:<VPRED> 2 "register_operand" "Upl")
--- 1303,1326 ----
  ;; -------------------------------------------------------------------------
  
  ;; Predicated LD1 (single).
! (define_expand "maskload<mode><vpred>"
!   [(set (match_operand:SVE_ALL 0 "register_operand")
! 	(unspec:SVE_ALL
! 	  [(match_operand:<VPRED> 2 "nonmemory_operand")
! 	   (match_operand:SVE_ALL 1 "memory_operand")
! 	   (match_operand:SVE_ALL 3 "aarch64_maskload_else_operand")]
! 	  UNSPEC_LD1_SVE))]
!   "TARGET_SVE"
!   {
!     if (aarch64_expand_maskloadstore (operands, <MODE>mode))
!       DONE;
!     if (CONSTANT_P (operands[2]))
!       operands[2] = force_reg (<VPRED>mode, operands[2]);
!   }
! )
! 
! ;; Predicated LD1 (single).
! (define_insn "*aarch64_maskload<mode><vpred>"
    [(set (match_operand:SVE_ALL 0 "register_operand" "=w")
  	(unspec:SVE_ALL
  	  [(match_operand:<VPRED> 2 "register_operand" "Upl")
***************
*** 2287,2293 ****
  ;; -------------------------------------------------------------------------
  
  ;; Predicated ST1 (single).
! (define_insn "maskstore<mode><vpred>"
    [(set (match_operand:SVE_ALL 0 "memory_operand" "+m")
  	(unspec:SVE_ALL
  	  [(match_operand:<VPRED> 2 "register_operand" "Upl")
--- 2321,2344 ----
  ;; -------------------------------------------------------------------------
  
  ;; Predicated ST1 (single).
! (define_expand "maskstore<mode><vpred>"
!   [(set (match_operand:SVE_ALL 0 "memory_operand")
! 	(unspec:SVE_ALL
! 	  [(match_operand:<VPRED> 2 "nonmemory_operand")
! 	   (match_operand:SVE_ALL 1 "register_operand")
! 	   (match_dup 0)]
! 	  UNSPEC_ST1_SVE))]
!   "TARGET_SVE"
!   {
!     if (aarch64_expand_maskloadstore (operands, <MODE>mode))
!       DONE;
!     if (CONSTANT_P (operands[2]))
!       operands[2] = force_reg (<VPRED>mode, operands[2]);
!   }
! )
! 
! ;; Predicated ST1 (single).
! (define_insn "*aarch64_maskstore<mode><vpred>"
    [(set (match_operand:SVE_ALL 0 "memory_operand" "+m")
  	(unspec:SVE_ALL
  	  [(match_operand:<VPRED> 2 "register_operand" "Upl")
***************
*** 3950,3957 ****
  	     (match_operand:SVE_I_SIMD_DI 3 "aarch64_sve_<sve_imm_con>_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3             ; attrs: movprfx ]
!      [ w        , Upl , %0 , <sve_imm_con> ; *              ] #
       [ w        , Upl , 0  , w             ; *              ] <sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
       [ ?&w      , Upl , w  , <sve_imm_con> ; yes            ] #
       [ ?&w      , Upl , w  , w             ; yes            ] movprfx\t%Z0, %Z2\;<sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
--- 4001,4008 ----
  	     (match_operand:SVE_I_SIMD_DI 3 "aarch64_sve_<sve_imm_con>_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3             ; attrs: movprfx ]
!      [ w        , Upl , 0  , <sve_imm_con> ; *              ] #
       [ w        , Upl , 0  , w             ; *              ] <sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
       [ ?&w      , Upl , w  , <sve_imm_con> ; yes            ] #
       [ ?&w      , Upl , w  , w             ; yes            ] movprfx\t%Z0, %Z2\;<sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
***************
*** 4080,4087 ****
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_add_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1  , 2   ; attrs: movprfx ]
!      [ w        , %0 , vsa ; *              ] add\t%0.<Vetype>, %0.<Vetype>, #%D2
       [ w        , 0  , vsn ; *              ] sub\t%0.<Vetype>, %0.<Vetype>, #%N2
       [ w        , 0  , vsi ; *              ] << aarch64_output_sve_vector_inc_dec ("%0.<Vetype>", operands[2]);
       [ ?w       , w  , vsa ; yes            ] movprfx\t%0, %1\;add\t%0.<Vetype>, %0.<Vetype>, #%D2
--- 4131,4138 ----
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_add_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , %1 , 2   ; attrs: movprfx ]
!      [ w        , 0  , vsa ; *              ] add\t%0.<Vetype>, %0.<Vetype>, #%D2
       [ w        , 0  , vsn ; *              ] sub\t%0.<Vetype>, %0.<Vetype>, #%N2
       [ w        , 0  , vsi ; *              ] << aarch64_output_sve_vector_inc_dec ("%0.<Vetype>", operands[2]);
       [ ?w       , w  , vsa ; yes            ] movprfx\t%0, %1\;add\t%0.<Vetype>, %0.<Vetype>, #%D2
***************
*** 4299,4306 ****
  	       (match_dup 3))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] <su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
--- 4350,4357 ----
  	       (match_dup 3))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] <su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 4514,4521 ****
  	     MUL_HIGHPART)]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] <su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
--- 4565,4572 ----
  	     MUL_HIGHPART)]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] <su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 4569,4576 ****
  	   (match_operand:SVE_FULL_I 4 "aarch64_simd_imm_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3  ]
!      [ &w       , Upl , %0 , w  ] movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ &w       , Upl , w  , w  ] movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    [(set_attr "movprfx" "yes")])
--- 4620,4627 ----
  	   (match_operand:SVE_FULL_I 4 "aarch64_simd_imm_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3  ]
!      [ &w       , Upl , 0  , w  ] movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ &w       , Upl , w  , w  ] movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    [(set_attr "movprfx" "yes")])
***************
*** 4714,4721 ****
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_logical_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1  , 2   ; attrs: movprfx ]
!      [ w        , %0 , vsl ; *              ] <logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ ?w       , w  , vsl ; yes            ] movprfx\t%0, %1\;<logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ w        , w  , w   ; *              ] <logical>\t%0.d, %1.d, %2.d
    }
--- 4765,4772 ----
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_logical_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , %1 , 2   ; attrs: movprfx ]
!      [ w        , 0  , vsl ; *              ] <logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ ?w       , w  , vsl ; yes            ] movprfx\t%0, %1\;<logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ w        , w  , w   ; *              ] <logical>\t%0.d, %1.d, %2.d
    }
***************
*** 5754,5761 ****
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_arith_with_sub_operand")]
  	  SVE_COND_FP_ADD))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , %0 , vsA , i   ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , vsN , i   ; *              ] fsub\t%0.<Vetype>, %1/m, %0.<Vetype>, #%N3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
--- 5805,5812 ----
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_arith_with_sub_operand")]
  	  SVE_COND_FP_ADD))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , 0  , vsA , i   ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , vsN , i   ; *              ] fsub\t%0.<Vetype>, %1/m, %0.<Vetype>, #%N3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
***************
*** 6229,6236 ****
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& !rtx_equal_p (operands[1], operands[5])"
--- 6280,6287 ----
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& !rtx_equal_p (operands[1], operands[5])"
***************
*** 6252,6259 ****
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
--- 6303,6310 ----
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 6493,6500 ****
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_mul_operand")]
  	  SVE_COND_FP_MUL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , %0 , vsM , i   ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsM , i   ; yes            ] movprfx\t%0, %2\;fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
--- 6544,6551 ----
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_mul_operand")]
  	  SVE_COND_FP_MUL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , 0  , vsM , i   ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsM , i   ; yes            ] movprfx\t%0, %2\;fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
***************
*** 6727,6734 ****
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_maxmin_operand")]
  	  SVE_COND_FP_MAXMIN))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3   ; attrs: movprfx ]
!      [ w        , Upl , %0 , vsB ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , w   ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsB ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ ?&w      , Upl , w  , w   ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
--- 6778,6785 ----
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_maxmin_operand")]
  	  SVE_COND_FP_MAXMIN))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3   ; attrs: movprfx ]
!      [ w        , Upl , 0  , vsB ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , w   ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsB ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ ?&w      , Upl , w  , w   ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
***************
*** 7036,7043 ****
  	    UNSPEC_PRED_X)
  	  (match_operand:SVE_I 4 "register_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w , w ; *              ] mad\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
--- 7087,7094 ----
  	    UNSPEC_PRED_X)
  	  (match_operand:SVE_I 4 "register_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w , w ; *              ] mad\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
***************
*** 7178,7185 ****
  	       (match_operand:SVE_I 3 "register_operand"))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w , w ; *              ] msb\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
--- 7229,7236 ----
  	       (match_operand:SVE_I 3 "register_operand"))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w , w ; *              ] msb\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
***************
*** 7460,7467 ****
  	   (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	  SVE_COND_FP_TERNARY))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
!   {@ [ cons: =0 , 1   , 2  , 3 , 4 ; attrs: movprfx , is_rev ]
!      [ w        , Upl , %w , w , 0 ; *   , *    ] <b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ w        , Upl , 0  , w , w ; *   , true ] <b><sve_fmad_op>\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes , *    ] movprfx\t%0, %4\;<b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
--- 7511,7518 ----
  	   (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	  SVE_COND_FP_TERNARY))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
!   {@ [ cons: =0 , 1   , %2  , 3 , 4 ; attrs: movprfx , is_rev ]
!      [ w        , Upl , w , w , 0 ; *   , *    ] <b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ w        , Upl , 0  , w , w ; *   , true ] <b><sve_fmad_op>\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes , *    ] movprfx\t%0, %4\;<b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
diff -Nrcpad gcc-16-20250504/gcc/config/aarch64/aarch64-sve2.md gcc-16-20250511/gcc/config/aarch64/aarch64-sve2.md
*** gcc-16-20250504/gcc/config/aarch64/aarch64-sve2.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/aarch64/aarch64-sve2.md	Sun May 11 22:32:09 2025
***************
*** 784,791 ****
  	    (match_operand:SVE_FULL_I 2 "register_operand"))
  	  (match_operand:SVE_FULL_I 3 "register_operand")))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] <su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
--- 784,791 ----
  	    (match_operand:SVE_FULL_I 2 "register_operand"))
  	  (match_operand:SVE_FULL_I 3 "register_operand")))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] <su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 804,811 ****
  	     (match_operand:SVE_FULL_I 3 "register_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
--- 804,811 ----
  	     (match_operand:SVE_FULL_I 3 "register_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
***************
*** 1373,1380 ****
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_FMINNM))]
    ""
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] <b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
--- 1373,1380 ----
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_FMINNM))]
    ""
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] <b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 1393,1400 ****
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_COND_FMINNM))]
    ""
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
--- 1393,1400 ----
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_COND_FMINNM))]
    ""
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
***************
*** 1626,1633 ****
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , 1  , 2 ; attrs: movprfx ]
!      [ w        , %0 , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %0.d
       [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %0.d
    }
    "&& !CONSTANT_P (operands[3])"
--- 1626,1633 ----
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , %1 , 2 ; attrs: movprfx ]
!      [ w        , 0  , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %0.d
       [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %0.d
    }
    "&& !CONSTANT_P (operands[3])"
***************
*** 1648,1655 ****
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , 1  , 2 ; attrs: movprfx ]
!      [ w        , %0 , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %2.d
       [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %2.d
    }
    "&& !CONSTANT_P (operands[3])"
--- 1648,1655 ----
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , %1 , 2 ; attrs: movprfx ]
!      [ w        , 0  , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %2.d
       [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %2.d
    }
    "&& !CONSTANT_P (operands[3])"
***************
*** 2951,2958 ****
  	     UNSPEC_COND_FABS)]
  	  SVE_COND_SMAXMIN))]
    "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] <faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& (!rtx_equal_p (operands[1], operands[5])
--- 2951,2958 ----
  	     UNSPEC_COND_FABS)]
  	  SVE_COND_SMAXMIN))]
    "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] <faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& (!rtx_equal_p (operands[1], operands[5])
diff -Nrcpad gcc-16-20250504/gcc/config/aarch64/aarch64.cc gcc-16-20250511/gcc/config/aarch64/aarch64.cc
*** gcc-16-20250504/gcc/config/aarch64/aarch64.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/aarch64/aarch64.cc	Sun May 11 22:32:09 2025
*************** aarch64_partial_ptrue_length (rtx_vector
*** 3667,3672 ****
--- 3667,3680 ----
    if (builder.nelts_per_pattern () == 3)
      return 0;
  
+   /* It is conservatively correct to drop the element size to a lower value,
+      and we must do so if the predicate consists of a leading "foreground"
+      sequence that is smaller than the element size.  Without this,
+      we would test only one bit and so treat everything as either an
+      all-true or an all-false predicate.  */
+   if (builder.nelts_per_pattern () == 2)
+     elt_size = MIN (elt_size, builder.npatterns ());
+ 
    /* Skip over leading set bits.  */
    unsigned int nelts = builder.encoded_nelts ();
    unsigned int i = 0;
*************** aarch64_partial_ptrue_length (rtx_vector
*** 3698,3703 ****
--- 3706,3729 ----
    return vl;
  }
  
+ /* Return:
+ 
+    * -1 if all bits of PRED are set
+    * N if PRED has N leading set bits followed by all clear bits
+    * 0 if PRED does not have any of these forms.  */
+ 
+ int
+ aarch64_partial_ptrue_length (rtx pred)
+ {
+   rtx_vector_builder builder;
+   if (!aarch64_get_sve_pred_bits (builder, pred))
+     return 0;
+ 
+   auto elt_size = vector_element_size (GET_MODE_BITSIZE (GET_MODE (pred)),
+ 				       GET_MODE_NUNITS (GET_MODE (pred)));
+   return aarch64_partial_ptrue_length (builder, elt_size);
+ }
+ 
  /* See if there is an svpattern that encodes an SVE predicate of mode
     PRED_MODE in which the first VL bits are set and the rest are clear.
     Return the pattern if so, otherwise return AARCH64_NUM_SVPATTERNS.
*************** aarch64_stack_protect_canary_mem (machin
*** 6410,6417 ****
    return gen_rtx_MEM (mode, force_reg (Pmode, addr));
  }
  
! /* Emit an SVE predicated move from SRC to DEST.  PRED is a predicate
!    that is known to contain PTRUE.  */
  
  void
  aarch64_emit_sve_pred_move (rtx dest, rtx pred, rtx src)
--- 6436,6467 ----
    return gen_rtx_MEM (mode, force_reg (Pmode, addr));
  }
  
! /* Emit a load/store from a subreg of SRC to a subreg of DEST.
!    The subregs have mode NEW_MODE. Use only for reg<->mem moves.  */
! void
! aarch64_emit_load_store_through_mode (rtx dest, rtx src, machine_mode new_mode)
! {
!   gcc_assert ((MEM_P (dest) && register_operand (src, VOIDmode))
! 	      || (MEM_P (src) && register_operand (dest, VOIDmode)));
!   auto mode = GET_MODE (dest);
!   auto int_mode = aarch64_sve_int_mode (mode);
!   if (MEM_P (src))
!     {
!       rtx tmp = force_reg (new_mode, adjust_address (src, new_mode, 0));
!       tmp = force_lowpart_subreg (int_mode, tmp, new_mode);
!       emit_move_insn (dest, force_lowpart_subreg (mode, tmp, int_mode));
!     }
!   else
!     {
!       src = force_lowpart_subreg (int_mode, src, mode);
!       emit_move_insn (adjust_address (dest, new_mode, 0),
! 		      force_lowpart_subreg (new_mode, src, int_mode));
!     }
! }
! 
! /* PRED is a predicate that is known to contain PTRUE.
!    For 128-bit VLS loads/stores, emit LDR/STR.
!    Else, emit an SVE predicated move from SRC to DEST.  */
  
  void
  aarch64_emit_sve_pred_move (rtx dest, rtx pred, rtx src)
*************** aarch64_emit_sve_pred_move (rtx dest, rt
*** 6421,6436 ****
        && known_eq (GET_MODE_SIZE (mode), 16)
        && aarch64_classify_vector_mode (mode) == VEC_SVE_DATA
        && !BYTES_BIG_ENDIAN)
!     {
!       if (MEM_P (src))
! 	{
! 	  rtx tmp = force_reg (V16QImode, adjust_address (src, V16QImode, 0));
! 	  emit_move_insn (dest, lowpart_subreg (mode, tmp, V16QImode));
! 	}
!       else
! 	emit_move_insn (adjust_address (dest, V16QImode, 0),
! 			force_lowpart_subreg (V16QImode, src, mode));
!     }
    else
      {
        expand_operand ops[3];
--- 6471,6477 ----
        && known_eq (GET_MODE_SIZE (mode), 16)
        && aarch64_classify_vector_mode (mode) == VEC_SVE_DATA
        && !BYTES_BIG_ENDIAN)
!     aarch64_emit_load_store_through_mode (dest, src, V16QImode);
    else
      {
        expand_operand ops[3];
*************** aarch64_simd_valid_imm (rtx op, simd_imm
*** 23526,23531 ****
--- 23567,23605 ----
    return false;
  }
  
+ /* Try to optimize the expansion of a maskload or maskstore with
+    the operands in OPERANDS, given that the vector being loaded or
+    stored has mode MODE.  Return true on success or false if the normal
+    expansion should be used.  */
+ 
+ bool
+ aarch64_expand_maskloadstore (rtx *operands, machine_mode mode)
+ {
+   /* If the predicate in operands[2] is a patterned SVE PTRUE predicate
+      with patterns VL1, VL2, VL4, VL8, or VL16 and at most the bottom
+      128 bits are loaded/stored, emit an ASIMD load/store.  */
+   int vl = aarch64_partial_ptrue_length (operands[2]);
+   int width = vl * GET_MODE_UNIT_BITSIZE (mode);
+   if (width <= 128
+       && pow2p_hwi (vl)
+       && (vl == 1
+ 	  || (!BYTES_BIG_ENDIAN
+ 	      && aarch64_classify_vector_mode (mode) == VEC_SVE_DATA)))
+     {
+       machine_mode new_mode;
+       if (known_eq (width, 128))
+ 	new_mode = V16QImode;
+       else if (known_eq (width, 64))
+ 	new_mode = V8QImode;
+       else
+ 	new_mode = int_mode_for_size (width, 0).require ();
+       aarch64_emit_load_store_through_mode (operands[0], operands[1],
+ 					    new_mode);
+       return true;
+     }
+   return false;
+ }
+ 
  /* Return true if OP is a valid SIMD move immediate for SVE or AdvSIMD.  */
  bool
  aarch64_simd_valid_mov_imm (rtx op)
*************** aarch64_strided_registers_p (rtx *operan
*** 23840,23845 ****
--- 23914,23929 ----
    return true;
  }
  
+ /* Return the base 2 logarithm of the bit inverse of OP masked by the lowest
+    NELTS bits, if OP is a power of 2.  Otherwise, returns -1.  */
+ 
+ int
+ aarch64_exact_log2_inverse (unsigned int nelts, rtx op)
+ {
+   return exact_log2 ((~INTVAL (op))
+ 		     & ((HOST_WIDE_INT_1U << nelts) - 1));
+ }
+ 
  /* Bounds-check lanes.  Ensure OPERAND lies between LOW (inclusive) and
     HIGH (exclusive).  */
  void
diff -Nrcpad gcc-16-20250504/gcc/config/aarch64/aarch64.md gcc-16-20250511/gcc/config/aarch64/aarch64.md
*** gcc-16-20250504/gcc/config/aarch64/aarch64.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/aarch64/aarch64.md	Sun May 11 22:32:09 2025
***************
*** 2182,2190 ****
    "aarch64_mem_pair_offset (operands[4], <MODE>mode)
     && known_eq (INTVAL (operands[5]),
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))"
!   {@ [cons: =&0, 1, =2, =3; attrs: type     ]
!      [       rk, 0,  r,  r; load_<ldpstp_sz>] ldp\t%<w>2, %<w>3, [%0, %4]!
!      [       rk, 0,  w,  w; neon_load1_2reg ] ldp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
--- 2182,2190 ----
    "aarch64_mem_pair_offset (operands[4], <MODE>mode)
     && known_eq (INTVAL (operands[5]),
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))"
!   {@ [cons: =0,   1, =2, =3; attrs: type     ]
!      [       &rk, 0,  r,  r; load_<ldpstp_sz>] ldp\t%<w>2, %<w>3, [%0, %4]!
!      [       rk,  0,  w,  w; neon_load1_2reg ] ldp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
***************
*** 2238,2246 ****
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))
     && !reg_overlap_mentioned_p (operands[0], operands[2])
     && !reg_overlap_mentioned_p (operands[0], operands[3])"
!   {@ [cons: =&0, 1,   2,   3; attrs: type      ]
!      [       rk, 0, rYZ, rYZ; store_<ldpstp_sz>] stp\t%<w>2, %<w>3, [%0, %4]!
!      [       rk, 0,   w,   w; neon_store1_2reg ] stp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
--- 2238,2246 ----
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))
     && !reg_overlap_mentioned_p (operands[0], operands[2])
     && !reg_overlap_mentioned_p (operands[0], operands[3])"
!   {@ [cons: =0, 1,   2,   3; attrs: type      ]
!      [     &rk, 0, rYZ, rYZ; store_<ldpstp_sz>] stp\t%<w>2, %<w>3, [%0, %4]!
!      [      rk, 0,   w,   w; neon_store1_2reg ] stp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
***************
*** 2486,2500 ****
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_operand")))]
    ""
!   {@ [ cons: =0 , 1   , 2   ; attrs: type , arch  ]
!      [ rk       , %rk , I   ; alu_imm     , *     ] add\t%<w>0, %<w>1, %2
!      [ rk       , rk  , r   ; alu_sreg    , *     ] add\t%<w>0, %<w>1, %<w>2
!      [ w        , w   , w   ; neon_add    , simd  ] add\t%<rtn>0<vas>, %<rtn>1<vas>, %<rtn>2<vas>
!      [ rk       , rk  , J   ; alu_imm     , *     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk  , Uaa ; multiple    , *     ] #
!      [ r        , 0   , Uai ; alu_imm     , sve   ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ rk       , rk  , Uav ; alu_imm     , sve   ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ rk       , rk  , UaV ; alu_imm     , sme   ] << aarch64_output_addsvl_addspl (operands[2]);
    }
    ;; The "alu_imm" types for INC/DEC and ADDVL/ADDPL are just placeholders.
  )
--- 2486,2500 ----
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_operand")))]
    ""
!   {@ [ cons: =0 , %1 , 2   ; attrs: type , arch  ]
!      [ rk       , rk , I   ; alu_imm     , *     ] add\t%<w>0, %<w>1, %2
!      [ rk       , rk , r   ; alu_sreg    , *     ] add\t%<w>0, %<w>1, %<w>2
!      [ w        , w  , w   ; neon_add    , simd  ] add\t%<rtn>0<vas>, %<rtn>1<vas>, %<rtn>2<vas>
!      [ rk       , rk , J   ; alu_imm     , *     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk , Uaa ; multiple    , *     ] #
!      [ r        , 0  , Uai ; alu_imm     , sve   ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ rk       , rk , Uav ; alu_imm     , sve   ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ rk       , rk , UaV ; alu_imm     , sme   ] << aarch64_output_addsvl_addspl (operands[2]);
    }
    ;; The "alu_imm" types for INC/DEC and ADDVL/ADDPL are just placeholders.
  )
***************
*** 2507,2517 ****
       (plus:SI (match_operand:SI 1 "register_operand")
  	      (match_operand:SI 2 "aarch64_pluslong_operand"))))]
    ""
!   {@ [ cons: =0 , 1   , 2   ; attrs: type ]
!      [ rk       , %rk , I   ; alu_imm     ] add\t%w0, %w1, %2
!      [ rk       , rk  , r   ; alu_sreg    ] add\t%w0, %w1, %w2
!      [ rk       , rk  , J   ; alu_imm     ] sub\t%w0, %w1, #%n2
!      [ r        , rk  , Uaa ; multiple    ] #
    }
  )
  
--- 2507,2517 ----
       (plus:SI (match_operand:SI 1 "register_operand")
  	      (match_operand:SI 2 "aarch64_pluslong_operand"))))]
    ""
!   {@ [ cons: =0 , %1 , 2   ; attrs: type ]
!      [ rk       , rk , I   ; alu_imm     ] add\t%w0, %w1, %2
!      [ rk       , rk , r   ; alu_sreg    ] add\t%w0, %w1, %w2
!      [ rk       , rk , J   ; alu_imm     ] sub\t%w0, %w1, #%n2
!      [ r        , rk , Uaa ; multiple    ] #
    }
  )
  
***************
*** 2580,2593 ****
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_or_poly_operand")))]
    "TARGET_SVE && operands[0] != stack_pointer_rtx"
!   {@ [ cons: =0 , 1   , 2   ; attrs: type ]
!      [ r        , %rk , I   ; alu_imm     ] add\t%<w>0, %<w>1, %2
!      [ r        , rk  , r   ; alu_sreg    ] add\t%<w>0, %<w>1, %<w>2
!      [ r        , rk  , J   ; alu_imm     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk  , Uaa ; multiple    ] #
!      [ r        , 0   , Uai ; alu_imm     ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ r        , rk  , Uav ; alu_imm     ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ &r       , rk  , Uat ; multiple    ] #
    }
    "&& epilogue_completed
     && !reg_overlap_mentioned_p (operands[0], operands[1])
--- 2580,2593 ----
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_or_poly_operand")))]
    "TARGET_SVE && operands[0] != stack_pointer_rtx"
!   {@ [ cons: =0 , %1 , 2   ; attrs: type ]
!      [ r        , rk , I   ; alu_imm     ] add\t%<w>0, %<w>1, %2
!      [ r        , rk , r   ; alu_sreg    ] add\t%<w>0, %<w>1, %<w>2
!      [ r        , rk , J   ; alu_imm     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk , Uaa ; multiple    ] #
!      [ r        , 0  , Uai ; alu_imm     ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ r        , rk , Uav ; alu_imm     ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ &r       , rk , Uat ; multiple    ] #
    }
    "&& epilogue_completed
     && !reg_overlap_mentioned_p (operands[0], operands[1])
***************
*** 2759,2768 ****
     (set (match_operand:GPI 0 "register_operand")
  	(plus:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , 1   , 2 ; attrs: type ]
!      [ r        , %rk , r ; alus_sreg   ] adds\t%<w>0, %<w>1, %<w>2
!      [ r        , rk  , I ; alus_imm    ] adds\t%<w>0, %<w>1, %2
!      [ r        , rk  , J ; alus_imm    ] subs\t%<w>0, %<w>1, #%n2
    }
  )
  
--- 2759,2768 ----
     (set (match_operand:GPI 0 "register_operand")
  	(plus:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , rk , r ; alus_sreg   ] adds\t%<w>0, %<w>1, %<w>2
!      [ r        , rk , I ; alus_imm    ] adds\t%<w>0, %<w>1, %2
!      [ r        , rk , J ; alus_imm    ] subs\t%<w>0, %<w>1, #%n2
    }
  )
  
***************
*** 2776,2785 ****
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , 1   , 2 ; attrs: type ]
!      [ r        , %rk , r ; alus_sreg   ] adds\t%w0, %w1, %w2
!      [ r        , rk  , I ; alus_imm    ] adds\t%w0, %w1, %2
!      [ r        , rk  , J ; alus_imm    ] subs\t%w0, %w1, #%n2
    }
  )
  
--- 2776,2785 ----
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , rk , r ; alus_sreg   ] adds\t%w0, %w1, %w2
!      [ r        , rk , I ; alus_imm    ] adds\t%w0, %w1, %2
!      [ r        , rk , J ; alus_imm    ] subs\t%w0, %w1, #%n2
    }
  )
  
***************
*** 2980,2989 ****
  		   (match_operand:GPI 1 "aarch64_plus_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: 0 , 1 ; attrs: type ]
!      [ %r      , r ; alus_sreg   ] cmn\t%<w>0, %<w>1
!      [ r       , I ; alus_imm    ] cmn\t%<w>0, %1
!      [ r       , J ; alus_imm    ] cmp\t%<w>0, #%n1
    }
  )
  
--- 2980,2989 ----
  		   (match_operand:GPI 1 "aarch64_plus_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: %0 , 1 ; attrs: type ]
!      [ r        , r ; alus_sreg   ] cmn\t%<w>0, %<w>1
!      [ r        , I ; alus_imm    ] cmn\t%<w>0, %1
!      [ r        , J ; alus_imm    ] cmp\t%<w>0, #%n1
    }
  )
  
***************
*** 5091,5098 ****
  	(LOGICAL:GPI (match_operand:GPI 1 "register_operand")
  		     (match_operand:GPI 2 "aarch64_logical_operand")))]
    ""
!   {@ [ cons: =0 , 1  , 2        ; attrs: type , arch  ]
!      [ r        , %r , r        ; logic_reg   , *     ] <logical>\t%<w>0, %<w>1, %<w>2
       [ rk       , r  , <lconst> ; logic_imm   , *     ] <logical>\t%<w>0, %<w>1, %2
       [ w        , 0  , <lconst> ; *           , sve   ] <logical>\t%Z0.<s>, %Z0.<s>, #%2
       [ w        , w  , w        ; neon_logic  , simd  ] <logical>\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>
--- 5091,5098 ----
  	(LOGICAL:GPI (match_operand:GPI 1 "register_operand")
  		     (match_operand:GPI 2 "aarch64_logical_operand")))]
    ""
!   {@ [ cons: =0 , %1 , 2        ; attrs: type , arch  ]
!      [ r        , r  , r        ; logic_reg   , *     ] <logical>\t%<w>0, %<w>1, %<w>2
       [ rk       , r  , <lconst> ; logic_imm   , *     ] <logical>\t%<w>0, %<w>1, %2
       [ w        , 0  , <lconst> ; *           , sve   ] <logical>\t%Z0.<s>, %Z0.<s>, #%2
       [ w        , w  , w        ; neon_logic  , simd  ] <logical>\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>
***************
*** 5106,5113 ****
           (LOGICAL:SI (match_operand:SI 1 "register_operand")
  		     (match_operand:SI 2 "aarch64_logical_operand"))))]
    ""
!   {@ [ cons: =0 , 1  , 2 ; attrs: type ]
!      [ r        , %r , r ; logic_reg   ] <logical>\t%w0, %w1, %w2
       [ rk       , r  , K ; logic_imm   ] <logical>\t%w0, %w1, %2
    }
  )
--- 5106,5113 ----
           (LOGICAL:SI (match_operand:SI 1 "register_operand")
  		     (match_operand:SI 2 "aarch64_logical_operand"))))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , r  , r ; logic_reg   ] <logical>\t%w0, %w1, %w2
       [ rk       , r  , K ; logic_imm   ] <logical>\t%w0, %w1, %2
    }
  )
***************
*** 5121,5128 ****
     (set (match_operand:GPI 0 "register_operand")
  	(and:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , 1  , 2        ; attrs: type ]
!      [ r        , %r , r        ; logics_reg  ] ands\t%<w>0, %<w>1, %<w>2
       [ r        , r  , <lconst> ; logics_imm  ] ands\t%<w>0, %<w>1, %2
    }
  )
--- 5121,5128 ----
     (set (match_operand:GPI 0 "register_operand")
  	(and:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , %1 , 2        ; attrs: type ]
!      [ r        , r  , r        ; logics_reg  ] ands\t%<w>0, %<w>1, %<w>2
       [ r        , r  , <lconst> ; logics_imm  ] ands\t%<w>0, %<w>1, %2
    }
  )
***************
*** 5137,5144 ****
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , 1  , 2 ; attrs: type ]
!      [ r        , %r , r ; logics_reg  ] ands\t%w0, %w1, %w2
       [ r        , r  , K ; logics_imm  ] ands\t%w0, %w1, %2
    }
  )
--- 5137,5144 ----
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , r  , r ; logics_reg  ] ands\t%w0, %w1, %w2
       [ r        , r  , K ; logics_imm  ] ands\t%w0, %w1, %2
    }
  )
***************
*** 5722,5730 ****
  		  (match_operand:GPI 1 "aarch64_logical_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: 0 , 1        ; attrs: type ]
!      [ %r      , r        ; logics_reg  ] tst\t%<w>0, %<w>1
!      [ r       , <lconst> ; logics_imm  ] tst\t%<w>0, %1
    }
  )
  
--- 5722,5730 ----
  		  (match_operand:GPI 1 "aarch64_logical_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: %0 , 1        ; attrs: type ]
!      [ r        , r        ; logics_reg  ] tst\t%<w>0, %<w>1
!      [ r        , <lconst> ; logics_imm  ] tst\t%<w>0, %1
    }
  )
  
diff -Nrcpad gcc-16-20250504/gcc/config/arm/arm.cc gcc-16-20250511/gcc/config/arm/arm.cc
*** gcc-16-20250504/gcc/config/arm/arm.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/arm/arm.cc	Sun May 11 22:32:09 2025
*************** arm_select_cc_mode (enum rtx_code op, rt
*** 16211,16224 ****
  	case UNGT:
  	case UNGE:
  	case UNEQ:
- 	case LTGT:
  	  return CCFPmode;
  
  	case LT:
  	case LE:
  	case GT:
  	case GE:
! 	  return CCFPEmode;
  
  	default:
  	  gcc_unreachable ();
--- 16211,16226 ----
  	case UNGT:
  	case UNGE:
  	case UNEQ:
  	  return CCFPmode;
  
  	case LT:
  	case LE:
  	case GT:
  	case GE:
! 	case LTGT:
! 	  return (flag_finite_math_only
! 		  ? CCFPmode
! 		  : CCFPEmode);
  
  	default:
  	  gcc_unreachable ();
diff -Nrcpad gcc-16-20250504/gcc/config/arm/arm.h gcc-16-20250511/gcc/config/arm/arm.h
*** gcc-16-20250504/gcc/config/arm/arm.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/arm/arm.h	Sun May 11 22:32:09 2025
*************** extern int making_const_table;
*** 2257,2263 ****
  
  #define SELECT_CC_MODE(OP, X, Y)  arm_select_cc_mode (OP, X, Y)
  
! #define REVERSIBLE_CC_MODE(MODE) 1
  
  #define REVERSE_CONDITION(CODE,MODE) \
    (((MODE) == CCFPmode || (MODE) == CCFPEmode) \
--- 2257,2267 ----
  
  #define SELECT_CC_MODE(OP, X, Y)  arm_select_cc_mode (OP, X, Y)
  
! /* Floating-point modes cannot be reversed unless we don't care about
!    NaNs.  */
! #define REVERSIBLE_CC_MODE(MODE)			\
!   (flag_finite_math_only				\
!    || !((MODE) == CCFPmode || (MODE) == CCFPEmode))
  
  #define REVERSE_CONDITION(CODE,MODE) \
    (((MODE) == CCFPmode || (MODE) == CCFPEmode) \
diff -Nrcpad gcc-16-20250504/gcc/config/i386/cygming.h gcc-16-20250511/gcc/config/i386/cygming.h
*** gcc-16-20250504/gcc/config/i386/cygming.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/cygming.h	Sun May 11 22:32:09 2025
*************** along with GCC; see the file COPYING3.
*** 28,43 ****
  #undef TARGET_SEH
  #define TARGET_SEH  (TARGET_64BIT_MS_ABI && flag_unwind_tables)
  
  /* Win64 with SEH cannot represent DRAP stack frames.  Disable its use.
     Force the use of different mechanisms to allocate aligned local data.  */
  #undef MAX_STACK_ALIGNMENT
  #define MAX_STACK_ALIGNMENT  (TARGET_SEH ? 128 : MAX_OFILE_ALIGNMENT)
  
- /* 32-bit Windows aligns the stack on a 4-byte boundary but SSE instructions
-    may require 16-byte alignment.  */
- #undef STACK_REALIGN_DEFAULT
- #define STACK_REALIGN_DEFAULT (TARGET_64BIT ? 0 : 1)
- 
  /* Support hooks for SEH.  */
  #undef  TARGET_ASM_UNWIND_EMIT
  #define TARGET_ASM_UNWIND_EMIT  i386_pe_seh_unwind_emit
--- 28,42 ----
  #undef TARGET_SEH
  #define TARGET_SEH  (TARGET_64BIT_MS_ABI && flag_unwind_tables)
  
+ #undef PREFERRED_STACK_BOUNDARY_DEFAULT
+ #define PREFERRED_STACK_BOUNDARY_DEFAULT \
+   (TARGET_64BIT ? 128 : MIN_STACK_BOUNDARY)
+ 
  /* Win64 with SEH cannot represent DRAP stack frames.  Disable its use.
     Force the use of different mechanisms to allocate aligned local data.  */
  #undef MAX_STACK_ALIGNMENT
  #define MAX_STACK_ALIGNMENT  (TARGET_SEH ? 128 : MAX_OFILE_ALIGNMENT)
  
  /* Support hooks for SEH.  */
  #undef  TARGET_ASM_UNWIND_EMIT
  #define TARGET_ASM_UNWIND_EMIT  i386_pe_seh_unwind_emit
diff -Nrcpad gcc-16-20250504/gcc/config/i386/host-mingw32.cc gcc-16-20250511/gcc/config/i386/host-mingw32.cc
*** gcc-16-20250504/gcc/config/i386/host-mingw32.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/host-mingw32.cc	Sun May 11 22:32:09 2025
*************** mingw32_gt_pch_use_address (void *&addr,
*** 135,141 ****
       and earlier, backslashes are invalid in object name.  So, we need
       to check if we are on Windows2000 or higher.  */
    OSVERSIONINFO version_info;
-   int r;
  
    version_info.dwOSVersionInfoSize = sizeof (version_info);
  
--- 135,140 ----
*************** mingw32_gt_pch_use_address (void *&addr,
*** 169,193 ****
        return -1;
      }
  
!   /* Retry five times, as here might occure a race with multiple gcc's
!      instances at same time.  */
!   for (r = 0; r < 5; r++)
!    {
!       mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
! 				   size, addr);
!       if (mmap_addr == addr)
! 	break;
!       if (r != 4)
!         Sleep (500);
!    }
! 
!   if (mmap_addr != addr)
      {
!       w32_error (__FUNCTION__, __FILE__, __LINE__, "MapViewOfFileEx");
!       CloseHandle(mmap_handle);
!       return  -1;
      }
  
    return 1;
  }
  
--- 168,191 ----
        return -1;
      }
  
!   /* Try mapping the file at `addr`.  */
!   mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
! 			       size, addr);
!   if (mmap_addr == NULL)
      {
!       /* We could not map the file at its original address, so let the
! 	 system choose a different one. The PCH can be relocated later.  */
!       mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
! 				   size, NULL);
!       if (mmap_addr == NULL)
! 	{
! 	  w32_error (__FUNCTION__, __FILE__, __LINE__, "MapViewOfFileEx");
! 	  CloseHandle(mmap_handle);
! 	  return  -1;
! 	}
      }
  
+   addr = mmap_addr;
    return 1;
  }
  
diff -Nrcpad gcc-16-20250504/gcc/config/i386/i386-features.cc gcc-16-20250511/gcc/config/i386/i386-features.cc
*** gcc-16-20250504/gcc/config/i386/i386-features.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/i386-features.cc	Sun May 11 22:32:09 2025
*************** scalar_chain::build (bitmap candidates,
*** 518,532 ****
     instead of using a scalar one.  */
  
  int
! general_scalar_chain::vector_const_cost (rtx exp)
  {
    gcc_assert (CONST_INT_P (exp));
  
    if (standard_sse_constant_p (exp, vmode))
      return ix86_cost->sse_op;
    /* We have separate costs for SImode and DImode, use SImode costs
       for smaller modes.  */
!   return ix86_cost->sse_load[smode == DImode ? 1 : 0];
  }
  
  /* Compute a gain for chain conversion.  */
--- 518,534 ----
     instead of using a scalar one.  */
  
  int
! general_scalar_chain::vector_const_cost (rtx exp, basic_block bb)
  {
    gcc_assert (CONST_INT_P (exp));
  
    if (standard_sse_constant_p (exp, vmode))
      return ix86_cost->sse_op;
+   if (optimize_bb_for_size_p (bb))
+     return COSTS_N_BYTES (8);
    /* We have separate costs for SImode and DImode, use SImode costs
       for smaller modes.  */
!   return COSTS_N_INSNS (ix86_cost->sse_load[smode == DImode ? 1 : 0]) / 2;
  }
  
  /* Compute a gain for chain conversion.  */
*************** general_scalar_chain::compute_convert_ga
*** 547,553 ****
       smaller modes than SImode the int load/store costs need to be
       adjusted as well.  */
    unsigned sse_cost_idx = smode == DImode ? 1 : 0;
!   unsigned m = smode == DImode ? (TARGET_64BIT ? 1 : 2) : 1;
  
    EXECUTE_IF_SET_IN_BITMAP (insns, 0, insn_uid, bi)
      {
--- 549,555 ----
       smaller modes than SImode the int load/store costs need to be
       adjusted as well.  */
    unsigned sse_cost_idx = smode == DImode ? 1 : 0;
!   int m = smode == DImode ? (TARGET_64BIT ? 1 : 2) : 1;
  
    EXECUTE_IF_SET_IN_BITMAP (insns, 0, insn_uid, bi)
      {
*************** general_scalar_chain::compute_convert_ga
*** 555,580 ****
        rtx def_set = single_set (insn);
        rtx src = SET_SRC (def_set);
        rtx dst = SET_DEST (def_set);
        int igain = 0;
  
        if (REG_P (src) && REG_P (dst))
! 	igain += 2 * m - ix86_cost->xmm_move;
        else if (REG_P (src) && MEM_P (dst))
! 	igain
! 	  += m * ix86_cost->int_store[2] - ix86_cost->sse_store[sse_cost_idx];
        else if (MEM_P (src) && REG_P (dst))
! 	igain += m * ix86_cost->int_load[2] - ix86_cost->sse_load[sse_cost_idx];
        else
  	{
  	  /* For operations on memory operands, include the overhead
  	     of explicit load and store instructions.  */
  	  if (MEM_P (dst))
! 	    igain += optimize_insn_for_size_p ()
! 		     ? -COSTS_N_BYTES (8)
! 		     : (m * (ix86_cost->int_load[2]
! 			     + ix86_cost->int_store[2])
! 			- (ix86_cost->sse_load[sse_cost_idx] +
! 			   ix86_cost->sse_store[sse_cost_idx]));
  
  	  switch (GET_CODE (src))
  	    {
--- 557,611 ----
        rtx def_set = single_set (insn);
        rtx src = SET_SRC (def_set);
        rtx dst = SET_DEST (def_set);
+       basic_block bb = BLOCK_FOR_INSN (insn);
        int igain = 0;
  
        if (REG_P (src) && REG_P (dst))
! 	{
! 	  if (optimize_bb_for_size_p (bb))
! 	    /* reg-reg move is 2 bytes, while SSE 3.  */
! 	    igain += COSTS_N_BYTES (2 * m - 3);
! 	  else
! 	    /* Move costs are normalized to reg-reg move having cost 2.  */
! 	    igain += COSTS_N_INSNS (2 * m - ix86_cost->xmm_move) / 2;
! 	}
        else if (REG_P (src) && MEM_P (dst))
! 	{
! 	  if (optimize_bb_for_size_p (bb))
! 	    /* Integer load/store is 3+ bytes and SSE 4+.  */
! 	    igain += COSTS_N_BYTES (3 * m - 4);
! 	  else
! 	    igain
! 	      += COSTS_N_INSNS (m * ix86_cost->int_store[2]
! 				- ix86_cost->sse_store[sse_cost_idx]) / 2;
! 	}
        else if (MEM_P (src) && REG_P (dst))
! 	{
! 	  if (optimize_bb_for_size_p (bb))
! 	    igain += COSTS_N_BYTES (3 * m - 4);
! 	  else
! 	    igain += COSTS_N_INSNS (m * ix86_cost->int_load[2]
! 				    - ix86_cost->sse_load[sse_cost_idx]) / 2;
! 	}
        else
  	{
  	  /* For operations on memory operands, include the overhead
  	     of explicit load and store instructions.  */
  	  if (MEM_P (dst))
! 	    {
! 	      if (optimize_bb_for_size_p (bb))
! 		/* ??? This probably should account size difference
! 		   of SSE and integer load rather than full SSE load.  */
! 		igain -= COSTS_N_BYTES (8);
! 	      else
! 		{
! 		  int cost = (m * (ix86_cost->int_load[2]
! 				   + ix86_cost->int_store[2])
! 			     - (ix86_cost->sse_load[sse_cost_idx] +
! 				ix86_cost->sse_store[sse_cost_idx]));
! 		  igain += COSTS_N_INSNS (cost) / 2;
! 		}
! 	    }
  
  	  switch (GET_CODE (src))
  	    {
*************** general_scalar_chain::compute_convert_ga
*** 595,601 ****
  	      igain += ix86_cost->shift_const - ix86_cost->sse_op;
  
  	      if (CONST_INT_P (XEXP (src, 0)))
! 		igain -= vector_const_cost (XEXP (src, 0));
  	      break;
  
  	    case ROTATE:
--- 626,632 ----
  	      igain += ix86_cost->shift_const - ix86_cost->sse_op;
  
  	      if (CONST_INT_P (XEXP (src, 0)))
! 		igain -= vector_const_cost (XEXP (src, 0), bb);
  	      break;
  
  	    case ROTATE:
*************** general_scalar_chain::compute_convert_ga
*** 631,646 ****
  		igain += m * ix86_cost->add;
  
  	      if (CONST_INT_P (XEXP (src, 0)))
! 		igain -= vector_const_cost (XEXP (src, 0));
  	      if (CONST_INT_P (XEXP (src, 1)))
! 		igain -= vector_const_cost (XEXP (src, 1));
  	      if (MEM_P (XEXP (src, 1)))
  		{
! 		  if (optimize_insn_for_size_p ())
  		    igain -= COSTS_N_BYTES (m == 2 ? 3 : 5);
  		  else
! 		    igain += m * ix86_cost->int_load[2]
! 			     - ix86_cost->sse_load[sse_cost_idx];
  		}
  	      break;
  
--- 662,678 ----
  		igain += m * ix86_cost->add;
  
  	      if (CONST_INT_P (XEXP (src, 0)))
! 		igain -= vector_const_cost (XEXP (src, 0), bb);
  	      if (CONST_INT_P (XEXP (src, 1)))
! 		igain -= vector_const_cost (XEXP (src, 1), bb);
  	      if (MEM_P (XEXP (src, 1)))
  		{
! 		  if (optimize_bb_for_size_p (bb))
  		    igain -= COSTS_N_BYTES (m == 2 ? 3 : 5);
  		  else
! 		    igain += COSTS_N_INSNS
! 			       (m * ix86_cost->int_load[2]
! 				 - ix86_cost->sse_load[sse_cost_idx]) / 2;
  		}
  	      break;
  
*************** general_scalar_chain::compute_convert_ga
*** 698,704 ****
  	    case CONST_INT:
  	      if (REG_P (dst))
  		{
! 		  if (optimize_insn_for_size_p ())
  		    {
  		      /* xor (2 bytes) vs. xorps (3 bytes).  */
  		      if (src == const0_rtx)
--- 730,736 ----
  	    case CONST_INT:
  	      if (REG_P (dst))
  		{
! 		  if (optimize_bb_for_size_p (bb))
  		    {
  		      /* xor (2 bytes) vs. xorps (3 bytes).  */
  		      if (src == const0_rtx)
*************** general_scalar_chain::compute_convert_ga
*** 722,735 ****
  		      /* DImode can be immediate for TARGET_64BIT
  			 and SImode always.  */
  		      igain += m * COSTS_N_INSNS (1);
! 		      igain -= vector_const_cost (src);
  		    }
  		}
  	      else if (MEM_P (dst))
  		{
  		  igain += (m * ix86_cost->int_store[2]
  			    - ix86_cost->sse_store[sse_cost_idx]);
! 		  igain -= vector_const_cost (src);
  		}
  	      break;
  
--- 754,767 ----
  		      /* DImode can be immediate for TARGET_64BIT
  			 and SImode always.  */
  		      igain += m * COSTS_N_INSNS (1);
! 		      igain -= vector_const_cost (src, bb);
  		    }
  		}
  	      else if (MEM_P (dst))
  		{
  		  igain += (m * ix86_cost->int_store[2]
  			    - ix86_cost->sse_store[sse_cost_idx]);
! 		  igain -= vector_const_cost (src, bb);
  		}
  	      break;
  
*************** general_scalar_chain::compute_convert_ga
*** 737,749 ****
  	      if (XVECEXP (XEXP (src, 1), 0, 0) == const0_rtx)
  		{
  		  // movd (4 bytes) replaced with movdqa (4 bytes).
! 		  if (!optimize_insn_for_size_p ())
! 		    igain += ix86_cost->sse_to_integer - ix86_cost->xmm_move;
  		}
  	      else
  		{
  		  // pshufd; movd replaced with pshufd.
! 		  if (optimize_insn_for_size_p ())
  		    igain += COSTS_N_BYTES (4);
  		  else
  		    igain += ix86_cost->sse_to_integer;
--- 769,782 ----
  	      if (XVECEXP (XEXP (src, 1), 0, 0) == const0_rtx)
  		{
  		  // movd (4 bytes) replaced with movdqa (4 bytes).
! 		  if (!optimize_bb_for_size_p (bb))
! 		    igain += COSTS_N_INSNS (ix86_cost->sse_to_integer
! 					    - ix86_cost->xmm_move) / 2;
  		}
  	      else
  		{
  		  // pshufd; movd replaced with pshufd.
! 		  if (optimize_bb_for_size_p (bb))
  		    igain += COSTS_N_BYTES (4);
  		  else
  		    igain += ix86_cost->sse_to_integer;
*************** general_scalar_chain::compute_convert_ga
*** 769,779 ****
    /* Cost the integer to sse and sse to integer moves.  */
    if (!optimize_function_for_size_p (cfun))
      {
!       cost += n_sse_to_integer * ix86_cost->sse_to_integer;
        /* ???  integer_to_sse but we only have that in the RA cost table.
  	      Assume sse_to_integer/integer_to_sse are the same which they
  	      are at the moment.  */
!       cost += n_integer_to_sse * ix86_cost->sse_to_integer;
      }
    else if (TARGET_64BIT || smode == SImode)
      {
--- 802,812 ----
    /* Cost the integer to sse and sse to integer moves.  */
    if (!optimize_function_for_size_p (cfun))
      {
!       cost += n_sse_to_integer * COSTS_N_INSNS (ix86_cost->sse_to_integer) / 2;
        /* ???  integer_to_sse but we only have that in the RA cost table.
  	      Assume sse_to_integer/integer_to_sse are the same which they
  	      are at the moment.  */
!       cost += n_integer_to_sse * COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
      }
    else if (TARGET_64BIT || smode == SImode)
      {
*************** general_scalar_chain::convert_insn (rtx_
*** 1508,1520 ****
     with numerous special cases.  */
  
  static int
! timode_immed_const_gain (rtx cst)
  {
    /* movabsq vs. movabsq+vmovq+vunpacklqdq.  */
    if (CONST_WIDE_INT_P (cst)
        && CONST_WIDE_INT_NUNITS (cst) == 2
        && CONST_WIDE_INT_ELT (cst, 0) == CONST_WIDE_INT_ELT (cst, 1))
!     return optimize_insn_for_size_p () ? -COSTS_N_BYTES (9)
  				       : -COSTS_N_INSNS (2);
    /* 2x movabsq ~ vmovdqa.  */
    return 0;
--- 1541,1553 ----
     with numerous special cases.  */
  
  static int
! timode_immed_const_gain (rtx cst, basic_block bb)
  {
    /* movabsq vs. movabsq+vmovq+vunpacklqdq.  */
    if (CONST_WIDE_INT_P (cst)
        && CONST_WIDE_INT_NUNITS (cst) == 2
        && CONST_WIDE_INT_ELT (cst, 0) == CONST_WIDE_INT_ELT (cst, 1))
!     return optimize_bb_for_size_p (bb) ? -COSTS_N_BYTES (9)
  				       : -COSTS_N_INSNS (2);
    /* 2x movabsq ~ vmovdqa.  */
    return 0;
*************** timode_scalar_chain::compute_convert_gai
*** 1546,1578 ****
        rtx src = SET_SRC (def_set);
        rtx dst = SET_DEST (def_set);
        HOST_WIDE_INT op1val;
        int scost, vcost;
        int igain = 0;
  
        switch (GET_CODE (src))
  	{
  	case REG:
! 	  if (optimize_insn_for_size_p ())
  	    igain = MEM_P (dst) ? COSTS_N_BYTES (6) : COSTS_N_BYTES (3);
  	  else
  	    igain = COSTS_N_INSNS (1);
  	  break;
  
  	case MEM:
! 	  igain = optimize_insn_for_size_p () ? COSTS_N_BYTES (7)
  					      : COSTS_N_INSNS (1);
  	  break;
  
  	case CONST_INT:
  	  if (MEM_P (dst)
  	      && standard_sse_constant_p (src, V1TImode))
! 	    igain = optimize_insn_for_size_p () ? COSTS_N_BYTES (11) : 1;
  	  break;
  
  	case CONST_WIDE_INT:
  	  /* 2 x mov vs. vmovdqa.  */
  	  if (MEM_P (dst))
! 	    igain = optimize_insn_for_size_p () ? COSTS_N_BYTES (3)
  						: COSTS_N_INSNS (1);
  	  break;
  
--- 1579,1612 ----
        rtx src = SET_SRC (def_set);
        rtx dst = SET_DEST (def_set);
        HOST_WIDE_INT op1val;
+       basic_block bb = BLOCK_FOR_INSN (insn);
        int scost, vcost;
        int igain = 0;
  
        switch (GET_CODE (src))
  	{
  	case REG:
! 	  if (optimize_bb_for_size_p (bb))
  	    igain = MEM_P (dst) ? COSTS_N_BYTES (6) : COSTS_N_BYTES (3);
  	  else
  	    igain = COSTS_N_INSNS (1);
  	  break;
  
  	case MEM:
! 	  igain = optimize_bb_for_size_p (bb) ? COSTS_N_BYTES (7)
  					      : COSTS_N_INSNS (1);
  	  break;
  
  	case CONST_INT:
  	  if (MEM_P (dst)
  	      && standard_sse_constant_p (src, V1TImode))
! 	    igain = optimize_bb_for_size_p (bb) ? COSTS_N_BYTES (11) : 1;
  	  break;
  
  	case CONST_WIDE_INT:
  	  /* 2 x mov vs. vmovdqa.  */
  	  if (MEM_P (dst))
! 	    igain = optimize_bb_for_size_p (bb) ? COSTS_N_BYTES (3)
  						: COSTS_N_INSNS (1);
  	  break;
  
*************** timode_scalar_chain::compute_convert_gai
*** 1587,1600 ****
  	  if (!MEM_P (dst))
  	    igain = COSTS_N_INSNS (1);
  	  if (CONST_SCALAR_INT_P (XEXP (src, 1)))
! 	    igain += timode_immed_const_gain (XEXP (src, 1));
  	  break;
  
  	case ASHIFT:
  	case LSHIFTRT:
  	  /* See ix86_expand_v1ti_shift.  */
  	  op1val = INTVAL (XEXP (src, 1));
! 	  if (optimize_insn_for_size_p ())
  	    {
  	      if (op1val == 64 || op1val == 65)
  		scost = COSTS_N_BYTES (5);
--- 1621,1634 ----
  	  if (!MEM_P (dst))
  	    igain = COSTS_N_INSNS (1);
  	  if (CONST_SCALAR_INT_P (XEXP (src, 1)))
! 	    igain += timode_immed_const_gain (XEXP (src, 1), bb);
  	  break;
  
  	case ASHIFT:
  	case LSHIFTRT:
  	  /* See ix86_expand_v1ti_shift.  */
  	  op1val = INTVAL (XEXP (src, 1));
! 	  if (optimize_bb_for_size_p (bb))
  	    {
  	      if (op1val == 64 || op1val == 65)
  		scost = COSTS_N_BYTES (5);
*************** timode_scalar_chain::compute_convert_gai
*** 1628,1634 ****
  	case ASHIFTRT:
  	  /* See ix86_expand_v1ti_ashiftrt.  */
  	  op1val = INTVAL (XEXP (src, 1));
! 	  if (optimize_insn_for_size_p ())
  	    {
  	      if (op1val == 64 || op1val == 127)
  		scost = COSTS_N_BYTES (7);
--- 1662,1668 ----
  	case ASHIFTRT:
  	  /* See ix86_expand_v1ti_ashiftrt.  */
  	  op1val = INTVAL (XEXP (src, 1));
! 	  if (optimize_bb_for_size_p (bb))
  	    {
  	      if (op1val == 64 || op1val == 127)
  		scost = COSTS_N_BYTES (7);
*************** timode_scalar_chain::compute_convert_gai
*** 1706,1712 ****
  	case ROTATERT:
  	  /* See ix86_expand_v1ti_rotate.  */
  	  op1val = INTVAL (XEXP (src, 1));
! 	  if (optimize_insn_for_size_p ())
  	    {
  	      scost = COSTS_N_BYTES (13);
  	      if ((op1val & 31) == 0)
--- 1740,1746 ----
  	case ROTATERT:
  	  /* See ix86_expand_v1ti_rotate.  */
  	  op1val = INTVAL (XEXP (src, 1));
! 	  if (optimize_bb_for_size_p (bb))
  	    {
  	      scost = COSTS_N_BYTES (13);
  	      if ((op1val & 31) == 0)
*************** timode_scalar_chain::compute_convert_gai
*** 1738,1753 ****
  	    {
  	      if (GET_CODE (XEXP (src, 0)) == AND)
  		/* and;and;or (9 bytes) vs. ptest (5 bytes).  */
! 		igain = optimize_insn_for_size_p() ? COSTS_N_BYTES (4)
! 						   : COSTS_N_INSNS (2);
  	      /* or (3 bytes) vs. ptest (5 bytes).  */
! 	      else if (optimize_insn_for_size_p ())
  		igain = -COSTS_N_BYTES (2);
  	    }
  	  else if (XEXP (src, 1) == const1_rtx)
  	    /* and;cmp -1 (7 bytes) vs. pcmpeqd;pxor;ptest (13 bytes).  */
! 	    igain = optimize_insn_for_size_p() ? -COSTS_N_BYTES (6)
! 					       : -COSTS_N_INSNS (1);
  	  break;
  
  	default:
--- 1772,1787 ----
  	    {
  	      if (GET_CODE (XEXP (src, 0)) == AND)
  		/* and;and;or (9 bytes) vs. ptest (5 bytes).  */
! 		igain = optimize_bb_for_size_p (bb) ? COSTS_N_BYTES (4)
! 						    : COSTS_N_INSNS (2);
  	      /* or (3 bytes) vs. ptest (5 bytes).  */
! 	      else if (optimize_bb_for_size_p (bb))
  		igain = -COSTS_N_BYTES (2);
  	    }
  	  else if (XEXP (src, 1) == const1_rtx)
  	    /* and;cmp -1 (7 bytes) vs. pcmpeqd;pxor;ptest (13 bytes).  */
! 	    igain = optimize_bb_for_size_p (bb) ? -COSTS_N_BYTES (6)
! 						: -COSTS_N_INSNS (1);
  	  break;
  
  	default:
*************** ix86_get_vector_load_mode (unsigned int
*** 3309,3316 ****
      mode = V64QImode;
    else if (size == 32)
      mode = V32QImode;
!   else
      mode = V16QImode;
    return mode;
  }
  
--- 3343,3358 ----
      mode = V64QImode;
    else if (size == 32)
      mode = V32QImode;
!   else if (size == 16)
      mode = V16QImode;
+   else if (size == 8)
+     mode = V8QImode;
+   else if (size == 4)
+     mode = V4QImode;
+   else if (size == 2)
+     mode = V2QImode;
+   else
+     gcc_unreachable ();
    return mode;
  }
  
*************** replace_vector_const (machine_mode vecto
*** 3330,3350 ****
  
        /* Get the single SET instruction.  */
        rtx set = single_set (insn);
!       rtx dest = SET_SRC (set);
!       machine_mode mode = GET_MODE (dest);
  
        rtx replace;
        /* Replace the source operand with VECTOR_CONST.  */
!       if (SUBREG_P (dest) || mode == vector_mode)
  	replace = vector_const;
        else
! 	replace = gen_rtx_SUBREG (mode, vector_const, 0);
  
-       /* NB: Don't run recog_memoized here since vector SUBREG may not
- 	 be valid.  Let LRA handle vector SUBREG.  */
        SET_SRC (set) = replace;
        /* Drop possible dead definitions.  */
        PATTERN (insn) = set;
        df_insn_rescan (insn);
      }
  }
--- 3372,3415 ----
  
        /* Get the single SET instruction.  */
        rtx set = single_set (insn);
!       rtx src = SET_SRC (set);
!       machine_mode mode = GET_MODE (src);
  
        rtx replace;
        /* Replace the source operand with VECTOR_CONST.  */
!       if (SUBREG_P (src) || mode == vector_mode)
  	replace = vector_const;
        else
! 	{
! 	  unsigned int size = GET_MODE_SIZE (mode);
! 	  if (size < ix86_regmode_natural_size (mode))
! 	    {
! 	      /* If the mode size is smaller than its natural size,
! 		 first insert an extra move with a QI vector SUBREG
! 		 of the same size to avoid validate_subreg failure.  */
! 	      machine_mode vmode = ix86_get_vector_load_mode (size);
! 	      rtx vreg;
! 	      if (mode == vmode)
! 		vreg = vector_const;
! 	      else
! 		{
! 		  vreg = gen_reg_rtx (vmode);
! 		  rtx vsubreg = gen_rtx_SUBREG (vmode, vector_const, 0);
! 		  rtx pat = gen_rtx_SET (vreg, vsubreg);
! 		  rtx_insn *vinsn = emit_insn_before (pat, insn);
! 		  df_insn_rescan (vinsn);
! 		}
! 	      replace = gen_rtx_SUBREG (mode, vreg, 0);
! 	    }
! 	  else
! 	    replace = gen_rtx_SUBREG (mode, vector_const, 0);
! 	}
  
        SET_SRC (set) = replace;
        /* Drop possible dead definitions.  */
        PATTERN (insn) = set;
+       INSN_CODE (insn) = -1;
+       recog_memoized (insn);
        df_insn_rescan (insn);
      }
  }
diff -Nrcpad gcc-16-20250504/gcc/config/i386/i386-features.h gcc-16-20250511/gcc/config/i386/i386-features.h
*** gcc-16-20250504/gcc/config/i386/i386-features.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/i386-features.h	Sun May 11 22:32:09 2025
*************** class general_scalar_chain : public scal
*** 188,194 ****
  
   private:
    void convert_insn (rtx_insn *insn) final override;
!   int vector_const_cost (rtx exp);
    rtx convert_rotate (enum rtx_code, rtx op0, rtx op1, rtx_insn *insn);
  };
  
--- 188,194 ----
  
   private:
    void convert_insn (rtx_insn *insn) final override;
!   int vector_const_cost (rtx exp, basic_block bb);
    rtx convert_rotate (enum rtx_code, rtx op0, rtx op1, rtx_insn *insn);
  };
  
diff -Nrcpad gcc-16-20250504/gcc/config/i386/i386.cc gcc-16-20250511/gcc/config/i386/i386.cc
*** gcc-16-20250504/gcc/config/i386/i386.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/i386.cc	Sun May 11 22:32:09 2025
*************** ix86_update_stack_boundary (void)
*** 7942,7947 ****
--- 7942,7956 ----
    if (ix86_tls_descriptor_calls_expanded_in_cfun
        && crtl->preferred_stack_boundary < 128)
      crtl->preferred_stack_boundary = 128;
+ 
+   /* For 32-bit MS ABI, both the incoming and preferred stack boundaries
+      are 32 bits, but if force_align_arg_pointer is specified, it should
+      prefer 128 bits for a backward-compatibility reason, which is also
+      what the doc suggests.  */
+   if (lookup_attribute ("force_align_arg_pointer",
+ 			TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)))
+       && crtl->preferred_stack_boundary < 128)
+     crtl->preferred_stack_boundary = 128;
  }
  
  /* Handle the TARGET_GET_DRAP_RTX hook.  Return NULL if no DRAP is
*************** ix86_legitimate_constant_p (machine_mode
*** 11363,11368 ****
--- 11372,11380 ----
  	    x = XVECEXP (x, 0, 0);
  	    return (GET_CODE (x) == SYMBOL_REF
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_DYNAMIC);
+ 	  case UNSPEC_SECREL32:
+ 	    x = XVECEXP (x, 0, 0);
+ 	    return GET_CODE (x) == SYMBOL_REF;
  	  default:
  	    return false;
  	  }
*************** legitimate_pic_operand_p (rtx x)
*** 11499,11504 ****
--- 11511,11519 ----
  	    x = XVECEXP (inner, 0, 0);
  	    return (GET_CODE (x) == SYMBOL_REF
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_EXEC);
+ 	  case UNSPEC_SECREL32:
+ 	    x = XVECEXP (inner, 0, 0);
+ 	    return GET_CODE (x) == SYMBOL_REF;
  	  case UNSPEC_MACHOPIC_OFFSET:
  	    return legitimate_pic_address_disp_p (x);
  	  default:
*************** legitimate_pic_address_disp_p (rtx disp)
*** 11679,11684 ****
--- 11694,11702 ----
        disp = XVECEXP (disp, 0, 0);
        return (GET_CODE (disp) == SYMBOL_REF
  	      && SYMBOL_REF_TLS_MODEL (disp) == TLS_MODEL_LOCAL_DYNAMIC);
+     case UNSPEC_SECREL32:
+       disp = XVECEXP (disp, 0, 0);
+       return GET_CODE (disp) == SYMBOL_REF;
      }
  
    return false;
*************** ix86_legitimate_address_p (machine_mode,
*** 11956,11961 ****
--- 11974,11980 ----
  	  case UNSPEC_INDNTPOFF:
  	  case UNSPEC_NTPOFF:
  	  case UNSPEC_DTPOFF:
+ 	  case UNSPEC_SECREL32:
  	    break;
  
  	  default:
*************** ix86_legitimate_address_p (machine_mode,
*** 11981,11987 ****
  		  || GET_CODE (XEXP (XEXP (disp, 0), 0)) != UNSPEC
  		  || !CONST_INT_P (XEXP (XEXP (disp, 0), 1))
  		  || (XINT (XEXP (XEXP (disp, 0), 0), 1) != UNSPEC_DTPOFF
! 		      && XINT (XEXP (XEXP (disp, 0), 0), 1) != UNSPEC_NTPOFF))
  		/* Non-constant pic memory reference.  */
  		return false;
  	    }
--- 12000,12007 ----
  		  || GET_CODE (XEXP (XEXP (disp, 0), 0)) != UNSPEC
  		  || !CONST_INT_P (XEXP (XEXP (disp, 0), 1))
  		  || (XINT (XEXP (XEXP (disp, 0), 0), 1) != UNSPEC_DTPOFF
! 		      && XINT (XEXP (XEXP (disp, 0), 0), 1) != UNSPEC_NTPOFF
! 		      && XINT (XEXP (XEXP (disp, 0), 0), 1) != UNSPEC_SECREL32))
  		/* Non-constant pic memory reference.  */
  		return false;
  	    }
*************** get_thread_pointer (machine_mode tp_mode
*** 12305,12310 ****
--- 12325,12348 ----
    return tp;
  }
  
+ /* Construct the SYMBOL_REF for the _tls_index symbol.  */
+ 
+ static GTY(()) rtx ix86_tls_index_symbol;
+ 
+ #if TARGET_WIN32_TLS
+ static rtx
+ ix86_tls_index (void)
+ {
+   if (!ix86_tls_index_symbol)
+     ix86_tls_index_symbol = gen_rtx_SYMBOL_REF (SImode, "_tls_index");
+ 
+   if (flag_pic)
+     return gen_rtx_CONST (Pmode, gen_rtx_UNSPEC (Pmode, gen_rtvec (1, ix86_tls_index_symbol), UNSPEC_PCREL));
+   else
+     return ix86_tls_index_symbol;
+ }
+ #endif
+ 
  /* Construct the SYMBOL_REF for the tls_get_addr function.  */
  
  static GTY(()) rtx ix86_tls_symbol;
*************** legitimize_tls_address (rtx x, enum tls_
*** 12363,12368 ****
--- 12401,12426 ----
    machine_mode tp_mode = Pmode;
    int type;
  
+ #if TARGET_WIN32_TLS
+   off = gen_const_mem (SImode, ix86_tls_index ());
+   set_mem_alias_set (off, GOT_ALIAS_SET);
+ 
+   tp = gen_const_mem (Pmode, GEN_INT (TARGET_64BIT ? 88 : 44));
+   set_mem_addr_space (tp, DEFAULT_TLS_SEG_REG);
+ 
+   if (TARGET_64BIT)
+     off = convert_to_mode (Pmode, off, 1);
+ 
+   base = force_reg (Pmode, off);
+   tp = copy_to_mode_reg (Pmode, tp);
+ 
+   tp = gen_const_mem (Pmode, gen_rtx_PLUS (Pmode, tp, gen_rtx_MULT (Pmode, base, GEN_INT (UNITS_PER_WORD))));
+   set_mem_alias_set (tp, GOT_ALIAS_SET);
+ 
+   base = force_reg (Pmode, tp);
+ 
+   return gen_rtx_PLUS (Pmode, base, gen_rtx_CONST (Pmode, gen_rtx_UNSPEC (SImode, gen_rtvec (1, x), UNSPEC_SECREL32)));
+ #else
    /* Fall back to global dynamic model if tool chain cannot support local
       dynamic.  */
    if (TARGET_SUN_TLS && !TARGET_64BIT
*************** legitimize_tls_address (rtx x, enum tls_
*** 12585,12590 ****
--- 12643,12649 ----
      }
  
    return dest;
+ #endif
  }
  
  /* Return true if the TLS address requires insn using integer registers.
*************** output_pic_addr_const (FILE *file, rtx x
*** 13054,13059 ****
--- 13113,13121 ----
  	case UNSPEC_INDNTPOFF:
  	  fputs ("@indntpoff", file);
  	  break;
+ 	case UNSPEC_SECREL32:
+ 	  fputs ("@secrel32", file);
+ 	  break;
  #if TARGET_MACHO
  	case UNSPEC_MACHOPIC_OFFSET:
  	  putc ('-', file);
*************** i386_output_dwarf_dtprel (FILE *file, in
*** 13079,13085 ****
--- 13141,13151 ----
  {
    fputs (ASM_LONG, file);
    output_addr_const (file, x);
+ #if TARGET_WIN32_TLS
+   fputs ("@secrel32", file);
+ #else
    fputs ("@dtpoff", file);
+ #endif
    switch (size)
      {
      case 4:
*************** print_reg (rtx x, int code, FILE *file)
*** 13738,13747 ****
     H -- print a memory address offset by 8; used for sse high-parts
     Y -- print condition for XOP pcom* instruction.
     V -- print naked full integer register name without %.
     + -- print a branch hint as 'cs' or 'ds' prefix
     ; -- print a semicolon (after prefixes due to bug in older gas).
     ~ -- print "i" if TARGET_AVX2, "f" otherwise.
!    ^ -- print addr32 prefix if TARGET_64BIT and Pmode != word_mode
     M -- print addr32 prefix for TARGET_X32 with VSIB address.
     ! -- print NOTRACK prefix for jxx/call/ret instructions if required.
     N -- print maskz if it's constant 0 operand.
--- 13804,13814 ----
     H -- print a memory address offset by 8; used for sse high-parts
     Y -- print condition for XOP pcom* instruction.
     V -- print naked full integer register name without %.
+    v -- print segment override prefix
     + -- print a branch hint as 'cs' or 'ds' prefix
     ; -- print a semicolon (after prefixes due to bug in older gas).
     ~ -- print "i" if TARGET_AVX2, "f" otherwise.
!    ^ -- print addr32 prefix if Pmode != word_mode
     M -- print addr32 prefix for TARGET_X32 with VSIB address.
     ! -- print NOTRACK prefix for jxx/call/ret instructions if required.
     N -- print maskz if it's constant 0 operand.
*************** ix86_print_operand (FILE *file, rtx x, i
*** 14243,14248 ****
--- 14310,14337 ----
  
  	  return;
  
+ 	case 'v':
+ 	  if (MEM_P (x))
+ 	    {
+ 	      switch (MEM_ADDR_SPACE (x))
+ 		{
+ 		case ADDR_SPACE_GENERIC:
+ 		  break;
+ 		case ADDR_SPACE_SEG_FS:
+ 		  fputs ("fs ", file);
+ 		  break;
+ 		case ADDR_SPACE_SEG_GS:
+ 		  fputs ("gs ", file);
+ 		  break;
+ 		default:
+ 		  gcc_unreachable ();
+ 		}
+ 	    }
+ 	  else
+ 	    output_operand_lossage ("operand is not a memory reference, "
+ 				    "invalid operand code 'v'");
+ 	  return;
+ 
  	case '*':
  	  if (ASSEMBLER_DIALECT == ASM_ATT)
  	    putc ('*', file);
*************** i386_asm_output_addr_const_extra (FILE *
*** 14832,14837 ****
--- 14921,14930 ----
        output_addr_const (file, op);
        fputs ("@indntpoff", file);
        break;
+     case UNSPEC_SECREL32:
+       output_addr_const (file, op);
+       fputs ("@secrel32", file);
+       break;
  #if TARGET_MACHO
      case UNSPEC_MACHOPIC_OFFSET:
        output_addr_const (file, op);
*************** ix86_widen_mult_cost (const struct proce
*** 21660,21666 ****
        /* pmuludq under sse2, pmuldq under sse4.1, for sign_extend,
  	 require extra 4 mul, 4 add, 4 cmp and 2 shift.  */
        if (!TARGET_SSE4_1 && !uns_p)
! 	extra_cost = (cost->mulss + cost->addss + cost->sse_op) * 4
  		      + cost->sse_op * 2;
        /* Fallthru.  */
      case V4DImode:
--- 21753,21759 ----
        /* pmuludq under sse2, pmuldq under sse4.1, for sign_extend,
  	 require extra 4 mul, 4 add, 4 cmp and 2 shift.  */
        if (!TARGET_SSE4_1 && !uns_p)
! 	extra_cost = (cost->mulss + cost->sse_op + cost->sse_op) * 4
  		      + cost->sse_op * 2;
        /* Fallthru.  */
      case V4DImode:
*************** ix86_multiplication_cost (const struct p
*** 21710,21720 ****
  	  else if (TARGET_AVX2)
  	    nops += 2;
  	  else if (TARGET_XOP)
! 	    extra += cost->sse_load[2];
  	  else
  	    {
  	      nops += 1;
! 	      extra += cost->sse_load[2];
  	    }
  	  goto do_qimode;
  
--- 21803,21813 ----
  	  else if (TARGET_AVX2)
  	    nops += 2;
  	  else if (TARGET_XOP)
! 	    extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
  	  else
  	    {
  	      nops += 1;
! 	      extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
  	    }
  	  goto do_qimode;
  
*************** ix86_multiplication_cost (const struct p
*** 21733,21745 ****
  	    {
  	      nmults += 1;
  	      nops += 2;
! 	      extra += cost->sse_load[2];
  	    }
  	  else
  	    {
  	      nmults += 1;
  	      nops += 4;
! 	      extra += cost->sse_load[2];
  	    }
  	  goto do_qimode;
  
--- 21826,21838 ----
  	    {
  	      nmults += 1;
  	      nops += 2;
! 	      extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
  	    }
  	  else
  	    {
  	      nmults += 1;
  	      nops += 4;
! 	      extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
  	    }
  	  goto do_qimode;
  
*************** ix86_multiplication_cost (const struct p
*** 21752,21765 ****
  	    {
  	      nmults += 1;
  	      nops += 4;
! 	      extra += cost->sse_load[3] * 2;
  	    }
  	  goto do_qimode;
  
  	case V64QImode:
  	  nmults = 2;
  	  nops = 9;
! 	  extra = cost->sse_load[3] * 2 + cost->sse_load[4] * 2;
  
  	do_qimode:
  	  return ix86_vec_cost (mode, cost->mulss * nmults
--- 21845,21860 ----
  	    {
  	      nmults += 1;
  	      nops += 4;
! 	      /* 2 loads, so no division by 2.  */
! 	      extra += COSTS_N_INSNS (cost->sse_load[3]);
  	    }
  	  goto do_qimode;
  
  	case V64QImode:
  	  nmults = 2;
  	  nops = 9;
! 	  /* 2 loads of each size, so no division by 2.  */
! 	  extra = COSTS_N_INSNS (cost->sse_load[3] + cost->sse_load[4]);
  
  	do_qimode:
  	  return ix86_vec_cost (mode, cost->mulss * nmults
*************** ix86_shift_rotate_cost (const struct pro
*** 21852,21858 ****
  	    /* Use vpbroadcast.  */
  	    extra = cost->sse_op;
  	  else
! 	    extra = cost->sse_load[2];
  
  	  if (constant_op1)
  	    {
--- 21947,21953 ----
  	    /* Use vpbroadcast.  */
  	    extra = cost->sse_op;
  	  else
! 	    extra = COSTS_N_INSNS (cost->sse_load[2]) / 2;
  
  	  if (constant_op1)
  	    {
*************** ix86_shift_rotate_cost (const struct pro
*** 21883,21889 ****
  		 shift with one insn set the cost to prefer paddb.  */
  	      if (constant_op1)
  		{
! 		  extra = cost->sse_load[2];
  		  return ix86_vec_cost (mode, cost->sse_op) + extra;
  		}
  	      else
--- 21978,21984 ----
  		 shift with one insn set the cost to prefer paddb.  */
  	      if (constant_op1)
  		{
! 		  extra = COSTS_N_INSNS (cost->sse_load[2]) / 2;
  		  return ix86_vec_cost (mode, cost->sse_op) + extra;
  		}
  	      else
*************** ix86_shift_rotate_cost (const struct pro
*** 21898,21904 ****
  	    /* Use vpbroadcast.  */
  	    extra = cost->sse_op;
  	  else
! 	    extra = (mode == V16QImode) ? cost->sse_load[2] : cost->sse_load[3];
  
  	  if (constant_op1)
  	    {
--- 21993,22001 ----
  	    /* Use vpbroadcast.  */
  	    extra = cost->sse_op;
  	  else
! 	    extra = COSTS_N_INSNS (mode == V16QImode
! 				   ? cost->sse_load[2]
! 				   : cost->sse_load[3]) / 2;
  
  	  if (constant_op1)
  	    {
*************** ix86_rtx_costs (rtx x, machine_mode mode
*** 22710,22715 ****
--- 22807,22833 ----
        else
  	*total = vec_fp_conversion_cost (cost, GET_MODE_BITSIZE (mode));
        return false;
+     case FLOAT:
+     case UNSIGNED_FLOAT:
+       if (!SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode))
+ 	/* TODO: We do not have cost tables for x87.  */
+ 	*total = cost->fadd;
+       else if (VECTOR_MODE_P (mode))
+ 	*total = ix86_vec_cost (mode, cost->cvtpi2ps);
+       else
+ 	*total = cost->cvtsi2ss;
+       return false;
+ 
+     case FIX:
+     case UNSIGNED_FIX:
+       if (!SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode))
+ 	/* TODO: We do not have cost tables for x87.  */
+ 	*total = cost->fadd;
+       else if (VECTOR_MODE_P (mode))
+ 	*total = ix86_vec_cost (mode, cost->cvtps2pi);
+       else
+ 	*total = cost->cvtss2si;
+       return false;
  
      case ABS:
        /* SSE requires memory load for the constant operand. It may make
*************** ix86_vector_costs::add_stmt_cost (int co
*** 25662,25667 ****
--- 25780,25805 ----
  			  (ix86_tune_cost, GET_MODE_BITSIZE (mode));
  	  break;
  
+ 	case FLOAT_EXPR:
+ 	    if (SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode))
+ 	      stmt_cost = ix86_cost->cvtsi2ss;
+ 	    else if (X87_FLOAT_MODE_P (mode))
+ 	      /* TODO: We do not have cost tables for x87.  */
+ 	      stmt_cost = ix86_cost->fadd;
+ 	    else
+ 	      stmt_cost = ix86_vec_cost (mode, ix86_cost->cvtpi2ps);
+ 	    break;
+ 
+ 	case FIX_TRUNC_EXPR:
+ 	    if (SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode))
+ 	      stmt_cost = ix86_cost->cvtss2si;
+ 	    else if (X87_FLOAT_MODE_P (mode))
+ 	      /* TODO: We do not have cost tables for x87.  */
+ 	      stmt_cost = ix86_cost->fadd;
+ 	    else
+ 	      stmt_cost = ix86_vec_cost (mode, ix86_cost->cvtps2pi);
+ 	    break;
+ 
  	case COND_EXPR:
  	  {
  	    /* SSE2 conditinal move sequence is:
*************** ix86_vector_costs::add_stmt_cost (int co
*** 25825,25832 ****
  	break;
        }
  
!   if (kind == vec_promote_demote
!       && fp && FLOAT_TYPE_P (TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt))))
      {
        int outer_size
  	= tree_to_uhwi
--- 25963,25969 ----
  	break;
        }
  
!   if (kind == vec_promote_demote)
      {
        int outer_size
  	= tree_to_uhwi
*************** ix86_vector_costs::add_stmt_cost (int co
*** 25836,25851 ****
  	= tree_to_uhwi
  	    (TYPE_SIZE
  		(TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt))));
!       int stmt_cost = vec_fp_conversion_cost
! 			(ix86_tune_cost, GET_MODE_BITSIZE (mode));
!       /* VEC_PACK_TRUNC_EXPR: If inner size is greater than outer size we will end
! 	 up doing two conversions and packing them.  */
        if (inner_size > outer_size)
! 	{
! 	  int n = inner_size / outer_size;
! 	  stmt_cost = stmt_cost * n
! 		      + (n - 1) * ix86_vec_cost (mode, ix86_cost->sse_op);
! 	}
      }
  
    /* If we do elementwise loads into a vector then we are bound by
--- 25973,25997 ----
  	= tree_to_uhwi
  	    (TYPE_SIZE
  		(TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt))));
!       bool inner_fp = FLOAT_TYPE_P
! 			(TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt)));
! 
!       if (fp && inner_fp)
! 	stmt_cost = vec_fp_conversion_cost
! 			  (ix86_tune_cost, GET_MODE_BITSIZE (mode));
!       else if (fp && !inner_fp)
! 	stmt_cost = ix86_vec_cost (mode, ix86_cost->cvtpi2ps);
!       else if (!fp && inner_fp)
! 	stmt_cost = ix86_vec_cost (mode, ix86_cost->cvtps2pi);
!       else
! 	stmt_cost = ix86_vec_cost (mode, ix86_cost->sse_op);
!       /* VEC_PACK_TRUNC_EXPR and similar demote operations: If outer size is
! 	 greater than inner size we will end up doing two conversions and
! 	 packing them.  We always pack pairs; if the size difference is greater
! 	 it is split into multiple demote operations.  */
        if (inner_size > outer_size)
! 	stmt_cost = stmt_cost * 2
! 		    + ix86_vec_cost (mode, ix86_cost->sse_op);
      }
  
    /* If we do elementwise loads into a vector then we are bound by
*************** ix86_vector_costs::add_stmt_cost (int co
*** 25918,25924 ****
  	      else
  		{
  		  m_num_gpr_needed[where]++;
! 		  stmt_cost += ix86_cost->sse_to_integer;
  		}
  	    }
  	}
--- 26064,26070 ----
  	      else
  		{
  		  m_num_gpr_needed[where]++;
! 		  stmt_cost += COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
  		}
  	    }
  	}
diff -Nrcpad gcc-16-20250504/gcc/config/i386/i386.h gcc-16-20250511/gcc/config/i386/i386.h
*** gcc-16-20250504/gcc/config/i386/i386.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/i386.h	Sun May 11 22:32:09 2025
*************** struct processor_costs {
*** 179,184 ****
--- 179,185 ----
    const int xmm_move, ymm_move, /* cost of moving XMM and YMM register.  */
  	    zmm_move;
    const int sse_to_integer;	/* cost of moving SSE register to integer.  */
+   const int integer_to_sse;	/* cost of moving integer register to SSE. */
    const int gather_static, gather_per_elt; /* Cost of gather load is computed
  				   as static + per_item * nelts. */
    const int scatter_static, scatter_per_elt; /* Cost of gather store is
*************** struct processor_costs {
*** 213,218 ****
--- 214,223 ----
  				   such as VCVTPD2PS with larger reg in ymm.  */
    const int vcvtps2pd512;	/* cost 512bit packed FP conversions,
  				   such as VCVTPD2PS with larger reg in zmm.  */
+   const int cvtsi2ss;		/* cost of CVTSI2SS instruction.  */
+   const int cvtss2si;		/* cost of CVT(T)SS2SI instruction.  */
+   const int cvtpi2ps;		/* cost of CVTPI2PS instruction.  */
+   const int cvtps2pi;		/* cost of CVT(T)PS2PI instruction.  */
    const int reassoc_int, reassoc_fp, reassoc_vec_int, reassoc_vec_fp;
  				/* Specify reassociation width for integer,
  				   fp, vector integer and vector fp
*************** extern unsigned char ix86_prefetch_sse;
*** 531,536 ****
--- 536,542 ----
  #define TARGET_GNU2_TLS		(ix86_tls_dialect == TLS_DIALECT_GNU2)
  #define TARGET_ANY_GNU_TLS	(TARGET_GNU_TLS || TARGET_GNU2_TLS)
  #define TARGET_SUN_TLS		0
+ #define TARGET_WIN32_TLS	0
  
  #ifndef TARGET_64BIT_DEFAULT
  #define TARGET_64BIT_DEFAULT 0
diff -Nrcpad gcc-16-20250504/gcc/config/i386/i386.md gcc-16-20250511/gcc/config/i386/i386.md
*** gcc-16-20250504/gcc/config/i386/i386.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/i386.md	Sun May 11 22:32:09 2025
***************
*** 58,67 ****
  ;; H -- print a memory address offset by 8; used for sse high-parts
  ;; K -- print HLE lock prefix
  ;; Y -- print condition for XOP pcom* instruction.
  ;; + -- print a branch hint as 'cs' or 'ds' prefix
  ;; ; -- print a semicolon (after prefixes due to bug in older gas).
  ;; ~ -- print "i" if TARGET_AVX2, "f" otherwise.
! ;; ^ -- print addr32 prefix if TARGET_64BIT and Pmode != word_mode
  ;; ! -- print NOTRACK prefix for jxx/call/ret instructions if required.
  
  (define_c_enum "unspec" [
--- 58,68 ----
  ;; H -- print a memory address offset by 8; used for sse high-parts
  ;; K -- print HLE lock prefix
  ;; Y -- print condition for XOP pcom* instruction.
+ ;; v -- print segment override prefix
  ;; + -- print a branch hint as 'cs' or 'ds' prefix
  ;; ; -- print a semicolon (after prefixes due to bug in older gas).
  ;; ~ -- print "i" if TARGET_AVX2, "f" otherwise.
! ;; ^ -- print addr32 prefix if Pmode != word_mode
  ;; ! -- print NOTRACK prefix for jxx/call/ret instructions if required.
  
  (define_c_enum "unspec" [
***************
*** 79,84 ****
--- 80,86 ----
    UNSPEC_MACHOPIC_OFFSET
    UNSPEC_PCREL
    UNSPEC_SIZEOF
+   UNSPEC_SECREL32
  
    ;; Prologue support
    UNSPEC_STACK_ALLOC
***************
*** 5704,5710 ****
  
  /* vcvtneps2bf16 doesn't honor SNAN, and turn sNAN into qNAN quietly,
     and it always round to even.
!    flag_unsafte_math_optimization is needed for psrld.
     If we don't expect qNaNs nor sNaNs and can assume rounding
     to nearest, we can expand the conversion inline as
     (fromi + 0x7fff + ((fromi >> 16) & 1)) >> 16.  */
--- 5706,5712 ----
  
  /* vcvtneps2bf16 doesn't honor SNAN, and turn sNAN into qNAN quietly,
     and it always round to even.
!    flag_unsafe_math_optimization is needed for psrld.
     If we don't expect qNaNs nor sNaNs and can assume rounding
     to nearest, we can expand the conversion inline as
     (fromi + 0x7fff + ((fromi >> 16) & 1)) >> 16.  */
***************
*** 25643,25649 ****
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "movsq\t{%1, %0|%0, %1}";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
--- 25645,25651 ----
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "%^%v1movsq";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
***************
*** 25666,25672 ****
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "movs{l|d}\t{%1, %0|%0, %1}";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
--- 25668,25674 ----
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "%^%v1movs{l|d}";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
***************
*** 25689,25695 ****
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "movsw\t{%1, %0|%0, %1}";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
--- 25691,25697 ----
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "%^%v1movsw";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
***************
*** 25712,25718 ****
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "movsb\t{%1, %0|%0, %1}";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
--- 25714,25720 ----
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "%^%v1movsb";
  }
    [(set_attr "type" "str")
     (set_attr "memory" "both")
***************
*** 25759,25765 ****
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "rep{%;} movsq\t{%1, %0|%0, %1}";
  }
    [(set_attr "type" "str")
     (set_attr "prefix_rep" "1")
--- 25761,25767 ----
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "%^%v1rep{%;} movsq";
  }
    [(set_attr "type" "str")
     (set_attr "prefix_rep" "1")
***************
*** 25786,25792 ****
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "rep{%;} movs{l|d}\t{%1, %0|%0, %1}";
  }
    [(set_attr "type" "str")
     (set_attr "prefix_rep" "1")
--- 25788,25794 ----
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "%^%v1rep{%;} movs{l|d}";
  }
    [(set_attr "type" "str")
     (set_attr "prefix_rep" "1")
***************
*** 25811,25817 ****
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "rep{%;} movsb\t{%1, %0|%0, %1}";
  }
    [(set_attr "type" "str")
     (set_attr "prefix_rep" "1")
--- 25813,25819 ----
    operands[0] = SET_DEST (exp);
    operands[1] = SET_SRC (exp);
  
!   return "%^%v1rep{%;} movsb";
  }
    [(set_attr "type" "str")
     (set_attr "prefix_rep" "1")
diff -Nrcpad gcc-16-20250504/gcc/config/i386/predicates.md gcc-16-20250511/gcc/config/i386/predicates.md
*** gcc-16-20250504/gcc/config/i386/predicates.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/predicates.md	Sun May 11 22:32:09 2025
***************
*** 218,223 ****
--- 218,224 ----
  	  case UNSPEC_DTPOFF:
  	  case UNSPEC_GOTNTPOFF:
  	  case UNSPEC_NTPOFF:
+ 	  case UNSPEC_SECREL32:
  	    return true;
  	  default:
  	    break;
diff -Nrcpad gcc-16-20250504/gcc/config/i386/x86-tune-costs.h gcc-16-20250511/gcc/config/i386/x86-tune-costs.h
*** gcc-16-20250504/gcc/config/i386/x86-tune-costs.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/i386/x86-tune-costs.h	Sun May 11 22:32:09 2025
*************** struct processor_costs ix86_size_cost =
*** 107,112 ****
--- 107,113 ----
  					   in 128bit, 256bit and 512bit */
    4, 4, 6,				/* cost of moving XMM,YMM,ZMM register */
    4,					/* cost of moving SSE register to integer.  */
+   4,					/* cost of moving integer register to SSE.  */
    COSTS_N_BYTES (5), 0,			/* Gather load static, per_elt.  */
    COSTS_N_BYTES (5), 0,			/* Gather store static, per_elt.  */
    0,					/* size of l1 cache  */
*************** struct processor_costs ix86_size_cost =
*** 134,139 ****
--- 135,145 ----
    COSTS_N_BYTES (4),			/* cost of CVTSS2SD etc.  */
    COSTS_N_BYTES (4),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_BYTES (6),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_BYTES (4),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_BYTES (4),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_BYTES (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_BYTES (4),			/* cost of CVT(T)PS2PI instruction.  */
+   
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    ix86_size_memcpy,
    ix86_size_memset,
*************** struct processor_costs i386_cost = {	/*
*** 222,227 ****
--- 228,234 ----
    {4, 8, 16, 32, 64},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    3,					/* cost of moving SSE register to integer.  */
+   3,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    0,					/* size of l1 cache  */
*************** struct processor_costs i386_cost = {	/*
*** 249,254 ****
--- 256,265 ----
    COSTS_N_INSNS (27),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (54),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (108),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (27),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (27),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (27),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (27),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    i386_memcpy,
    i386_memset,
*************** struct processor_costs i486_cost = {	/*
*** 336,341 ****
--- 347,353 ----
    {4, 8, 16, 32, 64},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    3,					/* cost of moving SSE register to integer.  */
+   3,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    4,					/* size of l1 cache.  486 has 8kB cache
*************** struct processor_costs i486_cost = {	/*
*** 365,370 ****
--- 377,386 ----
    COSTS_N_INSNS (8),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (16),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (32),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (27),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (27),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (27),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (27),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    i486_memcpy,
    i486_memset,
*************** struct processor_costs pentium_cost = {
*** 452,457 ****
--- 468,474 ----
    {4, 8, 16, 32, 64},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    3,					/* cost of moving SSE register to integer.  */
+   3,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    8,					/* size of l1 cache.  */
*************** struct processor_costs pentium_cost = {
*** 479,484 ****
--- 496,505 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (3),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    pentium_memcpy,
    pentium_memset,
*************** struct processor_costs lakemont_cost = {
*** 559,564 ****
--- 580,586 ----
    {4, 8, 16, 32, 64},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    3,					/* cost of moving SSE register to integer.  */
+   3,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    8,					/* size of l1 cache.  */
*************** struct processor_costs lakemont_cost = {
*** 586,591 ****
--- 608,617 ----
    COSTS_N_INSNS (5),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (10),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (20),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (5),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (5),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (5),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (5),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    pentium_memcpy,
    pentium_memset,
*************** struct processor_costs pentiumpro_cost =
*** 681,686 ****
--- 707,713 ----
    {4, 8, 16, 32, 64},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    3,					/* cost of moving SSE register to integer.  */
+   3,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    8,					/* size of l1 cache.  */
*************** struct processor_costs pentiumpro_cost =
*** 708,713 ****
--- 735,744 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (3),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    pentiumpro_memcpy,
    pentiumpro_memset,
*************** struct processor_costs geode_cost = {
*** 794,799 ****
--- 825,831 ----
    {2, 2, 8, 16, 32},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    2, 2,					/* Gather load static, per_elt.  */
    2, 2,					/* Gather store static, per_elt.  */
    64,					/* size of l1 cache.  */
*************** struct processor_costs geode_cost = {
*** 821,826 ****
--- 853,862 ----
    COSTS_N_INSNS (6),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (12),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (24),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    geode_memcpy,
    geode_memset,
*************** struct processor_costs k6_cost = {
*** 907,912 ****
--- 943,949 ----
    {2, 2, 8, 16, 32},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    2, 2,					/* Gather load static, per_elt.  */
    2, 2,					/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** struct processor_costs k6_cost = {
*** 937,942 ****
--- 974,983 ----
    COSTS_N_INSNS (2),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (4),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (8),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (2),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (2),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (2),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (2),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    k6_memcpy,
    k6_memset,
*************** struct processor_costs athlon_cost = {
*** 1026,1031 ****
--- 1067,1073 ----
    {4, 4, 10, 10, 20},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    5,					/* cost of moving SSE register to integer.  */
+   5,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    64,					/* size of l1 cache.  */
*************** struct processor_costs athlon_cost = {
*** 1054,1059 ****
--- 1096,1105 ----
    COSTS_N_INSNS (4),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (8),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (16),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (4),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    athlon_memcpy,
    athlon_memset,
*************** struct processor_costs k8_cost = {
*** 1147,1152 ****
--- 1193,1199 ----
    {4, 4, 10, 10, 20},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    5,					/* cost of moving SSE register to integer.  */
+   5,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    64,					/* size of l1 cache.  */
*************** struct processor_costs k8_cost = {
*** 1180,1185 ****
--- 1227,1236 ----
    COSTS_N_INSNS (4),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (8),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (16),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (14),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (10),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (5),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    k8_memcpy,
    k8_memset,
*************** struct processor_costs amdfam10_cost = {
*** 1281,1286 ****
--- 1332,1338 ----
    {4, 4, 5, 10, 20},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    3,					/* cost of moving SSE register to integer.  */
+   3,					/* cost of moving integer register to SSE.  */
    4, 4,					/* Gather load static, per_elt.  */
    4, 4,					/* Gather store static, per_elt.  */
    64,					/* size of l1 cache.  */
*************** struct processor_costs amdfam10_cost = {
*** 1314,1319 ****
--- 1366,1375 ----
    COSTS_N_INSNS (4),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (8),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (16),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (14),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (8),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (7),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    amdfam10_memcpy,
    amdfam10_memset,
*************** const struct processor_costs bdver_cost
*** 1407,1412 ****
--- 1463,1469 ----
    {10, 10, 10, 40, 60},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    16,					/* cost of moving SSE register to integer.  */
+   16,					/* cost of moving integer register to SSE.  */
    12, 12,				/* Gather load static, per_elt.  */
    10, 10,				/* Gather store static, per_elt.  */
    16,					/* size of l1 cache.  */
*************** const struct processor_costs bdver_cost
*** 1441,1446 ****
--- 1498,1507 ----
    COSTS_N_INSNS (4),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (7),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (14),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (14),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (13),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    bdver_memcpy,
    bdver_memset,
*************** struct processor_costs znver1_cost = {
*** 1554,1559 ****
--- 1615,1621 ----
    {8, 8, 8, 16, 32},			/* cost of unaligned stores.  */
    2, 3, 6,				/* cost of moving XMM,YMM,ZMM register.  */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    /* VGATHERDPD is 23 uops and throughput is 9, VGATHERDPD is 35 uops,
       throughput 12.  Approx 9 uops do not depend on vector size and every load
       is 7 uops.  */
*************** struct processor_costs znver1_cost = {
*** 1593,1598 ****
--- 1655,1664 ----
    /* Real latency is 4, but for split regs multiply cost of half op by 2.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (8),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (7),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)PS2PI instruction.  */
    /* Zen can execute 4 integer operations per cycle. FP operations take 3 cycles
       and it can execute 2 integer additions and 2 multiplications thus
       reassociation may make sense up to with of 6.  SPEC2k6 bencharks suggests
*************** struct processor_costs znver2_cost = {
*** 1717,1722 ****
--- 1783,1789 ----
    2, 2, 3,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    /* VGATHERDPD is 23 uops and throughput is 9, VGATHERDPD is 35 uops,
       throughput 12.  Approx 9 uops do not depend on vector size and every load
       is 7 uops.  */
*************** struct processor_costs znver2_cost = {
*** 1755,1760 ****
--- 1822,1831 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (5),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (10),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (7),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)PS2PI instruction.  */
    /* Zen can execute 4 integer operations per cycle.  FP operations
       take 3 cycles and it can execute 2 integer additions and 2
       multiplications thus reassociation may make sense up to with of 6.
*************** struct processor_costs znver3_cost = {
*** 1855,1860 ****
--- 1926,1932 ----
    2, 2, 3,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    /* VGATHERDPD is 15 uops and throughput is 4, VGATHERDPS is 23 uops,
       throughput 9.  Approx 7 uops do not depend on vector size and every load
       is 4 uops.  */
*************** struct processor_costs znver3_cost = {
*** 1893,1898 ****
--- 1965,1974 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (5),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (10),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    /* Zen can execute 4 integer operations per cycle.  FP operations
       take 3 cycles and it can execute 2 integer additions and 2
       multiplications thus reassociation may make sense up to with of 6.
*************** struct processor_costs znver4_cost = {
*** 1995,2000 ****
--- 2071,2077 ----
    2, 2, 2,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    /* VGATHERDPD is 17 uops and throughput is 4, VGATHERDPS is 24 uops,
       throughput 5.  Approx 7 uops do not depend on vector size and every load
       is 5 uops.  */
*************** struct processor_costs znver4_cost = {
*** 2034,2039 ****
--- 2111,2120 ----
    COSTS_N_INSNS (5),			/* cost of 256bit VCVTPS2PD etc.  */
    /* Real latency is 6, but for split regs multiply cost of half op by 2.  */
    COSTS_N_INSNS (10),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    /* Zen can execute 4 integer operations per cycle.  FP operations
       take 3 cycles and it can execute 2 integer additions and 2
       multiplications thus reassociation may make sense up to with of 6.
*************** struct processor_costs znver5_cost = {
*** 2139,2144 ****
--- 2220,2226 ----
    2, 2, 2,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
  
    /* TODO: gather and scatter instructions are currently disabled in
       x86-tune.def.  In some cases they are however a win, see PR116582
*************** struct processor_costs znver5_cost = {
*** 2188,2193 ****
--- 2270,2279 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (5),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (5),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    /* Zen5 can execute:
        - integer ops: 6 per cycle, at most 3 multiplications.
  	latency 1 for additions, 3 for multiplications (pipelined)
*************** struct processor_costs skylake_cost = {
*** 2303,2308 ****
--- 2389,2395 ----
    {8, 8, 8, 8, 16},			/* cost of unaligned stores.  */
    2, 2, 4,				/* cost of moving XMM,YMM,ZMM register */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    20, 8,				/* Gather load static, per_elt.  */
    22, 10,				/* Gather store static, per_elt.  */
    64,					/* size of l1 cache.  */
*************** struct processor_costs skylake_cost = {
*** 2330,2335 ****
--- 2417,2426 ----
    COSTS_N_INSNS (2),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (2),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (4),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (7),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 2, 2,				/* reassoc int, fp, vec_int, vec_fp.  */
    skylake_memcpy,
    skylake_memset,
*************** struct processor_costs icelake_cost = {
*** 2435,2440 ****
--- 2526,2532 ----
    {8, 8, 8, 8, 16},			/* cost of unaligned stores.  */
    2, 2, 4,				/* cost of moving XMM,YMM,ZMM register */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    20, 8,				/* Gather load static, per_elt.  */
    22, 10,				/* Gather store static, per_elt.  */
    64,					/* size of l1 cache.  */
*************** struct processor_costs icelake_cost = {
*** 2462,2467 ****
--- 2554,2563 ----
    COSTS_N_INSNS (2),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (2),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (2),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (7),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 2, 2,				/* reassoc int, fp, vec_int, vec_fp.  */
    icelake_memcpy,
    icelake_memset,
*************** struct processor_costs alderlake_cost =
*** 2561,2566 ****
--- 2657,2663 ----
    {8, 8, 8, 10, 15},			/* cost of unaligned storess.  */
    2, 3, 4,				/* cost of moving XMM,YMM,ZMM register */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    18, 6,				/* Gather load static, per_elt.  */
    18, 6,				/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** struct processor_costs alderlake_cost =
*** 2588,2593 ****
--- 2685,2694 ----
    COSTS_N_INSNS (2),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (2),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (2),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (7),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 3, 3,				/* reassoc int, fp, vec_int, vec_fp.  */
    alderlake_memcpy,
    alderlake_memset,
*************** const struct processor_costs btver1_cost
*** 2680,2685 ****
--- 2781,2787 ----
    {10, 10, 12, 48, 96},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    14,					/* cost of moving SSE register to integer.  */
+   14,					/* cost of moving integer register to SSE.  */
    10, 10,				/* Gather load static, per_elt.  */
    10, 10,				/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** const struct processor_costs btver1_cost
*** 2707,2712 ****
--- 2809,2818 ----
    COSTS_N_INSNS (4),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (7),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (14),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (14),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (13),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    btver1_memcpy,
    btver1_memset,
*************** const struct processor_costs btver2_cost
*** 2796,2801 ****
--- 2902,2908 ----
    {10, 10, 12, 48, 96},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    14,					/* cost of moving SSE register to integer.  */
+   14,					/* cost of moving integer register to SSE.  */
    10, 10,				/* Gather load static, per_elt.  */
    10, 10,				/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** const struct processor_costs btver2_cost
*** 2823,2828 ****
--- 2930,2939 ----
    COSTS_N_INSNS (4),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (7),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (14),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (14),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (13),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    btver2_memcpy,
    btver2_memset,
*************** struct processor_costs pentium4_cost = {
*** 2911,2916 ****
--- 3022,3028 ----
    {32, 32, 32, 64, 128},		/* cost of unaligned stores.  */
    12, 24, 48,				/* cost of moving XMM,YMM,ZMM register */
    20,					/* cost of moving SSE register to integer.  */
+   20,					/* cost of moving integer register to SSE.  */
    16, 16,				/* Gather load static, per_elt.  */
    16, 16,				/* Gather store static, per_elt.  */
    8,					/* size of l1 cache.  */
*************** struct processor_costs pentium4_cost = {
*** 2938,2943 ****
--- 3050,3059 ----
    COSTS_N_INSNS (10),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (20),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (40),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (20),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (17),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (12),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (8),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    pentium4_memcpy,
    pentium4_memset,
*************** struct processor_costs nocona_cost = {
*** 3029,3034 ****
--- 3145,3151 ----
    {24, 24, 24, 48, 96},			/* cost of unaligned stores.  */
    6, 12, 24,				/* cost of moving XMM,YMM,ZMM register */
    20,					/* cost of moving SSE register to integer.  */
+   20,					/* cost of moving integer register to SSE.  */
    12, 12,				/* Gather load static, per_elt.  */
    12, 12,				/* Gather store static, per_elt.  */
    8,					/* size of l1 cache.  */
*************** struct processor_costs nocona_cost = {
*** 3056,3061 ****
--- 3173,3182 ----
    COSTS_N_INSNS (10),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (20),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (40),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (20),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (17),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (12),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (8),			/* cost of CVT(T)PS2PI instruction.  */
    1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    nocona_memcpy,
    nocona_memset,
*************** struct processor_costs atom_cost = {
*** 3145,3150 ****
--- 3266,3272 ----
    {16, 16, 16, 32, 64},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    8,					/* cost of moving SSE register to integer.  */
+   8,					/* cost of moving integer register to SSE.  */
    8, 8,					/* Gather load static, per_elt.  */
    8, 8,					/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** struct processor_costs atom_cost = {
*** 3172,3177 ****
--- 3294,3303 ----
    COSTS_N_INSNS (6),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (12),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (24),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (7),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (10),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    2, 2, 2, 2,				/* reassoc int, fp, vec_int, vec_fp.  */
    atom_memcpy,
    atom_memset,
*************** struct processor_costs slm_cost = {
*** 3261,3266 ****
--- 3387,3393 ----
    {16, 16, 16, 32, 64},			/* cost of unaligned stores.  */
    2, 4, 8,				/* cost of moving XMM,YMM,ZMM register */
    8,					/* cost of moving SSE register to integer.  */
+   8,					/* cost of moving integer register to SSE.  */
    8, 8,					/* Gather load static, per_elt.  */
    8, 8,					/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** struct processor_costs slm_cost = {
*** 3288,3293 ****
--- 3415,3424 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (5),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (5),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    slm_memcpy,
    slm_memset,
*************** struct processor_costs tremont_cost = {
*** 3389,3394 ****
--- 3520,3526 ----
    {6, 6, 6, 10, 15},			/* cost of unaligned storess.  */
    2, 3, 4,				/* cost of moving XMM,YMM,ZMM register */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    18, 6,				/* Gather load static, per_elt.  */
    18, 6,				/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** struct processor_costs tremont_cost = {
*** 3418,3423 ****
--- 3550,3559 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 3, 3,				/* reassoc int, fp, vec_int, vec_fp.  */
    tremont_memcpy,
    tremont_memset,
*************** struct processor_costs intel_cost = {
*** 3507,3512 ****
--- 3643,3649 ----
    {10, 10, 10, 10, 10},			/* cost of unaligned loads.  */
    2, 2, 2,				/* cost of moving XMM,YMM,ZMM register */
    4,					/* cost of moving SSE register to integer.  */
+   4,					/* cost of moving integer register to SSE.  */
    6, 6,					/* Gather load static, per_elt.  */
    6, 6,					/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** struct processor_costs intel_cost = {
*** 3534,3539 ****
--- 3671,3680 ----
    COSTS_N_INSNS (8),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (16),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (32),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (8),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (8),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (8),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (8),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
    intel_memcpy,
    intel_memset,
*************** struct processor_costs lujiazui_cost = {
*** 3618,3632 ****
    {6, 6, 6},				/* cost of loading integer registers
  					   in QImode, HImode and SImode.
  					   Relative to reg-reg move (2).  */
!   {6, 6, 6},			/* cost of storing integer registers.  */
    {6, 6, 6, 10, 15},			/* cost of loading SSE register
! 				in 32bit, 64bit, 128bit, 256bit and 512bit.  */
    {6, 6, 6, 10, 15},			/* cost of storing SSE register
! 				in 32bit, 64bit, 128bit, 256bit and 512bit.  */
    {6, 6, 6, 10, 15},			/* cost of unaligned loads.  */
    {6, 6, 6, 10, 15},			/* cost of unaligned storess.  */
!   2, 3, 4,			/* cost of moving XMM,YMM,ZMM register.  */
!   6,				/* cost of moving SSE register to integer.  */
    18, 6,				/* Gather load static, per_elt.  */
    18, 6,				/* Gather store static, per_elt.  */
    32,				  	/* size of l1 cache.  */
--- 3759,3774 ----
    {6, 6, 6},				/* cost of loading integer registers
  					   in QImode, HImode and SImode.
  					   Relative to reg-reg move (2).  */
!   {6, 6, 6},				/* cost of storing integer registers.  */
    {6, 6, 6, 10, 15},			/* cost of loading SSE register
! 					   in 32bit, 64bit, 128bit, 256bit and 512bit.  */
    {6, 6, 6, 10, 15},			/* cost of storing SSE register
! 					   in 32bit, 64bit, 128bit, 256bit and 512bit.  */
    {6, 6, 6, 10, 15},			/* cost of unaligned loads.  */
    {6, 6, 6, 10, 15},			/* cost of unaligned storess.  */
!   2, 3, 4,				/* cost of moving XMM,YMM,ZMM register.  */
!   6,					/* cost of moving SSE register to integer.  */
!   6,					/* cost of moving integer register to SSE.  */
    18, 6,				/* Gather load static, per_elt.  */
    18, 6,				/* Gather store static, per_elt.  */
    32,				  	/* size of l1 cache.  */
*************** struct processor_costs lujiazui_cost = {
*** 3655,3660 ****
--- 3797,3806 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (3),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 3, 3,				/* reassoc int, fp, vec_int, vec_fp.  */
    lujiazui_memcpy,
    lujiazui_memset,
*************** struct processor_costs yongfeng_cost = {
*** 3747,3752 ****
--- 3893,3899 ----
    {8, 8, 8, 12, 15},			/* cost of unaligned storess.  */
    2, 3, 4,			/* cost of moving XMM,YMM,ZMM register.  */
    8,				/* cost of moving SSE register to integer.  */
+   8,					/* cost of moving integer register to SSE.  */
    18, 6,				/* Gather load static, per_elt.  */
    18, 6,				/* Gather store static, per_elt.  */
    32,				  	/* size of l1 cache.  */
*************** struct processor_costs yongfeng_cost = {
*** 3774,3779 ****
--- 3921,3930 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (3),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)PS2PI instruction.  */
    4, 4, 4, 4,				/* reassoc int, fp, vec_int, vec_fp.  */
    yongfeng_memcpy,
    yongfeng_memset,
*************** struct processor_costs shijidadao_cost =
*** 3866,3871 ****
--- 4017,4023 ----
    {8, 8, 8, 12, 15},			/* cost of unaligned storess.  */
    2, 3, 4,			/* cost of moving XMM,YMM,ZMM register.  */
    8,				/* cost of moving SSE register to integer.  */
+   8,					/* cost of moving integer register to SSE.  */
    18, 6,				/* Gather load static, per_elt.  */
    18, 6,				/* Gather store static, per_elt.  */
    32,				  	/* size of l1 cache.  */
*************** struct processor_costs shijidadao_cost =
*** 3893,3898 ****
--- 4045,4054 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (6),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (12),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (3),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)PS2PI instruction.  */
    4, 4, 4, 4,				/* reassoc int, fp, vec_int, vec_fp.  */
    shijidadao_memcpy,
    shijidadao_memset,
*************** struct processor_costs generic_cost = {
*** 3991,3996 ****
--- 4147,4153 ----
    {6, 6, 6, 10, 15},			/* cost of unaligned storess.  */
    2, 3, 4,				/* cost of moving XMM,YMM,ZMM register */
    6,					/* cost of moving SSE register to integer.  */
+   6,					/* cost of moving integer register to SSE.  */
    18, 6,				/* Gather load static, per_elt.  */
    18, 6,				/* Gather store static, per_elt.  */
    32,					/* size of l1 cache.  */
*************** struct processor_costs generic_cost = {
*** 4020,4025 ****
--- 4177,4186 ----
    COSTS_N_INSNS (3),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (4),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (5),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 3, 3,				/* reassoc int, fp, vec_int, vec_fp.  */
    generic_memcpy,
    generic_memset,
*************** struct processor_costs core_cost = {
*** 4120,4125 ****
--- 4281,4287 ----
    {6, 6, 6, 6, 12},			/* cost of unaligned stores.  */
    2, 2, 4,				/* cost of moving XMM,YMM,ZMM register */
    2,					/* cost of moving SSE register to integer.  */
+   2,					/* cost of moving integer register to SSE.  */
    /* VGATHERDPD is 7 uops, rec throughput 5, while VGATHERDPD is 9 uops,
       rec. throughput 6.
       So 5 uops statically and one uops per load.  */
*************** struct processor_costs core_cost = {
*** 4152,4157 ****
--- 4314,4323 ----
    COSTS_N_INSNS (2),			/* cost of CVTSS2SD etc.  */
    COSTS_N_INSNS (2),			/* cost of 256bit VCVTPS2PD etc.  */
    COSTS_N_INSNS (2),			/* cost of 512bit VCVTPS2PD etc.  */
+   COSTS_N_INSNS (6),			/* cost of CVTSI2SS instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVT(T)SS2SI instruction.  */
+   COSTS_N_INSNS (6),			/* cost of CVTPI2PS instruction.  */
+   COSTS_N_INSNS (7),			/* cost of CVT(T)PS2PI instruction.  */
    1, 4, 2, 2,				/* reassoc int, fp, vec_int, vec_fp.  */
    core_memcpy,
    core_memset,
diff -Nrcpad gcc-16-20250504/gcc/config/mingw/mingw32.h gcc-16-20250511/gcc/config/mingw/mingw32.h
*** gcc-16-20250504/gcc/config/mingw/mingw32.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/mingw/mingw32.h	Sun May 11 22:32:09 2025
*************** do {						         \
*** 308,313 ****
--- 308,322 ----
  #undef TARGET_N_FORMAT_TYPES
  #define TARGET_N_FORMAT_TYPES 3
  
+ #undef TARGET_WIN32_TLS
+ #define TARGET_WIN32_TLS 1
+ 
+ #undef TARGET_ASM_SELECT_SECTION
+ #define TARGET_ASM_SELECT_SECTION mingw_pe_select_section
+ 
+ #undef DEFAULT_TLS_SEG_REG
+ #define DEFAULT_TLS_SEG_REG (TARGET_64BIT ? ADDR_SPACE_SEG_GS : ADDR_SPACE_SEG_FS)
+ 
  #define HAVE_ENABLE_EXECUTE_STACK
  #undef  CHECK_EXECUTE_STACK_ENABLED
  #define CHECK_EXECUTE_STACK_ENABLED flag_setstackexecutable
diff -Nrcpad gcc-16-20250504/gcc/config/mingw/winnt.cc gcc-16-20250511/gcc/config/mingw/winnt.cc
*** gcc-16-20250504/gcc/config/mingw/winnt.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/mingw/winnt.cc	Sun May 11 22:32:09 2025
*************** i386_pe_strip_name_encoding_full (const
*** 391,396 ****
--- 391,405 ----
    return name;
  }
  
+ section *
+ mingw_pe_select_section (tree decl, int reloc, unsigned HOST_WIDE_INT align)
+ {
+   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
+     return get_named_section (decl, ".tls$", reloc);
+   else
+     return default_select_section (decl, reloc, align);
+ }
+ 
  void
  mingw_pe_unique_section (tree decl, int reloc)
  {
*************** mingw_pe_unique_section (tree decl, int
*** 415,420 ****
--- 424,431 ----
      prefix = ".text$";
    else if (decl_readonly_section (decl, reloc))
      prefix = ".rdata$";
+   else if (DECL_THREAD_LOCAL_P (decl))
+     prefix = ".tls$";
    else
      prefix = ".data$";
    len = strlen (name) + strlen (prefix);
*************** mingw_pe_asm_named_section (const char *
*** 489,494 ****
--- 500,508 ----
      *f++ = 'e';
  #endif
  
+   if (strcmp (name, ".tls$") == 0)
+     *f++ = 'd';
+ 
    if ((flags & (SECTION_CODE | SECTION_WRITE)) == 0)
      /* readonly data */
      {
diff -Nrcpad gcc-16-20250504/gcc/config/mingw/winnt.h gcc-16-20250511/gcc/config/mingw/winnt.h
*** gcc-16-20250504/gcc/config/mingw/winnt.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/mingw/winnt.h	Sun May 11 22:32:09 2025
*************** extern void mingw_pe_file_end (void);
*** 31,36 ****
--- 31,37 ----
  extern void mingw_pe_maybe_record_exported_symbol (tree, const char *, int);
  extern void mingw_pe_record_stub (const char *, bool);
  extern unsigned int mingw_pe_section_type_flags (tree, const char *, int);
+ extern section *mingw_pe_select_section (tree, int, unsigned HOST_WIDE_INT);
  extern void mingw_pe_unique_section (tree, int);
  extern bool mingw_pe_valid_dllimport_attribute_p (const_tree);
  
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/autovec-opt.md gcc-16-20250511/gcc/config/riscv/autovec-opt.md
*** gcc-16-20250504/gcc/config/riscv/autovec-opt.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/autovec-opt.md	Sun May 11 22:32:09 2025
***************
*** 1673,1675 ****
--- 1673,1698 ----
      DONE;
    }
    [(set_attr "type" "vandn")])
+ 
+ 
+ ;; =============================================================================
+ ;; Combine vec_duplicate + op.vv to op.vx
+ ;; Include
+ ;; - vadd.vx
+ ;; =============================================================================
+ (define_insn_and_split "*<optab>_vx_<mode>"
+  [(set (match_operand:V_VLSI    0 "register_operand")
+        (any_int_binop_no_shift_vx:V_VLSI
+ 	 (vec_duplicate:V_VLSI
+ 	   (match_operand:<VEL> 1 "register_operand"))
+ 	 (match_operand:V_VLSI  2 "<binop_rhs2_predicate>")))]
+   "TARGET_VECTOR && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     rtx ops[] = {operands[0], operands[2], operands[1]};
+     riscv_vector::emit_vlmax_insn (code_for_pred_scalar (<CODE>, <MODE>mode),
+ 				   riscv_vector::BINARY_OP, ops);
+   }
+   [(set_attr "type" "vialu")])
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/bitmanip.md gcc-16-20250511/gcc/config/riscv/bitmanip.md
*** gcc-16-20250504/gcc/config/riscv/bitmanip.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/bitmanip.md	Sun May 11 22:32:09 2025
***************
*** 423,461 ****
    "rolw\t%0,%1,%2"
    [(set_attr "type" "bitmanip")])
  
! (define_insn_and_split "*<bitmanip_optab><GPR:mode>3_mask"
!   [(set (match_operand:GPR     0 "register_operand" "= r")
!         (bitmanip_rotate:GPR
!             (match_operand:GPR 1 "register_operand" "  r")
!             (match_operator 4 "subreg_lowpart_operator"
!              [(and:GPR2
!                (match_operand:GPR2 2 "register_operand"  "r")
!                (match_operand 3 "<GPR:shiftm1>" "<GPR:shiftm1p>"))])))]
    "TARGET_ZBB || TARGET_ZBKB"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
!         (bitmanip_rotate:GPR (match_dup 1)
!                              (match_dup 2)))]
!   "operands[2] = gen_lowpart (QImode, operands[2]);"
    [(set_attr "type" "bitmanip")
!    (set_attr "mode" "<GPR:MODE>")])
  
! (define_insn_and_split "*<bitmanip_optab>si3_sext_mask"
!   [(set (match_operand:DI     0 "register_operand" "= r")
!   (sign_extend:DI (bitmanip_rotate:SI
!             (match_operand:SI 1 "register_operand" "  r")
!             (match_operator 4 "subreg_lowpart_operator"
!              [(and:GPR
!                (match_operand:GPR 2 "register_operand"  "r")
!                (match_operand 3 "const_si_mask_operand"))]))))]
    "TARGET_64BIT && (TARGET_ZBB || TARGET_ZBKB)"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
!   (sign_extend:DI (bitmanip_rotate:SI (match_dup 1)
!                            (match_dup 2))))]
!   "operands[2] = gen_lowpart (QImode, operands[2]);"
    [(set_attr "type" "bitmanip")
     (set_attr "mode" "DI")])
  
--- 423,462 ----
    "rolw\t%0,%1,%2"
    [(set_attr "type" "bitmanip")])
  
! (define_insn "*<bitmanip_optab><mode>3_mask"
!   [(set (match_operand:X 0 "register_operand" "=r")
! 	(bitmanip_rotate:X
! 	  (match_operand:X 1 "register_operand" "r")
! 	  (match_operator 4 "subreg_lowpart_operator"
! 	    [(and:X (match_operand:X 2 "register_operand"  "r")
! 		    (match_operand 3 "<X:shiftm1>" "<X:shiftm1p>"))])))]
    "TARGET_ZBB || TARGET_ZBKB"
!   "<bitmanip_insn>\t%0,%1,%2"
    [(set_attr "type" "bitmanip")
!    (set_attr "mode" "<X:MODE>")])
  
! (define_insn "*<bitmanip_optab>3_mask_si"
!   [(set (match_operand:SI 0 "register_operand" "=r")
! 	(bitmanip_rotate:SI
! 	  (match_operand:SI 1 "register_operand" "r")
! 	  (match_operator 3 "subreg_lowpart_operator"
! 	    [(and:X (match_operand:SI 2 "register_operand"  "r")
! 		    (const_int 31))])))]
    "TARGET_64BIT && (TARGET_ZBB || TARGET_ZBKB)"
!   "<bitmanip_insn>w\t%0,%1,%2"
!   [(set_attr "type" "bitmanip")
!    (set_attr "mode" "SI")])
! 
! (define_insn "*<bitmanip_optab>si3_sext_mask"
!   [(set (match_operand:DI 0 "register_operand" "=r")
! 	(sign_extend:DI
! 	  (bitmanip_rotate:SI
! 	    (match_operand:SI 1 "register_operand" "r")
! 	    (match_operator 3 "subreg_lowpart_operator"
! 	      [(and:X (match_operand:GPR 2 "register_operand"  "r")
! 		      (const_int 31))]))))]
!   "TARGET_64BIT && (TARGET_ZBB || TARGET_ZBKB)"
!   "<bitmanip_insn>w\t%0,%1,%2"
    [(set_attr "type" "bitmanip")
     (set_attr "mode" "DI")])
  
***************
*** 1221,1227 ****
       we can't keep it in 64 bit variable.)
       then use clmul instruction to implement the CRC,
       otherwise (TARGET_ZBKB) generate table based using brev.  */
!   if ((TARGET_ZBKC || TARGET_ZBC) && <ANYI:MODE>mode < word_mode)
      expand_reversed_crc_using_clmul (<ANYI:MODE>mode, <ANYI1:MODE>mode,
  				     operands);
    else if (TARGET_ZBKB)
--- 1222,1228 ----
       we can't keep it in 64 bit variable.)
       then use clmul instruction to implement the CRC,
       otherwise (TARGET_ZBKB) generate table based using brev.  */
!   if ((TARGET_ZBKC || TARGET_ZBC || TARGET_ZVBC) && <ANYI:MODE>mode < word_mode)
      expand_reversed_crc_using_clmul (<ANYI:MODE>mode, <ANYI1:MODE>mode,
  				     operands);
    else if (TARGET_ZBKB)
***************
*** 1253,1259 ****
  		      (match_operand:SUBX 3)]
  		      UNSPEC_CRC))]
    /* We don't support the case when data's size is bigger than CRC's size.  */
!   "(TARGET_ZBKC || TARGET_ZBC) && <SUBX:MODE>mode >= <SUBX1:MODE>mode"
  {
    /* If we have the ZBC or ZBKC extension (ie, clmul) and
       it is possible to store the quotient within a single variable
--- 1254,1261 ----
  		      (match_operand:SUBX 3)]
  		      UNSPEC_CRC))]
    /* We don't support the case when data's size is bigger than CRC's size.  */
!   "(TARGET_ZBKC || TARGET_ZBC || TARGET_ZVBC)
!    && <SUBX:MODE>mode >= <SUBX1:MODE>mode"
  {
    /* If we have the ZBC or ZBKC extension (ie, clmul) and
       it is possible to store the quotient within a single variable
***************
*** 1301,1303 ****
--- 1303,1379 ----
      }
    DONE;
  })
+ 
+ ;; More forms of single bit extraction.  The RISC-V port does not
+ ;; define SHIFT_COUNT_TRUNCATED so we need forms where the bit position
+ ;; is masked.
+ ;;
+ ;; We could in theory use this for rv32 as well, but it probably does
+ ;; not occur in practice.  The bit position would need to be QI/HI mode,
+ ;; otherwise we would not need the zero extension.
+ ;;
+ ;; One could also argue that the zero extension is redundant and should
+ ;; have been optimized away during RTL simplification.
+ (define_insn "*bextdi_position_ze_masked"
+   [(set (match_operand:DI 0 "register_operand" "=r")
+ 	(zero_extract:DI (match_operand:DI 1 "register_operand" "r")
+ 			 (const_int 1)
+ 			 (zero_extend:DI
+ 			  (and:SI (match_operand:SI 2 "register_operand" "r")
+ 				  (const_int 63)))))]
+   "TARGET_64BIT && TARGET_ZBS"
+   "bext\t%0,%1,%2"
+   [(set_attr "type" "bitmanip")])
+ 
+ ;; Same as above, but without the extraneous zero_extend.
+ (define_insn "*bextdi_position_ze_masked"
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(zero_extract:X
+ 	  (match_operand:X 1 "register_operand" "r")
+ 	  (const_int 1)
+ 	  (and:X (match_operand:SI 2 "register_operand" "r")
+ 		 (match_operand:SI 3 "bitpos_mask_operand" "n"))))]
+   "TARGET_64BIT && TARGET_ZBS"
+   "bext\t%0,%1,%2"
+   [(set_attr "type" "bitmanip")])
+ 
+ 
+ ;; Single bit extraction by first shifting it into the sign bit, then
+ ;; shifting it down to the low bit.
+ (define_insn "*bext<mode>_position_masked"
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(lshiftrt:X (ashift:X (match_operand:X 1 "register_operand" "r")
+ 			      (match_operand:QI 2 "register_operand" "r"))
+ 		    (match_operand:X 3 "bitpos_mask_operand" "n")))]
+   "TARGET_ZBS"
+   "bext\t%0,%1,%2"
+   [(set_attr "type" "bitmanip")])
+ 
+ ;; Single bit extraction by shifting into the low bit, but with the
+ ;; position formed with a subreg of a mask.
+ (define_insn "*bext<mode>_position_masked_subreg"
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(lshiftrt:X
+ 	 (ashift:X (match_operand:X 1 "register_operand" "r")
+ 		   (subreg:QI
+ 		    (and:X (match_operand:X 2 "register_operand" "r")
+ 			   (match_operand:X 3 "bitpos_mask_operand" "n")) 0))
+ 	 (match_operand:X 4 "bitpos_mask_operand" "n")))]
+   "TARGET_ZBS"
+   "bext\t%0,%1,%2"
+   [(set_attr "type" "bitmanip")])
+ 
+ ;; This has shown up in testing.  In particular we end up with an
+ ;; immediate input.  We can load that into a register and target
+ ;; one of the above bext patterns.
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+ 	(and:X (lshiftrt:X (match_operand 1 "immediate_operand")
+ 			   (match_operand:QI 2 "register_operand"))
+ 	       (const_int 1)))
+    (clobber (match_operand:X 3 "register_operand"))]
+   ""
+   [(set (match_dup 3) (match_dup 1))
+    (set (match_dup 0) (zero_extract:X (match_dup 3)
+ 				      (const_int 1)
+ 				      (zero_extend:X (match_dup 2))))])
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/genrvv-type-indexer.cc gcc-16-20250511/gcc/config/riscv/genrvv-type-indexer.cc
*** gcc-16-20250504/gcc/config/riscv/genrvv-type-indexer.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/genrvv-type-indexer.cc	Sun May 11 22:32:09 2025
*************** along with GCC; see the file COPYING3.
*** 23,30 ****
  #include <assert.h>
  #include <math.h>
  
! #define BOOL_SIZE_LIST {1, 2, 4, 8, 16, 32, 64}
! #define EEW_SIZE_LIST {8, 16, 32, 64}
  #define LMUL1_LOG2 0
  
  std::string
--- 23,36 ----
  #include <assert.h>
  #include <math.h>
  
! #define BOOL_SIZE_LIST                                                         \
!   {                                                                            \
!     1, 2, 4, 8, 16, 32, 64                                                     \
!   }
! #define EEW_SIZE_LIST                                                          \
!   {                                                                            \
!     8, 16, 32, 64                                                              \
!   }
  #define LMUL1_LOG2 0
  
  std::string
*************** floattype (unsigned sew, int lmul_log2)
*** 167,173 ****
  std::string
  expand_floattype (unsigned sew, int lmul_log2, unsigned nf)
  {
!   if (sew != 8 || nf!= 1
        || (!valid_type (sew * 4, lmul_log2 + 2, /*float_t*/ true)))
      return "INVALID";
  
--- 173,179 ----
  std::string
  expand_floattype (unsigned sew, int lmul_log2, unsigned nf)
  {
!   if (sew != 8 || nf != 1
        || (!valid_type (sew * 4, lmul_log2 + 2, /*float_t*/ true)))
      return "INVALID";
  
*************** main (int argc, const char **argv)
*** 297,309 ****
  
        for (unsigned eew : EEW_SIZE_LIST)
  	fprintf (fp, "  /*SIGNED_EEW%d_LMUL1_INTERPRET*/ %s,\n", eew,
! 		 inttype (eew, LMUL1_LOG2, /* unsigned_p */false).c_str ());
  
        for (unsigned eew : EEW_SIZE_LIST)
  	fprintf (fp, "  /*UNSIGNED_EEW%d_LMUL1_INTERPRET*/ %s,\n", eew,
! 		 inttype (eew, LMUL1_LOG2, /* unsigned_p */true).c_str ());
  
! 	fprintf (fp, "  /*X2*/ INVALID,\n");
  
        for (unsigned lmul_log2_offset : {1, 2, 3, 4, 5, 6})
  	{
--- 303,315 ----
  
        for (unsigned eew : EEW_SIZE_LIST)
  	fprintf (fp, "  /*SIGNED_EEW%d_LMUL1_INTERPRET*/ %s,\n", eew,
! 		 inttype (eew, LMUL1_LOG2, /* unsigned_p */ false).c_str ());
  
        for (unsigned eew : EEW_SIZE_LIST)
  	fprintf (fp, "  /*UNSIGNED_EEW%d_LMUL1_INTERPRET*/ %s,\n", eew,
! 		 inttype (eew, LMUL1_LOG2, /* unsigned_p */ true).c_str ());
  
!       fprintf (fp, "  /*X2*/ INVALID,\n");
  
        for (unsigned lmul_log2_offset : {1, 2, 3, 4, 5, 6})
  	{
*************** main (int argc, const char **argv)
*** 428,435 ****
  	      fprintf (fp, "  /*UNSIGNED_EEW%d_LMUL1_INTERPRET*/ INVALID,\n",
  		       eew);
  
! 	    fprintf (fp, "  /*X2*/ %s,\n",
! 		     inttype (sew * 2, lmul_log2 + 1, /*unsigned_p*/ true).c_str ());
  
  	    for (unsigned lmul_log2_offset : {1, 2, 3, 4, 5, 6})
  	      {
--- 434,442 ----
  	      fprintf (fp, "  /*UNSIGNED_EEW%d_LMUL1_INTERPRET*/ INVALID,\n",
  		       eew);
  
! 	    fprintf (
! 	      fp, "  /*X2*/ %s,\n",
! 	      inttype (sew * 2, lmul_log2 + 1, /*unsigned_p*/ true).c_str ());
  
  	    for (unsigned lmul_log2_offset : {1, 2, 3, 4, 5, 6})
  	      {
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/iterators.md gcc-16-20250511/gcc/config/riscv/iterators.md
*** gcc-16-20250504/gcc/config/riscv/iterators.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/iterators.md	Sun May 11 22:32:09 2025
***************
*** 262,267 ****
--- 262,270 ----
  
  (define_code_attr fix_uns [(fix "fix") (unsigned_fix "fixuns")])
  
+ (define_code_attr OPTAB [(ior "IOR")
+                          (xor "XOR")])
+ 
  
  ;; -------------------------------------------------------------------
  ;; Code Attributes
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/predicates.md gcc-16-20250511/gcc/config/riscv/predicates.md
*** gcc-16-20250504/gcc/config/riscv/predicates.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/predicates.md	Sun May 11 22:32:09 2025
***************
*** 380,393 ****
    (and (match_code "const_int")
         (match_test "SINGLE_BIT_MASK_OPERAND (UINTVAL (op))")))
  
- ;; Register, small constant or single bit constant for use in
- ;; bseti/binvi.
- (define_predicate "arith_or_zbs_operand"
-   (ior (match_operand 0 "const_arith_operand")
-        (match_operand 0 "register_operand")
-        (and (match_test "TARGET_ZBS")
- 	    (match_operand 0 "single_bit_mask_operand"))))
- 
  (define_predicate "not_single_bit_mask_operand"
    (and (match_code "const_int")
         (match_test "SINGLE_BIT_MASK_OPERAND (~UINTVAL (op))")))
--- 380,385 ----
***************
*** 685,687 ****
--- 677,687 ----
    (and (match_operand 0 "register_operand")
         (match_test "REGNO (op) == RETURN_ADDR_REGNUM
  		    || REGNO (op) == T0_REGNUM")))
+ 
+ (define_predicate "bitpos_mask_operand"
+   (and (match_code "const_int")
+        (match_test "TARGET_64BIT ? INTVAL (op) == 63 : INTVAL (op) == 31")))
+ 
+ (define_predicate "reg_or_const_int_operand"
+   (ior (match_operand 0 "const_int_operand")
+        (match_operand 0 "register_operand")))
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv-opts.h gcc-16-20250511/gcc/config/riscv/riscv-opts.h
*** gcc-16-20250504/gcc/config/riscv/riscv-opts.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv-opts.h	Sun May 11 22:32:09 2025
*************** enum riscv_tls_type {
*** 162,165 ****
--- 162,167 ----
  #define TARGET_VECTOR_AUTOVEC_SEGMENT					       \
    (TARGET_VECTOR && riscv_mautovec_segment)
  
+ #define GPR2VR_COST_UNPROVIDED -1
+ 
  #endif /* ! GCC_RISCV_OPTS_H */
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv-passes.def gcc-16-20250511/gcc/config/riscv/riscv-passes.def
*** gcc-16-20250504/gcc/config/riscv/riscv-passes.def	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv-passes.def	Sun May 11 22:32:09 2025
*************** INSERT_PASS_AFTER (pass_rtl_store_motion
*** 21,23 ****
--- 21,25 ----
  INSERT_PASS_AFTER (pass_split_all_insns, 1, pass_avlprop);
  INSERT_PASS_BEFORE (pass_fast_rtl_dce, 1, pass_vsetvl);
  INSERT_PASS_BEFORE (pass_shorten_branches, 1, pass_insert_landing_pad);
+ INSERT_PASS_AFTER (pass_cse2, 1, pass_vector_permconst);
+ 
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv-protos.h gcc-16-20250511/gcc/config/riscv/riscv-protos.h
*** gcc-16-20250504/gcc/config/riscv/riscv-protos.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv-protos.h	Sun May 11 22:32:09 2025
*************** extern void riscv_expand_sssub (rtx, rtx
*** 140,145 ****
--- 140,146 ----
  extern void riscv_expand_ustrunc (rtx, rtx);
  extern void riscv_expand_sstrunc (rtx, rtx);
  extern int riscv_register_move_cost (machine_mode, reg_class_t, reg_class_t);
+ extern bool synthesize_ior_xor (rtx_code, rtx [3]);
  
  #ifdef RTX_CODE
  extern void riscv_expand_int_scc (rtx, enum rtx_code, rtx, rtx, bool *invert_ptr = 0);
*************** rtl_opt_pass * make_pass_shorten_memrefs
*** 201,206 ****
--- 202,209 ----
  rtl_opt_pass * make_pass_avlprop (gcc::context *ctxt);
  rtl_opt_pass * make_pass_vsetvl (gcc::context *ctxt);
  rtl_opt_pass * make_pass_insert_landing_pad (gcc::context *ctxt);
+ rtl_opt_pass * make_pass_vector_permconst (gcc::context *ctxt);
+ 
  
  /* Routines implemented in riscv-string.c.  */
  extern bool riscv_expand_block_compare (rtx, rtx, rtx, rtx);
*************** struct riscv_tune_info {
*** 834,839 ****
--- 837,843 ----
  const struct riscv_tune_info *
  riscv_parse_tune (const char *, bool);
  const cpu_vector_cost *get_vector_costs ();
+ int get_gr2vr_cost ();
  
  enum
  {
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv-subset.h gcc-16-20250511/gcc/config/riscv/riscv-subset.h
*** gcc-16-20250504/gcc/config/riscv/riscv-subset.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv-subset.h	Sun May 11 22:32:09 2025
*************** private:
*** 82,87 ****
--- 82,89 ----
    const char *parse_single_multiletter_ext (const char *, const char *,
  					    const char *, bool);
  
+   std::string parse_profiles (const char*);
+ 
    void handle_implied_ext (const char *);
    bool check_implied_ext ();
    void handle_combine_ext ();
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv-vect-permconst.cc gcc-16-20250511/gcc/config/riscv/riscv-vect-permconst.cc
*** gcc-16-20250504/gcc/config/riscv/riscv-vect-permconst.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/config/riscv/riscv-vect-permconst.cc	Sun May 11 22:32:09 2025
***************
*** 0 ****
--- 1,318 ----
+ /* Copyright (C) 2024 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or(at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #define IN_TARGET_CODE 1
+ #define INCLUDE_ALGORITHM
+ #define INCLUDE_FUNCTIONAL
+ #define INCLUDE_MEMORY
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "backend.h"
+ #include "rtl.h"
+ #include "target.h"
+ #include "tree-pass.h"
+ #include "df.h"
+ #include "rtl-ssa.h"
+ #include "cfgcleanup.h"
+ #include "insn-attr.h"
+ #include "tm-constrs.h"
+ #include "insn-opinit.h"
+ #include "cfgrtl.h"
+ 
+ /* So the basic idea of this pass is to identify loads of permutation
+    constants from the constant pool which could instead be trivially
+    derived from some earlier vector permutation constant.  This will
+    replace a memory load from the constant pool with a vadd.vi
+    instruction.
+ 
+    Conceptually this is much like the related_values optimization in
+    CSE, reload_cse_move2add or using SLSR to optimize constant synthesis.
+    If we wanted to make this generic I would suggest putting it into CSE
+    and providing target hooks to determine if particular permutation
+    constants could be derived from earlier permutation constants.  */
+ 
+ const pass_data pass_data_vect_permconst = {
+   RTL_PASS,	 /* type */
+   "vect_permconst",	 /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_NONE,	 /* tv_id */
+   0,		 /* properties_required */
+   0,		 /* properties_provided */
+   0,		 /* properties_destroyed */
+   0,		 /* todo_flags_start */
+   0,		 /* todo_flags_finish */
+ };
+ 
+ /* Entry in the hash table.  We "normalize" the permutation constant
+    by adjusting all entries by the value in the first element.  This
+    allows simple hashing to discover permutation constants that differ
+    by a single constant across all their elements and may be derived
+    from each other with a vadd.vi.  */
+ 
+ struct vector_permconst_entry
+ {
+   /* The CONST_VECTOR in normalized form (first entry is zero).  */
+   /* We could avoid copying the vector with a more customized hash
+      routine which took care of normalization.  */
+   rtx normalized_vec;
+ 
+   /* The destination register holding the CONST_VECTOR.  When the optimization
+      applies this will be used as a source operand in the vadd.vi.  */
+   rtx dest;
+ 
+   /* The insn generating DEST, the only reason we need this is because we
+      do not invalidate entries which implies we have to verify that DEST
+      is unchanged between INSN and the point where we want to use DEST
+      to derive a new permutation constant.  */
+   rtx_insn *insn;
+ 
+   /* The bias of this entry used for normalization.  If this value is added
+      to each element in NORMALIZED_VEC we would have the original permutation
+      constant.  */
+   HOST_WIDE_INT bias;
+ };
+ 
+ struct const_vector_hasher : nofree_ptr_hash <vector_permconst_entry>
+ {
+   static inline hashval_t hash (const vector_permconst_entry *);
+   static inline bool equal (const vector_permconst_entry *,
+ 			    const vector_permconst_entry *);
+ };
+ 
+ inline bool
+ const_vector_hasher::equal (const vector_permconst_entry *vpe1,
+ 			    const vector_permconst_entry *vpe2)
+ {
+   /* Do the cheap tests first, namely that the mode and number of entries
+      match between the two enries.  */
+   if (GET_MODE (vpe1->normalized_vec) != GET_MODE (vpe2->normalized_vec))
+     return false;
+ 
+   if (CONST_VECTOR_NUNITS (vpe1->normalized_vec).to_constant ()
+       != CONST_VECTOR_NUNITS (vpe2->normalized_vec).to_constant ())
+     return false;
+ 
+   /* Check the value of each entry in the vector.  We violate structure
+      sharing rules inside this pass, so while pointer equality would normally
+      be OK, it isn't here.  */
+   for (int i = 0;
+        i < CONST_VECTOR_NUNITS (vpe1->normalized_vec).to_constant ();
+        i++)
+     if (!rtx_equal_p (CONST_VECTOR_ELT (vpe1->normalized_vec, i),
+ 		      CONST_VECTOR_ELT (vpe2->normalized_vec, i)))
+       return false;
+ 
+   return true;
+ }
+ 
+ inline hashval_t
+ const_vector_hasher::hash (const vector_permconst_entry *vpe)
+ {
+   int do_not_record;
+   return hash_rtx (vpe->normalized_vec, Pmode, &do_not_record, NULL, false);
+ }
+ 
+ 
+ class vector_permconst : public rtl_opt_pass
+ {
+ public:
+   vector_permconst (gcc::context *ctxt)
+     : rtl_opt_pass (pass_data_vect_permconst, ctxt) {}
+ 
+   /* opt_pass methods: */
+   virtual bool gate (function *) final override
+   {
+     return TARGET_VECTOR && optimize > 0;
+   }
+   virtual unsigned int execute (function *) final override;
+ 
+ private:
+   void process_bb (basic_block);
+   hash_table<const_vector_hasher> *vector_permconst_table;
+ }; // class pass_vector_permconst
+ 
+ /* Try to optimize vector permutation constants in BB.  */
+ void
+ vector_permconst::process_bb (basic_block bb)
+ {
+   vector_permconst_table = new hash_table<const_vector_hasher> (11);
+ 
+   /* Walk the insns in BB searching for vector loads from the constant pool
+      which can be satisfied by adjusting an earlier load with trivial
+      arithmetic.  */
+   rtx_insn *insn;
+   FOR_BB_INSNS (bb, insn)
+     {
+       if (!INSN_P (insn))
+ 	continue;
+ 
+       rtx set = single_set (insn);
+       if (!set)
+ 	continue;
+ 
+       rtx dest = SET_DEST (set);
+       if (GET_MODE_CLASS (GET_MODE (dest)) != MODE_VECTOR_INT)
+ 	continue;
+ 
+       rtx src = SET_SRC (set);
+       if (!MEM_P (src))
+ 	continue;
+ 
+       /* A load from the constant pool should have a REG_EQUAL
+ 	 note with the vector contant in the note.  */
+       rtx note = find_reg_equal_equiv_note (insn);
+       if (!note
+ 	  || REG_NOTE_KIND (note) != REG_EQUAL
+ 	  || GET_CODE (XEXP (note, 0)) != CONST_VECTOR)
+ 	continue;
+ 
+       if (!CONST_VECTOR_NUNITS (XEXP (note, 0)).is_constant ())
+ 	continue;
+ 
+       /* XXX Do we need to consider other forms of constants?  */
+ 
+       /* We want to be selective about what gets past this point since
+ 	 we make a copy of the vector and possibly enter it into the
+ 	 hash table.  So reject cases that are not likely a permutation
+ 	 constant.  ie, negative bias and large biases.  We arbitrarily
+ 	 use 16k as the largest vector size in bits we try to optimize.
+ 
+ 	 It may seem like a bias outside the range of vadd.vi should
+ 	 be rejected, but what really matters is the difference of
+ 	 biases across the two permutation constants.  */
+       rtx cvec = XEXP (note, 0);
+       HOST_WIDE_INT bias = INTVAL (CONST_VECTOR_ELT (cvec, 0));
+       if (bias < 0 || bias > 16384 / 8)
+ 	continue;
+ 
+       /* We need to verify that each element would be a valid value
+ 	 in the inner mode after applying the bias.  */
+       machine_mode inner = GET_MODE_INNER (GET_MODE (cvec));
+       HOST_WIDE_INT precision = GET_MODE_PRECISION (inner).to_constant ();
+       int i;
+       for (i = 0; i < CONST_VECTOR_NUNITS (cvec).to_constant (); i++)
+ 	{
+ 	  HOST_WIDE_INT val = INTVAL (CONST_VECTOR_ELT (cvec, i)) - bias;
+ 	  if (val != sext_hwi (val, precision))
+ 	    break;
+ 	}
+ 
+       /* If the loop terminated early, then we found a case where the
+ 	 adjusted constant would not fit, so we can't record the constant
+ 	 for this case (it's unlikely to be useful anyway.  */
+       if (i != CONST_VECTOR_NUNITS (cvec).to_constant ())
+ 	continue;
+ 
+       /* At this point we have a load of a constant integer vector from the
+ 	 constant pool.  That constant integer vector is hopefully a
+ 	 permutation constant.  We need to make a copy of the vector and
+ 	 normalize it to zero.
+ 
+ 	 XXX This violates structure sharing conventions.  */
+       rtvec_def *nvec = gen_rtvec (CONST_VECTOR_NUNITS (cvec).to_constant ());
+ 
+       for (i = 0; i < CONST_VECTOR_NUNITS (cvec).to_constant (); i++)
+ 	nvec->elem[i] = GEN_INT (INTVAL (CONST_VECTOR_ELT (cvec, i)) - bias);
+ 
+       rtx copy = gen_rtx_CONST_VECTOR (GET_MODE (cvec), nvec);
+ 
+       /* Now that we have a normalized vector, look it up in the hash table,
+ 	 inserting it if it wasn't already in the table.  */
+       struct vector_permconst_entry tmp;
+       tmp.normalized_vec = copy;
+       struct vector_permconst_entry **slot
+ 	= vector_permconst_table->find_slot (&tmp, INSERT);
+       if (*slot == NULL)
+ 	{
+ 	  /* This constant was not in the table, so initialize the hash table
+ 	     entry.  */
+ 	  *slot = XNEW (vector_permconst_entry);
+ 	  (*slot)->normalized_vec = copy;
+ 	  (*slot)->dest = dest;
+ 	  (*slot)->bias = bias;
+ 	  (*slot)->insn = insn;
+ 	}
+       else
+ 	{
+ 	  /* A hit in the hash table.  We may be able to optimize this case.
+ 
+ 	     If the difference in biases fits in the immediate range for
+ 	     vadd.vi, then we may optimize.  */
+ 	  HOST_WIDE_INT adjustment = bias - (*slot)->bias;
+ 	  if (IN_RANGE (adjustment, -16, 15))
+ 	    {
+ 	      /* We also need to make sure the destination register was not
+ 		 modified.  I've chosen to test for that at optimization time
+ 		 rather than invalidate entries in the table.  This could be
+ 		 changed to use REG_TICK like schemes or true invalidation if
+ 		 this proves too compile-time costly.  */
+ 	      if (!reg_set_between_p ((*slot)->dest, (*slot)->insn, insn))
+ 		{
+ 		  /* Instead of loading from the constant pool, adjust the
+ 		     output of the earlier insn into our destination.  */
+ 		  rtx x = gen_const_vec_duplicate (GET_MODE (copy),
+ 						   GEN_INT (adjustment));
+ 		  rtx plus = gen_rtx_PLUS (GET_MODE (copy), (*slot)->dest, x);
+ 		  rtx set = gen_rtx_SET (dest, plus);
+ 		  rtx_insn *new_insn = emit_insn_after (set, insn);
+ 		  /* XXX Should we copy over the REG_EQUAL note first?  */
+ 		  delete_insn (insn);
+ 		  insn = new_insn;
+ 		}
+ 	    }
+ 
+ 	  /* We always keep the hash table entry pointing to the most recent
+ 	     INSN that could generate the normalized entry.  We can adjust
+ 	     in the future if data says it's useful to do so.  This just
+ 	     keeps things simple for now.
+ 
+ 	     For example, we might want to keep multiple entries if they
+ 	     have a different biases.  */
+ 	  (*slot)->dest = dest;
+ 	  (*slot)->bias = bias;
+ 	  (*slot)->insn = insn;
+ 	}
+     }
+ 
+   /* We construct and tear down the table for each block.  This may
+      be overly expensive.  */
+   vector_permconst_table->empty ();
+ }
+ 
+ /* Main entry point for this pass.  */
+ unsigned int
+ vector_permconst::execute (function *fn)
+ {
+   /* Handle each block independently.  While this should work nicely on EBBs,
+      let's wait for real world cases where it matters before adding that
+      complexity.  */
+   basic_block bb;
+   FOR_EACH_BB_FN (bb, fn)
+     process_bb (bb);
+ 
+   return 0;
+ }
+ 
+ rtl_opt_pass *
+ make_pass_vector_permconst (gcc::context *ctxt)
+ {
+   return new vector_permconst (ctxt);
+ }
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv-vector-costs.cc gcc-16-20250511/gcc/config/riscv/riscv-vector-costs.cc
*** gcc-16-20250504/gcc/config/riscv/riscv-vector-costs.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv-vector-costs.cc	Sun May 11 22:32:09 2025
*************** costs::adjust_stmt_cost (enum vect_cost_
*** 1121,1127 ****
      {
      case scalar_to_vec:
        stmt_cost += (FLOAT_TYPE_P (vectype) ? costs->regmove->FR2VR
! 		    : costs->regmove->GR2VR);
        break;
      case vec_to_scalar:
        stmt_cost += (FLOAT_TYPE_P (vectype) ? costs->regmove->VR2FR
--- 1121,1127 ----
      {
      case scalar_to_vec:
        stmt_cost += (FLOAT_TYPE_P (vectype) ? costs->regmove->FR2VR
! 		    : get_gr2vr_cost ());
        break;
      case vec_to_scalar:
        stmt_cost += (FLOAT_TYPE_P (vectype) ? costs->regmove->VR2FR
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv.cc gcc-16-20250511/gcc/config/riscv/riscv.cc
*** gcc-16-20250504/gcc/config/riscv/riscv.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv.cc	Sun May 11 22:32:09 2025
*************** riscv_rtx_costs (rtx x, machine_mode mod
*** 3863,3869 ****
       Cost Model need to be well analyzed and supported in the future. */
    if (riscv_v_ext_mode_p (mode))
      {
!       *total = COSTS_N_INSNS (1);
        return true;
      }
  
--- 3863,3902 ----
       Cost Model need to be well analyzed and supported in the future. */
    if (riscv_v_ext_mode_p (mode))
      {
!       int gr2vr_cost = get_gr2vr_cost ();
! 
!       switch (outer_code)
! 	{
! 	case SET:
! 	  {
! 	    switch (GET_CODE (x))
! 	      {
! 	      case VEC_DUPLICATE:
! 		*total = gr2vr_cost * COSTS_N_INSNS (1);
! 		break;
! 	      case PLUS:
! 		{
! 		  rtx op_0 = XEXP (x, 0);
! 		  rtx op_1 = XEXP (x, 1);
! 
! 		  if (GET_CODE (op_0) == VEC_DUPLICATE
! 		      || GET_CODE (op_1) == VEC_DUPLICATE)
! 		    *total = (gr2vr_cost + 1) * COSTS_N_INSNS (1);
! 		  else
! 		    *total = COSTS_N_INSNS (1);
! 		}
! 		break;
! 	      default:
! 		*total = COSTS_N_INSNS (1);
! 		break;
! 	      }
! 	  }
! 	  break;
! 	default:
! 	  *total = COSTS_N_INSNS (1);
! 	  break;
! 	}
! 
        return true;
      }
  
*************** riscv_register_move_cost (machine_mode m
*** 9690,9696 ****
    if (to == V_REGS)
      {
        if (from_is_gpr)
! 	return get_vector_costs ()->regmove->GR2VR;
        else if (from_is_fpr)
  	return get_vector_costs ()->regmove->FR2VR;
      }
--- 9723,9729 ----
    if (to == V_REGS)
      {
        if (from_is_gpr)
! 	return get_gr2vr_cost ();
        else if (from_is_fpr)
  	return get_vector_costs ()->regmove->FR2VR;
      }
*************** get_vector_costs ()
*** 12540,12545 ****
--- 12573,12593 ----
    return costs;
  }
  
+ /* Return the cost of operation that move from gpr to vr.
+    It will take the value of --param=gpr2vr_cost if it is provided.
+    Or the default regmove->GR2VR will be returned.  */
+ 
+ int
+ get_gr2vr_cost ()
+ {
+   int cost = get_vector_costs ()->regmove->GR2VR;
+ 
+   if (gpr2vr_cost != GPR2VR_COST_UNPROVIDED)
+     cost = gpr2vr_cost;
+ 
+   return cost;
+ }
+ 
  /* Implement targetm.vectorize.builtin_vectorization_cost.  */
  
  static int
*************** riscv_builtin_vectorization_cost (enum v
*** 12606,12612 ****
  	{
  	  /* TODO: This is too pessimistic in case we can splat.  */
  	  int regmove_cost = fp ? costs->regmove->FR2VR
! 	    : costs->regmove->GR2VR;
  	  return (regmove_cost + common_costs->scalar_to_vec_cost)
  	    * estimated_poly_value (TYPE_VECTOR_SUBPARTS (vectype));
  	}
--- 12654,12660 ----
  	{
  	  /* TODO: This is too pessimistic in case we can splat.  */
  	  int regmove_cost = fp ? costs->regmove->FR2VR
! 	    : get_gr2vr_cost ();
  	  return (regmove_cost + common_costs->scalar_to_vec_cost)
  	    * estimated_poly_value (TYPE_VECTOR_SUBPARTS (vectype));
  	}
*************** expand_crc_using_clmul (scalar_mode crc_
*** 13987,14003 ****
    rtx data = gen_rtx_ZERO_EXTEND (word_mode, operands[2]);
    riscv_expand_op (XOR, word_mode, a0, crc, data);
  
!   if (TARGET_64BIT)
!     emit_insn (gen_riscv_clmul_di (a0, a0, t0));
!   else
!     emit_insn (gen_riscv_clmul_si (a0, a0, t0));
  
!   riscv_expand_op (LSHIFTRT, word_mode, a0, a0,
! 		   gen_int_mode (crc_size, word_mode));
!   if (TARGET_64BIT)
!     emit_insn (gen_riscv_clmul_di (a0, a0, t1));
    else
!     emit_insn (gen_riscv_clmul_si (a0, a0, t1));
  
    if (crc_size > data_size)
      {
--- 14035,14087 ----
    rtx data = gen_rtx_ZERO_EXTEND (word_mode, operands[2]);
    riscv_expand_op (XOR, word_mode, a0, crc, data);
  
!   if (TARGET_ZBKC || TARGET_ZBC)
!     {
!       if (TARGET_64BIT)
! 	emit_insn (gen_riscv_clmul_di (a0, a0, t0));
!       else
! 	emit_insn (gen_riscv_clmul_si (a0, a0, t0));
  
!       riscv_expand_op (LSHIFTRT, word_mode, a0, a0,
! 		       gen_int_mode (crc_size, word_mode));
!       if (TARGET_64BIT)
! 	emit_insn (gen_riscv_clmul_di (a0, a0, t1));
!       else
! 	emit_insn (gen_riscv_clmul_si (a0, a0, t1));
!     }
    else
!     {
!       machine_mode vmode;
!       if (!riscv_vector::get_vector_mode (DImode, 1).exists (&vmode))
! 	gcc_unreachable ();
! 
!       rtx vec = gen_reg_rtx (vmode);
! 
!       insn_code icode1 = code_for_pred_broadcast (vmode);
!       rtx ops1[] = {vec, a0};
!       emit_nonvlmax_insn (icode1, UNARY_OP, ops1, CONST1_RTX (Pmode));
! 
!       rtx rvv1di_reg = gen_rtx_SUBREG (RVVM1DImode, vec, 0);
!       insn_code icode2 = code_for_pred_vclmul_scalar (UNSPEC_VCLMUL,
! 						      E_RVVM1DImode);
!       rtx ops2[] = {rvv1di_reg, rvv1di_reg, t0};
!       emit_nonvlmax_insn (icode2, riscv_vector::BINARY_OP, ops2, CONST1_RTX
! 			  (Pmode));
! 
!       rtx shift_amount = gen_int_mode (data_size, Pmode);
!       insn_code icode3 = code_for_pred_scalar (LSHIFTRT, vmode);
!       rtx ops3[] = {vec, vec, shift_amount};
!       emit_nonvlmax_insn (icode3, BINARY_OP, ops3, CONST1_RTX (Pmode));
! 
!       insn_code icode4 = code_for_pred_vclmul_scalar (UNSPEC_VCLMULH,
! 						      E_RVVM1DImode);
!       rtx ops4[] = {rvv1di_reg, rvv1di_reg, t1};
!       emit_nonvlmax_insn (icode4, riscv_vector::BINARY_OP, ops4, CONST1_RTX
! 			  (Pmode));
! 
!       rtx vec_low_lane = gen_lowpart (DImode, vec);
!       riscv_emit_move (a0, vec_low_lane);
!     }
  
    if (crc_size > data_size)
      {
*************** expand_reversed_crc_using_clmul (scalar_
*** 14046,14064 ****
    rtx a0 = gen_reg_rtx (word_mode);
    riscv_expand_op (XOR, word_mode, a0, crc, data);
  
!   if (TARGET_64BIT)
!     emit_insn (gen_riscv_clmul_di (a0, a0, t0));
!   else
!     emit_insn (gen_riscv_clmul_si (a0, a0, t0));
  
!   rtx num_shift = gen_int_mode (GET_MODE_BITSIZE (word_mode) - data_size,
! 				word_mode);
!   riscv_expand_op (ASHIFT, word_mode, a0, a0, num_shift);
  
!   if (TARGET_64BIT)
!     emit_insn (gen_riscv_clmulh_di (a0, a0, t1));
    else
!     emit_insn (gen_riscv_clmulh_si (a0, a0, t1));
  
    if (crc_size > data_size)
      {
--- 14130,14182 ----
    rtx a0 = gen_reg_rtx (word_mode);
    riscv_expand_op (XOR, word_mode, a0, crc, data);
  
!   if (TARGET_ZBKC || TARGET_ZBC)
!     {
!       if (TARGET_64BIT)
! 	emit_insn (gen_riscv_clmul_di (a0, a0, t0));
!       else
! 	emit_insn (gen_riscv_clmul_si (a0, a0, t0));
  
!       rtx num_shift = gen_int_mode (BITS_PER_WORD - data_size, word_mode);
!       riscv_expand_op (ASHIFT, word_mode, a0, a0, num_shift);
  
!       if (TARGET_64BIT)
! 	emit_insn (gen_riscv_clmulh_di (a0, a0, t1));
!       else
! 	emit_insn (gen_riscv_clmulh_si (a0, a0, t1));
!     }
    else
!     {
!       machine_mode vmode;
!       if (!riscv_vector::get_vector_mode (DImode, 1).exists (&vmode))
! 	gcc_unreachable ();
! 
!       rtx vec = gen_reg_rtx (vmode);
!       insn_code icode1 = code_for_pred_broadcast (vmode);
!       rtx ops1[] = {vec, a0};
!       emit_nonvlmax_insn (icode1, UNARY_OP, ops1, CONST1_RTX (Pmode));
! 
!       rtx rvv1di_reg = gen_rtx_SUBREG (RVVM1DImode, vec, 0);
!       insn_code icode2 = code_for_pred_vclmul_scalar (UNSPEC_VCLMUL,
! 						      E_RVVM1DImode);
!       rtx ops2[] = {rvv1di_reg, rvv1di_reg, t0};
!       emit_nonvlmax_insn (icode2, riscv_vector::BINARY_OP, ops2, CONST1_RTX
! 			  (Pmode));
! 
!       rtx shift_amount = gen_int_mode (BITS_PER_WORD - data_size, Pmode);
!       insn_code icode3 = code_for_pred_scalar (ASHIFT, vmode);
!       rtx ops3[] = {vec, vec, shift_amount};
!       emit_nonvlmax_insn (icode3, BINARY_OP, ops3, CONST1_RTX (Pmode));
! 
!       insn_code icode4 = code_for_pred_vclmul_scalar (UNSPEC_VCLMULH,
! 						      E_RVVM1DImode);
!       rtx ops4[] = {rvv1di_reg, rvv1di_reg, t1};
!       emit_nonvlmax_insn (icode4, riscv_vector::BINARY_OP, ops4, CONST1_RTX
! 			  (Pmode));
! 
!       rtx vec_low_lane = gen_lowpart (DImode, vec);
!       riscv_emit_move (a0, vec_low_lane);
!     }
  
    if (crc_size > data_size)
      {
*************** bool need_shadow_stack_push_pop_p ()
*** 14092,14097 ****
--- 14210,14414 ----
    return is_zicfiss_p () && riscv_save_return_addr_reg_p ();
  }
  
+ /* Synthesize OPERANDS[0] = OPERANDS[1] CODE OPERANDS[2].
+ 
+     OPERANDS[0] and OPERANDS[1] will be a REG and may be the same
+     REG.
+ 
+     OPERANDS[2] is a CONST_INT.
+ 
+     CODE is IOR or XOR.
+ 
+     Return TRUE if the operation was fully synthesized and the caller
+     need not generate additional code.  Return FALSE if the operation
+     was not synthesized and the caller is responsible for emitting the
+     proper sequence.  */
+ 
+ bool
+ synthesize_ior_xor (rtx_code code, rtx operands[3])
+ {
+   /* Trivial cases that don't need synthesis.  */
+   if (SMALL_OPERAND (INTVAL (operands[2]))
+      || ((TARGET_ZBS || TARGET_XTHEADBS || TARGET_ZBKB)
+ 	 && single_bit_mask_operand (operands[2], word_mode)))
+     return false;
+ 
+   /* The number of instructions to synthesize the constant is a good
+      estimate of the budget.  That does not account for out of order
+      execution an fusion in the constant synthesis those would naturally
+      decrease the budget.  It also does not account for the IOR/XOR at
+      the end of the sequence which would increase the budget.  */
+   int budget = (TARGET_ZBS ? riscv_const_insns (operands[2], true) : -1);
+   int original_budget = budget;
+ 
+   /* Bits we need to set in operands[0].  As we synthesize the operation,
+      we clear bits in IVAL.  Once IVAL is zero, then synthesis of the
+      operation is complete.  */
+   unsigned HOST_WIDE_INT ival = INTVAL (operands[2]);
+   
+   /* Check if we want to use [x]ori. Then get the remaining bits
+      and decrease the budget by one. */
+   if ((ival & HOST_WIDE_INT_UC (0x7ff)) != 0)
+     {
+       ival &= ~HOST_WIDE_INT_UC (0x7ff);
+       budget--;
+     }
+ 
+   /* Check for bseti cases. For each remaining bit in ival,
+      decrease the budget by one. */
+   while (ival)
+     {
+       HOST_WIDE_INT tmpval = HOST_WIDE_INT_UC (1) << ctz_hwi (ival);
+       ival &= ~tmpval;
+       budget--;
+     }
+ 
+   /* If we're flipping all but a small number of bits we can pre-flip
+      the outliers, then flip all the bits, which would restore those
+      bits that were pre-flipped. */
+   if ((TARGET_ZBS || TARGET_XTHEADBS || TARGET_ZBKB)
+       && budget < 0
+       && code == XOR
+       && popcount_hwi (~INTVAL (operands[2])) < original_budget)
+     {
+       /* Pre-flipping bits we want to preserve.  */
+       rtx input = operands[1];
+       ival = ~INTVAL (operands[2]);
+       while (ival)
+ 	{
+ 	  HOST_WIDE_INT tmpval = HOST_WIDE_INT_UC (1) << ctz_hwi (ival);
+ 	  rtx x = GEN_INT (tmpval);
+ 	  x = gen_rtx_XOR (word_mode, input, x);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 	  input = operands[0];
+ 	  ival &= ~tmpval;
+ 	}
+ 
+       /* Now flip all the bits, which restores the bits we were
+ 	 preserving.  */
+       rtx x = gen_rtx_NOT (word_mode, input);
+       emit_insn (gen_rtx_SET (operands[0], x));
+       return true;
+     }
+ 
+   /* One more approach we can try.  If our budget is 3+ instructions,
+      then we can try to rotate the source so that the bits we want to
+      set are in the low 11 bits.  We then use [x]ori to set those low
+      bits, then rotate things back into their proper place.  */
+   if ((TARGET_ZBB || TARGET_XTHEADBB || TARGET_ZBKB)
+       && budget < 0
+       && popcount_hwi (INTVAL (operands[2])) <= 11
+       && riscv_const_insns (operands[2], true) >= 3)
+     {
+       ival = INTVAL (operands[2]);
+       /* First see if the constant trivially fits into 11 bits in the LSB.  */
+       int lsb = ctz_hwi (ival);
+       int msb = BITS_PER_WORD - 1 - clz_hwi (ival);
+       if (msb - lsb + 1 <= 11)
+ 	{
+ 	  /* Rotate the source right by LSB bits.  */
+ 	  rtx x = GEN_INT (lsb);
+ 	  x = gen_rtx_ROTATERT (word_mode, operands[1], x);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 
+ 	  /* Shift the constant right by LSB bits.  */
+ 	  x = GEN_INT (ival >> lsb);
+ 
+ 	  /* Perform the IOR/XOR operation.  */
+ 	  x = gen_rtx_fmt_ee (code, word_mode, operands[0], x);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 
+ 	  /* And rotate left to put everything back in place, we don't
+ 	     have rotate left by a constant, so use rotate right by
+ 	     an adjusted constant.  */
+ 	  x = GEN_INT (BITS_PER_WORD - lsb);
+ 	  x = gen_rtx_ROTATERT (word_mode, operands[1], x);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 	  return true;
+ 	}
+ 
+       /* Maybe the bits are split between the high and low parts
+ 	 of the constant.  A bit more complex, but still manageable.
+ 
+ 	 Conceptually we want to rotate left the constant by the number
+ 	 of leading zeros after masking off all but the low 11 bits.  */
+       int rotcount = clz_hwi (ival & 0x7ff) - (BITS_PER_WORD - 11);
+ 
+       /* Rotate the constant left by MSB bits.  */
+       ival = (ival << rotcount) | (ival >> (BITS_PER_WORD - rotcount));
+ 
+       /* Now we can do the same tests as before. */
+       lsb = ctz_hwi (ival);
+       msb = BITS_PER_WORD - clz_hwi (ival);
+       if ((INTVAL (operands[2]) & HOST_WIDE_INT_UC (0x7ff)) != 0
+ 	  && msb - lsb + 1 <= 11)
+ 	{
+ 	  /* Rotate the source left by ROTCOUNT bits, we don't have
+ 	     rotate left by a constant, so use rotate right by an
+ 	     adjusted constant.  */
+ 	  rtx x = GEN_INT (BITS_PER_WORD - rotcount);
+ 	  x = gen_rtx_ROTATERT (word_mode, operands[1], x);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 
+ 	  /* We've already rotated the constant.  So perform the IOR/XOR
+ 	     operation.  */
+ 	  x = GEN_INT (ival);
+ 	  x = gen_rtx_fmt_ee (code, word_mode, operands[0], x);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 
+ 	  /* And rotate right to put everything into its proper place.  */
+ 	  x = GEN_INT (rotcount);
+ 	  x = gen_rtx_ROTATERT (word_mode, operands[0], x);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 	  return true;
+ 	}
+     }
+ 
+   /* If after accounting for bseti the remaining budget has 
+      gone to less than zero, it forces the value into a
+      register and performs the IOR operation.  It returns
+      TRUE to the caller so the caller knows code generation
+      is complete. */
+   if (budget < 0)
+     {
+       rtx x = force_reg (word_mode, operands[2]); 
+       x = gen_rtx_fmt_ee (code, word_mode, operands[1], x);
+       emit_insn (gen_rtx_SET (operands[0], x));
+       return true;
+     }
+ 
+   /* Synthesis is better than loading the constant.  */
+   ival = INTVAL (operands[2]);
+   rtx input = operands[1];
+ 
+   /* Emit the [x]ori insn that sets the low 11 bits into
+      the proper state.  */
+   if ((ival & HOST_WIDE_INT_UC (0x7ff)) != 0)
+     {
+       rtx x = GEN_INT (ival & HOST_WIDE_INT_UC (0x7ff));
+       x = gen_rtx_fmt_ee (code, word_mode, input, x);
+       emit_insn (gen_rtx_SET (operands[0], x));
+       input = operands[0];
+       ival &= ~HOST_WIDE_INT_UC (0x7ff);
+     }
+ 
+   /* We figure out a single bit as a constant and
+      generate a CONST_INT node for that.  Then we 
+      construct the IOR node, then the SET node and 
+      emit it.  An IOR with a suitable constant that is
+      a single bit will be implemented with a bseti. */
+   while (ival)
+     {
+       HOST_WIDE_INT tmpval = HOST_WIDE_INT_UC (1) << ctz_hwi (ival);
+       rtx x = GEN_INT (tmpval);
+       x = gen_rtx_fmt_ee (code, word_mode, input, x);
+       emit_insn (gen_rtx_SET (operands[0], x));
+       input = operands[0];
+       ival &= ~tmpval;
+     }
+   return true;
+ }
+ 
  /* Initialize the GCC target structure.  */
  #undef TARGET_ASM_ALIGNED_HI_OP
  #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv.md gcc-16-20250511/gcc/config/riscv/riscv.md
*** gcc-16-20250504/gcc/config/riscv/riscv.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv.md	Sun May 11 22:32:09 2025
***************
*** 1767,1774 ****
  (define_expand "<optab><mode>3"
    [(set (match_operand:X 0 "register_operand")
  	(any_or:X (match_operand:X 1 "register_operand" "")
! 		   (match_operand:X 2 "arith_or_zbs_operand" "")))]
!   "")
  
  (define_insn "*<optab><mode>3"
    [(set (match_operand:X                0 "register_operand" "=r,r")
--- 1767,1781 ----
  (define_expand "<optab><mode>3"
    [(set (match_operand:X 0 "register_operand")
  	(any_or:X (match_operand:X 1 "register_operand" "")
! 		   (match_operand:X 2 "reg_or_const_int_operand" "")))]
!   ""
! 
! {
!   /* If synthesis of the logical op is successful, then no further code
!      generation is necessary.  Else just generate code normally.  */
!   if (CONST_INT_P (operands[2]) && synthesize_ior_xor (<OPTAB>, operands))
!     DONE;
! })
  
  (define_insn "*<optab><mode>3"
    [(set (match_operand:X                0 "register_operand" "=r,r")
***************
*** 2937,2943 ****
    [(set_attr "type" "shift")
     (set_attr "mode" "DI")])
  
! (define_insn_and_split "*<optab><GPR:mode>3_mask_1"
    [(set (match_operand:GPR     0 "register_operand" "= r")
  	(any_shift:GPR
  	    (match_operand:GPR 1 "register_operand" "  r")
--- 2944,2950 ----
    [(set_attr "type" "shift")
     (set_attr "mode" "DI")])
  
! (define_insn "*<optab><GPR:mode>3_mask_1"
    [(set (match_operand:GPR     0 "register_operand" "= r")
  	(any_shift:GPR
  	    (match_operand:GPR 1 "register_operand" "  r")
***************
*** 2946,2957 ****
  	       (match_operand:GPR2 2 "register_operand"  "r")
  	       (match_operand 3 "<GPR:shiftm1>"))])))]
    ""
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(any_shift:GPR (match_dup 1)
! 		      (match_dup 2)))]
!   "operands[2] = gen_lowpart (QImode, operands[2]);"
    [(set_attr "type" "shift")
     (set_attr "mode" "<GPR:MODE>")])
  
--- 2953,2959 ----
  	       (match_operand:GPR2 2 "register_operand"  "r")
  	       (match_operand 3 "<GPR:shiftm1>"))])))]
    ""
!   "<insn>\t%0,%1,%2"
    [(set_attr "type" "shift")
     (set_attr "mode" "<GPR:MODE>")])
  
***************
*** 2970,2976 ****
    [(set_attr "type" "shift")
     (set_attr "mode" "SI")])
  
! (define_insn_and_split "*<optab>si3_extend_mask"
    [(set (match_operand:DI                   0 "register_operand" "= r")
  	(sign_extend:DI
  	    (any_shift:SI
--- 2972,2978 ----
    [(set_attr "type" "shift")
     (set_attr "mode" "SI")])
  
! (define_insn "*<optab>si3_extend_mask"
    [(set (match_operand:DI                   0 "register_operand" "= r")
  	(sign_extend:DI
  	    (any_shift:SI
***************
*** 2980,2992 ****
  	        (match_operand:GPR 2 "register_operand" " r")
  	        (match_operand 3 "const_si_mask_operand"))]))))]
    "TARGET_64BIT"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(sign_extend:DI
! 	 (any_shift:SI (match_dup 1)
! 		       (match_dup 2))))]
!   "operands[2] = gen_lowpart (QImode, operands[2]);"
    [(set_attr "type" "shift")
     (set_attr "mode" "SI")])
  
--- 2982,2988 ----
  	        (match_operand:GPR 2 "register_operand" " r")
  	        (match_operand 3 "const_si_mask_operand"))]))))]
    "TARGET_64BIT"
!   "<insn>w\t%0,%1,%2"
    [(set_attr "type" "shift")
     (set_attr "mode" "SI")])
  
***************
*** 3184,3198 ****
    "#"
    "&& reload_completed"
    [(set (match_dup 4) (lshiftrt:X (subreg:X (match_dup 2) 0) (match_dup 6)))
!    (set (match_dup 4) (and:X (match_dup 4) (match_dup 7)))
     (set (pc) (if_then_else (match_op_dup 1 [(match_dup 4) (const_int 0)])
  			   (label_ref (match_dup 0)) (pc)))]
  {
! 	HOST_WIDE_INT mask = INTVAL (operands[3]);
! 	int trailing = ctz_hwi (mask);
  
! 	operands[6] = GEN_INT (trailing);
! 	operands[7] = GEN_INT (mask >> trailing);
  }
  [(set_attr "type" "branch")])
  
--- 3180,3204 ----
    "#"
    "&& reload_completed"
    [(set (match_dup 4) (lshiftrt:X (subreg:X (match_dup 2) 0) (match_dup 6)))
!    (set (match_dup 4) (match_dup 8))
     (set (pc) (if_then_else (match_op_dup 1 [(match_dup 4) (const_int 0)])
  			   (label_ref (match_dup 0)) (pc)))]
  {
!   HOST_WIDE_INT mask = INTVAL (operands[3]);
!   int trailing = ctz_hwi (mask);
  
!   operands[6] = GEN_INT (trailing);
!   operands[7] = GEN_INT (mask >> trailing);
! 
!   /* This splits after reload, so there's little chance to clean things
!      up.  Rather than emit a ton of RTL here, we can just make a new
!      operand for that RHS and use it.  For the case where the AND would
!      have been redundant, we can make it a NOP move, which does get
!      cleaned up.  */
!   if (operands[7] == CONSTM1_RTX (word_mode))
!     operands[8] = operands[4];
!   else
!     operands[8] = gen_rtx_AND (word_mode, operands[4], operands[7]);
  }
  [(set_attr "type" "branch")])
  
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/riscv.opt gcc-16-20250511/gcc/config/riscv/riscv.opt
*** gcc-16-20250504/gcc/config/riscv/riscv.opt	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/riscv.opt	Sun May 11 22:32:09 2025
*************** Mask(ZA64RS)  Var(riscv_za_subext)
*** 274,279 ****
--- 274,281 ----
  
  Mask(ZA128RS) Var(riscv_za_subext)
  
+ Mask(ZAMA16B) Var(riscv_za_subext)
+ 
  TargetVariable
  int riscv_zb_subext
  
*************** Mask(XCVBI) Var(riscv_xcv_subext)
*** 466,471 ****
--- 468,477 ----
  TargetVariable
  int riscv_sv_subext
  
+ Mask(SVADE) Var(riscv_sv_subext)
+ 
+ Mask(SVADU) Var(riscv_sv_subext)
+ 
  Mask(SVINVAL) Var(riscv_sv_subext)
  
  Mask(SVNAPOT) Var(riscv_sv_subext)
*************** Inline strlen calls if possible.
*** 579,584 ****
--- 585,594 ----
  Target RejectNegative Joined UInteger Var(riscv_strcmp_inline_limit) Init(64)
  Max number of bytes to compare as part of inlined strcmp/strncmp routines (default: 64).
  
+ -param=gpr2vr-cost=
+ Target RejectNegative Joined UInteger Var(gpr2vr_cost) Init(GPR2VR_COST_UNPROVIDED)
+ Set the cost value of the rvv instruction when operate from GPR to VR.
+ 
  Enum
  Name(rvv_max_lmul) Type(enum rvv_max_lmul_enum)
  The RVV possible LMUL (-mrvv-max-lmul=):
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/t-riscv gcc-16-20250511/gcc/config/riscv/t-riscv
*** gcc-16-20250504/gcc/config/riscv/t-riscv	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/t-riscv	Sun May 11 22:32:09 2025
*************** riscv-avlprop.o: $(srcdir)/config/riscv/
*** 104,109 ****
--- 104,116 ----
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(srcdir)/config/riscv/riscv-avlprop.cc
  
+ riscv-vect-permconst.o: $(srcdir)/config/riscv/riscv-vect-permconst.cc \
+   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
+   $(TARGET_H) tree-pass.h df.h rtl-ssa.h cfgcleanup.h insn-attr.h \
+   tm-constrs.h insn-opinit.h cfgrtl.h
+ 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ 		$(srcdir)/config/riscv/riscv-vect-permconst.cc
+ 
  riscv-d.o: $(srcdir)/config/riscv/riscv-d.cc \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
  	$(COMPILE) $<
diff -Nrcpad gcc-16-20250504/gcc/config/riscv/vector-iterators.md gcc-16-20250511/gcc/config/riscv/vector-iterators.md
*** gcc-16-20250504/gcc/config/riscv/vector-iterators.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/riscv/vector-iterators.md	Sun May 11 22:32:09 2025
***************
*** 4041,4046 ****
--- 4041,4050 ----
    smax umax smin umin mult div udiv mod umod
  ])
  
+ (define_code_iterator any_int_binop_no_shift_vx [
+   plus
+ ])
+ 
  (define_code_iterator any_int_unop [neg not])
  
  (define_code_iterator any_commutative_binop [plus and ior xor
diff -Nrcpad gcc-16-20250504/gcc/config/s390/s390-protos.h gcc-16-20250511/gcc/config/s390/s390-protos.h
*** gcc-16-20250504/gcc/config/s390/s390-protos.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/s390/s390-protos.h	Sun May 11 22:32:09 2025
*************** extern bool s390_expand_cmpmem (rtx, rtx
*** 114,119 ****
--- 114,120 ----
  extern void s390_expand_vec_strlen (rtx, rtx, rtx);
  extern void s390_expand_vec_movstr (rtx, rtx, rtx);
  extern bool s390_expand_addcc (enum rtx_code, rtx, rtx, rtx, rtx, rtx);
+ extern void s390_expand_cstoreti4 (rtx, rtx, rtx, rtx);
  extern bool s390_expand_insv (rtx, rtx, rtx, rtx);
  extern void s390_expand_cs (machine_mode, rtx, rtx, rtx, rtx, rtx, bool);
  extern void s390_expand_atomic_exchange_tdsi (rtx, rtx, rtx);
diff -Nrcpad gcc-16-20250504/gcc/config/s390/s390.cc gcc-16-20250511/gcc/config/s390/s390.cc
*** gcc-16-20250504/gcc/config/s390/s390.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/s390/s390.cc	Sun May 11 22:32:09 2025
*************** s390_expand_mask_and_shift (rtx val, mac
*** 7210,7215 ****
--- 7210,7291 ----
  			      NULL_RTX, 1, OPTAB_DIRECT);
  }
  
+ /* Expand optab cstoreti4.  */
+ 
+ void
+ s390_expand_cstoreti4 (rtx dst, rtx cmp, rtx op1, rtx op2)
+ {
+   rtx_code code = GET_CODE (cmp);
+ 
+   if (TARGET_VXE3)
+     {
+       rtx cond = s390_emit_compare (GET_MODE (cmp), code, op1, op2);
+       emit_insn (gen_movsicc (dst, cond, const1_rtx, const0_rtx));
+       return;
+     }
+ 
+   /* Prior VXE3 emulate the comparison.  For an (in)equality test exploit
+      VECTOR COMPARE EQUAL.  For a relational test, first compare the high part
+      via VECTOR ELEMENT COMPARE (LOGICAL).  If the high part does not equal,
+      then consume the CC immediatelly by a subsequent LOAD ON CONDITION.
+      Otherweise, if the high part equals, then perform a subsequent VECTOR
+      COMPARE HIGH LOGICAL followed by a LOAD ON CONDITION.  */
+ 
+   op1 = force_reg (V2DImode, simplify_gen_subreg (V2DImode, op1, TImode, 0));
+   op2 = force_reg (V2DImode, simplify_gen_subreg (V2DImode, op2, TImode, 0));
+ 
+   if (code == EQ || code == NE)
+     {
+       s390_expand_vec_compare_cc (dst, code, op1, op2, code == EQ);
+       return;
+     }
+ 
+   /* Normalize code into either GE(U) or GT(U).  */
+   if (code == LT || code == LE || code == LTU || code == LEU)
+     {
+       std::swap (op1, op2);
+       code = swap_condition (code);
+     }
+ 
+   /* For (un)signed comparisons
+      - high(op1) >= high(op2) instruction VECG op1, op2 sets CC1
+        if the relation does _not_ hold.
+      - high(op1) >  high(op2) instruction VECG op2, op1 sets CC1
+        if the relation holds.  */
+   if (code == GT || code == GTU)
+     std::swap (op1, op2);
+   machine_mode cc_mode = (code == GEU || code == GTU) ? CCUmode : CCSmode;
+   rtx lane0 = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (1, const0_rtx));
+   emit_insn (
+     gen_rtx_SET (gen_rtx_REG (cc_mode, CC_REGNUM),
+ 		 gen_rtx_COMPARE (cc_mode,
+ 				  gen_rtx_VEC_SELECT (DImode, op1, lane0),
+ 				  gen_rtx_VEC_SELECT (DImode, op2, lane0))));
+   rtx ccs_reg = gen_rtx_REG (CCSmode, CC_REGNUM);
+   rtx lab = gen_label_rtx ();
+   s390_emit_jump (lab, gen_rtx_NE (VOIDmode, ccs_reg, const0_rtx));
+   /* At this point we have that high(op1) == high(op2).  Thus, test the low
+      part, now.  For unsigned comparisons
+      - low(op1) >= low(op2) instruction VCHLGS op2, op1 sets CC1
+        if the relation does _not_ hold.
+      - low(op1) >  low(op2) instruction VCHLGS op1, op2 sets CC1
+        if the relation holds.  */
+   std::swap (op1, op2);
+   emit_insn (gen_rtx_PARALLEL (
+     VOIDmode,
+     gen_rtvec (2,
+ 	       gen_rtx_SET (gen_rtx_REG (CCVIHUmode, CC_REGNUM),
+ 			    gen_rtx_COMPARE (CCVIHUmode, op1, op2)),
+ 	       gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (V2DImode)))));
+   emit_label (lab);
+   /* For (un)signed comparison >= any CC except CC1 means that the relation
+      holds.  For (un)signed comparison > only CC1 means that the relation
+      holds.  */
+   rtx_code cmp_code = (code == GE || code == GEU) ? UNGE : LT;
+   rtx cond = gen_rtx_fmt_ee (cmp_code, CCSmode, ccs_reg, const0_rtx);
+   emit_insn (gen_movsicc (dst, cond, const1_rtx, const0_rtx));
+ }
+ 
  /* Generate a vector comparison COND of CMP_OP1 and CMP_OP2 and store
     the result in TARGET.  */
  
*************** s390_expand_vec_compare (rtx target, enu
*** 7310,7318 ****
  /* Expand the comparison CODE of CMP1 and CMP2 and copy 1 or 0 into
     TARGET if either all (ALL_P is true) or any (ALL_P is false) of the
     elements in CMP1 and CMP2 fulfill the comparison.
!    This function is only used to emit patterns for the vx builtins and
!    therefore only handles comparison codes required by the
!    builtins.  */
  void
  s390_expand_vec_compare_cc (rtx target, enum rtx_code code,
  			    rtx cmp1, rtx cmp2, bool all_p)
--- 7386,7394 ----
  /* Expand the comparison CODE of CMP1 and CMP2 and copy 1 or 0 into
     TARGET if either all (ALL_P is true) or any (ALL_P is false) of the
     elements in CMP1 and CMP2 fulfill the comparison.
!    This function is only used in s390_expand_cstoreti4 and to emit patterns for
!    the vx builtins and therefore only handles comparison codes required by
!    those.  */
  void
  s390_expand_vec_compare_cc (rtx target, enum rtx_code code,
  			    rtx cmp1, rtx cmp2, bool all_p)
diff -Nrcpad gcc-16-20250504/gcc/config/s390/s390.md gcc-16-20250511/gcc/config/s390/s390.md
*** gcc-16-20250504/gcc/config/s390/s390.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/s390/s390.md	Sun May 11 22:32:09 2025
***************
*** 993,998 ****
--- 993,1002 ----
  (define_mode_attr asm_fcmp [(CCVEQ "e") (CCVFH "h") (CCVFHE "he")])
  (define_mode_attr insn_cmp [(CCVEQ "eq") (CCVIH "h") (CCVIHU "hl") (CCVFH "h") (CCVFHE "he")])
  
+ (define_mode_iterator CC_SUZ [CCS CCU CCZ])
+ (define_mode_attr l [(CCS "") (CCU "l") (CCZ "")])
+ (define_mode_attr cc_tolower [(CCS "ccs") (CCU "ccu") (CCZ "ccz")])
+ 
  ; Analogue to TOINTVEC / tointvec
  (define_mode_attr TOINT [(TF "TI") (DF "DI") (SF "SI")])
  (define_mode_attr toint [(TF "ti") (DF "di") (SF "si")])
diff -Nrcpad gcc-16-20250504/gcc/config/s390/vector.md gcc-16-20250511/gcc/config/s390/vector.md
*** gcc-16-20250504/gcc/config/s390/vector.md	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/s390/vector.md	Sun May 11 22:32:09 2025
***************
*** 538,543 ****
--- 538,551 ----
    "vlvg<bhfgq>\t%v0,%1,%Y4(%2)"
    [(set_attr "op_type" "VRS")])
  
+ (define_expand "cstoreti4"
+   [(set (match_operand:SI 0 "register_operand")
+ 	(match_operator:SI 1 "ordered_comparison_operator"
+ 	 [(match_operand:TI 2 "register_operand")
+ 	  (match_operand:TI 3 "register_operand")]))]
+   "TARGET_VX"
+   "s390_expand_cstoreti4 (operands[0], operands[1], operands[2], operands[3]); DONE;")
+ 
  
  ;; FIXME: Support also vector mode operands for 0
  ;; This is used via RTL standard name as well as for expanding the builtin
***************
*** 2209,2214 ****
--- 2217,2244 ----
    operands[5] = gen_reg_rtx (V2DImode);
  })
  
+ (define_insn "*vec_cmpv2di_lane0_<cc_tolower>"
+   [(set (reg:CC_SUZ CC_REGNUM)
+ 	(compare:CC_SUZ
+ 	  (vec_select:DI
+ 	    (match_operand:V2DI 0 "register_operand" "v")
+ 	    (parallel [(const_int 0)]))
+ 	  (vec_select:DI
+ 	    (match_operand:V2DI 1 "register_operand" "v")
+ 	    (parallel [(const_int 0)]))))]
+   "TARGET_VX"
+   "vec<l>g\t%v0,%v1"
+   [(set_attr "op_type" "VRR")])
+ 
+ (define_insn "*vec_cmpti_<cc_tolower>"
+   [(set (reg:CC_SUZ CC_REGNUM)
+ 	(compare:CC_SUZ
+ 	  (match_operand:TI 0 "register_operand" "v")
+ 	  (match_operand:TI 1 "register_operand" "v")))]
+   "TARGET_VXE3"
+   "vec<l>q\t%v0,%v1"
+   [(set_attr "op_type" "VRR")])
+ 
  
  ;;
  ;; Floating point compares
diff -Nrcpad gcc-16-20250504/gcc/config/xtensa/xtensa.cc gcc-16-20250511/gcc/config/xtensa/xtensa.cc
*** gcc-16-20250504/gcc/config/xtensa/xtensa.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/config/xtensa/xtensa.cc	Sun May 11 22:32:09 2025
*************** static int
*** 4430,4446 ****
  xtensa_register_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
  			   reg_class_t from, reg_class_t to)
  {
!   if (from == to && from != BR_REGS && to != BR_REGS)
!     return 2;
!   else if (reg_class_subset_p (from, AR_REGS)
! 	   && reg_class_subset_p (to, AR_REGS))
      return 2;
!   else if (reg_class_subset_p (from, AR_REGS) && to == ACC_REG)
!     return 3;
!   else if (from == ACC_REG && reg_class_subset_p (to, AR_REGS))
      return 3;
!   else
!     return 10;
  }
  
  /* Compute a (partial) cost for rtx X.  Return true if the complete
--- 4430,4456 ----
  xtensa_register_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
  			   reg_class_t from, reg_class_t to)
  {
!   /* If both are equal (except for BR_REGS) or belong to AR_REGS,
!      the cost is 2 (the default value).  */
!   if ((from == to && from != BR_REGS && to != BR_REGS)
!       || (reg_class_subset_p (from, AR_REGS)
! 	  && reg_class_subset_p (to, AR_REGS)))
      return 2;
! 
!   /* The cost between AR_REGS and FR_REGS must be <= 8 (2x the default
!      MEMORY_MOVE_COST) to avoid unwanted spills, and > 4 (2x the above
!      case) to avoid excessive register-to-register moves.  */
!   if ((reg_class_subset_p (from, AR_REGS) && to == FP_REGS)
!       || (from == FP_REGS && reg_class_subset_p (to, AR_REGS)))
!     return 5;
! 
!   if ((reg_class_subset_p (from, AR_REGS) && to == ACC_REG)
!       || (from == ACC_REG && reg_class_subset_p (to, AR_REGS)))
      return 3;
! 
!   /* Otherwise, spills to stack (because greater than 2x the default
!      MEMORY_MOVE_COST).  */
!   return 10;
  }
  
  /* Compute a (partial) cost for rtx X.  Return true if the complete
diff -Nrcpad gcc-16-20250504/gcc/config.gcc gcc-16-20250511/gcc/config.gcc
*** gcc-16-20250504/gcc/config.gcc	Sun May  4 22:32:14 2025
--- gcc-16-20250511/gcc/config.gcc	Sun May 11 22:32:09 2025
*************** pru-*-*)
*** 551,557 ****
  riscv*)
  	cpu_type=riscv
  	extra_objs="riscv-builtins.o riscv-c.o riscv-sr.o riscv-shorten-memrefs.o riscv-selftests.o riscv-string.o"
! 	extra_objs="${extra_objs} riscv-v.o riscv-vsetvl.o riscv-vector-costs.o riscv-avlprop.o"
  	extra_objs="${extra_objs} riscv-vector-builtins.o riscv-vector-builtins-shapes.o riscv-vector-builtins-bases.o sifive-vector-builtins-bases.o"
  	extra_objs="${extra_objs} thead.o riscv-target-attr.o riscv-zicfilp.o"
  	d_target_objs="riscv-d.o"
--- 551,557 ----
  riscv*)
  	cpu_type=riscv
  	extra_objs="riscv-builtins.o riscv-c.o riscv-sr.o riscv-shorten-memrefs.o riscv-selftests.o riscv-string.o"
! 	extra_objs="${extra_objs} riscv-v.o riscv-vsetvl.o riscv-vector-costs.o riscv-avlprop.o riscv-vect-permconst.o"
  	extra_objs="${extra_objs} riscv-vector-builtins.o riscv-vector-builtins-shapes.o riscv-vector-builtins-bases.o sifive-vector-builtins-bases.o"
  	extra_objs="${extra_objs} thead.o riscv-target-attr.o riscv-zicfilp.o"
  	d_target_objs="riscv-d.o"
diff -Nrcpad gcc-16-20250504/gcc/configure gcc-16-20250511/gcc/configure
*** gcc-16-20250504/gcc/configure	Sun May  4 22:32:41 2025
--- gcc-16-20250511/gcc/configure	Sun May 11 22:32:52 2025
*************** if test $gcc_cv_as_tls = yes; then
*** 27864,27869 ****
--- 27864,27898 ----
  fi
  
  fi
+ case $target_os in
+   win32 | pe | cygwin* | mingw32*)
+     if test $set_have_as_tls = yes; then
+       # Hack to check whether ld breaks on @secrel32 for Windows
+       if test $in_tree_ld = yes; then
+ 	if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 44 -o "$gcc_cv_gld_major_version" -gt 2; then
+ 	  : # ld support for @secrel32 was fixed in this version
+ 	else
+ 	  as_fn_error $? "ld version is known to have broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information." "$LINENO" 5
+ 	fi
+       elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
+ 	echo '.text'          > conftest.s
+ 	echo 'foo: nop'      >> conftest.s
+ 	echo '.data'         >> conftest.s
+ 	echo '.secrel32 foo' >> conftest.s
+ 	if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 && $gcc_cv_ld -o conftest.exe conftest.o > /dev/null; then
+ 	  if $gcc_cv_objdump -h conftest.exe | grep '\.reloc\>' > /dev/null; then
+ 	    as_fn_error $? "ld has broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information." "$LINENO" 5
+ 	  fi
+ 	else
+ 	  as_fn_error $? "Error occurred while checking for broken secrel32 relocations. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information." "$LINENO" 5
+ 	fi
+ 	rm -f conftest.s conftest.o conftest.exe
+       else
+ 	as_fn_error $? "Cannot check for broken secrel32 relocations to determine --enable-tls support. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information." "$LINENO" 5
+       fi
+     fi
+     ;;
+ esac
  if test $set_have_as_tls = yes ; then
  
  $as_echo "#define HAVE_AS_TLS 1" >>confdefs.h
diff -Nrcpad gcc-16-20250504/gcc/configure.ac gcc-16-20250511/gcc/configure.ac
*** gcc-16-20250504/gcc/configure.ac	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/configure.ac	Sun May 11 22:32:09 2025
*************** else
*** 4207,4212 ****
--- 4207,4241 ----
    [$tls_as_opt], [$conftest_s],,
    [set_have_as_tls=yes])
  fi
+ case $target_os in
+   win32 | pe | cygwin* | mingw32*)
+     if test $set_have_as_tls = yes; then
+       # Hack to check whether ld breaks on @secrel32 for Windows
+       if test $in_tree_ld = yes; then
+ 	if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 44 -o "$gcc_cv_gld_major_version" -gt 2; then
+ 	  : # ld support for @secrel32 was fixed in this version
+ 	else
+ 	  AC_MSG_ERROR([ld version is known to have broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
+ 	fi
+       elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
+ 	echo '.text'          > conftest.s
+ 	echo 'foo: nop'      >> conftest.s
+ 	echo '.data'         >> conftest.s
+ 	echo '.secrel32 foo' >> conftest.s
+ 	if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 && $gcc_cv_ld -o conftest.exe conftest.o > /dev/null; then
+ 	  if $gcc_cv_objdump -h conftest.exe | grep '\.reloc\>' > /dev/null; then
+ 	    AC_MSG_ERROR([ld has broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
+ 	  fi
+ 	else
+ 	  AC_MSG_ERROR([Error occurred while checking for broken secrel32 relocations. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
+ 	fi
+ 	rm -f conftest.s conftest.o conftest.exe
+       else
+ 	AC_MSG_ERROR([Cannot check for broken secrel32 relocations to determine --enable-tls support. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
+       fi
+     fi
+     ;;
+ esac
  if test $set_have_as_tls = yes ; then
    AC_DEFINE(HAVE_AS_TLS, 1,
  	    [Define if your assembler and linker support thread-local storage.])
diff -Nrcpad gcc-16-20250504/gcc/cp/ChangeLog gcc-16-20250511/gcc/cp/ChangeLog
*** gcc-16-20250504/gcc/cp/ChangeLog	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/cp/ChangeLog	Sun May 11 22:32:09 2025
***************
*** 1,3 ****
--- 1,32 ----
+ 2025-05-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120204
+ 	* pt.cc (tsubst_baselink): Always error if lookup fails.
+ 
+ 2025-05-09  Jason Merrill  <jason@redhat.com>
+ 
+ 	* decl2.cc (determine_visibility): Ignore args for friend templates.
+ 
+ 2025-05-09  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/99599
+ 	PR c++/120185
+ 	* class.cc (type_has_converting_constructor): Handle null parm.
+ 	* pt.cc (fn_type_unification): Skip early non-dep checking if
+ 	no concepts.
+ 
+ 2025-05-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/99599
+ 	* cp-tree.h (type_has_converting_constructor): Declare.
+ 	* class.cc (type_has_converting_constructor): New.
+ 	* pt.cc	(conversion_may_instantiate_p): Don't check completeness.
+ 
+ 2025-05-05  Simon Martin  <simon@nasilyan.com>
+ 
+ 	* cp-tree.h (parsing_default_capturing_generic_lambda_in_template):
+ 	Remove obsolete prototype.
+ 
  2025-05-02  Jason Merrill  <jason@redhat.com>
  
  	PR c++/115207
diff -Nrcpad gcc-16-20250504/gcc/cp/class.cc gcc-16-20250511/gcc/cp/class.cc
*** gcc-16-20250504/gcc/cp/class.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/cp/class.cc	Sun May 11 22:32:10 2025
*************** type_has_user_provided_constructor (tree
*** 5724,5729 ****
--- 5724,5773 ----
    return false;
  }
  
+ /* Returns true iff class T has a constructor that accepts a single argument
+    and does not have a single parameter of type reference to T.
+ 
+    This does not exclude explicit constructors because they are still
+    considered for conversions within { } even though choosing one is
+    ill-formed.  */
+ 
+ bool
+ type_has_converting_constructor (tree t)
+ {
+   if (!CLASS_TYPE_P (t))
+     return false;
+ 
+   if (!TYPE_HAS_USER_CONSTRUCTOR (t))
+     return false;
+ 
+   for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (t)); iter; ++iter)
+     {
+       tree fn = *iter;
+       tree parm = FUNCTION_FIRST_USER_PARMTYPE (fn);
+       if (parm == NULL_TREE)
+ 	/* Varargs.  */
+ 	return true;
+       if (parm == void_list_node
+ 	  || !sufficient_parms_p (TREE_CHAIN (parm)))
+ 	/* Can't accept a single argument, so won't be considered for
+ 	   conversion.  */
+ 	continue;
+       if (TREE_CODE (fn) == TEMPLATE_DECL
+ 	  || TREE_CHAIN (parm) != void_list_node)
+ 	/* Not a simple single parameter.  */
+ 	return true;
+       if (TYPE_MAIN_VARIANT (non_reference (TREE_VALUE (parm)))
+ 	  != DECL_CONTEXT (fn))
+ 	/* The single parameter has the wrong type.  */
+ 	return true;
+       if (get_constraints (fn))
+ 	/* Constrained.  */
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
  /* Returns true iff class T has a user-provided or explicit constructor.  */
  
  bool
diff -Nrcpad gcc-16-20250504/gcc/cp/cp-tree.h gcc-16-20250511/gcc/cp/cp-tree.h
*** gcc-16-20250504/gcc/cp/cp-tree.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/cp/cp-tree.h	Sun May 11 22:32:10 2025
*************** extern tree in_class_defaulted_default_c
*** 7056,7061 ****
--- 7056,7062 ----
  extern bool user_provided_p			(tree);
  extern bool type_has_user_provided_constructor  (tree);
  extern bool type_has_non_user_provided_default_constructor (tree);
+ extern bool type_has_converting_constructor	(tree);
  extern bool vbase_has_user_provided_move_assign (tree);
  extern tree default_init_uninitialized_part (tree);
  extern bool trivial_default_constructor_is_constexpr (tree);
*************** extern void cp_finish_omp_range_for (tre
*** 7632,7638 ****
  extern bool cp_maybe_parse_omp_decl (tree, tree);
  extern bool parsing_nsdmi (void);
  extern bool parsing_function_declarator ();
- extern bool parsing_default_capturing_generic_lambda_in_template (void);
  extern void inject_this_parameter (tree, cp_cv_quals);
  extern location_t defparse_location (tree);
  extern void maybe_show_extern_c_location (void);
--- 7633,7638 ----
diff -Nrcpad gcc-16-20250504/gcc/cp/decl2.cc gcc-16-20250511/gcc/cp/decl2.cc
*** gcc-16-20250504/gcc/cp/decl2.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/cp/decl2.cc	Sun May 11 22:32:10 2025
*************** determine_visibility (tree decl)
*** 3160,3166 ****
  	      && !attr)
  	    {
  	      int depth = TMPL_ARGS_DEPTH (args);
! 	      if (DECL_VISIBILITY_SPECIFIED (decl))
  		{
  		  /* A class template member with explicit visibility
  		     overrides the class visibility, so we need to apply
--- 3160,3168 ----
  	      && !attr)
  	    {
  	      int depth = TMPL_ARGS_DEPTH (args);
! 	      if (DECL_UNINSTANTIATED_TEMPLATE_FRIEND_P (TI_TEMPLATE (tinfo)))
! 		/* Class template args don't affect template friends.  */;
! 	      else if (DECL_VISIBILITY_SPECIFIED (decl))
  		{
  		  /* A class template member with explicit visibility
  		     overrides the class visibility, so we need to apply
diff -Nrcpad gcc-16-20250504/gcc/cp/pt.cc gcc-16-20250511/gcc/cp/pt.cc
*** gcc-16-20250504/gcc/cp/pt.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/cp/pt.cc	Sun May 11 22:32:10 2025
*************** tsubst_baselink (tree baselink, tree obj
*** 17477,17486 ****
  
        if (!baselink)
  	{
! 	  if ((complain & tf_error)
! 	      && constructor_name_p (name, qualifying_scope))
! 	    error ("cannot call constructor %<%T::%D%> directly",
! 		   qualifying_scope, name);
  	  return error_mark_node;
  	}
  
--- 17477,17494 ----
  
        if (!baselink)
  	{
! 	  if (complain & tf_error)
! 	    {
! 	      if (constructor_name_p (name, qualifying_scope))
! 		error ("cannot call constructor %<%T::%D%> directly",
! 		       qualifying_scope, name);
! 	      else
! 		/* Lookup succeeded at parse time, but failed during
! 		   instantiation; must be because we're trying to refer to it
! 		   while forming its declaration (c++/120204).  */
! 		error ("declaration of %<%T::%D%> depends on itself",
! 		       qualifying_scope, name);
! 	    }
  	  return error_mark_node;
  	}
  
*************** fn_type_unification (tree fn,
*** 23254,23260 ****
       conversions that we know are not going to induce template instantiation
       (PR99599).  */
    if (strict == DEDUCE_CALL
!       && incomplete
        && check_non_deducible_conversions (parms, args, nargs, fn, strict, flags,
  					  convs, explain_p,
  					  /*noninst_only_p=*/true))
--- 23262,23268 ----
       conversions that we know are not going to induce template instantiation
       (PR99599).  */
    if (strict == DEDUCE_CALL
!       && incomplete && flag_concepts
        && check_non_deducible_conversions (parms, args, nargs, fn, strict, flags,
  					  convs, explain_p,
  					  /*noninst_only_p=*/true))
*************** maybe_adjust_types_for_deduction (tree t
*** 23501,23509 ****
    return result;
  }
  
! /* Return true if computing a conversion from FROM to TO might induce template
!    instantiation.  Conversely, if this predicate returns false then computing
!    the conversion definitely won't induce template instantiation.  */
  
  static bool
  conversion_may_instantiate_p (tree to, tree from)
--- 23509,23521 ----
    return result;
  }
  
! /* Return true if computing a conversion from FROM to TO might consider
!    user-defined conversions, which could lead to arbitrary template
!    instantiations (e.g. g++.dg/cpp2a/concepts-nondep1.C).  If this predicate
!    returns false then computing the conversion definitely won't try UDCs.
! 
!    Note that this restriction parallels LOOKUP_DEFAULTED for CWG1092, but in
!    this case we want the early filter to pass instead of fail.  */
  
  static bool
  conversion_may_instantiate_p (tree to, tree from)
*************** conversion_may_instantiate_p (tree to, t
*** 23511,23546 ****
    to = non_reference (to);
    from = non_reference (from);
  
!   bool ptr_conv_p = false;
!   if (TYPE_PTR_P (to)
!       && TYPE_PTR_P (from))
!     {
!       to = TREE_TYPE (to);
!       from = TREE_TYPE (from);
!       ptr_conv_p = true;
!     }
! 
!   /* If one of the types is a not-yet-instantiated class template
!      specialization, then computing the conversion might instantiate
!      it in order to inspect bases, conversion functions and/or
!      converting constructors.  */
!   if ((CLASS_TYPE_P (to)
!        && !COMPLETE_TYPE_P (to)
!        && CLASSTYPE_TEMPLATE_INSTANTIATION (to))
!       || (CLASS_TYPE_P (from)
! 	  && !COMPLETE_TYPE_P (from)
! 	  && CLASSTYPE_TEMPLATE_INSTANTIATION (from)))
!     return true;
! 
!   /* Converting from one pointer type to another, or between
!      reference-related types, always yields a standard conversion.  */
!   if (ptr_conv_p || reference_related_p (to, from))
      return false;
  
    /* Converting to a non-aggregate class type will consider its
       user-declared constructors, which might induce instantiation.  */
    if (CLASS_TYPE_P (to)
!       && CLASSTYPE_NON_AGGREGATE (to))
      return true;
  
    /* Similarly, converting from a class type will consider its conversion
--- 23523,23536 ----
    to = non_reference (to);
    from = non_reference (from);
  
!   /* Converting between reference-related types is a standard conversion.  */
!   if (reference_related_p (to, from))
      return false;
  
    /* Converting to a non-aggregate class type will consider its
       user-declared constructors, which might induce instantiation.  */
    if (CLASS_TYPE_P (to)
!       && type_has_converting_constructor (to))
      return true;
  
    /* Similarly, converting from a class type will consider its conversion
*************** conversion_may_instantiate_p (tree to, t
*** 23549,23555 ****
        && TYPE_HAS_CONVERSION (from))
      return true;
  
!   /* Otherwise, computing this conversion definitely won't induce
       template instantiation.  */
    return false;
  }
--- 23539,23545 ----
        && TYPE_HAS_CONVERSION (from))
      return true;
  
!   /* Otherwise, computing this conversion won't risk arbitrary
       template instantiation.  */
    return false;
  }
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-client-data-hooks.h gcc-16-20250511/gcc/diagnostic-client-data-hooks.h
*** gcc-16-20250504/gcc/diagnostic-client-data-hooks.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic-client-data-hooks.h	Sun May 11 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 21,26 ****
--- 21,28 ----
  #ifndef GCC_DIAGNOSTIC_CLIENT_DATA_HOOKS_H
  #define GCC_DIAGNOSTIC_CLIENT_DATA_HOOKS_H
  
+ #include "logical-location.h"
+ 
  class sarif_object;
  class client_version_info;
  
*************** class diagnostic_client_data_hooks
*** 35,42 ****
    /* Get version info for this client, or NULL.  */
    virtual const client_version_info *get_any_version_info () const = 0;
  
!   /* Get the current logical_location for this client, or NULL.  */
!   virtual const logical_location *get_current_logical_location () const = 0;
  
    /* Get a sourceLanguage value for FILENAME, or return NULL.
       See SARIF v2.1.0 Appendix J for suggested values.  */
--- 37,49 ----
    /* Get version info for this client, or NULL.  */
    virtual const client_version_info *get_any_version_info () const = 0;
  
!   /* Get the current logical_location_manager for this client, or NULL.  */
!   virtual const logical_location_manager *get_logical_location_manager () const = 0;
! 
!   /* Get the current logical_location, or null.
!      If this returns a non-null logical_location, then
!      get_logical_location_manager must return non-NULL.  */
!   virtual logical_location get_current_logical_location () const = 0;
  
    /* Get a sourceLanguage value for FILENAME, or return NULL.
       See SARIF v2.1.0 Appendix J for suggested values.  */
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-format-html.cc gcc-16-20250511/gcc/diagnostic-format-html.cc
*** gcc-16-20250504/gcc/diagnostic-format-html.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/diagnostic-format-html.cc	Sun May 11 22:32:10 2025
***************
*** 0 ****
--- 1,920 ----
+ /* HTML output for diagnostics.
+    Copyright (C) 2024-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_MAP
+ #define INCLUDE_VECTOR
+ #include "system.h"
+ #include "coretypes.h"
+ #include "diagnostic.h"
+ #include "diagnostic-metadata.h"
+ #include "diagnostic-format.h"
+ #include "diagnostic-format-html.h"
+ #include "diagnostic-output-file.h"
+ #include "diagnostic-buffer.h"
+ #include "selftest.h"
+ #include "selftest-diagnostic.h"
+ #include "pretty-print-format-impl.h"
+ #include "intl.h"
+ 
+ namespace xml {
+ 
+ /* Disable warnings about quoting issues in the pp_xxx calls below
+    that (intentionally) don't follow GCC diagnostic conventions.  */
+ #if __GNUC__ >= 10
+ #  pragma GCC diagnostic push
+ #  pragma GCC diagnostic ignored "-Wformat-diag"
+ #endif
+ 
+ struct node
+ {
+   virtual ~node () {}
+   virtual void write_as_xml (pretty_printer *pp,
+ 			     int depth, bool indent) const = 0;
+   void dump (FILE *out) const;
+   void DEBUG_FUNCTION dump () const { dump (stderr); }
+ };
+ 
+ struct text : public node
+ {
+   text (label_text str)
+   : m_str (std::move (str))
+   {}
+ 
+   void write_as_xml (pretty_printer *pp,
+ 		     int depth, bool indent) const final override;
+ 
+   label_text m_str;
+ };
+ 
+ struct node_with_children : public node
+ {
+   void add_child (std::unique_ptr<node> node);
+   void add_text (label_text str);
+ 
+   std::vector<std::unique_ptr<node>> m_children;
+ };
+ 
+ struct document : public node_with_children
+ {
+   void write_as_xml (pretty_printer *pp,
+ 		     int depth, bool indent) const final override;
+ };
+ 
+ struct element : public node_with_children
+ {
+   element (const char *kind, bool preserve_whitespace)
+   : m_kind (kind),
+     m_preserve_whitespace (preserve_whitespace)
+   {}
+ 
+   void write_as_xml (pretty_printer *pp,
+ 		     int depth, bool indent) const final override;
+ 
+   void set_attr (const char *name, label_text value);
+ 
+   const char *m_kind;
+   bool m_preserve_whitespace;
+   std::map<const char *, label_text> m_attributes;
+ };
+ 
+ /* Implementation.  */
+ 
+ static void
+ write_escaped_text (pretty_printer *pp, const char *text)
+ {
+   gcc_assert (text);
+ 
+   for (const char *p = text; *p; ++p)
+     {
+       char ch = *p;
+       switch (ch)
+ 	{
+ 	default:
+ 	  pp_character (pp, ch);
+ 	  break;
+ 	case '\'':
+ 	  pp_string (pp, "&apos;");
+ 	  break;
+ 	case '"':
+ 	  pp_string (pp, "&quot;");
+ 	  break;
+ 	case '&':
+ 	  pp_string (pp, "&amp;");
+ 	  break;
+ 	case '<':
+ 	  pp_string (pp, "&lt;");
+ 	  break;
+ 	case '>':
+ 	  pp_string (pp, "&gt;");
+ 	  break;
+ 	}
+     }
+ }
+ 
+ /* struct node.  */
+ 
+ void
+ node::dump (FILE *out) const
+ {
+   pretty_printer pp;
+   pp.set_output_stream (out);
+   write_as_xml (&pp, 0, true);
+   pp_flush (&pp);
+ }
+ 
+ /* struct text : public node.  */
+ 
+ void
+ text::write_as_xml (pretty_printer *pp, int /*depth*/, bool /*indent*/) const
+ {
+   write_escaped_text (pp, m_str.get ());
+ }
+ 
+ /* struct node_with_children : public node.  */
+ 
+ void
+ node_with_children::add_child (std::unique_ptr<node> node)
+ {
+   gcc_assert (node.get ());
+   m_children.push_back (std::move (node));
+ }
+ 
+ void
+ node_with_children::add_text (label_text str)
+ {
+   gcc_assert (str.get ());
+   add_child (std::make_unique <text> (std::move (str)));
+ }
+ 
+ 
+ /* struct document : public node_with_children.  */
+ 
+ void
+ document::write_as_xml (pretty_printer *pp, int depth, bool indent) const
+ {
+   pp_string (pp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+   pp_string (pp, "<!DOCTYPE html\n"
+ 	     "     PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
+ 	     "     \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
+   for (auto &iter : m_children)
+     iter->write_as_xml (pp, depth, indent);
+ }
+ 
+ /* struct element : public node_with_children.  */
+ 
+ void
+ element::write_as_xml (pretty_printer *pp, int depth, bool indent) const
+ {
+   if (indent)
+     {
+       pp_newline (pp);
+       for (int i = 0; i < depth; ++i)
+ 	pp_string (pp, "  ");
+     }
+ 
+   if (m_preserve_whitespace)
+     indent = false;
+ 
+   pp_printf (pp, "<%s", m_kind);
+   for (auto &attr : m_attributes)
+     {
+       pp_printf (pp, " %s=\"", attr.first);
+       write_escaped_text (pp, attr.second.get ());
+       pp_string (pp, "\"");
+     }
+   if (m_children.empty ())
+     pp_string (pp, " />");
+   else
+     {
+       pp_string (pp, ">");
+       for (auto &child : m_children)
+ 	child->write_as_xml (pp, depth + 1, indent);
+       if (indent)
+ 	{
+ 	  pp_newline (pp);
+ 	  for (int i = 0; i < depth; ++i)
+ 	    pp_string (pp, "  ");
+ 	}
+       pp_printf (pp, "</%s>", m_kind);
+     }
+ }
+ 
+ void
+ element::set_attr (const char *name, label_text value)
+ {
+   m_attributes[name] = std::move (value);
+ }
+ 
+ #if __GNUC__ >= 10
+ #  pragma GCC diagnostic pop
+ #endif
+ 
+ } // namespace xml
+ 
+ class html_builder;
+ 
+ /* Concrete buffering implementation subclass for HTML output.  */
+ 
+ class diagnostic_html_format_buffer : public diagnostic_per_format_buffer
+ {
+ public:
+   friend class html_builder;
+   friend class html_output_format;
+ 
+   diagnostic_html_format_buffer (html_builder &builder)
+   : m_builder (builder)
+   {}
+ 
+   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;
+ 
+   void add_result (std::unique_ptr<xml::element> result)
+   {
+     m_results.push_back (std::move (result));
+   }
+ 
+ private:
+   html_builder &m_builder;
+   std::vector<std::unique_ptr<xml::element>> m_results;
+ };
+ 
+ /* A class for managing HTML output of diagnostics.
+ 
+    Implemented:
+    - message text
+ 
+    Known limitations/missing functionality:
+    - title for page
+    - file/line/column
+    - error vs warning
+    - CWEs
+    - rules
+    - fix-it hints
+    - paths
+ */
+ 
+ class html_builder
+ {
+ public:
+   friend class diagnostic_html_format_buffer;
+ 
+   html_builder (diagnostic_context &context,
+ 		 pretty_printer &pp,
+ 		 const line_maps *line_maps);
+ 
+   void on_report_diagnostic (const diagnostic_info &diagnostic,
+ 			     diagnostic_t orig_diag_kind,
+ 			     diagnostic_html_format_buffer *buffer);
+   void emit_diagram (const diagnostic_diagram &diagram);
+   void end_group ();
+ 
+   std::unique_ptr<xml::element> take_current_diagnostic ()
+   {
+     return std::move (m_cur_diagnostic_element);
+   }
+ 
+   void flush_to_file (FILE *outf);
+ 
+   const xml::document &get_document () const { return *m_document; }
+ 
+   void set_printer (pretty_printer &pp)
+   {
+     m_printer = &pp;
+   }
+ 
+ private:
+   std::unique_ptr<xml::element>
+   make_element_for_diagnostic (const diagnostic_info &diagnostic,
+ 			       diagnostic_t orig_diag_kind);
+ 
+   diagnostic_context &m_context;
+   pretty_printer *m_printer;
+   const line_maps *m_line_maps;
+ 
+   std::unique_ptr<xml::document> m_document;
+   xml::element *m_diagnostics_element;
+   std::unique_ptr<xml::element> m_cur_diagnostic_element;
+ };
+ 
+ static std::unique_ptr<xml::element>
+ make_div (label_text class_)
+ {
+   auto div = std::make_unique<xml::element> ("div", false);
+   div->set_attr ("class", std::move (class_));
+   return div;
+ }
+ 
+ static std::unique_ptr<xml::element>
+ make_span (label_text class_)
+ {
+   auto span = std::make_unique<xml::element> ("span", true);
+   span->set_attr ("class", std::move (class_));
+   return span;
+ }
+ 
+ /* class diagnostic_html_format_buffer : public diagnostic_per_format_buffer.  */
+ 
+ void
+ diagnostic_html_format_buffer::dump (FILE *out, int indent) const
+ {
+   fprintf (out, "%*sdiagnostic_html_format_buffer:\n", indent, "");
+   int idx = 0;
+   for (auto &result : m_results)
+     {
+       fprintf (out, "%*sresult[%i]:\n", indent + 2, "", idx);
+       result->dump (out);
+       fprintf (out, "\n");
+       ++idx;
+     }
+ }
+ 
+ bool
+ diagnostic_html_format_buffer::empty_p () const
+ {
+   return m_results.empty ();
+ }
+ 
+ void
+ diagnostic_html_format_buffer::move_to (diagnostic_per_format_buffer &base)
+ {
+   diagnostic_html_format_buffer &dest
+     = static_cast<diagnostic_html_format_buffer &> (base);
+   for (auto &&result : m_results)
+     dest.m_results.push_back (std::move (result));
+   m_results.clear ();
+ }
+ 
+ void
+ diagnostic_html_format_buffer::clear ()
+ {
+   m_results.clear ();
+ }
+ 
+ void
+ diagnostic_html_format_buffer::flush ()
+ {
+   for (auto &&result : m_results)
+     m_builder.m_diagnostics_element->add_child (std::move (result));
+   m_results.clear ();
+ }
+ 
+ /* class html_builder.  */
+ 
+ /* html_builder's ctor.  */
+ 
+ html_builder::html_builder (diagnostic_context &context,
+ 			      pretty_printer &pp,
+ 			      const line_maps *line_maps)
+ : m_context (context),
+   m_printer (&pp),
+   m_line_maps (line_maps)
+ {
+   gcc_assert (m_line_maps);
+ 
+   m_document = std::make_unique<xml::document> ();
+   {
+     auto html_element = std::make_unique<xml::element> ("html", false);
+     html_element->set_attr
+       ("xmlns",
+        label_text::borrow ("http://www.w3.org/1999/xhtml"));
+     {
+       {
+ 	auto head_element = std::make_unique<xml::element> ("head", false);
+ 	{
+ 	  auto title_element = std::make_unique<xml::element> ("title", true);
+ 	  label_text title (label_text::borrow ("Title goes here")); // TODO
+ 	  title_element->add_text (std::move (title));
+ 	  head_element->add_child (std::move (title_element));
+ 	}
+ 	html_element->add_child (std::move (head_element));
+ 
+ 	auto body_element = std::make_unique<xml::element> ("body", false);
+ 	{
+ 	  auto diagnostics_element
+ 	    = make_div (label_text::borrow ("gcc-diagnostic-list"));
+ 	  m_diagnostics_element = diagnostics_element.get ();
+ 	  body_element->add_child (std::move (diagnostics_element));
+ 	}
+ 	html_element->add_child (std::move (body_element));
+       }
+     }
+     m_document->add_child (std::move (html_element));
+   }
+ }
+ 
+ /* Implementation of "on_report_diagnostic" for HTML output.  */
+ 
+ void
+ html_builder::on_report_diagnostic (const diagnostic_info &diagnostic,
+ 				    diagnostic_t orig_diag_kind,
+ 				    diagnostic_html_format_buffer *buffer)
+ {
+   if (diagnostic.kind == DK_ICE || diagnostic.kind == DK_ICE_NOBT)
+     {
+       /* Print a header for the remaining output to stderr, and
+ 	 return, attempting to print the usual ICE messages to
+ 	 stderr.  Hopefully this will be helpful to the user in
+ 	 indicating what's gone wrong (also for DejaGnu, for pruning
+ 	 those messages).   */
+       fnotice (stderr, "Internal compiler error:\n");
+     }
+ 
+   auto diag_element
+     = make_element_for_diagnostic (diagnostic, orig_diag_kind);
+   if (buffer)
+     {
+       gcc_assert (!m_cur_diagnostic_element);
+       buffer->m_results.push_back (std::move (diag_element));
+     }
+   else
+     {
+       if (m_cur_diagnostic_element)
+ 	/* Nested diagnostic.  */
+ 	m_cur_diagnostic_element->add_child (std::move (diag_element));
+       else
+ 	/* Top-level diagnostic.  */
+ 	m_cur_diagnostic_element = std::move (diag_element);
+     }
+ }
+ 
+ std::unique_ptr<xml::element>
+ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
+ 					   diagnostic_t orig_diag_kind)
+ {
+   class html_token_printer : public token_printer
+   {
+   public:
+     html_token_printer (html_builder &builder,
+ 			 xml::element &parent_element)
+     : m_builder (builder)
+     {
+       m_open_elements.push_back (&parent_element);
+     }
+     void print_tokens (pretty_printer */*pp*/,
+ 		       const pp_token_list &tokens) final override
+     {
+       /* Implement print_tokens by adding child elements to
+ 	 m_parent_element.  */
+       for (auto iter = tokens.m_first; iter; iter = iter->m_next)
+ 	switch (iter->m_kind)
+ 	  {
+ 	  default:
+ 	    gcc_unreachable ();
+ 
+ 	  case pp_token::kind::text:
+ 	    {
+ 	      pp_token_text *sub = as_a <pp_token_text *> (iter);
+ 	      /* The value might be in the obstack, so we may need to
+ 		 copy it.  */
+ 	      insertion_element ().add_text
+ 		(label_text::take (xstrdup (sub->m_value.get ())));
+ 	    }
+ 	    break;
+ 
+ 	  case pp_token::kind::begin_color:
+ 	  case pp_token::kind::end_color:
+ 	    /* These are no-ops.  */
+ 	    break;
+ 
+ 	  case pp_token::kind::begin_quote:
+ 	    {
+ 	      insertion_element ().add_text (label_text::borrow (open_quote));
+ 	      push_element (make_span (label_text::borrow ("gcc-quoted-text")));
+ 	    }
+ 	    break;
+ 	  case pp_token::kind::end_quote:
+ 	    {
+ 	      pop_element ();
+ 	      insertion_element ().add_text (label_text::borrow (close_quote));
+ 	    }
+ 	    break;
+ 
+ 	  case pp_token::kind::begin_url:
+ 	    {
+ 	      pp_token_begin_url *sub = as_a <pp_token_begin_url *> (iter);
+ 	      auto anchor = std::make_unique<xml::element> ("a", true);
+ 	      anchor->set_attr ("href", std::move (sub->m_value));
+ 	      push_element (std::move (anchor));
+ 	    }
+ 	    break;
+ 	  case pp_token::kind::end_url:
+ 	    pop_element ();
+ 	    break;
+ 	  }
+     }
+ 
+   private:
+     xml::element &insertion_element () const
+     {
+       return *m_open_elements.back ();
+     }
+     void push_element (std::unique_ptr<xml::element> new_element)
+     {
+       xml::element &current_top = insertion_element ();
+       m_open_elements.push_back (new_element.get ());
+       current_top.add_child (std::move (new_element));
+     }
+     void pop_element ()
+     {
+       m_open_elements.pop_back ();
+     }
+ 
+     html_builder &m_builder;
+     /* We maintain a stack of currently "open" elements.
+        Children are added to the topmost open element.  */
+     std::vector<xml::element *> m_open_elements;
+   };
+ 
+   auto diag_element = make_div (label_text::borrow ("gcc-diagnostic"));
+ 
+   // TODO: might be nice to emulate the text output format, but colorize it
+ 
+   auto message_span = make_span (label_text::borrow ("gcc-message"));
+   html_token_printer tok_printer (*this, *message_span.get ());
+   m_printer->set_token_printer (&tok_printer);
+   pp_output_formatted_text (m_printer, m_context.get_urlifier ());
+   m_printer->set_token_printer (nullptr);
+   pp_clear_output_area (m_printer);
+   diag_element->add_child (std::move (message_span));
+ 
+   if (diagnostic.metadata)
+     {
+       int cwe = diagnostic.metadata->get_cwe ();
+       if (cwe)
+ 	{
+ 	  diag_element->add_text (label_text::borrow (" "));
+ 	  auto cwe_span = make_span (label_text::borrow ("gcc-cwe-metadata"));
+ 	  cwe_span->add_text (label_text::borrow ("["));
+ 	  {
+ 	    auto anchor = std::make_unique<xml::element> ("a", true);
+ 	    anchor->set_attr ("href", label_text::take (get_cwe_url (cwe)));
+ 	    pretty_printer pp;
+ 	    pp_printf (&pp, "CWE-%i", cwe);
+ 	    anchor->add_text
+ 	      (label_text::take (xstrdup (pp_formatted_text (&pp))));
+ 	    cwe_span->add_child (std::move (anchor));
+ 	  }
+ 	  cwe_span->add_text (label_text::borrow ("]"));
+ 	  diag_element->add_child (std::move (cwe_span));
+ 	}
+     }
+ 
+   // TODO: show any rules
+ 
+   label_text option_text = label_text::take
+     (m_context.make_option_name (diagnostic.option_id,
+ 				 orig_diag_kind, diagnostic.kind));
+   if (option_text.get ())
+     {
+       label_text option_url = label_text::take
+ 	(m_context.make_option_url (diagnostic.option_id));
+ 
+       diag_element->add_text (label_text::borrow (" "));
+       auto option_span = make_span (label_text::borrow ("gcc-option"));
+       option_span->add_text (label_text::borrow ("["));
+       {
+ 	if (option_url.get ())
+ 	  {
+ 	    auto anchor = std::make_unique<xml::element> ("a", true);
+ 	    anchor->set_attr ("href", std::move (option_url));
+ 	    anchor->add_text (std::move (option_text));
+ 	    option_span->add_child (std::move (anchor));
+ 	  }
+ 	else
+ 	  option_span->add_text (std::move (option_text));
+ 	option_span->add_text (label_text::borrow ("]"));
+       }
+       diag_element->add_child (std::move (option_span));
+     }
+ 
+   {
+     auto pre = std::make_unique<xml::element> ("pre", true);
+     pre->set_attr ("class", label_text::borrow ("gcc-annotated-source"));
+     // TODO: ideally we'd like to capture elements within the following:
+     diagnostic_show_locus (&m_context, m_context.m_source_printing,
+ 			   diagnostic.richloc, diagnostic.kind,
+ 			   m_printer);
+     pre->add_text
+       (label_text::take (xstrdup (pp_formatted_text (m_printer))));
+     pp_clear_output_area (m_printer);
+     diag_element->add_child (std::move (pre));
+   }
+ 
+   return diag_element;
+ }
+ 
+ /* Implementation of diagnostic_context::m_diagrams.m_emission_cb
+    for HTML output.  */
+ 
+ void
+ html_builder::emit_diagram (const diagnostic_diagram &/*diagram*/)
+ {
+   /* We must be within the emission of a top-level diagnostic.  */
+   gcc_assert (m_cur_diagnostic_element);
+ 
+   // TODO
+ }
+ 
+ /* Implementation of "end_group_cb" for HTML output.  */
+ 
+ void
+ html_builder::end_group ()
+ {
+   if (m_cur_diagnostic_element)
+     m_diagnostics_element->add_child (std::move (m_cur_diagnostic_element));
+ }
+ 
+ /* Create a top-level object, and add it to all the results
+    (and other entities) we've seen so far.
+ 
+    Flush it all to OUTF.  */
+ 
+ void
+ html_builder::flush_to_file (FILE *outf)
+ {
+   auto top = m_document.get ();
+   top->dump (outf);
+   fprintf (outf, "\n");
+ }
+ 
+ class html_output_format : public diagnostic_output_format
+ {
+ public:
+   ~html_output_format ()
+   {
+     /* Any diagnostics should have been handled by now.
+        If not, then something's gone wrong with diagnostic
+        groupings.  */
+     std::unique_ptr<xml::element> pending_diag
+       = m_builder.take_current_diagnostic ();
+     gcc_assert (!pending_diag);
+   }
+ 
+   void dump (FILE *out, int indent) const override
+   {
+     fprintf (out, "%*shtml_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_html_format_buffer> (m_builder);
+   }
+   void set_buffer (diagnostic_per_format_buffer *base_buffer) final override
+   {
+     diagnostic_html_format_buffer *buffer
+       = static_cast<diagnostic_html_format_buffer *> (base_buffer);
+     m_buffer = buffer;
+   }
+ 
+   void on_begin_group () final override
+   {
+     /* No-op,  */
+   }
+   void on_end_group () final override
+   {
+     m_builder.end_group ();
+   }
+   void
+   on_report_diagnostic (const diagnostic_info &diagnostic,
+ 			diagnostic_t orig_diag_kind) final override
+   {
+     m_builder.on_report_diagnostic (diagnostic, orig_diag_kind, m_buffer);
+   }
+   void on_diagram (const diagnostic_diagram &diagram) final override
+   {
+     m_builder.emit_diagram (diagram);
+   }
+   void after_diagnostic (const diagnostic_info &)
+   {
+     /* No-op, but perhaps could show paths here.  */
+   }
+   bool follows_reference_printer_p () const final override
+   {
+     return false;
+   }
+   void update_printer () final override
+   {
+     m_printer = m_context.clone_printer ();
+ 
+     /* Don't colorize the text.  */
+     pp_show_color (m_printer.get ()) = false;
+ 
+     /* No textual URLs.  */
+     m_printer->set_url_format (URL_FORMAT_NONE);
+ 
+     /* Update the builder to use the new printer.  */
+     m_builder.set_printer (*get_printer ());
+   }
+ 
+   const xml::document &get_document () const
+   {
+     return m_builder.get_document ();
+   }
+ 
+ protected:
+   html_output_format (diagnostic_context &context,
+ 		      const line_maps *line_maps)
+   : diagnostic_output_format (context),
+     m_builder (context, *get_printer (), line_maps),
+     m_buffer (nullptr)
+   {}
+ 
+   html_builder m_builder;
+   diagnostic_html_format_buffer *m_buffer;
+ };
+ 
+ class html_file_output_format : public html_output_format
+ {
+ public:
+   html_file_output_format (diagnostic_context &context,
+ 			   const line_maps *line_maps,
+ 			   diagnostic_output_file output_file)
+   : html_output_format (context, line_maps),
+     m_output_file (std::move (output_file))
+   {
+     gcc_assert (m_output_file.get_open_file ());
+     gcc_assert (m_output_file.get_filename ());
+   }
+   ~html_file_output_format ()
+   {
+     m_builder.flush_to_file (m_output_file.get_open_file ());
+   }
+   void dump (FILE *out, int indent) const override
+   {
+     fprintf (out, "%*shtml_file_output_format: %s\n",
+ 	     indent, "",
+ 	     m_output_file.get_filename ());
+     diagnostic_output_format::dump (out, indent);
+   }
+   bool machine_readable_stderr_p () const final override
+   {
+     return false;
+   }
+ 
+ private:
+   diagnostic_output_file m_output_file;
+ };
+ 
+ /* Attempt to open BASE_FILE_NAME.html for writing.
+    Return a non-null diagnostic_output_file,
+    or return a null diagnostic_output_file and complain to CONTEXT
+    using LINE_MAPS.  */
+ 
+ diagnostic_output_file
+ diagnostic_output_format_open_html_file (diagnostic_context &context,
+ 					 line_maps *line_maps,
+ 					 const char *base_file_name)
+ {
+   if (!base_file_name)
+     {
+       rich_location richloc (line_maps, UNKNOWN_LOCATION);
+       context.emit_diagnostic_with_group
+ 	(DK_ERROR, richloc, nullptr, 0,
+ 	 "unable to determine filename for HTML output");
+       return diagnostic_output_file ();
+     }
+ 
+   label_text filename = label_text::take (concat (base_file_name,
+ 						  ".html",
+ 						  nullptr));
+   FILE *outf = fopen (filename.get (), "w");
+   if (!outf)
+     {
+       rich_location richloc (line_maps, UNKNOWN_LOCATION);
+       context.emit_diagnostic_with_group
+ 	(DK_ERROR, richloc, nullptr, 0,
+ 	 "unable to open %qs for HTML output: %m",
+ 	 filename.get ());
+       return diagnostic_output_file ();
+     }
+   return diagnostic_output_file (outf, true, std::move (filename));
+ }
+ 
+ std::unique_ptr<diagnostic_output_format>
+ make_html_sink (diagnostic_context &context,
+ 		const line_maps &line_maps,
+ 		diagnostic_output_file output_file)
+ {
+   auto sink
+     = std::make_unique<html_file_output_format> (context,
+ 						 &line_maps,
+ 						 std::move (output_file));
+   sink->update_printer ();
+   return sink;
+ }
+ 
+ #if CHECKING_P
+ 
+ namespace selftest {
+ 
+ /* A subclass of html_output_format for writing selftests.
+    The XML output is cached internally, rather than written
+    out to a file.  */
+ 
+ class test_html_diagnostic_context : public test_diagnostic_context
+ {
+ public:
+   test_html_diagnostic_context ()
+   {
+     auto sink = std::make_unique<html_buffered_output_format> (*this,
+ 							       line_table);
+     sink->update_printer ();
+     m_format = sink.get (); // borrowed
+ 
+     set_output_format (std::move (sink));
+   }
+ 
+   const xml::document &get_document () const
+   {
+     return m_format->get_document ();
+   }
+ 
+ private:
+   class html_buffered_output_format : public html_output_format
+   {
+   public:
+     html_buffered_output_format (diagnostic_context &context,
+ 				 const line_maps *line_maps)
+     : html_output_format (context, line_maps)
+     {
+     }
+     bool machine_readable_stderr_p () const final override
+     {
+       return true;
+     }
+   };
+ 
+   html_output_format *m_format; // borrowed
+ };
+ 
+ /* Test of reporting a diagnostic at UNKNOWN_LOCATION to a
+    diagnostic_context and examining the generated XML document.
+    Verify various basic properties. */
+ 
+ static void
+ test_simple_log ()
+ {
+   test_html_diagnostic_context dc;
+ 
+   rich_location richloc (line_table, UNKNOWN_LOCATION);
+   dc.report (DK_ERROR, richloc, nullptr, 0, "this is a test: %i", 42);
+ 
+   const xml::document &doc  = dc.get_document ();
+ 
+   pretty_printer pp;
+   doc.write_as_xml (&pp, 0, true);
+   ASSERT_STREQ
+     (pp_formatted_text (&pp),
+      ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+       "<!DOCTYPE html\n"
+       "     PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
+       "     \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
+       "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
+       "  <head>\n"
+       "    <title>Title goes here</title>\n"
+       "  </head>\n"
+       "  <body>\n"
+       "    <div class=\"gcc-diagnostic-list\">\n"
+       "      <div class=\"gcc-diagnostic\">\n"
+       "        <span class=\"gcc-message\">this is a test: 42</span>\n"
+       "        <pre class=\"gcc-annotated-source\"></pre>\n"
+       "      </div>\n"
+       "    </div>\n"
+       "  </body>\n"
+       "</html>"));
+ }
+ 
+ /* Run all of the selftests within this file.  */
+ 
+ void
+ diagnostic_format_html_cc_tests ()
+ {
+   test_simple_log ();
+ }
+ 
+ } // namespace selftest
+ 
+ #endif /* CHECKING_P */
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-format-html.h gcc-16-20250511/gcc/diagnostic-format-html.h
*** gcc-16-20250504/gcc/diagnostic-format-html.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/diagnostic-format-html.h	Sun May 11 22:32:10 2025
***************
*** 0 ****
--- 1,37 ----
+ /* HTML output for diagnostics.
+    Copyright (C) 2024-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/>.  */
+ 
+ #ifndef GCC_DIAGNOSTIC_FORMAT_HTML_H
+ #define GCC_DIAGNOSTIC_FORMAT_HTML_H
+ 
+ #include "diagnostic-format.h"
+ #include "diagnostic-output-file.h"
+ 
+ extern diagnostic_output_file
+ diagnostic_output_format_open_html_file (diagnostic_context &context,
+ 					 line_maps *line_maps,
+ 					 const char *base_file_name);
+ 
+ extern std::unique_ptr<diagnostic_output_format>
+ make_html_sink (diagnostic_context &context,
+ 		const line_maps &line_maps,
+ 		diagnostic_output_file output_file);
+ 
+ #endif /* ! GCC_DIAGNOSTIC_FORMAT_HTML_H */
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-format-json.cc gcc-16-20250511/gcc/diagnostic-format-json.cc
*** gcc-16-20250504/gcc/diagnostic-format-json.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic-format-json.cc	Sun May 11 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 31,36 ****
--- 31,37 ----
  #include "diagnostic-buffer.h"
  #include "json.h"
  #include "selftest.h"
+ #include "diagnostic-client-data-hooks.h"
  #include "logical-location.h"
  
  class json_output_format;
*************** make_json_for_path (diagnostic_context &
*** 272,282 ****
        auto pp = ref_pp->clone ();
        event.print_desc (*pp.get ());
        event_obj->set_string ("description", pp_formatted_text (pp.get ()));
!       if (const logical_location *logical_loc = event.get_logical_location ())
! 	{
! 	  label_text name (logical_loc->get_name_for_path_output ());
! 	  event_obj->set_string ("function", name.get ());
! 	}
        event_obj->set_integer ("depth", event.get_stack_depth ());
        path_array->append (std::move (event_obj));
      }
--- 273,285 ----
        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));
      }
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-format-sarif.cc gcc-16-20250511/gcc/diagnostic-format-sarif.cc
*** gcc-16-20250504/gcc/diagnostic-format-sarif.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic-format-sarif.cc	Sun May 11 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 51,56 ****
--- 51,102 ----
  #include "demangle.h"
  #include "backtrace.h"
  
+ /* A json::array where the values are "unique" as per
+    SARIF v2.1.0 section 3.7.3 ("Array properties with unique values").  */
+ 
+ template <typename JsonElementType>
+ class sarif_array_of_unique : public json::array
+ {
+  public:
+   size_t append_uniquely (std::unique_ptr<JsonElementType> val)
+   {
+     /* This should be O(log(n)) due to the std::map.  */
+     auto search = m_index_by_value.find (val.get ());
+     if (search != m_index_by_value.end())
+       return (*search).second;
+ 
+     const size_t insertion_idx = size ();
+     m_index_by_value.insert ({val.get (), insertion_idx});
+     append (std::move (val));
+     return insertion_idx;
+   }
+ 
+   /* For ease of reading output, add "index": idx to all
+      objects in the array.
+      We don't do this until we've added everything, since
+      the "index" property would otherwise confuse the
+      comparison against new elements.  */
+   void add_explicit_index_values ()
+   {
+     for (size_t idx = 0; idx < length (); ++idx)
+       if (json::object *obj = get (idx)->dyn_cast_object ())
+ 	obj->set_integer ("index", idx);
+   }
+ 
+ private:
+   struct comparator_t {
+     bool operator () (const json::value *a, const json::value *b) const
+     {
+       gcc_assert (a);
+       gcc_assert (b);
+       return json::value::compare (*a, *b) < 0;
+     }
+   };
+ 
+   // json::value * here is borrowed from m_elements
+   std::map<json::value *, int, comparator_t> m_index_by_value;
+ };
+ 
  /* Forward decls.  */
  class sarif_builder;
  class content_renderer;
*************** class sarif_physical_location : public s
*** 446,451 ****
--- 492,504 ----
  
  class sarif_region : public sarif_object {};
  
+ /* Subclass of sarif_object for SARIF "logicalLocation" objects
+    (SARIF v2.1.0 section 3.33).  */
+ 
+ class sarif_logical_location : public sarif_object
+ {
+ };
+ 
  /* Subclass of sarif_object for SARIF "locationRelationship" objects
     (SARIF v2.1.0 section 3.34).  */
  
*************** public:
*** 708,713 ****
--- 761,772 ----
      m_printer = &printer;
    }
  
+   const logical_location_manager *
+   get_logical_location_manager () const
+   {
+     return m_logical_loc_mgr;
+   }
+ 
    void on_report_diagnostic (const diagnostic_info &diagnostic,
  			     diagnostic_t orig_diag_kind,
  			     diagnostic_sarif_format_buffer *buffer);
*************** public:
*** 729,735 ****
    std::unique_ptr<sarif_location>
    make_location_object (sarif_location_manager &loc_mgr,
  			const rich_location &rich_loc,
! 			const logical_location *logical_loc,
  			enum diagnostic_artifact_role role);
    std::unique_ptr<sarif_location>
    make_location_object (sarif_location_manager &loc_mgr,
--- 788,794 ----
    std::unique_ptr<sarif_location>
    make_location_object (sarif_location_manager &loc_mgr,
  			const rich_location &rich_loc,
! 			logical_location logical_loc,
  			enum diagnostic_artifact_role role);
    std::unique_ptr<sarif_location>
    make_location_object (sarif_location_manager &loc_mgr,
*************** public:
*** 766,771 ****
--- 825,833 ----
  
    const sarif_generation_options &get_opts () const { return m_sarif_gen_opts; }
  
+   std::unique_ptr<sarif_logical_location>
+   make_minimal_sarif_logical_location (logical_location);
+ 
  private:
    class sarif_token_printer : public token_printer
    {
*************** private:
*** 790,796 ****
  			 location_t where);
    void
    set_any_logical_locs_arr (sarif_location &location_obj,
! 			    const logical_location *logical_loc);
    std::unique_ptr<sarif_location>
    make_location_object (sarif_location_manager &loc_mgr,
  			const diagnostic_event &event,
--- 852,858 ----
  			 location_t where);
    void
    set_any_logical_locs_arr (sarif_location &location_obj,
! 			    logical_location logical_loc);
    std::unique_ptr<sarif_location>
    make_location_object (sarif_location_manager &loc_mgr,
  			const diagnostic_event &event,
*************** private:
*** 823,828 ****
--- 885,894 ----
  					const content_renderer *snippet_renderer) const;
    std::unique_ptr<sarif_region>
    make_region_object_for_hint (const fixit_hint &hint) const;
+ 
+   int
+   ensure_sarif_logical_location_for (logical_location k);
+ 
    std::unique_ptr<sarif_multiformat_message_string>
    make_multiformat_message_string (const char *msg) const;
    std::unique_ptr<sarif_log>
*************** private:
*** 879,884 ****
--- 945,952 ----
    const line_maps *m_line_maps;
    sarif_token_printer m_token_printer;
  
+   const logical_location_manager *m_logical_loc_mgr;
+ 
    /* The JSON object for the invocation object.  */
    std::unique_ptr<sarif_invocation> m_invocation_obj;
  
*************** private:
*** 901,906 ****
--- 969,976 ----
    /* The set of all CWE IDs we've seen, if any.  */
    hash_set <int_hash <int, 0, 1> > m_cwe_id_set;
  
+   std::unique_ptr<sarif_array_of_unique<sarif_logical_location>> m_cached_logical_locs;
+ 
    int m_tabstop;
  
    std::unique_ptr<sarif_serialization_format> m_serialization_format;
*************** sarif_result::on_nested_diagnostic (cons
*** 1232,1238 ****
       sometimes these will related to current_function_decl, but
       often they won't.  */
    auto location_obj
!     = builder.make_location_object (*this, *diagnostic.richloc, nullptr,
  				    diagnostic_artifact_role::result_file);
    auto message_obj
      = builder.make_message_object (pp_formatted_text (builder.get_printer ()));
--- 1302,1309 ----
       sometimes these will related to current_function_decl, but
       often they won't.  */
    auto location_obj
!     = builder.make_location_object (*this, *diagnostic.richloc,
! 				    logical_location (),
  				    diagnostic_artifact_role::result_file);
    auto message_obj
      = builder.make_message_object (pp_formatted_text (builder.get_printer ()));
*************** sarif_builder::sarif_builder (diagnostic
*** 1579,1584 ****
--- 1650,1656 ----
    m_printer (&printer),
    m_line_maps (line_maps),
    m_token_printer (*this),
+   m_logical_loc_mgr (nullptr),
    m_invocation_obj
      (std::make_unique<sarif_invocation> (*this,
  					 context.get_original_argv ())),
*************** sarif_builder::sarif_builder (diagnostic
*** 1587,1592 ****
--- 1659,1666 ----
    m_seen_any_relative_paths (false),
    m_rule_id_set (),
    m_rules_arr (new json::array ()),
+   m_cached_logical_locs
+     (std::make_unique<sarif_array_of_unique<sarif_logical_location>> ()),
    m_tabstop (context.m_tabstop),
    m_serialization_format (std::move (serialization_format)),
    m_sarif_gen_opts (sarif_gen_opts),
*************** sarif_builder::sarif_builder (diagnostic
*** 1596,1601 ****
--- 1670,1678 ----
    gcc_assert (m_line_maps);
    gcc_assert (m_serialization_format);
  
+   if (auto client_data_hooks = context.get_client_data_hooks ())
+     m_logical_loc_mgr = client_data_hooks->get_logical_location_manager ();
+ 
    /* Mark MAIN_INPUT_FILENAME_ as the artifact that the tool was
       instructed to scan.
       Only quote the contents if it gets referenced by physical locations,
*************** sarif_builder::make_locations_arr (sarif
*** 2089,2095 ****
  				   enum diagnostic_artifact_role role)
  {
    auto locations_arr = std::make_unique<json::array> ();
!   const logical_location *logical_loc = nullptr;
    if (auto client_data_hooks = m_context.get_client_data_hooks ())
      logical_loc = client_data_hooks->get_current_logical_location ();
  
--- 2166,2172 ----
  				   enum diagnostic_artifact_role role)
  {
    auto locations_arr = std::make_unique<json::array> ();
!   logical_location logical_loc;
    if (auto client_data_hooks = m_context.get_client_data_hooks ())
      logical_loc = client_data_hooks->get_current_logical_location ();
  
*************** sarif_builder::make_locations_arr (sarif
*** 2103,2120 ****
  }
  
  /* If LOGICAL_LOC is non-null, use it to create a "logicalLocations" property
!    within LOCATION_OBJ (SARIF v2.1.0 section 3.28.4).  */
  
  void
  sarif_builder::
  set_any_logical_locs_arr (sarif_location &location_obj,
! 			  const logical_location *logical_loc)
  {
    if (!logical_loc)
      return;
    auto location_locs_arr = std::make_unique<json::array> ();
    location_locs_arr->append<sarif_logical_location>
!     (make_sarif_logical_location_object (*logical_loc));
    location_obj.set<json::array> ("logicalLocations",
  				 std::move (location_locs_arr));
  }
--- 2180,2203 ----
  }
  
  /* If LOGICAL_LOC is non-null, use it to create a "logicalLocations" property
!    within LOCATION_OBJ (SARIF v2.1.0 section 3.28.4) with a minimal logical
!    location object referencing theRuns.logicalLocations (3.33.3).  */
  
  void
  sarif_builder::
  set_any_logical_locs_arr (sarif_location &location_obj,
! 			  logical_location logical_loc)
  {
    if (!logical_loc)
      return;
+   gcc_assert (m_logical_loc_mgr);
    auto location_locs_arr = std::make_unique<json::array> ();
+ 
+   auto logical_loc_obj = make_minimal_sarif_logical_location (logical_loc);
+ 
    location_locs_arr->append<sarif_logical_location>
!     (std::move (logical_loc_obj));
! 
    location_obj.set<json::array> ("logicalLocations",
  				 std::move (location_locs_arr));
  }
*************** set_any_logical_locs_arr (sarif_location
*** 2127,2133 ****
  std::unique_ptr<sarif_location>
  sarif_builder::make_location_object (sarif_location_manager &loc_mgr,
  				     const rich_location &rich_loc,
! 				     const logical_location *logical_loc,
  				     enum diagnostic_artifact_role role)
  {
    class escape_nonascii_renderer : public content_renderer
--- 2210,2216 ----
  std::unique_ptr<sarif_location>
  sarif_builder::make_location_object (sarif_location_manager &loc_mgr,
  				     const rich_location &rich_loc,
! 				     logical_location logical_loc,
  				     enum diagnostic_artifact_role role)
  {
    class escape_nonascii_renderer : public content_renderer
*************** sarif_builder::make_location_object (sar
*** 2321,2327 ****
  						std::move (phs_loc_obj));
  
    /* "logicalLocations" property (SARIF v2.1.0 section 3.28.4).  */
!   const logical_location *logical_loc = event.get_logical_location ();
    set_any_logical_locs_arr (*location_obj, logical_loc);
  
    /* "message" property (SARIF v2.1.0 section 3.28.5).  */
--- 2404,2410 ----
  						std::move (phs_loc_obj));
  
    /* "logicalLocations" property (SARIF v2.1.0 section 3.28.4).  */
!   logical_location logical_loc = event.get_logical_location ();
    set_any_logical_locs_arr (*location_obj, logical_loc);
  
    /* "message" property (SARIF v2.1.0 section 3.28.5).  */
*************** maybe_get_sarif_kind (enum logical_locat
*** 2651,2656 ****
--- 2734,2740 ----
      case LOGICAL_LOCATION_KIND_UNKNOWN:
        return nullptr;
  
+     /* Kinds within executable code.  */
      case LOGICAL_LOCATION_KIND_FUNCTION:
        return "function";
      case LOGICAL_LOCATION_KIND_MEMBER:
*************** maybe_get_sarif_kind (enum logical_locat
*** 2667,2701 ****
        return "parameter";
      case LOGICAL_LOCATION_KIND_VARIABLE:
        return "variable";
      }
  }
  
! /* Make a "logicalLocation" object (SARIF v2.1.0 section 3.33) for LOGICAL_LOC,
!    or return nullptr.  */
  
! std::unique_ptr<sarif_logical_location>
! make_sarif_logical_location_object (const logical_location &logical_loc)
  {
!   auto logical_loc_obj = std::make_unique<sarif_logical_location> ();
  
!   /* "name" property (SARIF v2.1.0 section 3.33.4).  */
!   if (const char *short_name = logical_loc.get_short_name ())
!     logical_loc_obj->set_string ("name", short_name);
  
    /* "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5).  */
!   if (const char *name_with_scope = logical_loc.get_name_with_scope ())
!     logical_loc_obj->set_string ("fullyQualifiedName", name_with_scope);
  
    /* "decoratedName" property (SARIF v2.1.0 section 3.33.6).  */
!   if (const char *internal_name = logical_loc.get_internal_name ())
!     logical_loc_obj->set_string ("decoratedName", internal_name);
  
    /* "kind" property (SARIF v2.1.0 section 3.33.7).  */
!   enum logical_location_kind kind = logical_loc.get_kind ();
    if (const char *sarif_kind_str = maybe_get_sarif_kind (kind))
!     logical_loc_obj->set_string ("kind", sarif_kind_str);
  
!   return logical_loc_obj;
  }
  
  label_text
--- 2751,2870 ----
        return "parameter";
      case LOGICAL_LOCATION_KIND_VARIABLE:
        return "variable";
+ 
+     /* Kinds within XML or HTML documents.  */
+     case LOGICAL_LOCATION_KIND_ELEMENT:
+       return "element";
+     case LOGICAL_LOCATION_KIND_ATTRIBUTE:
+       return "attribute";
+     case LOGICAL_LOCATION_KIND_TEXT:
+       return "text";
+     case LOGICAL_LOCATION_KIND_COMMENT:
+       return "comment";
+     case LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION:
+       return "processingInstruction";
+     case LOGICAL_LOCATION_KIND_DTD:
+       return "dtd";
+     case LOGICAL_LOCATION_KIND_DECLARATION:
+       return "declaration";
+ 
+     /* Kinds within JSON documents.  */
+     case LOGICAL_LOCATION_KIND_OBJECT:
+       return "object";
+     case LOGICAL_LOCATION_KIND_ARRAY:
+       return "array";
+     case LOGICAL_LOCATION_KIND_PROPERTY:
+       return "property";
+     case LOGICAL_LOCATION_KIND_VALUE:
+       return "value";
      }
  }
  
! /* Set PROPERTY_NAME within this bag to a "logicalLocation" object (SARIF v2.1.0
!    section 3.33) for LOGICAL_LOC.  The object has an "index" property to refer to
!    theRuns.logicalLocations (3.33.3).  */
  
! void
! sarif_property_bag::set_logical_location (const char *property_name,
! 					  sarif_builder &builder,
! 					  logical_location logical_loc)
  {
!   set<sarif_logical_location>
!     (property_name,
!      builder.make_minimal_sarif_logical_location (logical_loc));
! }
  
! /* Ensure that m_cached_logical_locs has a "logicalLocation" object
!    (SARIF v2.1.0 section 3.33) for K, and return its index within the
!    array.  */
! 
! int
! sarif_builder::
! ensure_sarif_logical_location_for (logical_location k)
! {
!   gcc_assert (m_logical_loc_mgr);
! 
!   auto sarif_logical_loc = std::make_unique<sarif_logical_location> ();
! 
!   if (const char *short_name = m_logical_loc_mgr->get_short_name (k))
!     sarif_logical_loc->set_string ("name", short_name);
  
    /* "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5).  */
!   if (const char *name_with_scope = m_logical_loc_mgr->get_name_with_scope (k))
!     sarif_logical_loc->set_string ("fullyQualifiedName", name_with_scope);
  
    /* "decoratedName" property (SARIF v2.1.0 section 3.33.6).  */
!   if (const char *internal_name = m_logical_loc_mgr->get_internal_name (k))
!     sarif_logical_loc->set_string ("decoratedName", internal_name);
  
    /* "kind" property (SARIF v2.1.0 section 3.33.7).  */
!   enum logical_location_kind kind = m_logical_loc_mgr->get_kind (k);
    if (const char *sarif_kind_str = maybe_get_sarif_kind (kind))
!     sarif_logical_loc->set_string ("kind", sarif_kind_str);
  
!   /* "parentIndex" property (SARIF v2.1.0 section 3.33.8).  */
!   if (auto parent_key = m_logical_loc_mgr->get_parent (k))
!     {
!       /* Recurse upwards.  */
!       int parent_index = ensure_sarif_logical_location_for (parent_key);
!       sarif_logical_loc->set_integer ("parentIndex", parent_index);
!     }
! 
!   /* Consolidate if this logical location already exists.  */
!   int index
!     = m_cached_logical_locs->append_uniquely (std::move (sarif_logical_loc));
! 
!   return index;
! }
! 
! /* Ensure that theRuns.logicalLocations (3.14.17) has a "logicalLocation" object
!    (SARIF v2.1.0 section 3.33) for LOGICAL_LOC.
!    Create and return a minimal logicalLocation object referring to the
!    full object by index.  */
! 
! std::unique_ptr<sarif_logical_location>
! sarif_builder::
! make_minimal_sarif_logical_location (logical_location logical_loc)
! {
!   gcc_assert (m_logical_loc_mgr);
! 
!   /* Ensure that m_cached_logical_locs has a "logicalLocation" object
!      (SARIF v2.1.0 section 3.33) for LOGICAL_LOC, and return its index within
!      the array.  */
! 
!   auto sarif_logical_loc = std::make_unique <sarif_logical_location> ();
! 
!   int index = ensure_sarif_logical_location_for (logical_loc);
! 
!   // 3.33.3 index property
!   sarif_logical_loc->set_integer ("index", index);
! 
!   /* "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5).  */
!   if (const char *name_with_scope
!         = m_logical_loc_mgr->get_name_with_scope (logical_loc))
!     sarif_logical_loc->set_string ("fullyQualifiedName", name_with_scope);
! 
!   return sarif_logical_loc;
  }
  
  label_text
*************** populate_thread_flow_location_object (sa
*** 2784,2790 ****
  {
    /* Give diagnostic_event subclasses a chance to add custom properties
       via a property bag.  */
!   ev.maybe_add_sarif_properties (tfl_obj);
  
    /* "location" property (SARIF v2.1.0 section 3.38.3).  */
    tfl_obj.set<sarif_location>
--- 2953,2959 ----
  {
    /* Give diagnostic_event subclasses a chance to add custom properties
       via a property bag.  */
!   ev.maybe_add_sarif_properties (*this, tfl_obj);
  
    /* "location" property (SARIF v2.1.0 section 3.38.3).  */
    tfl_obj.set<sarif_location>
*************** make_run_object (std::unique_ptr<sarif_i
*** 3038,3043 ****
--- 3207,3220 ----
    /* "results" property (SARIF v2.1.0 section 3.14.23).  */
    run_obj->set<json::array> ("results", std::move (results));
  
+   /* "logicalLocations" property (SARIF v2.1.0 3.14.17). */
+   if (m_cached_logical_locs->size () > 0)
+     {
+       m_cached_logical_locs->add_explicit_index_values ();
+       run_obj->set<json::array> ("logicalLocations",
+ 				 std::move (m_cached_logical_locs));
+     }
+ 
    return run_obj;
  }
  
*************** sarif_generation_options::sarif_generati
*** 3924,3929 ****
--- 4101,4176 ----
  
  namespace selftest {
  
+ static void
+ test_sarif_array_of_unique_1 ()
+ {
+   sarif_array_of_unique<json::string> arr;
+ 
+   ASSERT_EQ (arr.length (), 0);
+ 
+   {
+     size_t idx = arr.append_uniquely (std::make_unique<json::string> ("foo"));
+     ASSERT_EQ (idx, 0);
+     ASSERT_EQ (arr.length (), 1);
+   }
+   {
+     size_t idx = arr.append_uniquely (std::make_unique<json::string> ("bar"));
+     ASSERT_EQ (idx, 1);
+     ASSERT_EQ (arr.length (), 2);
+   }
+ 
+   /* Try adding them again, should be idempotent.  */
+   {
+     size_t idx = arr.append_uniquely (std::make_unique<json::string> ("foo"));
+     ASSERT_EQ (idx, 0);
+     ASSERT_EQ (arr.length (), 2);
+   }
+   {
+     size_t idx = arr.append_uniquely (std::make_unique<json::string> ("bar"));
+     ASSERT_EQ (idx, 1);
+     ASSERT_EQ (arr.length (), 2);
+   }
+ }
+ 
+ static void
+ test_sarif_array_of_unique_2 ()
+ {
+   sarif_array_of_unique<json::object> arr;
+ 
+   ASSERT_EQ (arr.length (), 0);
+ 
+   {
+     auto obj0 = std::make_unique<json::object> ();
+     size_t idx = arr.append_uniquely (std::move (obj0));
+     ASSERT_EQ (idx, 0);
+     ASSERT_EQ (arr.length (), 1);
+ 
+     // Attempting to add another empty objects should be idempotent.
+     idx = arr.append_uniquely (std::make_unique<json::object> ());
+     ASSERT_EQ (idx, 0);
+     ASSERT_EQ (arr.length (), 1);
+   }
+   {
+     auto obj1 = std::make_unique<json::object> ();
+     obj1->set_string ("foo", "bar");
+     size_t idx = arr.append_uniquely (std::move (obj1));
+     ASSERT_EQ (idx, 1);
+     ASSERT_EQ (arr.length (), 2);
+ 
+     // Attempting to add an equivalent object should be idempotent.
+     auto other = std::make_unique<json::object> ();
+     other->set_string ("foo", "bar");
+     idx = arr.append_uniquely (std::move (other));
+     ASSERT_EQ (idx, 1);
+     ASSERT_EQ (arr.length (), 2);
+   }
+ 
+   // Verify behavior of add_explicit_index_values.
+   arr.add_explicit_index_values ();
+   ASSERT_JSON_INT_PROPERTY_EQ (arr[0], "index", 0);
+   ASSERT_JSON_INT_PROPERTY_EQ (arr[1], "index", 1);
+ }
+ 
  /* A subclass of sarif_output_format for writing selftests.
     The JSON output is cached internally, rather than written
     out to a file.  */
*************** test_make_location_object (const sarif_g
*** 4029,4035 ****
  
    std::unique_ptr<sarif_location> location_obj
      = builder.make_location_object
!     (result, richloc, nullptr, diagnostic_artifact_role::analysis_target);
    ASSERT_NE (location_obj, nullptr);
  
    auto physical_location
--- 4276,4283 ----
  
    std::unique_ptr<sarif_location> location_obj
      = builder.make_location_object
! 	(result, richloc, logical_location (),
! 	 diagnostic_artifact_role::analysis_target);
    ASSERT_NE (location_obj, nullptr);
  
    auto physical_location
*************** run_line_table_case_tests_per_version (c
*** 4588,4593 ****
--- 4836,4844 ----
  void
  diagnostic_format_sarif_cc_tests ()
  {
+   test_sarif_array_of_unique_1 ();
+   test_sarif_array_of_unique_2 ();
+ 
    for_each_sarif_gen_option (test_simple_log);
    for_each_sarif_gen_option (test_message_with_embedded_link);
    for_each_sarif_gen_option (test_message_with_braces);
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-format-sarif.h gcc-16-20250511/gcc/diagnostic-format-sarif.h
*** gcc-16-20250504/gcc/diagnostic-format-sarif.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic-format-sarif.h	Sun May 11 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 24,31 ****
  #include "json.h"
  #include "diagnostic-format.h"
  #include "diagnostic-output-file.h"
! 
! class logical_location;
  
  /* Enum for choosing what format to serializing the generated SARIF into.  */
  
--- 24,30 ----
  #include "json.h"
  #include "diagnostic-format.h"
  #include "diagnostic-output-file.h"
! #include "logical-location.h"
  
  /* Enum for choosing what format to serializing the generated SARIF into.  */
  
*************** make_sarif_sink (diagnostic_context &con
*** 115,125 ****
--- 114,130 ----
  		 const sarif_generation_options &sarif_gen_opts,
  		 diagnostic_output_file output_file);
  
+ class sarif_builder;
+ 
  /* Concrete subclass of json::object for SARIF property bags
     (SARIF v2.1.0 section 3.8).  */
  
  class sarif_property_bag : public json::object
  {
+ public:
+   void set_logical_location (const char *property_name,
+ 			     sarif_builder &,
+ 			     logical_location logical_loc);
  };
  
  /* Concrete subclass of json::object for SARIF objects that can
*************** public:
*** 134,147 ****
    sarif_property_bag &get_or_create_properties ();
  };
  
- /* Subclass of sarif_object for SARIF "logicalLocation" objects
-    (SARIF v2.1.0 section 3.33).  */
- 
- class sarif_logical_location : public sarif_object
- {
- };
- 
- extern std::unique_ptr<sarif_logical_location>
- make_sarif_logical_location_object (const logical_location &logical_loc);
- 
  #endif /* ! GCC_DIAGNOSTIC_FORMAT_SARIF_H */
--- 139,142 ----
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-path.cc gcc-16-20250511/gcc/diagnostic-path.cc
*** gcc-16-20250504/gcc/diagnostic-path.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic-path.cc	Sun May 11 22:32:10 2025
*************** diagnostic_path::get_first_event_in_a_fu
*** 181,188 ****
    for (unsigned i = 0; i < num; i++)
      {
        const diagnostic_event &event = get_event (i);
!       if (const logical_location *logical_loc = event.get_logical_location ())
! 	if (logical_loc->function_p ())
  	  {
  	    *out_idx = i;
  	    return true;
--- 181,188 ----
    for (unsigned i = 0; i < num; i++)
      {
        const diagnostic_event &event = get_event (i);
!       if (logical_location logical_loc = event.get_logical_location ())
! 	if (m_logical_loc_mgr.function_p (logical_loc))
  	  {
  	    *out_idx = i;
  	    return true;
*************** class per_thread_summary
*** 409,416 ****
--- 409,418 ----
  {
  public:
    per_thread_summary (const diagnostic_path &path,
+ 		      const logical_location_manager &logical_loc_mgr,
  		      label_text name, unsigned swimlane_idx)
    : m_path (path),
+     m_logical_loc_mgr (logical_loc_mgr),
      m_name (std::move (name)),
      m_swimlane_idx (swimlane_idx),
      m_last_event (nullptr),
*************** private:
*** 437,442 ****
--- 439,445 ----
    friend struct event_range;
  
    const diagnostic_path &m_path;
+   const logical_location_manager &m_logical_loc_mgr;
  
    const label_text m_name;
  
*************** struct event_range
*** 703,709 ****
  
    const diagnostic_path &m_path;
    const diagnostic_event &m_initial_event;
!   const logical_location *m_logical_loc;
    int m_stack_depth;
    unsigned m_start_idx;
    unsigned m_end_idx;
--- 706,712 ----
  
    const diagnostic_path &m_path;
    const diagnostic_event &m_initial_event;
!   logical_location m_logical_loc;
    int m_stack_depth;
    unsigned m_start_idx;
    unsigned m_end_idx;
*************** struct path_summary
*** 729,734 ****
--- 732,741 ----
  		bool colorize = false,
  		bool show_event_links = true);
  
+   const logical_location_manager &get_logical_location_manager () const
+   {
+     return m_logical_loc_mgr;
+   }
    unsigned get_num_ranges () const { return m_ranges.length (); }
    bool multithreaded_p () const { return m_per_thread_summary.length () > 1; }
  
*************** struct path_summary
*** 740,745 ****
--- 747,753 ----
      return **slot;
    }
  
+   const logical_location_manager &m_logical_loc_mgr;
    auto_delete_vec <event_range> m_ranges;
    auto_delete_vec <per_thread_summary> m_per_thread_summary;
    hash_map<int_hash<diagnostic_thread_id_t, -1, -2>,
*************** private:
*** 756,761 ****
--- 764,770 ----
      const diagnostic_thread &thread = path.get_thread (tid);
      per_thread_summary *pts
        = new per_thread_summary (path,
+ 				m_logical_loc_mgr,
  				thread.get_name (false),
  				m_per_thread_summary.length ());
      m_thread_id_to_events.put (tid, pts);
*************** path_summary::path_summary (const path_p
*** 792,797 ****
--- 801,807 ----
  			    bool check_rich_locations,
  			    bool colorize,
  			    bool show_event_links)
+ : m_logical_loc_mgr (path.get_logical_location_manager ())
  {
    const unsigned num_events = path.num_events ();
  
*************** public:
*** 872,877 ****
--- 882,888 ----
    void
    print_swimlane_for_event_range (diagnostic_text_output_format &text_output,
  				  pretty_printer *pp,
+ 				  const logical_location_manager &logical_loc_mgr,
  				  event_range *range,
  				  diagnostic_source_effect_info *effect_info)
    {
*************** public:
*** 916,924 ****
  	    m_cur_indent += 5;
  	  }
        }
!     if (const logical_location *logical_loc = range->m_logical_loc)
        {
! 	label_text name (logical_loc->get_name_for_path_output ());
  	if (name.get ())
  	  pp_printf (pp, "%qs: ", name.get ());
        }
--- 927,936 ----
  	    m_cur_indent += 5;
  	  }
        }
!     if (range->m_logical_loc)
        {
! 	label_text name
! 	  (logical_loc_mgr.get_name_for_path_output (range->m_logical_loc));
  	if (name.get ())
  	  pp_printf (pp, "%qs: ", name.get ());
        }
*************** print_path_summary_as_text (const path_s
*** 1113,1119 ****
  	 of this range.  */
        diagnostic_source_effect_info effect_info;
        effect_info.m_leading_in_edge_column = last_out_edge_column;
!       tep.print_swimlane_for_event_range (text_output, pp, range, &effect_info);
        last_out_edge_column = effect_info.m_trailing_out_edge_column;
      }
  }
--- 1125,1133 ----
  	 of this range.  */
        diagnostic_source_effect_info effect_info;
        effect_info.m_leading_in_edge_column = last_out_edge_column;
!       tep.print_swimlane_for_event_range (text_output, pp,
! 					  ps.get_logical_location_manager (),
! 					  range, &effect_info);
        last_out_edge_column = effect_info.m_trailing_out_edge_column;
      }
  }
*************** diagnostic_text_output_format::print_pat
*** 1155,1160 ****
--- 1169,1175 ----
      case DPF_SEPARATE_EVENTS:
        {
  	/* A note per event.  */
+ 	auto &logical_loc_mgr = path.get_logical_location_manager ();
  	for (unsigned i = 0; i < num_events; i++)
  	  {
  	    const diagnostic_event &event = path.get_event (i);
*************** diagnostic_text_output_format::print_pat
*** 1166,1175 ****
  		/* -fdiagnostics-path-format=separate-events doesn't print
  		   fndecl information, so with -fdiagnostics-show-path-depths
  		   print the fndecls too, if any.  */
! 		if (const logical_location *logical_loc
  		      = event.get_logical_location ())
  		  {
! 		    label_text name (logical_loc->get_name_for_path_output ());
  		    inform (event.get_location (),
  			    "%@ %e (fndecl %qs, depth %i)",
  			    &event_id, &e_event_desc,
--- 1181,1191 ----
  		/* -fdiagnostics-path-format=separate-events doesn't print
  		   fndecl information, so with -fdiagnostics-show-path-depths
  		   print the fndecls too, if any.  */
! 		if (logical_location logical_loc
  		      = event.get_logical_location ())
  		  {
! 		    label_text name
! 		      (logical_loc_mgr.get_name_for_path_output (logical_loc));
  		    inform (event.get_location (),
  			    "%@ %e (fndecl %qs, depth %i)",
  			    &event_id, &e_event_desc,
diff -Nrcpad gcc-16-20250504/gcc/diagnostic-path.h gcc-16-20250511/gcc/diagnostic-path.h
*** gcc-16-20250504/gcc/diagnostic-path.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic-path.h	Sun May 11 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 23,29 ****
--- 23,31 ----
  
  #include "diagnostic.h" /* for ATTRIBUTE_GCC_DIAG.  */
  #include "diagnostic-event-id.h"
+ #include "logical-location.h"
  
+ class sarif_builder;
  class sarif_object;
  
  /* A diagnostic_path is an optional additional piece of metadata associated
*************** class diagnostic_event
*** 149,156 ****
    /* Print a localized (and possibly colorized) description of this event.  */
    virtual void print_desc (pretty_printer &pp) const = 0;
  
!   /* Get a logical_location for this event, or nullptr if there is none.  */
!   virtual const logical_location *get_logical_location () const = 0;
  
    virtual meaning get_meaning () const = 0;
  
--- 151,158 ----
    /* Print a localized (and possibly colorized) description of this event.  */
    virtual void print_desc (pretty_printer &pp) const = 0;
  
!   /* Get a logical location for this event, or null if there is none.  */
!   virtual logical_location get_logical_location () const = 0;
  
    virtual meaning get_meaning () const = 0;
  
*************** class diagnostic_event
*** 163,169 ****
    /* Hook for SARIF output to allow for adding diagnostic-specific
       properties to the threadFlowLocation object's property bag.  */
    virtual void
!   maybe_add_sarif_properties (sarif_object &/*thread_flow_loc_obj*/) const
    {
    }
  
--- 165,172 ----
    /* Hook for SARIF output to allow for adding diagnostic-specific
       properties to the threadFlowLocation object's property bag.  */
    virtual void
!   maybe_add_sarif_properties (sarif_builder &,
! 			      sarif_object &/*thread_flow_loc_obj*/) const
    {
    }
  
*************** class diagnostic_path
*** 203,210 ****
--- 206,226 ----
    bool interprocedural_p () const;
    bool multithreaded_p () const;
  
+   const logical_location_manager &get_logical_location_manager () const
+   {
+     return m_logical_loc_mgr;
+   }
+ 
+ protected:
+   diagnostic_path (const logical_location_manager &logical_loc_mgr)
+   : m_logical_loc_mgr (logical_loc_mgr)
+   {
+   }
+ 
  private:
    bool get_first_event_in_a_function (unsigned *out_idx) const;
+ 
+   const logical_location_manager &m_logical_loc_mgr;
  };
  
  /* Concrete subclasses of the above can be found in
diff -Nrcpad gcc-16-20250504/gcc/diagnostic.cc gcc-16-20250511/gcc/diagnostic.cc
*** gcc-16-20250504/gcc/diagnostic.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic.cc	Sun May 11 22:32:10 2025
*************** diagnostic_context::initialize (int n_op
*** 282,287 ****
--- 282,288 ----
    m_diagnostic_groups.m_group_nesting_depth = 0;
    m_diagnostic_groups.m_diagnostic_nesting_level = 0;
    m_diagnostic_groups.m_emission_count = 0;
+   m_diagnostic_groups.m_inhibiting_notes_from = 0;
    m_output_sinks.safe_push
      (new diagnostic_text_output_format (*this, nullptr, true));
    m_set_locations_cb = nullptr;
*************** diagnostic_context::pop_urlifier ()
*** 579,584 ****
--- 580,593 ----
      delete node.m_urlifier;
  }
  
+ const logical_location_manager *
+ diagnostic_context::get_logical_location_manager () const
+ {
+   if (!m_client_data_hooks)
+     return nullptr;
+   return m_client_data_hooks->get_logical_location_manager ();
+ }
+ 
  const urlifier *
  diagnostic_context::get_urlifier () const
  {
*************** diagnostic_context::check_max_errors (bo
*** 917,922 ****
--- 926,932 ----
  
  /* Take any action which is expected to happen after the diagnostic
     is written out.  This function does not always return.  */
+ 
  void
  diagnostic_context::action_after_output (diagnostic_t diag_kind)
  {
*************** diagnostic_context::action_after_output
*** 991,1004 ****
      }
  }
  
! /* class logical_location.  */
  
  /* Return true iff this is a function or method.  */
  
  bool
! logical_location::function_p () const
  {
!   switch (get_kind ())
      {
      default:
        gcc_unreachable ();
--- 1001,1058 ----
      }
  }
  
! /* State whether we should inhibit notes in the current diagnostic_group and
!    its future children if any.  */
! 
! void
! diagnostic_context::inhibit_notes_in_group (bool inhibit)
! {
!   int curr_depth = (m_diagnostic_groups.m_group_nesting_depth
! 		    + m_diagnostic_groups.m_diagnostic_nesting_level);
! 
!   if (inhibit)
!     {
!       /* If we're already inhibiting, there's nothing to do.  */
!       if (m_diagnostic_groups.m_inhibiting_notes_from)
! 	return;
! 
!       /* Since we're called via warning/error/... that all have their own
! 	 diagnostic_group, we must consider that we started inhibiting in their
! 	 parent.  */
!       gcc_assert (m_diagnostic_groups.m_group_nesting_depth > 0);
!       m_diagnostic_groups.m_inhibiting_notes_from = curr_depth - 1;
!     }
!   else if (m_diagnostic_groups.m_inhibiting_notes_from)
!     {
!       /* Only cancel inhibition at the depth that set it up.  */
!       if (curr_depth >= m_diagnostic_groups.m_inhibiting_notes_from)
! 	return;
! 
!       m_diagnostic_groups.m_inhibiting_notes_from = 0;
!     }
! }
! 
! /* Return whether notes must be inhibited in the current diagnostic_group.  */
! 
! bool
! diagnostic_context::notes_inhibited_in_group () const
! {
!   if (m_diagnostic_groups.m_inhibiting_notes_from
!       && (m_diagnostic_groups.m_group_nesting_depth
! 	  + m_diagnostic_groups.m_diagnostic_nesting_level
! 	  >= m_diagnostic_groups.m_inhibiting_notes_from))
!     return true;
!   return false;
! }
! 
! /* class logical_location_manager.  */
  
  /* Return true iff this is a function or method.  */
  
  bool
! logical_location_manager::function_p (key k) const
  {
!   switch (get_kind (k))
      {
      default:
        gcc_unreachable ();
*************** diagnostic_context::report_diagnostic (d
*** 1381,1387 ****
    bool was_warning = (diagnostic->kind == DK_WARNING
  		      || diagnostic->kind == DK_PEDWARN);
    if (was_warning && m_inhibit_warnings)
!     return false;
  
    if (m_adjust_diagnostic_info)
      m_adjust_diagnostic_info (this, diagnostic);
--- 1435,1444 ----
    bool was_warning = (diagnostic->kind == DK_WARNING
  		      || diagnostic->kind == DK_PEDWARN);
    if (was_warning && m_inhibit_warnings)
!     {
!       inhibit_notes_in_group ();
!       return false;
!     }
  
    if (m_adjust_diagnostic_info)
      m_adjust_diagnostic_info (this, diagnostic);
*************** diagnostic_context::report_diagnostic (d
*** 1411,1417 ****
       not disabled by #pragma GCC diagnostic anywhere along the inlining
       stack.  .  */
    if (!diagnostic_enabled (diagnostic))
!     return false;
  
    if ((was_warning || diagnostic->kind == DK_WARNING)
        && ((!m_warn_system_headers
--- 1468,1477 ----
       not disabled by #pragma GCC diagnostic anywhere along the inlining
       stack.  .  */
    if (!diagnostic_enabled (diagnostic))
!     {
!       inhibit_notes_in_group ();
!       return false;
!     }
  
    if ((was_warning || diagnostic->kind == DK_WARNING)
        && ((!m_warn_system_headers
*************** diagnostic_context::report_diagnostic (d
*** 1421,1426 ****
--- 1481,1490 ----
         inlining stack (if there is one) are in system headers.  */
      return false;
  
+   if (diagnostic->kind == DK_NOTE && notes_inhibited_in_group ())
+     /* Bail for all the notes in the diagnostic_group that started to inhibit notes.  */
+     return false;
+ 
    if (diagnostic->kind != DK_NOTE && diagnostic->kind != DK_ICE)
      check_max_errors (false);
  
*************** diagnostic_context::report_diagnostic (d
*** 1436,1441 ****
--- 1500,1508 ----
  	error_recursion ();
      }
  
+   /* We are accepting the diagnostic, so should stop inhibiting notes.  */
+   inhibit_notes_in_group (/*inhibit=*/false);
+ 
    m_lock++;
  
    if (diagnostic->kind == DK_ICE || diagnostic->kind == DK_ICE_NOBT)
*************** diagnostic_context::end_group ()
*** 1769,1774 ****
--- 1836,1843 ----
  	  sink->on_end_group ();
        m_diagnostic_groups.m_emission_count = 0;
      }
+   /* We're popping one level, so might need to stop inhibiting notes.  */
+   inhibit_notes_in_group (/*inhibit=*/false);
  }
  
  void
*************** void
*** 1781,1786 ****
--- 1850,1857 ----
  diagnostic_context::pop_nesting_level ()
  {
    --m_diagnostic_groups.m_diagnostic_nesting_level;
+   /* We're popping one level, so might need to stop inhibiting notes.  */
+   inhibit_notes_in_group (/*inhibit=*/false);
  }
  
  void
diff -Nrcpad gcc-16-20250504/gcc/diagnostic.h gcc-16-20250511/gcc/diagnostic.h
*** gcc-16-20250504/gcc/diagnostic.h	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/diagnostic.h	Sun May 11 22:32:10 2025
*************** public:
*** 217,223 ****
  
  class edit_context;
  class diagnostic_client_data_hooks;
! class logical_location;
  class diagnostic_diagram;
  class diagnostic_source_effect_info;
  class diagnostic_output_format;
--- 217,223 ----
  
  class edit_context;
  class diagnostic_client_data_hooks;
! class logical_location_manager;
  class diagnostic_diagram;
  class diagnostic_source_effect_info;
  class diagnostic_output_format;
*************** public:
*** 671,676 ****
--- 671,679 ----
      return m_client_data_hooks;
    }
  
+   const logical_location_manager *
+   get_logical_location_manager () const;
+ 
    const urlifier *get_urlifier () const;
  
    text_art::theme *get_diagram_theme () const { return m_diagrams.m_theme; }
*************** private:
*** 966,973 ****
--- 969,982 ----
      /* How many diagnostics have been emitted since the bottommost
         diagnostic_group was pushed.  */
      int m_emission_count;
+ 
+     /* The "group+diagnostic" nesting depth from which to inhibit notes.  */
+     int m_inhibiting_notes_from;
    } m_diagnostic_groups;
  
+   void inhibit_notes_in_group (bool inhibit = true);
+   bool notes_inhibited_in_group () const;
+ 
    /* The various sinks to which diagnostics are to be outputted
       (text vs structured formats such as SARIF).
       The sinks are owned by the context; this would be a
diff -Nrcpad gcc-16-20250504/gcc/doc/invoke.texi gcc-16-20250511/gcc/doc/invoke.texi
*** gcc-16-20250504/gcc/doc/invoke.texi	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/doc/invoke.texi	Sun May 11 22:32:10 2025
*************** See RS/6000 and PowerPC Options.
*** 1268,1274 ****
  -mfence-tso  -mno-fence-tso
  -mdiv  -mno-div
  -misa-spec=@var{ISA-spec-string}
! -march=@var{ISA-string}
  -mtune=@var{processor-string}
  -mpreferred-stack-boundary=@var{num}
  -msmall-data-limit=@var{N-bytes}
--- 1268,1274 ----
  -mfence-tso  -mno-fence-tso
  -mdiv  -mno-div
  -misa-spec=@var{ISA-spec-string}
! -march=@var{ISA-string|Profiles|Profiles_ISA-string}
  -mtune=@var{processor-string}
  -mpreferred-stack-boundary=@var{num}
  -msmall-data-limit=@var{N-bytes}
*************** in this release.
*** 6072,6077 ****
--- 6072,6093 ----
  
  @end table
  
+ @item experimental-html
+ Emit diagnostics to a file in HTML format.  This scheme is experimental,
+ and may go away in future GCC releases.  The details of the output are
+ also subject to change.
+ 
+ Supported keys are:
+ 
+ @table @gcctabopt
+ 
+ @item file=@var{FILENAME}
+ Specify the filename to write the HTML output to, potentially with a
+ leading absolute or relative path.  If not specified, it defaults to
+ @file{@var{source}.html}.
+ 
+ @end table
+ 
  @end table
  
  For example,
*************** In EBNF:
*** 6091,6097 ****
  @var{diagnostics-output-specifier} = @var{diagnostics-output-name}
                                     | @var{diagnostics-output-name}, ":", @var{key-value-pairs};
  
! @var{diagnostics-output-name} = "text" | "sarif";
  
  @var{key-value-pairs} = @var{key-value-pair}
                        | @var{key-value-pair} "," @var{key-value-pairs};
--- 6107,6113 ----
  @var{diagnostics-output-specifier} = @var{diagnostics-output-name}
                                     | @var{diagnostics-output-name}, ":", @var{key-value-pairs};
  
! @var{diagnostics-output-name} = "text" | "sarif" | "experimental-html";
  
  @var{key-value-pairs} = @var{key-value-pair}
                        | @var{key-value-pair} "," @var{key-value-pairs};
*************** By default, the dump will contain messag
*** 20774,20779 ****
--- 20790,20882 ----
  optimizations (equivalent to @option{-optimized}) together with
  low-level details about the analysis.
  
+ @opindex fdump-ipa-clones
+ @item -fdump-ipa-clones
+ 
+ Create a dump file containing information about creation of call graph
+ node clones and removals of call graph nodes during inter-procedural
+ optimizations and transformations.  Its main intended use is that tools
+ that create live-patches can determine the set of functions that need to
+ be live-patched to completely replace a particular function (see
+ @option{-flive-patching}).  The file name is generated by appending
+ suffix @code{ipa-clones} to the source file name, and the file is
+ created in the same directory as the output file.  Each entry in the
+ file is on a separate line containing semicolon separated fields.
+ 
+ In the case of call graph clone creation, the individual fields are:
+ 
+ @enumerate
+ @item
+ String @code{Callgraph clone}.
+ 
+ @item
+ Name of the function being cloned as it is presented to the assembler.
+ 
+ @item
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ 
+ @item
+ The file name of the source file where the function is defined.
+ 
+ @item
+ The line on which the function definition is located.
+ 
+ @item
+ The column where the function definition is located.
+ 
+ @item
+ Name of the new function clone as it is presented to the assembler.
+ 
+ @item
+ A number that uniquely represents the new function clone in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ 
+ @item
+ The file name of the source file where the source code location of the
+ new clone points to.
+ 
+ @item
+ The line to which the source code location of the new clone points to.
+ 
+ @item
+ The column to which the source code location of the new clone points to.
+ 
+ @item
+ A string that determines the reason for cloning.
+ 
+ @end enumerate
+ 
+ In the case of call graph clone removal, the individual fields are:
+ 
+ @enumerate
+ @item
+ String @code{Callgraph removal}.
+ 
+ @item
+ Name of the function being removed as it would be presented to the assembler.
+ 
+ @item
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ 
+ @item
+ The file name of the source file where the function is defined.
+ 
+ @item
+ The line on which the function definition is located.
+ 
+ @item
+ The column where the function definition is located.
+ 
+ @end enumerate
+ 
  @opindex fdump-lang
  @item -fdump-lang
  Dump language-specific information.  The file name is made by appending
*************** The default is @option{-misa-spec=201912
*** 31012,31022 ****
  with @option{--with-isa-spec=} specifying a different default version.
  
  @opindex march
! @item -march=@var{ISA-string}
! Generate code for given RISC-V ISA (e.g.@: @samp{rv64im}).  ISA strings must be
! lower-case.  Examples include @samp{rv64i}, @samp{rv32g}, @samp{rv32e}, and
! @samp{rv32imaf}. Additionally, a special value @option{help}
! (@option{-march=help}) is accepted to list all supported extensions.
  
  The syntax of the ISA string is defined as follows:
  
--- 31115,31130 ----
  with @option{--with-isa-spec=} specifying a different default version.
  
  @opindex march
! @item -march=@var{ISA-string|Profiles|Profile_ISA-string}
! Generate code for given RISC-V ISA or Profiles or a combination of them
! (e.g.@: @samp{rv64im} @samp{rvi20u64} @samp{rvi20u64_zbb}).  ISA strings and
! Profiles must be lower-case.  Examples include @samp{rv64i}, @samp{rv32g},
! @samp{rv32e}, @samp{rv32imaf}, @samp{rva22u64} and @samp{rva23u64}.
! To combine Profiles and optional RISC-V ISA extention, the profile should start
! at the beginning of the option, then use underline connect ISA-string (e.g.@:
! @samp{rvi20u64_zca_zcb} @samp{rva23u64_zacas}).  Additionally, a special value
! @option{help} (@option{-march=help}) is accepted to list all supported
! extensions.
  
  The syntax of the ISA string is defined as follows:
  
*************** to @samp{zvks} and @samp{zvkg}.
*** 31445,31450 ****
--- 31553,31566 ----
  @tab 1.0
  @tab Supervisor-mode timer interrupts extension.
  
+ @item svade
+ @tab 1.0
+ @tab Cause exception when hardware updating of A/D bits is disabled
+ 
+ @item svadu
+ @tab 1.0
+ @tab Hardware Updating of A/D Bits extension.
+ 
  @item svinval
  @tab 1.0
  @tab Fine-grained address-translation cache invalidation extension.
diff -Nrcpad gcc-16-20250504/gcc/doc/libgdiagnostics/topics/compatibility.rst gcc-16-20250511/gcc/doc/libgdiagnostics/topics/compatibility.rst
*** gcc-16-20250504/gcc/doc/libgdiagnostics/topics/compatibility.rst	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/doc/libgdiagnostics/topics/compatibility.rst	Sun May 11 22:32:10 2025
***************
*** 0 ****
--- 1,179 ----
+ .. Copyright (C) 2015-2025 Free Software Foundation, Inc.
+    Originally contributed by David Malcolm <dmalcolm@redhat.com>
+ 
+    This 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 of the License, or
+    (at your option) any later version.
+ 
+    This program 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 program.  If not, see
+    <https://www.gnu.org/licenses/>.
+ 
+ .. default-domain:: c
+ 
+ ABI and API compatibility
+ =========================
+ 
+ The libgdiagnostics developers strive for ABI and API backward-compatibility:
+ programs built against libgdiagnostics.so stand a good chance of running
+ without recompilation against newer versions of libgdiagnostics.so, and
+ ought to recompile without modification against newer versions of
+ libgdiagnostics.h.
+ 
+ .. note:: The libgdiagnostics++.h C++ API is more experimental, and less
+           locked-down at this time.
+ 
+ API compatibility is achieved by extending the API rather than changing
+ it.  For ABI compatiblity, we avoid bumping the SONAME, and instead use
+ symbol versioning to tag each symbol, so that a binary linked against
+ libgdiagnostics.so is tagged according to the symbols that it uses.
+ 
+ For example, :func:`diagnostic_logical_location_get_kind` was added in
+ ``LIBGDIAGNOSTICS_ABI_1``.  If a client program uses it, this can be detected
+ from metadata by using ``objdump``:
+ 
+ .. code-block:: bash
+ 
+    $ objdump -p testsuite/libgdiagnostics/test-logical-location.c.exe | tail -n 7
+ 
+    Version References:
+      required from libc.so.6:
+        0x09691a75 0x00 04 GLIBC_2.2.5
+      required from libgdiagnostics.so.0:
+        0x0ec567d1 0x00 03 LIBGDIAGNOSTICS_ABI_1
+        0x0ec567d0 0x00 02 LIBGDIAGNOSTICS_ABI_0
+ 
+ You can see the symbol tags provided by libgdiagnostics.so using ``objdump``:
+ 
+ .. code-block:: bash
+ 
+    $ objdump -p libgdiagnostics.so | less
+    [...snip...]
+    Version definitions:
+    1 0x01 0x099ea4b0 libgdiagnostics.so.0
+    2 0x00 0x0ec567d0 LIBGDIAGNOSTICS_ABI_0
+    3 0x00 0x0ec567d1 LIBGDIAGNOSTICS_ABI_1
+            LIBGDIAGNOSTICS_ABI_0
+    [...snip...]
+ 
+ ABI symbol tags
+ ***************
+ 
+ .. _LIBGDIAGNOSTICS_ABI_0:
+ 
+ ``LIBGDIAGNOSTICS_ABI_0``
+ -------------------------
+ 
+ All entrypoints in the initial release of libgdiagnostics (in GCC 15) are
+ tagged with ``LIBGDIAGNOSTICS_ABI_0``; these entrypoints are:
+ 
+   * :func:`diagnostic_manager_new`
+ 
+   * :func:`diagnostic_manager_release`
+ 
+   * :func:`diagnostic_manager_set_tool_name`
+ 
+   * :func:`diagnostic_manager_set_full_name`
+ 
+   * :func:`diagnostic_manager_set_version_string`
+ 
+   * :func:`diagnostic_manager_set_version_url`
+ 
+   * :func:`diagnostic_manager_add_text_sink`
+ 
+   * :func:`diagnostic_text_sink_set_source_printing_enabled`
+ 
+   * :func:`diagnostic_text_sink_set_colorize`
+ 
+   * :func:`diagnostic_text_sink_set_labelled_source_colorization_enabled`
+ 
+   * :func:`diagnostic_manager_add_sarif_sink`
+ 
+   * :func:`diagnostic_manager_write_patch`
+ 
+   * :func:`diagnostic_manager_new_file`
+ 
+   * :func:`diagnostic_file_set_buffered_content`
+ 
+   * :func:`diagnostic_manager_debug_dump_file`
+ 
+   * :func:`diagnostic_manager_new_location_from_file_and_line`
+ 
+   * :func:`diagnostic_manager_new_location_from_file_line_column`
+ 
+   * :func:`diagnostic_manager_new_location_from_range`
+ 
+   * :func:`diagnostic_manager_debug_dump_location`
+ 
+   * :func:`diagnostic_manager_new_logical_location`
+ 
+   * :func:`diagnostic_manager_debug_dump_logical_location`
+ 
+   * :func:`diagnostic_manager_begin_group`
+ 
+   * :func:`diagnostic_manager_end_group`
+ 
+   * :func:`diagnostic_begin`
+ 
+   * :func:`diagnostic_set_cwe`
+ 
+   * :func:`diagnostic_add_rule`
+ 
+   * :func:`diagnostic_set_location`
+ 
+   * :func:`diagnostic_set_location_with_label`
+ 
+   * :func:`diagnostic_add_location`
+ 
+   * :func:`diagnostic_add_location_with_label`
+ 
+   * :func:`diagnostic_set_logical_location`
+ 
+   * :func:`diagnostic_add_fix_it_hint_insert_before`
+ 
+   * :func:`diagnostic_add_fix_it_hint_insert_after`
+ 
+   * :func:`diagnostic_add_fix_it_hint_replace`
+ 
+   * :func:`diagnostic_add_fix_it_hint_delete`
+ 
+   * :func:`diagnostic_add_execution_path`
+ 
+   * :func:`diagnostic_manager_new_execution_path`
+ 
+   * :func:`diagnostic_take_execution_path`
+ 
+   * :func:`diagnostic_execution_path_release`
+ 
+   * :func:`diagnostic_execution_path_add_event`
+ 
+   * :func:`diagnostic_execution_path_add_event_va`
+ 
+   * :func:`diagnostic_finish`
+ 
+   * :func:`diagnostic_finish_va`
+ 
+   * :func:`diagnostic_physical_location_get_file`
+ 
+ .. _LIBGDIAGNOSTICS_ABI_1:
+ 
+ ``LIBGDIAGNOSTICS_ABI_1``
+ -------------------------
+ ``LIBGDIAGNOSTICS_ABI_1`` covers the addition of these functions for
+ acccessing values within a :type:`diagnostic_logical_location`:
+ 
+   * :func:`diagnostic_logical_location_get_kind`
+ 
+   * :func:`diagnostic_logical_location_get_parent`
+ 
+   * :func:`diagnostic_logical_location_get_short_name`
+ 
+   * :func:`diagnostic_logical_location_get_fully_qualified_name`
+ 
+   * :func:`diagnostic_logical_location_get_decorated_name`
diff -Nrcpad gcc-16-20250504/gcc/doc/libgdiagnostics/topics/index.rst gcc-16-20250511/gcc/doc/libgdiagnostics/topics/index.rst
*** gcc-16-20250504/gcc/doc/libgdiagnostics/topics/index.rst	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/doc/libgdiagnostics/topics/index.rst	Sun May 11 22:32:10 2025
*************** Topic reference
*** 36,38 ****
--- 36,39 ----
     text-output.rst
     sarif.rst
     ux.rst
+    compatibility.rst
diff -Nrcpad gcc-16-20250504/gcc/doc/libgdiagnostics/topics/logical-locations.rst gcc-16-20250511/gcc/doc/libgdiagnostics/topics/logical-locations.rst
*** gcc-16-20250504/gcc/doc/libgdiagnostics/topics/logical-locations.rst	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/doc/libgdiagnostics/topics/logical-locations.rst	Sun May 11 22:32:10 2025
*************** source location
*** 51,56 ****
--- 51,58 ----
        This roughly corresponds to the ``kind`` property in SARIF v2.1.0
        (`§3.33.7 <https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/sarif-v2.1.0-errata01-os-complete.html#_Toc141790976>`_).
  
+       Kinds within executable code:
+ 
        .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION
  
        .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_MEMBER
*************** source location
*** 67,72 ****
--- 69,100 ----
  
        .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE
  
+       Kinds within XML or HTML documents:
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_ELEMENT
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_ATTRIBUTE
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_TEXT
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_COMMENT
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_DTD
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_DECLARATION
+ 
+       Kinds within JSON documents:
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY
+ 
+       .. macro:: DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE
+ 
     ``parent`` can be NULL; if non-NULL it can be used to express tree-like
     nesting of logical locations, such as in::
  
*************** Associating diagnostics with locations
*** 113,115 ****
--- 141,168 ----
      Set the logical location of ``diag``.
  
      ``diag`` must be non-NULL; ``logical_loc`` can be NULL.
+ 
+ Accessors
+ *********
+ 
+ The following functions can be used to access the data that was passed to a
+ :type:`diagnostic_logical_location` when it was created.  In each case, the
+ ``loc`` parameter must be non-NULL.  :type:`const char *` values will point
+ at copies of the original buffer.
+ 
+ .. function:: enum diagnostic_logical_location_kind_t diagnostic_logical_location_get_kind (const diagnostic_logical_location *loc)
+ 
+ .. function:: const diagnostic_logical_location *diagnostic_logical_location_get_parent (const diagnostic_logical_location *loc)
+ 
+ .. function:: const char *diagnostic_logical_location_get_short_name (const diagnostic_logical_location *loc)
+ 
+ .. function:: const char *diagnostic_logical_location_get_fully_qualified_name (const diagnostic_logical_location *loc)
+ 
+ .. function:: const char *diagnostic_logical_location_get_decorated_name (const diagnostic_logical_location *loc)
+ 
+ The above accessors were added in :ref:`LIBGDIAGNOSTICS_ABI_1`; you can
+ test for their presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_LOGICAL_LOCATION_ACCESSORS
diff -Nrcpad gcc-16-20250504/gcc/doc/ux.texi gcc-16-20250511/gcc/doc/ux.texi
*** gcc-16-20250504/gcc/doc/ux.texi	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/doc/ux.texi	Sun May 11 22:32:10 2025
*************** diagnostic subsystem that all diagnostic
*** 409,415 ****
  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.
  
  @subsection Quoting
  Text should be quoted by either using the @samp{q} modifier in a directive
--- 409,418 ----
  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
! or deeper will be inhibited as well, until an error or another warning
! is emitted, the depth decreases below D, or the group is popped.
  
  @subsection Quoting
  Text should be quoted by either using the @samp{q} modifier in a directive
diff -Nrcpad gcc-16-20250504/gcc/dse.cc gcc-16-20250511/gcc/dse.cc
*** gcc-16-20250504/gcc/dse.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/dse.cc	Sun May 11 22:32:10 2025
*************** canon_address (rtx mem,
*** 1190,1196 ****
        address = strip_offset_and_add (address, offset);
  
        if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (mem))
! 	  && const_or_frame_p (address))
  	{
  	  group_info *group = get_group_info (address);
  
--- 1190,1199 ----
        address = strip_offset_and_add (address, offset);
  
        if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (mem))
! 	  && const_or_frame_p (address)
! 	  /* Literal addresses can alias any base, avoid creating a
! 	     group for them.  */
! 	  && ! CONST_SCALAR_INT_P (address))
  	{
  	  group_info *group = get_group_info (address);
  
diff -Nrcpad gcc-16-20250504/gcc/dwarf2out.cc gcc-16-20250511/gcc/dwarf2out.cc
*** gcc-16-20250504/gcc/dwarf2out.cc	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/dwarf2out.cc	Sun May 11 22:32:10 2025
*************** resolve_addr_in_expr (dw_attr_node *a, d
*** 31068,31074 ****
                return false;
              remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
  	    loc->dw_loc_oprnd1.val_entry
! 	      = add_addr_table_entry (rtl, ate_kind_rtx);
            }
  	break;
        case DW_OP_const4u:
--- 31068,31075 ----
                return false;
              remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
  	    loc->dw_loc_oprnd1.val_entry
! 	      = add_addr_table_entry (rtl, loc->dw_loc_dtprel
! 				      ? ate_kind_rtx_dtprel : ate_kind_rtx);
            }
  	break;
        case DW_OP_const4u:
diff -Nrcpad gcc-16-20250504/gcc/fortran/ChangeLog gcc-16-20250511/gcc/fortran/ChangeLog
*** gcc-16-20250504/gcc/fortran/ChangeLog	Sun May  4 22:32:15 2025
--- gcc-16-20250511/gcc/fortran/ChangeLog	Sun May 11 22:32:10 2025
***************
*** 1,3 ****
--- 1,60 ----
+ 2025-05-10  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/102891
+ 	* dependency.cc (gfc_ref_needs_temporary_p): Within an array
+ 	reference, inquiry references of complex variables generally
+ 	need a temporary.
+ 
+ 2025-05-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/120193
+ 	* trans-types.cc (gfc_init_types): For flag_unsigned use
+ 	build_distinct_type_copy or build_variant_type_copy from
+ 	gfc_character_types[index_char] if index_char > -1 instead of
+ 	gfc_character_types[index_char] or
+ 	gfc_build_unsigned_type (&gfc_unsigned_kinds[index]).
+ 
+ 2025-05-08  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/120179
+ 	* match.cc (gfc_match_do): Do not attempt to match end-of-statement
+ 	twice.
+ 
+ 2025-05-07  Paul Thomas  <pault@gcc.gnu.org>
+ 	    and Steven G. Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/119948
+ 	* primary.cc (match_variable): Module procedures with sym the
+ 	same as result can be treated as variables, although marked
+ 	external.
+ 
+ 2025-05-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/120049
+ 	* check.cc (gfc_check_c_associated): Modify checks to avoid
+ 	ICE and allow use, intrinsic :: iso_c_binding from a separate
+ 	module file.
+ 
+ 2025-05-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/119928
+ 	* interface.cc (gfc_check_dummy_characteristics): Do not issue
+ 	error if one dummy symbol has been generated from an actual
+ 	argument and the other one has OPTIONAL, INTENT, ALLOCATABLE,
+ 	POINTER, TARGET, VALUE, ASYNCHRONOUS or CONTIGUOUS.
+ 	(gfc_get_formal_from_actual_arglist): Do nothing if symbol
+ 	is a class.
+ 
+ 2025-05-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/119986
+ 	* expr.cc (is_subref_array): When searching for array references,
+ 	do not terminate early so that inquiry references to complex
+ 	components work.
+ 	* primary.cc (gfc_variable_attr): A substring reference can refer
+ 	to either a scalar or array character variable.  Adjust search
+ 	accordingly.
+ 
  2025-05-01  Paul Thomas  <pault@gcc.gnu.org>
  
  	PR fortran/119948
diff -Nrcpad gcc-16-20250504/gcc/fortran/check.cc gcc-16-20250511/gcc/fortran/check.cc
*** gcc-16-20250504/gcc/fortran/check.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/check.cc	Sun May 11 22:32:10 2025
*************** gfc_check_c_sizeof (gfc_expr *arg)
*** 5955,5984 ****
  bool
  gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
  {
!   if (c_ptr_1->ts.type != BT_DERIVED
!       || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
!       || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
! 	  && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
      {
!       gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
! 		 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
!       return false;
      }
  
    if (!scalar_check (c_ptr_1, 0))
      return false;
  
!   if (c_ptr_2
!       && (c_ptr_2->ts.type != BT_DERIVED
  	  || c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
  	  || (c_ptr_1->ts.u.derived->intmod_sym_id
! 	      != c_ptr_2->ts.u.derived->intmod_sym_id)))
!     {
!       gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
! 		 "same type as C_PTR_1: %s instead of %s", &c_ptr_1->where,
! 		 gfc_typename (&c_ptr_1->ts),
! 		 gfc_typename (&c_ptr_2->ts));
!       return false;
      }
  
    if (c_ptr_2 && !scalar_check (c_ptr_2, 1))
--- 5955,5994 ----
  bool
  gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
  {
!   if (c_ptr_1)
      {
!       if (c_ptr_1->expr_type == EXPR_FUNCTION && c_ptr_1->ts.type == BT_VOID)
! 	return true;
! 
!       if (c_ptr_1->ts.type != BT_DERIVED
! 	  || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
! 	  || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
! 	      && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
! 	{
! 	  gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
! 		     "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
! 	  return false;
! 	}
      }
  
    if (!scalar_check (c_ptr_1, 0))
      return false;
  
!   if (c_ptr_2)
!     {
!       if (c_ptr_2->expr_type == EXPR_FUNCTION && c_ptr_2->ts.type == BT_VOID)
! 	return true;
! 
!       if (c_ptr_2->ts.type != BT_DERIVED
  	  || c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
  	  || (c_ptr_1->ts.u.derived->intmod_sym_id
! 	      != c_ptr_2->ts.u.derived->intmod_sym_id))
! 	{
! 	  gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
! 		   "same type as C_PTR_1: %s instead of %s", &c_ptr_1->where,
! 		   gfc_typename (&c_ptr_1->ts), gfc_typename (&c_ptr_2->ts));
! 	  return false;
! 	}
      }
  
    if (c_ptr_2 && !scalar_check (c_ptr_2, 1))
diff -Nrcpad gcc-16-20250504/gcc/fortran/dependency.cc gcc-16-20250511/gcc/fortran/dependency.cc
*** gcc-16-20250504/gcc/fortran/dependency.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/dependency.cc	Sun May 11 22:32:10 2025
*************** gfc_ref_needs_temporary_p (gfc_ref *ref)
*** 944,951 ****
  	   types), not in characters.  */
  	return subarray_p;
  
-       case REF_COMPONENT:
        case REF_INQUIRY:
  	break;
        }
  
--- 944,955 ----
  	   types), not in characters.  */
  	return subarray_p;
  
        case REF_INQUIRY:
+ 	/* Within an array reference, inquiry references of complex
+ 	   variables generally need a temporary.  */
+ 	return subarray_p;
+ 
+       case REF_COMPONENT:
  	break;
        }
  
diff -Nrcpad gcc-16-20250504/gcc/fortran/gfortran.h gcc-16-20250511/gcc/fortran/gfortran.h
*** gcc-16-20250504/gcc/fortran/gfortran.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/gfortran.h	Sun May 11 22:32:10 2025
*************** typedef struct gfc_symbol
*** 2028,2033 ****
--- 2028,2036 ----
       This is legal in Fortran, but can cause problems with autogenerated
       C prototypes for C23.  */
    unsigned ext_dummy_arglist_mismatch:1;
+   /* Set if the formal arglist has already been resolved, to avoid
+      trying to generate it again from actual arguments.  */
+   unsigned formal_resolved:1;
  
    /* Reference counter, used for memory management.
  
diff -Nrcpad gcc-16-20250504/gcc/fortran/interface.cc gcc-16-20250511/gcc/fortran/interface.cc
*** gcc-16-20250504/gcc/fortran/interface.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/interface.cc	Sun May 11 22:32:10 2025
*************** gfc_check_dummy_characteristics (gfc_sym
*** 1403,1479 ****
  	}
      }
  
!   /* Check INTENT.  */
!   if (s1->attr.intent != s2->attr.intent && !s1->attr.artificial
!       && !s2->attr.artificial)
!     {
!       snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check OPTIONAL attribute.  */
!   if (s1->attr.optional != s2->attr.optional)
      {
!       snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check ALLOCATABLE attribute.  */
!   if (s1->attr.allocatable != s2->attr.allocatable)
!     {
!       snprintf (errmsg, err_len, "ALLOCATABLE mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check POINTER attribute.  */
!   if (s1->attr.pointer != s2->attr.pointer)
!     {
!       snprintf (errmsg, err_len, "POINTER mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check TARGET attribute.  */
!   if (s1->attr.target != s2->attr.target)
!     {
!       snprintf (errmsg, err_len, "TARGET mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check ASYNCHRONOUS attribute.  */
!   if (s1->attr.asynchronous != s2->attr.asynchronous)
!     {
!       snprintf (errmsg, err_len, "ASYNCHRONOUS mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check CONTIGUOUS attribute.  */
!   if (s1->attr.contiguous != s2->attr.contiguous)
!     {
!       snprintf (errmsg, err_len, "CONTIGUOUS mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check VALUE attribute.  */
!   if (s1->attr.value != s2->attr.value)
!     {
!       snprintf (errmsg, err_len, "VALUE mismatch in argument '%s'",
! 		s1->name);
!       return false;
!     }
  
!   /* Check VOLATILE attribute.  */
!   if (s1->attr.volatile_ != s2->attr.volatile_)
!     {
!       snprintf (errmsg, err_len, "VOLATILE mismatch in argument '%s'",
! 		s1->name);
!       return false;
      }
  
    /* Check interface of dummy procedures.  */
--- 1403,1484 ----
  	}
      }
  
!   /* A lot of information is missing for artificially generated
!      formal arguments, let's not look into that.  */
  
!   if (!s1->attr.artificial && !s2->attr.artificial)
      {
!       /* Check INTENT.  */
!       if (s1->attr.intent != s2->attr.intent)
! 	{
! 	  snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
  
!       /* Check OPTIONAL attribute.  */
!       if (s1->attr.optional != s2->attr.optional)
! 	{
! 	  snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
  
!       /* Check ALLOCATABLE attribute.  */
!       if (s1->attr.allocatable != s2->attr.allocatable)
! 	{
! 	  snprintf (errmsg, err_len, "ALLOCATABLE mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
  
!       /* Check POINTER attribute.  */
!       if (s1->attr.pointer != s2->attr.pointer)
! 	{
! 	  snprintf (errmsg, err_len, "POINTER mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
  
!       /* Check TARGET attribute.  */
!       if (s1->attr.target != s2->attr.target)
! 	{
! 	  snprintf (errmsg, err_len, "TARGET mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
  
!       /* Check ASYNCHRONOUS attribute.  */
!       if (s1->attr.asynchronous != s2->attr.asynchronous)
! 	{
! 	  snprintf (errmsg, err_len, "ASYNCHRONOUS mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
  
!       /* Check CONTIGUOUS attribute.  */
!       if (s1->attr.contiguous != s2->attr.contiguous)
! 	{
! 	  snprintf (errmsg, err_len, "CONTIGUOUS mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
  
!       /* Check VALUE attribute.  */
!       if (s1->attr.value != s2->attr.value)
! 	{
! 	  snprintf (errmsg, err_len, "VALUE mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
! 
!       /* Check VOLATILE attribute.  */
!       if (s1->attr.volatile_ != s2->attr.volatile_)
! 	{
! 	  snprintf (errmsg, err_len, "VOLATILE mismatch in argument '%s'",
! 		    s1->name);
! 	  return false;
! 	}
      }
  
    /* Check interface of dummy procedures.  */
*************** gfc_get_formal_from_actual_arglist (gfc_
*** 5849,5854 ****
--- 5854,5865 ----
    char name[GFC_MAX_SYMBOL_LEN + 1];
    static int var_num;
  
+   /* Do not infer the formal from actual arguments if we are dealing with
+      classes.  */
+ 
+   if (sym->ts.type == BT_CLASS)
+     return;
+ 
    f = &sym->formal;
    for (a = actual_args; a != NULL; a = a->next)
      {
diff -Nrcpad gcc-16-20250504/gcc/fortran/match.cc gcc-16-20250511/gcc/fortran/match.cc
*** gcc-16-20250504/gcc/fortran/match.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/match.cc	Sun May 11 22:32:10 2025
*************** gfc_match_do (void)
*** 2892,2898 ****
  	  locus where = gfc_current_locus;
  
  	  if (gfc_match_eos () == MATCH_YES)
! 	    break;
  
  	  else if (gfc_match ("local ( ") == MATCH_YES)
  	    {
--- 2892,2898 ----
  	  locus where = gfc_current_locus;
  
  	  if (gfc_match_eos () == MATCH_YES)
! 	    goto concurr_ok;
  
  	  else if (gfc_match ("local ( ") == MATCH_YES)
  	    {
*************** gfc_match_do (void)
*** 3141,3146 ****
--- 3141,3147 ----
        if (gfc_match_eos () != MATCH_YES)
  	goto concurr_cleanup;
  
+ concurr_ok:
        if (label != NULL
  	   && !gfc_reference_st_label (label, ST_LABEL_DO_TARGET))
  	goto concurr_cleanup;
diff -Nrcpad gcc-16-20250504/gcc/fortran/primary.cc gcc-16-20250511/gcc/fortran/primary.cc
*** gcc-16-20250504/gcc/fortran/primary.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/primary.cc	Sun May 11 22:32:10 2025
*************** match_variable (gfc_expr **result, int e
*** 4396,4402 ****
      case FL_PROCEDURE:
        /* Check for a nonrecursive function result variable.  */
        if (sym->attr.function
! 	  && !sym->attr.external
  	  && sym->result == sym
  	  && (gfc_is_function_return_value (sym, gfc_current_ns)
  	      || (sym->attr.entry
--- 4396,4402 ----
      case FL_PROCEDURE:
        /* Check for a nonrecursive function result variable.  */
        if (sym->attr.function
! 	  && (!sym->attr.external || sym->abr_modproc_decl)
  	  && sym->result == sym
  	  && (gfc_is_function_return_value (sym, gfc_current_ns)
  	      || (sym->attr.entry
diff -Nrcpad gcc-16-20250504/gcc/fortran/resolve.cc gcc-16-20250511/gcc/fortran/resolve.cc
*** gcc-16-20250504/gcc/fortran/resolve.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/resolve.cc	Sun May 11 22:32:10 2025
*************** gfc_resolve_formal_arglist (gfc_symbol *
*** 533,539 ****
  	    }
  	}
      }
! 
    gfc_current_ns = orig_current_ns;
  }
  
--- 533,540 ----
  	    }
  	}
      }
!   if (sym)
!     sym->formal_resolved = 1;
    gfc_current_ns = orig_current_ns;
  }
  
*************** resolve_function (gfc_expr *expr)
*** 3472,3478 ****
  			   &expr->where, &sym->formal_at);
  	    }
  	}
!       else
  	{
  	  gfc_get_formal_from_actual_arglist (sym, expr->value.function.actual);
  	  sym->formal_at = expr->where;
--- 3473,3479 ----
  			   &expr->where, &sym->formal_at);
  	    }
  	}
!       else if (!sym->formal_resolved)
  	{
  	  gfc_get_formal_from_actual_arglist (sym, expr->value.function.actual);
  	  sym->formal_at = expr->where;
*************** resolve_call (gfc_code *c)
*** 4033,4039 ****
  			   &c->loc, &csym->formal_at);
  	    }
  	}
!       else
  	{
  	  gfc_get_formal_from_actual_arglist (csym, c->ext.actual);
  	  csym->formal_at = c->loc;
--- 4034,4040 ----
  			   &c->loc, &csym->formal_at);
  	    }
  	}
!       else if (!csym->formal_resolved)
  	{
  	  gfc_get_formal_from_actual_arglist (csym, c->ext.actual);
  	  csym->formal_at = c->loc;
diff -Nrcpad gcc-16-20250504/gcc/fortran/trans-types.cc gcc-16-20250511/gcc/fortran/trans-types.cc
*** gcc-16-20250504/gcc/fortran/trans-types.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/fortran/trans-types.cc	Sun May 11 22:32:10 2025
*************** gfc_init_types (void)
*** 1140,1150 ****
      }
    gfc_character1_type_node = gfc_character_types[0];
  
-   /* The middle end only recognizes a single unsigned type.  For
-      compatibility of existing test cases, let's just use the
-      character type.  The reader of tree dumps is expected to be able
-      to deal with this.  */
- 
    if (flag_unsigned)
      {
        for (index = 0; gfc_unsigned_kinds[index].kind != 0;++index)
--- 1140,1145 ----
*************** gfc_init_types (void)
*** 1159,1176 ****
  		  break;
  		}
  	    }
! 	  if (index_char > 0)
  	    {
! 	      gfc_unsigned_types[index] = gfc_character_types[index_char];
  	    }
  	  else
! 	    {
! 	      type = gfc_build_unsigned_type (&gfc_unsigned_kinds[index]);
! 	      gfc_unsigned_types[index] = type;
! 	      snprintf (name_buf, sizeof(name_buf), "unsigned(kind=%d)",
! 			gfc_integer_kinds[index].kind);
! 	      PUSH_TYPE (name_buf, type);
! 	    }
  	}
      }
  
--- 1154,1179 ----
  		  break;
  		}
  	    }
! 	  if (index_char > -1)
  	    {
! 	      type = gfc_character_types[index_char];
! 	      if (TYPE_STRING_FLAG (type))
! 		{
! 		  type = build_distinct_type_copy (type);
! 		  TYPE_CANONICAL (type)
! 		    = TYPE_CANONICAL (gfc_character_types[index_char]);
! 		}
! 	      else
! 		type = build_variant_type_copy (type);
! 	      TYPE_NAME (type) = NULL_TREE;
! 	      TYPE_STRING_FLAG (type) = 0;
  	    }
  	  else
! 	    type = gfc_build_unsigned_type (&gfc_unsigned_kinds[index]);
! 	  gfc_unsigned_types[index] = type;
! 	  snprintf (name_buf, sizeof(name_buf), "unsigned(kind=%d)",
! 		    gfc_integer_kinds[index].kind);
! 	  PUSH_TYPE (name_buf, type);
  	}
      }
  
diff -Nrcpad gcc-16-20250504/gcc/gcov.cc gcc-16-20250511/gcc/gcov.cc
*** gcc-16-20250504/gcc/gcov.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/gcov.cc	Sun May 11 22:32:10 2025
*************** print_source_line (FILE *f, const vector
*** 3591,3597 ****
     Returns 1 if the path was printed, 0 otherwise.  */
  static unsigned
  print_prime_path_lines (FILE *gcov_file, const function_info &fn,
! 			const vector<unsigned> &path, size_t pathno)
  {
    const bool is_covered = fn.paths.covered_p (pathno);
    if (is_covered && !flag_prime_paths_lines_covered)
--- 3591,3597 ----
     Returns 1 if the path was printed, 0 otherwise.  */
  static unsigned
  print_prime_path_lines (FILE *gcov_file, const function_info &fn,
! 			const vector<unsigned> &path, unsigned pathno)
  {
    const bool is_covered = fn.paths.covered_p (pathno);
    if (is_covered && !flag_prime_paths_lines_covered)
*************** print_prime_path_lines (FILE *gcov_file,
*** 3600,3608 ****
      return 0;
  
    if (is_covered)
!     fprintf (gcov_file, "path %zu covered: lines", pathno);
    else
!     fprintf (gcov_file, "path %zu not covered: lines", pathno);
  
    for (size_t k = 0; k != path.size (); ++k)
      {
--- 3600,3608 ----
      return 0;
  
    if (is_covered)
!     fprintf (gcov_file, "path %u covered: lines", pathno);
    else
!     fprintf (gcov_file, "path %u not covered: lines", pathno);
  
    for (size_t k = 0; k != path.size (); ++k)
      {
*************** print_inlined_separator (FILE *gcov_file
*** 3658,3664 ****
     Returns 1 if the path was printed, 0 otherwise.  */
  static unsigned
  print_prime_path_source (FILE *gcov_file, const function_info &fn,
! 			 const vector<unsigned> &path, size_t pathno)
  {
    const bool is_covered = fn.paths.covered_p (pathno);
    if (is_covered && !flag_prime_paths_source_covered)
--- 3658,3664 ----
     Returns 1 if the path was printed, 0 otherwise.  */
  static unsigned
  print_prime_path_source (FILE *gcov_file, const function_info &fn,
! 			 const vector<unsigned> &path, unsigned pathno)
  {
    const bool is_covered = fn.paths.covered_p (pathno);
    if (is_covered && !flag_prime_paths_source_covered)
*************** print_prime_path_source (FILE *gcov_file
*** 3667,3675 ****
      return 0;
  
    if (is_covered)
!     fprintf (gcov_file, "path %zu covered:\n", pathno);
    else
!     fprintf (gcov_file, "path %zu not covered:\n", pathno);
    unsigned current = fn.src;
    for (size_t k = 0; k != path.size (); ++k)
      {
--- 3667,3675 ----
      return 0;
  
    if (is_covered)
!     fprintf (gcov_file, "path %u covered:\n", pathno);
    else
!     fprintf (gcov_file, "path %u not covered:\n", pathno);
    unsigned current = fn.src;
    for (size_t k = 0; k != path.size (); ++k)
      {
*************** output_path_coverage (FILE *gcov_file, c
*** 3728,3746 ****
    if (fn->paths.paths.empty ())
      fnotice (gcov_file, "path coverage omitted\n");
    else
!     fnotice (gcov_file, "paths covered %u of %zu\n",
! 	     fn->paths.covered_paths (), fn->paths.paths.size ());
  
    if (flag_prime_paths_lines_uncovered || flag_prime_paths_lines_covered)
      {
!       size_t pathno = 0;
        for (const vector<unsigned> &path : fn->paths.paths)
  	print_prime_path_lines (gcov_file, *fn, path, pathno++);
      }
  
    if (flag_prime_paths_source_uncovered || flag_prime_paths_source_covered)
      {
!       size_t pathno = 0;
        for (const vector<unsigned> &path : fn->paths.paths)
  	print_prime_path_source (gcov_file, *fn, path, pathno++);
      }
--- 3728,3746 ----
    if (fn->paths.paths.empty ())
      fnotice (gcov_file, "path coverage omitted\n");
    else
!     fnotice (gcov_file, "paths covered %u of " HOST_SIZE_T_PRINT_UNSIGNED "\n",
! 	     fn->paths.covered_paths (), (fmt_size_t)fn->paths.paths.size ());
  
    if (flag_prime_paths_lines_uncovered || flag_prime_paths_lines_covered)
      {
!       unsigned pathno = 0;
        for (const vector<unsigned> &path : fn->paths.paths)
  	print_prime_path_lines (gcov_file, *fn, path, pathno++);
      }
  
    if (flag_prime_paths_source_uncovered || flag_prime_paths_source_covered)
      {
!       unsigned pathno = 0;
        for (const vector<unsigned> &path : fn->paths.paths)
  	print_prime_path_source (gcov_file, *fn, path, pathno++);
      }
diff -Nrcpad gcc-16-20250504/gcc/gensupport.cc gcc-16-20250511/gcc/gensupport.cc
*** gcc-16-20250504/gcc/gensupport.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/gensupport.cc	Sun May 11 22:32:10 2025
*************** public:
*** 656,662 ****
       i.e. if rtx is the relevant match_operand or match_scratch then
       [ns..ns + len) should equal itoa (XINT (rtx, 0)), and if set_attr then
       [ns..ns + len) should equal XSTR (rtx, 0).  */
!   conlist (const char *ns, unsigned int len, bool numeric)
    {
      /* Trim leading whitespaces.  */
      while (len > 0 && ISBLANK (*ns))
--- 656,662 ----
       i.e. if rtx is the relevant match_operand or match_scratch then
       [ns..ns + len) should equal itoa (XINT (rtx, 0)), and if set_attr then
       [ns..ns + len) should equal XSTR (rtx, 0).  */
!   conlist (const char *ns, unsigned int len, bool numeric, file_location loc)
    {
      /* Trim leading whitespaces.  */
      while (len > 0 && ISBLANK (*ns))
*************** public:
*** 670,685 ****
        if (!ISBLANK (ns[i]))
  	break;
  
!     /* Parse off any modifiers.  */
!     while (len > 0 && !ISALNUM (*ns))
!       {
! 	con += *(ns++);
! 	len--;
!       }
  
      name.assign (ns, len);
      if (numeric)
!       idx = strtol (name.c_str (), (char **)NULL, 10);
    }
  
    /* Adds a character to the end of the string.  */
--- 670,695 ----
        if (!ISBLANK (ns[i]))
  	break;
  
!     /* Only numeric values can have modifiers.  */
!     if (numeric)
!       /* Parse off any modifiers.  */
!       while (len > 0 && !ISALNUM (*ns))
! 	{
! 	  if (*ns != '=' && *ns != '+' && *ns != '%')
! 	    error_at (loc, "`%c` is not a valid operand modifier", *ns);
! 	  con += *(ns++);
! 	  len--;
! 	}
  
      name.assign (ns, len);
      if (numeric)
!       {
! 	char *endstr;
! 	/* There should only be a numeric value now... */
! 	idx = strtol (name.c_str (), &endstr, 10);
! 	if (*endstr != '\0')
! 	  error_at (loc, "operand number expected, found %s", name.c_str ());
!       }
    }
  
    /* Adds a character to the end of the string.  */
*************** parse_section_layout (file_location loc,
*** 832,838 ****
  	  *templ += len;
  	  if (val == ',')
  	    (*templ)++;
! 	  list.push_back (conlist (name_start, len, numeric));
  	}
      }
  }
--- 842,848 ----
  	  *templ += len;
  	  if (val == ',')
  	    (*templ)++;
! 	  list.push_back (conlist (name_start, len, numeric, loc));
  	}
      }
  }
*************** parse_section_layout (file_location loc,
*** 845,851 ****
  
  static void
  parse_section (const char **templ, unsigned int n_elems, unsigned int alt_no,
! 	       vec_conlist &list, file_location loc, const char *name)
  {
    unsigned int i;
  
--- 855,862 ----
  
  static void
  parse_section (const char **templ, unsigned int n_elems, unsigned int alt_no,
! 	       vec_conlist &list, file_location loc, const char *name,
! 	       const char *invalid_chars = NULL)
  {
    unsigned int i;
  
*************** parse_section (const char **templ, unsig
*** 856,861 ****
--- 867,876 ----
        {
  	if (**templ == 0 || **templ == '\n')
  	  fatal_at (loc, "missing ']'");
+ 	if (invalid_chars
+ 	    && strchr (invalid_chars, **templ))
+ 	  error_at (loc, "'%c' is not permitted in an alternative for a %s",
+ 		    **templ, name);
  	list[i].add (**templ);
  	if (**templ == ',')
  	  {
*************** convert_syntax (rtx x, file_location loc
*** 981,987 ****
  	  /* Parse the constraint list, then the attribute list.  */
  	  if (tconvec.size () > 0)
  	    parse_section (&templ, tconvec.size (), alt_no, tconvec, loc,
! 			   "constraint");
  
  	  if (attrvec.size () > 0)
  	    {
--- 996,1002 ----
  	  /* Parse the constraint list, then the attribute list.  */
  	  if (tconvec.size () > 0)
  	    parse_section (&templ, tconvec.size (), alt_no, tconvec, loc,
! 			   "constraint", "=+%");
  
  	  if (attrvec.size () > 0)
  	    {
diff -Nrcpad gcc-16-20250504/gcc/gimple-fold.cc gcc-16-20250511/gcc/gimple-fold.cc
*** gcc-16-20250504/gcc/gimple-fold.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/gimple-fold.cc	Sun May 11 22:32:10 2025
*************** replace_stmt_with_simplification (gimple
*** 6246,6259 ****
  					  false, NULL_TREE)))
  	gimple_cond_set_condition (cond_stmt, code, ops[0], ops[1]);
        else if (code == SSA_NAME)
! 	gimple_cond_set_condition (cond_stmt, NE_EXPR, ops[0],
! 				   build_zero_cst (TREE_TYPE (ops[0])));
        else if (code == INTEGER_CST)
  	{
  	  if (integer_zerop (ops[0]))
! 	    gimple_cond_make_false (cond_stmt);
  	  else
! 	    gimple_cond_make_true (cond_stmt);
  	}
        else if (!inplace)
  	{
--- 6246,6278 ----
  					  false, NULL_TREE)))
  	gimple_cond_set_condition (cond_stmt, code, ops[0], ops[1]);
        else if (code == SSA_NAME)
! 	{
! 	  /* If setting the gimple cond to the same thing,
! 	     return false as nothing changed.  */
! 	  if (gimple_cond_code (cond_stmt) == NE_EXPR
! 	      && operand_equal_p (gimple_cond_lhs (cond_stmt), ops[0])
! 	      && integer_zerop (gimple_cond_rhs (cond_stmt)))
! 	    return false;
! 	  gimple_cond_set_condition (cond_stmt, NE_EXPR, ops[0],
! 				     build_zero_cst (TREE_TYPE (ops[0])));
! 	}
        else if (code == INTEGER_CST)
  	{
+ 	  /* Make into the canonical form `1 != 0` and `0 != 0`.
+ 	     If already in the canonical form return false
+ 	     saying nothing has been done.  */
  	  if (integer_zerop (ops[0]))
! 	    {
! 	      if (gimple_cond_false_canonical_p (cond_stmt))
! 		return false;
! 	      gimple_cond_make_false (cond_stmt);
! 	    }
  	  else
! 	    {
! 	      if (gimple_cond_true_canonical_p (cond_stmt))
! 		return false;
! 	      gimple_cond_make_true (cond_stmt);
! 	    }
  	}
        else if (!inplace)
  	{
*************** fold_truth_andor_for_ifcombine (enum tre
*** 8334,8339 ****
--- 8353,8360 ----
  	ll_and_mask &= sign;
        if (l_xor)
  	{
+ 	  if (ll_bitsize != lr_bitsize)
+ 	    return 0;
  	  if (!lr_and_mask.get_precision ())
  	    lr_and_mask = sign;
  	  else
*************** fold_truth_andor_for_ifcombine (enum tre
*** 8355,8360 ****
--- 8376,8383 ----
  	rl_and_mask &= sign;
        if (r_xor)
  	{
+ 	  if (rl_bitsize != rr_bitsize)
+ 	    return 0;
  	  if (!rr_and_mask.get_precision ())
  	    rr_and_mask = sign;
  	  else
*************** fold_truth_andor_for_ifcombine (enum tre
*** 8762,8768 ****
        wide_int lr_mask, rr_mask;
        if (lr_and_mask.get_precision ())
  	lr_mask = wi::lshift (wide_int::from (lr_and_mask, rnprec, UNSIGNED),
! 			  xlr_bitpos);
        else
  	lr_mask = wi::shifted_mask (xlr_bitpos, lr_bitsize, false, rnprec);
        if (rr_and_mask.get_precision ())
--- 8785,8791 ----
        wide_int lr_mask, rr_mask;
        if (lr_and_mask.get_precision ())
  	lr_mask = wi::lshift (wide_int::from (lr_and_mask, rnprec, UNSIGNED),
! 			      xlr_bitpos);
        else
  	lr_mask = wi::shifted_mask (xlr_bitpos, lr_bitsize, false, rnprec);
        if (rr_and_mask.get_precision ())
*************** gimple_fold_indirect_ref (tree t)
*** 10569,10575 ****
     integer types involves undefined behavior on overflow and the
     operation can be expressed with unsigned arithmetic.  */
  
! bool
  arith_code_with_undefined_signed_overflow (tree_code code)
  {
    switch (code)
--- 10592,10598 ----
     integer types involves undefined behavior on overflow and the
     operation can be expressed with unsigned arithmetic.  */
  
! static bool
  arith_code_with_undefined_signed_overflow (tree_code code)
  {
    switch (code)
*************** arith_code_with_undefined_signed_overflo
*** 10586,10591 ****
--- 10609,10650 ----
      }
  }
  
+ /* Return true if STMT has an operation that operates on a signed
+    integer types involves undefined behavior on overflow and the
+    operation can be expressed with unsigned arithmetic.
+    Also returns true if STMT is a VCE that needs to be rewritten
+    if moved to be executed unconditionally.   */
+ 
+ bool
+ gimple_needing_rewrite_undefined (gimple *stmt)
+ {
+   if (!is_gimple_assign (stmt))
+     return false;
+   tree lhs = gimple_assign_lhs (stmt);
+   if (!lhs)
+     return false;
+   tree lhs_type = TREE_TYPE (lhs);
+   if (!INTEGRAL_TYPE_P (lhs_type)
+       && !POINTER_TYPE_P (lhs_type))
+     return false;
+   tree rhs = gimple_assign_rhs1 (stmt);
+   /* VCE from integral types to a integral types but with
+      a smaller precision need to be changed into casts
+      to be well defined. */
+   if (gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR
+       && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (rhs, 0)))
+       && is_gimple_val (TREE_OPERAND (rhs, 0))
+       && TYPE_PRECISION (lhs_type)
+ 	  < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (rhs, 0))))
+     return true;
+   if (!TYPE_OVERFLOW_UNDEFINED (lhs_type))
+     return false;
+   if (!arith_code_with_undefined_signed_overflow
+ 	(gimple_assign_rhs_code (stmt)))
+     return false;
+   return true;
+ }
+ 
  /* Rewrite STMT, an assignment with a signed integer or pointer arithmetic
     operation that can be transformed to unsigned arithmetic by converting
     its operand, carrying out the operation in the corresponding unsigned
*************** arith_code_with_undefined_signed_overflo
*** 10597,10615 ****
     contain a modified form of STMT itself.  */
  
  static gimple_seq
! rewrite_to_defined_overflow (gimple_stmt_iterator *gsi, gimple *stmt,
! 			     bool in_place)
  {
    if (dump_file && (dump_flags & TDF_DETAILS))
      {
!       fprintf (dump_file, "rewriting stmt with undefined signed "
! 	       "overflow ");
        print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
      }
! 
    tree lhs = gimple_assign_lhs (stmt);
    tree type = unsigned_type_for (TREE_TYPE (lhs));
-   gimple_seq stmts = NULL;
    if (gimple_assign_rhs_code (stmt) == ABS_EXPR)
      gimple_assign_set_rhs_code (stmt, ABSU_EXPR);
    else
--- 10656,10694 ----
     contain a modified form of STMT itself.  */
  
  static gimple_seq
! rewrite_to_defined_unconditional (gimple_stmt_iterator *gsi, gimple *stmt,
! 				  bool in_place)
  {
+   gcc_assert (gimple_needing_rewrite_undefined (stmt));
    if (dump_file && (dump_flags & TDF_DETAILS))
      {
!       fprintf (dump_file, "rewriting stmt for being uncondtional defined");
        print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
      }
!   gimple_seq stmts = NULL;
!   /* VCE from integral types to another integral types but with
!      smaller precisions need to be changed into casts
!      to be well defined. */
!   if (gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR)
!     {
!       tree rhs = gimple_assign_rhs1 (stmt);
!       tree new_rhs = TREE_OPERAND (rhs, 0);
!       gcc_assert (TYPE_PRECISION (TREE_TYPE (rhs))
! 		  < TYPE_PRECISION (TREE_TYPE (new_rhs)));
!       gcc_assert (is_gimple_val (new_rhs));
!       gimple_assign_set_rhs_code (stmt, NOP_EXPR);
!       gimple_assign_set_rhs1 (stmt, new_rhs);
!       if (in_place)
! 	  update_stmt (stmt);
!       else
! 	{
! 	  gimple_set_modified (stmt, true);
! 	  gimple_seq_add_stmt (&stmts, stmt);
! 	}
!       return stmts;
!     }
    tree lhs = gimple_assign_lhs (stmt);
    tree type = unsigned_type_for (TREE_TYPE (lhs));
    if (gimple_assign_rhs_code (stmt) == ABS_EXPR)
      gimple_assign_set_rhs_code (stmt, ABSU_EXPR);
    else
*************** rewrite_to_defined_overflow (gimple_stmt
*** 10644,10658 ****
  }
  
  void
! rewrite_to_defined_overflow (gimple_stmt_iterator *gsi)
  {
!   rewrite_to_defined_overflow (gsi, gsi_stmt (*gsi), true);
  }
  
  gimple_seq
! rewrite_to_defined_overflow (gimple *stmt)
  {
!   return rewrite_to_defined_overflow (nullptr, stmt, false);
  }
  
  /* The valueization hook we use for the gimple_build API simplification.
--- 10723,10737 ----
  }
  
  void
! rewrite_to_defined_unconditional (gimple_stmt_iterator *gsi)
  {
!   rewrite_to_defined_unconditional (gsi, gsi_stmt (*gsi), true);
  }
  
  gimple_seq
! rewrite_to_defined_unconditional (gimple *stmt)
  {
!   return rewrite_to_defined_unconditional (nullptr, stmt, false);
  }
  
  /* The valueization hook we use for the gimple_build API simplification.
diff -Nrcpad gcc-16-20250504/gcc/gimple-fold.h gcc-16-20250511/gcc/gimple-fold.h
*** gcc-16-20250504/gcc/gimple-fold.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/gimple-fold.h	Sun May 11 22:32:10 2025
*************** extern tree gimple_get_virt_method_for_v
*** 59,67 ****
  extern tree gimple_fold_indirect_ref (tree);
  extern bool gimple_fold_builtin_sprintf (gimple_stmt_iterator *);
  extern bool gimple_fold_builtin_snprintf (gimple_stmt_iterator *);
! extern bool arith_code_with_undefined_signed_overflow (tree_code);
! extern void rewrite_to_defined_overflow (gimple_stmt_iterator *);
! extern gimple_seq rewrite_to_defined_overflow (gimple *);
  extern void replace_call_with_value (gimple_stmt_iterator *, tree);
  extern tree tree_vec_extract (gimple_stmt_iterator *, tree, tree, tree, tree);
  extern void gsi_replace_with_seq_vops (gimple_stmt_iterator *, gimple_seq);
--- 59,67 ----
  extern tree gimple_fold_indirect_ref (tree);
  extern bool gimple_fold_builtin_sprintf (gimple_stmt_iterator *);
  extern bool gimple_fold_builtin_snprintf (gimple_stmt_iterator *);
! extern bool gimple_needing_rewrite_undefined (gimple *);
! extern void rewrite_to_defined_unconditional (gimple_stmt_iterator *);
! extern gimple_seq rewrite_to_defined_unconditional (gimple *);
  extern void replace_call_with_value (gimple_stmt_iterator *, tree);
  extern tree tree_vec_extract (gimple_stmt_iterator *, tree, tree, tree, tree);
  extern void gsi_replace_with_seq_vops (gimple_stmt_iterator *, gimple_seq);
diff -Nrcpad gcc-16-20250504/gcc/gimple.h gcc-16-20250511/gcc/gimple.h
*** gcc-16-20250504/gcc/gimple.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/gimple.h	Sun May 11 22:32:10 2025
*************** gimple_cond_true_p (const gcond *gs)
*** 3875,3880 ****
--- 3875,3895 ----
    return false;
  }
  
+ /* Check if conditional statement GS is in the caonical form of 'if (1 != 0)'. */
+ 
+ inline bool
+ gimple_cond_true_canonical_p (const gcond *gs)
+ {
+   tree lhs = gimple_cond_lhs (gs);
+   tree rhs = gimple_cond_rhs (gs);
+   tree_code code = gimple_cond_code (gs);
+   if (code == NE_EXPR
+       && lhs == boolean_true_node
+       && rhs == boolean_false_node)
+     return true;
+   return false;
+ }
+ 
  /* Check if conditional statement GS is of the form 'if (1 != 1)',
     'if (0 != 0)', 'if (1 == 0)' or 'if (0 == 1)' */
  
*************** gimple_cond_false_p (const gcond *gs)
*** 3900,3905 ****
--- 3915,3935 ----
    return false;
  }
  
+ /* Check if conditional statement GS is in the caonical form of 'if (0 != 0)'. */
+ 
+ inline bool
+ gimple_cond_false_canonical_p (const gcond *gs)
+ {
+   tree lhs = gimple_cond_lhs (gs);
+   tree rhs = gimple_cond_rhs (gs);
+   tree_code code = gimple_cond_code (gs);
+   if (code == NE_EXPR
+       && lhs == boolean_false_node
+       && rhs == boolean_false_node)
+     return true;
+   return false;
+ }
+ 
  /* Set the code, LHS and RHS of GIMPLE_COND STMT from CODE, LHS and RHS.  */
  
  inline void
diff -Nrcpad gcc-16-20250504/gcc/ipa-cp.cc gcc-16-20250511/gcc/ipa-cp.cc
*** gcc-16-20250504/gcc/ipa-cp.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/ipa-cp.cc	Sun May 11 22:32:10 2025
*************** ipcp_store_vr_results (void)
*** 6362,6367 ****
--- 6362,6372 ----
  						     TYPE_PRECISION (type),
  						     TYPE_SIGN (type)));
  		  tmp.update_bitmask (bm);
+ 		  // Reflecting the bitmask on the ranges can sometime
+ 		  // produce an UNDEFINED value if the the bitmask update
+ 		  // was previously deferred.  See PR 120048.
+ 		  if (tmp.undefined_p ())
+ 		    tmp.set_varying (type);
  		  ipa_vr vr (tmp);
  		  ts->m_vr->quick_push (vr);
  		}
*************** ipcp_store_vr_results (void)
*** 6383,6388 ****
--- 6388,6398 ----
  						 TYPE_PRECISION (type),
  						 TYPE_SIGN (type)));
  	      tmp.update_bitmask (bm);
+ 	      // Reflecting the bitmask on the ranges can sometime
+ 	      // produce an UNDEFINED value if the the bitmask update
+ 	      // was previously deferred.  See PR 120048.
+ 	      if (tmp.undefined_p ())
+ 		tmp.set_varying (type);
  	      ipa_vr vr (tmp);
  	      ts->m_vr->quick_push (vr);
  	    }
diff -Nrcpad gcc-16-20250504/gcc/ipa-inline-transform.cc gcc-16-20250511/gcc/ipa-inline-transform.cc
*** gcc-16-20250504/gcc/ipa-inline-transform.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/ipa-inline-transform.cc	Sun May 11 22:32:10 2025
*************** clone_inlined_nodes (struct cgraph_edge
*** 225,231 ****
  				       e->count,
  				       update_original, vNULL, true,
  				       inlining_into,
! 				       NULL);
  	  n->used_as_abstract_origin = e->callee->used_as_abstract_origin;
  	  e->redirect_callee (n);
  	}
--- 225,231 ----
  				       e->count,
  				       update_original, vNULL, true,
  				       inlining_into,
! 				       NULL, NULL);
  	  n->used_as_abstract_origin = e->callee->used_as_abstract_origin;
  	  e->redirect_callee (n);
  	}
diff -Nrcpad gcc-16-20250504/gcc/ipa-inline.cc gcc-16-20250511/gcc/ipa-inline.cc
*** gcc-16-20250504/gcc/ipa-inline.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/ipa-inline.cc	Sun May 11 22:32:10 2025
*************** recursive_inlining (struct cgraph_edge *
*** 1865,1871 ****
  	{
  	  /* We need original clone to copy around.  */
  	  master_clone = node->create_clone (node->decl, node->count,
! 	    false, vNULL, true, NULL, NULL);
  	  for (e = master_clone->callees; e; e = e->next_callee)
  	    if (!e->inline_failed)
  	      clone_inlined_nodes (e, true, false, NULL);
--- 1865,1871 ----
  	{
  	  /* We need original clone to copy around.  */
  	  master_clone = node->create_clone (node->decl, node->count,
! 	    false, vNULL, true, NULL, NULL, NULL);
  	  for (e = master_clone->callees; e; e = e->next_callee)
  	    if (!e->inline_failed)
  	      clone_inlined_nodes (e, true, false, NULL);
diff -Nrcpad gcc-16-20250504/gcc/json.cc gcc-16-20250511/gcc/json.cc
*** gcc-16-20250504/gcc/json.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/json.cc	Sun May 11 22:32:10 2025
*************** print_escaped_json_string (pretty_printe
*** 74,79 ****
--- 74,125 ----
    pp_character (pp, '"');
  }
  
+ /* class pointer::token.  */
+ 
+ pointer::token::token ()
+ {
+   m_parent = nullptr;
+   m_data.u_member = nullptr;
+   m_kind = kind::root_value;
+ }
+ 
+ pointer::token::token (json::object &parent, const char *member)
+ {
+   m_parent = &parent;
+   m_data.u_member = xstrdup (member); // ideally we'd share
+   m_kind = kind::object_member;
+ }
+ 
+ pointer::token::token (json::array &parent, size_t index)
+ {
+   m_parent = &parent;
+   m_data.u_index = index;
+   m_kind = kind::array_index;
+ }
+ 
+ pointer::token::~token ()
+ {
+   if (m_kind == kind::object_member)
+     {
+       gcc_assert (m_data.u_member);
+       free (m_data.u_member);
+     }
+ }
+ 
+ pointer::token &
+ pointer::token::operator= (pointer::token &&other)
+ {
+   m_parent = other.m_parent;
+   m_data = other.m_data;
+   m_kind = other.m_kind;
+ 
+   other.m_parent = nullptr;
+   other.m_data.u_member = nullptr;
+   other.m_kind = kind::root_value;
+ 
+   return *this;
+ }
+ 
  /* class json::value.  */
  
  /* Dump this json::value tree to OUTF.
*************** value::dump () const
*** 100,105 ****
--- 146,239 ----
    fprintf (stderr, "\n");
  }
  
+ /* A deterministic total ordering for comparing json values, so that we
+    can e.g. put them in std::map.
+ 
+    This is intended to follow the condition for equality described in
+    the JSON Schema standard (§4.3, “Instance equality”), as referenced
+    by SARIF v2.1.0 (§3.7.3 "Array properties with unique values"), but has
+    the following limitations:
+    - numbers are supposed to be checked for "the same mathematical value",
+    but in this implementation int vs float numbers won't compare as equal,
+    and float number comparison is bitwise
+    - strings are supposed to be "the same codepoint-for-codepoint", but
+    this implementation doesn't take into account canonicalization issues.  */
+ 
+ int
+ value::compare (const value &val_a, const value &val_b)
+ {
+   enum kind kind_a = val_a.get_kind ();
+   enum kind kind_b = val_b.get_kind ();
+   if (kind_a != kind_b)
+     return (int)kind_a - (int)kind_b;
+ 
+   switch (kind_a)
+     {
+     default:
+       gcc_unreachable ();
+ 
+     case JSON_OBJECT:
+       {
+ 	const object &obj_a = (const object &)val_a;
+ 	const object &obj_b = (const object &)val_b;
+ 	return object::compare (obj_a, obj_b);
+       }
+       break;
+ 
+     case JSON_ARRAY:
+       {
+ 	const array &arr_a = (const array &)val_a;
+ 	const array &arr_b = (const array &)val_b;
+ 	if (int cmp_size = (int)arr_a.size () - (int)arr_b.size ())
+ 	  return cmp_size;
+ 	for (size_t idx = 0; idx < arr_a.size (); ++idx)
+ 	  if (int cmp_element = compare (*arr_a[idx], *arr_b[idx]))
+ 	    return cmp_element;
+ 	return 0;
+       }
+       break;
+ 
+     case JSON_INTEGER:
+       {
+ 	const integer_number &int_a = (const integer_number &)val_a;
+ 	const integer_number &int_b = (const integer_number &)val_b;
+ 	return int_a.get () - int_b.get ();
+       }
+       break;
+ 
+     case JSON_FLOAT:
+       {
+ 	const float_number &float_a = (const float_number &)val_a;
+ 	const float_number &float_b = (const float_number &)val_b;
+ 	union u
+ 	{
+ 	  double u_double;
+ 	  char u_buf[sizeof(double)];
+ 	};
+ 	union u u_a, u_b;
+ 	u_a.u_double = float_a.get ();
+ 	u_b.u_double = float_b.get ();
+ 	return memcmp (&u_a, &u_b, sizeof(double));
+       }
+       break;
+ 
+     case JSON_STRING:
+       {
+ 	const string &str_a = (const string &)val_a;
+ 	const string &str_b = (const string &)val_b;
+ 	return strcmp (str_a.get_string (), str_b.get_string ());
+       }
+       break;
+ 
+     case JSON_TRUE:
+     case JSON_FALSE:
+     case JSON_NULL:
+       /* All instances of literals compare equal to instances
+ 	 of the same literal.  */
+       return 0;
+     }
+ }
+ 
  /* class json::object, a subclass of json::value, representing
     an ordered collection of key/value pairs.  */
  
*************** object::set (const char *key, value *v)
*** 180,185 ****
--- 314,321 ----
        m_map.put (owned_key, v);
        m_keys.safe_push (owned_key);
      }
+ 
+   v->m_pointer_token = pointer::token (*this, key);
  }
  
  /* Get the json::value * for KEY.
*************** object::set_bool (const char *key, bool
*** 234,239 ****
--- 370,405 ----
    set (key, new json::literal (v));
  }
  
+ /* Subroutine of json::compare for comparing a pairs of objects.  */
+ 
+ int
+ object::compare (const json::object &obj_a, const json::object &obj_b)
+ {
+   if (int cmp_size = (int)obj_a.m_keys.length () - (int)obj_b.m_keys.length ())
+     return cmp_size;
+ 
+   for (auto iter_a : obj_a.m_map)
+     {
+       const char *key = iter_a.first;
+       const value *value_a = iter_a.second;
+       gcc_assert (value_a);
+ 
+       const value *value_b = obj_b.get (key);
+       if (!value_b)
+ 	/* Key is in OBJ_A but not in OBJ_B.  */
+ 	return 1;
+       /* If key is OBJ_B but not in OBJ_A, then the
+ 	 count of keys will have been different, or
+ 	 OBJ_A would have had a key not in OBJ_B.  */
+       if (int cmp_value = value::compare (*value_a, *value_b))
+ 	/* Values for key are non-equal.  */
+ 	return cmp_value;
+     }
+ 
+   /* Objects are equal.  */
+   return 0;
+ }
+ 
  /* class json::array, a subclass of json::value, representing
     an ordered collection of values.  */
  
*************** void
*** 283,288 ****
--- 449,455 ----
  array::append (value *v)
  {
    gcc_assert (v);
+   v->m_pointer_token = pointer::token (*this, m_elements.length ());
    m_elements.safe_push (v);
  }
  
*************** test_formatting ()
*** 540,545 ****
--- 707,919 ----
  		    " \"int\": 1776}, \"int\": 42}"));
  }
  
+ /* Helper function for reporting failure of JSON comparisons.  */
+ 
+ static void
+ fail_comparison (const location &loc,
+ 		 const char *desc,
+ 		 const value &val_a, const value &val_b,
+ 		 const char *desc_expected_value,
+ 		 int actual_value)
+ {
+   fprintf (stderr, "val_a: ");
+   val_a.dump ();
+ 
+   fprintf (stderr, "val_b: ");
+   val_b.dump ();
+ 
+   selftest::fail_formatted (loc,
+ 			    "%s: failed JSON comparison:"
+ 			    " expected: %s got: %i\n",
+ 			    desc,
+ 			    desc_expected_value, actual_value);
+ }
+ 
+ /* Implementation of ASSERT_JSON_EQ.  */
+ 
+ static void
+ assert_json_equal (const location &loc,
+ 		   const char *desc,
+ 		   const value &val_a, const value &val_b)
+ {
+   /* Comparison should return zero, both ways, indicating no differences.  */
+   const int a_vs_b = value::compare (val_a, val_b);
+   if (a_vs_b != 0)
+     fail_comparison (loc, desc, val_a, val_b, "zero", a_vs_b);
+ 
+   const int b_vs_a = value::compare (val_b, val_a);
+   if (b_vs_a != 0)
+     fail_comparison (loc, desc, val_b, val_a, "zero", b_vs_a);
+ }
+ 
+ /* Verify that json::value::compare returns 0 ("no differences") on
+    VAL1 and VAL2, in both orders.  */
+ 
+ #define ASSERT_JSON_EQ(VAL1, VAL2) \
+   SELFTEST_BEGIN_STMT						\
+     assert_json_equal ((SELFTEST_LOCATION),			\
+ 		       "ASSERT_JSON_EQ",			\
+ 		       (VAL1), (VAL2));			\
+   SELFTEST_END_STMT
+ 
+ /* Implementation of ASSERT_JSON_NE.  */
+ 
+ static void
+ assert_json_non_equal (const location &loc,
+ 		       const char *desc,
+ 		       const value &val_a, const value &val_b)
+ {
+   /* Comparison should be non-zero, indicating differences.  */
+   const int a_vs_b = value::compare (val_a, val_b);
+   if (a_vs_b == 0)
+     fail_comparison (loc, desc, val_a, val_b, "non-zero", a_vs_b);
+ 
+   const int b_vs_a = value::compare (val_b, val_a);
+   ASSERT_NE_AT (loc, b_vs_a, 0);
+   if (b_vs_a == 0)
+     fail_comparison (loc, desc, val_b, val_a, "non-zero", b_vs_a);
+ 
+   /* Swapping the args should swap the sign of the result
+      (but isn't necessarily the negation).  */
+   if ( (a_vs_b > 0) == (b_vs_a > 0) )
+     fail_comparison (loc, desc, val_b, val_a, "opposite signs", 1);
+ }
+ 
+ /* Verify that json::value::compare returns non-zero ("different") on
+    VAL1 and VAL2, in both orders, and that they have opposite
+    sign.  */
+ 
+ #define ASSERT_JSON_NE(VAL1, VAL2) \
+   SELFTEST_BEGIN_STMT						\
+     assert_json_non_equal ((SELFTEST_LOCATION),		\
+ 			   "ASSERT_JSON_NE",			\
+ 			   (VAL1), (VAL2));			\
+   SELFTEST_END_STMT
+ 
+ /* Verify that json::value::compare works as expected.  */
+ 
+ static void
+ test_comparisons ()
+ {
+   /* Literals.  */
+ 
+   literal null_lit (JSON_NULL);
+   ASSERT_JSON_EQ (null_lit, null_lit);
+ 
+   literal other_null_lit (JSON_NULL);
+   ASSERT_JSON_EQ (null_lit, other_null_lit);
+ 
+   literal true_lit (JSON_TRUE);
+   ASSERT_JSON_EQ (true_lit, true_lit);
+   ASSERT_JSON_NE (true_lit, null_lit);
+ 
+   literal false_lit (JSON_FALSE);
+   ASSERT_JSON_EQ (false_lit, false_lit);
+   ASSERT_JSON_NE (false_lit, true_lit);
+   ASSERT_JSON_NE (false_lit, null_lit);
+ 
+   /* Strings.  */
+   string str_foo_1 ("foo");
+   ASSERT_JSON_EQ (str_foo_1, str_foo_1);
+ 
+   string str_foo_2 ("foo");
+   ASSERT_JSON_EQ (str_foo_1, str_foo_2);
+ 
+   string str_bar ("bar");
+   ASSERT_JSON_NE (str_bar, str_foo_1);
+ 
+   /* Numbers.  */
+   integer_number i_42 (42);
+   ASSERT_JSON_EQ (i_42, i_42);
+   integer_number i_42_2 (42);
+   ASSERT_JSON_EQ (i_42, i_42_2);
+   integer_number i_43 (43);
+   ASSERT_JSON_NE (i_42, i_43);
+ 
+   float_number f_zero (0.0);
+   ASSERT_JSON_EQ (f_zero, f_zero);
+   float_number f_zero_2 (0.0);
+   ASSERT_JSON_EQ (f_zero, f_zero_2);
+   float_number f_one (1.0);
+   ASSERT_JSON_NE (f_zero, f_one);
+   /* We don't yet test the more awkward cases e.g. NaN.  */
+ 
+   /* Objects.  */
+ 
+   // Empty object
+   // Self comparison should be 0
+   object empty_obj_a;
+   ASSERT_JSON_EQ (empty_obj_a, empty_obj_a);
+ 
+   // Instances of empty objects should compare equal to each other
+   object empty_obj_b;
+   ASSERT_JSON_EQ (empty_obj_a, empty_obj_b);
+ 
+   // Object with one field:
+   object obj_1;
+   obj_1.set_string ("foo", "bar");
+   // Self comparison should be 0
+   ASSERT_JSON_EQ (obj_1, obj_1);
+ 
+   // but should be different to an empty object:
+   ASSERT_JSON_NE (obj_1, empty_obj_a);
+ 
+   // Another with one field, with same key/value:
+   object obj_2;
+   obj_2.set_string ("foo", "bar");
+   ASSERT_JSON_EQ (obj_1, obj_2);
+ 
+   // Same key, different value:
+   object obj_3;
+   obj_3.set_string ("foo", "baz");
+   ASSERT_JSON_NE (obj_1, obj_3);
+ 
+   // Adding an extra property:
+   obj_2.set_integer ("year", 1066);
+   ASSERT_JSON_NE (obj_1, obj_2);
+ 
+   /* Different insertion order, but same k-v pairs should be equal,
+      despite having different serialization.  */
+   object obj_4;
+   obj_4.set_integer ("year", 1066);
+   obj_4.set_string ("foo", "bar");
+   ASSERT_JSON_EQ (obj_2, obj_4);
+   ASSERT_PRINT_EQ (obj_2, false, "{\"foo\": \"bar\", \"year\": 1066}");
+   ASSERT_PRINT_EQ (obj_4, false, "{\"year\": 1066, \"foo\": \"bar\"}");
+ 
+   /* Arrays.  */
+ 
+   // Empty array
+   array empty_arr_a;
+   // Self comparison should be 0
+   ASSERT_JSON_EQ (empty_arr_a, empty_arr_a);
+ 
+   // Objects and arrays are different
+   ASSERT_JSON_NE (empty_obj_a, empty_arr_a);
+ 
+   // Instances of empty arrays should compare equal to each other
+   array empty_arr_b;
+   ASSERT_JSON_EQ (empty_arr_a, empty_arr_b);
+ 
+   // Array with one element:
+   array arr_1;
+   arr_1.append (std::make_unique<string> ("foo"));
+   // Self comparison should be 0
+   ASSERT_JSON_EQ (arr_1, arr_1);
+ 
+   // but should be different to an empty array:
+   ASSERT_JSON_NE (arr_1, empty_arr_a);
+ 
+   // Another with one element:
+   array arr_2;
+   arr_2.append (std::make_unique<string> ("foo"));
+   ASSERT_JSON_EQ (arr_1, arr_2);
+ 
+   // Adding an extra element:
+   arr_2.append (std::make_unique<string> ("bar"));
+   ASSERT_JSON_NE (arr_1, arr_2);
+ }
+ 
  /* Run all of the selftests within this file.  */
  
  void
*************** json_cc_tests ()
*** 553,558 ****
--- 927,933 ----
    test_writing_strings ();
    test_writing_literals ();
    test_formatting ();
+   test_comparisons ();
  }
  
  } // namespace selftest
diff -Nrcpad gcc-16-20250504/gcc/json.h gcc-16-20250511/gcc/json.h
*** gcc-16-20250504/gcc/json.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/json.h	Sun May 11 22:32:10 2025
*************** enum kind
*** 73,78 ****
--- 73,121 ----
    JSON_NULL
  };
  
+ namespace pointer { // json::pointer
+ 
+ /* Implementation of JSON pointer (RFC 6901).  */
+ 
+ /* A token within a JSON pointer, expressing the parent of a particular
+    JSON value, and how it is descended from that parent.
+ 
+    A JSON pointer can be built as a list of these tokens.  */
+ 
+ struct token
+ {
+   enum class kind
+   {
+     root_value,
+     object_member,
+     array_index
+   };
+ 
+   token ();
+   token (json::object &parent, const char *member);
+   token (json::array &parent, size_t index);
+   token (const token &other) = delete;
+   token (token &&other) = delete;
+ 
+   ~token ();
+ 
+   token &
+   operator= (const token &other) = delete;
+ 
+   token &
+   operator= (token &&other);
+ 
+   json::value *m_parent;
+   union u
+   {
+     char *u_member;
+     size_t u_index;
+   } m_data;
+   enum kind m_kind;
+ };
+ 
+ } // namespace json::pointer
+ 
  /* Base class of JSON value.  */
  
  class value
*************** class value
*** 84,89 ****
--- 127,140 ----
  
    void dump (FILE *, bool formatted) const;
    void DEBUG_FUNCTION dump () const;
+ 
+   virtual object *dyn_cast_object () { return nullptr; }
+ 
+   static int compare (const json::value &val_a, const json::value &val_b);
+ 
+   const pointer::token &get_pointer_token () const { return m_pointer_token; }
+ 
+   pointer::token m_pointer_token;
  };
  
  /* Subclass of value for objects: a collection of key/value pairs
*************** class object : public value
*** 100,105 ****
--- 151,158 ----
    enum kind get_kind () const final override { return JSON_OBJECT; }
    void print (pretty_printer *pp, bool formatted) const final override;
  
+   object *dyn_cast_object () final override { return this; }
+ 
    bool is_empty () const { return m_map.is_empty (); }
  
    void set (const char *key, value *v);
*************** class object : public value
*** 127,132 ****
--- 180,187 ----
    /* Set to literal true/false.  */
    void set_bool (const char *key, bool v);
  
+   static int compare (const json::object &obj_a, const json::object &obj_b);
+ 
   private:
    typedef hash_map <char *, value *,
      simple_hashmap_traits<nofree_string_hash, value *> > map_t;
diff -Nrcpad gcc-16-20250504/gcc/lazy-diagnostic-path.cc gcc-16-20250511/gcc/lazy-diagnostic-path.cc
*** gcc-16-20250504/gcc/lazy-diagnostic-path.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/lazy-diagnostic-path.cc	Sun May 11 22:32:10 2025
*************** class test_lazy_path : public lazy_diagn
*** 91,97 ****
  {
  public:
    test_lazy_path (pretty_printer &pp)
!   : m_pp (pp)
    {
    }
    std::unique_ptr<diagnostic_path> make_inner_path () const final override
--- 91,98 ----
  {
  public:
    test_lazy_path (pretty_printer &pp)
!   : lazy_diagnostic_path (m_logical_loc_mgr),
!     m_pp (pp)
    {
    }
    std::unique_ptr<diagnostic_path> make_inner_path () const final override
*************** public:
*** 99,110 ****
      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_pp);
      path->add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "first %qs", "free");
      path->add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "double %qs", "free");
      return path;
    }
  private:
    pretty_printer &m_pp;
  };
  
--- 100,114 ----
      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,
! 						  &m_pp);
      path->add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "first %qs", "free");
      path->add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "double %qs", "free");
      return path;
    }
  private:
+   const tree_logical_location_manager m_logical_loc_mgr;
    pretty_printer &m_pp;
  };
  
diff -Nrcpad gcc-16-20250504/gcc/lazy-diagnostic-path.h gcc-16-20250511/gcc/lazy-diagnostic-path.h
*** gcc-16-20250504/gcc/lazy-diagnostic-path.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/lazy-diagnostic-path.h	Sun May 11 22:32:10 2025
*************** class lazy_diagnostic_path : public diag
*** 48,53 ****
--- 48,59 ----
  
    bool generated_p () const { return m_inner_path != nullptr; }
  
+ protected:
+   lazy_diagnostic_path (const logical_location_manager &logical_loc_mgr)
+   : diagnostic_path (logical_loc_mgr)
+   {
+   }
+ 
   private:
    void lazily_generate_path () const;
    virtual std::unique_ptr<diagnostic_path> make_inner_path () const = 0;
diff -Nrcpad gcc-16-20250504/gcc/libgdiagnostics++.h gcc-16-20250511/gcc/libgdiagnostics++.h
*** gcc-16-20250504/gcc/libgdiagnostics++.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/libgdiagnostics++.h	Sun May 11 22:32:10 2025
*************** public:
*** 109,114 ****
--- 109,133 ----
    : m_inner (logical_loc)
    {}
  
+   operator bool() { return m_inner != nullptr; }
+ 
+   // Various accessors
+   enum diagnostic_logical_location_kind_t get_kind () const;
+   logical_location get_parent () const;
+   const char *get_short_name () const;
+   const char *get_fully_qualified_name () const;
+   const char *get_decorated_name () const;
+ 
+   bool operator== (const logical_location &other) const
+   {
+     return m_inner == other.m_inner;
+   }
+ 
+   bool operator!= (const logical_location &other) const
+   {
+     return m_inner != other.m_inner;
+   }
+ 
    const diagnostic_logical_location *m_inner;
  };
  
*************** physical_location::get_file () const
*** 385,390 ****
--- 404,454 ----
    return file (diagnostic_physical_location_get_file (m_inner));
  }
  
+ // class logical_location
+ 
+ inline enum diagnostic_logical_location_kind_t
+ logical_location::get_kind () const
+ {
+   // m_inner must be non-null
+   return diagnostic_logical_location_get_kind (m_inner);
+ }
+ 
+ inline logical_location
+ logical_location::get_parent () const
+ {
+   if (m_inner)
+     return diagnostic_logical_location_get_parent (m_inner);
+   else
+     return nullptr;
+ }
+ 
+ inline const char *
+ logical_location::get_short_name () const
+ {
+   if (m_inner)
+     return diagnostic_logical_location_get_short_name (m_inner);
+   else
+     return nullptr;
+ }
+ 
+ inline const char *
+ logical_location::get_fully_qualified_name () const
+ {
+   if (m_inner)
+     return diagnostic_logical_location_get_fully_qualified_name (m_inner);
+   else
+     return nullptr;
+ }
+ 
+ inline const char *
+ logical_location::get_decorated_name () const
+ {
+   if (m_inner)
+     return diagnostic_logical_location_get_decorated_name (m_inner);
+   else
+     return nullptr;
+ }
+ 
  // class execution_path
  
  inline diagnostic_event_id
diff -Nrcpad gcc-16-20250504/gcc/libgdiagnostics.cc gcc-16-20250511/gcc/libgdiagnostics.cc
*** gcc-16-20250504/gcc/libgdiagnostics.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/libgdiagnostics.cc	Sun May 11 22:32:10 2025
*************** as_location_t (const diagnostic_physical
*** 162,168 ****
  
  /* This has to be a "struct" as it is exposed in the C API.  */
  
! struct diagnostic_logical_location : public logical_location
  {
    diagnostic_logical_location (enum diagnostic_logical_location_kind_t kind,
  			       const diagnostic_logical_location *parent,
--- 162,168 ----
  
  /* This has to be a "struct" as it is exposed in the C API.  */
  
! struct diagnostic_logical_location
  {
    diagnostic_logical_location (enum diagnostic_logical_location_kind_t kind,
  			       const diagnostic_logical_location *parent,
*************** struct diagnostic_logical_location : pub
*** 177,231 ****
    {
    }
  
-   const char *get_short_name () const final override
-   {
-     return m_short_name.get_str ();
-   }
-   const char *get_name_with_scope () const final override
-   {
-     return m_fully_qualified_name.get_str ();
-   }
-   const char *get_internal_name () const final override
-   {
-     return m_decorated_name.get_str ();
-   }
-   enum logical_location_kind get_kind () const final override
-   {
-     switch (m_kind)
-       {
-       default:
- 	gcc_unreachable ();
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION:
- 	return LOGICAL_LOCATION_KIND_FUNCTION;
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_MEMBER:
- 	return LOGICAL_LOCATION_KIND_MEMBER;
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_MODULE:
- 	return LOGICAL_LOCATION_KIND_MODULE;
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_NAMESPACE:
- 	return LOGICAL_LOCATION_KIND_NAMESPACE;
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_TYPE:
- 	return LOGICAL_LOCATION_KIND_TYPE;
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_RETURN_TYPE:
- 	return LOGICAL_LOCATION_KIND_RETURN_TYPE;
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_PARAMETER:
- 	return LOGICAL_LOCATION_KIND_PARAMETER;
-       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE:
- 	return LOGICAL_LOCATION_KIND_VARIABLE;
-       }
-   }
- 
-   enum diagnostic_logical_location_kind_t get_external_kind () const
-   {
-     return m_kind;
-   }
- 
-   const diagnostic_logical_location *get_parent () const { return m_parent; }
- 
-   label_text get_name_for_path_output () const
-   {
-     return label_text::borrow (m_short_name.get_str ());
-   }
- 
    bool
    operator< (const diagnostic_logical_location &other) const
    {
--- 177,182 ----
*************** struct diagnostic_logical_location : pub
*** 243,249 ****
      return false;
    }
  
- private:
    enum diagnostic_logical_location_kind_t m_kind;
    const diagnostic_logical_location *m_parent;
    owned_nullable_string m_short_name;
--- 194,199 ----
*************** round_alloc_size (size_t s)
*** 308,313 ****
--- 258,369 ----
    return s;
  }
  
+ class impl_logical_location_manager : public logical_location_manager
+ {
+ public:
+   static const diagnostic_logical_location *
+   ptr_from_key (logical_location k)
+   {
+     return k.cast_to<const diagnostic_logical_location *> ();
+   }
+ 
+   static logical_location
+   key_from_ptr (const diagnostic_logical_location *ptr)
+   {
+     return logical_location::from_ptr (ptr);
+   }
+ 
+   const char *get_short_name (key k) const final override
+   {
+     if (auto loc = ptr_from_key (k))
+       return loc->m_short_name.get_str ();
+     else
+       return nullptr;
+   }
+ 
+   const char *get_name_with_scope (key k) const final override
+   {
+     if (auto loc = ptr_from_key (k))
+       return loc->m_fully_qualified_name.get_str ();
+     else
+       return nullptr;
+   }
+ 
+   const char *get_internal_name (key k) const final override
+   {
+     if (auto loc = ptr_from_key (k))
+       return loc->m_decorated_name.get_str ();
+     else
+       return nullptr;
+   }
+ 
+   enum logical_location_kind get_kind (key k) const final override
+   {
+     auto loc = ptr_from_key (k);
+     gcc_assert (loc);
+     switch (loc->m_kind)
+       {
+       default:
+ 	gcc_unreachable ();
+ 
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION:
+ 	return LOGICAL_LOCATION_KIND_FUNCTION;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_MEMBER:
+ 	return LOGICAL_LOCATION_KIND_MEMBER;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_MODULE:
+ 	return LOGICAL_LOCATION_KIND_MODULE;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_NAMESPACE:
+ 	return LOGICAL_LOCATION_KIND_NAMESPACE;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_TYPE:
+ 	return LOGICAL_LOCATION_KIND_TYPE;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_RETURN_TYPE:
+ 	return LOGICAL_LOCATION_KIND_RETURN_TYPE;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_PARAMETER:
+ 	return LOGICAL_LOCATION_KIND_PARAMETER;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE:
+ 	return LOGICAL_LOCATION_KIND_VARIABLE;
+ 
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_ELEMENT:
+ 	return LOGICAL_LOCATION_KIND_ELEMENT;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_ATTRIBUTE:
+ 	return LOGICAL_LOCATION_KIND_ATTRIBUTE;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_TEXT:
+ 	return LOGICAL_LOCATION_KIND_TEXT;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_COMMENT:
+ 	return LOGICAL_LOCATION_KIND_COMMENT;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION:
+ 	return LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_DTD:
+ 	return LOGICAL_LOCATION_KIND_DTD;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_DECLARATION:
+ 	return LOGICAL_LOCATION_KIND_DECLARATION;
+ 
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT:
+ 	  return LOGICAL_LOCATION_KIND_OBJECT;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY:
+ 	return LOGICAL_LOCATION_KIND_ARRAY;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY:
+ 	return LOGICAL_LOCATION_KIND_PROPERTY;
+       case DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE:
+ 	return LOGICAL_LOCATION_KIND_VALUE;
+       }
+   }
+ 
+   label_text get_name_for_path_output (key k) const final override
+   {
+     auto loc = ptr_from_key (k);
+     gcc_assert (loc);
+     return label_text::borrow (loc->m_short_name.get_str ());
+   }
+ 
+   key get_parent (key k) const final override
+   {
+     auto loc = ptr_from_key (k);
+     gcc_assert (loc);
+     return key_from_ptr (loc->m_parent);
+   }
+ };
+ 
  class impl_diagnostic_client_data_hooks : public diagnostic_client_data_hooks
  {
  public:
*************** public:
*** 316,322 ****
    {}
  
    const client_version_info *get_any_version_info () const final override;
!   const logical_location *get_current_logical_location () const final override;
    const char * maybe_get_sarif_source_language (const char *filename)
      const final override;
    void add_sarif_invocation_properties (sarif_object &invocation_obj)
--- 372,385 ----
    {}
  
    const client_version_info *get_any_version_info () const final override;
! 
!   const logical_location_manager *
!   get_logical_location_manager () const final override
!   {
!     return &m_logical_location_manager;
!   }
!   logical_location get_current_logical_location () const final override;
! 
    const char * maybe_get_sarif_source_language (const char *filename)
      const final override;
    void add_sarif_invocation_properties (sarif_object &invocation_obj)
*************** public:
*** 324,329 ****
--- 387,393 ----
  
  private:
    diagnostic_manager &m_mgr;
+   impl_logical_location_manager m_logical_location_manager;
  };
  
  class impl_client_version_info : public client_version_info
*************** public:
*** 424,429 ****
--- 488,501 ----
    line_maps *get_line_table () { return &m_line_table; }
    diagnostic_context &get_dc () { return m_dc; }
  
+   const logical_location_manager &
+   get_logical_location_manager () const
+   {
+     auto mgr = m_dc.get_logical_location_manager ();
+     gcc_assert (mgr);
+     return *mgr;
+   }
+ 
    void write_patch (FILE *dst_stream);
  
    void add_sink (std::unique_ptr<sink> sink)
*************** public:
*** 706,714 ****
        pp_string (&pp, m_desc_uncolored.get ());
    }
  
!   const logical_location *get_logical_location () const
    {
!     return m_logical_loc;
    }
  
    meaning get_meaning () const final override
--- 778,786 ----
        pp_string (&pp, m_desc_uncolored.get ());
    }
  
!   logical_location get_logical_location () const final override
    {
!     return impl_logical_location_manager::key_from_ptr (m_logical_loc);
    }
  
    meaning get_meaning () const final override
*************** private:
*** 772,779 ****
  
  struct diagnostic_execution_path : public diagnostic_path
  {
!   diagnostic_execution_path ()
!   : m_thread ("")
    {
    }
  
--- 844,852 ----
  
  struct diagnostic_execution_path : public diagnostic_path
  {
!   diagnostic_execution_path (const logical_location_manager &logical_loc_mgr)
!   : diagnostic_path (logical_loc_mgr),
!     m_thread ("")
    {
    }
  
*************** struct diagnostic_execution_path : publi
*** 814,822 ****
    same_function_p (int event_idx_a,
  		   int event_idx_b) const final override
    {
!     const logical_location *logical_loc_a
        = m_events[event_idx_a]->get_logical_location ();
!     const logical_location *logical_loc_b
        = m_events[event_idx_b]->get_logical_location ();
  
      /* Pointer equality, as we uniqify logical location instances.  */
--- 887,895 ----
    same_function_p (int event_idx_a,
  		   int event_idx_b) const final override
    {
!     logical_location logical_loc_a
        = m_events[event_idx_a]->get_logical_location ();
!     logical_location logical_loc_b
        = m_events[event_idx_b]->get_logical_location ();
  
      /* Pointer equality, as we uniqify logical location instances.  */
*************** public:
*** 902,908 ****
    diagnostic_execution_path *
    add_execution_path ()
    {
!     m_path = std::make_unique<diagnostic_execution_path> ();
      m_rich_loc.set_path (m_path.get ());
      return m_path.get ();
    }
--- 975,983 ----
    diagnostic_execution_path *
    add_execution_path ()
    {
!     m_path
!       = std::make_unique<diagnostic_execution_path>
! 	  (m_diag_mgr.get_logical_location_manager ());
      m_rich_loc.set_path (m_path.get ());
      return m_path.get ();
    }
*************** impl_diagnostic_client_data_hooks::get_a
*** 973,984 ****
    return m_mgr.get_client_version_info ();
  }
  
! const logical_location *
  impl_diagnostic_client_data_hooks::get_current_logical_location () const
  {
    gcc_assert (m_mgr.get_current_diag ());
  
!   return m_mgr.get_current_diag ()->get_logical_location ();
  }
  
  const char *
--- 1048,1060 ----
    return m_mgr.get_client_version_info ();
  }
  
! logical_location
  impl_diagnostic_client_data_hooks::get_current_logical_location () const
  {
    gcc_assert (m_mgr.get_current_diag ());
  
!   return impl_logical_location_manager::key_from_ptr
!     (m_mgr.get_current_diag ()->get_logical_location ());
  }
  
  const char *
*************** diagnostic_text_sink::text_starter (diag
*** 1046,1066 ****
    if (diag_logical_loc && diag_logical_loc != mgr.get_prev_diag_logical_loc ())
      {
        pp_set_prefix (pp, nullptr);
!       switch (diag_logical_loc->get_kind ())
  	{
  	default:
  	  break;
! 	case LOGICAL_LOCATION_KIND_FUNCTION:
! 	  if (const char *name
! 	      = diag_logical_loc->get_name_with_scope ())
! 	    {
! 	      pp_printf (pp, _("In function %qs"), name);
! 	      pp_character (pp, ':');
! 	      pp_newline (pp);
! 	    }
! 	  break;
! 	  // TODO: handle other cases
  	}
      }
    pp_set_prefix (pp,
  		 text_output.build_prefix (*info));
--- 1122,1178 ----
    if (diag_logical_loc && diag_logical_loc != mgr.get_prev_diag_logical_loc ())
      {
        pp_set_prefix (pp, nullptr);
! 
!       /* This macro is used to ensure that all format strings are visible to gettext
! 	 and checked at compile time.  */
! 
! #define CASE(KIND, MSGID) \
! 	case KIND:							\
! 	  if (const char *name						\
! 	      = diag_logical_loc->m_fully_qualified_name.get_str ())	\
! 	    {								\
! 	     pp_printf (pp, (MSGID), name);				\
! 	     pp_character (pp, ':');					\
! 	     pp_newline (pp);						\
! 	    }								\
! 	  break;
! 
!       switch (diag_logical_loc->m_kind)
  	{
  	default:
  	  break;
! 
! 	/* Kinds within executable code.  */
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION, _("In function %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_MEMBER, _("In member %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_MODULE, _("In module %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_NAMESPACE, _("In namespace %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_TYPE, _("In type %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_RETURN_TYPE,
! 	     _("In return type %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_PARAMETER, _("In parameter %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE, _("In variable %qs"))
! 
! 	/* Kinds within XML or HTML documents.  */
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_ELEMENT, _("In element %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_ATTRIBUTE, _("In attribute %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_TEXT, _("In text %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_COMMENT, _("In comment %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION,
! 	     _("In processing instruction %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_DTD, _("In DTD %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_DECLARATION,
! 	     _("In declaration %qs"))
! 
! 	/* Kinds within JSON documents.  */
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT, _("In JSON object %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY, _("In JSON array %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY,
! 	     _("In JSON property %qs"))
! 	CASE(DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE, _("In JSON value %qs"))
  	}
+ 
+ #undef CASE
      }
    pp_set_prefix (pp,
  		 text_output.build_prefix (*info));
*************** GCC_DIAGNOSTIC_POP
*** 1130,1136 ****
  diagnostic_execution_path *
  diagnostic_manager::new_execution_path ()
  {
!   return new diagnostic_execution_path ();
  }
  
  /* Error-checking at the API boundary.  */
--- 1242,1250 ----
  diagnostic_execution_path *
  diagnostic_manager::new_execution_path ()
  {
!   auto mgr = m_dc.get_logical_location_manager ();
!   gcc_assert (mgr);
!   return new diagnostic_execution_path (*mgr);
  }
  
  /* Error-checking at the API boundary.  */
*************** diagnostic_manager_debug_dump_logical_lo
*** 1458,1467 ****
    if (loc)
      {
        fprintf (out, "logical_location(kind=");
!       switch (loc->get_external_kind ())
  	{
  	default:
  	  gcc_unreachable ();
  	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION:
  	  fprintf (out, "function");
  	  break;
--- 1572,1582 ----
    if (loc)
      {
        fprintf (out, "logical_location(kind=");
!       switch (loc->m_kind)
  	{
  	default:
  	  gcc_unreachable ();
+ 
  	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION:
  	  fprintf (out, "function");
  	  break;
*************** diagnostic_manager_debug_dump_logical_lo
*** 1486,1501 ****
  	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE:
  	  fprintf (out, "variable");
  	  break;
  	}
!       if (const diagnostic_logical_location *parent = loc->get_parent ())
! 	diagnostic_manager_debug_dump_logical_location (diag_mgr,
! 							parent,
! 							out);
!       if (const char *val = loc->get_short_name ())
  	fprintf (out, ", short_name=\"%s\"", val);
!       if (const char *val = loc->get_name_with_scope ())
  	fprintf (out, ", fully_qualified_name=\"%s\"", val);
!       if (const char *val = loc->get_internal_name ())
  	fprintf (out, ", decorated_name=\"%s\"", val);
        fprintf (out, ")");
      }
--- 1601,1654 ----
  	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE:
  	  fprintf (out, "variable");
  	  break;
+ 
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_ELEMENT:
+ 	  fprintf (out, "element");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_ATTRIBUTE:
+ 	  fprintf (out, "attribute");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_TEXT:
+ 	  fprintf (out, "text");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_COMMENT:
+ 	  fprintf (out, "comment");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION:
+ 	  fprintf (out, "processing_instruction");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_DTD:
+ 	  fprintf (out, "dtd");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_DECLARATION:
+ 	  fprintf (out, "declaration");
+ 	  break;
+ 
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT:
+ 	  fprintf (out, "object");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY:
+ 	  fprintf (out, "array");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY:
+ 	  fprintf (out, "property");
+ 	  break;
+ 	case DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE:
+ 	  fprintf (out, "value");
+ 	  break;
  	}
!       if (auto parent = loc->m_parent)
! 	{
!          fprintf (out, ", parent=");
! 	 diagnostic_manager_debug_dump_logical_location (diag_mgr,
! 							 parent,
! 							 out);
! 	}
!       if (const char *val = loc->m_short_name.get_str ())
  	fprintf (out, ", short_name=\"%s\"", val);
!       if (const char *val = loc->m_fully_qualified_name.get_str ())
  	fprintf (out, ", fully_qualified_name=\"%s\"", val);
!       if (const char *val = loc->m_decorated_name.get_str ())
  	fprintf (out, ", decorated_name=\"%s\"", val);
        fprintf (out, ")");
      }
*************** diagnostic_physical_location_get_file (c
*** 1788,1790 ****
--- 1941,1985 ----
  
    return physical_loc->get_file ();
  }
+ 
+ /* Public entrypoints for accessing logical location data.  */
+ 
+ enum diagnostic_logical_location_kind_t
+ diagnostic_logical_location_get_kind (const diagnostic_logical_location *loc)
+ {
+   FAIL_IF_NULL (loc);
+ 
+   return loc->m_kind;
+ }
+ 
+ const diagnostic_logical_location *
+ diagnostic_logical_location_get_parent (const diagnostic_logical_location *loc)
+ {
+   FAIL_IF_NULL (loc);
+ 
+   return loc->m_parent;
+ }
+ 
+ const char *
+ diagnostic_logical_location_get_short_name (const diagnostic_logical_location *loc)
+ {
+   FAIL_IF_NULL (loc);
+ 
+   return loc->m_short_name.get_str ();
+ }
+ 
+ const char *
+ diagnostic_logical_location_get_fully_qualified_name (const diagnostic_logical_location *loc)
+ {
+   FAIL_IF_NULL (loc);
+ 
+   return loc->m_fully_qualified_name.get_str ();
+ }
+ 
+ const char *
+ diagnostic_logical_location_get_decorated_name (const diagnostic_logical_location *loc)
+ {
+   FAIL_IF_NULL (loc);
+ 
+   return loc->m_decorated_name.get_str ();
+ }
diff -Nrcpad gcc-16-20250504/gcc/libgdiagnostics.h gcc-16-20250511/gcc/libgdiagnostics.h
*** gcc-16-20250504/gcc/libgdiagnostics.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/libgdiagnostics.h	Sun May 11 22:32:10 2025
*************** typedef struct diagnostic_logical_locati
*** 161,166 ****
--- 161,167 ----
  
  enum diagnostic_logical_location_kind_t
  {
+  /* Kinds within executable code.  */
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION,
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_MEMBER,
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_MODULE,
*************** enum diagnostic_logical_location_kind_t
*** 168,174 ****
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_TYPE,
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_RETURN_TYPE,
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_PARAMETER,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE
  };
  
  /* A "diagnostic" is an opaque bundle of state for a particular
--- 169,190 ----
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_TYPE,
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_RETURN_TYPE,
    DIAGNOSTIC_LOGICAL_LOCATION_KIND_PARAMETER,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE,
! 
!   /* Kinds within XML or HTML documents.  */
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_ELEMENT,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_ATTRIBUTE,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_TEXT,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_COMMENT,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_DTD,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_DECLARATION,
! 
!   /* Kinds within JSON documents.  */
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY,
!   DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE
  };
  
  /* A "diagnostic" is an opaque bundle of state for a particular
*************** diagnostic_manager_debug_dump_logical_lo
*** 487,492 ****
--- 503,534 ----
    LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2)
    LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (3);
  
+ /* Accessors for logical locations (added in LIBGDIAGNOSTICS_ABI_1;
+    you can test for their presence using
+    #ifdef LIBDIAGNOSTICS_HAVE_LOGICAL_LOCATION_ACCESSORS
+ */
+ #define LIBDIAGNOSTICS_HAVE_LOGICAL_LOCATION_ACCESSORS
+ 
+ extern enum diagnostic_logical_location_kind_t
+ diagnostic_logical_location_get_kind (const diagnostic_logical_location *loc)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ extern const diagnostic_logical_location *
+ diagnostic_logical_location_get_parent (const diagnostic_logical_location *loc)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ extern const char *
+ diagnostic_logical_location_get_short_name (const diagnostic_logical_location *loc)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ extern const char *
+ diagnostic_logical_location_get_fully_qualified_name (const diagnostic_logical_location *loc)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ extern const char *
+ diagnostic_logical_location_get_decorated_name (const diagnostic_logical_location *loc)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
  /* Diagnostic groups.  */
  
  /* Begin a diagnostic group.  All diagnostics emitted within
diff -Nrcpad gcc-16-20250504/gcc/libgdiagnostics.map gcc-16-20250511/gcc/libgdiagnostics.map
*** gcc-16-20250504/gcc/libgdiagnostics.map	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/libgdiagnostics.map	Sun May 11 22:32:10 2025
*************** LIBGDIAGNOSTICS_ABI_0
*** 73,75 ****
--- 73,85 ----
  
    local: *;
  };
+ 
+ # Add accessors for diagnostic_logical_location.
+ LIBGDIAGNOSTICS_ABI_1 {
+   global:
+     diagnostic_logical_location_get_kind;
+     diagnostic_logical_location_get_parent;
+     diagnostic_logical_location_get_short_name;
+     diagnostic_logical_location_get_fully_qualified_name;
+     diagnostic_logical_location_get_decorated_name;
+ } LIBGDIAGNOSTICS_ABI_0;
diff -Nrcpad gcc-16-20250504/gcc/libsarifreplay.cc gcc-16-20250511/gcc/libsarifreplay.cc
*** gcc-16-20250504/gcc/libsarifreplay.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/libsarifreplay.cc	Sun May 11 22:32:10 2025
*************** make_physical_location (libgdiagnostics:
*** 106,111 ****
--- 106,187 ----
    return mgr.new_location_from_range (start, start, end);
  }
  
+ static enum diagnostic_logical_location_kind_t
+ get_logical_location_kind_for_json_kind (enum json::kind json_kind)
+ {
+   switch (json_kind)
+     {
+     default:
+       gcc_unreachable ();
+ 
+     case json::JSON_OBJECT:
+       return DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT;
+ 
+     case json::JSON_ARRAY:
+       return DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY;
+ 
+     case json::JSON_INTEGER:
+     case json::JSON_FLOAT:
+     case json::JSON_STRING:
+     case json::JSON_TRUE:
+     case json::JSON_FALSE:
+     case json::JSON_NULL:
+       return DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY;
+       /* Perhaps this should be DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE,
+ 	 but then we need to more carefully track context.  */
+     }
+ }
+ 
+ static libgdiagnostics::logical_location
+ make_logical_location_from_jv (libgdiagnostics::manager &mgr,
+ 			       const json::value &jv)
+ {
+   libgdiagnostics::logical_location parent;
+   const json::pointer::token &pointer_token = jv.get_pointer_token ();
+ 
+   if (pointer_token.m_parent)
+     /* Recursively ensure that we have ancestor locations.  */
+     parent = make_logical_location_from_jv (mgr,
+ 					    *jv.m_pointer_token.m_parent);
+ 
+   std::string short_name;
+   std::string fully_qualified_name;
+   switch (pointer_token.m_kind)
+     {
+     default:
+       gcc_unreachable ();
+ 
+     case json::pointer::token::kind::root_value:
+       short_name = "";
+       fully_qualified_name = "";
+       break;
+ 
+     case json::pointer::token::kind::object_member:
+       short_name = pointer_token.m_data.u_member;
+       gcc_assert (parent.m_inner);
+       fully_qualified_name
+ 	= std::string (parent.get_fully_qualified_name ()) + "/" + short_name;
+       break;
+ 
+     case json::pointer::token::kind::array_index:
+       short_name = std::to_string (pointer_token.m_data.u_index);
+       gcc_assert (parent.m_inner);
+       fully_qualified_name
+ 	= std::string (parent.get_fully_qualified_name ()) + "/" + short_name;
+       break;
+     }
+ 
+   enum diagnostic_logical_location_kind_t kind
+     = get_logical_location_kind_for_json_kind (jv.get_kind ());
+ 
+   return mgr.new_logical_location (kind,
+ 				   parent,
+ 				   short_name.c_str (),
+ 				   fully_qualified_name.c_str (),
+ 				   nullptr);
+ }
+ 
+ 
  enum class status
  {
    ok,
*************** private:
*** 417,422 ****
--- 493,501 ----
  				m_json_location_map.get_range_for_value (jv));
      diag.set_location (loc_range);
  
+     diag.set_logical_location (make_logical_location_from_jv (m_control_mgr,
+ 							      jv));
+ 
      diag.finish_va (gmsgid, args);
    }
  
*************** handle_logical_location_object (const js
*** 2008,2014 ****
  	    { "parameter",
  	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_PARAMETER },
  	    { "variable",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE } };
        auto result
  	= get_value_from_json_string<enum diagnostic_logical_location_kind_t>
  	    (*kind_str, kind_prop, kind_values, ARRAY_SIZE (kind_values));
--- 2087,2118 ----
  	    { "parameter",
  	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_PARAMETER },
  	    { "variable",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_VARIABLE },
! 
! 	    { "element",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_ELEMENT },
! 	    { "attribute",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_ATTRIBUTE },
! 	    { "text",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_TEXT },
! 	    { "comment",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_COMMENT },
! 	    { "processingInstruction",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION },
! 	    { "dtd",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_DTD },
! 	    { "declaration",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_DECLARATION },
! 
! 	    { "object",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT },
! 	    { "array",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY },
! 	    { "property",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY },
! 	    { "value",
! 	      DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE },
!       };
        auto result
  	= get_value_from_json_string<enum diagnostic_logical_location_kind_t>
  	    (*kind_str, kind_prop, kind_values, ARRAY_SIZE (kind_values));
diff -Nrcpad gcc-16-20250504/gcc/logical-location.h gcc-16-20250511/gcc/logical-location.h
*** gcc-16-20250504/gcc/logical-location.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/logical-location.h	Sun May 11 22:32:10 2025
*************** enum logical_location_kind
*** 33,38 ****
--- 33,39 ----
  {
    LOGICAL_LOCATION_KIND_UNKNOWN,
  
+   /* Kinds within executable code.  */
    LOGICAL_LOCATION_KIND_FUNCTION,
    LOGICAL_LOCATION_KIND_MEMBER,
    LOGICAL_LOCATION_KIND_MODULE,
*************** enum logical_location_kind
*** 40,80 ****
    LOGICAL_LOCATION_KIND_TYPE,
    LOGICAL_LOCATION_KIND_RETURN_TYPE,
    LOGICAL_LOCATION_KIND_PARAMETER,
!   LOGICAL_LOCATION_KIND_VARIABLE
  };
  
! /* Abstract base class for passing around logical locations in the
     diagnostics subsystem, such as:
     - "within function 'foo'", or
!    - "within method 'bar'",
!    but *without* requiring knowledge of trees
!    (see tree-logical-location.h for concrete subclasses relating to trees,
!    and selftest-logical-location.h for a concrete subclass for selftests).  */
  
! class logical_location
  {
  public:
!   virtual ~logical_location () {}
  
!   /* Get a string (or NULL) suitable for use by the SARIF logicalLocation
       "name" property (SARIF v2.1.0 section 3.33.4).  */
!   virtual const char *get_short_name () const = 0;
  
!   /* Get a string (or NULL) suitable for use by the SARIF logicalLocation
       "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5).  */
!   virtual const char *get_name_with_scope () const = 0;
  
!   /* Get a string (or NULL) suitable for use by the SARIF logicalLocation
       "decoratedName" property (SARIF v2.1.0 section 3.33.6).  */
!   virtual const char *get_internal_name () const = 0;
  
!   /* Get what kind of SARIF logicalLocation this is (if any).  */
!   virtual enum logical_location_kind get_kind () const = 0;
  
!   /* Get a string for this location in a form suitable for path output.  */
!   virtual label_text get_name_for_path_output () const = 0;
  
!   bool function_p () const;
  };
  
  #endif /* GCC_LOGICAL_LOCATION_H.  */
--- 41,175 ----
    LOGICAL_LOCATION_KIND_TYPE,
    LOGICAL_LOCATION_KIND_RETURN_TYPE,
    LOGICAL_LOCATION_KIND_PARAMETER,
!   LOGICAL_LOCATION_KIND_VARIABLE,
! 
!   /* Kinds within XML or HTML documents.  */
!   LOGICAL_LOCATION_KIND_ELEMENT,
!   LOGICAL_LOCATION_KIND_ATTRIBUTE,
!   LOGICAL_LOCATION_KIND_TEXT,
!   LOGICAL_LOCATION_KIND_COMMENT,
!   LOGICAL_LOCATION_KIND_PROCESSING_INSTRUCTION,
!   LOGICAL_LOCATION_KIND_DTD,
!   LOGICAL_LOCATION_KIND_DECLARATION,
! 
!   /* Kinds within JSON documents.  */
!   LOGICAL_LOCATION_KIND_OBJECT,
!   LOGICAL_LOCATION_KIND_ARRAY,
!   LOGICAL_LOCATION_KIND_PROPERTY,
!   LOGICAL_LOCATION_KIND_VALUE
  };
  
! /* We want to efficiently support passing around logical locations in the
     diagnostics subsystem, such as:
     - "within function 'foo'", or
!    - "within method 'bar'"
  
!    However we want to do this *without* requiring knowledge of trees (or of
!    libgdiagnostics internals), and without requiring heap allocation of an
!    interface class when emitting a diagnostic.
! 
!    To do this, we split the implementation into logical_location, which is
!    a wrapper around a (const void *), and logical_location_manager which
!    is provided by the client and has vfunc hooks for interpreting
!    logical_location instances.
! 
!    Every logical_location is associated with a logical_location_manager and
!    only has meaning in relation to that manager.
! 
!    A "nullptr" within a logical_location means "no logical location".
! 
!    See tree-logical-location.h for concrete subclasses relating to trees,
!    where the pointer is a const_tree.
! 
!    See selftest-logical-location.h for a concrete subclass for selftests.  */
! 
! /* Abstract base class for giving meaning to logical_location values.
!    Typically there will just be one client-provided instance, of a
!    client-specific subclass.  */
! 
! class logical_location_manager
  {
  public:
!   /* Extrinsic state for identifying a specific logical location.
!      This will be our logical_location type.
!      This only makes sense with respect to a specific manager.
!      e.g. for a tree-based one it's a wrapper around "tree".
!      "nullptr" means "no logical location".  */
!   class key
!   {
!   public:
!     key () : m_ptr (nullptr) {}
  
!     static key from_ptr (const void *ptr)
!     {
!       return key (ptr);
!     }
! 
!     operator bool () const
!     {
!       return m_ptr != nullptr;
!     }
! 
!     template <typename T>
!     T cast_to () const { return static_cast<T> (m_ptr); }
! 
!     bool
!     operator== (const key &other) const
!     {
!       return m_ptr == other.m_ptr;
!     }
! 
!     bool
!     operator!= (const key &other) const
!     {
!       return m_ptr != other.m_ptr;
!     }
! 
!     bool
!     operator< (const key &other) const
!     {
!       return m_ptr < other.m_ptr;
!     }
! 
!   private:
!     explicit key (const void *ptr) : m_ptr (ptr) {}
! 
!     const void *m_ptr;
!   };
! 
!   virtual ~logical_location_manager () {}
! 
!   /* vfuncs for interpreting logical_location values.  */
! 
!   /* Get a string (or NULL) for K suitable for use by the SARIF logicalLocation
       "name" property (SARIF v2.1.0 section 3.33.4).  */
!   virtual const char *get_short_name (key k) const = 0;
  
!   /* Get a string (or NULL) for K suitable for use by the SARIF logicalLocation
       "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5).  */
!   virtual const char *get_name_with_scope (key k) const = 0;
  
!   /* Get a string (or NULL) for K suitable for use by the SARIF logicalLocation
       "decoratedName" property (SARIF v2.1.0 section 3.33.6).  */
!   virtual const char *get_internal_name (key k) const = 0;
  
!   /* Get what kind of SARIF logicalLocation K is (if any).  */
!   virtual enum logical_location_kind get_kind (key k) const = 0;
  
!   /* Get a string for location K in a form suitable for path output.  */
!   virtual label_text get_name_for_path_output (key k) const = 0;
  
!   /* Get the parent logical_logical of K, if any, or nullptr.  */
!   virtual key get_parent (key k) const = 0;
! 
!   bool function_p (key k) const;
  };
  
+ /* A logical location is a key for a given logical_location_manager.
+ 
+    Note that there is no integration with GCC's garbage collector and thus
+    logical_location instances can't be long-lived.  */
+ 
+ typedef logical_location_manager::key logical_location;
+ 
  #endif /* GCC_LOGICAL_LOCATION_H.  */
diff -Nrcpad gcc-16-20250504/gcc/lto-cgraph.cc gcc-16-20250511/gcc/lto-cgraph.cc
*** gcc-16-20250504/gcc/lto-cgraph.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/lto-cgraph.cc	Sun May 11 22:32:10 2025
*************** input_node (struct lto_file_decl_data *f
*** 1303,1309 ****
      {
        node = dyn_cast<cgraph_node *> (nodes[clone_ref])->create_clone (fn_decl,
  	profile_count::uninitialized (), false,
! 	vNULL, false, NULL, NULL);
      }
    else
      {
--- 1303,1309 ----
      {
        node = dyn_cast<cgraph_node *> (nodes[clone_ref])->create_clone (fn_decl,
  	profile_count::uninitialized (), false,
! 	vNULL, false, NULL, NULL, NULL);
      }
    else
      {
diff -Nrcpad gcc-16-20250504/gcc/m2/ChangeLog gcc-16-20250511/gcc/m2/ChangeLog
*** gcc-16-20250504/gcc/m2/ChangeLog	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/m2/ChangeLog	Sun May 11 22:32:10 2025
***************
*** 1,3 ****
--- 1,15 ----
+ 2025-05-05  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120117
+ 	* gm2-compiler/M2GenGCC.mod (FoldBecomes): Remove the call to
+ 	RemoveQuad since this is performed by TypeCheckBecomes.
+ 	* gm2-compiler/PCSymBuild.mod (buildConstFunction): Rewrite
+ 	header comment.
+ 	Check for a set or a type aliased set and appropriately
+ 	skip type equivalences and obtain the element type.
+ 	* gm2-compiler/SymbolTable.mod (PutConst): Add call to
+ 	CheckBreak.
+ 
  2025-04-24  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/119915
diff -Nrcpad gcc-16-20250504/gcc/m2/gm2-compiler/M2GenGCC.mod gcc-16-20250511/gcc/m2/gm2-compiler/M2GenGCC.mod
*** gcc-16-20250504/gcc/m2/gm2-compiler/M2GenGCC.mod	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/m2/gm2-compiler/M2GenGCC.mod	Sun May 11 22:32:10 2025
*************** BEGIN
*** 2914,2922 ****
           IF TypeCheckBecomes (p, quad)
           THEN
              PerformFoldBecomes (p, quad)
-          ELSE
-             GetQuad (quad, op, des, op2, expr) ;
-             RemoveQuad (p, des, quad)
           END
        END
     END
--- 2914,2919 ----
diff -Nrcpad gcc-16-20250504/gcc/m2/gm2-compiler/PCSymBuild.mod gcc-16-20250511/gcc/m2/gm2-compiler/PCSymBuild.mod
*** gcc-16-20250504/gcc/m2/gm2-compiler/PCSymBuild.mod	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/m2/gm2-compiler/PCSymBuild.mod	Sun May 11 22:32:10 2025
*************** FROM SymbolTable IMPORT NulSym, ModeOfAd
*** 64,70 ****
                          GetFromOuterModule,
                          CheckForEnumerationInCurrentModule,
                          GetMode, PutVariableAtAddress, ModeOfAddr, SkipType,
!                         IsSet, PutConstSet,
                          IsConst, IsConstructor, PutConst, PutConstructor,
                          PopValue, PushValue,
                          MakeTemporary, PutVar,
--- 64,70 ----
                          GetFromOuterModule,
                          CheckForEnumerationInCurrentModule,
                          GetMode, PutVariableAtAddress, ModeOfAddr, SkipType,
!                         IsSet, PutConstSet, IsType,
                          IsConst, IsConstructor, PutConst, PutConstructor,
                          PopValue, PushValue,
                          MakeTemporary, PutVar,
*************** END TypeToMeta ;
*** 1408,1416 ****
  
  
  (*
!    buildConstFunction - we are only concerned about resolving the return type o
                          a function, so we can ignore all parameters - except
!                         the first one in the case of VAL(type, foo).
                          buildConstFunction uses a unary exprNode to represent
                          a function.
  *)
--- 1408,1417 ----
  
  
  (*
!    buildConstFunction - we are only concerned about resolving the return type of
                          a function, so we can ignore all parameters - except
!                         the first one in the case of VAL(type, foo)
!                         and the type of bar in MIN (bar) and MAX (bar).
                          buildConstFunction uses a unary exprNode to represent
                          a function.
  *)
*************** BEGIN
*** 1866,1876 ****
              THEN
                 IF (func=Min) OR (func=Max)
                 THEN
!                   IF IsSet (sym)
                    THEN
!                      type := SkipType(GetType(sym))
                    ELSE
!                      (* sym is the type required for MAX, MIN and VAL *)
                       type := sym
                    END
                 ELSE
--- 1867,1877 ----
              THEN
                 IF (func=Min) OR (func=Max)
                 THEN
!                   IF IsSet (sym) OR (IsType (sym) AND IsSet (SkipType (sym)))
                    THEN
!                      type := GetType (SkipType (sym))
                    ELSE
!                      (* sym is the type required for MAX, MIN and VAL.  *)
                       type := sym
                    END
                 ELSE
diff -Nrcpad gcc-16-20250504/gcc/m2/gm2-compiler/SymbolTable.mod gcc-16-20250511/gcc/m2/gm2-compiler/SymbolTable.mod
*** gcc-16-20250504/gcc/m2/gm2-compiler/SymbolTable.mod	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/m2/gm2-compiler/SymbolTable.mod	Sun May 11 22:32:10 2025
*************** VAR
*** 7265,7270 ****
--- 7265,7271 ----
     pSym: PtrToSymbol ;
  BEGIN
     pSym := GetPsym(Sym) ;
+    CheckBreak (Sym) ;
     WITH pSym^ DO
        CASE SymbolType OF
  
diff -Nrcpad gcc-16-20250504/gcc/match.pd gcc-16-20250511/gcc/match.pd
*** gcc-16-20250504/gcc/match.pd	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/match.pd	Sun May 11 22:32:10 2025
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1123,1131 ****
  #endif
  
  /* (nop_outer_cast)-(inner_cast)var -> -(outer_cast)(var)
!    if var is smaller in precision.
!    This is always safe for both doing the negative in signed or unsigned
!    as the value for undefined will not show up.
     Note the outer cast cannot be a boolean type as the only valid values
     are 0,-1/1 (depending on the signedness of the boolean) and the negative
     is there to get the correct value.  */
--- 1123,1131 ----
  #endif
  
  /* (nop_outer_cast)-(inner_cast)var -> -(outer_cast)(var)
!    If var is smaller in precision this is always safe for both doing
!    the negative in signed or unsigned as the value for undefined will not
!    show up.  Else it is safe if the negation is done in an unsigned type.
     Note the outer cast cannot be a boolean type as the only valid values
     are 0,-1/1 (depending on the signedness of the boolean) and the negative
     is there to get the correct value.  */
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1133,1139 ****
   (convert (negate:s@1 (convert:s @0)))
   (if (INTEGRAL_TYPE_P (type)
        && tree_nop_conversion_p (type, TREE_TYPE (@1))
!       && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (@0))
        && TREE_CODE (type) != BOOLEAN_TYPE)
      (negate (convert @0))))
  
--- 1133,1140 ----
   (convert (negate:s@1 (convert:s @0)))
   (if (INTEGRAL_TYPE_P (type)
        && tree_nop_conversion_p (type, TREE_TYPE (@1))
!       && (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (@0))
! 	  || TYPE_UNSIGNED (type))
        && TREE_CODE (type) != BOOLEAN_TYPE)
      (negate (convert @0))))
  
diff -Nrcpad gcc-16-20250504/gcc/opts-diagnostic.cc gcc-16-20250511/gcc/opts-diagnostic.cc
*** gcc-16-20250504/gcc/opts-diagnostic.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/opts-diagnostic.cc	Sun May 11 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,38 ----
  #include "diagnostic.h"
  #include "diagnostic-color.h"
  #include "diagnostic-format.h"
+ #include "diagnostic-format-html.h"
  #include "diagnostic-format-text.h"
  #include "diagnostic-format-sarif.h"
  #include "selftest.h"
*************** public:
*** 217,222 ****
--- 218,234 ----
  	     const scheme_name_and_params &parsed_arg) const final override;
  };
  
+ class html_scheme_handler : public output_factory::scheme_handler
+ {
+ public:
+   html_scheme_handler () : scheme_handler ("experimental-html") {}
+ 
+   std::unique_ptr<diagnostic_output_format>
+   make_sink (const context &ctxt,
+ 	     const char *unparsed_arg,
+ 	     const scheme_name_and_params &parsed_arg) const final override;
+ };
+ 
  /* struct context.  */
  
  void
*************** output_factory::output_factory ()
*** 318,323 ****
--- 330,336 ----
  {
    m_scheme_handlers.push_back (std::make_unique<text_scheme_handler> ());
    m_scheme_handlers.push_back (std::make_unique<sarif_scheme_handler> ());
+   m_scheme_handlers.push_back (std::make_unique<html_scheme_handler> ());
  }
  
  const output_factory::scheme_handler *
*************** sarif_scheme_handler::make_sink (const c
*** 525,530 ****
--- 538,590 ----
    return sink;
  }
  
+ /* class html_scheme_handler : public output_factory::scheme_handler.  */
+ 
+ std::unique_ptr<diagnostic_output_format>
+ html_scheme_handler::make_sink (const context &ctxt,
+ 				const char *unparsed_arg,
+ 				const scheme_name_and_params &parsed_arg) const
+ {
+   label_text filename;
+   for (auto& iter : parsed_arg.m_kvs)
+     {
+       const std::string &key = iter.first;
+       const std::string &value = iter.second;
+       if (key == "file")
+ 	{
+ 	  filename = label_text::take (xstrdup (value.c_str ()));
+ 	  continue;
+ 	}
+ 
+       /* Key not found.  */
+       auto_vec<const char *> known_keys;
+       known_keys.safe_push ("file");
+       ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), known_keys);
+       return nullptr;
+     }
+ 
+   diagnostic_output_file output_file;
+   if (filename.get ())
+     output_file = ctxt.open_output_file (std::move (filename));
+   else
+     // Default filename
+     {
+       const char *basename = (ctxt.m_opts.x_dump_base_name
+ 			      ? ctxt.m_opts.x_dump_base_name
+ 			      : ctxt.m_opts.x_main_input_basename);
+       output_file = diagnostic_output_format_open_html_file (ctxt.m_dc,
+ 							     line_table,
+ 							     basename);
+     }
+   if (!output_file)
+     return nullptr;
+ 
+   auto sink = make_html_sink (ctxt.m_dc,
+ 			      *line_table,
+ 			      std::move (output_file));
+   return sink;
+ }
+ 
  } // namespace diagnostics_output_spec
  } // namespace gcc
  
diff -Nrcpad gcc-16-20250504/gcc/selftest-diagnostic-path.cc gcc-16-20250511/gcc/selftest-diagnostic-path.cc
*** gcc-16-20250504/gcc/selftest-diagnostic-path.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest-diagnostic-path.cc	Sun May 11 22:32:11 2025
*************** namespace selftest {
*** 36,42 ****
  /* class test_diagnostic_path : public diagnostic_path.  */
  
  test_diagnostic_path::test_diagnostic_path (pretty_printer *event_pp)
! : m_event_pp (event_pp)
  {
    add_thread ("main");
  }
--- 36,43 ----
  /* class test_diagnostic_path : public diagnostic_path.  */
  
  test_diagnostic_path::test_diagnostic_path (pretty_printer *event_pp)
! : diagnostic_path (m_test_logical_loc_mgr),
!   m_event_pp (event_pp)
  {
    add_thread ("main");
  }
*************** bool
*** 75,86 ****
  test_diagnostic_path::same_function_p (int event_idx_a,
  				       int event_idx_b) const
  {
!   const char *name_a = m_events[event_idx_a]->get_function_name ();
!   const char *name_b = m_events[event_idx_b]->get_function_name ();
! 
!   if (name_a && name_b)
!     return 0 == strcmp (name_a, name_b);
!   return name_a == name_b;
  }
  
  diagnostic_thread_id_t
--- 76,83 ----
  test_diagnostic_path::same_function_p (int event_idx_a,
  				       int event_idx_b) const
  {
!   return (m_events[event_idx_a]->get_logical_location ()
! 	  == m_events[event_idx_b]->get_logical_location ());
  }
  
  diagnostic_thread_id_t
*************** test_diagnostic_path::add_event (locatio
*** 121,127 ****
    va_end (ap);
  
    test_diagnostic_event *new_event
!     = new test_diagnostic_event (loc, funcname, depth, pp_formatted_text (pp));
    m_events.safe_push (new_event);
  
    pp_clear_output_area (pp);
--- 118,127 ----
    va_end (ap);
  
    test_diagnostic_event *new_event
!     = new test_diagnostic_event (loc,
! 				 logical_location_from_funcname (funcname),
! 				 depth,
! 				 pp_formatted_text (pp));
    m_events.safe_push (new_event);
  
    pp_clear_output_area (pp);
*************** test_diagnostic_path::add_thread_event (
*** 154,161 ****
    va_end (ap);
  
    test_diagnostic_event *new_event
!     = new test_diagnostic_event (loc, funcname, depth, pp_formatted_text (pp),
! 				   thread_id);
    m_events.safe_push (new_event);
  
    pp_clear_output_area (pp);
--- 154,164 ----
    va_end (ap);
  
    test_diagnostic_event *new_event
!     = new test_diagnostic_event (loc,
! 				 logical_location_from_funcname (funcname),
! 				 depth,
! 				 pp_formatted_text (pp),
! 				 thread_id);
    m_events.safe_push (new_event);
  
    pp_clear_output_area (pp);
*************** test_diagnostic_path::add_call (const ch
*** 203,220 ****
    add_entry (callee_name, caller_stack_depth + 1, thread_id);
  }
  
  /* struct test_diagnostic_event.  */
  
  /* test_diagnostic_event's ctor.  */
  
  test_diagnostic_event::
  test_diagnostic_event (location_t loc,
! 			 const char *funcname,
! 			 int depth,
! 			 const char *desc,
! 			 diagnostic_thread_id_t thread_id)
  : m_loc (loc),
!   m_logical_loc (LOGICAL_LOCATION_KIND_FUNCTION, funcname),
    m_depth (depth), m_desc (xstrdup (desc)),
    m_connected_to_next_event (false),
    m_thread_id (thread_id)
--- 206,229 ----
    add_entry (callee_name, caller_stack_depth + 1, thread_id);
  }
  
+ logical_location
+ test_diagnostic_path::logical_location_from_funcname (const char *funcname)
+ {
+   return m_test_logical_loc_mgr.logical_location_from_funcname (funcname);
+ }
+ 
  /* struct test_diagnostic_event.  */
  
  /* test_diagnostic_event's ctor.  */
  
  test_diagnostic_event::
  test_diagnostic_event (location_t loc,
! 		       logical_location logical_loc,
! 		       int depth,
! 		       const char *desc,
! 		       diagnostic_thread_id_t thread_id)
  : m_loc (loc),
!   m_logical_loc (logical_loc),
    m_depth (depth), m_desc (xstrdup (desc)),
    m_connected_to_next_event (false),
    m_thread_id (thread_id)
diff -Nrcpad gcc-16-20250504/gcc/selftest-diagnostic-path.h gcc-16-20250511/gcc/selftest-diagnostic-path.h
*** gcc-16-20250504/gcc/selftest-diagnostic-path.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest-diagnostic-path.h	Sun May 11 22:32:11 2025
*************** namespace selftest {
*** 41,47 ****
  class test_diagnostic_event : public diagnostic_event
  {
   public:
!   test_diagnostic_event (location_t loc, const char *funcname, int depth,
  			 const char *desc,
  			 diagnostic_thread_id_t thread_id = 0);
    ~test_diagnostic_event ();
--- 41,49 ----
  class test_diagnostic_event : public diagnostic_event
  {
   public:
!   test_diagnostic_event (location_t loc,
! 			 logical_location logical_loc,
! 			 int depth,
  			 const char *desc,
  			 diagnostic_thread_id_t thread_id = 0);
    ~test_diagnostic_event ();
*************** class test_diagnostic_event : public dia
*** 52,63 ****
    {
      pp_string (&pp, m_desc);
    }
!   const logical_location *get_logical_location () const final override
    {
!     if (m_logical_loc.get_name ())
!       return &m_logical_loc;
!     else
!       return nullptr;
    }
    meaning get_meaning () const final override
    {
--- 54,62 ----
    {
      pp_string (&pp, m_desc);
    }
!   logical_location get_logical_location () const final override
    {
!     return m_logical_loc;
    }
    meaning get_meaning () const final override
    {
*************** class test_diagnostic_event : public dia
*** 77,90 ****
      m_connected_to_next_event = true;
    }
  
-   const char *get_function_name () const
-   {
-     return m_logical_loc.get_name ();
-   }
- 
   private:
    location_t m_loc;
!   test_logical_location m_logical_loc;
    int m_depth;
    char *m_desc; // has been formatted; doesn't get i18n-ed
    bool m_connected_to_next_event;
--- 76,84 ----
      m_connected_to_next_event = true;
    }
  
   private:
    location_t m_loc;
!   logical_location m_logical_loc;
    int m_depth;
    char *m_desc; // has been formatted; doesn't get i18n-ed
    bool m_connected_to_next_event;
*************** class test_diagnostic_path : public diag
*** 149,154 ****
--- 143,152 ----
  		 diagnostic_thread_id_t thread_id = 0);
  
   private:
+   logical_location
+   logical_location_from_funcname (const char *funcname);
+ 
+   test_logical_location_manager m_test_logical_loc_mgr;
    auto_delete_vec<test_diagnostic_thread> m_threads;
    auto_delete_vec<test_diagnostic_event> m_events;
  
diff -Nrcpad gcc-16-20250504/gcc/selftest-diagnostic.cc gcc-16-20250511/gcc/selftest-diagnostic.cc
*** gcc-16-20250504/gcc/selftest-diagnostic.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest-diagnostic.cc	Sun May 11 22:32:11 2025
*************** bool
*** 69,75 ****
  test_diagnostic_context::report (diagnostic_t kind,
  				 rich_location &richloc,
  				 const diagnostic_metadata *metadata,
! 				 int option,
  				 const char * fmt, ...)
  {
    va_list ap;
--- 69,75 ----
  test_diagnostic_context::report (diagnostic_t kind,
  				 rich_location &richloc,
  				 const diagnostic_metadata *metadata,
! 				 diagnostic_option_id option,
  				 const char * fmt, ...)
  {
    va_list ap;
diff -Nrcpad gcc-16-20250504/gcc/selftest-diagnostic.h gcc-16-20250511/gcc/selftest-diagnostic.h
*** gcc-16-20250504/gcc/selftest-diagnostic.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest-diagnostic.h	Sun May 11 22:32:11 2025
*************** class test_diagnostic_context : public d
*** 50,56 ****
    report (diagnostic_t kind,
  	  rich_location &richloc,
  	  const diagnostic_metadata *metadata,
! 	  int option,
  	  const char * fmt, ...) ATTRIBUTE_GCC_DIAG(6,7);
  
    const char *test_show_locus (rich_location &richloc);
--- 50,56 ----
    report (diagnostic_t kind,
  	  rich_location &richloc,
  	  const diagnostic_metadata *metadata,
! 	  diagnostic_option_id option,
  	  const char * fmt, ...) ATTRIBUTE_GCC_DIAG(6,7);
  
    const char *test_show_locus (rich_location &richloc);
diff -Nrcpad gcc-16-20250504/gcc/selftest-logical-location.cc gcc-16-20250511/gcc/selftest-logical-location.cc
*** gcc-16-20250504/gcc/selftest-logical-location.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest-logical-location.cc	Sun May 11 22:32:11 2025
*************** along with GCC; see the file COPYING3.
*** 21,69 ****
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
  #include "selftest-logical-location.h"
  
  #if CHECKING_P
  
  namespace selftest {
  
! /* class test_logical_location : public logical_location.  */
  
! test_logical_location::test_logical_location (enum logical_location_kind kind,
! 					      const char *name)
! : m_kind (kind),
!   m_name (name)
  {
  }
  
  const char *
! test_logical_location::get_short_name () const
  {
!   return m_name;
  }
  
  const char *
! test_logical_location::get_name_with_scope () const
  {
!   return m_name;
  }
  
  const char *
! test_logical_location::get_internal_name () const
  {
!   return m_name;
  }
  
  enum logical_location_kind
! test_logical_location::get_kind () const
  {
!   return m_kind;
  }
  
  label_text
! test_logical_location::get_name_for_path_output () const
  {
!   return label_text::borrow (m_name);
  }
  
  } // namespace selftest
--- 21,116 ----
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
+ #include "selftest.h"
  #include "selftest-logical-location.h"
  
  #if CHECKING_P
  
  namespace selftest {
  
! /* class test_logical_location_manager : public logical_location_manager.  */
  
! test_logical_location_manager::~test_logical_location_manager ()
  {
+   for (auto iter : m_name_to_item_map)
+     delete iter.second;
  }
  
  const char *
! test_logical_location_manager::get_short_name (key k) const
  {
!   auto item = item_from_key (k);
!   if (!item)
!     return nullptr;
!   return item->m_name;
  }
  
  const char *
! test_logical_location_manager::get_name_with_scope (key k) const
  {
!   auto item = item_from_key (k);
!   return item->m_name;
  }
  
  const char *
! test_logical_location_manager::get_internal_name (key k) const
  {
!   auto item = item_from_key (k);
!   return item->m_name;
  }
  
  enum logical_location_kind
! test_logical_location_manager::get_kind (key k) const
  {
!   auto item = item_from_key (k);
!   return item->m_kind;
  }
  
  label_text
! test_logical_location_manager::get_name_for_path_output (key k) const
  {
!   auto item = item_from_key (k);
!   return label_text::borrow (item->m_name);
! }
! 
! logical_location
! test_logical_location_manager::
! logical_location_from_funcname (const char *funcname)
! {
!   const item *i = item_from_funcname (funcname);
!   return key::from_ptr (i);
! }
! 
! const test_logical_location_manager::item *
! test_logical_location_manager::item_from_funcname (const char *funcname)
! {
!   if (!funcname)
!     return nullptr;
! 
!   if (item **slot = m_name_to_item_map.get (funcname))
!     return *slot;
! 
!   item *i = new item (LOGICAL_LOCATION_KIND_FUNCTION, funcname);
!   m_name_to_item_map.put (funcname, i);
!   return i;
! }
! 
! /* Run all of the selftests within this file.  */
! 
! void
! selftest_logical_location_cc_tests ()
! {
!   test_logical_location_manager mgr;
! 
!   ASSERT_FALSE (mgr.logical_location_from_funcname (nullptr));
! 
!   logical_location loc_foo = mgr.logical_location_from_funcname ("foo");
!   logical_location loc_bar = mgr.logical_location_from_funcname ("bar");
! 
!   ASSERT_NE (loc_foo, loc_bar);
! 
!   ASSERT_STREQ (mgr.get_short_name (loc_foo), "foo");
!   ASSERT_STREQ (mgr.get_short_name (loc_bar), "bar");
  }
  
  } // namespace selftest
diff -Nrcpad gcc-16-20250504/gcc/selftest-logical-location.h gcc-16-20250511/gcc/selftest-logical-location.h
*** gcc-16-20250504/gcc/selftest-logical-location.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest-logical-location.h	Sun May 11 22:32:11 2025
*************** along with GCC; see the file COPYING3.
*** 30,53 ****
  
  namespace selftest {
  
! /* Concrete subclass of logical_location for use in selftests.  */
  
! class test_logical_location : public logical_location
  {
  public:
!   test_logical_location (enum logical_location_kind kind,
! 			 const char *name);
!   virtual const char *get_short_name () const final override;
!   virtual const char *get_name_with_scope () const final override;
!   virtual const char *get_internal_name () const final override;
!   virtual enum logical_location_kind get_kind () const final override;
!   virtual label_text get_name_for_path_output () const final override;
  
!   const char *get_name () const { return m_name; }
  
!  private:
!   enum logical_location_kind m_kind;
!   const char *m_name;
  };
  
  } // namespace selftest
--- 30,78 ----
  
  namespace selftest {
  
! /* Concrete subclass of logical_location_manager for use in selftests.  */
  
! class test_logical_location_manager : public logical_location_manager
  {
  public:
!   ~test_logical_location_manager ();
  
!   const char *get_short_name (key) const final override;
!   const char *get_name_with_scope (key) const final override;
!   const char *get_internal_name (key) const final override;
!   enum logical_location_kind get_kind (key) const final override;
!   label_text get_name_for_path_output (key) const final override;
!   key get_parent (key) const final override
!   {
!     return key ();
!   }
  
!   logical_location
!   logical_location_from_funcname (const char *funcname);
! 
! private:
!   struct item
!   {
!     item (enum logical_location_kind kind,
! 	  const char *name)
!     : m_kind (kind),
!       m_name (name)
!     {
!     }
! 
!     enum logical_location_kind m_kind;
!     const char *m_name;
!   };
! 
!   const item *
!   item_from_funcname (const char *funcname);
! 
!   static const item *item_from_key (logical_location k)
!   {
!     return k.cast_to<const item *> ();
!   }
! 
!   hash_map<nofree_string_hash, item *> m_name_to_item_map;
  };
  
  } // namespace selftest
diff -Nrcpad gcc-16-20250504/gcc/selftest-run-tests.cc gcc-16-20250511/gcc/selftest-run-tests.cc
*** gcc-16-20250504/gcc/selftest-run-tests.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest-run-tests.cc	Sun May 11 22:32:11 2025
*************** selftest::run_tests ()
*** 92,102 ****
--- 92,104 ----
    digraph_cc_tests ();
    tristate_cc_tests ();
    ipa_modref_tree_cc_tests ();
+   selftest_logical_location_cc_tests ();
  
    /* Higher-level tests, or for components that other selftests don't
       rely on.  */
    diagnostic_color_cc_tests ();
    diagnostic_show_locus_cc_tests ();
+   diagnostic_format_html_cc_tests ();
    diagnostic_format_json_cc_tests ();
    diagnostic_format_sarif_cc_tests ();
    edit_context_cc_tests ();
diff -Nrcpad gcc-16-20250504/gcc/selftest.h gcc-16-20250511/gcc/selftest.h
*** gcc-16-20250504/gcc/selftest.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/selftest.h	Sun May 11 22:32:11 2025
*************** extern void bitmap_cc_tests ();
*** 221,226 ****
--- 221,227 ----
  extern void cgraph_cc_tests ();
  extern void convert_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_path_cc_tests ();
*************** extern void read_rtl_function_cc_tests (
*** 257,262 ****
--- 258,264 ----
  extern void rtl_tests_cc_tests ();
  extern void sbitmap_cc_tests ();
  extern void selftest_cc_tests ();
+ extern void selftest_logical_location_cc_tests ();
  extern void simple_diagnostic_path_cc_tests ();
  extern void simplify_rtx_cc_tests ();
  extern void spellcheck_cc_tests ();
diff -Nrcpad gcc-16-20250504/gcc/simple-diagnostic-path.cc gcc-16-20250511/gcc/simple-diagnostic-path.cc
*** gcc-16-20250504/gcc/simple-diagnostic-path.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/simple-diagnostic-path.cc	Sun May 11 22:32:11 2025
*************** along with GCC; see the file COPYING3.
*** 34,41 ****
  
  /* class simple_diagnostic_path : public diagnostic_path.  */
  
! simple_diagnostic_path::simple_diagnostic_path (pretty_printer *event_pp)
! : m_event_pp (event_pp),
    m_localize_events (true)
  {
    add_thread ("main");
--- 34,44 ----
  
  /* class simple_diagnostic_path : public diagnostic_path.  */
  
! simple_diagnostic_path::
! simple_diagnostic_path (const tree_logical_location_manager &logical_loc_mgr,
! 			pretty_printer *event_pp)
! : diagnostic_path (logical_loc_mgr),
!   m_event_pp (event_pp),
    m_localize_events (true)
  {
    add_thread ("main");
*************** simple_diagnostic_event (location_t loc,
*** 161,167 ****
  			 int depth,
  			 const char *desc,
  			 diagnostic_thread_id_t thread_id)
! : m_loc (loc), m_fndecl (fndecl), m_logical_loc (fndecl),
    m_depth (depth), m_desc (xstrdup (desc)),
    m_connected_to_next_event (false),
    m_thread_id (thread_id)
--- 164,171 ----
  			 int depth,
  			 const char *desc,
  			 diagnostic_thread_id_t thread_id)
! : m_loc (loc), m_fndecl (fndecl),
!   m_logical_loc (tree_logical_location_manager::key_from_tree (fndecl)),
    m_depth (depth), m_desc (xstrdup (desc)),
    m_connected_to_next_event (false),
    m_thread_id (thread_id)
*************** namespace selftest {
*** 188,198 ****
  static void
  test_intraprocedural_path (pretty_printer *event_pp)
  {
    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 (event_pp);
    path.add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "first %qs", "free");
    path.add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "double %qs", "free");
  
--- 192,203 ----
  static void
  test_intraprocedural_path (pretty_printer *event_pp)
  {
+   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);
    path.add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "first %qs", "free");
    path.add_event (UNKNOWN_LOCATION, fndecl_foo, 0, "double %qs", "free");
  
diff -Nrcpad gcc-16-20250504/gcc/simple-diagnostic-path.h gcc-16-20250511/gcc/simple-diagnostic-path.h
*** gcc-16-20250504/gcc/simple-diagnostic-path.h	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/simple-diagnostic-path.h	Sun May 11 22:32:11 2025
*************** class simple_diagnostic_event : public d
*** 40,51 ****
    location_t get_location () const final override { return m_loc; }
    int get_stack_depth () const final override { return m_depth; }
    void print_desc (pretty_printer &pp) const final override;
!   const logical_location *get_logical_location () const final override
    {
!     if (m_fndecl)
!       return &m_logical_loc;
!     else
!       return nullptr;
    }
    meaning get_meaning () const final override
    {
--- 40,48 ----
    location_t get_location () const final override { return m_loc; }
    int get_stack_depth () const final override { return m_depth; }
    void print_desc (pretty_printer &pp) const final override;
!   logical_location get_logical_location () const final override
    {
!     return tree_logical_location_manager::key_from_tree (m_fndecl);
    }
    meaning get_meaning () const final override
    {
*************** class simple_diagnostic_event : public d
*** 70,76 ****
   private:
    location_t m_loc;
    tree m_fndecl;
!   tree_logical_location m_logical_loc;
    int m_depth;
    char *m_desc; // has been i18n-ed and formatted
    bool m_connected_to_next_event;
--- 67,73 ----
   private:
    location_t m_loc;
    tree m_fndecl;
!   logical_location m_logical_loc;
    int m_depth;
    char *m_desc; // has been i18n-ed and formatted
    bool m_connected_to_next_event;
*************** private:
*** 98,104 ****
  class simple_diagnostic_path : public diagnostic_path
  {
   public:
!   simple_diagnostic_path (pretty_printer *event_pp);
  
    unsigned num_events () const final override { return m_events.length (); }
    const diagnostic_event & get_event (int idx) const final override;
--- 95,102 ----
  class simple_diagnostic_path : public diagnostic_path
  {
   public:
!   simple_diagnostic_path (const tree_logical_location_manager &logical_loc_mgr,
! 			  pretty_printer *event_pp);
  
    unsigned num_events () const final override { return m_events.length (); }
    const diagnostic_event & get_event (int idx) const final override;
diff -Nrcpad gcc-16-20250504/gcc/simplify-rtx.cc gcc-16-20250511/gcc/simplify-rtx.cc
*** gcc-16-20250504/gcc/simplify-rtx.cc	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/simplify-rtx.cc	Sun May 11 22:32:11 2025
*************** simplify_context::simplify_ternary_opera
*** 7387,7392 ****
--- 7387,7399 ----
  	      return gen_rtx_CONST_VECTOR (mode, v);
  	    }
  
+ 	  if (swap_commutative_operands_p (op0, op1)
+ 	      /* Two operands have same precedence, then first bit of mask
+ 		 select first operand.  */
+ 	      || (!swap_commutative_operands_p (op1, op0) && !(sel & 1)))
+ 	    return simplify_gen_ternary (code, mode, mode, op1, op0,
+ 					 GEN_INT (~sel & mask));
+ 
  	  /* Replace (vec_merge (vec_merge a b m) c n) with (vec_merge b c n)
  	     if no element from a appears in the result.  */
  	  if (GET_CODE (op0) == VEC_MERGE)
diff -Nrcpad gcc-16-20250504/gcc/testsuite/ChangeLog gcc-16-20250511/gcc/testsuite/ChangeLog
*** gcc-16-20250504/gcc/testsuite/ChangeLog	Sun May  4 22:32:16 2025
--- gcc-16-20250511/gcc/testsuite/ChangeLog	Sun May 11 22:32:11 2025
***************
*** 1,3 ****
--- 1,587 ----
+ 2025-05-10  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group1/simple-if.cob: Make explicitly >>SOURCE FREE
+ 
+ 2025-05-10  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/102891
+ 	* gfortran.dg/transfer_array_subref.f90: New test.
+ 
+ 2025-05-10  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gcc.target/i386/minmax-6.c: xfail test that pmax is used.
+ 	* gcc.target/i386/minmax-7.c: xfall test that pmin is used.
+ 
+ 2025-05-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/120193
+ 	* gfortran.dg/guality/pr120193.f90: New test.
+ 
+ 2025-05-10  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* gcc.target/aarch64/pr99988.c: Add -fno-bit-tests.
+ 
+ 2025-05-10  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	PR tree-optimization/120080
+ 	* gcc.dg/tree-ssa/pr120080.c: New test.
+ 
+ 2025-05-10  Co-authored-by: Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/ior-synthesis-1.c: New test.
+ 	* gcc.target/riscv/ior-synthesis-2.c: New test.
+ 	* gcc.target/riscv/xor-synthesis-1.c: New test.
+ 	* gcc.target/riscv/xor-synthesis-2.c: New test.
+ 	* gcc.target/riscv/xor-synthesis-3.c: New test.
+ 
+ 2025-05-10  Anton Blanchard  <antonb@tenstorrent.com>
+ 
+ 	* gcc.target/riscv/rvv/base/crc-builtin-zvbc.c: New test.
+ 
+ 2025-05-10  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.dg/pr87600.h (REG1, REG2): Test for __PPC__ as well.
+ 	* gcc.dg/pr89313.c (REG): Likewise.
+ 
+ 2025-05-10  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/powerpc/block-cmp-8.c: Require powerpc64
+ 	instruction execution support.
+ 
+ 2025-05-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120204
+ 	* g++.dg/cpp1y/constexpr-recursion3.C: New test.
+ 
+ 2025-05-09  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/99599
+ 	PR c++/120185
+ 	* g++.dg/cpp2a/concepts-nondep6.C: New test.
+ 
+ 2025-05-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/opt106.adb: New test.
+ 	* gnat.dg/opt106_pkg1.ads, gnat.dg/opt106_pkg1.adb: New helper.
+ 	* gnat.dg/opt106_pkg2.ads, gnat.dg/opt106_pkg2.adb: Likewise.
+ 
+ 2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/120182
+ 	* gcc.dg/torture/pr120182.c: New testcase.
+ 
+ 2025-05-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119960
+ 	* gcc.dg/vect/bb-slp-pr119960-1.c: New testcase.
+ 
+ 2025-05-09  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* g++.dg/cpp2a/constinit16.C: Require tls.
+ 
+ 2025-05-09  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* g++.dg/cpp2a/decomp2.C: Require tls_runtime.
+ 
+ 2025-05-09  Jiawei  <jiawei@iscas.ac.cn>
+ 
+ 	* gcc.dg/pr119160.c: Limit backends.
+ 
+ 2025-05-09  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	* gcc.target/aarch64/sve/ptrue_ldr_str.c: New test.
+ 	* gcc.target/aarch64/sve/acle/general/attributes_6.c: Adjust
+ 	expected outcome.
+ 	* gcc.target/aarch64/sve/cost_model_14.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/cost_model_4.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/cost_model_5.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/cost_model_6.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/cost_model_7.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_f16.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_f32.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_f64.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_mf8.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_s16.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_s32.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_s64.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_s8.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_u16.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_u32.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_u64.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/pcs/varargs_2_u8.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/peel_ind_2.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/single_1.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/single_2.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/single_3.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/single_4.c: Adjust expected outcome.
+ 
+ 2025-05-09  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116792
+ 	* gcc.dg/plugin/diagnostic_plugin_xhtml_format.cc: Move to
+ 	gcc/diagnostic-format-html.cc.
+ 	* gcc.dg/html-output/html-output.exp: New support script.
+ 	* gcc.dg/html-output/missing-semicolon.c: New test.
+ 	* gcc.dg/html-output/missing-semicolon.py: New test script.
+ 	* gcc.dg/plugin/diagnostic-test-xhtml-1.c: Deleted test.
+ 	* gcc.dg/plugin/plugin.exp (plugin_test_list): Drop moved plugin
+ 	and its deleted test.
+ 	* lib/gcc-dg.exp (load_lib): Add load_lib of scanhtml.exp.
+ 	* lib/htmltest.py: New support script.
+ 	* lib/scanhtml.exp: New support script, based on scansarif.exp.
+ 
+ 2025-05-09  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u8.c: New test.
+ 
+ 2025-05-09  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u8.c: New test.
+ 
+ 2025-05-09  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u8.c: New test.
+ 
+ 2025-05-09  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Rename VX_BINARY
+ 	to VX_BINARY_CASE_0 for underlying case 1.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i16.c: Take the
+ 	new name for test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i8.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u16.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u8.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i16.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i8.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u16.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u8.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i16.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i8.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u16.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u8.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i8.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u16.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u32.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u64.c: Ditto
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u8.c: Ditto
+ 
+ 2025-05-09  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/rvv.exp: Separate test running of
+ 	rvv vx_vf.
+ 
+ 2025-05-08  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/120179
+ 	* gfortran.dg/do_concurrent_basic.f90: Extend testcase.
+ 
+ 2025-05-08  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/99599
+ 	* g++.dg/cpp2a/concepts-recursive-sat4.C: Adjust again.
+ 	* g++.dg/cpp2a/concepts-nondep5.C: New test.
+ 
+ 2025-05-08  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR testsuite/120168
+ 	* gcc.dg/tree-ssa/pr31261.c: Use `signed char` instead
+ 	of plain char.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120043
+ 	* gcc.dg/torture/pr120043.c: New testcase.
+ 
+ 2025-05-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libfortran/120152
+ 	PR libfortran/120153
+ 	PR libfortran/120158
+ 	* gfortran.dg/pr120152_1.f90: New test.
+ 	* gfortran.dg/pr120152_2.f90: New test.
+ 	* gfortran.dg/pr120153.f90: New test.
+ 	* gfortran.dg/pr120158.f90: New test.
+ 
+ 2025-05-08  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116938
+ 	* gcc.dg/tree-ssa/phi-opt-40.c: Update to expect ABSU_EXPR.
+ 	* gcc.dg/tree-ssa/phi-opt-41.c: Likewise.
+ 
+ 2025-05-08  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/120122
+ 	PR tree-optimization/116939
+ 	* gcc.dg/torture/pr120122-1.c: New test.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/120146
+ 	* g++.dg/ipa/pr120146.C: New testcase.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120143
+ 	* gcc.dg/vect/vect-early-break_135-pr120143.c: New testcase.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120089
+ 	* gcc.dg/vect/vect-early-break_134-pr120089.c: New testcase.
+ 
+ 2025-05-07  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/120137
+ 	PR target/120154
+ 	* gcc.target/riscv/pr120137.c: New test.
+ 	* gcc.target/riscv/pr120154.c: New test.
+ 
+ 2025-05-07  Dongyan Chen  <chendongyan@isrc.iscas.ac.cn>
+ 
+ 	* gcc.target/riscv/arch-48.c: New test.
+ 
+ 2025-05-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/110796
+ 	PR target/118446
+ 	* gcc.target/arm/armv8_2-fp16-arith-1.c: Adjust due to no-longer
+ 	emitting VCMPE when -ffast-math..
+ 
+ 2025-05-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR preprocessor/108900
+ 	PR preprocessor/116047
+ 	PR preprocessor/120061
+ 	* gcc.dg/plugin/plugin.exp: Add location-overflow-test-pr116047.c
+ 	and location-overflow-test-pr120061.c.
+ 	* gcc.dg/plugin/location_overflow_plugin.cc (plugin_init): Don't error
+ 	on unknown values, instead just break.  Handle 0x4fHHHHHH arguments
+ 	differently.
+ 	* gcc.dg/plugin/location-overflow-test-pr116047.c: New test.
+ 	* gcc.dg/plugin/location-overflow-test-pr116047-1.h: New test.
+ 	* gcc.dg/plugin/location-overflow-test-pr116047-2.h: New test.
+ 	* gcc.dg/plugin/location-overflow-test-pr120061.c: New test.
+ 	* gcc.dg/plugin/location-overflow-test-pr120061-1.h: New test.
+ 	* gcc.dg/plugin/location-overflow-test-pr120061-2.h: New test.
+ 
+ 2025-05-07  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gcc.target/i386/pr119919.c: Add -mtune=znver1
+ 
+ 2025-05-07  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	PR target/117978
+ 	* gcc.target/aarch64/sve/acle/general/whilelt_5.c: Adjust expected
+ 	outcome.
+ 	* gcc.target/aarch64/sve/ldst_ptrue_pat_128_to_neon.c: New test.
+ 	* gcc.target/aarch64/sve/while_7.c: Adjust expected outcome.
+ 	* gcc.target/aarch64/sve/while_9.c: Adjust expected outcome.
+ 
+ 2025-05-07  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/s390/vector/cstoreti-1.c: New test.
+ 	* gcc.target/s390/vector/cstoreti-2.c: New test.
+ 
+ 2025-05-07  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120036
+ 	* g++.target/i386/pr120036.C: New test.
+ 	* gcc.target/i386/pr117839-3a.c: Likewise.
+ 	* gcc.target/i386/pr117839-3b.c: Likewise.
+ 
+ 2025-05-07  Paul Thomas  <pault@gcc.gnu.org>
+ 	    and Steven G. Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/119948
+ 	* gfortran.dg/pr119948.f90: Update to incorporate failing test,
+ 	where module procedure is the result. Test submodule cases.
+ 
+ 2025-05-07  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* g++.target/riscv/redundant-andi.C: New test.
+ 
+ 2025-05-06  Dongyan Chen  <chendongyan@isrc.iscas.ac.cn>
+ 
+ 	* gcc.target/riscv/arch-47.c: New test.
+ 
+ 2025-05-06  Mingzhu Yan  <yanmingzhu@iscas.ac.cn>
+ 
+ 	* gcc.target/riscv/arch-45.c: New test.
+ 	* gcc.target/riscv/arch-46.c: New test.
+ 
+ 2025-05-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/120049
+ 	* gfortran.dg/pr120049_a.f90: New test.
+ 	* gfortran.dg/pr120049_b.f90: New test.
+ 
+ 2025-05-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/119928
+ 	* gfortran.dg/interface_60.f90: New test.
+ 
+ 2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/119852
+ 	* gcc.dg/ipa/pr119852.c: New test.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR sarif-replay/117988
+ 	* sarif-replay.dg/2.1.0-invalid/3.1-not-an-object.sarif: Add
+ 	expected logical location.
+ 	* sarif-replay.dg/2.1.0-invalid/3.11.11-missing-arguments-for-placeholders.sarif:
+ 	Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.11.11-not-enough-arguments-for-placeholders.sarif:
+ 	Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.11.5-unescaped-braces.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.13.2-no-version.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.13.2-version-not-a-string.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.13.4-bad-runs.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.13.4-no-runs.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.13.4-non-object-in-runs.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.27.10-bad-level.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-invalid/3.33.3-index-out-of-range.sarif: Likewise.
+ 	* sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif: Likewise.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* libgdiagnostics.dg/test-nested-logical-locations-json-c.py: New test.
+ 	* libgdiagnostics.dg/test-nested-logical-locations-json.c: New test.
+ 	* sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif: New test.
+ 	* sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif: New test.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116176
+ 	* g++.dg/sarif-output/logical-locations-1.C: New test.
+ 	* g++.dg/sarif-output/logical-locations-1.py: New test script.
+ 	* g++.dg/sarif-output/logical-locations-2.C: New test.
+ 	* g++.dg/sarif-output/logical-locations-2.py: New test script.
+ 	* g++.dg/sarif-output/logical-locations-3.C: New test.
+ 	* g++.dg/sarif-output/logical-locations-3.py: New test script.
+ 	* g++.dg/sarif-output/sarif-output.exp: New script, adapted
+ 	from gcc.dg/sarif-output/sarif-output.exp.
+ 	* libgdiagnostics.dg/test-logical-location-c.py: Update for using
+ 	theRun.logicalLocations.
+ 	* libgdiagnostics.dg/test-warning-with-path-c.py: Likewise.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* gcc.dg/plugin/diagnostic_plugin_test_paths.cc: Update for
+ 	changes to simple_diagnostic_path.
+ 
+ 2025-05-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* libgdiagnostics.dg/test-logical-location.c: Include
+ 	<string.h>.
+ 	(main): Verify that the accessors work.
+ 	* libgdiagnostics.dg/test-logical-location.cc: New test.
+ 
+ 2025-05-06  Shreya Munnangi  <smunnangi1@ventanamicro.com>
+ 
+ 	PR middle-end/114512
+ 	* gcc.target/riscv/pr114512.c: New test.
+ 
+ 2025-05-06  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u8.c: New test.
+ 
+ 2025-05-06  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u8.c: New test.
+ 
+ 2025-05-06  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/rvv.exp: Add new folder vx_vf for all
+ 	vec_dup + vv to vx testcases.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u8.c: New test.
+ 
+ 2025-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/1157777
+ 	* gcc.dg/vect/bb-slp-pr115777.c: New testcase.
+ 
+ 2025-05-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/120074
+ 	* gcc.dg/pr120074.c: New test.
+ 
+ 2025-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120031
+ 	* gcc.target/i386/pr120031.c: New testcase.
+ 
+ 2025-05-05  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/119971
+ 	* gcc.target/riscv/pr119971.c: New test.
+ 	* gcc.target/riscv/zbb-rol-ror-03.c: Adjust test slightly.
+ 
+ 2025-05-05  Uros Bizjak  <ubizjak@gmail.com>
+ 	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR target/120019
+ 	* gcc.target/i386/pr111657-1.c (dg-do): Change to "assemble".
+ 	(dg-options): Remove -masm=att and add -save-temps.
+ 	(dg-final): Update scan-assembler and scan-assembler-not strings.
+ 
+ 2025-05-05  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120117
+ 	* gm2/pim/pass/highbit.mod: New test.
+ 	* gm2/pim/pass/highbit2.mod: New test.
+ 
+ 2025-05-05  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120048
+ 	* gcc.dg/pr120048.c: New.
+ 
+ 2025-05-05  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/120054
+ 	* gcc.target/riscv/predef-19.c: Adjust testcase.
+ 
+ 2025-05-05  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR testsuite/120085
+ 	* gcc.dg/lto/modref-2_0.c: Link test with libm.
+ 
+ 2025-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/finalizable1.ads: New test.
+ 
+ 2025-05-05  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR middle-end/112877
+ 	* gcc.dg/vect/vect-simd-clone-16c.c: Fix target selector syntax.
+ 	* gcc.dg/vect/vect-simd-clone-16d.c: Likewise.
+ 	* gcc.dg/vect/vect-simd-clone-17c.c: Likewise.
+ 	* gcc.dg/vect/vect-simd-clone-17d.c: Likewise.
+ 	* gcc.dg/vect/vect-simd-clone-18c.c: Likewise.
+ 	* gcc.dg/vect/vect-simd-clone-18d.c: Likewise.
+ 
+ 2025-05-05  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/118163
+ 	PR c++/118392
+ 	* g++.dg/diagnostic/incomplete-type-2.C: New test.
+ 	* g++.dg/diagnostic/incomplete-type-2a.C: New test.
+ 	* g++.dg/diagnostic/inhibit-warn-3.C: New test.
+ 
+ 2025-05-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR testsuite/120084
+ 	* gcc.dg/lto/pr60779_0.c: Require linker-plugin.
+ 
+ 2025-05-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/119986
+ 	* gfortran.dg/actual_array_subref.f90: New test.
+ 
+ 2025-05-04  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/rvv/vsetvl/avl_prop-2.c: Disable jump threading
+ 	and adjust number of expected vsetvls as needed.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-56.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-67.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-68.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-71.c: Likewise.
+ 
+ 2025-05-04  Jin Ma  <jinma@linux.alibaba.com>
+ 	    Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* gcc.target/riscv/modifier-H-error-1.c: New test.
+ 	* gcc.target/riscv/modifier-H-error-2.c: New test.
+ 	* gcc.target/riscv/modifier-H.c: New test.
+ 
+ 2025-05-04  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/xtheadfmemidx-xtheadfmv-medany.c: Adjust expected
+ 	output.
+ 	* gcc.target/riscv/xtheadfmemidx-zfa-medany.c: Likewise.
+ 	* gcc.target/riscv/xtheadfmv-fmv.c: Skip for -Os and -Oz.
+ 	* gcc.target/riscv/zfa-fmovh-fmovp.c: Use sifive-p400 tuning.
+ 
+ 2025-05-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c: Adjust
+ 	the asm dump check times.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c: Ditto.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c: Ditto.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-74.c: Ditto.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-75.c: Ditto.
+ 
  2025-05-03  Jason Merrill  <jason@redhat.com>
  
  	PR c++/85944
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group1/simple-if.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group1/simple-if.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group1/simple-if.cob	Sun May  4 22:32:17 2025
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group1/simple-if.cob	Sun May 11 22:32:11 2025
***************
*** 19,25 ****
  *> { dg-output {CORRECTLY_TRUE: A_4 NOT  = B_4(\n|\r\n|\r)} }
  *> { dg-output {CORRECTLY_ELSE: A_4 NOT  > B_4(\n|\r\n|\r)} }
  *> { dg-output { } }
! * Not strictly Reference Format
          IDENTIFICATION DIVISION.
          PROGRAM-ID. test.
          DATA DIVISION.
--- 19,25 ----
  *> { dg-output {CORRECTLY_TRUE: A_4 NOT  = B_4(\n|\r\n|\r)} }
  *> { dg-output {CORRECTLY_ELSE: A_4 NOT  > B_4(\n|\r\n|\r)} }
  *> { dg-output { } }
!         >>SOURCE FREE
          IDENTIFICATION DIVISION.
          PROGRAM-ID. test.
          DATA DIVISION.
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/258_Nested_PERFORM.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        PROCEDURE        DIVISION.
+            PERFORM 2 TIMES
+              DISPLAY "X" NO ADVANCING
+              END-DISPLAY
+              PERFORM 2 TIMES
+                DISPLAY "Y" NO ADVANCING
+                END-DISPLAY
+              END-PERFORM
+            END-PERFORM.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ XYYXYY
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/259_PERFORM_VARYING_BY_-0.2.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+           77 X             PIC 9v9.
+        PROCEDURE        DIVISION.
+            PERFORM VARYING X FROM 0.8 BY -0.2
+                    UNTIL   X < 0.4
+              DISPLAY "X" NO ADVANCING
+              END-DISPLAY
+            END-PERFORM.
+        IF X NOT = 0.2
+          DISPLAY "WRONG X: " X END-DISPLAY
+        END-IF
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ XXX
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,75 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/338_Default_Arithmetic__1_.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01 NUM-A   PIC 9(3) VALUE 399.
+        01 NUM-B   PIC 9(3) VALUE 211.
+        01 NUM-C   PIC 9(3)V99 VALUE 212.34.
+        01 NUMV1   PIC 9(3)V9.
+        01 PICX    PIC X VALUE 'A'.
+        01 RSLT    PIC 9(3).
+        01 RSLTV1  PIC 9(3).9.
+        01 RSLTV2  PIC 9(3).99.
+       *
+        PROCEDURE DIVISION.
+        MAIN.
+            COMPUTE RSLT = NUM-A + 1.1.
+            DISPLAY 'Simple Compute  RSLT IS ' RSLT
+            COMPUTE RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+            DISPLAY 'Single Variable RSLT IS ' RSLT
+            COMPUTE RSLTV2, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+            DISPLAY 'Compute  RSLT    IS ' RSLT
+            DISPLAY 'Compute  RSLTv99 IS ' RSLTV2
+            COMPUTE RSLTV1, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+            DISPLAY 'Compute  RSLT    IS ' RSLT
+            DISPLAY 'Compute  RSLTv9  IS ' RSLTV1
+            MOVE 0 TO RSLT
+            ADD NUM-C TO RSLT.
+            DISPLAY 'Add      RSLT    IS ' RSLT.
+            MOVE 0 TO RSLT
+            ADD NUM-A NUM-C 10 TO RSLT.
+            DISPLAY 'Add      RSLT    IS ' RSLT.
+            SUBTRACT NUM-C FROM RSLT.
+            DISPLAY 'Subtract RSLT    IS ' RSLT.
+            SUBTRACT NUM-A -10 FROM RSLT.
+            DISPLAY 'Subtract RSLT    IS ' RSLT.
+            MOVE 0 TO RSLT
+            ADD NUM-A NUM-C TO RSLT GIVING RSLTV1.
+            DISPLAY 'Add      RSLTv9  IS ' RSLTV1
+            MULTIPLY NUM-A BY NUM-C GIVING RSLT.
+            DISPLAY 'Multiply RSLT    IS ' RSLT.
+            MULTIPLY RSLT BY NUM-C.
+            DISPLAY 'Multiply RSLT    IS ' RSLT.
+            DIVIDE NUM-A BY 10 GIVING RSLT.
+            DISPLAY 'Divide   RSLT    IS ' RSLT.
+            DIVIDE RSLT BY 4 GIVING RSLTV1.
+            DISPLAY 'Divide   RSLTv9  IS ' RSLTV1.
+            DIVIDE RSLT BY 4 GIVING RSLT.
+            DISPLAY 'Divide   RSLT    IS ' RSLT.
+ 
+            COMPUTE RSLTV1, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+            DISPLAY 'Simple   RSLT    IS ' RSLT
+                            ' RSLTv9  IS ' RSLTV1.
+ 
+            COMPUTE RSLTV1, RSLT = ((NUM-A / (100.55 + -0.550))
+                                 -  (NUM-B / (10.11 * 10 - 1.1)))
+                                   * (220 / 2.2)
+            DISPLAY 'Complex  RSLT    IS ' RSLT
+                            ' RSLTv9  IS ' RSLTV1.
+ 
+            COMPUTE RSLTV1, RSLT = ((NUM-A / (101 - 1))
+                                 -  (NUM-B / (10 * 10))) * (200 / 2)
+            DISPLAY 'Reduced  RSLT    IS ' RSLT
+                            ' RSLTv9  IS ' RSLTV1.
+            MOVE NUM-A TO NUMV1.
+            IF ((NUMV1 / (101 - 1))
+               -  (NUM-B / (10 * 10))) * (200 / 2) EQUAL 188
+               DISPLAY "Not Using ARITHMETIC-OSVS"
+            ELSE
+               DISPLAY "Using ARITHMETIC-OSVS"
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,21 ----
+ Simple Compute  RSLT IS 400
+ Single Variable RSLT IS 188
+ Compute  RSLT    IS 188
+ Compute  RSLTv99 IS 188.00
+ Compute  RSLT    IS 188
+ Compute  RSLTv9  IS 188.0
+ Add      RSLT    IS 212
+ Add      RSLT    IS 621
+ Subtract RSLT    IS 408
+ Subtract RSLT    IS 019
+ Add      RSLTv9  IS 611.3
+ Multiply RSLT    IS 723
+ Multiply RSLT    IS 723
+ Divide   RSLT    IS 039
+ Divide   RSLTv9  IS 009.7
+ Divide   RSLT    IS 009
+ Simple   RSLT    IS 188 RSLTv9  IS 188.0
+ Complex  RSLT    IS 188 RSLTv9  IS 188.0
+ Reduced  RSLT    IS 188 RSLTv9  IS 188.0
+ Not Using ARITHMETIC-OSVS
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,113 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out" }
+ 
+         identification          division.
+         program-id.             prog.
+         procedure               division.
+         display "initialize zeroes"
+             call                    "prog-zeroes"
+         display "initialize low-value"
+             call                    "prog-low"
+         display "initialize spaces"
+             call                    "prog-space"
+         display "initialize high-value"
+             call                    "prog-high"
+         continue.
+         end program             prog.
+ 
+         identification          division.
+         program-id.             prog-space.
+         options. initialize working-storage spaces.
+         data                    division.
+         working-storage         section.
+         01   based-var          based.
+          02  based-x            pic x(24) value "I am I, Don Quixote".
+          02  based-9            pic 999   value 123.
+          02  based-p            pointer   value NULL.
+         01   allocated-pointer  pointer.
+         procedure division.
+         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+         allocate 35 characters returning allocated-pointer
+         set address of based-var to allocated-pointer
+         call        "reporter" using based-var
+         free        allocated-pointer
+         goback.
+         end program             prog-space.
+ 
+         identification          division.
+         program-id.             prog-low.
+         options. initialize working-storage low-values.
+         data                    division.
+         working-storage         section.
+         01   based-var          based.
+          02  based-x            pic x(24) value "I am I, Don Quixote".
+          02  based-9            pic 999   value 123.
+          02  based-p            pointer   value NULL.
+         01   allocated-pointer  pointer.
+         procedure division.
+         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+         allocate 35 characters returning allocated-pointer
+         set address of based-var to allocated-pointer
+         call        "reporter" using based-var
+         free        allocated-pointer
+         goback.
+         end program             prog-low.
+ 
+         identification          division.
+         program-id.             prog-zeroes.
+         options. initialize working-storage binary zeroes.
+         data                    division.
+         working-storage         section.
+         01   based-var          based.
+          02  based-x            pic x(24) value "I am I, Don Quixote".
+          02  based-9            pic 999   value 123.
+          02  based-p            pointer   value NULL.
+         01   allocated-pointer  pointer.
+         procedure division.
+         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+         allocate 35 characters returning allocated-pointer
+         set address of based-var to allocated-pointer
+         call        "reporter" using based-var
+         free        allocated-pointer
+         goback.
+         end program             prog-zeroes.
+ 
+         identification          division.
+         program-id.             prog-high.
+         options. initialize working-storage high-values.
+         data                    division.
+         working-storage         section.
+         01   based-var          based.
+          02  based-x            pic x(24) value "I am I, Don Quixote".
+          02  based-9            pic 999   value 123.
+          02  based-p            pointer   value NULL.
+         01   allocated-pointer  pointer.
+         procedure division.
+         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+         allocate 35 characters returning allocated-pointer
+         set address of based-var to allocated-pointer
+         call        "reporter" using based-var
+         free        allocated-pointer
+         goback.
+         end program             prog-high.
+ 
+         identification          division.
+         program-id.             reporter.
+         data                    division.
+         linkage                 section.
+         01   based-var          based.
+          02  based-x            pic x(24).
+          02  based-9            pic 999  .
+          02  based-p            pointer  .
+         procedure division      using based-var.
+         reportt.
+             display "   (1) as allocated"
+             perform reportt2
+             goback.
+         reportt2.
+             display "       " """" based-x """" with no advancing
+             display space     """" based-9 """" with no advancing
+             display space       based-p.
+             continue.
+         end program             reporter.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,17 ----
+ initialize zeroes
+ allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+    (1) as allocated
+        "" "" 0x0000000000000000
+ initialize low-value
+ allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+    (1) as allocated
+        "" "" 0x0000000000000000
+ initialize spaces
+ allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+    (1) as allocated
+        "                        " "   " 0x2020202020202020
+ initialize high-value
+ allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+    (1) as allocated
+        "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" "¿¿¿" 0xffffffffffffffff
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,73 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/ALLOCATE___FREE_basic_default_versions.out" }
+ 
+         program-id.         prog.
+         data                division.
+         working-storage     section.
+         01 based-var        pic x(100) based.
+         01 mem-pointer      pointer.
+         01 mem-size         pic 999 value 100.
+         01 counter          pic 99 value zero.
+         procedure division.
+         allocate 100        characters returning mem-pointer.
+             if mem-pointer equal NULL
+                 display "allocate 100 should not be NULL (1)"
+             else
+                 add 1 to counter.
+         free mem-pointer
+             if mem-pointer not equal NULL
+                 display "mem-pointer should be NULL again (1)"
+             else
+                 add 1 to counter.
+ 
+         allocate mem-size   characters returning mem-pointer.
+             if mem-pointer equal null
+                 display "allocate mem-size should not be NULL (2)"
+             else
+                 add 1 to counter.
+         free mem-pointer
+             if mem-pointer not equal null
+                 display "mem-pointer should be NULL again (2)"
+             else
+                 add 1 to counter.
+ 
+         allocate based-var
+             if address of based-var equal NULL
+                 display "address of based-var should not be NULL (1)"
+             else
+                 add 1 to counter
+         free based-var
+             if address of based-var not equal NULL
+                 display "address of based-var be NULL (1)"
+             else
+                 add 1 to counter.
+ 
+         allocate based-var
+             if address of based-var equal NULL
+                 display "address of based-var should not be NULL (2)"
+             else
+                 add 1 to counter.
+         free address of based-var
+             if address of based-var not equal NULL
+                 display "address of based-var be NULL (2)"
+             else
+                 add 1 to counter.
+ 
+         allocate based-var returning mem-pointer.
+         if address of based-var equal NULL
+             display "address of based-var should not be NULL (3)"
+         else
+             add 1 to counter.
+         if mem-pointer equal NULL
+             display "address of mem-pointer should not be NULL (3)"
+         else
+             add 1 to counter.
+         if address of based-var not equal mem-pointer
+             display "address of mem-pointer should be equal to mem-pointer (3)"
+         else
+             add 1 to counter.
+ 
+         display "There were " counter " successful tests; should be 11."
+         goback.
+         end program prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ There were 11 successful tests; should be 11.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        LINKAGE          SECTION.
+        01  MYFLD        PIC X(6) BASED VALUE "ABCDEF".
+        PROCEDURE        DIVISION.
+        ASTART SECTION.
+        A01.
+            ALLOCATE MYFLD INITIALIZED.
+            IF MYFLD NOT = "ABCDEF"
+               DISPLAY MYFLD
+               END-DISPLAY
+            END-IF.
+            FREE ADDRESS OF MYFLD.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,35 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 MYFLD         BASED.
+              03 MYFLDX  PIC X.
+              03 MYFLD9  PIC 9.
+        PROCEDURE        DIVISION.
+            IF ADDRESS OF MYFLD NOT = NULL
+               DISPLAY "BASED ITEM WITH ADDRESS ON START"
+               END-DISPLAY
+            END-IF.
+            FREE MYFLD.
+            ALLOCATE MYFLD.
+            IF ADDRESS OF MYFLD = NULL
+               DISPLAY "BASED ITEM WITHOUT ADDRESS AFTER ALLOCATE"
+               END-DISPLAY
+            END-IF.
+            INITIALIZE MYFLD.
+            IF MYFLD NOT = " 0"
+               DISPLAY "BASED ITEM INITIALIZED WRONG: "
+                  WITH NO ADVANCING
+               END-DISPLAY
+               DISPLAY MYFLD
+               END-DISPLAY
+            END-IF.
+ 
+            FREE ADDRESS OF MYFLD.
+            IF ADDRESS OF MYFLD NOT = NULL
+               DISPLAY "BASED ITEM WITH ADDRESS AFTER FREE"
+               END-DISPLAY
+            END-IF.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,27 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/ANY_LENGTH__1_.out" }
+ 
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      caller.
+         DATA             DIVISION.
+         WORKING-STORAGE  SECTION.
+         01 P1            PIC X(6) VALUE "OKOKOK".
+         PROCEDURE        DIVISION.
+             CALL "callee" USING P1
+             END-CALL.
+             STOP RUN.
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      callee.
+         DATA             DIVISION.
+         WORKING-STORAGE  SECTION.
+         01 P2            PIC 99.
+         LINKAGE          SECTION.
+         01 P1            PIC X ANY LENGTH.
+         PROCEDURE        DIVISION USING P1.
+             MOVE FUNCTION LENGTH (P1) TO P2.
+             DISPLAY "The incoming ANY LENGTH is " P2
+             DISPLAY "The incoming ANY LENGTH variable is " """" P1 """"
+             EXIT PROGRAM.
+         END PROGRAM callee.
+         END PROGRAM caller.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ The incoming ANY LENGTH is 06
+ The incoming ANY LENGTH variable is "OKOKOK"
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,33 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/ANY_LENGTH__2_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      caller.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 P1            PIC X(2) VALUE "OK".
+        PROCEDURE        DIVISION.
+            CALL "callee" USING P1
+            END-CALL.
+            DISPLAY "On return, P1 is " """" P1 """"
+            STOP RUN.
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      callee.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 P2            PIC XXX.
+        LINKAGE          SECTION.
+        01 P1            PIC X ANY LENGTH.
+        PROCEDURE        DIVISION USING P1.
+            MOVE P1 TO P2.
+            DISPLAY "P1 is " """" P1 """"
+            DISPLAY "P2 is " """" P2 """"
+            IF P2 NOT = "OK "
+               DISPLAY P2
+               END-DISPLAY
+            END-IF.
+            MOVE SPACE TO P1.
+            EXIT PROGRAM.
+        END PROGRAM callee.
+        END PROGRAM caller.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ P1 is "OK"
+ P2 is "OK "
+ On return, P1 is "  "
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,25 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/ANY_LENGTH__3_.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01 str PIC X(20) VALUE ALL "X".
+        PROCEDURE DIVISION.
+            CALL "subprog" USING str.
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. subprog.
+        DATA DIVISION.
+        LINKAGE SECTION.
+        01 str PIC X ANY LENGTH.
+        PROCEDURE DIVISION USING str.
+            MOVE "abcd" TO str
+            DISPLAY FUNCTION TRIM (str)
+            MOVE "abcd" TO str (5:)
+            DISPLAY FUNCTION TRIM (str)
+            MOVE ALL "a" TO str
+            DISPLAY FUNCTION TRIM (str).
+        END PROGRAM subprog.
+        END PROGRAM prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ abcd
+ abcdabcd
+ aaaaaaaaaaaaaaaaaaaa
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,33 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+ 
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01 str PIC X(20) VALUE ALL "X".
+ 
+        PROCEDURE DIVISION.
+            CALL "subprog" USING str
+            move '   45'   to str
+            CALL "subprog" USING str
+            .
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. subprog.
+ 
+        DATA DIVISION.
+        LINKAGE SECTION.
+        01 str PIC X ANY LENGTH.
+ 
+        PROCEDURE DIVISION USING str.
+            IF str = 'X'
+              DISPLAY 'X is X'
+            END-IF
+            IF str = space
+              DISPLAY 'X is space'
+            END-IF
+            .
+        END PROGRAM subprog.
+        END PROGRAM prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/ANY_LENGTH__5_.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        PROCEDURE DIVISION.
+        CALL "subprog"
+        GOBACK.
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. subprog.
+        DATA DIVISION.
+        LINKAGE SECTION.
+        01 str1 PIC X ANY LENGTH.
+        01 str2 PIC X ANY LENGTH.
+        PROCEDURE DIVISION USING optional str1 optional str2.
+        DISPLAY 'IN' WITH NO ADVANCING.
+        END PROGRAM subprog.
+        END PROGRAM prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ IN
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,45 ----
+        *> { dg-do run }
+        *> { dg-options "-Wno-truncate" }
+        *> { dg-output-file "group2/Alphanumeric_MOVE_with_truncation.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01  x-left  PIC X(03).
+        01  x-right PIC X(03) JUSTIFIED RIGHT.
+        PROCEDURE DIVISION.
+            MOVE '1234' TO x-left, x-right
+            DISPLAY """" x-left """" space """" x-right """"
+            IF x-left  not = '123'
+            OR x-right not = '234'
+               DISPLAY 'error with "1234":'
+               END-DISPLAY
+               DISPLAY x-left
+               END-DISPLAY
+               DISPLAY x-right
+               END-DISPLAY
+            END-IF
+            MOVE '   3' TO x-left, x-right
+            DISPLAY """" x-left """" space """" x-right """"
+            IF x-left  not = spaces
+            OR x-right not = '  3'
+               DISPLAY 'error with "   3":'
+               END-DISPLAY
+               DISPLAY x-left
+               END-DISPLAY
+               DISPLAY x-right
+               END-DISPLAY
+            END-IF
+            MOVE '3   ' TO x-left, x-right
+            DISPLAY """" x-left """" space """" x-right """"
+            IF x-left  not = '3'
+            OR x-right not = spaces
+               DISPLAY 'error with "3   ":'
+               END-DISPLAY
+               DISPLAY x-left
+               END-DISPLAY
+               DISPLAY x-right
+               END-DISPLAY
+            END-IF.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ "123" "234"
+ "   " "  3"
+ "3  " "   "
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X-X           PIC XXXX VALUE "0001".
+        01 X-9           PIC 9999 COMP VALUE 1.
+        PROCEDURE        DIVISION.
+          IF X-X = X-9
+             STOP RUN
+          END-IF.
+          DISPLAY "NG" NO ADVANCING
+          END-DISPLAY
+          STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,38 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/CALL_with_OMITTED_parameter.out" }
+ 
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      caller.
+         DATA             DIVISION.
+         WORKING-STORAGE  SECTION.
+         01 P1            PIC X    VALUE "A".
+         01 P2            PIC X    VALUE "B".
+         PROCEDURE        DIVISION.
+             DISPLAY "Should see AB"
+             CALL "callee" USING P1 P2
+             DISPLAY "Should see A"
+             CALL "callee" USING P1
+             END-CALL.
+             DISPLAY "Should see A"
+             CALL "callee" USING P1 OMITTED
+             END-CALL.
+             STOP RUN.
+         END PROGRAM caller.
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      callee.
+        DATA             DIVISION.
+        LINKAGE          SECTION.
+        01 P1            PIC X.
+        01 P2            PIC X.
+        PROCEDURE        DIVISION USING P1 OPTIONAL P2.
+            DISPLAY """" P1 WITH NO ADVANCING
+            IF P2 NOT OMITTED
+               DISPLAY P2 """"
+               END-DISPLAY
+            ELSE
+               DISPLAY """"
+               END-DISPLAY
+            END-IF.
+            EXIT PROGRAM.
+         END PROGRAM callee.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,7 ----
+ Should see AB
+ "AB"
+ Should see A
+ "A"
+ Should see A
+ "A"
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,28 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/CONTINUE_AFTER_1_SECONDS.out" }
+ 
+         program-id. prog.
+         data division.
+         working-storage section.
+         01 tod pic x(64).
+         01 tstart pic 9999.
+         01 tend   pic 9999.
+         01 tspan  pic 9999.
+         procedure division.
+         accept tod from time
+         move tod(5:) to tstart
+         continue after 1.0 seconds.
+         accept tod from time
+         move tod(5:) to tend
+         if tend < tstart 
+             compute tend = tend + 6000
+         end-if
+         compute tspan = tend - tstart
+         if tspan >= 75 and tspan <= 125
+             display "Looks good"
+         else
+             display "Looks bad! " tstart space tend space tspan
+         end-if
+         goback.
+         end program prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ Looks good
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,22 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/CURRENCY_SIGN.out" }
+ 
+        PROGRAM-ID.   prog.
+ 
+        ENVIRONMENT DIVISION.
+        CONFIGURATION SECTION.
+        SPECIAL-NAMES.
+            CURRENCY SIGN IS "Y".
+ 
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        77  amount    pic Y(6)9.99.
+ 
+        PROCEDURE DIVISION.
+            Move 1512.34 to Amount
+            Display "Amount is #" Amount '#' with no advancing.
+ 
+            GOBACK
+            .
+        END PROGRAM prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ Amount is #  Y1512.34#
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,32 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out" }
+ 
+        PROGRAM-ID.   prog.
+ 
+        ENVIRONMENT DIVISION.
+        CONFIGURATION SECTION.
+        SPECIAL-NAMES.
+            *> note the space after EUR / before ct.
+            CURRENCY SIGN IS "EUR "      WITH PICTURE SYMBOL "U",
+            CURRENCY SIGN IS " ct (EUR)" WITH PICTURE SYMBOL "c",
+            Currency Sign is "$US" with Picture Symbol "$".
+ 
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        77  EUROS    PIC U99v99.
+        77  cents    PIC 9,999c.
+        77  DOLLARS  Pic $$,$$9.99.
+ 
+        PROCEDURE DIVISION.
+            MOVE 12.34 TO EUROS
+            MULTIPLY euros BY 100 GIVING cents.
+            DISPLAY "#" EUROS "# equal #" cents '#'.
+            Move 1500 to DOLLARS
+            Display "Invoice amount #1 is " DOLLARS '.'.
+            Move 12.34 to DOLLARS
+            Display "Invoice amount #2 is " DOLLARS '.'.
+ 
+            GOBACK
+            .
+        END PROGRAM prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ #EUR 12.34# equal #1,234 ct (EUR)#
+ Invoice amount #1 is $US1,500.00.
+ Invoice amount #2 is    $US12.34.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,15 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X             PIC X(6) VALUE "123   ".
+        PROCEDURE        DIVISION.
+            IF X(1:3) NUMERIC
+               STOP RUN
+            END-IF.
+            DISPLAY "NG" NO ADVANCING
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,76 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Complex_HEX__VALUE_and_MOVE.out" }
+ 
+         identification division.
+         program-id. hex-init.
+         data division.
+         working-storage section.
+         01  var-01020304.
+             05 filler1.
+                 10 filler2      pic x(2) VALUE "33".
+                 10 as-value     pic x(4) VALUE  X'01020304'.
+                 10 filler3      pic x(2) VALUE "33".
+             05 as-pointer redefines filler1 usage pointer.
+ 
+         01  var-low.
+             05 filler1.
+                 10 filler2      pic x(2) VALUE "33".
+                 10 as-value     pic x(4) VALUE  LOW-VALUES.
+                 10 filler3      pic x(2) VALUE "33".
+             05 as-pointer redefines filler1 usage pointer.
+         01  var-space.
+             05 filler1.
+                 10 filler2      pic x(2) VALUE "33".
+                 10 as-value     pic x(4) VALUE  SPACE.
+                 10 filler3      pic x(2) VALUE "33".
+             05 as-pointer redefines filler1 usage pointer.
+         01  var-quote.
+             05 filler1.
+                 10 filler2      pic x(2) VALUE "33".
+                 10 as-value     pic x(4) VALUE  QUOTE.
+                 10 filler3      pic x(2) VALUE "33".
+             05 as-pointer redefines filler1 usage pointer.
+         01  var-zero.
+             05 filler1.
+                 10 filler2      pic x(2) VALUE "33".
+                 10 as-value     pic x(4) VALUE  ZERO.
+                 10 filler3      pic x(2) VALUE "33".
+             05 as-pointer redefines filler1 usage pointer.
+         01  var-high.
+             05 filler1.
+                 10 filler2      pic x(2) VALUE "33".
+                 10 as-value     pic x(4) VALUE  HIGH-VALUES.
+                 10 filler3      pic x(2) VALUE "33".
+             05 as-pointer redefines filler1 usage pointer.
+         01  move-target.
+             05 filler1.
+                 10 filler2      pic x(2) VALUE "33".
+                 10 as-value     pic x(4) VALUE "3333".
+                 10 filler3      pic x(2) VALUE "33".
+             05 as-pointer redefines filler1 usage pointer.
+         procedure division.
+         display "the value is    " as-pointer of var-01020304.
+         display "should be       0x3333040302013333"
+         display "var-low  :      " as-pointer of var-low
+         display "var-space:      " as-pointer of var-space
+         display "var-quote:      " as-pointer of var-quote
+         display "var-zero :      " as-pointer of var-zero
+         display "var-high :      " as-pointer of var-high
+         display "initial         " as-pointer of move-target
+         move low-value to as-value of move-target
+         display "low-value       " as-pointer of move-target
+         move space to as-value of move-target
+         display "space           " as-pointer of move-target
+         move quote to as-value of move-target
+         display "quote           " as-pointer of move-target
+         move zeroes to as-value of move-target
+         display "zeroes          " as-pointer of move-target
+         move high-value to as-value of move-target
+         display "high-value      " as-pointer of move-target
+         move X'01020304' to as-value of move-target
+         display "01020304        " as-pointer of move-target
+         move "33333333" to move-target
+         move X'00' to filler3 of move-target(1:1)
+         display "ref-mod         " as-pointer of move-target
+         stop run.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+ the value is    0x3333040302013333
+ should be       0x3333040302013333
+ var-low  :      0x3333000000003333
+ var-space:      0x3333202020203333
+ var-quote:      0x3333222222223333
+ var-zero :      0x3333303030303333
+ var-high :      0x3333ffffffff3333
+ initial         0x3333333333333333
+ low-value       0x3333000000003333
+ space           0x3333202020203333
+ quote           0x3333222222223333
+ zeroes          0x3333303030303333
+ high-value      0x3333ffffffff3333
+ 01020304        0x3333040302013333
+ ref-mod         0x3300333333333333
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_IF.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_IF.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_IF.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_IF.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,23 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Complex_IF.out" }
+         identification division.
+         program-id. phonebook.
+         data division.
+         working-storage section.
+         01 name1 pic x(10) value "one".
+         01 name2 pic x(10) value "two".
+         01 flag  pic x     value 'a'.
+         procedure division.
+         move 'l' to flag
+         perform checkit
+         goback.
+         checkit.
+             if (name1 = name2 and flag = "F" or "f" )
+                 or flag = "L" or "l"
+             then
+                display "the test is TRUE"
+             else
+                display "the test is FALSE"
+             end-if.
+         end program phonebook.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_IF.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_IF.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Complex_IF.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Complex_IF.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ the test is TRUE
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Concatenation_operator.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        77 STR           PIC X(05).
+        PROCEDURE        DIVISION.
+            MOVE "OK" & " "
+             & "OK"
+              TO STR
+            DISPLAY STR NO ADVANCING
+            END-DISPLAY
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Concatenation_operator.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Concatenation_operator.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Concatenation_operator.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Concatenation_operator.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ OK OK
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__1_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        CONFIGURATION    SECTION.
+        SPECIAL-NAMES.
+            DECIMAL-POINT    IS COMMA.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC 99V99.
+        PROCEDURE        DIVISION.
+            MOVE FUNCTION MIN (3,,,,,,5) TO X.
+            DISPLAY X
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ 00,50
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__2_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        CONFIGURATION    SECTION.
+        SPECIAL-NAMES.
+            DECIMAL-POINT    IS COMMA.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC 99V99.
+        PROCEDURE        DIVISION.
+            MOVE FUNCTION MIN (3,,,,,, 5) TO X.
+            DISPLAY X
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ 03,00
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__3_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        CONFIGURATION    SECTION.
+        SPECIAL-NAMES.
+            DECIMAL-POINT    IS COMMA.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC 99V99.
+        PROCEDURE        DIVISION.
+            MOVE FUNCTION MIN (3,,,,,, 1,5) TO X.
+            DISPLAY X
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ 01,50
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__4_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        CONFIGURATION    SECTION.
+        SPECIAL-NAMES.
+            DECIMAL-POINT    IS COMMA.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC 99V99.
+        PROCEDURE        DIVISION.
+            MOVE FUNCTION MIN (3, 1,5) TO X.
+            DISPLAY X
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ 01,50
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,23 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__5_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        CONFIGURATION    SECTION.
+        SPECIAL-NAMES.
+            DECIMAL-POINT    IS COMMA.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC 99V99.
+        PROCEDURE        DIVISION.
+            COMPUTE X=1 + ,1
+            END-COMPUTE
+            DISPLAY X
+            END-DISPLAY.
+            COMPUTE X=1*,1
+            END-COMPUTE
+            DISPLAY X
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ 01,10
+ 00,10
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,30 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01  x PIC 9 VALUE 1.
+        01  y PIC 9.
+        01  a     COMP-1 VALUE 1.E20.
+        01  b     COMP-1 VALUE 1.E20.
+        PROCEDURE DIVISION.
+            DIVIDE x BY 0.1 GIVING y
+            DISPLAY FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            NOT = 'EC-SIZE-TRUNCATION'
+               DISPLAY 'Wrong/missing exception: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF.
+         SET LAST EXCEPTION TO OFF
+            MULTIPLY a BY b GIVING b
+            DISPLAY FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            NOT = 'EC-SIZE-OVERFLOW'
+               DISPLAY 'Wrong/missing exception: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ EC-SIZE-TRUNCATION
+ EC-SIZE-OVERFLOW
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,64 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01  x PIC 9 VALUE 0.
+        01  y PIC 9 VALUE 0.
+        01  fx comp-2 VALUE 0.
+        01  fy comp-2 VALUE 0.
+        PROCEDURE DIVISION.
+            DISPLAY "Fixed-point divide by zero:"
+            DIVIDE x BY y GIVING y
+            DISPLAY "1 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+            IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            NOT = 'EC-SIZE-ZERO-DIVIDE'
+               DISPLAY '1 Wrong/missing exception: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF
+            SET LAST EXCEPTION TO OFF
+            DISPLAY "2 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+            IF FUNCTION EXCEPTION-STATUS NOT = SPACES
+               DISPLAY '2 Exception is not empty after reset: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF
+            MOVE 0 TO y
+            COMPUTE y = x - 1 / y + 6.5
+            DISPLAY "3 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+            IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            NOT = 'EC-SIZE-ZERO-DIVIDE'
+               DISPLAY '3 Wrong/missing exception: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF.
+            SET LAST EXCEPTION TO OFF
+            DISPLAY "Floating-point divide by zero:"
+            DIVIDE fx BY fy GIVING fy
+            DISPLAY "4 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+            IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            NOT = 'EC-SIZE-ZERO-DIVIDE'
+               DISPLAY '4 Wrong/missing exception: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF
+            SET LAST EXCEPTION TO OFF
+            DISPLAY "5 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+            IF FUNCTION EXCEPTION-STATUS NOT = SPACES
+               DISPLAY '5 Exception is not empty after reset: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF
+            MOVE 0 TO fy
+            COMPUTE fy = fx - 1 / fy + 6.5
+            DISPLAY "6 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+            IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+            NOT = 'EC-SIZE-ZERO-DIVIDE'
+               DISPLAY '6 Wrong/missing exception: '
+                       FUNCTION EXCEPTION-STATUS
+               END-DISPLAY
+            END-IF.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,9 ----
+ Fixed-point divide by zero:
+ 1 - "EC-SIZE-ZERO-DIVIDE"
+ 2 - ""
+ 3 - "EC-SIZE-ZERO-DIVIDE"
+ Floating-point divide by zero:
+ 4 - "EC-SIZE-ZERO-DIVIDE"
+ 5 - ""
+ 6 - "EC-SIZE-ZERO-DIVIDE"
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,21 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 INDVAL        PIC 9(4).
+        PROCEDURE        DIVISION.
+        A01.
+            PERFORM VARYING INDVAL FROM 1 BY 1 UNTIL INDVAL > 10
+             IF INDVAL > 2
+                EXIT PARAGRAPH
+             END-IF
+            END-PERFORM.
+        A02.
+            IF INDVAL NOT = 3
+               DISPLAY INDVAL NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,15 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/EXIT_PERFORM.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        PROCEDURE        DIVISION.
+            PERFORM 2 TIMES
+              DISPLAY "OK" NO ADVANCING
+              END-DISPLAY
+              EXIT PERFORM
+              DISPLAY "NOT OK"
+              END-DISPLAY
+            END-PERFORM
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ OK
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,15 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/EXIT_PERFORM_CYCLE.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        PROCEDURE        DIVISION.
+            PERFORM 2 TIMES
+              DISPLAY "OK" NO ADVANCING
+              END-DISPLAY
+              EXIT PERFORM CYCLE
+              DISPLAY "NOT OK"
+              END-DISPLAY
+            END-PERFORM
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ OKOK
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,25 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 INDVAL        PIC 9(4).
+        PROCEDURE        DIVISION.
+        A01 SECTION.
+        A011.
+            PERFORM VARYING INDVAL FROM 1 BY 1 UNTIL INDVAL > 10
+             IF INDVAL > 2
+                EXIT SECTION
+             END-IF
+            END-PERFORM.
+        A012.
+            DISPLAY INDVAL NO ADVANCING
+            END-DISPLAY.
+        A02 SECTION.
+            IF INDVAL NOT = 3
+               DISPLAY INDVAL NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,43 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/FLOAT-LONG_with_SIZE_ERROR.out" }
+ 
+        identification division.
+        program-id. prog.
+        data division.
+        working-storage section.
+       *------------------------
+        77 counter             pic s9(4) binary value zero.
+       * FLOAT-LONG
+        77 doubleValue         COMP-2 value 2.
+        77 lastDoubleValue     COMP-2.
+       ******************************************************************
+        procedure division.
+        main section.
+            perform varying counter from 1 by 1 until
+                            counter > 1060
+       *>      display 'counter: ' counter ', value: ' doubleValue
+               compute doubleValue = doubleValue * 2
+                    ON SIZE ERROR
+                       display 'SIZE ERROR raised'
+                       end-display
+                       display 'SIZE ERROR, last value = ' doubleValue
+                       end-display
+                       exit perform
+                not ON SIZE ERROR
+                       if doubleValue > lastdoubleValue
+                          move doubleValue to lastdoubleValue
+                       else
+                          display 'math ERROR, last value > current: '
+                                  lastdoubleValue ' > ' doubleValue
+                          end-display
+                          exit perform
+                       end-if
+               end-compute
+            end-perform
+            display "counter is " counter
+            if not (counter >= 1023 and <=1025)
+               display ' '
+               display 'counter is ' counter
+            end-if
+            goback.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ SIZE ERROR raised
+ SIZE ERROR, last value = 8.98846567431157954E+307
+ counter is +1023
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,164 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+ 
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01  CMP1                        COMP-1.
+        01  SV1                         COMP-1.
+        01  CMP2                        COMP-2.
+        01  SV2                         COMP-2.
+ 
+        PROCEDURE DIVISION.
+        CND-000.
+ 
+            DISPLAY "--- COMP-1 ---"
+            COMPUTE CMP1 = (((1.0E7 / 2.1E0) / 3.1E0) - 5.0E-1) * 6.0E0
+            DISPLAY "A: " CMP1
+            COMPUTE CMP1 = (((1.0E7 / 2.9E0) / 3.9E0) - 5.0E-1) * 6.0E0
+            DISPLAY "B: " CMP1
+            MOVE ZERO TO CMP1.
+            COMPUTE CMP1 = 1.0E3 / 2.1E0
+                    ON SIZE ERROR DISPLAY "Z: " CMP1 " SIZE ERROR"
+                NOT ON SIZE ERROR DISPLAY "Z: " CMP1 " IS OK"
+            END-COMPUTE.
+ 
+            DISPLAY "    ..."
+            DISPLAY "--- COMP-2 ---"
+            COMPUTE CMP2 = (((1.0E7 / 2.1E0) / 3.1E0) - 5.0E-1) * 6.0E0
+       *>   because of possible rounding of intermediates and different
+       *>   precision depending on math library / version: plain DISPLAY
+            IF CMP2 >= 9216586.86175114 AND <= 9216586.86175116
+              DISPLAY "A ~ 9216586.86175115"
+            ELSE
+              DISPLAY "A: " CMP2
+            END-IF
+            COMPUTE CMP2 = (((1.0E7 / 2.9E0) / 3.9E0) - 5.0E-1) * 6.0E0
+            IF CMP2 >= 5305036.7877983 AND <= 5305036.7877985
+              DISPLAY "B ~ 5305036.787798408"
+            ELSE
+              DISPLAY "B: " CMP2
+            END-IF
+            MOVE ZERO TO CMP2.
+            COMPUTE CMP2 = 1.0E3 / 2.1E0
+                    ON SIZE ERROR DISPLAY "Z: " CMP2 " SIZE ERROR"
+                NOT ON SIZE ERROR
+       *>        see note above
+                 IF CMP2 >= 476.1904761904760 AND <= 476.1904761904763
+                   DISPLAY "Z ~ 476.1904761904761 IS OK"
+                 ELSE
+                   DISPLAY "Z: " CMP2 " IS OK"
+                 END-IF
+            END-COMPUTE.
+ 
+            DISPLAY "    ..."
+            DISPLAY "--- 99 + 1 / 3 ---"
+            MOVE -1 TO CMP1, CMP2.
+            COMPUTE CMP1 = 99 + 1 / 3
+                    ON SIZE ERROR DISPLAY "CMP1: " CMP1 " SIZE ERROR"
+                NOT ON SIZE ERROR DISPLAY "CMP1: " CMP1 " IS OK"
+            END-COMPUTE.
+            COMPUTE CMP2 = 99 + 1 / 3
+                    ON SIZE ERROR DISPLAY "CMP2: " CMP2 " SIZE ERROR"
+                NOT ON SIZE ERROR DISPLAY "CMP2: " CMP2 " IS OK"
+            END-COMPUTE.
+ 
+            DISPLAY "    ..."
+            DISPLAY "--- 99 ---"
+            MOVE -1 TO CMP1, CMP2.
+            COMPUTE CMP1 = 99
+                    ON SIZE ERROR DISPLAY "CMP1: " CMP1 " SIZE ERROR"
+                NOT ON SIZE ERROR DISPLAY "CMP1: " CMP1 " IS OK"
+            END-COMPUTE.
+            COMPUTE CMP2 = 99
+                    ON SIZE ERROR DISPLAY "CMP2: " CMP2 " SIZE ERROR"
+                NOT ON SIZE ERROR DISPLAY "CMP2: " CMP2 " IS OK"
+            END-COMPUTE.
+ 
+        CND-100-OK.
+            DISPLAY "    ..."
+            DISPLAY "--- Test overflow ---"
+ 
+            MOVE 990000 TO CMP1.
+            PERFORM 6500 TIMES
+              MOVE CMP1 TO SV1
+              COMPUTE CMP1 = CMP1 * 10
+                     ON SIZE ERROR GO TO CND-350-ERR
+              END-COMPUTE
+              IF CMP1 < 9.0
+                GO TO CND-350-ERR
+              END-IF
+            END-PERFORM.
+            DISPLAY "CMP1: " CMP1 " IS OK".
+            GO TO CND-350-OK.
+        CND-350-ERR.
+            DISPLAY "CMP1: after " SV1 " SIZE ERROR".
+ 
+        CND-350-OK.
+            MOVE 9900000000 TO CMP2.
+            PERFORM 6500 TIMES
+              MOVE CMP2 TO SV2
+              COMPUTE CMP2 = CMP2 * 10
+                     ON SIZE ERROR GO TO CND-380-ERR
+              END-COMPUTE
+              IF CMP2 < 9.0
+                GO TO CND-380-ERR
+              END-IF
+            END-PERFORM.
+            DISPLAY "CMP2: " CMP2 " IS OK".
+            GO TO CND-500-OK.
+        CND-380-ERR.
+       *>   because of possible rounding of intermediates and different
+       *>   precision depending on math library / version: plain DISPLAY
+            IF SV2 >= 9.899999999999E+307 AND
+                   <= 9.900000000001E+307
+              DISPLAY "CMP2: after ~ 9.899999999999781E+307 SIZE ERROR"
+            ELSE
+              DISPLAY "CMP2: after " SV2 " SIZE ERROR"
+            END-IF
+            .
+ 
+        CND-500-OK.
+            MOVE 0.000000099 TO CMP1.
+            PERFORM 350 TIMES
+              MOVE CMP1 TO SV1
+              COMPUTE CMP1 = CMP1 / 10.0
+                     ON SIZE ERROR GO TO CND-500-ERR
+              END-COMPUTE
+              IF CMP1 = 0.0
+                GO TO CND-500-ERR
+              END-IF
+            END-PERFORM.
+            DISPLAY "CMP1: " CMP1 " IS OK".
+            GO TO CND-600-OK.
+        CND-500-ERR.
+            DISPLAY "CMP1: after " SV1 " SIZE ERROR".
+ 
+        CND-600-OK.
+            MOVE 0.000000099 TO CMP2.
+            PERFORM 350 TIMES
+              MOVE CMP2 TO SV2
+              COMPUTE CMP2 = CMP2 / 10.0
+                     ON SIZE ERROR GO TO CND-600-ERR
+              END-COMPUTE
+              IF CMP2 = 0.0
+                GO TO CND-600-ERR
+              END-IF
+            END-PERFORM.
+            DISPLAY "CMP2: " CMP2 " IS OK".
+            GO TO CND-600-XIT.
+        CND-600-ERR.
+            IF SV2 >= 9.8813129168249E-324 AND <= 9.881312916825E-324
+              DISPLAY "CMP2: after ~ 9.881312916824931E-324 SIZE ERROR"
+            ELSE
+              DISPLAY "CMP2: after " SV2 " SIZE ERROR"
+            END-IF
+            .
+        CND-600-XIT.
+ 
+        CND-999.
+            STOP RUN.
+        END PROGRAM prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,24 ----
+ --- COMP-1 ---
+ A: 9.216587E+06
+ B: 5.305037E+06
+ Z: 476.1904907 IS OK
+     ...
+ --- COMP-2 ---
+ A ~ 9216586.86175115
+ B ~ 5305036.787798408
+ Z ~ 476.1904761904761 IS OK
+     ...
+ --- 99 + 1 / 3 ---
+ CMP1: 99.33333588 IS OK
+ CMP2: 99.3333333333333286 IS OK
+     ...
+ --- 99 ---
+ CMP1: 99 IS OK
+ CMP2: 99 IS OK
+     ...
+ --- Test overflow ---
+ CMP1: after 9.899998274E+37 SIZE ERROR
+ CMP2: after ~ 9.899999999999781E+307 SIZE ERROR
+ CMP1: after 1.401298464E-45 SIZE ERROR
+ CMP2: after ~ 9.881312916824931E-324 SIZE ERROR
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,40 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/FLOAT-SHORT_with_SIZE_ERROR.out" }
+ 
+        identification division.
+        program-id. prog.
+ 
+        data division.
+        working-storage section.
+       *------------------------
+        77 counter             pic s9(4) binary value zero.
+       * FLOAT-SHORT (if binary-comp-1 is not active)
+        77 floatValue          COMP-1  value 2.
+        77 lastFloatValue      COMP-1.
+ 
+       ******************************************************************
+        procedure division.
+        main section.
+            perform varying counter from 1 by 1 until
+                            counter > 130
+       *>      display 'counter: ' counter ', value: ' floatValue
+               compute floatValue = floatValue * 2
+                    ON SIZE ERROR
+                       display 'SIZE ERROR, last value = ' floatValue
+                       exit perform
+                not ON SIZE ERROR
+                       if floatValue > lastFloatValue
+                          move floatValue to lastFloatValue
+                       else
+                          display 'math ERROR, last value > current: '
+                                  lastFloatValue ' > ' floatValue
+                          exit perform
+                       end-if
+               end-compute
+            end-perform
+            if counter not = 127
+               display 'counter is ' counter
+            end-if
+ 
+            goback.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ SIZE ERROR, last value = 1.701411835E+38
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,33 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Fixed_continuation_indicator.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X             PIC X(333) VALUE
+            '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
+       -    'YZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV
+       -    'WXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST
+       -    'UVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR
+       -    'STUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP
+       -             'QRSTUVWXYZ'.
+        PROCEDURE        DIVISION.
+            DISPLAY X NO ADVANCING
+            END-DISPLAY.
+            DISPLAY '_'
+            END-DISPLAY.
+            MOVE
+            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567
+       -    "89abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345
+       -    "6789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123
+       -    "456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01
+       -     "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY
+       -                                                               "Z
+       -             "0123456789" TO X.
+            DISPLAY X NO ADVANCING
+            END-DISPLAY.
+            DISPLAY '_'
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                       _
+ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789                       _
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Index_and_parenthesized_expression.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 G.
+          02 X           PIC X OCCURS 1 INDEXED BY I.
+        PROCEDURE        DIVISION.
+          IF I < (I + 2)
+            DISPLAY "OK" NO ADVANCING
+            END-DISPLAY
+          END-IF.
+          STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ OK
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,107 ----
+        *> { dg-do run }
+        *> { dg-options "-dialect ibm" }
+        *> { dg-output-file "group2/LENGTH_OF_omnibus.out" }
+ 
+         program-id. prog.
+         data division.
+         working-storage section.
+         01      desc1.
+          05     desc1-entry pic x(5) occurs 10.
+ 
+         01      desc2.
+          05     desc2-table occurs 10 times.
+           10    desc2-entry pic x(5).
+ 
+         01      desc3.
+          05     desc3-outer occurs 1 to 5 times depending on desc3-lim.
+           10    desc3-outer-txt   pic x(7).
+           10    desc3-inner occurs 11 times.
+            15   desc3-inner-text  pic x(13).
+         77 desc3-lim binary-long.
+ 
+         77      msg pic x(64).
+         77      should-be pic zzzz9.
+         77      but-is    pic zzzz9.
+ 
+         procedure division.
+ 
+         display "using LENGTH OF"
+ 
+         move    "Length of desc1" to msg
+         move    50 to should-be
+         move    length of desc1 to but-is
+         perform result-is
+ 
+         move    "Length of desc1-entry" to msg
+         move    5 to should-be
+         move    length of desc1-entry to but-is
+         perform result-is
+ 
+         move    "Length of desc1-entry(1)" to msg
+         move    5 to should-be
+         move    length of desc1-entry(1) to but-is
+         perform result-is
+ 
+         move    "Length of desc2" to msg
+         move    50 to should-be
+         move    length of desc2 to but-is
+         perform result-is
+ 
+         move    "Length of desc2-table" to msg
+         move    5 to should-be
+         move    length of desc2-table to but-is
+         perform result-is
+ 
+         move    "Length of desc2-entry" to msg
+         move    5 to should-be
+         move    length of desc2-entry to but-is
+         perform result-is
+ 
+         move    "Length of desc2-entry(1)" to msg
+         move    5 to should-be
+         move    length of desc2-entry(1) to but-is
+         perform result-is
+ 
+         move    5 to desc3-lim
+ 
+         move    "Length of desc3" to msg
+         move    750 to should-be
+         move    length of desc3 to but-is
+         perform result-is
+ 
+         move    "Length of desc3-outer" to msg
+         move    150 to should-be
+         move    length of desc3-outer to but-is
+         perform result-is
+ 
+         move    "Length of desc3-outer(1)" to msg
+         move    150 to should-be
+         move    length of desc3-outer(1) to but-is
+         perform result-is
+ 
+         move    "Length of desc3-outer-txt" to msg
+         move    7 to should-be
+         move    length of desc3-outer-txt to but-is
+         perform result-is
+ 
+         move    "Length of desc3-inner" to msg
+         move    13 to should-be
+         move    length of desc3-inner to but-is
+         perform result-is
+ 
+         move    "Length of desc3-inner(1)" to msg
+         move    13 to should-be
+         move    length of desc3-inner(1) to but-is
+         perform result-is
+ 
+         goback.
+         result-is.
+         display function trim(msg) ": " with no advancing
+         if but-is equal to should-be
+             display function trim(but-is)
+         else
+             display "should be " function trim(should-be)
+                     " but is "   function trim(but-is)
+         end-if.
+         end program prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,15 ----
+ using LENGTH OF
+ Length of desc1: 50
+ Length of desc1-entry: 5
+ Length of desc1-entry(1): 5
+ Length of desc2: 50
+ Length of desc2-table: 5
+ Length of desc2-entry: 5
+ Length of desc2-entry(1): 5
+ Length of desc3: 750
+ Length of desc3-outer: 150
+ Length of desc3-outer(1): 150
+ Length of desc3-outer-txt: 7
+ Length of desc3-inner: 13
+ Length of desc3-inner(1): 13
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,28 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out" }
+ 
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      caller.
+         PROCEDURE        DIVISION.
+            CALL "callee"
+            END-CALL.
+            STOP RUN.
+            end program caller.
+ 
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      callee.
+         DATA             DIVISION.
+         WORKING-STORAGE  SECTION.
+         01 WRK-X         PIC 999 VALUE 5.
+         LOCAL-STORAGE    SECTION.
+         01 LCL-X         PIC 999 .
+         PROCEDURE        DIVISION.
+             display "On entry: " wrk-x
+             move wrk-x to lcl-x
+             subtract 1 from wrk-x
+             if wrk-x > 0
+                 call "callee".
+             display "On exit: " lcl-x
+             goback.
+             end program callee.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,11 ----
+ On entry: 005
+ On entry: 004
+ On entry: 003
+ On entry: 002
+ On entry: 001
+ On exit: 001
+ On exit: 002
+ On exit: 003
+ On exit: 004
+ On exit: 005
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,28 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out" }
+ 
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      caller.
+         PROCEDURE        DIVISION.
+            CALL "callee"
+            END-CALL.
+            STOP RUN.
+            end program caller.
+ 
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      callee.
+         DATA             DIVISION.
+         WORKING-STORAGE  SECTION.
+         01 WRK-X         PIC 999 VALUE 5.
+         LOCAL-STORAGE    SECTION.
+         01 LCL-X         PIC 999 .
+         PROCEDURE        DIVISION.
+             display "On entry: " wrk-x
+             move wrk-x to lcl-x
+             subtract 1 from wrk-x
+             if wrk-x > 0
+                 call "callee".
+             display "On exit: " lcl-x
+             goback.
+             end program callee.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,11 ----
+ On entry: 005
+ On entry: 004
+ On entry: 003
+ On entry: 002
+ On entry: 001
+ On exit: 001
+ On exit: 002
+ On exit: 003
+ On exit: 004
+ On exit: 005
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,34 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/MOVE_Z_literal_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC XXXX.
+        01  XRED REDEFINES X.
+            03  XBYTE1   PIC X.
+            03  XBYTE2   PIC X.
+            03  XBYTE3   PIC X.
+            03  XBYTE4   PIC X.
+        PROCEDURE        DIVISION.
+            MOVE Z"012" TO X.
+            IF XBYTE1 = "0" AND
+               XBYTE2 = "1" AND
+               XBYTE3 = "2" AND
+               XBYTE4 = LOW-VALUE
+               DISPLAY "OK" NO ADVANCING
+               END-DISPLAY
+            ELSE
+               DISPLAY "X = " X (1:3) NO ADVANCING
+               END-DISPLAY
+               IF XBYTE4 = LOW-VALUE
+                  DISPLAY " WITH LOW-VALUE"
+                  END-DISPLAY
+               ELSE
+                  DISPLAY " WITHOUT LOW-VALUE BUT '" XBYTE4 "'"
+                  END-DISPLAY
+               END-IF
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ OK
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,17 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 G.
+          02 X           PIC X OCCURS 10 INDEXED I.
+        PROCEDURE        DIVISION.
+            SET I TO ZERO.
+            SET X(1) TO I
+            IF X(1) NOT = "0"
+               DISPLAY X(1) NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,15 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/MOVE_integer_literal_to_alphanumeric.out" }
+ 
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC X(04) VALUE SPACES.
+        PROCEDURE        DIVISION.
+            MOVE 0 TO X.
+            DISPLAY X NO ADVANCING
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ 0   
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,31 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/MOVE_to_JUSTIFIED_item.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  SRC-1        PIC S9(04)          VALUE  11.
+        01  SRC-2        PIC S9(04) COMP     VALUE  22.
+        01  SRC-3        PIC S9(04) COMP-5   VALUE  33.
+        01  SRC-4        PIC S9(04)PP        VALUE  4400.
+        01  SRC-5        PIC S9(04)PPPPP     VALUE  55500000.
+        01  EDT-FLD      PIC X(07)           JUSTIFIED RIGHT.
+        PROCEDURE        DIVISION.
+            MOVE SRC-1   TO EDT-FLD.
+            DISPLAY '>' EDT-FLD '<'
+            END-DISPLAY.
+            MOVE SRC-2   TO EDT-FLD.
+            DISPLAY '>' EDT-FLD '<'
+            END-DISPLAY.
+            MOVE SRC-3   TO EDT-FLD.
+            DISPLAY '>' EDT-FLD '<'
+            END-DISPLAY.
+            MOVE SRC-4   TO EDT-FLD.
+            DISPLAY '>' EDT-FLD '<'
+            END-DISPLAY.
+            MOVE SRC-5   TO EDT-FLD.
+            DISPLAY '>' EDT-FLD '<'
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,6 ----
+ >   0011<
+ >   0022<
+ >   0033<
+ > 004400<
+ >5500000<
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,35 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/MOVE_to_edited_item__1_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  SRC-1        PIC S99V99  VALUE   1.10.
+        01  SRC-2        PIC S99V99  VALUE   0.02.
+        01  SRC-3        PIC S99V99  VALUE  -0.03.
+        01  SRC-4        PIC S99V99  VALUE  -0.04.
+        01  SRC-5        PIC S99V99  VALUE  -0.05.
+        01  EDT-1        PIC -(04)9.
+        01  EDT-2        PIC -(04)9.
+        01  EDT-3        PIC -(04)9.
+        01  EDT-4        PIC +(04)9.
+        01  EDT-5        PIC -(05).
+        PROCEDURE        DIVISION.
+            MOVE SRC-1   TO EDT-1.
+            MOVE SRC-2   TO EDT-2.
+            MOVE SRC-3   TO EDT-3.
+            MOVE SRC-4   TO EDT-4.
+            MOVE SRC-5   TO EDT-5.
+            DISPLAY '>' EDT-1 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-2 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-3 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-4 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-5 '<'
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,6 ----
+ >    1<
+ >    0<
+ >    0<
+ >   +0<
+ >     <
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,35 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/MOVE_to_edited_item__2_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  SRC-1        PIC S99V99  VALUE  -0.06.
+        01  SRC-2        PIC S99V99  VALUE  -0.07.
+        01  SRC-3        PIC S99V99  VALUE  -0.08.
+        01  SRC-4        PIC S99V99  VALUE  -0.09.
+        01  SRC-5        PIC S99V99  VALUE  -1.10.
+        01  EDT-1        PIC 9(04)-.
+        01  EDT-2        PIC 9(04)+.
+        01  EDT-3        PIC Z(04)+.
+        01  EDT-4        PIC 9(04)DB.
+        01  EDT-5        PIC 9(04)DB.
+        PROCEDURE        DIVISION.
+            MOVE SRC-1   TO EDT-1.
+            MOVE SRC-2   TO EDT-2.
+            MOVE SRC-3   TO EDT-3.
+            MOVE SRC-4   TO EDT-4.
+            MOVE SRC-5   TO EDT-5.
+            DISPLAY '>' EDT-1 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-2 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-3 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-4 '<'
+            END-DISPLAY.
+            DISPLAY '>' EDT-5 '<'
+            END-DISPLAY.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,6 ----
+ >0000 <
+ >0000+<
+ >     <
+ >0000  <
+ >0001DB<
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,23 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/MOVE_to_item_with_simple_and_floating_insertion.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+ 
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01  num-1 PIC -*B*99.
+        01  num-2 PIC $BB**,***.**.
+        01  num-3 PIC $BB--,---.--.
+ 
+        PROCEDURE DIVISION.
+            MOVE -123 TO num-1
+            DISPLAY ">" num-1 "<"
+ 
+            MOVE 1234.56 TO num-2
+            DISPLAY ">" num-2 "<"
+ 
+            MOVE 1234.56 TO num-3
+            DISPLAY ">" num-3 "<"
+            .
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ >-**123<
+ >$  *1,234.56<
+ >$   1,234.56<
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,15 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X             PIC 99 VALUE 12.
+        PROCEDURE        DIVISION.
+            MOVE X TO X.
+            IF X NOT = 12
+               DISPLAY X NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 G.
+          02 X           PIC 9999 VALUE 1234.
+        PROCEDURE        DIVISION.
+            MOVE "99" TO G(3:2).
+            IF G NOT = "1299"
+               DISPLAY G NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,15 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X             PIC 9(4) VALUE 0.
+        PROCEDURE        DIVISION.
+            MOVE "1" TO X(1:1).
+            IF X NOT = 1000
+               DISPLAY X NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,17 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X             PIC X(4) VALUE "1234".
+        01 Y             PIC X(4) VALUE "abcd".
+        01 I             PIC 9 VALUE 1.
+        PROCEDURE        DIVISION.
+            MOVE X(1:I) TO Y.
+            IF Y NOT = "1   "
+               DISPLAY Y NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,35 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Multi-target_MOVE_with_subscript_re-evaluation.out" }
+ 
+         IDENTIFICATION DIVISION.
+         PROGRAM-ID.  mover.
+         DATA DIVISION.
+         WORKING-STORAGE SECTION.
+         01 FILLER.
+           02 ADATA VALUE "654321".
+           02 A REDEFINES ADATA PIC 9 OCCURS 6 TIMES.
+           02 B PIC 9.
+           02 CDATA VALUE "999999".
+           02 C REDEFINES CDATA PIC 9 OCCURS 6 TIMES.
+         01 TEMP PIC 9.
+         PROCEDURE DIVISION.
+         INITIALIZE CDATA ALL TO VALUE
+         MOVE 2 TO B
+         MOVE A(B) TO B, C(B)
+       *> That should pick up 5, move it to B, and then move 5 to C(5),
+         IF CDATA NOT EQUAL TO "999959"
+             DISPLAY CDATA " Should be ""999959"", but isn't"
+         ELSE
+             DISPLAY CDATA " Should be ""999959""".
+       *> See 14.9.25.4 MOVE General Rules
+         INITIALIZE CDATA ALL TO VALUE
+         MOVE 2 TO B
+         MOVE A(B) TO TEMP
+         MOVE TEMP TO B
+         MOVE TEMP TO C(B)
+         IF CDATA NOT EQUAL TO "999959"
+             DISPLAY CDATA " Should be ""999959"", but isn't"
+         ELSE
+             DISPLAY CDATA " Should be ""999959""".
+         STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ 999959 Should be "999959"
+ 999959 Should be "999959"
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,27 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Non-numeric_data_in_numeric_items__1_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X.
+           03 X-NUM      PIC 9(06) VALUE 123.
+        77 NUM           PIC 9(06).
+        PROCEDURE        DIVISION.
+            MOVE x"0000" TO X (2:2)
+            IF X-NUM NUMERIC
+               DISPLAY "low-value is numeric" UPON SYSERR
+               END-DISPLAY
+            END-IF
+            MOVE x"01" TO X (3:1)
+            IF X-NUM NUMERIC
+               DISPLAY "SOH is numeric" UPON SYSERR
+               END-DISPLAY
+            END-IF
+            MOVE X-NUM TO NUM
+            DISPLAY "test over"
+            END-DISPLAY
+       *
+            GOBACK.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ test over
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,22 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Non-numeric_data_in_numeric_items__2_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog2.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X.
+           03 X-NUM      PIC 9(06) PACKED-DECIMAL VALUE 123.
+        77 NUM           PIC 9(06).
+        PROCEDURE        DIVISION.
+            MOVE x"0A" TO X (2:1)
+            IF X-NUM NUMERIC
+               DISPLAY "bad prog"
+               END-DISPLAY
+            END-IF
+            MOVE X-NUM TO NUM
+            DISPLAY "test over"
+            END-DISPLAY
+       *
+            GOBACK.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ test over
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X            PIC 9(2) VALUE 0.
+        01  Y            PIC 9(2) VALUE 0.
+        PROCEDURE        DIVISION.
+            COMPUTE X = 100
+            END-COMPUTE.
+            COMPUTE Y = 99
+            END-COMPUTE.
+            IF Y NOT = 99
+               DISPLAY Y NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,40 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  D1.
+            03  FILLER   OCCURS 1.
+                05 D1-ENTRY   PIC X(03) value '123'.
+        01  D2.
+            03  D2-ENTRY   PIC X(03)  value 'ABC'  OCCURS 1.
+        01  D1TOR.
+            03  FILLER   PIC X(03) value '456'.
+        01  D1-R         REDEFINES D1TOR.
+            03  FILLER   OCCURS 1.
+                05 D1-R-ENTRY   PIC X(03).
+        01  D2TOR.
+            03  FILLER   PIC X(03) value 'DEF'.
+        01  D2-R         REDEFINES D2TOR.
+            03  D2-R-ENTRY   PIC X(03)   OCCURS 1.
+ 
+        PROCEDURE        DIVISION.
+            IF D1-ENTRY (1) NOT = "123"
+               DISPLAY D1-ENTRY (1)
+               END-DISPLAY
+            END-IF.
+            IF D2-ENTRY (1) NOT = "ABC"
+               DISPLAY D2-ENTRY (1)
+               END-DISPLAY
+            END-IF.
+            IF D1-R-ENTRY (1) NOT = "456"
+               DISPLAY D1-R-ENTRY (1)
+               END-DISPLAY
+            END-IF.
+            IF D2-R-ENTRY (1) NOT = "DEF"
+               DISPLAY D2-R-ENTRY (1)
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,40 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/OSVS_Arithmetic_Test__2_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID. prog.
+        ENVIRONMENT      DIVISION.
+        DATA             DIVISION.
+        WORKING-STORAGE SECTION.
+        01  VAL                 PIC S9(7)V99 COMP-3 VALUE 20500.
+        01  DIV1                PIC S9(7)V99 COMP-3 VALUE 0.9.
+        01  DIV2                PIC S9(7)V99 COMP-3 VALUE 33.45.
+        01  DIV3                PIC S9(7)V99 COMP-3 VALUE 9.
+        01  MUL1                PIC S9(7)V99 COMP-3 VALUE 10.
+        01  MUL2                PIC S9(7)V99 COMP-3 VALUE 5.
+        01  MUL3                PIC S9(7)V99 COMP-3 VALUE 2.
+        01  RES                 PIC S9(7)V99 COMP-3.
+        PROCEDURE        DIVISION.
+            COMPUTE RES = VAL / DIV1 / DIV2.
+            DISPLAY 'RES = ' RES.
+            COMPUTE RES ROUNDED = VAL / DIV1 / DIV2.
+            DISPLAY 'RES ROUNDED = ' RES.
+            COMPUTE RES = VAL * MUL1 / DIV3 / DIV2.
+            DISPLAY 'RES MULT1 = ' RES.
+            COMPUTE RES = VAL * MUL2 * MUL3 / DIV3 / DIV2.
+            DISPLAY 'RES MULT2 = ' RES.
+            COMPUTE RES = VAL / DIV1.
+            DISPLAY 'RES 1 = ' RES.
+            COMPUTE RES = RES / DIV2.
+            DISPLAY 'RES F = ' RES.
+            COMPUTE RES  =
+                 VAL / DIV1 / DIV2.
+            DISPLAY 'RES NOT ROUNDED = ' RES.
+            COMPUTE RES ROUNDED MODE NEAREST-AWAY-FROM-ZERO =
+                 VAL / DIV1 / DIV2.
+            DISPLAY 'RES ROUNDED NEAREST-AWAY = ' RES.
+            COMPUTE RES ROUNDED MODE AWAY-FROM-ZERO =
+                 VAL / DIV1 / DIV2.
+            DISPLAY 'RES ROUNDED AWAY = ' RES.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,10 ----
+ RES = +0000680.95
+ RES ROUNDED = +0000680.95
+ RES MULT1 = +0000680.95
+ RES MULT2 = +0000680.95
+ RES 1 = +0022777.77
+ RES F = +0000680.94
+ RES NOT ROUNDED = +0000680.95
+ RES ROUNDED NEAREST-AWAY = +0000680.95
+ RES ROUNDED AWAY = +0000680.96
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,9 ----
+       *> { dg-do compile }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        PROCEDURE        DIVISION.
+            PERFORM 2 TIMES
+              CONTINUE
+            END-PERFORM.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  INDVAL       PIC 9(4).
+        PROCEDURE        DIVISION.
+            PERFORM VARYING INDVAL FROM 1
+             BY 1 UNTIL INDVAL > 2
+            CONTINUE
+            END-PERFORM
+            IF INDVAL NOT = 3
+               DISPLAY INDVAL NO ADVANCING
+               END-DISPLAY
+            END-IF
+            STOP RUN
+            .
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  INDVAL       PIC 9(4).
+        PROCEDURE        DIVISION.
+            PERFORM VARYING INDVAL FROM 1
+             BY 1 UNTIL INDVAL > 2
+             CONTINUE
+             END-PERFORM
+            IF INDVAL NOT = 3
+               DISPLAY INDVAL NO ADVANCING
+               END-DISPLAY
+            END-IF
+            .
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,28 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  MYOCC        PIC 9(8) COMP VALUE 0.
+        PROCEDURE        DIVISION.
+        ASTART SECTION.
+        A01.
+            PERFORM BTEST.
+            IF MYOCC NOT = 2
+               DISPLAY MYOCC
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+        BTEST SECTION.
+        B01.
+            PERFORM B02 VARYING MYOCC FROM 1 BY 1
+                    UNTIL MYOCC > 5.
+            GO TO B99.
+        B02.
+            IF MYOCC > 1
+               GO TO B99
+            END-IF.
+        B99.
+            EXIT.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,44 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  X-ZZZN                    PIC ZZZ-.
+        01  XZN-RED REDEFINES X-ZZZN  PIC X(4).
+        01  X-ZZZP                    PIC ZZZ+.
+        01  XZP-RED REDEFINES X-ZZZP  PIC X(4).
+        PROCEDURE        DIVISION.
+            MOVE -1 TO X-ZZZN.
+            IF XZN-RED NOT = "  1-"
+               DISPLAY "(" X-ZZZN ")"
+               END-DISPLAY
+            END-IF.
+            MOVE  0 TO X-ZZZN.
+            IF XZN-RED NOT = "    "
+               DISPLAY "(" X-ZZZN ")"
+               END-DISPLAY
+            END-IF.
+            MOVE +1 TO X-ZZZN.
+            IF XZN-RED NOT = "  1 "
+               DISPLAY "(" X-ZZZN ")"
+               END-DISPLAY
+            END-IF.
+ 
+            MOVE -1 TO X-ZZZP.
+            IF XZP-RED NOT = "  1-"
+               DISPLAY "(" X-ZZZP ")"
+               END-DISPLAY
+            END-IF.
+            MOVE  0 TO X-ZZZP.
+            IF XZP-RED NOT = "    "
+               DISPLAY "(" X-ZZZP ")"
+               END-DISPLAY
+            END-IF.
+            MOVE +1 TO X-ZZZP.
+            IF XZP-RED NOT = "  1+"
+               DISPLAY "(" X-ZZZP ")"
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,17 ----
+        *> { dg-do run }
+        *> { dg-options "-dialect mf" }
+        *> { dg-output-file "group2/Quick_check_of_PIC_XX_COMP-5.out" }
+          identification division.
+         program-id. wrapper.
+         data division.
+         working-storage section.
+         01 memx pic x(2) comp-5.
+         77 ptr pointer.
+         procedure division.
+         Initialize ptr.display "LENGTH OF X(2) is " length of memx
+         move 12345 to memx
+         display memx
+         IF ptr <> NULL then display 'bad pointer'.
+         goback.
+         end program wrapper.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ LENGTH OF X(2) is 2
+ 12345
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,11 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Quote_marks_in_comment_paragraphs.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID.    prog.
+        DATE-written.  hello'".
+       *> Written is intentionally lowercase.
+       *> extra " to fix syntax highlighting
+        PROCEDURE      DIVISION.
+            DISPLAY "Hello, world!".
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ Hello, world!
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,38 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        DATA  DIVISION.
+        WORKING-STORAGE SECTION.
+        01  TSRDF.
+            05  WS-ASK-ID-DATE                PIC X(10).
+            05  WS-ASK-ID-DATE-R              REDEFINES WS-ASK-ID-DATE.
+                10  WS-ASK-ID-DATE-YYYY       PIC 9(4) VALUE 2017.
+                10  FILLER                    PIC X VALUE '-'.
+                10  WS-ASK-ID-DATE-MM         PIC 9(2).
+                10  FILLER                    PIC X VALUE '-'.
+                10  WS-ASK-ID-DATE-DD         PIC 9(2).
+        PROCEDURE DIVISION.
+            MOVE ALL '*' TO WS-ASK-ID-DATE
+            MOVE 2015 TO WS-ASK-ID-DATE-YYYY
+            MOVE 08 TO WS-ASK-ID-DATE-MM
+            MOVE 21 TO WS-ASK-ID-DATE-DD
+            DISPLAY "The date is " WS-ASK-ID-DATE " Compiled".
+ 
+            INITIALIZE WS-ASK-ID-DATE-R.
+            MOVE 08 TO WS-ASK-ID-DATE-MM
+            MOVE 21 TO WS-ASK-ID-DATE-DD
+            DISPLAY "The date is " WS-ASK-ID-DATE " INITIALIZE".
+ 
+            INITIALIZE WS-ASK-ID-DATE-R WITH FILLER.
+            MOVE 08 TO WS-ASK-ID-DATE-MM
+            MOVE 21 TO WS-ASK-ID-DATE-DD
+            DISPLAY "The date is " WS-ASK-ID-DATE " WITH FILLER".
+ 
+            INITIALIZE WS-ASK-ID-DATE-R WITH FILLER ALL TO VALUE.
+            MOVE 08 TO WS-ASK-ID-DATE-MM
+            MOVE 21 TO WS-ASK-ID-DATE-DD
+            DISPLAY "The date is " WS-ASK-ID-DATE " ALL TO VALUE".
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,5 ----
+ The date is 2015*08*21 Compiled
+ The date is 0000*08*21 INITIALIZE
+ The date is 0000 08 21 WITH FILLER
+ The date is 2017-08-21 ALL TO VALUE
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,22 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Recursive_PERFORM_paragraph.out" }
+         identification      division.
+         program-id.         prog.
+         data                division.
+         working-storage     section.
+         77 n binary-double unsigned.
+         77 f binary-double unsigned.
+         procedure           division.
+         move 20 to n
+         move 1 to f
+         display "compute " n " factorial".
+         fact.
+             compute f = f * n
+             subtract 1 from n
+             if n not equal to zero then 
+                 perform fact
+             end-if.
+         end-fact.
+         display f.
+         end program         prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ compute 0000000000000000020 factorial
+ 2432902008176640000
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,29 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT DIVISION.
+        CONFIGURATION SECTION.
+        SPECIAL-NAMES.
+            ALPHABET ALPHA IS EBCDIC.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 Z  PIC X(10)  VALUE "d4b2e1a3c5".
+        01 G.
+          02 TBL         OCCURS 10.
+            03 X         PIC X.
+        PROCEDURE        DIVISION.
+            MOVE Z TO G.
+            SORT TBL ASCENDING KEY X SEQUENCE ALPHA.
+            IF G NOT = "abcde12345"
+               DISPLAY G
+               END-DISPLAY
+            END-IF.
+            MOVE Z TO G.
+            SORT TBL DESCENDING KEY X SEQUENCE ALPHA.
+            IF G NOT = "54321edcba"
+               DISPLAY G
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,27 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT DIVISION.
+        CONFIGURATION SECTION.
+            OBJECT-COMPUTER.
+              x86 PROGRAM COLLATING SEQUENCE IS EBCDIC-CODE.
+        SPECIAL-NAMES.
+            ALPHABET EBCDIC-CODE IS EBCDIC.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 Z  PIC X(10)  VALUE "d4b2e1a3c5".
+        01 G.
+          02 TBL         OCCURS 10.
+            03 X         PIC X.
+        PROCEDURE        DIVISION.
+            MOVE Z TO G.
+            SORT TBL ASCENDING KEY X.
+            IF G NOT = "abcde12345"
+               DISPLAY G.
+            MOVE Z TO G.
+            SORT TBL DESCENDING KEY X.
+            IF G NOT = "54321edcba"
+               DISPLAY G.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,33 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 G             VALUE "d4b2e1a3c5".
+          02 TBL         OCCURS 5.
+            03 X         PIC X.
+            03 Y         PIC 9.
+        PROCEDURE        DIVISION.
+            SORT TBL ASCENDING KEY X.
+            IF G NOT = "a3b2c5d4e1"
+               DISPLAY G
+               END-DISPLAY
+            END-IF.
+            SORT TBL DESCENDING KEY Y.
+            IF G NOT = "c5d4a3b2e1"
+               DISPLAY G
+               END-DISPLAY
+            END-IF.
+            SORT TBL ASCENDING KEY TBL.
+            IF G NOT = "a3b2c5d4e1"
+               DISPLAY G
+               END-DISPLAY
+            END-IF.
+            SORT TBL DESCENDING KEY.
+            IF G NOT = "e1d4c5b2a3"
+               DISPLAY G
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,96 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/SORT__table_sort__2_.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        ENVIRONMENT DIVISION.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01 K                 PIC 9(2).
+ 
+        01 CNT1              PIC 9(9) COMP-5 VALUE 4.
+        01 TAB1.
+           05 ROW1 OCCURS 1 TO 4 DEPENDING CNT1
+                                  DESCENDING TAB1-NR.
+              10 TAB1-NR     PIC 99.
+ 
+        01 TAB2.
+           05 CNT2           PIC 9(9) COMP-5 VALUE 4.
+           05 ROW2 OCCURS 1 TO 4 DEPENDING CNT2
+                                  DESCENDING TAB2-NR.
+              10 TAB2-NR PIC 99.
+ 
+        01 TAB3.
+           05 CNT3           PIC 9(9) COMP-5 VALUE 10.
+           05 ROW3 OCCURS 1 TO 10 DEPENDING CNT3
+                                   DESCENDING TAB3-NR
+                                   ASCENDING TAB3-DATA.
+              10 TAB3-NR     PIC 99.
+              10 FILLER      PIC X(2).
+              10 TAB3-DATA   PIC X(5).
+              10 FILLER      PIC X(2).
+              10 TAB3-DATA2  PIC X(5).
+ 
+ 
+        PROCEDURE DIVISION.
+        A.
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              MOVE K TO TAB1-NR(K), TAB2-NR(K)
+            END-PERFORM
+ 
+            MOVE 1 TO TAB3-NR(1).
+            MOVE 1 TO TAB3-NR(8).
+            MOVE 1 TO TAB3-NR(4).
+            MOVE 6 TO TAB3-NR(2).
+            MOVE 5 TO TAB3-NR(3).
+            MOVE 5 TO TAB3-NR(9).
+            MOVE 2 TO TAB3-NR(5).
+            MOVE 2 TO TAB3-NR(10).
+            MOVE 4 TO TAB3-NR(6).
+            MOVE 3 TO TAB3-NR(7).
+ 
+            MOVE "abcde" TO TAB3-DATA(1).
+            MOVE "AbCde" TO TAB3-DATA(2).
+            MOVE "abcde" TO TAB3-DATA(3).
+            MOVE "zyx" TO TAB3-DATA(4).
+            MOVE "12345" TO TAB3-DATA(5).
+            MOVE "zyx" TO TAB3-DATA(6).
+            MOVE "abcde" TO TAB3-DATA(7).
+            MOVE "AbCde" TO TAB3-DATA(8).
+            MOVE "abc" TO TAB3-DATA(9).
+            MOVE "12346" TO TAB3-DATA(10).
+ 
+            MOVE "day" TO TAB3-DATA2(1).
+            MOVE "The" TO TAB3-DATA2(2).
+            MOVE "eats" TO TAB3-DATA2(3).
+            MOVE "." TO TAB3-DATA2(4).
+            MOVE "mooos" TO TAB3-DATA2(5).
+            MOVE "grass" TO TAB3-DATA2(6).
+            MOVE "and" TO TAB3-DATA2(7).
+            MOVE "whole" TO TAB3-DATA2(8).
+            MOVE "cow" TO TAB3-DATA2(9).
+            MOVE "the" TO TAB3-DATA2(10).
+ 
+            SORT ROW1 DESCENDING TAB1-NR
+            SORT ROW2 DESCENDING TAB2-NR
+ 
+            DISPLAY "SINGLE TABLE" END-DISPLAY
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              DISPLAY TAB1-NR(K) END-DISPLAY
+            END-PERFORM
+ 
+            DISPLAY "LOWER LEVEL TABLE" END-DISPLAY
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              DISPLAY  TAB2-NR(K) END-DISPLAY
+            END-PERFORM
+ 
+            SORT ROW3 DESCENDING TAB3-NR ASCENDING TAB3-DATA
+ 
+            DISPLAY "MULTY KEY SORT" END-DISPLAY
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 10
+              DISPLAY  FUNCTION TRIM(ROW3(K))
+              END-DISPLAY
+            END-PERFORM
+ 
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,22 ----
+ SINGLE TABLE
+ 04
+ 03
+ 02
+ 01
+ LOWER LEVEL TABLE
+ 04
+ 03
+ 02
+ 01
+ MULTY KEY SORT
+ 06  AbCde  The
+ 05  abc    cow
+ 05  abcde  eats
+ 04  zyx    grass
+ 03  abcde  and
+ 02  12345  mooos
+ 02  12346  the
+ 01  AbCde  whole
+ 01  abcde  day
+ 01  zyx    .
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,48 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/SORT__table_sort__3A_.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        ENVIRONMENT DIVISION.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01 K                 PIC 9(2).
+ 
+        01 CNT1              PIC 9(9) COMP-5 VALUE 4.
+        01 TAB1.
+           05 ROW1 OCCURS 1 TO 4 DEPENDING CNT1
+                                   DESCENDING TAB1-NR.
+              10 TAB1-NR     PIC 99.
+              10 TAB-DATA    PIC X(5).
+        01 TAB2.
+           05 ROW2 OCCURS 1 TO 4 DEPENDING CNT1
+                                   ASCENDING ROW2.
+              10 TAB2-NR     PIC 99.
+              10 TAB2-DATA   PIC X(5).
+ 
+        PROCEDURE DIVISION.
+        A.
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              MOVE K     TO TAB1-NR (K)
+              MOVE 'BLA' TO TAB-DATA(K)
+            END-PERFORM
+ 
+            SORT ROW1
+ 
+            DISPLAY "After SORT [DESCENDING] ROW1"
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              DISPLAY TAB1-NR(K) NO ADVANCING END-DISPLAY
+            END-PERFORM
+            DISPLAY ""
+ 
+            MOVE TAB1 TO TAB2
+            SORT ROW2
+ 
+            DISPLAY "After SORT [ASCENDING] ROW2"
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              DISPLAY TAB2-NR(K) NO ADVANCING END-DISPLAY
+            END-PERFORM
+            DISPLAY ""
+ 
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,5 ----
+ After SORT [DESCENDING] ROW1
+ 04030201
+ After SORT [ASCENDING] ROW2
+ 01020304
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,44 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/SORT__table_sort__3B_.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog2.
+        ENVIRONMENT DIVISION.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01 K                 PIC 9(2).
+ 
+        01 CNT1              PIC 9(9) COMP-5 VALUE 4.
+        01 TAB1.
+           05 ROW1 OCCURS 5        DESCENDING TAB1-NR.
+              10 TAB1-NR     PIC 99 VALUE ZERO.
+              10 TAB-DATA    PIC X(5).
+        01 TAB2.
+           05 ROW1 OCCURS 1 TO 4 DEPENDING CNT1
+                                   DESCENDING TAB1-NR.
+              10 TAB1-NR     PIC 99.
+              10 TAB-DATA    PIC X(5).
+ 
+        PROCEDURE DIVISION.
+        A.
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              MOVE K     TO TAB1-NR  OF TAB2(K)
+              MOVE 'BLA' TO TAB-DATA OF TAB2(K)
+            END-PERFORM
+ 
+            DISPLAY "Before sort"
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              DISPLAY TAB1-NR OF TAB2(K) NO ADVANCING END-DISPLAY
+            END-PERFORM
+            DISPLAY ""
+ 
+            SORT ROW1 OF TAB2.
+ 
+            DISPLAY "After descending sort"
+            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+              DISPLAY TAB1-NR OF TAB2(K) NO ADVANCING END-DISPLAY
+            END-PERFORM
+            DISPLAY ""
+ 
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,5 ----
+ Before sort
+ 01020304
+ After descending sort
+ 04030201
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,27 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/SOURCE_FIXED_FREE_directives.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        >>SOURCE FREE
+    DATA             DIVISION.
+    WORKING-STORAGE  SECTION.
+    >>SOURCE FIXED
+        PROCEDURE        DIVISION.                                       FIXED
+              DISPLAY "OK" NO ADVANCING
+              END-DISPLAY.
+        >>SOURCE FREE
+                                                                         DISPLAY
+    "OK"
+  NO ADVANCING
+    END-DISPLAY.
+       >>SOURCE FORMAT FIXED
+              DISPLAY "OK" NO ADVANCING                                  FIXED
+              END-DISPLAY.
+        >>SOURCE FORMAT IS FREE
+                                                                         DISPLAY
+    "OK"
+  NO ADVANCING
+    END-DISPLAY.
+              STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ OKOKOKOK
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,10 ----
+        *> { dg-do run }
+        *> { dg-xfail-run-if "" { *-*-* }  }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        PROCEDURE        DIVISION.
+            STOP RUN WITH ERROR STATUS.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,9 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        PROCEDURE        DIVISION.
+            STOP RUN WITH NORMAL STATUS.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,104 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out" }
+ 
+        identification division.
+        program-id. prog.
+        data division.
+        working-storage section.
+        77 simple-str     pic x(20).
+        77 err-str        pic x(50).
+       *-----------------------------------------------------------------
+        procedure division.
+       *    STRING test
+            move spaces to simple-str
+            string 'data'
+              delimited by size
+              into simple-str
+              on overflow
+                move spaces to err-str
+                string 'STRING OVERFLOW'
+                   delimited by size
+                   into err-str
+                end-string
+                display err-str upon syserr
+                end-display
+                display '1 failed'
+                end-display
+              not on overflow
+                display '1 passed'
+                end-display
+            end-string
+            if simple-str not = 'data'
+              display 'STRING ERROR (1): "' simple-str '"'
+              end-display
+            end-if
+       *
+            move spaces to simple-str
+            string 'data is too big here...'
+              delimited by size
+              into simple-str
+              on overflow
+                display '2 passed'
+                end-display
+              not on overflow
+                display '2 failed'
+                end-display
+                move spaces to err-str
+                string 'missing OVERFLOW'
+                   delimited by size
+                   into err-str
+                end-string
+                display err-str upon syserr
+                end-display
+            end-string
+            if simple-str not = 'data is too big here'
+              display 'STRING ERROR (2): "' simple-str '"'
+              end-display
+            end-if
+       *
+       *    UNSTRING test
+            move spaces to simple-str
+            unstring 'data'
+              into simple-str
+              on overflow
+                move spaces to err-str
+                unstring 'UNSTRING OVERFLOW'
+                   into err-str
+                end-unstring
+                display err-str upon syserr
+                end-display
+                display '3 failed'
+                end-display
+              not on overflow
+                display '3 passed'
+                end-display
+            end-unstring
+            if simple-str not = 'data'
+              display 'UNSTRING ERROR (1): "' simple-str '"'
+              end-display
+            end-if
+       *
+            move spaces to simple-str
+            unstring 'data is too big here...'
+              into simple-str
+              on overflow
+                display '4 passed'
+                end-display
+              not on overflow
+                display '4 failed'
+                end-display
+                move spaces to err-str
+                string 'missing OVERFLOW'
+                   delimited by size
+                   into err-str
+                end-string
+                display err-str upon syserr
+                end-display
+            end-unstring
+            if simple-str not = 'data is too big here'
+              display 'UNSTRING ERROR (2): "' simple-str '"'
+              end-display
+            end-if
+       *
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,5 ----
+ 1 passed
+ 2 passed
+ 3 passed
+ 4 passed
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  G.
+            02 X         PIC X(3) OCCURS 3.
+        PROCEDURE        DIVISION.
+            MOVE   SPACES TO G.
+            STRING "abc" INTO X(2)
+            END-STRING.
+            IF G NOT = "   abc   "
+               DISPLAY X(1) NO ADVANCING
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,20 ----
+        *> { dg-do run }
+        *> { dg-options "-fno-static-call -rdynamic" }
+        *> { dg-output-file "group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      caller.
+        PROCEDURE        DIVISION.
+            CALL "callee1" ON EXCEPTION
+               CALL "callee2" ON EXCEPTION
+                   DISPLAY "neither callee1 nor callee2 found"
+               END-CALL
+            END-CALL
+            GOBACK.
+        END PROGRAM caller.
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      callee2.
+        PROCEDURE        DIVISION.
+            DISPLAY "this is callee2" NO ADVANCING
+            GOBACK.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1 ----
+ this is callee2
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,26 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01  G.
+            03 FILLER    PIC XXX VALUE "ABC".
+            03 FILLER    PIC XX  VALUE LOW-VALUE.
+            03 FILLER    PIC XXX VALUE "DEF".
+        01  A            PIC XXX.
+        01  B            PIC XXX.
+        PROCEDURE        DIVISION.
+            UNSTRING G DELIMITED BY ALL LOW-VALUE
+                       INTO A B
+            END-UNSTRING.
+            IF A NOT = "ABC"
+               DISPLAY "A is " """" A """"
+               END-DISPLAY
+            END-IF.
+            IF B NOT = "DEF"
+               DISPLAY "B is " """" B """"
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,56 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION  DIVISION.
+        PROGRAM-ID.     prog.
+        ENVIRONMENT     DIVISION.
+        DATA            DIVISION.
+        WORKING-STORAGE SECTION.
+        01  WS-RECORD.
+            02 VALUE SPACE           PIC X(04).
+            02 VALUE "ABC AND DE"    PIC X(10).
+            02 VALUE SPACE           PIC X(07).
+            02 VALUE "FG AND HIJ"    PIC X(10).
+            02 VALUE SPACE           PIC X(08).
+        01  SPACE-2                  PIC X(02) VALUE SPACE.
+        01  WS-DUMMY                 PIC X(15).
+        01  WS-POINTER               PIC 99.
+        PROCEDURE       DIVISION.
+            MOVE 1 TO WS-POINTER.
+       *
+            PERFORM 0001-SUB.
+            IF WS-DUMMY NOT = SPACE
+               DISPLAY "Expected space - Got " WS-DUMMY
+               END-DISPLAY
+            END-IF.
+            IF WS-POINTER NOT = 5
+               DISPLAY "Expected 5 - Got " WS-POINTER
+               END-DISPLAY
+            END-IF.
+       *
+            PERFORM 0001-SUB.
+            IF WS-DUMMY NOT = "ABC AND DE"
+               DISPLAY "Expected ABC AND DE - Got " WS-DUMMY
+               END-DISPLAY
+            END-IF.
+            IF WS-POINTER NOT = 21
+               DISPLAY "Expected 21 - Got " WS-POINTER
+               END-DISPLAY
+            END-IF.
+       *
+            PERFORM 0001-SUB.
+            IF WS-DUMMY NOT = " FG AND HIJ"
+               DISPLAY "Expected  FG AND HIJ - Got " WS-DUMMY
+               END-DISPLAY
+            END-IF.
+            IF WS-POINTER NOT = 40
+               DISPLAY "Expected 40 - Got " WS-POINTER
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+        0001-SUB.
+            UNSTRING WS-RECORD
+                     DELIMITED BY ALL SPACE-2
+               INTO WS-DUMMY
+               POINTER WS-POINTER
+            END-UNSTRING.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,45 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION  DIVISION.
+        PROGRAM-ID.     prog.
+        ENVIRONMENT     DIVISION.
+        DATA            DIVISION.
+        WORKING-STORAGE SECTION.
+        01  WS-LAY-RECORD            PIC X(66).
+        01  WS-DUMMY                 PIC X(50).
+        01  WS-KEYWORD               PIC X(32).
+        01  WS-POINTER               PIC 99.
+        PROCEDURE       DIVISION.
+            MOVE
+        '        10  AF-RECORD-TYPE-SEQUENCE-04     PIC   9(05) COMP-3.'
+                   TO WS-LAY-RECORD.
+            MOVE 1 TO WS-POINTER.
+            PERFORM 0001-SUB.
+            IF WS-POINTER NOT = 48
+               DISPLAY "Expected 48 - Got " WS-POINTER
+               END-DISPLAY
+            END-IF.
+            ADD 7  TO WS-POINTER
+            END-ADD.
+            PERFORM 0001-SUB.
+            IF WS-POINTER NOT = 62
+               DISPLAY "Expected 62 - Got " WS-POINTER
+               END-DISPLAY
+            END-IF.
+            PERFORM 0001-SUB.
+            IF WS-POINTER NOT = 63
+               DISPLAY "Expected 63 - Got " WS-POINTER
+               END-DISPLAY
+            END-IF.
+            STOP RUN.
+        0001-SUB.
+            UNSTRING WS-LAY-RECORD
+                     DELIMITED
+                     BY ' PIC '
+                     OR ' COMP-3'
+                     OR '.'
+               INTO WS-DUMMY
+               DELIMITER WS-KEYWORD
+               POINTER WS-POINTER
+            END-UNSTRING.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,35 ----
+        *> { dg-do run }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        ENVIRONMENT      DIVISION.
+        DATA             DIVISION.
+        WORKING-STORAGE SECTION.
+        01  WK-CMD       PIC X(8) VALUE "WWADDBCC".
+        01  WK-SIGNS     PIC XX   VALUE "AB".
+        01  WKS REDEFINES WK-SIGNS.
+            03 WK-SIGN   PIC X OCCURS 2.
+        01  .
+          02 WK-DELIM     PIC X OCCURS 2.
+        01  .
+          02 WK-DATA      PIC X(2) OCCURS 3.
+        PROCEDURE        DIVISION.
+            UNSTRING WK-CMD DELIMITED BY WK-SIGN(1) OR WK-SIGN(2)
+            INTO WK-DATA(1) DELIMITER IN WK-DELIM(1)
+                 WK-DATA(2) DELIMITER IN WK-DELIM(2)
+                 WK-DATA(3)
+            END-UNSTRING
+            IF  WK-DATA(1)   NOT = "WW"
+             OR WK-DATA(2)   NOT = "DD"
+             OR WK-DATA(3)   NOT = "CC"
+             OR WK-DELIM(1)  NOT = "A"
+             OR WK-DELIM(2)  NOT = "B"
+                DISPLAY """" WK-DATA(1)
+                        WK-DATA(2)
+                        WK-DATA(3)
+                        WK-DELIM(1)
+                        WK-DELIM(2) """"
+                END-DISPLAY
+            END-IF.
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,42 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/UNSTRING_with_FUNCTION___literal.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        DATA  DIVISION.
+        WORKING-STORAGE SECTION.
+        01  FILLER.
+          05  TSTUNS PIC X(479).
+          05  PRM    PIC X(16) OCCURS 4 TIMES.
+        PROCEDURE DIVISION.
+            MOVE "The,Quick,Brown,Fox" TO TSTUNS.
+            UNSTRING TSTUNS DELIMITED BY ','
+               INTO  PRM(1), PRM(2), PRM(3), PRM(4).
+            DISPLAY "PRM(1) is " PRM(1) ":".
+            DISPLAY "PRM(2) is " PRM(2) ":".
+            DISPLAY "PRM(3) is " PRM(3) ":".
+            DISPLAY "PRM(4) is " PRM(4) ":".
+            UNSTRING FUNCTION UPPER-CASE(TSTUNS) DELIMITED BY ','
+               INTO  PRM(1), PRM(2), PRM(3), PRM(4).
+            DISPLAY "Now using UPPER-CASE"
+            DISPLAY "PRM(1) is " PRM(1) ":".
+            DISPLAY "PRM(2) is " PRM(2) ":".
+            DISPLAY "PRM(3) is " PRM(3) ":".
+            DISPLAY "PRM(4) is " PRM(4) ":".
+            UNSTRING "Daddy,was,a,Rolling stone" DELIMITED BY ','
+               INTO  PRM(1), PRM(2), PRM(3), PRM(4).
+            DISPLAY "Now using Literal"
+            DISPLAY "PRM(1) is " PRM(1) ":".
+            DISPLAY "PRM(2) is " PRM(2) ":".
+            DISPLAY "PRM(3) is " PRM(3) ":".
+            DISPLAY "PRM(4) is " PRM(4) ":".
+            UNSTRING FUNCTION LOWER-CASE("Daddy,was,a,Rolling stone")
+                 DELIMITED BY ','
+               INTO  PRM(1), PRM(2), PRM(3), PRM(4).
+            DISPLAY "Now using Literal + LOWER-CASE"
+            DISPLAY "PRM(1) is " PRM(1) ":".
+            DISPLAY "PRM(2) is " PRM(2) ":".
+            DISPLAY "PRM(3) is " PRM(3) ":".
+            DISPLAY "PRM(4) is " PRM(4) ":".
+            STOP RUN.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,20 ----
+ PRM(1) is The             :
+ PRM(2) is Quick           :
+ PRM(3) is Brown           :
+ PRM(4) is Fox             :
+ Now using UPPER-CASE
+ PRM(1) is THE             :
+ PRM(2) is QUICK           :
+ PRM(3) is BROWN           :
+ PRM(4) is FOX             :
+ Now using Literal
+ PRM(1) is Daddy           :
+ PRM(2) is was             :
+ PRM(3) is a               :
+ PRM(4) is Rolling stone   :
+ Now using Literal + LOWER-CASE
+ PRM(1) is daddy           :
+ PRM(2) is was             :
+ PRM(3) is a               :
+ PRM(4) is rolling stone   :
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,10 ----
+        *> { dg-do run }
+        *> { dg-options "-static" }
+        *> { dg-output-file "group2/_-static__compilation.out" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. prog.
+        PROCEDURE DIVISION.
+        DISPLAY "hello, world".
+        end program prog.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/_-static__compilation.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/_-static__compilation.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/_-static__compilation.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/_-static__compilation.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,2 ----
+ hello, world
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob gcc-16-20250511/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,34 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out" }
+ 
+         identification   division.
+         program-id.      caller.
+         data             division.
+         working-storage  section.
+         01 x             pic x(4) value '9876'.
+         procedure        division.
+            call 'callee' using x
+            end-call
+            call 'callee' using omitted
+            end-call
+            stop run.
+            end program caller.
+ 
+         identification   division.
+         program-id.      callee.
+         data             division.
+         working-storage  section.
+         01 py pointer.
+         linkage          section.
+         01 x.
+           05 y          pic x(4).
+         procedure        division using optional x.
+         set py to address of x.
+         if py is not equal to zero
+             display y
+         else
+             display "parameter omitted"
+         end-if.
+         goback.
+         end program callee.
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out gcc-16-20250511/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out
*** gcc-16-20250504/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out	Sun May 11 22:32:11 2025
***************
*** 0 ****
--- 1,3 ----
+ 9876
+ parameter omitted
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion3.C gcc-16-20250511/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion3.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion3.C	Sun May 11 22:32:12 2025
***************
*** 0 ****
--- 1,15 ----
+ // PR c++/120204
+ // { dg-do compile { target c++14 } }
+ 
+ template<class T, int t>
+ struct array{};
+ 
+ template <typename... TArgs> struct ILEArglist {
+   using Sizes = array<int, sizeof...(TArgs)>;
+   static constexpr int size() {	// { dg-bogus "not usable" }
+     Sizes &offsets_c = offsets;	// { dg-error "depends on itself" }
+     return 0;
+   }
+   array<char, size()> offsets(); // { dg-error "constant expression" }
+ };
+ auto arglist = ILEArglist<>();
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/concepts-nondep5.C gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/concepts-nondep5.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/concepts-nondep5.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/concepts-nondep5.C	Sun May 11 22:32:13 2025
***************
*** 0 ****
--- 1,34 ----
+ // The from_range_t default ctor should not break the PR99599 workaround
+ // { dg-do compile { target c++20 } }
+ 
+ template<typename T>
+ struct S { T t; };
+ 
+ template<typename T>
+ concept C = sizeof(S<T>) > 0;
+ 
+ struct I;
+ 
+ struct from_range_t {
+     explicit from_range_t() = default;
+ };
+ inline constexpr from_range_t from_range;
+ 
+ template<typename T>
+ concept FromRange = __is_same_as (T, from_range_t);
+ 
+ //#define WORKAROUND
+ #ifdef WORKAROUND
+ template<FromRange U, C T>
+ void f(U, T*);
+ #else
+ template<C T>
+ void f(from_range_t, T*);
+ #endif
+ 
+ void f(...);
+ 
+ void g(I* p)
+ {
+     ::f(0, p);
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/concepts-nondep6.C gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/concepts-nondep6.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/concepts-nondep6.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/concepts-nondep6.C	Sun May 11 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/120185
+ 
+ struct A {
+   A(...);
+ };
+ 
+ template <class T> void f(A, T) { }
+ 
+ int main()
+ {
+   f(42, 24);
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C	Sun May  4 22:32:18 2025
--- gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C	Sun May 11 22:32:13 2025
*************** template <class T, class U> concept C =
*** 7,13 ****
  // { dg-error "depends on itself" "" { target *-*-* } .-2 }
  
  template <class Rep> struct Int {
!   Int(); // make the class non-aggregate in light of PR99599 fix
    template <class T> requires C<T, Rep> friend void operator*(T, Int) { }
    template <class T> requires C<T, Rep> friend void operator*(Int, T) { }
  };
--- 7,13 ----
  // { dg-error "depends on itself" "" { target *-*-* } .-2 }
  
  template <class Rep> struct Int {
!   Int(int = 0); // make the class ineligible for PR99599 workaround
    template <class T> requires C<T, Rep> friend void operator*(T, Int) { }
    template <class T> requires C<T, Rep> friend void operator*(Int, T) { }
  };
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/constinit16.C gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/constinit16.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/constinit16.C	Sun May  4 22:32:18 2025
--- gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/constinit16.C	Sun May 11 22:32:13 2025
***************
*** 2,8 ****
  // { dg-do compile { target c++20 } }
  // { dg-add-options tls }
  // { dg-require-alias "" }
! // { dg-require-effective-target tls_runtime }
  // { dg-final { scan-assembler-not "_ZTH17mythreadlocalvar1" } }
  // { dg-final { scan-assembler "_ZTH17mythreadlocalvar2" } }
  // { dg-final { scan-assembler-not "_ZTH17mythreadlocalvar3" } }
--- 2,8 ----
  // { dg-do compile { target c++20 } }
  // { dg-add-options tls }
  // { dg-require-alias "" }
! // { dg-require-effective-target tls }
  // { dg-final { scan-assembler-not "_ZTH17mythreadlocalvar1" } }
  // { dg-final { scan-assembler "_ZTH17mythreadlocalvar2" } }
  // { dg-final { scan-assembler-not "_ZTH17mythreadlocalvar3" } }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/decomp2.C gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/decomp2.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/cpp2a/decomp2.C	Sun May  4 22:32:18 2025
--- gcc-16-20250511/gcc/testsuite/g++.dg/cpp2a/decomp2.C	Sun May 11 22:32:13 2025
***************
*** 1,7 ****
  // P1091R3
  // { dg-do run { target c++11 } }
  // { dg-options "" }
! // { dg-require-effective-target tls }
  // { dg-add-options tls }
  
  namespace std {
--- 1,7 ----
  // P1091R3
  // { dg-do run { target c++11 } }
  // { dg-options "" }
! // { dg-require-effective-target tls_runtime }
  // { dg-add-options tls }
  
  namespace std {
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2.C gcc-16-20250511/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2.C	Sun May 11 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/118163
+ // { dg-do "compile" }
+ 
+ template<class T>
+ struct S {  // { dg-note "until the closing brace" }
+   S s;	    // { dg-error "has incomplete type" }
+ };
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2a.C gcc-16-20250511/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2a.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/diagnostic/incomplete-type-2a.C	Sun May 11 22:32:13 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/118163
+ // { dg-do "compile" }
+ // { dg-additional-options "-Wno-template-body" }
+ 
+ template<class T>
+ struct S {  // { dg-bogus "until the closing brace" }
+   S s;	    // { dg-bogus "has incomplete type" }
+ };
+ 
+ // Check that we don't suppress errors outside of the body.
+ struct forward_decl;	    // { dg-note "forward declaration" }
+ template<class T>
+ void foo (forward_decl) {}  // { dg-error "has incomplete type" }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/diagnostic/inhibit-warn-3.C gcc-16-20250511/gcc/testsuite/g++.dg/diagnostic/inhibit-warn-3.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/diagnostic/inhibit-warn-3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/diagnostic/inhibit-warn-3.C	Sun May 11 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ // PR c++/118392
+ // { dg-do "compile" }
+ // { dg-additional-options "-w" }
+ 
+ // Fake dg-note to make sure that notes are not pruned and we can use dg-bogus.
+ // { dg-note "fake" "" { xfail *-*-* } }
+ 
+ namespace xxx {
+   struct foo {
+     friend void bar(); // { dg-bogus "only here as a friend" }
+   };
+ }
+ void xxx::bar () {}
+ 
+ void foo () {}
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/ipa/pr120146.C gcc-16-20250511/gcc/testsuite/g++.dg/ipa/pr120146.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/ipa/pr120146.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/ipa/pr120146.C	Sun May 11 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do compile }
+ // { dg-options "-O -fipa-pta" }
+ 
+ struct basic_ios {
+   ~basic_ios();
+ };
+ struct basic_istream : virtual basic_ios {};
+ template <typename> struct basic_ifstream : basic_istream {
+   template <typename _Path> basic_ifstream(_Path, int);
+ };
+ extern template class basic_ifstream<char>;
+ void CompareFiles_path2() { basic_ifstream<char>(CompareFiles_path2, 0); }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.C gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.C	Sun May 11 22:32:14 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdiagnostics-format=sarif-file" } */
+ 
+ /* Verify that we can capture the chain of parents of a
+    logical location (PR 116176).  */
+ 
+ namespace ns {
+   class foo
+   {
+     void bar ()
+     {
+       return 0;
+     }
+   };
+ }
+ 
+ /* We expect a failing compile due to the error, but the use of
+    -fdiagnostics-format=sarif-file means there should be no output to stderr.
+    DejaGnu injects this message; ignore it:
+    { dg-prune-output "exit status is 1" } */
+ 
+ /* Verify that some JSON was written to a file with the expected name:
+    { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest logical-locations-1.C "logical-locations-1.py" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.py gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.py
*** gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-1.py	Sun May 11 22:32:14 2025
***************
*** 0 ****
--- 1,79 ----
+ from sarif import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ expected_filename = 'logical-locations-1.C'
+ 
+ def test_result(sarif):
+     runs = sarif['runs']
+     run = runs[0]
+     results = run['results']
+ 
+     # The textual form of the diagnostic would look like this:
+     #  . PATH/logical-locations-1.C: In member function ‘void ns::foo::bar()’:
+     #  . PATH/logical-locations-1.C:12:14: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
+     #  .    12 |       return 0;
+     #  .       |              ^
+     assert len(results) == 1
+ 
+     result = results[0]
+     assert result['ruleId'] == '-fpermissive'
+     assert result['level'] == 'error'
+     assert result['message']['text'] \
+         == "return-statement with a value, in function returning 'void'"
+ 
+     locations = result['locations']
+     assert len(locations) == 1
+ 
+     location = locations[0]
+     assert get_location_artifact_uri(location).endswith(expected_filename)
+     assert get_location_snippet_text(location) == '      return 0;\n'
+ 
+ def test_logical_locations(sarif):
+     runs = sarif['runs']
+     run = runs[0]
+ 
+     # We expect 3 logical locations within the run:
+     assert len(run['logicalLocations']) == 3
+ 
+     assert run['logicalLocations'][0] \
+         == {"name": "ns",
+             "fullyQualifiedName": "ns",
+             "kind": "namespace",
+             "index": 0}
+     assert run['logicalLocations'][1] \
+         == {"name": "foo",
+             # Ideally we'd also have:
+             #   "fullyQualifiedName": "ns::foo",
+             "kind": "type",
+             "parentIndex": 0,
+             "index": 1}
+     assert run['logicalLocations'][2] \
+         == {"name": "bar",
+             "fullyQualifiedName": "ns::foo::bar",
+             "decoratedName": "_ZN2ns3foo3barEv",
+             "kind": "function",
+             "parentIndex": 1,
+             "index": 2}
+ 
+     results = run['results']
+ 
+     assert len(results) == 1
+ 
+     result = results[0]
+ 
+     locations = result['locations']
+     assert len(locations) == 1
+ 
+     location = locations[0]
+ 
+     # We expect one logical location within the result, referencing
+     # one in the run
+     assert len(location['logicalLocations']) == 1
+     assert location['logicalLocations'][0] \
+         == {'fullyQualifiedName': 'ns::foo::bar',
+             'index': 2}
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.C gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.C	Sun May 11 22:32:14 2025
***************
*** 0 ****
--- 1,69 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdiagnostics-format=sarif-file" } */
+ 
+ /* Verify that we correctly consolidate logical locations
+    involving repeated diagnostics within a nested hierarchy
+    (PR 116176).  */
+ 
+ namespace ns_outer {
+   namespace ns_inner_1 {
+     class klass_1
+     {
+       void member_fn_1 ()
+       {
+ 	return 0;
+       }
+       void member_fn_2 ()
+       {
+ 	return 0;
+       }
+     };
+     class klass_2
+     {
+       void member_fn_1 ()
+       {
+ 	return 0;
+       }
+       void member_fn_2 ()
+       {
+ 	return 0;
+       }
+     };
+   } // ns_inner_1
+   namespace ns_inner_2 {
+     class klass_1
+     {
+       void member_fn_1 ()
+       {
+ 	return 0;
+       }
+       void member_fn_2 ()
+       {
+ 	return 0;
+       }
+     };
+     class klass_2
+     {
+       void member_fn_1 ()
+       {
+ 	return 0;
+       }
+       void member_fn_2 ()
+       {
+ 	return 0;
+       }
+     };
+   } // ns_inner_2
+ } // ns_outer
+ 
+ /* We expect a failing compile due to the error, but the use of
+    -fdiagnostics-format=sarif-file means there should be no output to stderr.
+    DejaGnu injects this message; ignore it:
+    { dg-prune-output "exit status is 1" } */
+ 
+ /* Verify that some JSON was written to a file with the expected name:
+    { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest logical-locations-2.C "logical-locations-2.py" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.py gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.py
*** gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-2.py	Sun May 11 22:32:14 2025
***************
*** 0 ****
--- 1,90 ----
+ from sarif import *
+ from pprint import pprint
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ expected_filename = 'logical-locations-2.C'
+ 
+ def test_logical_locations(sarif):
+     runs = sarif['runs']
+     run = runs[0]
+ 
+     # We expect 15 logical locations within the run expressing
+     # a logical hierarchy, and 8 results with one logical locations
+     # in each, referencing back into the run.
+ 
+     # Generate the "gold" output we expect.
+     expected_in_run = []
+     expected_in_results = []
+ 
+     outer_ns_index_in_run = len(expected_in_run)
+     expected_in_run += [{"name": "ns_outer",
+                          "fullyQualifiedName": "ns_outer",
+                          "kind": "namespace",
+                          "index": outer_ns_index_in_run}]
+ 
+     for inner_ns in ['ns_inner_1', 'ns_inner_2']:
+         inner_ns_idx_in_run = len(expected_in_run)
+         expected_in_run += [{"name": inner_ns,
+                              "fullyQualifiedName": f"ns_outer::{inner_ns}",
+                              "kind": "namespace",
+                              "index": inner_ns_idx_in_run,
+                              "parentIndex": 0}]
+         for klass in ['klass_1', 'klass_2']:
+             klass_idx_in_run = len(expected_in_run)
+             expected_in_run += [{"name": klass,
+                                  "kind": "type",
+                                  "index": klass_idx_in_run,
+                                  "parentIndex": inner_ns_idx_in_run}]
+             for member_fn in ['member_fn_1', 'member_fn_2']:
+                 fqn = f'ns_outer::{inner_ns}::{klass}::{member_fn}'
+                 member_fn_idx_in_run = len(expected_in_run)
+                 expected_in_run += [{"name": member_fn,
+                                      "kind": "function",
+                                      "fullyQualifiedName": f"ns_outer::{inner_ns}::{klass}::{member_fn}",
+                                      "decoratedName": f"_ZN8ns_outer10{inner_ns}7{klass}11{member_fn}Ev",
+                                      "index": member_fn_idx_in_run,
+                                      "parentIndex": klass_idx_in_run}]
+                 expected_in_results += [{'fullyQualifiedName': fqn,
+                                          'index': member_fn_idx_in_run}]
+ 
+     pprint(expected_in_run)
+     pprint(expected_in_results)
+     assert len(expected_in_run) == 15
+     assert len(expected_in_results) == 8
+ 
+     # We expect 15 logical locations within the run:
+     assert len(run['logicalLocations']) == len(expected_in_run)
+     for actual, expected in zip(run['logicalLocations'], expected_in_run):
+         assert actual == expected
+ 
+     # We expect 8 results with one logical location in each
+     results = run['results']
+     assert len(results) == len(expected_in_results)
+ 
+     index = 0
+     for inner_ns in ['ns_inner_1', 'ns_inner_2']:
+         for klass in ['klass_1', 'klass_2']:
+             for member_fn in ['member_fn_1', 'member_fn_2']:
+                 result = results[index]
+                 assert result['ruleId'] == '-fpermissive'
+                 assert result['level'] == 'error'
+                 assert result['message']['text'] \
+                     == "return-statement with a value, in function returning 'void'"
+ 
+                 locations = result['locations']
+                 assert len(locations) == 1
+ 
+                 location = locations[0]
+ 
+                 # We expect one logical location within the result, referencing
+                 # one in the run
+                 assert len(location['logicalLocations']) == 1
+                 assert location['logicalLocations'][0] \
+                     == expected_in_results[index]
+ 
+                 index += 1
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.C gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.C
*** gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.C	Sun May 11 22:32:14 2025
***************
*** 0 ****
--- 1,85 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdiagnostics-format=sarif-file" } */
+ 
+ /* Verify that we handle deeply nested logical locations
+    (PR 116176).  */
+ 
+ #define NS_OPEN(SUFFIX) namespace ns_##SUFFIX {
+ #define NS_CLOSE   }
+ 
+ #define NS_OPEN_10(SUFFIX) \
+   NS_OPEN(SUFFIX##0) \
+   NS_OPEN(SUFFIX##1) \
+   NS_OPEN(SUFFIX##2) \
+   NS_OPEN(SUFFIX##3) \
+   NS_OPEN(SUFFIX##4) \
+   NS_OPEN(SUFFIX##5) \
+   NS_OPEN(SUFFIX##6) \
+   NS_OPEN(SUFFIX##7) \
+   NS_OPEN(SUFFIX##8) \
+   NS_OPEN(SUFFIX##9)
+ 
+ #define NS_CLOSE_10 \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE \
+   NS_CLOSE
+ 
+ #define NS_OPEN_100(SUFFIX) \
+   NS_OPEN_10(SUFFIX##0) \
+   NS_OPEN_10(SUFFIX##1) \
+   NS_OPEN_10(SUFFIX##2) \
+   NS_OPEN_10(SUFFIX##3) \
+   NS_OPEN_10(SUFFIX##4) \
+   NS_OPEN_10(SUFFIX##5) \
+   NS_OPEN_10(SUFFIX##6) \
+   NS_OPEN_10(SUFFIX##7) \
+   NS_OPEN_10(SUFFIX##8) \
+   NS_OPEN_10(SUFFIX##9)
+ 
+ #define NS_CLOSE_100 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10 \
+   NS_CLOSE_10
+ 
+ #define NS_OPEN_200 \
+   NS_OPEN_100(a) \
+   NS_OPEN_100(b)
+ 
+ #define NS_CLOSE_200 \
+   NS_CLOSE_100 \
+   NS_CLOSE_100
+ 
+ NS_OPEN_200
+ 
+ void return_from_void ()
+ {
+   return 0;
+ }
+ 
+ NS_CLOSE_200
+ 
+ /* We expect a failing compile due to the error, but the use of
+    -fdiagnostics-format=sarif-file means there should be no output to stderr.
+    DejaGnu injects this message; ignore it:
+    { dg-prune-output "exit status is 1" } */
+ 
+ /* Verify that some JSON was written to a file with the expected name:
+    { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest logical-locations-3.C "logical-locations-3.py" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.py gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.py
*** gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.py	Sun May 11 22:32:14 2025
***************
*** 0 ****
--- 1,61 ----
+ from sarif import *
+ from pprint import pprint
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ expected_filename = 'logical-locations-3.C'
+ 
+ def test_logical_locations(sarif):
+     runs = sarif['runs']
+     run = runs[0]
+ 
+     # We expect a single error with this very long logical location:
+     # ../../src/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.C: In function ‘void ns_a00::ns_a01::ns_a02::ns_a03::ns_a04::ns_a05::ns_a06::ns_a07::ns_a08::ns_a09::ns_a10::ns_a11::ns_a12::ns_a13::ns_a14::ns_a15::ns_a16::ns_a17::ns_a18::ns_a19::ns_a20::ns_a21::ns_a22::ns_a23::ns_a24::ns_a25::ns_a26::ns_a27::ns_a28::ns_a29::ns_a30::ns_a31::ns_a32::ns_a33::ns_a34::ns_a35::ns_a36::ns_a37::ns_a38::ns_a39::ns_a40::ns_a41::ns_a42::ns_a43::ns_a44::ns_a45::ns_a46::ns_a47::ns_a48::ns_a49::ns_a50::ns_a51::ns_a52::ns_a53::ns_a54::ns_a55::ns_a56::ns_a57::ns_a58::ns_a59::ns_a60::ns_a61::ns_a62::ns_a63::ns_a64::ns_a65::ns_a66::ns_a67::ns_a68::ns_a69::ns_a70::ns_a71::ns_a72::ns_a73::ns_a74::ns_a75::ns_a76::ns_a77::ns_a78::ns_a79::ns_a80::ns_a81::ns_a82::ns_a83::ns_a84::ns_a85::ns_a86::ns_a87::ns_a88::ns_a89::ns_a90::ns_a91::ns_a92::ns_a93::ns_a94::ns_a95::ns_a96::ns_a97::ns_a98::ns_a99::ns_b00::ns_b01::ns_b02::ns_b03::ns_b04::ns_b05::ns_b06::ns_b07::ns_b08::ns_b09::ns_b10::ns_b11::ns_b12::ns_b13::ns_b14::ns_b15::ns_b16::ns_b17::ns_b18::ns_b19::ns_b20::ns_b21::ns_b22::ns_b23::ns_b24::ns_b25::ns_b26::ns_b27::ns_b28::ns_b29::ns_b30::ns_b31::ns_b32::ns_b33::ns_b34::ns_b35::ns_b36::ns_b37::ns_b38::ns_b39::ns_b40::ns_b41::ns_b42::ns_b43::ns_b44::ns_b45::ns_b46::ns_b47::ns_b48::ns_b49::ns_b50::ns_b51::ns_b52::ns_b53::ns_b54::ns_b55::ns_b56::ns_b57::ns_b58::ns_b59::ns_b60::ns_b61::ns_b62::ns_b63::ns_b64::ns_b65::ns_b66::ns_b67::ns_b68::ns_b69::ns_b70::ns_b71::ns_b72::ns_b73::ns_b74::ns_b75::ns_b76::ns_b77::ns_b78::ns_b79::ns_b80::ns_b81::ns_b82::ns_b83::ns_b84::ns_b85::ns_b86::ns_b87::ns_b88::ns_b89::ns_b90::ns_b91::ns_b92::ns_b93::ns_b94::ns_b95::ns_b96::ns_b97::ns_b98::ns_b99::return_from_void()’:
+     # ../../src/gcc/testsuite/g++.dg/sarif-output/logical-locations-3.C:70:10: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
+     #   70 |   return 0;
+     #      |          ^
+ 
+     # We expect 201 logical locations within the run expressing
+     # the logical hierarchy: the 200 nested namespaces, and then
+     # the function within the innermost namespace.
+     assert len(run['logicalLocations']) == 201
+ 
+     outermost = run['logicalLocations'][0]
+     assert outermost == {'fullyQualifiedName': 'ns_a00',
+                          'index': 0,
+                          'kind': 'namespace',
+                          'name': 'ns_a00'}
+ 
+     for i in range(1, 200):
+         ns_i = run['logicalLocations'][i]
+         assert ns_i['index'] == i
+         assert ns_i['kind'] == 'namespace'
+         assert ns_i['parentIndex'] == i - 1
+         expected_name = 'ns_' + 'ab'[i // 100] + '%02i' % (i % 100)
+         assert ns_i['name'] == expected_name
+         assert ns_i['fullyQualifiedName'] \
+             == run['logicalLocations'][i - 1]['fullyQualifiedName'] + "::" + expected_name
+ 
+     innermost = run['logicalLocations'][200]
+     assert innermost['index'] == 200
+     assert innermost['kind'] == 'function'
+     assert innermost['name'] == 'return_from_void'
+     assert innermost['parentIndex'] == 199
+     assert innermost['fullyQualifiedName'] \
+         == run['logicalLocations'][199]['fullyQualifiedName'] + '::return_from_void'
+ 
+     # We expect 1 error in the run, referring to the innermost
+     # logical location by index within the run's logical locations
+     results = run['results']
+     assert len(results) == 1
+     result = results[0]
+     assert len(result['locations']) == 1
+     assert len(result['locations'][0]['logicalLocations']) == 1
+     assert result['locations'][0]['logicalLocations'][0]['index'] \
+         == innermost['index']
+     assert result['locations'][0]['logicalLocations'][0]['fullyQualifiedName'] \
+         == innermost['fullyQualifiedName']
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/sarif-output.exp gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/sarif-output.exp
*** gcc-16-20250504/gcc/testsuite/g++.dg/sarif-output/sarif-output.exp	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.dg/sarif-output/sarif-output.exp	Sun May 11 22:32:14 2025
***************
*** 0 ****
--- 1,31 ----
+ # Copyright (C) 2012-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/>.
+ 
+ # GCC testsuite that uses the `dg.exp' driver.
+ 
+ # Load support procs.
+ load_lib g++-dg.exp
+ 
+ # Initialize `dg'.
+ dg-init
+ 
+ # Main loop.
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" ""
+ 
+ # All done.
+ dg-finish
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.target/i386/pr120036.C gcc-16-20250511/gcc/testsuite/g++.target/i386/pr120036.C
*** gcc-16-20250504/gcc/testsuite/g++.target/i386/pr120036.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.target/i386/pr120036.C	Sun May 11 22:32:16 2025
***************
*** 0 ****
--- 1,113 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -std=c++11 -march=sapphirerapids -fPIC" } */
+ 
+ typedef _Float16 Native;
+ struct float16_t
+ {
+   Native native;
+   float16_t ();
+   float16_t (Native arg) : native (arg) {}
+   operator Native ();
+   float16_t
+   operator+ (float16_t rhs)
+   {
+     return native + rhs.native;
+   }
+   float16_t
+   operator* (float16_t)
+   {
+     return native * native;
+   }
+ };
+ template <int N> struct Simd
+ {
+   static constexpr int kPrivateLanes = N;
+ };
+ template <int N> struct ClampNAndPow2
+ {
+   using type = Simd<N>;
+ };
+ template <int kLimit> struct CappedTagChecker
+ {
+   static constexpr int N = sizeof (int) ? kLimit : 0;
+   using type = typename ClampNAndPow2<N>::type;
+ };
+ template <typename, int kLimit, int>
+ using CappedTag = typename CappedTagChecker<kLimit>::type;
+ template <class D>
+ int
+ Lanes (D)
+ {
+   return D::kPrivateLanes;
+ }
+ template <class D> int Zero (D);
+ template <class D> using VFromD = decltype (Zero (D ()));
+ struct Vec512
+ {
+   __attribute__ ((__vector_size__ (16))) _Float16 raw;
+ };
+ Vec512 Zero (Simd<2>);
+ template <class D> void ReduceSum (D, VFromD<D>);
+ struct Dot
+ {
+   template <int, class D, typename T>
+   static T
+   Compute (D d, T *pa, int num_elements)
+   {
+     T *pb;
+     int N = Lanes (d), i = 0;
+     if (__builtin_expect (num_elements < N, 0))
+       {
+         T sum0 = 0, sum1 = 0;
+         for (; i + 2 <= num_elements; i += 2)
+           {
+             float16_t __trans_tmp_6 = pa[i] * pb[i],
+                       __trans_tmp_5 = sum0 + __trans_tmp_6,
+                       __trans_tmp_8 = pa[i + 1] * pb[1],
+                       __trans_tmp_7 = sum1 + __trans_tmp_8;
+             sum0 = __trans_tmp_5;
+             sum1 = __trans_tmp_7;
+           }
+         float16_t __trans_tmp_9 = sum0 + sum1;
+         return __trans_tmp_9;
+       }
+     decltype (Zero (d)) sum0;
+     ReduceSum (d, sum0);
+     __builtin_trap ();
+   }
+ };
+ template <int kMul, class Test, int kPow2> struct ForeachCappedR
+ {
+   static void
+   Do (int min_lanes, int max_lanes)
+   {
+     CappedTag<int, kMul, kPow2> d;
+     Test () (int (), d);
+     ForeachCappedR<kMul / 2, Test, kPow2>::Do (min_lanes, max_lanes);
+   }
+ };
+ template <class Test, int kPow2> struct ForeachCappedR<0, Test, kPow2>
+ {
+   static void Do (int, int);
+ };
+ struct TestDot
+ {
+   template <class T, class D>
+   void
+   operator() (T, D d)
+   {
+     int counts[]{ 1, 3 };
+     for (int num : counts)
+       {
+         float16_t a;
+         T __trans_tmp_4 = Dot::Compute<0> (d, &a, num);
+       }
+   }
+ };
+ int DotTest_TestAllDot_TestTestBody_max_lanes;
+ void
+ DotTest_TestAllDot_TestTestBody ()
+ {
+   ForeachCappedR<64, TestDot, 0>::Do (
+       1, DotTest_TestAllDot_TestTestBody_max_lanes);
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/g++.target/riscv/redundant-andi.C gcc-16-20250511/gcc/testsuite/g++.target/riscv/redundant-andi.C
*** gcc-16-20250504/gcc/testsuite/g++.target/riscv/redundant-andi.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/g++.target/riscv/redundant-andi.C	Sun May 11 22:32:16 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64gcb -mabi=lp64" { target rv64 } } */
+ /* { dg-options "-O2 -march=rv32gcb -mabi=ilp32" { target rv32 } } */
+ 
+ 
+ typedef int move_s;
+ struct state_t
+ {
+   int npieces[13];
+ };
+ typedef struct state_t state_t;
+ int
+ search (state_t *s, int alpha, int beta, int depth, int is_null, int cutnode,
+ 	int extend, int wpcs, int bpcs, move_s moves[240])
+ {
+   int i;
+   if ((((moves[i]) >> 19) & 0x0F) != 13
+       && (((moves[i]) >> 19) & 0x0F) != 1 && (((moves[i]) >> 19) & 0x0F) != 2)
+     if ((wpcs + bpcs) == 1)
+       extend += 4;
+   return extend;
+ }
+ 
+ /* A splitter was generating an unnecessary andi instruction.  Verify it's
+    not in our output.  */
+ /* { dg-final { scan-assembler-not "andi\t\[a-z\]\[0-9\],\[a-z\]\[0-9\],-1" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/html-output/html-output.exp gcc-16-20250511/gcc/testsuite/gcc.dg/html-output/html-output.exp
*** gcc-16-20250504/gcc/testsuite/gcc.dg/html-output/html-output.exp	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/html-output/html-output.exp	Sun May 11 22:32:17 2025
***************
*** 0 ****
--- 1,31 ----
+ # Copyright (C) 2012-2024 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/>.
+ 
+ # GCC testsuite that uses the `dg.exp' driver.
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
+ 
+ # Initialize `dg'.
+ dg-init
+ 
+ # Main loop.
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] "" ""
+ 
+ # All done.
+ dg-finish
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c gcc-16-20250511/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c	Sun May 11 22:32:17 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdiagnostics-add-output=experimental-html" } */
+ 
+ /* Verify that basics of HTML output work.  */
+ 
+ int missing_semicolon (void)
+ {
+   return 42 /* { dg-error "expected ';' before '.' token" } */
+ }
+ 
+ /* Use a Python script to verify various properties about the generated
+    .html file:
+    { dg-final { run-html-pytest missing-semicolon.c "missing-semicolon.py" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py gcc-16-20250511/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
*** gcc-16-20250504/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py	Sun May 11 22:32:17 2025
***************
*** 0 ****
--- 1,84 ----
+ # Verify that basics of HTML output work.
+ #
+ # For reference, we expect this textual output:
+ #
+ # PATH/missing-semicolon.c: In function ‘missing_semicolon’:
+ # PATH/missing-semicolon.c:8:12: error: expected ‘;’ before ‘}’ token
+ #     8 |   return 42 /* { dg-error "expected ';' before '.' token" } */
+ #       |            ^
+ #       |            ;
+ #     9 | }
+ #       | ~           
+ 
+ from htmltest import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def html_tree():
+     return html_tree_from_env()
+ 
+ XHTML = 'http://www.w3.org/1999/xhtml'
+ ns = {'xhtml': XHTML}
+ 
+ def make_tag(local_name):
+     return f'{{{XHTML}}}' + local_name
+ 
+ def test_basics(html_tree):
+     root = html_tree.getroot ()
+     assert root.tag == make_tag('html')
+ 
+     head = root.find('xhtml:head', ns)
+     assert head is not None
+ 
+     title = head.find('xhtml:title', ns)
+     assert title.text == 'Title goes here'
+ 
+     body = root.find('xhtml:body', ns)
+     assert body is not None
+ 
+     diag_list = body.find('xhtml:div', ns)
+     assert diag_list is not None
+     assert diag_list.attrib['class'] == 'gcc-diagnostic-list'
+ 
+     diag = diag_list.find('xhtml:div', ns)
+     assert diag is not None
+     assert diag.attrib['class'] == 'gcc-diagnostic'
+ 
+     message = diag.find('xhtml:span', ns)
+     assert message is not None
+     assert message.attrib['class'] == 'gcc-message'
+     assert message.text == "expected '"
+     assert message[0].tag == make_tag('span')
+     assert message[0].attrib['class'] == 'gcc-quoted-text'
+     assert message[0].text == ';'
+     assert message[0].tail == "' before '"
+     assert message[1].tag == make_tag('span')
+     assert message[1].attrib['class'] == 'gcc-quoted-text'
+     assert message[1].text == '}'
+     assert message[1].tail == "' token"
+ 
+     pre = diag.find('xhtml:pre', ns)
+     assert pre is not None
+     assert pre.attrib['class'] == 'gcc-annotated-source'
+ 
+ # For reference, here's the generated HTML:
+ """
+ <?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE html
+      PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+   <head>
+     <title>Title goes here</title>
+   </head>
+   <body>
+     <div class="gcc-diagnostic-list">
+       <div class="gcc-diagnostic">
+         <span class="gcc-message">expected &apos;<span class="gcc-quoted-text">;</span>&apos; before &apos;<span class="gcc-quoted-text">}</span>&apos; token</span>
+         <pre class="gcc-annotated-source"></pre>
+       </div>
+     </div>
+   </body>
+ </html>
+ """
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/ipa/pr119852.c gcc-16-20250511/gcc/testsuite/gcc.dg/ipa/pr119852.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/ipa/pr119852.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/ipa/pr119852.c	Sun May 11 22:32:17 2025
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-ipa-clones"  } */
+ 
+ typedef struct rtx_def *rtx;
+ enum rtx_code {
+   LAST_AND_UNUSED_RTX_CODE};
+ extern const char * const rtx_format[((int) LAST_AND_UNUSED_RTX_CODE)];
+ struct rtx_def {
+   enum rtx_code code;
+ };
+ typedef int (*rtx_function) (rtx *, void *);
+ extern int for_each_rtx (rtx *, rtx_function, void *);
+ int
+ replace_label (rtx *x, void *data)
+ {
+   rtx l = *x;
+   if (l == (rtx) 0)
+     {
+  {
+    rtx new_c, new_l;
+    for_each_rtx (&new_c, replace_label, data);
+  }
+     }
+ }
+ static int
+ for_each_rtx_1 (rtx exp, int n, rtx_function f, void *data)
+ {
+   int result, i, j;
+   const char *format = (rtx_format[(int) (((enum rtx_code) (exp)->code))]);
+   rtx *x;
+   for (; format[n] != '\0'; n++)
+     {
+       switch (format[n])
+  {
+  case 'e':
+    result = (*f) (x, data);
+      {
+        result = for_each_rtx_1 (*x, i, f, data);
+      }
+  }
+     }
+ }
+ int
+ for_each_rtx (rtx *x, rtx_function f, void *data)
+ {
+   int i;
+   return for_each_rtx_1 (*x, i, f, data);
+ }
+ 
+ /* { dg-final { scan-ipa-dump-not "(null)"  "ipa-clones"  } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/lto/modref-2_0.c gcc-16-20250511/gcc/testsuite/gcc.dg/lto/modref-2_0.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/lto/modref-2_0.c	Sun May  4 22:32:21 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/lto/modref-2_0.c	Sun May 11 22:32:18 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-lto-do run } */
  /* { dg-lto-options {"-O2 -flto-partition=max -flto -fno-ipa-sra"}  } */
+ /* { dg-extra-ld-options { -lm } } */
  __attribute__ ((noinline))
  void
  test (char *a)
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/lto/pr60779_0.c gcc-16-20250511/gcc/testsuite/gcc.dg/lto/pr60779_0.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/lto/pr60779_0.c	Sun May  4 22:32:21 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/lto/pr60779_0.c	Sun May 11 22:32:18 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-lto-do link } */
+ /* { dg-require-linker-plugin "" } */
  /* { dg-lto-options { { -O -flto -fdump-tree-optimized } } } */
  
  _Complex double bar (_Complex double x, _Complex double y);
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/diagnostic-test-xhtml-1.c gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/diagnostic-test-xhtml-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/diagnostic-test-xhtml-1.c	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/diagnostic-test-xhtml-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,19 ****
- /* { dg-do compile } */
- 
- int missing_semicolon (void)
- {
-   return 42
- }
- 
- /* Verify some properties of the generated HTML.  */
- 
- /* { dg-begin-multiline-output "" }
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
-   <head>
-    { dg-end-multiline-output "" } */
- 
- /* { dg-excess-errors "" } */
--- 0 ----
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.cc gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.cc
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.cc	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.cc	Sun May 11 22:32:18 2025
*************** example_1 ()
*** 147,153 ****
      {
        auto_diagnostic_group d;
        gcc_rich_location richloc (gimple_location (call_to_PyList_Append));
!       simple_diagnostic_path path (global_dc->get_reference_printer ());
        diagnostic_event_id_t alloc_event_id
  	= path.add_event (gimple_location (call_to_PyList_New),
  			  example_a_fun->decl, 0,
--- 147,155 ----
      {
        auto_diagnostic_group d;
        gcc_rich_location richloc (gimple_location (call_to_PyList_Append));
!       tree_logical_location_manager logical_loc_mgr;
!       simple_diagnostic_path path (logical_loc_mgr,
! 				   global_dc->get_reference_printer ());
        diagnostic_event_id_t alloc_event_id
  	= path.add_event (gimple_location (call_to_PyList_New),
  			  example_a_fun->decl, 0,
*************** class test_diagnostic_path : public simp
*** 214,220 ****
  {
   public:
    test_diagnostic_path (pretty_printer *event_pp)
!   : simple_diagnostic_path (event_pp)
    {
    }
    diagnostic_event_id_t
--- 216,223 ----
  {
   public:
    test_diagnostic_path (pretty_printer *event_pp)
!   : simple_diagnostic_path (m_logical_loc_mgr,
! 			    event_pp)
    {
    }
    diagnostic_event_id_t
*************** class test_diagnostic_path : public simp
*** 262,267 ****
--- 265,273 ----
      add_event (call_evloc.m_loc, call_evloc.m_fun->decl, caller_stack_depth,
  	       "calling %qs", callee);
    }
+ 
+ private:
+   tree_logical_location_manager m_logical_loc_mgr;
  };
  
  static void
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.cc gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.cc
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.cc	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,985 ****
- /* Verify that we can write a non-trivial diagnostic output format
-    as a plugin (XHTML).
-    Copyright (C) 2018-2024 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_LIST
- #define INCLUDE_MAP
- #define INCLUDE_MEMORY
- #define INCLUDE_VECTOR
- #include "system.h"
- #include "coretypes.h"
- #include "diagnostic.h"
- #include "diagnostic-metadata.h"
- #include "diagnostic-path.h"
- #include "cpplib.h"
- #include "logical-location.h"
- #include "diagnostic-client-data-hooks.h"
- #include "diagnostic-diagram.h"
- #include "text-art/canvas.h"
- #include "diagnostic-format.h"
- #include "diagnostic-buffer.h"
- #include "ordered-hash-map.h"
- #include "sbitmap.h"
- #include "selftest.h"
- #include "selftest-diagnostic.h"
- #include "selftest-diagnostic-show-locus.h"
- #include "text-range-label.h"
- #include "pretty-print-format-impl.h"
- #include "pretty-print-urlifier.h"
- #include "intl.h"
- #include "gcc-plugin.h"
- #include "plugin-version.h"
- 
- namespace xml {
- 
- /* Disable warnings about quoting issues in the pp_xxx calls below
-    that (intentionally) don't follow GCC diagnostic conventions.  */
- #if __GNUC__ >= 10
- #  pragma GCC diagnostic push
- #  pragma GCC diagnostic ignored "-Wformat-diag"
- #endif
- 
- static void write_escaped_text (const char *text);
- 
- struct node
- {
-   virtual ~node () {}
-   virtual void write_as_xml (pretty_printer *pp,
- 			     int depth, bool indent) const = 0;
-   void dump (FILE *out) const;
-   void DEBUG_FUNCTION dump () const { dump (stderr); }
- };
- 
- struct text : public node
- {
-   text (label_text str)
-   : m_str (std::move (str))
-   {}
- 
-   void write_as_xml (pretty_printer *pp,
- 		     int depth, bool indent) const final override;
- 
-   label_text m_str;
- };
- 
- struct node_with_children : public node
- {
-   void add_child (std::unique_ptr<node> node);
-   void add_text (label_text str);
- 
-   std::vector<std::unique_ptr<node>> m_children;
- };
- 
- struct document : public node_with_children
- {
-   void write_as_xml (pretty_printer *pp,
- 		     int depth, bool indent) const final override;
- };
- 
- struct element : public node_with_children
- {
-   element (const char *kind, bool preserve_whitespace)
-   : m_kind (kind),
-     m_preserve_whitespace (preserve_whitespace)
-   {}
- 
-   void write_as_xml (pretty_printer *pp,
- 		     int depth, bool indent) const final override;
- 
-   void set_attr (const char *name, label_text value);
- 
-   const char *m_kind;
-   bool m_preserve_whitespace;
-   std::map<const char *, label_text> m_attributes;
- };
- 
- /* Implementation.  */
- 
- static void
- write_escaped_text (pretty_printer *pp, const char *text)
- {
-   gcc_assert (text);
- 
-   for (const char *p = text; *p; ++p)
-     {
-       char ch = *p;
-       switch (ch)
- 	{
- 	default:
- 	  pp_character (pp, ch);
- 	  break;
- 	case '\'':
- 	  pp_string (pp, "&apos;");
- 	  break;
- 	case '"':
- 	  pp_string (pp, "&quot;");
- 	  break;
- 	case '&':
- 	  pp_string (pp, "&amp;");
- 	  break;
- 	case '<':
- 	  pp_string (pp, "&lt;");
- 	  break;
- 	case '>':
- 	  pp_string (pp, "&gt;");
- 	  break;
- 	}
-     }
- }
- 
- /* struct node.  */
- 
- void
- node::dump (FILE *out) const
- {
-   pretty_printer pp;
-   pp.set_output_stream (out);
-   write_as_xml (&pp, 0, true);
-   pp_flush (&pp);
- }
- 
- /* struct text : public node.  */
- 
- void
- text::write_as_xml (pretty_printer *pp, int /*depth*/, bool /*indent*/) const
- {
-   write_escaped_text (pp, m_str.get ());
- }
- 
- /* struct node_with_children : public node.  */
- 
- void
- node_with_children::add_child (std::unique_ptr<node> node)
- {
-   gcc_assert (node.get ());
-   m_children.push_back (std::move (node));
- }
- 
- void
- node_with_children::add_text (label_text str)
- {
-   gcc_assert (str.get ());
-   add_child (std::make_unique <text> (std::move (str)));
- }
- 
- 
- /* struct document : public node_with_children.  */
- 
- void
- document::write_as_xml (pretty_printer *pp, int depth, bool indent) const
- {
-   pp_string (pp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-   pp_string (pp, "<!DOCTYPE html\n"
- 	     "     PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
- 	     "     \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
-   for (auto &iter : m_children)
-     iter->write_as_xml (pp, depth, indent);
- }
- 
- /* struct element : public node_with_children.  */
- 
- void
- element::write_as_xml (pretty_printer *pp, int depth, bool indent) const
- {
-   if (indent)
-     {
-       pp_newline (pp);
-       for (int i = 0; i < depth; ++i)
- 	pp_string (pp, "  ");
-     }
- 
-   if (m_preserve_whitespace)
-     indent = false;
- 
-   pp_printf (pp, "<%s", m_kind);
-   for (auto &attr : m_attributes)
-     {
-       pp_printf (pp, " %s=\"", attr.first);
-       write_escaped_text (pp, attr.second.get ());
-       pp_string (pp, "\"");
-     }
-   if (m_children.empty ())
-     pp_string (pp, " />");
-   else
-     {
-       pp_string (pp, ">");
-       for (auto &child : m_children)
- 	child->write_as_xml (pp, depth + 1, indent);
-       if (indent)
- 	{
- 	  pp_newline (pp);
- 	  for (int i = 0; i < depth; ++i)
- 	    pp_string (pp, "  ");
- 	}
-       pp_printf (pp, "</%s>", m_kind);
-     }
- }
- 
- void
- element::set_attr (const char *name, label_text value)
- {
-   m_attributes[name] = std::move (value);
- }
- 
- #if __GNUC__ >= 10
- #  pragma GCC diagnostic pop
- #endif
- 
- } // namespace xml
- 
- class xhtml_builder;
- 
- /* Concrete buffering implementation subclass for HTML output.  */
- 
- class diagnostic_xhtml_format_buffer : public diagnostic_per_format_buffer
- {
- public:
-   friend class xhtml_builder;
-   friend class xhtml_output_format;
- 
-   diagnostic_xhtml_format_buffer (xhtml_builder &builder)
-   : m_builder (builder)
-   {}
- 
-   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;
- 
-   void add_result (std::unique_ptr<xml::element> result)
-   {
-     m_results.push_back (std::move (result));
-   }
- 
- private:
-   xhtml_builder &m_builder;
-   std::vector<std::unique_ptr<xml::element>> m_results;
- };
- 
- /* A class for managing XHTML output of diagnostics.
- 
-    Implemented:
-    - message text
- 
-    Known limitations/missing functionality:
-    - title for page
-    - file/line/column
-    - error vs warning
-    - CWEs
-    - rules
-    - fix-it hints
-    - paths
- */
- 
- class xhtml_builder
- {
- public:
-   friend class diagnostic_xhtml_format_buffer;
- 
-   xhtml_builder (diagnostic_context &context,
- 		 pretty_printer &pp,
- 		 const line_maps *line_maps);
- 
-   void on_report_diagnostic (const diagnostic_info &diagnostic,
- 			     diagnostic_t orig_diag_kind,
- 			     diagnostic_xhtml_format_buffer *buffer);
-   void emit_diagram (const diagnostic_diagram &diagram);
-   void end_group ();
- 
-   std::unique_ptr<xml::element> take_current_diagnostic ()
-   {
-     return std::move (m_cur_diagnostic_element);
-   }
- 
-   void flush_to_file (FILE *outf);
- 
-   const xml::document &get_document () const { return *m_document; }
- 
-   void set_printer (pretty_printer &pp)
-   {
-     m_printer = &pp;
-   }
- 
- private:
-   std::unique_ptr<xml::element>
-   make_element_for_diagnostic (const diagnostic_info &diagnostic,
- 			       diagnostic_t orig_diag_kind);
- 
-   diagnostic_context &m_context;
-   pretty_printer *m_printer;
-   const line_maps *m_line_maps;
- 
-   std::unique_ptr<xml::document> m_document;
-   xml::element *m_diagnostics_element;
-   std::unique_ptr<xml::element> m_cur_diagnostic_element;
- };
- 
- static std::unique_ptr<xml::element>
- make_div (label_text class_)
- {
-   auto div = std::make_unique<xml::element> ("div", false);
-   div->set_attr ("class", std::move (class_));
-   return div;
- }
- 
- static std::unique_ptr<xml::element>
- make_span (label_text class_)
- {
-   auto span = std::make_unique<xml::element> ("span", true);
-   span->set_attr ("class", std::move (class_));
-   return span;
- }
- 
- /* class diagnostic_xhtml_format_buffer : public diagnostic_per_format_buffer.  */
- 
- void
- diagnostic_xhtml_format_buffer::dump (FILE *out, int indent) const
- {
-   fprintf (out, "%*sdiagnostic_xhtml_format_buffer:\n", indent, "");
-   int idx = 0;
-   for (auto &result : m_results)
-     {
-       fprintf (out, "%*sresult[%i]:\n", indent + 2, "", idx);
-       result->dump (out);
-       fprintf (out, "\n");
-       ++idx;
-     }
- }
- 
- bool
- diagnostic_xhtml_format_buffer::empty_p () const
- {
-   return m_results.empty ();
- }
- 
- void
- diagnostic_xhtml_format_buffer::move_to (diagnostic_per_format_buffer &base)
- {
-   diagnostic_xhtml_format_buffer &dest
-     = static_cast<diagnostic_xhtml_format_buffer &> (base);
-   for (auto &&result : m_results)
-     dest.m_results.push_back (std::move (result));
-   m_results.clear ();
- }
- 
- void
- diagnostic_xhtml_format_buffer::clear ()
- {
-   m_results.clear ();
- }
- 
- void
- diagnostic_xhtml_format_buffer::flush ()
- {
-   for (auto &&result : m_results)
-     m_builder.m_diagnostics_element->add_child (std::move (result));
-   m_results.clear ();
- }
- 
- /* class xhtml_builder.  */
- 
- /* xhtml_builder's ctor.  */
- 
- xhtml_builder::xhtml_builder (diagnostic_context &context,
- 			      pretty_printer &pp,
- 			      const line_maps *line_maps)
- : m_context (context),
-   m_printer (&pp),
-   m_line_maps (line_maps)
- {
-   gcc_assert (m_line_maps);
- 
-   m_document = std::make_unique<xml::document> ();
-   {
-     auto html_element = std::make_unique<xml::element> ("html", false);
-     html_element->set_attr
-       ("xmlns",
-        label_text::borrow ("http://www.w3.org/1999/xhtml"));
-     {
-       {
- 	auto head_element = std::make_unique<xml::element> ("head", false);
- 	{
- 	  auto title_element = std::make_unique<xml::element> ("title", true);
- 	  label_text title (label_text::borrow ("Title goes here")); // TODO
- 	  title_element->add_text (std::move (title));
- 	  head_element->add_child (std::move (title_element));
- 	}
- 	html_element->add_child (std::move (head_element));
- 
- 	auto body_element = std::make_unique<xml::element> ("body", false);
- 	{
- 	  auto diagnostics_element
- 	    = make_div (label_text::borrow ("gcc-diagnostic-list"));
- 	  m_diagnostics_element = diagnostics_element.get ();
- 	  body_element->add_child (std::move (diagnostics_element));
- 	}
- 	html_element->add_child (std::move (body_element));
-       }
-     }
-     m_document->add_child (std::move (html_element));
-   }
- }
- 
- /* Implementation of "on_report_diagnostic" for XHTML output.  */
- 
- void
- xhtml_builder::on_report_diagnostic (const diagnostic_info &diagnostic,
- 				     diagnostic_t orig_diag_kind,
- 				     diagnostic_xhtml_format_buffer *buffer)
- {
-   if (diagnostic.kind == DK_ICE || diagnostic.kind == DK_ICE_NOBT)
-     {
-       /* Print a header for the remaining output to stderr, and
- 	 return, attempting to print the usual ICE messages to
- 	 stderr.  Hopefully this will be helpful to the user in
- 	 indicating what's gone wrong (also for DejaGnu, for pruning
- 	 those messages).   */
-       fnotice (stderr, "Internal compiler error:\n");
-     }
- 
-   auto diag_element
-     = make_element_for_diagnostic (diagnostic, orig_diag_kind);
-   if (buffer)
-     {
-       gcc_assert (!m_cur_diagnostic_element);
-       buffer->m_results.push_back (std::move (diag_element));
-     }
-   else
-     {
-       if (m_cur_diagnostic_element)
- 	/* Nested diagnostic.  */
- 	m_cur_diagnostic_element->add_child (std::move (diag_element));
-       else
- 	/* Top-level diagnostic.  */
- 	m_cur_diagnostic_element = std::move (diag_element);
-     }
- }
- 
- std::unique_ptr<xml::element>
- xhtml_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
- 					    diagnostic_t orig_diag_kind)
- {
-   class xhtml_token_printer : public token_printer
-   {
-   public:
-     xhtml_token_printer (xhtml_builder &builder,
- 			 xml::element &parent_element)
-     : m_builder (builder)
-     {
-       m_open_elements.push_back (&parent_element);
-     }
-     void print_tokens (pretty_printer */*pp*/,
- 		       const pp_token_list &tokens) final override
-     {
-       /* Implement print_tokens by adding child elements to
- 	 m_parent_element.  */
-       for (auto iter = tokens.m_first; iter; iter = iter->m_next)
- 	switch (iter->m_kind)
- 	  {
- 	  default:
- 	    gcc_unreachable ();
- 
- 	  case pp_token::kind::text:
- 	    {
- 	      pp_token_text *sub = as_a <pp_token_text *> (iter);
- 	      /* The value might be in the obstack, so we may need to
- 		 copy it.  */
- 	      insertion_element ().add_text
- 		(label_text::take (xstrdup (sub->m_value.get ())));
- 	    }
- 	    break;
- 
- 	  case pp_token::kind::begin_color:
- 	  case pp_token::kind::end_color:
- 	    /* These are no-ops.  */
- 	    break;
- 
- 	  case pp_token::kind::begin_quote:
- 	    {
- 	      insertion_element ().add_text (label_text::borrow (open_quote));
- 	      push_element (make_span (label_text::borrow ("gcc-quoted-text")));
- 	    }
- 	    break;
- 	  case pp_token::kind::end_quote:
- 	    {
- 	      pop_element ();
- 	      insertion_element ().add_text (label_text::borrow (close_quote));
- 	    }
- 	    break;
- 
- 	  case pp_token::kind::begin_url:
- 	    {
- 	      pp_token_begin_url *sub = as_a <pp_token_begin_url *> (iter);
- 	      auto anchor = std::make_unique<xml::element> ("a", true);
- 	      anchor->set_attr ("href", std::move (sub->m_value));
- 	      push_element (std::move (anchor));
- 	    }
- 	    break;
- 	  case pp_token::kind::end_url:
- 	    pop_element ();
- 	    break;
- 	  }
-     }
- 
-   private:
-     xml::element &insertion_element () const
-     {
-       return *m_open_elements.back ();
-     }
-     void push_element (std::unique_ptr<xml::element> new_element)
-     {
-       xml::element &current_top = insertion_element ();
-       m_open_elements.push_back (new_element.get ());
-       current_top.add_child (std::move (new_element));
-     }
-     void pop_element ()
-     {
-       m_open_elements.pop_back ();
-     }
- 
-     xhtml_builder &m_builder;
-     /* We maintain a stack of currently "open" elements.
-        Children are added to the topmost open element.  */
-     std::vector<xml::element *> m_open_elements;
-   };
- 
-   auto diag_element = make_div (label_text::borrow ("gcc-diagnostic"));
- 
-   // TODO: might be nice to emulate the text output format, but colorize it
- 
-   auto message_span = make_span (label_text::borrow ("gcc-message"));
-   xhtml_token_printer tok_printer (*this, *message_span.get ());
-   m_printer->set_token_printer (&tok_printer);
-   pp_output_formatted_text (m_printer, m_context.get_urlifier ());
-   m_printer->set_token_printer (nullptr);
-   pp_clear_output_area (m_printer);
-   diag_element->add_child (std::move (message_span));
- 
-   if (diagnostic.metadata)
-     {
-       int cwe = diagnostic.metadata->get_cwe ();
-       if (cwe)
- 	{
- 	  diag_element->add_text (label_text::borrow (" "));
- 	  auto cwe_span = make_span (label_text::borrow ("gcc-cwe-metadata"));
- 	  cwe_span->add_text (label_text::borrow ("["));
- 	  {
- 	    auto anchor = std::make_unique<xml::element> ("a", true);
- 	    anchor->set_attr ("href", label_text::take (get_cwe_url (cwe)));
- 	    pretty_printer pp;
- 	    pp_printf (&pp, "CWE-%i", cwe);
- 	    anchor->add_text
- 	      (label_text::take (xstrdup (pp_formatted_text (&pp))));
- 	    cwe_span->add_child (std::move (anchor));
- 	  }
- 	  cwe_span->add_text (label_text::borrow ("]"));
- 	  diag_element->add_child (std::move (cwe_span));
- 	}
-     }
- 
-   // TODO: show any rules
- 
-   label_text option_text = label_text::take
-     (m_context.make_option_name (diagnostic.option_id,
- 				 orig_diag_kind, diagnostic.kind));
-   if (option_text.get ())
-     {
-       label_text option_url = label_text::take
- 	(m_context.make_option_url (diagnostic.option_id));
- 
-       diag_element->add_text (label_text::borrow (" "));
-       auto option_span = make_span (label_text::borrow ("gcc-option"));
-       option_span->add_text (label_text::borrow ("["));
-       {
- 	if (option_url.get ())
- 	  {
- 	    auto anchor = std::make_unique<xml::element> ("a", true);
- 	    anchor->set_attr ("href", std::move (option_url));
- 	    anchor->add_text (std::move (option_text));
- 	    option_span->add_child (std::move (anchor));
- 	  }
- 	else
- 	  option_span->add_text (std::move (option_text));
- 	option_span->add_text (label_text::borrow ("]"));
-       }
-       diag_element->add_child (std::move (option_span));
-     }
- 
-   {
-     auto pre = std::make_unique<xml::element> ("pre", true);
-     pre->set_attr ("class", label_text::borrow ("gcc-annotated-source"));
-     // TODO: ideally we'd like to capture elements within the following:
-     diagnostic_show_locus (&m_context, m_context.m_source_printing,
- 			   diagnostic.richloc, diagnostic.kind,
- 			   m_printer);
-     pre->add_text
-       (label_text::take (xstrdup (pp_formatted_text (m_printer))));
-     pp_clear_output_area (m_printer);
-     diag_element->add_child (std::move (pre));
-   }
- 
-   return diag_element;
- }
- 
- /* Implementation of diagnostic_context::m_diagrams.m_emission_cb
-    for XHTML output.  */
- 
- void
- xhtml_builder::emit_diagram (const diagnostic_diagram &/*diagram*/)
- {
-   /* We must be within the emission of a top-level diagnostic.  */
-   gcc_assert (m_cur_diagnostic_element);
- 
-   // TODO
- }
- 
- /* Implementation of "end_group_cb" for XHTML output.  */
- 
- void
- xhtml_builder::end_group ()
- {
-   if (m_cur_diagnostic_element)
-     m_diagnostics_element->add_child (std::move (m_cur_diagnostic_element));
- }
- 
- /* Create a top-level object, and add it to all the results
-    (and other entities) we've seen so far.
- 
-    Flush it all to OUTF.  */
- 
- void
- xhtml_builder::flush_to_file (FILE *outf)
- {
-   auto top = m_document.get ();
-   top->dump (outf);
-   fprintf (outf, "\n");
- }
- 
- class xhtml_output_format : public diagnostic_output_format
- {
- public:
-   ~xhtml_output_format ()
-   {
-     /* Any diagnostics should have been handled by now.
-        If not, then something's gone wrong with diagnostic
-        groupings.  */
-     std::unique_ptr<xml::element> pending_diag
-       = m_builder.take_current_diagnostic ();
-     gcc_assert (!pending_diag);
-   }
- 
-   void dump (FILE *out, int indent) const override
-   {
-     fprintf (out, "%*sxhtml_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_xhtml_format_buffer> (m_builder);
-   }
-   void set_buffer (diagnostic_per_format_buffer *base_buffer) final override
-   {
-     diagnostic_xhtml_format_buffer *buffer
-       = static_cast<diagnostic_xhtml_format_buffer *> (base_buffer);
-     m_buffer = buffer;
-   }
- 
-   void on_begin_group () final override
-   {
-     /* No-op,  */
-   }
-   void on_end_group () final override
-   {
-     m_builder.end_group ();
-   }
-   void
-   on_report_diagnostic (const diagnostic_info &diagnostic,
- 			diagnostic_t orig_diag_kind) final override
-   {
-     m_builder.on_report_diagnostic (diagnostic, orig_diag_kind, m_buffer);
-   }
-   void on_diagram (const diagnostic_diagram &diagram) final override
-   {
-     m_builder.emit_diagram (diagram);
-   }
-   void after_diagnostic (const diagnostic_info &)
-   {
-     /* No-op, but perhaps could show paths here.  */
-   }
-   bool follows_reference_printer_p () const final override
-   {
-     return false;
-   }
-   void update_printer () final override
-   {
-     m_printer = m_context.clone_printer ();
- 
-     /* Don't colorize the text.  */
-     pp_show_color (m_printer.get ()) = false;
- 
-     /* No textual URLs.  */
-     m_printer->set_url_format (URL_FORMAT_NONE);
- 
-     /* Update the builder to use the new printer.  */
-     m_builder.set_printer (*get_printer ());
-   }
- 
-   const xml::document &get_document () const
-   {
-     return m_builder.get_document ();
-   }
- 
- protected:
-   xhtml_output_format (diagnostic_context &context,
- 		       const line_maps *line_maps)
-   : diagnostic_output_format (context),
-     m_builder (context, *get_printer (), line_maps),
-     m_buffer (nullptr)
-   {}
- 
-   xhtml_builder m_builder;
-   diagnostic_xhtml_format_buffer *m_buffer;
- };
- 
- class xhtml_stream_output_format : public xhtml_output_format
- {
- public:
-   xhtml_stream_output_format (diagnostic_context &context,
- 			      const line_maps *line_maps,
- 			      FILE *stream)
-   : xhtml_output_format (context, line_maps),
-     m_stream (stream)
-   {
-   }
-   ~xhtml_stream_output_format ()
-   {
-     m_builder.flush_to_file (m_stream);
-   }
-   bool machine_readable_stderr_p () const final override
-   {
-     return m_stream == stderr;
-   }
- private:
-   FILE *m_stream;
- };
- 
- class xhtml_file_output_format : public xhtml_output_format
- {
- public:
-   xhtml_file_output_format (diagnostic_context &context,
- 			    const line_maps *line_maps,
- 			    const char *base_file_name)
-   : xhtml_output_format (context, line_maps),
-     m_base_file_name (xstrdup (base_file_name))
-   {
-   }
-   ~xhtml_file_output_format ()
-   {
-     char *filename = concat (m_base_file_name, ".xhtml", 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;
-       }
-     m_builder.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 XHTML output (either to stderr, or
-    to a file).  */
- 
- static void
- diagnostic_output_format_init_xhtml (diagnostic_context &context,
- 				     std::unique_ptr<xhtml_output_format> 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));
- }
- 
- /* Populate CONTEXT in preparation for XHTML output to stderr.  */
- 
- void
- diagnostic_output_format_init_xhtml_stderr (diagnostic_context &context,
- 					    const line_maps *line_maps)
- {
-   gcc_assert (line_maps);
-   auto format = std::make_unique<xhtml_stream_output_format> (context,
- 							      line_maps,
- 							      stderr);
-   diagnostic_output_format_init_xhtml (context, std::move (format));
- }
- 
- /* Populate CONTEXT in preparation for XHTML output to a file named
-    BASE_FILE_NAME.xhtml.  */
- 
- void
- diagnostic_output_format_init_xhtml_file (diagnostic_context &context,
- 					  const line_maps *line_maps,
- 					  const char *base_file_name)
- {
-   gcc_assert (line_maps);
-   auto format = std::make_unique<xhtml_file_output_format> (context,
- 							    line_maps,
- 							    base_file_name);
-   diagnostic_output_format_init_xhtml (context, std::move (format));
- }
- 
- #if CHECKING_P
- 
- namespace selftest {
- 
- /* A subclass of xhtml_output_format for writing selftests.
-    The XML output is cached internally, rather than written
-    out to a file.  */
- 
- class test_xhtml_diagnostic_context : public test_diagnostic_context
- {
- public:
-   test_xhtml_diagnostic_context ()
-   {
-     auto format = std::make_unique<xhtml_buffered_output_format> (*this,
- 								  line_table);
-     m_format = format.get (); // borrowed
-     diagnostic_output_format_init_xhtml (*this, std::move (format));
-   }
- 
-   const xml::document &get_document () const
-   {
-     return m_format->get_document ();
-   }
- 
- private:
-   class xhtml_buffered_output_format : public xhtml_output_format
-   {
-   public:
-     xhtml_buffered_output_format (diagnostic_context &context,
- 				  const line_maps *line_maps)
-       : xhtml_output_format (context, line_maps)
-     {
-     }
-     bool machine_readable_stderr_p () const final override
-     {
-       return true;
-     }
-   };
- 
-   xhtml_output_format *m_format; // borrowed
- };
- 
-   /* Test of reporting a diagnostic at UNKNOWN_LOCATION to a
-      diagnostic_context and examining the generated XML document.
-      Verify various basic properties. */
- 
- static void
- test_simple_log ()
- {
-   test_xhtml_diagnostic_context dc;
- 
-   rich_location richloc (line_table, UNKNOWN_LOCATION);
-   dc.report (DK_ERROR, richloc, nullptr, 0, "this is a test: %i", 42);
- 
-   const xml::document &doc  = dc.get_document ();
- 
-   pretty_printer pp;
-   doc.write_as_xml (&pp, 0, true);
-   ASSERT_STREQ
-     (pp_formatted_text (&pp),
-      ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-       "<!DOCTYPE html\n"
-       "     PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
-       "     \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
-       "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
-       "  <head>\n"
-       "    <title>Title goes here</title>\n"
-       "  </head>\n"
-       "  <body>\n"
-       "    <div class=\"gcc-diagnostic-list\">\n"
-       "      <div class=\"gcc-diagnostic\">\n"
-       "        <span class=\"gcc-message\">this is a test: 42</span>\n"
-       "        <pre class=\"gcc-annotated-source\"></pre>\n"
-       "      </div>\n"
-       "    </div>\n"
-       "  </body>\n"
-       "</html>"));
- }
- 
- /* Run all of the selftests within this file.  */
- 
- static void
- xhtml_format_selftests ()
- {
-   test_simple_log ();
- }
- 
- } // namespace selftest
- 
- #endif /* CHECKING_P */
- 
- /* Plugin hooks.  */
- 
- int plugin_is_GPL_compatible;
- 
- /* Entrypoint for the plugin.  */
- 
- int
- plugin_init (struct plugin_name_args *plugin_info,
- 	     struct plugin_gcc_version *version)
- {
-   const char *plugin_name = plugin_info->base_name;
-   int argc = plugin_info->argc;
-   struct plugin_argument *argv = plugin_info->argv;
- 
-   if (!plugin_default_version_check (version, &gcc_version))
-     return 1;
- 
-   global_dc->set_output_format
-     (std::make_unique<xhtml_stream_output_format> (*global_dc,
- 						   line_table,
- 						   stderr));
- 
- #if CHECKING_P
-   selftest::xhtml_format_selftests ();
- #endif
- 
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-1.h gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-1.h
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-1.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-1.h	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,6 ----
+ 
+ 
+ 
+ 
+ #include "location-overflow-test-pr116047-2.h"
+ static_assert (__LINE__ == 6, "");
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-2.h gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-2.h
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-2.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047-2.h	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1 ----
+ int i;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047.c gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr116047.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,5 ----
+ /* PR preprocessor/116047 */
+ /* { dg-do preprocess } */
+ /* { dg-options "-nostdinc -std=c23 -fplugin-arg-location_overflow_plugin-value=0x4ffe0180" } */
+ #include "location-overflow-test-pr116047-1.h"
+ /* { dg-final { scan-file location-overflow-test-pr116047.i "static_assert\[^\n\r]\*6\[^\n\r]\*== 6" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-1.h gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-1.h
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-1.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-1.h	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,6 ----
+ 
+ 
+ 
+ 
+ #include "location-overflow-test-pr120061-2.h"
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-2.h gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-2.h
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-2.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061-2.h	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1 ----
+ int i;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061.c gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr120061.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,6 ----
+ /* PR preprocessor/120061 */
+ /* { dg-do preprocess } */
+ /* { dg-options "-nostdinc -std=c23 -fplugin-arg-location_overflow_plugin-value=0x61000000" } */
+ #include "location-overflow-test-pr120061-1.h"
+ static_assert (__LINE__ == 5, "");
+ /* { dg-final { scan-file location-overflow-test-pr120061.i "static_assert\[^\n\r]\*5\[^\n\r]\*== 5" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc	Sun May 11 22:32:18 2025
*************** plugin_init (struct plugin_name_args *pl
*** 85,93 ****
      error_at (UNKNOWN_LOCATION, "missing plugin argument");
  
    /* With 64-bit locations, the thresholds are larger, so shift the base
!      location argument accordingly.  */
    gcc_assert (sizeof (location_t) == sizeof (uint64_t));
!   base_location = 1 + ((base_location - 1) << 31);
  
    register_callback (plugin_info->base_name,
  		     PLUGIN_PRAGMAS,
--- 85,102 ----
      error_at (UNKNOWN_LOCATION, "missing plugin argument");
  
    /* With 64-bit locations, the thresholds are larger, so shift the base
!      location argument accordingly, basically remap the GCC 14 32-bit
!      location_t argument values to 64-bit location_t counterparts.  There
!      is one exception for values slightly before the 32-bit location_t
!      LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES (0x50000000).  In that case
!      remap them to the same amount before the 64-bit location_t
!      LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES -
!      ((location_t) 0x50000000) << 31.  */
    gcc_assert (sizeof (location_t) == sizeof (uint64_t));
!   if (base_location >= 0x4f000000 && base_location <= 0x4fffffff)
!     base_location += (((location_t) 0x50000000) << 31) - 0x50000000;
!   else
!     base_location = 1 + ((base_location - 1) << 31);
  
    register_callback (plugin_info->base_name,
  		     PLUGIN_PRAGMAS,
*************** plugin_init (struct plugin_name_args *pl
*** 107,113 ****
        break;
  
      default:
!       error_at (UNKNOWN_LOCATION, "unrecognized value for plugin argument");
      }
  
    return 0;
--- 116,122 ----
        break;
  
      default:
!       break;
      }
  
    return 0;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/plugin.exp gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/plugin.exp
*** gcc-16-20250504/gcc/testsuite/gcc.dg/plugin/plugin.exp	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/plugin/plugin.exp	Sun May 11 22:32:18 2025
*************** set plugin_test_list [list \
*** 76,83 ****
  	  crash-test-ice-in-header-sarif-2.1.c \
  	  crash-test-ice-in-header-sarif-2.2.c \
  	  crash-test-write-though-null-sarif.c } \
-     { diagnostic_plugin_xhtml_format.cc \
- 	  diagnostic-test-xhtml-1.c } \
      { diagnostic_group_plugin.cc \
  	  diagnostic-group-test-1.c } \
      { diagnostic_plugin_test_show_locus.cc \
--- 76,81 ----
*************** set plugin_test_list [list \
*** 138,144 ****
      { location_overflow_plugin.cc \
  	  location-overflow-test-1.c \
  	  location-overflow-test-2.c \
! 	  location-overflow-test-pr83173.c } \
      { must_tail_call_plugin.cc \
  	  must-tail-call-1.c \
  	  must-tail-call-2.c } \
--- 136,144 ----
      { location_overflow_plugin.cc \
  	  location-overflow-test-1.c \
  	  location-overflow-test-2.c \
! 	  location-overflow-test-pr83173.c \
! 	  location-overflow-test-pr116047.c \
! 	  location-overflow-test-pr120061.c } \
      { must_tail_call_plugin.cc \
  	  must-tail-call-1.c \
  	  must-tail-call-2.c } \
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/pr119160.c gcc-16-20250511/gcc/testsuite/gcc.dg/pr119160.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/pr119160.c	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/pr119160.c	Sun May 11 22:32:18 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! /* { dg-options "-O2 -finstrument-functions-once -favoid-store-forwarding -fnon-call-exceptions -fschedule-insns -mgeneral-regs-only -Wno-psabi" } */
  
  typedef __attribute__((__vector_size__ (32))) int V;
  
--- 1,6 ----
  /* { dg-do run } */
! /* { dg-options "-O2 -finstrument-functions-once -favoid-store-forwarding -fnon-call-exceptions -fschedule-insns -Wno-psabi" } */
! /* { dg-additional-options "-mgeneral-regs-only" { target { x86_64-*-* i?86-*-* arm*-*-* aarch64*-*-* } } } */
  
  typedef __attribute__((__vector_size__ (32))) int V;
  
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/pr120048.c gcc-16-20250511/gcc/testsuite/gcc.dg/pr120048.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/pr120048.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/pr120048.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-tree-vrp -fno-tree-fre" } */
+ 
+ int a, b, c;
+ static int d(short e) { return e || (a && e) ? 0 : a; }
+ static void f(int e) {
+   if (!e) {
+     d(0);
+     b = d(e);
+   }
+ }
+ int main() { f(c | 1); }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/pr120074.c gcc-16-20250511/gcc/testsuite/gcc.dg/pr120074.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/pr120074.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/pr120074.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,20 ----
+ /* PR tree-optimization/120074 */
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fno-tree-copy-prop -fno-tree-forwprop -fno-tree-ccp" } */
+ 
+ int foo (int);
+ short a;
+ int b;
+ 
+ int
+ bar (int d, int e)
+ {
+   return d < 0 || d > __INT_MAX__ >> e;
+ }
+ 
+ int
+ main ()
+ {
+   int f = bar ((b ^ a) & 3, __SIZEOF_INT__ * __CHAR_BIT__ - 2);
+   foo (f);
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/pr87600.h gcc-16-20250511/gcc/testsuite/gcc.dg/pr87600.h
*** gcc-16-20250504/gcc/testsuite/gcc.dg/pr87600.h	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/pr87600.h	Sun May 11 22:32:18 2025
***************
*** 7,13 ****
  #elif defined (__i386__)
  # define REG1 "%eax"
  # define REG2 "%edx"
! #elif defined (__powerpc__) || defined (__POWERPC__)
  # define REG1 "r3"
  # define REG2 "r4"
  #elif defined (__s390__)
--- 7,13 ----
  #elif defined (__i386__)
  # define REG1 "%eax"
  # define REG2 "%edx"
! #elif defined (__powerpc__) || defined (__POWERPC__) || defined (__PPC__)
  # define REG1 "r3"
  # define REG2 "r4"
  #elif defined (__s390__)
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/pr89313.c gcc-16-20250511/gcc/testsuite/gcc.dg/pr89313.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/pr89313.c	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/pr89313.c	Sun May 11 22:32:18 2025
***************
*** 8,14 ****
  # define REG "r0"
  #elif defined (__i386__)
  # define REG "%eax"
! #elif defined (__powerpc__) || defined (__POWERPC__)
  # define REG "r3"
  #elif defined (__s390__)
  # define REG "0"
--- 8,14 ----
  # define REG "r0"
  #elif defined (__i386__)
  # define REG "%eax"
! #elif defined (__powerpc__) || defined (__POWERPC__) || defined (__PPC__)
  # define REG "r3"
  #elif defined (__s390__)
  # define REG "0"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr119131-1.c gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr119131-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr119131-1.c	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr119131-1.c	Sun May 11 22:32:18 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target dfp } */
+ /* { dg-additional-options "-Wno-psabi" } */
  /* PR target/119131 */
  
  typedef __attribute__((__vector_size__ (64))) char C;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120043.c gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120043.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120043.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120043.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fallow-store-data-races" } */
+ 
+ const int a;
+ int *b;
+ int main()
+ {
+   &a != b || (*b = 1);
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120122-1.c gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120122-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120122-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120122-1.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,51 ----
+ /* { dg-do run } */
+ /* PR tree-optimization/120122 */
+ 
+ #include <stdbool.h>
+ 
+ struct Value {
+     int type;
+     union {
+         bool boolean;
+         long long t;
+     };
+ };
+ 
+ static struct Value s_item_mem;
+ 
+ /* truthy was being miscompiled for the value.type==2 case,
+    because we would have a VCE from unsigned char to bool
+    that went from being conditional in the value.type==1 case
+    to unconditional when `value.type!=0`.
+    The move of the VCE from conditional to unconditional,
+    needs to changed into a convert (NOP_EXPR). */
+ static bool truthy(void) __attribute__((noipa));
+ static bool
+ truthy(void)
+ {
+     bool tt = false;
+     for(int i = 0; i < 10; i++)
+     {
+       struct Value value = s_item_mem;
+       if (value.type == 0)
+         tt = tt | 0;
+       else if (value.type == 1)
+         tt = tt |  value.boolean;
+       else
+         tt = tt |  1;
+     }
+     return tt;
+ }
+ 
+ int
+ main(void)
+ {
+     s_item_mem.type = 2;
+     s_item_mem.t = -1;
+     bool b1 = !truthy();
+     s_item_mem.type = 1;
+     s_item_mem.boolean = b1;
+     bool b = truthy();
+     if (b1 != b)  __builtin_abort();
+     if (b) __builtin_abort();
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120182.c gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120182.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120182.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120182.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do run { target { { *-*-linux* *-*-gnu* *-*-uclinux* } && mmap } } } */
+ 
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <sys/mman.h>
+ 
+ struct S
+ {
+   struct S *next;
+ };
+ 
+ static void __attribute__((noipa))
+ allocate(void *addr, unsigned long long size)
+ {
+   void *ptr = mmap((void *)addr, size,
+ 		   PROT_READ | PROT_WRITE,
+ 		   MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED_NOREPLACE,
+ 		   -1, 0);
+   if(ptr != addr)
+     exit(0);
+ }
+ 
+ int main (void)
+ {
+   int size = 0x8000;
+   char *ptr = (char *)0x288000ull;
+   allocate((void *)ptr, size);
+ 
+   struct S *s1 = (struct S *)ptr;
+   struct S *s2 = (struct S *)256;
+   for (int i = 0; i < 3; i++)
+     {
+       for(char *addr = (char *)s1; addr < (char *)s1 + sizeof(*s1); ++addr)
+ 	*addr = 0;
+ 
+       if(s1->next)
+ 	s1->next = s1->next->next = s2;
+       else
+ 	s1->next = s2;
+     }
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120211-1.c gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120211-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/torture/pr120211-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/torture/pr120211-1.c	Sun May 11 22:32:18 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ 
+ int a, b, d;
+ void e() {
+   do {
+     int f = 0;
+     while (1) {
+       int c = a;
+       for (; (c & 1) == 0; c = 1)
+         for (; c & 1;)
+           ;
+       if (a)
+         break;
+       f++;
+     }
+     b = f & 5;
+     if (b)
+       break;
+   } while (d++);
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c	Sun May 11 22:32:19 2025
*************** int f1(int x)
*** 20,25 ****
  
  /* { dg-final { scan-tree-dump-times "if " 1 "phiopt1" } } */
  /* { dg-final { scan-tree-dump-not "if " "phiopt2" } } */
! /* { dg-final { scan-tree-dump-times "ABS_EXPR <" 2 "phiopt1" } } */
! /* { dg-final { scan-tree-dump-times "ABS_EXPR <" 1 "phiopt2" } } */
! /* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 1 "phiopt2" } } */
--- 20,26 ----
  
  /* { dg-final { scan-tree-dump-times "if " 1 "phiopt1" } } */
  /* { dg-final { scan-tree-dump-not "if " "phiopt2" } } */
! /* The ABS_EXPR in f gets rewritten to ABSU_EXPR as phiopt can't prove it was not undefined when moving it. */
! /* { dg-final { scan-tree-dump-times "ABS_EXPR <" 1 "phiopt1" } } */
! /* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 1 "phiopt1" } } */
! /* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 2 "phiopt2" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c	Sun May 11 22:32:19 2025
*************** int fge(int a, unsigned char b)
*** 29,34 ****
    return a > 0 ? a : -a;
  }
  
! 
  /* { dg-final { scan-tree-dump-not "if " "phiopt1" } } */
! /* { dg-final { scan-tree-dump-times "ABS_EXPR <" 4 "phiopt1" } } */
--- 29,34 ----
    return a > 0 ? a : -a;
  }
  
! /* The ABS_EXPR gets rewritten to ABSU_EXPR as phiopt can't prove it was not undefined when moving it. */
  /* { dg-final { scan-tree-dump-not "if " "phiopt1" } } */
! /* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 4 "phiopt1" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/pr120080.c gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/pr120080.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/pr120080.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/pr120080.c	Sun May 11 22:32:19 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fgimple -O2" } */
+ 
+ void __GIMPLE (ssa,startwith("switchlower1"))
+ foo (int b)
+ {
+   __BB(2):
+   switch (b) {default: L9; case 0: L5; case 5: L5; case 101: L5; }
+ 
+   __BB(3):
+ L9:
+   switch (b) {default: L7; case 5: L6; case 101: L6; }
+ 
+   __BB(4):
+ L6:
+   __builtin_unreachable ();
+ 
+   __BB(5):
+ L7:
+   __builtin_trap ();
+ 
+   __BB(6):
+ L5:
+   return;
+ 
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/pr31261.c gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/pr31261.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/tree-ssa/pr31261.c	Sun May  4 22:32:22 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/tree-ssa/pr31261.c	Sun May 11 22:32:19 2025
*************** f2 (long int b)
*** 14,21 ****
    return (16 + (b & 7)) & 15;
  }
  
! char
! f3 (char c)
  {
    return -(c & 63) & 31;
  }
--- 14,21 ----
    return (16 + (b & 7)) & 15;
  }
  
! signed char
! f3 (signed char c)
  {
    return -(c & 63) & 31;
  }
*************** f5 (int e)
*** 34,40 ****
  
  /* { dg-final { scan-tree-dump-times "return -a \& 7;" 1 "original" } } */
  /* { dg-final { scan-tree-dump-times "return b \& 7;" 1 "original" } } */
! /* { dg-final { scan-tree-dump-times "return \\(char\\) -\\(unsigned char\\) c \& 31;" 1 "original" } } */
  /* { dg-final { scan-tree-dump-times "return \\(int\\) \\(12 - \\(unsigned int\\) d\\) \& 7;" 1 "original" { target { ! int16 } } } } */
  /* { dg-final { scan-tree-dump-times "return \\(int\\) \\(12 - \\(unsigned short\\) d\\) \& 7;" 1 "original" { target { int16 } } } } */
  /* { dg-final { scan-tree-dump-times "return 12 - \\(e \& 7\\) \& 15;" 1 "original" } } */
--- 34,40 ----
  
  /* { dg-final { scan-tree-dump-times "return -a \& 7;" 1 "original" } } */
  /* { dg-final { scan-tree-dump-times "return b \& 7;" 1 "original" } } */
! /* { dg-final { scan-tree-dump-times "return \\(signed char\\) -\\(unsigned char\\) c \& 31;" 1 "original" } } */
  /* { dg-final { scan-tree-dump-times "return \\(int\\) \\(12 - \\(unsigned int\\) d\\) \& 7;" 1 "original" { target { ! int16 } } } } */
  /* { dg-final { scan-tree-dump-times "return \\(int\\) \\(12 - \\(unsigned short\\) d\\) \& 7;" 1 "original" { target { int16 } } } } */
  /* { dg-final { scan-tree-dump-times "return 12 - \\(e \& 7\\) \& 15;" 1 "original" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/bb-slp-pr115777.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/bb-slp-pr115777.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/bb-slp-pr115777.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/bb-slp-pr115777.c	Sun May 11 22:32:19 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ 
+ typedef unsigned int T;
+ 
+ #define SWAP(A, B) do { T tmp = A; A = B; B = tmp; } while (0)
+ 
+ void
+ insertion_sort(T *v, int n)
+ {
+   for (int i = 1; i < n; ++i)
+     for (int k = i; k > 0 && v[k-1] > v[k]; --k)
+       SWAP(v[k-1], v[k]);
+ }
+ 
+ /* { dg-final { scan-tree-dump "using element-wise load" "slp1" { target { { x86_64-*-* i?86-*-* } && { ! ia32 } } } } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/bb-slp-pr119960-1.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/bb-slp-pr119960-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/bb-slp-pr119960-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/bb-slp-pr119960-1.c	Sun May 11 22:32:19 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target vect_double } */
+ 
+ double foo (double *dst, double *src, int b)
+ {
+   double y = src[1];
+   if (b)
+     {
+       dst[0] = src[0];
+       dst[1] = y;
+     }
+   return y;
+ }
+ 
+ /* { dg-final { scan-tree-dump "optimized: basic block part vectorized" "slp2" { target vect_double } } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-early-break_134-pr120089.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-early-break_134-pr120089.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-early-break_134-pr120089.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-early-break_134-pr120089.c	Sun May 11 22:32:19 2025
***************
*** 0 ****
--- 1,66 ----
+ /* { dg-add-options vect_early_break } */
+ /* { dg-additional-options "-funswitch-loops" } */
+ 
+ #include "tree-vect.h"
+ 
+ typedef int type;
+ typedef type Vec2[2];
+ 
+ struct BytesVec {
+     type d[100];
+ };
+ 
+ __attribute__((noipa)) struct BytesVec
+ buildVertexBufferData(const Vec2 *origVertices, bool needsZW,
+                       unsigned paddingSize, unsigned long t) {
+     const unsigned vertexCount = t;
+     struct BytesVec data = (struct BytesVec){.d = {0}};
+     type *nextVertexPtr = data.d;
+ 
+     for (unsigned vertexIdx = 0u; vertexIdx < vertexCount; ++vertexIdx) {
+ 
+         if (vertexIdx > t)
+             __builtin_trap();
+         __builtin_memcpy(nextVertexPtr, &origVertices[vertexIdx],
+                          2 * sizeof(type));
+         nextVertexPtr += 2;
+ 
+         if (needsZW) {
+             nextVertexPtr += 2;
+         }
+ 
+         nextVertexPtr += paddingSize;
+     }
+ 
+     return data;
+ }
+ Vec2 origVertices[] = {
+     {0, 1}, {2, 3}, {4, 5}, {6, 7},
+     {8, 9}, {10, 11}, {12, 13}, {14, 15},
+     {16, 17}, {18, 19}, {20, 21}, {22, 23},
+     {24, 25}, {26, 27}, {27, 28}, {29, 30},
+ };
+ 
+ int main()
+ {
+   check_vect ();
+   struct BytesVec vec
+     = buildVertexBufferData(origVertices, false, 0,
+ 			    sizeof(origVertices) / sizeof(origVertices[0]));
+ 
+   int errors = 0;
+   for (unsigned i = 0; i < 100; i++) {
+       if (i / 2 < sizeof(origVertices) / sizeof(origVertices[0])) {
+ 	  int ii = i;
+ 	  int e = origVertices[ii / 2][ii % 2];
+ 	  if (vec.d[i] != e)
+ 	    errors++;
+       } else {
+ 	  if (vec.d[i] != 0)
+ 	    errors++;
+       }
+   }
+   if (errors)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120143.c	Sun May 11 22:32:19 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-add-options vect_early_break } */
+ /* { dg-additional-options "-O3 -fwhole-program" } */
+ 
+ short a;
+ extern _Bool b[][23];
+ short g = 6;
+ int v[4];
+ int x[3];
+ void c(short g, int v[], int x[]) {
+   for (;;)
+     for (unsigned y = 0; y < 023; y++) {
+       b[y][y] = v[y];
+       for (_Bool aa = 0; aa < (_Bool)g; aa = x[y])
+         a = a > 0;
+     }
+ }
+ int main() { c(g, v, x); }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c	Sun May 11 22:32:19 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-add-options vect_early_break } */
+ /* { dg-additional-options "-O3 -fno-tree-copy-prop -fno-tree-dominator-opts -fno-tree-loop-ivcanon -fno-tree-pre -fno-code-hoisting" } */
+ 
+ int a, b[1];
+ int main() {
+   int c = 0;
+   for (; c < 1; c++) {
+     while (a)
+       c++;
+     b[c] = 0;
+   }
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c	Sun May 11 22:32:20 2025
***************
*** 7,13 ****
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
--- 7,13 ----
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c	Sun May 11 22:32:20 2025
***************
*** 7,13 ****
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  
--- 7,13 ----
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c	Sun May 11 22:32:20 2025
***************
*** 7,13 ****
   
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
--- 7,13 ----
   
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c	Sun May 11 22:32:20 2025
***************
*** 7,13 ****
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
--- 7,13 ----
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c	Sun May 11 22:32:20 2025
***************
*** 7,13 ****
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
--- 7,13 ----
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c
*** gcc-16-20250504/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c	Sun May 11 22:32:20 2025
***************
*** 7,13 ****
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
--- 7,13 ----
  
  /* Ensure the the in-branch simd clones are used on targets that support them.
     Some targets use another call for the epilogue loops.  */
! /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! aarch64*-*-* } } } } */
  /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */
  
  /* The LTO test produces two dump files and we scan the wrong one.  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/pr99988.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/pr99988.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/pr99988.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/pr99988.c	Sun May 11 22:32:30 2025
***************
*** 1,5 ****
  /* { dg-do compile { target lp64 } } */
! /* { dg-options "-O2 -mbranch-protection=standard" } */
  /* { dg-final { scan-assembler-times {bti j} 13 } } */
  int a;
  int c();
--- 1,5 ----
  /* { dg-do compile { target lp64 } } */
! /* { dg-options "-O2 -mbranch-protection=standard -fno-bit-tests" } */
  /* { dg-final { scan-assembler-times {bti j} 13 } } */
  int a;
  int c();
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_6.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_6.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_6.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_6.c	Sun May 11 22:32:32 2025
*************** test_add (fixed_int8_t x, fixed_int8_t y
*** 29,35 ****
  }
  
  /*
! ** test_add_gnu:
  ** (
  **	add	(z[0-9]+\.b), (?:z0\.b, z1\.b|z1\.b, z0\.b)
  **	ptrue	(p[0-7])\.b, vl32
--- 29,35 ----
  }
  
  /*
! ** test_add_gnu: {target aarch64_big_endian }
  ** (
  **	add	(z[0-9]+\.b), (?:z0\.b, z1\.b|z1\.b, z0\.b)
  **	ptrue	(p[0-7])\.b, vl32
*************** test_add (fixed_int8_t x, fixed_int8_t y
*** 41,46 ****
--- 41,52 ----
  ** )
  **	ret
  */
+ /*
+ ** test_add_gnu: {target aarch64_little_endian }
+ **	add	(z[0-9]+)\.b, (?:z0\.b, z1\.b|z1\.b, z0\.b)
+ **	str	\1, \[x8\]
+ **	ret
+ */
  gnu_int8_t
  test_add_gnu (fixed_int8_t x, fixed_int8_t y)
  {
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_5.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_5.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_5.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilelt_5.c	Sun May 11 22:32:32 2025
*************** extern "C" {
*** 11,18 ****
  
  /*
  ** load_vl1:
! **	ptrue	(p[0-7])\.[bhsd], vl1
! **	ld1h	z0\.h, \1/z, \[x0\]
  **	ret
  */
  svint16_t
--- 11,17 ----
  
  /*
  ** load_vl1:
! **	ldr	h0, \[x0\]
  **	ret
  */
  svint16_t
*************** load_vl1 (int16_t *ptr)
*** 22,28 ****
  }
  
  /*
! ** load_vl2:
  **	ptrue	(p[0-7])\.h, vl2
  **	ld1h	z0\.h, \1/z, \[x0\]
  **	ret
--- 21,32 ----
  }
  
  /*
! ** load_vl2: { target aarch64_little_endian }
! **	ldr	s0, \[x0\]
! **	ret
! */
! /*
! ** load_vl2: { target aarch64_big_endian }
  **	ptrue	(p[0-7])\.h, vl2
  **	ld1h	z0\.h, \1/z, \[x0\]
  **	ret
*************** load_vl3 (int16_t *ptr)
*** 46,52 ****
  }
  
  /*
! ** load_vl4:
  **	ptrue	(p[0-7])\.h, vl4
  **	ld1h	z0\.h, \1/z, \[x0\]
  **	ret
--- 50,61 ----
  }
  
  /*
! ** load_vl4: { target aarch64_little_endian }
! **	ldr	d0, \[x0\]
! **	ret
! */
! /*
! ** load_vl4: { target aarch64_big_endian }
  **	ptrue	(p[0-7])\.h, vl4
  **	ld1h	z0\.h, \1/z, \[x0\]
  **	ret
*************** load_vl7 (int16_t *ptr)
*** 94,100 ****
  }
  
  /*
! ** load_vl8:
  **	ptrue	(p[0-7])\.h, vl8
  **	ld1h	z0\.h, \1/z, \[x0\]
  **	ret
--- 103,114 ----
  }
  
  /*
! ** load_vl8: { target aarch64_little_endian }
! **	ldr	q0, \[x0\]
! **	ret
! */
! /*
! ** load_vl8: { target aarch64_big_endian }
  **	ptrue	(p[0-7])\.h, vl8
  **	ld1h	z0\.h, \1/z, \[x0\]
  **	ret
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_14.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_14.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_14.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_14.c	Sun May 11 22:32:32 2025
*************** uint64_t f2(uint64_t *ptr, int n) {
*** 9,13 ****
    return res;
  }
  
! /* { dg-final { scan-assembler-times {\tld1d\tz[0-9]+\.d,} 5 } } */
  /* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.d,} 8 } } */
--- 9,15 ----
    return res;
  }
  
! /* { dg-final { scan-assembler-times {\tld1d\tz[0-9]+\.d,} 5 {target aarch64_big_endian} } } */
! /* { dg-final { scan-assembler-times {\tld1d\tz[0-9]+\.d,} 1 {target aarch64_little_endian} } } */
! /* { dg-final { scan-assembler-times {\tldr\tz[0-9]+,} 4 {target aarch64_little_endian} } } */
  /* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.d,} 8 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_4.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_4.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_4.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_4.c	Sun May 11 22:32:32 2025
*************** vset (int *restrict dst, int *restrict s
*** 9,12 ****
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 1 } } */
--- 9,13 ----
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 1 {target aarch64_big_endian} } } */
! /* { dg-final { scan-assembler-times {\tstr\tz} 1 {target aarch64_little_endian} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_5.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_5.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_5.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_5.c	Sun May 11 22:32:32 2025
*************** vset (int *restrict dst, int *restrict s
*** 9,13 ****
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 2 } } */
  /* { dg-final { scan-assembler-not {\tstp\tq} } } */
--- 9,14 ----
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 2 {target aarch64_big_endian} } } */
! /* { dg-final { scan-assembler-times {\tstr\tz} 2 {target aarch64_little_endian} } } */
  /* { dg-final { scan-assembler-not {\tstp\tq} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_6.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_6.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_6.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_6.c	Sun May 11 22:32:32 2025
*************** vset (int *restrict dst, int *restrict s
*** 9,12 ****
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 1 } } */
--- 9,13 ----
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 1 {target aarch64_big_endian} } } */
! /* { dg-final { scan-assembler-times {\tstr\tz} 1 {target aarch64_little_endian} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_7.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_7.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/cost_model_7.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/cost_model_7.c	Sun May 11 22:32:32 2025
*************** vset (int *restrict dst, int *restrict s
*** 9,12 ****
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 2 } } */
--- 9,13 ----
        *dst++ = 1;
  }
  
! /* { dg-final { scan-assembler-times {\tst1w\tz} 2 {target aarch64_big_endian} } } */
! /* { dg-final { scan-assembler-times {\tstr\tz} 2 {target aarch64_little_endian} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/ldst_ptrue_pat_128_to_neon.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/ldst_ptrue_pat_128_to_neon.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/ldst_ptrue_pat_128_to_neon.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/ldst_ptrue_pat_128_to_neon.c	Sun May 11 22:32:32 2025
***************
*** 0 ****
--- 1,81 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-require-effective-target aarch64_little_endian } */
+ 
+ #include <arm_sve.h>
+ 
+ #define TEST(TYPE, TY, W, B)						\
+   sv##TYPE								\
+   ld1_##TY##W##B##_1 (TYPE *x)						\
+   {									\
+     svbool_t pg = svwhilelt_b##B (0, W);				\
+     return svld1_##TY##B (pg, x);					\
+   }									\
+   sv##TYPE								\
+   ld1_##TY##W##B##_2 (TYPE *x)						\
+   {									\
+     svbool_t pg = svptrue_pat_b##B ((enum svpattern) (W > 8 ? 9 : W));	\
+     return svld1_##TY##B (pg, x);					\
+   }									\
+   void									\
+   st1_##TY##W##B##_1 (TYPE *x, sv##TYPE data)						\
+   {									\
+     svbool_t pg = svwhilelt_b##B (0, W);				\
+     return svst1_##TY##B (pg, x, data);					\
+   }									\
+   void									\
+   st1_##TY##W##B##_2 (TYPE *x, sv##TYPE data)				\
+   {									\
+     svbool_t pg = svptrue_pat_b##B ((enum svpattern) (W > 8 ? 9 : W));	\
+     return svst1_##TY##B (pg, x, data);					\
+   }									\
+ 
+ #define TEST64(TYPE, TY, B)				\
+   TEST (TYPE, TY, 1, B)					\
+   TEST (TYPE, TY, 2, B)					\
+ 
+ #define TEST32(TYPE, TY, B)				\
+   TEST64 (TYPE, TY, B)					\
+   TEST (TYPE, TY, 4, B)					\
+ 
+ #define TEST16(TYPE, TY, B)				\
+   TEST32 (TYPE, TY, B)					\
+   TEST (TYPE, TY, 8, B)					\
+ 
+ #define TEST8(TYPE, TY, B)				\
+   TEST16 (TYPE, TY, B)					\
+   TEST (TYPE, TY, 16, B)
+ 
+ #define T(TYPE, TY, B)			\
+   TEST##B (TYPE, TY, B)
+ 
+ T (bfloat16_t, bf, 16)
+ T (float16_t, f, 16)
+ T (float32_t, f, 32)
+ T (float64_t, f, 64)
+ T (int8_t, s, 8)
+ T (int16_t, s, 16)
+ T (int32_t, s, 32)
+ T (int64_t, s, 64)
+ T (uint8_t, u, 8)
+ T (uint16_t, u, 16)
+ T (uint32_t, u, 32)
+ T (uint64_t, u, 64)
+ 
+ /* { dg-final { scan-assembler-times {\tldr\tq0, \[x0\]} 24 } } */
+ /* { dg-final { scan-assembler-times {\tldr\td0, \[x0\]} 24 } } */
+ /* { dg-final { scan-assembler-times {\tldr\ts0, \[x0\]} 18 } } */
+ /* { dg-final { scan-assembler-times {\tldr\th0, \[x0\]} 12 } } */
+ /* { dg-final { scan-assembler-times {\tldr\tb0, \[x0\]} 4 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tstr\tq0, \[x0\]} 24 } } */
+ /* { dg-final { scan-assembler-times {\tstr\td0, \[x0\]} 24 } } */
+ /* { dg-final { scan-assembler-times {\tstr\ts0, \[x0\]} 18 } } */
+ /* { dg-final { scan-assembler-times {\tstr\th0, \[x0\]} 12 } } */
+ /* { dg-final { scan-assembler-times {\tstr\tb0, \[x0\]} 4 } } */
+ 
+ svint8_t foo (int8_t *x)
+ {
+   return svld1_s8 (svptrue_b16 (), x);
+ }
+ /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.h, all\n\tld1b} 1 } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f16.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f16.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f16.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int16_t *ptr, ...)
  {
*************** callee_0 (int16_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
*************** callee_0 (int16_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.h, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int16_t *ptr)
  {
*************** caller_0 (int16_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int16_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int16_t *ptr, ...)
  {
*************** callee_1 (int16_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
*************** callee_1 (int16_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.h, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int16_t *ptr)
  {
*************** caller_1 (int16_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int16_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int16_t *ptr, ...)
  {
*************** callee_7 (int16_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
*************** callee_7 (int16_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.h, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int16_t *ptr)
  {
*************** caller_7 (int16_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int16_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int16_t *ptr, ...)
  {
*************** callee_8 (int16_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.h), #9\.0[^\n]*
  **	...
*************** callee_8 (int16_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.h, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f32.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f32.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f32.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int32_t *ptr, ...)
  {
*************** callee_0 (int32_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
*************** callee_0 (int32_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.s, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int32_t *ptr)
  {
*************** caller_0 (int32_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int32_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int32_t *ptr, ...)
  {
*************** callee_1 (int32_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
*************** callee_1 (int32_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.s, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int32_t *ptr)
  {
*************** caller_1 (int32_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int32_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int32_t *ptr, ...)
  {
*************** callee_7 (int32_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
*************** callee_7 (int32_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.s, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int32_t *ptr)
  {
*************** caller_7 (int32_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int32_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int32_t *ptr, ...)
  {
*************** callee_8 (int32_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.s), #9\.0[^\n]*
  **	...
*************** callee_8 (int32_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.s, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f64.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f64.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f64.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int64_t *ptr, ...)
  {
*************** callee_0 (int64_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
*************** callee_0 (int64_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.d, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int64_t *ptr)
  {
*************** caller_0 (int64_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int64_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int64_t *ptr, ...)
  {
*************** callee_1 (int64_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
*************** callee_1 (int64_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.d, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int64_t *ptr)
  {
*************** caller_1 (int64_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int64_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int64_t *ptr, ...)
  {
*************** callee_7 (int64_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
*************** callee_7 (int64_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.d, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int64_t *ptr)
  {
*************** caller_7 (int64_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int64_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8:
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int64_t *ptr, ...)
  {
*************** callee_8 (int64_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	fmov	(z[0-9]+\.d), #9\.0[^\n]*
  **	...
*************** callee_8 (int64_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	fmov	(z[0-9]+)\.d, #9\.0[^\n]*
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_mf8.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_mf8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_mf8.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_mf8.c	Sun May 11 22:32:32 2025
***************
*** 8,16 ****
  /*
  ** callee_0:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x1\]
  **	...
! **	st1b	\1, \2, \[x0\]
  **	...
  **	ret
  */
--- 8,16 ----
  /*
  ** callee_0:
  **	...
! **	ldr	(z[0-9]+), \[x1\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_0 (mfloat8_t *ptr, ...)
*** 32,40 ****
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+\.b), \1
  **	...
! **	st1b	\2, p[0-7], \[x1\]
  **	...
  **	ret
  */
--- 32,40 ----
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+)\.b, \1
  **	...
! **	str	\2, \[x1\]
  **	...
  **	ret
  */
*************** caller_0 (mfloat8_t *ptr, mfloat8_t in)
*** 47,55 ****
  /*
  ** callee_1:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x2\]
  **	...
! **	st1b	\1, p[0-7], \[x0\]
  **	...
  **	ret
  */
--- 47,55 ----
  /*
  ** callee_1:
  **	...
! **	ldr	(z[0-9]+), \[x2\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_1 (mfloat8_t *ptr, ...)
*** 72,80 ****
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+\.b), \1
  **	...
! **	st1b	\2, p[0-7], \[x2\]
  **	...
  **	ret
  */
--- 72,80 ----
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+)\.b, \1
  **	...
! **	str	\2, \[x2\]
  **	...
  **	ret
  */
*************** caller_1 (mfloat8_t *ptr, mfloat8_t in)
*** 87,95 ****
  /*
  ** callee_7:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x7\]
  **	...
! **	st1b	\1, p[0-7], \[x0\]
  **	...
  **	ret
  */
--- 87,95 ----
  /*
  ** callee_7:
  **	...
! **	ldr	(z[0-9]+), \[x7\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_7 (mfloat8_t *ptr, ...)
*** 117,125 ****
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+\.b), \1
  **	...
! **	st1b	\2, p[0-7], \[x7\]
  **	...
  **	ret
  */
--- 117,125 ----
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+)\.b, \1
  **	...
! **	str	\2, \[x7\]
  **	...
  **	ret
  */
*************** caller_7 (mfloat8_t *ptr, mfloat8_t in)
*** 136,144 ****
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[\2\]
  **	...
! **	st1b	\3, \4, \[x0\]
  **	...
  **	ret
  */
--- 136,144 ----
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
  **	...
! **	ldr	(z[0-9]+), \[\2\]
  **	...
! **	str	\3, \[x0\]
  **	...
  **	ret
  */
*************** callee_8 (mfloat8_t *ptr, ...)
*** 167,175 ****
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+\.b), \1
  **	...
! **	st1b	\2, p[0-7], \[(x[0-9]+)\]
  **	...
  **	str	\3, \[sp\]
  **	...
--- 167,175 ----
  **	...
  **	umov	(w[0-9]+), v0.b\[0\]
  **	...
! **	mov	(z[0-9]+)\.b, \1
  **	...
! **	str	\2, \[(x[0-9]+)\]
  **	...
  **	str	\3, \[sp\]
  **	...
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s16.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s16.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s16.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int16_t *ptr, ...)
  {
*************** callee_0 (int16_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_0 (int16_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int16_t *ptr)
  {
*************** caller_0 (int16_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int16_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int16_t *ptr, ...)
  {
*************** callee_1 (int16_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_1 (int16_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int16_t *ptr)
  {
*************** caller_1 (int16_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int16_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int16_t *ptr, ...)
  {
*************** callee_7 (int16_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_7 (int16_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int16_t *ptr)
  {
*************** caller_7 (int16_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int16_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int16_t *ptr, ...)
  {
*************** callee_8 (int16_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_8 (int16_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s32.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s32.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s32.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int32_t *ptr, ...)
  {
*************** callee_0 (int32_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_0 (int32_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int32_t *ptr)
  {
*************** caller_0 (int32_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int32_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int32_t *ptr, ...)
  {
*************** callee_1 (int32_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_1 (int32_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int32_t *ptr)
  {
*************** caller_1 (int32_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int32_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int32_t *ptr, ...)
  {
*************** callee_7 (int32_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_7 (int32_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int32_t *ptr)
  {
*************** caller_7 (int32_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int32_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int32_t *ptr, ...)
  {
*************** callee_8 (int32_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_8 (int32_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s64.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s64.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s64.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int64_t *ptr, ...)
  {
*************** callee_0 (int64_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_0 (int64_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int64_t *ptr)
  {
*************** caller_0 (int64_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int64_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int64_t *ptr, ...)
  {
*************** callee_1 (int64_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_1 (int64_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int64_t *ptr)
  {
*************** caller_1 (int64_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int64_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int64_t *ptr, ...)
  {
*************** callee_7 (int64_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_7 (int64_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int64_t *ptr)
  {
*************** caller_7 (int64_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int64_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int64_t *ptr, ...)
  {
*************** callee_8 (int64_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_8 (int64_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s8.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s8.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s8.c	Sun May 11 22:32:32 2025
***************
*** 8,16 ****
  /*
  ** callee_0:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x1\]
  **	...
! **	st1b	\1, \2, \[x0\]
  **	...
  **	ret
  */
--- 8,16 ----
  /*
  ** callee_0:
  **	...
! **	ldr	(z[0-9]+), \[x1\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_0 (int8_t *ptr, ...)
*** 29,37 ****
  /*
  ** caller_0:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[x1\]
  **	...
  **	ret
  */
--- 29,37 ----
  /*
  ** caller_0:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[x1\]
  **	...
  **	ret
  */
*************** caller_0 (int8_t *ptr)
*** 44,52 ****
  /*
  ** callee_1:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x2\]
  **	...
! **	st1b	\1, p[0-7], \[x0\]
  **	...
  **	ret
  */
--- 44,52 ----
  /*
  ** callee_1:
  **	...
! **	ldr	(z[0-9]+), \[x2\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_1 (int8_t *ptr, ...)
*** 66,74 ****
  /*
  ** caller_1:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[x2\]
  **	...
  **	ret
  */
--- 66,74 ----
  /*
  ** caller_1:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[x2\]
  **	...
  **	ret
  */
*************** caller_1 (int8_t *ptr)
*** 81,89 ****
  /*
  ** callee_7:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x7\]
  **	...
! **	st1b	\1, p[0-7], \[x0\]
  **	...
  **	ret
  */
--- 81,89 ----
  /*
  ** callee_7:
  **	...
! **	ldr	(z[0-9]+), \[x7\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_7 (int8_t *ptr, ...)
*** 108,116 ****
  /*
  ** caller_7:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[x7\]
  **	...
  **	ret
  */
--- 108,116 ----
  /*
  ** caller_7:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[x7\]
  **	...
  **	ret
  */
*************** caller_7 (int8_t *ptr)
*** 127,135 ****
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[\2\]
  **	...
! **	st1b	\3, \4, \[x0\]
  **	...
  **	ret
  */
--- 127,135 ----
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
  **	...
! **	ldr	(z[0-9]+), \[\2\]
  **	...
! **	str	\3, \[x0\]
  **	...
  **	ret
  */
*************** callee_8 (int8_t *ptr, ...)
*** 155,163 ****
  /*
  ** caller_8:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[(x[0-9]+)\]
  **	...
  **	str	\2, \[sp\]
  **	...
--- 155,163 ----
  /*
  ** caller_8:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[(x[0-9]+)\]
  **	...
  **	str	\2, \[sp\]
  **	...
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u16.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u16.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u16.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int16_t *ptr, ...)
  {
*************** callee_0 (int16_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_0 (int16_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int16_t *ptr)
  {
*************** caller_0 (int16_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int16_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int16_t *ptr, ...)
  {
*************** callee_1 (int16_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_1 (int16_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int16_t *ptr)
  {
*************** caller_1 (int16_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1h	(z[0-9]+\.h), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int16_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int16_t *ptr, ...)
  {
*************** callee_7 (int16_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_7 (int16_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int16_t *ptr)
  {
*************** caller_7 (int16_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int16_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}	
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int16_t *ptr, ...)
  {
*************** callee_8 (int16_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.h), #42
  **	...
*************** callee_8 (int16_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.h, #42
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int32_t *ptr, ...)
  {
*************** callee_0 (int32_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_0 (int32_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int32_t *ptr)
  {
*************** caller_0 (int32_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int32_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int32_t *ptr, ...)
  {
*************** callee_1 (int32_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_1 (int32_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int32_t *ptr)
  {
*************** caller_1 (int32_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int32_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int32_t *ptr, ...)
  {
*************** callee_7 (int32_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_7 (int32_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int32_t *ptr)
  {
*************** caller_7 (int32_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int32_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int32_t *ptr, ...)
  {
*************** callee_8 (int32_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.s), #42
  **	...
*************** callee_8 (int32_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.s, #42
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u64.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u64.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u64.c	Sun May 11 22:32:32 2025
***************
*** 6,12 ****
  #include <stdarg.h>
  
  /*
! ** callee_0:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x1\]
  **	...
--- 6,12 ----
  #include <stdarg.h>
  
  /*
! ** callee_0: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x1\]
  **	...
***************
*** 14,19 ****
--- 14,28 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_0: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x1\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_0 (int64_t *ptr, ...)
  {
*************** callee_0 (int64_t *ptr, ...)
*** 27,33 ****
  }
  
  /*
! ** caller_0:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 36,42 ----
  }
  
  /*
! ** caller_0: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_0 (int64_t *ptr, ...)
*** 35,40 ****
--- 44,58 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_0: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[x1\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_0 (int64_t *ptr)
  {
*************** caller_0 (int64_t *ptr)
*** 42,48 ****
  }
  
  /*
! ** callee_1:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x2\]
  **	...
--- 60,66 ----
  }
  
  /*
! ** callee_1: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x2\]
  **	...
*************** caller_0 (int64_t *ptr)
*** 50,55 ****
--- 68,82 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_1: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x2\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_1 (int64_t *ptr, ...)
  {
*************** callee_1 (int64_t *ptr, ...)
*** 64,70 ****
  }
  
  /*
! ** caller_1:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 91,97 ----
  }
  
  /*
! ** caller_1: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_1 (int64_t *ptr, ...)
*** 72,77 ****
--- 99,113 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_1: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[x2\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_1 (int64_t *ptr)
  {
*************** caller_1 (int64_t *ptr)
*** 79,85 ****
  }
  
  /*
! ** callee_7:
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x7\]
  **	...
--- 115,121 ----
  }
  
  /*
! ** callee_7: {target aarch64_big_endian}
  **	...
  **	ld1d	(z[0-9]+\.d), (p[0-7])/z, \[x7\]
  **	...
*************** caller_1 (int64_t *ptr)
*** 87,92 ****
--- 123,137 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_7: {target aarch64_little_endian}
+ **	...
+ **	ldr	(z[0-9]+), \[x7\]
+ **	...
+ **	str	\1, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_7 (int64_t *ptr, ...)
  {
*************** callee_7 (int64_t *ptr, ...)
*** 106,112 ****
  }
  
  /*
! ** caller_7:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 151,157 ----
  }
  
  /*
! ** caller_7: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_7 (int64_t *ptr, ...)
*** 114,119 ****
--- 159,173 ----
  **	...
  **	ret
  */
+ /*
+ ** caller_7: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[x7\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  caller_7 (int64_t *ptr)
  {
*************** caller_7 (int64_t *ptr)
*** 122,128 ****
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8:
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
--- 176,182 ----
  
  /* FIXME: We should be able to get rid of the va_list object.  */
  /*
! ** callee_8: {target aarch64_big_endian}
  **	sub	sp, sp, #([0-9]+)
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
*************** caller_7 (int64_t *ptr)
*** 133,138 ****
--- 187,204 ----
  **	...
  **	ret
  */
+ /*
+ ** callee_8: {target aarch64_little_endian}
+ **	sub	sp, sp, #([0-9]+)
+ **	...
+ **	ldr	(x[0-9]+), \[sp, \1\]
+ **	...
+ **	ldr	(z[0-9]+), \[\2\]
+ **	...
+ **	str	\3, \[x0\]
+ **	...
+ **	ret
+ */
  void __attribute__((noipa))
  callee_8 (int64_t *ptr, ...)
  {
*************** callee_8 (int64_t *ptr, ...)
*** 153,159 ****
  }
  
  /*
! ** caller_8:
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
--- 219,225 ----
  }
  
  /*
! ** caller_8: {target aarch64_big_endian}
  **	...
  **	mov	(z[0-9]+\.d), #42
  **	...
*************** callee_8 (int64_t *ptr, ...)
*** 161,166 ****
--- 227,243 ----
  **	...
  **	str	\2, \[sp\]
  **	...
+ **	ret
+ */
+ /*
+ ** caller_8: {target aarch64_little_endian}
+ **	...
+ **	mov	(z[0-9]+)\.d, #42
+ **	...
+ **	str	\1, \[(x[0-9]+)\]
+ **	...
+ **	str	\2, \[sp\]
+ **	...
  **	ret
  */
  void __attribute__((noipa))
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u8.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u8.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u8.c	Sun May 11 22:32:32 2025
***************
*** 8,16 ****
  /*
  ** callee_0:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x1\]
  **	...
! **	st1b	\1, \2, \[x0\]
  **	...
  **	ret
  */
--- 8,16 ----
  /*
  ** callee_0:
  **	...
! **	ldr	(z[0-9]+), \[x1\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_0 (int8_t *ptr, ...)
*** 29,37 ****
  /*
  ** caller_0:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[x1\]
  **	...
  **	ret
  */
--- 29,37 ----
  /*
  ** caller_0:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[x1\]
  **	...
  **	ret
  */
*************** caller_0 (int8_t *ptr)
*** 44,52 ****
  /*
  ** callee_1:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x2\]
  **	...
! **	st1b	\1, p[0-7], \[x0\]
  **	...
  **	ret
  */
--- 44,52 ----
  /*
  ** callee_1:
  **	...
! **	ldr	(z[0-9]+), \[x2\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_1 (int8_t *ptr, ...)
*** 66,74 ****
  /*
  ** caller_1:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[x2\]
  **	...
  **	ret
  */
--- 66,74 ----
  /*
  ** caller_1:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[x2\]
  **	...
  **	ret
  */
*************** caller_1 (int8_t *ptr)
*** 81,89 ****
  /*
  ** callee_7:
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[x7\]
  **	...
! **	st1b	\1, p[0-7], \[x0\]
  **	...
  **	ret
  */
--- 81,89 ----
  /*
  ** callee_7:
  **	...
! **	ldr	(z[0-9]+), \[x7\]
  **	...
! **	str	\1, \[x0\]
  **	...
  **	ret
  */
*************** callee_7 (int8_t *ptr, ...)
*** 108,116 ****
  /*
  ** caller_7:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[x7\]
  **	...
  **	ret
  */
--- 108,116 ----
  /*
  ** caller_7:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[x7\]
  **	...
  **	ret
  */
*************** caller_7 (int8_t *ptr)
*** 127,135 ****
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
  **	...
! **	ld1b	(z[0-9]+\.b), (p[0-7])/z, \[\2\]
  **	...
! **	st1b	\3, \4, \[x0\]
  **	...
  **	ret
  */
--- 127,135 ----
  **	...
  **	ldr	(x[0-9]+), \[sp, \1\]
  **	...
! **	ldr	(z[0-9]+), \[\2\]
  **	...
! **	str	\3, \[x0\]
  **	...
  **	ret
  */
*************** callee_8 (int8_t *ptr, ...)
*** 155,163 ****
  /*
  ** caller_8:
  **	...
! **	mov	(z[0-9]+\.b), #42
  **	...
! **	st1b	\1, p[0-7], \[(x[0-9]+)\]
  **	...
  **	str	\2, \[sp\]
  **	...
--- 155,163 ----
  /*
  ** caller_8:
  **	...
! **	mov	(z[0-9]+)\.b, #42
  **	...
! **	str	\1, \[(x[0-9]+)\]
  **	...
  **	str	\2, \[sp\]
  **	...
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c	Sun May  4 22:32:23 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c	Sun May 11 22:32:32 2025
*************** foo (void)
*** 19,23 ****
  /* We should operate on aligned vectors.  */
  /* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, (x|\.LANCHOR0)\n} } } */
  /* We should unroll the loop three times.  */
! /* { dg-final { scan-assembler-times "\tst1w\t" 3 } } */
  /* { dg-final { scan-assembler {\tptrue\t(p[0-9]+)\.s, vl7\n.*\teor\tp[0-9]+\.b, (p[0-9]+)/z, (\1\.b, \2\.b|\2\.b, \1\.b)\n} } } */
--- 19,25 ----
  /* We should operate on aligned vectors.  */
  /* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, (x|\.LANCHOR0)\n} } } */
  /* We should unroll the loop three times.  */
! /* { dg-final { scan-assembler-times "\tst1w\t" 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times "\tst1w\t" 2 { target aarch64_little_endian } } } */
! /* { dg-final { scan-assembler-times "\tstr\t" 1 { target aarch64_little_endian } } } */
  /* { dg-final { scan-assembler {\tptrue\t(p[0-9]+)\.s, vl7\n.*\teor\tp[0-9]+\.b, (p[0-9]+)/z, (\1\.b, \2\.b|\2\.b, \1\.b)\n} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/ptrue_ldr_str.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/ptrue_ldr_str.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/ptrue_ldr_str.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/ptrue_ldr_str.c	Sun May 11 22:32:32 2025
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-require-effective-target aarch64_little_endian } */
+ 
+ #include <arm_sve.h>
+ 
+ #define TEST(TYPE, TY, B)			\
+   sv##TYPE ld_##TY (TYPE *x)			\
+   {						\
+     return svld1_##TY(svptrue_b##B (), x);	\
+   }						\
+   void st_##TY (TYPE *x, sv##TYPE data)		\
+   {						\
+     svst1_##TY(svptrue_b##B (), x, data);	\
+   }
+ 
+ TEST(bfloat16_t, bf16, 16)
+ TEST(float16_t, f16, 16)
+ TEST(float32_t, f32, 32)
+ TEST(float64_t, f64, 64)
+ TEST(uint8_t, u8, 8)
+ TEST(uint16_t, u16, 16)
+ TEST(uint32_t, u32, 32)
+ TEST(uint64_t, u64, 64)
+ TEST(int8_t, s8, 8)
+ TEST(int16_t, s16, 16)
+ TEST(int32_t, s32, 32)
+ TEST(int64_t, s64, 64)
+ 
+ /* { dg-final { scan-assembler-times {\tldr\tz0, \[x0\]} 12 } } */
+ /* { dg-final { scan-assembler-times {\tstr\tz0, \[x0\]} 12 } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_1.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_1.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_1.c	Sun May  4 22:32:24 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_1.c	Sun May 11 22:32:33 2025
*************** TEST_LOOP (double, 3.0)
*** 40,51 ****
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl32\n} 11 } } */
  
! /* { dg-final { scan-assembler-times {\tst1b\tz[0-9]+\.b,} 2 } } */
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
--- 40,52 ----
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl32\n} 9 { target aarch64_big_endian } } } */
  
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 2 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 11 { target aarch64_little_endian } } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_2.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_2.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_2.c	Sun May  4 22:32:24 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_2.c	Sun May 11 22:32:33 2025
***************
*** 16,27 ****
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl64\n} 11 } } */
  
! /* { dg-final { scan-assembler-times {\tst1b\tz[0-9]+\.b,} 2 } } */
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
--- 16,28 ----
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl64\n} 9 { target aarch64_big_endian } } } */
  
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 2 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 11 { target aarch64_little_endian } } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_3.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_3.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_3.c	Sun May  4 22:32:24 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_3.c	Sun May 11 22:32:33 2025
***************
*** 16,27 ****
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl128\n} 11 } } */
  
! /* { dg-final { scan-assembler-times {\tst1b\tz[0-9]+\.b,} 2 } } */
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
--- 16,28 ----
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl128\n} 9 { target aarch64_big_endian } } } */
  
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 2 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 11 { target aarch64_little_endian } } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_4.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_4.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/single_4.c	Sun May  4 22:32:24 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/single_4.c	Sun May 11 22:32:33 2025
***************
*** 16,27 ****
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl256\n} 11 } } */
  
! /* { dg-final { scan-assembler-times {\tst1b\tz[0-9]+\.b,} 2 } } */
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
--- 16,28 ----
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0e\+0\n} 1 } } */
  /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #3\.0e\+0\n} 1 } } */
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl256\n} 9 { target aarch64_big_endian } } } */
  
! /* { dg-final { scan-assembler-times {\tst1h\tz[0-9]+\.h,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1w\tz[0-9]+\.s,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tst1d\tz[0-9]+\.d,} 3 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 2 { target aarch64_big_endian } } } */
! /* { dg-final { scan-assembler-times {\tstr\tz[0-9]+, \[x0\]} 11 { target aarch64_little_endian } } } */
  
  /* { dg-final { scan-assembler-not {\twhile} } } */
  /* { dg-final { scan-assembler-not {\tb} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/while_7.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/while_7.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/while_7.c	Sun May  4 22:32:24 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/while_7.c	Sun May 11 22:32:33 2025
***************
*** 19,25 ****
  
  TEST_ALL (ADD_LOOP)
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl8\n} 1 } } */
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.h, vl8\n} 1 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.s,} 2 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.d,} 2 } } */
--- 19,25 ----
  
  TEST_ALL (ADD_LOOP)
  
! /* { dg-final { scan-assembler-times {\tldr\td[0-9]+, \[x0\]} 1 } } */
! /* { dg-final { scan-assembler-times {\tldr\tq[0-9]+, \[x0\]} 1 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.s,} 2 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.d,} 2 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/while_9.c gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/while_9.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/aarch64/sve/while_9.c	Sun May  4 22:32:24 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/aarch64/sve/while_9.c	Sun May 11 22:32:33 2025
***************
*** 19,25 ****
  
  TEST_ALL (ADD_LOOP)
  
! /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b, vl16\n} 1 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.h,} 2 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.s,} 2 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.d,} 2 } } */
--- 19,25 ----
  
  TEST_ALL (ADD_LOOP)
  
! /* { dg-final { scan-assembler-times {\tldr\tq[0-9]+\, \[x0\]} 1 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.h,} 2 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.s,} 2 } } */
  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7]\.d,} 2 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c gcc-16-20250511/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c	Sun May  4 22:32:24 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c	Sun May 11 22:32:34 2025
*************** TEST_CMP (greaterthanqual, >=, int16x8_t
*** 106,113 ****
  /* { dg-final { scan-assembler-times {vdiv\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } }  */
  
  /* For float16_t.  */
! /* { dg-final { scan-assembler-times {vcmp\.f32\ts[0-9]+, s[0-9]+} 2 } }  */
! /* { dg-final { scan-assembler-times {vcmpe\.f32\ts[0-9]+, s[0-9]+} 4 } }  */
  
  /* For float16x4_t.  */
  /* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-9]+} 2 } }  */
--- 106,112 ----
  /* { dg-final { scan-assembler-times {vdiv\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 13 } }  */
  
  /* For float16_t.  */
! /* { dg-final { scan-assembler-times {vcmp\.f32\ts[0-9]+, s[0-9]+} 6 } }  */
  
  /* For float16x4_t.  */
  /* { dg-final { scan-assembler-times {vceq\.f16\td[0-9]+, d[0-9]+} 2 } }  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/minmax-6.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/minmax-6.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/minmax-6.c	Sun May  4 22:32:25 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/minmax-6.c	Sun May 11 22:32:35 2025
*************** UMVLine16Y_11 (short unsigned int * Pic,
*** 15,18 ****
  /* We do not want the RA to spill %esi for it's dual-use but using
     pmaxsd is OK.  */
  /* { dg-final { scan-assembler-not "rsp" { target { ! { ia32 } } } } } */
! /* { dg-final { scan-assembler "pmaxsd" } } */
--- 15,18 ----
  /* We do not want the RA to spill %esi for it's dual-use but using
     pmaxsd is OK.  */
  /* { dg-final { scan-assembler-not "rsp" { target { ! { ia32 } } } } } */
! /* { dg-final { scan-assembler "pmaxsd" { xfail *-*-* } } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/minmax-7.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/minmax-7.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/minmax-7.c	Sun May  4 22:32:25 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/minmax-7.c	Sun May 11 22:32:35 2025
*************** void bar (int aleft, int axcenter)
*** 17,20 ****
  /* We do not want the RA to spill %esi for it's dual-use but using
     pminsd is OK.  */
  /* { dg-final { scan-assembler-not "rsp" { target { ! { ia32 } } } } } */
! /* { dg-final { scan-assembler "pminsd" } } */
--- 17,20 ----
  /* We do not want the RA to spill %esi for it's dual-use but using
     pminsd is OK.  */
  /* { dg-final { scan-assembler-not "rsp" { target { ! { ia32 } } } } } */
! /* { dg-final { scan-assembler "pminsd" { xfail *-*-* } } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr111657-1.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr111657-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr111657-1.c	Sun May  4 22:32:25 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr111657-1.c	Sun May 11 22:32:36 2025
***************
*** 1,5 ****
! /* { dg-do compile } */
! /* { dg-options "-O2 -mno-sse -mtune=generic -masm=att" } */
  
  typedef unsigned long uword __attribute__ ((mode (word)));
  
--- 1,5 ----
! /* { dg-do assemble } */
! /* { dg-options "-O2 -mno-sse -mtune=generic -save-temps" } */
  
  typedef unsigned long uword __attribute__ ((mode (word)));
  
*************** struct a { uword arr[30]; };
*** 8,12 ****
  __seg_gs struct a m;
  void bar (struct a *dst) { *dst = m; }
  
! /* { dg-final { scan-assembler "rep\[; \t\]+movs(l|q)\[ \t\]+%gs:" { target { ! x32 } } } } */
! /* { dg-final { scan-assembler-not "rep\[; \t\]+movs(l|q)\[ \t\]+%gs:" { target x32 } } } */
--- 8,12 ----
  __seg_gs struct a m;
  void bar (struct a *dst) { *dst = m; }
  
! /* { dg-final { scan-assembler "gs\[ \t\]+rep\[; \t\]+movs(l|q)" { target { ! x32 } } } } */
! /* { dg-final { scan-assembler-not "gs\[ \t\]+rep\[; \t\]+movs(l|q)" { target x32 } } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr117839-3a.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr117839-3a.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr117839-3a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr117839-3a.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic" } */
+ /* { dg-final { scan-assembler-times "xor\[a-z\]*\[\t \]*%xmm\[0-9\]\+,\[^,\]*" 1 } } */
+ 
+ typedef char v4qi __attribute__((vector_size(4)));
+ typedef char v16qi __attribute__((vector_size(16)));
+ 
+ v4qi a;
+ v16qi b;
+ void
+ foo (v4qi* c, v16qi* d)
+ {
+     v4qi sum = __extension__(v4qi){0, 0, 0, 0};
+     v16qi sum2 = __extension__(v16qi){0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0};
+     for (int i = 0; i != 100; i++)
+      sum += c[i];
+     for (int i = 0 ; i != 100; i++)
+       sum2 += d[i];
+     a = sum;
+     b = sum2;
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr117839-3b.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr117839-3b.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr117839-3b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr117839-3b.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3" } */
+ /* { dg-final { scan-assembler-times "xor\[a-z\]*\[\t \]*%xmm\[0-9\]\+,\[^,\]*" 1 } } */
+ 
+ #include "pr117839-3a.c"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr119919.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr119919.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr119919.c	Sun May  4 22:32:25 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr119919.c	Sun May 11 22:32:36 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -msse2 -fdump-tree-vect-details" } */
  int a[9*9];
  bool b[9];
  void test()
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -msse2 -fdump-tree-vect-details -mtune=znver1" } */
  int a[9*9];
  bool b[9];
  void test()
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr120031.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr120031.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr120031.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr120031.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mbmi" } */
+ 
+ unsigned int
+ ZSTD_countTrailingZeros32_fallback (unsigned int val)
+ {
+   static const unsigned int DeBruijn[32]
+     = { 0, 1, 28, 2, 29, 14, 24, 3,
+ 	30, 22, 20, 15, 25, 17, 4, 8,
+ 	31, 27, 13, 23, 21, 19, 16, 7,
+ 	26, 12, 18, 6, 11, 5, 10, 9};
+   return DeBruijn[((unsigned int) ((val & -(int) val) * 0x077CB531U)) >> 27];
+ }
+ 
+ /* { dg-final { scan-assembler "tzcnt" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr91446.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr91446.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr91446.c	Sun May  4 22:32:25 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr91446.c	Sun May 11 22:32:36 2025
*************** foo (unsigned long long width, unsigned
*** 21,24 ****
    bar (&t);
  }
  
! /* { dg-final { scan-assembler-times "vmovdqa\[^\n\r\]*xmm\[0-9\]" 2 } } */
--- 21,24 ----
    bar (&t);
  }
  
! /* { dg-final { scan-assembler-times "vmovdqa\[^\n\r\]*xmm\[0-9\]" 2  { xfail *-*-* } } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr99881.c gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr99881.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/i386/pr99881.c	Sun May  4 22:32:25 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/i386/pr99881.c	Sun May 11 22:32:36 2025
***************
*** 1,7 ****
  /* PR target/99881.  */
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-options "-Ofast -march=skylake" } */
! /* { dg-final { scan-assembler-not "xmm\[0-9\]" { xfail *-*-* } } } */
  
  void
  foo (int* __restrict a, int n, int c)
--- 1,7 ----
  /* PR target/99881.  */
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-options "-Ofast -march=skylake" } */
! /* { dg-final { scan-assembler-not "xmm\[0-9\]" } } */
  
  void
  foo (int* __restrict a, int n, int c)
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c gcc-16-20250511/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c	Sun May  4 22:32:26 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c	Sun May 11 22:32:36 2025
***************
*** 1,6 ****
  /* { dg-do run { target ilp32 } } */
  /* { dg-options "-O2 -mpowerpc64" } */
! /* { dg-require-effective-target has_arch_ppc64 } */
  /* { dg-timeout-factor 2 } */
  
  /* Verify memcmp on m32 mpowerpc64 */
--- 1,6 ----
  /* { dg-do run { target ilp32 } } */
  /* { dg-options "-O2 -mpowerpc64" } */
! /* { dg-require-effective-target powerpc64 } */
  /* { dg-timeout-factor 2 } */
  
  /* Verify memcmp on m32 mpowerpc64 */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-45.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-45.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-45.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-45.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_svadu -mabi=lp64" } */
+ int foo()
+ {
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-46.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-46.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-46.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-46.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_svade -mabi=lp64" } */
+ int foo()
+ {
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-47.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-47.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-47.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-47.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_sdtrig_ssstrict -mabi=lp64" } */
+ int foo()
+ {
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-48.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-48.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-48.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-48.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zama16b -mabi=lp64" } */
+ int foo()
+ {
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-49.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-49.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-49.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-49.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rvi20u64 -mabi=lp64" } */
+ int
+ foo ()
+ {}
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-50.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-50.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-50.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-50.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rvi20u64_mafdc -mabi=lp64d" } */
+ #if !(defined __riscv_mul) || \
+     !(defined __riscv_atomic) || \
+     !(defined __riscv_flen) || \
+     !(defined __riscv_div) || \
+     !(defined __riscv_compressed)
+ #error "Feature macros not defined"
+ #endif
+ int
+ foo ()
+ {}
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-51.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-51.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-51.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-51.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rva20u64 -mabi=lp64d" } */
+ #if !(defined __riscv_mul) || \
+     !(defined __riscv_atomic) || \
+     !(defined __riscv_flen) || \
+     !(defined __riscv_div) || \
+     !(defined __riscv_compressed)
+ #error "Feature macros not defined"
+ #endif
+ int
+ foo ()
+ {}
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-52.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-52.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-52.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-52.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rva22u64v -mabi=lp64" } */
+ /* { dg-warning "*Should use \"_\" to contact Profiles with other extensions" } */
+ int
+ foo ()
+ {}
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-53.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-53.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-53.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-53.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rva23u64 -mabi=lp64d" } */
+ 
+ void foo(){}
+ 
+ /* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0"
+ "_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0"
+ _ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0"
+ _za64rs1p0_zaamo1p0_zalrsc1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcd1p0_zcmop1p0"
+ _zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0"
+ _zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0\"" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-54.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-54.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/arch-54.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/arch-54.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rvb23u64 -mabi=lp64d" } */
+ 
+ void foo(){}
+ 
+ /* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0"
+ "_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0"
+ "_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0"
+ "_zaamo1p0_zalrsc1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcd1p0_zcmop1p0_zba1p0"
+ "_zbb1p0_zbs1p0_zkt1p0\"" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/ior-synthesis-1.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/ior-synthesis-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/ior-synthesis-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/ior-synthesis-1.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile { target { rv64 } } } */
+ /* { dg-options "-march=rv64gb -mabi=lp64d" } */
+ 
+ unsigned long foo(unsigned long src) { return src | 0x8c00000000000001; }
+ 
+ /* { dg-final { scan-assembler-times "\\srori\t" 2 } } */
+ /* { dg-final { scan-assembler-times "\\sori\t" 1 } } */
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/ior-synthesis-2.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/ior-synthesis-2.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/ior-synthesis-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/ior-synthesis-2.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile { target { rv64 } } } */
+ /* { dg-options "-march=rv64gb -mabi=lp64d" } */
+ 
+ unsigned long foo(unsigned long src) { return src | 0x8800000000000007; }
+ 
+ /* { dg-final { scan-assembler-times "\\sbseti\t" 2 } } */
+ /* { dg-final { scan-assembler-times "\\sori\t" 1 } } */
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr114512.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr114512.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr114512.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr114512.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,109 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define MASK 0x1f
+ typedef unsigned int utype;
+ #else
+ #define ONE 1ULL
+ #define MASK 0x3f
+ typedef unsigned long utype;
+ #endif
+ 
+ 
+ _Bool my_isxdigit_1(unsigned char ch) {
+   utype mask1 = 0x03FF007E;
+   if (!((mask1 >> (ch & MASK)) & 1))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_1a(unsigned char ch) {
+   utype mask2 = 0x58;
+   if (!((mask2 >> (ch >> 4)) & 1))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_2(unsigned char ch) {
+   utype mask1 = 0x03FF007E;
+   if (!(mask1 & (ONE << (ch & MASK))))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_2a(unsigned char ch) {
+   utype mask2 = 0x58;
+   if (!(mask2 & (ONE << (ch >> 4))))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_3(unsigned char ch) {
+   utype mask1 = 0x7E00FFC0;
+   if (!((mask1 << (MASK - (ch & MASK))) >> MASK))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_3a(unsigned char ch) {
+   utype mask2 =  0x7E00FFC0;
+   if (!((mask2 << (MASK - ((ch >> 4) & MASK))) >> MASK))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_1_parm(unsigned char ch, utype mask1) {
+   if (!((mask1 >> (ch & MASK)) & 1))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_1a_parm(unsigned char ch, utype mask2) {
+   if (!((mask2 >> (ch >> 4)) & 1))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_2_parm(unsigned char ch, utype mask1) {
+   if (!(mask1 & (ONE << (ch & MASK))))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_2a_parm(unsigned char ch, utype mask2) {
+   if (!(mask2 & (ONE << (ch >> 4))))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_3_parm(unsigned char ch, utype mask1) {
+   if (!((mask1 << (MASK - (ch & MASK))) >> MASK))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ _Bool my_isxdigit_3a_parm(unsigned char ch, utype mask2) {
+   if (!((mask2 << (MASK - ((ch >> 4) & MASK))) >> MASK))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ /* Each test should generate a single bext.  */
+ /* { dg-final { scan-assembler-times "bext\t" 12 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr119971.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr119971.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr119971.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr119971.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile { target rv64 } } */
+ /* { dg-options "-march=rv64gcb -mabi=lp64" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-g" "-Oz" "-Os" } } */
+ 
+ __attribute__ ((noipa)) unsigned
+ foo (unsigned b, unsigned e, unsigned i)
+ {
+   e >>= b;
+   i >>= e & 31;
+   return i & 1;
+ }
+ 
+ int main()
+ {
+   if (foo (0x18, 0xfe000000, 0x40000000) != 1)
+     __builtin_abort ();
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-times "andi\t" 1 } } */
+ /* { dg-final { scan-assembler-times "srlw\t" 2 } } */
+ /* { dg-final { scan-assembler-not "bext\t" } } */
+ 
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr120137.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr120137.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr120137.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr120137.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl256b -mrvv-vector-bits=zvl -mabi=lp64" } */
+ 
+ char b[13][13];
+ void c() {
+   for (int d = 0; d < 13; ++d)
+     for (int e = 0; e < 13; ++e)
+       b[d][e] = e == 0 ? -98 : 38;
+ }
+ 
+ 
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr120154.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr120154.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/pr120154.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/pr120154.c	Sun May 11 22:32:36 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gv -mabi=lp64" } */
+ 
+ 
+ 
+ typedef __attribute__((__vector_size__(4))) char V;
+ 
+ V g;
+ 
+ V
+ bar(V a, V b)
+ {
+   V s = a + b + g;
+   return s;
+ }
+ 
+ V
+ foo()
+ {
+   return bar((V){20}, (V){23, 150});
+ }
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/predef-19.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/predef-19.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/predef-19.c	Sun May  4 22:32:27 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/predef-19.c	Sun May 11 22:32:36 2025
*************** int main () {
*** 27,36 ****
  #error "__riscv_zicsr"
  #endif
  
- #if !defined(_riscv_zmmul)
- #error "__riscv_zmmul"
- #endif
- 
  #if !defined(__riscv_zve32x)
  #error "__riscv_zve32x"
  #endif
--- 27,32 ----
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,61 ----
+ #ifndef HAVE_DEFINED_VX_VF_BINARY_H
+ #define HAVE_DEFINED_VX_VF_BINARY_H
+ 
+ #include <stdint.h>
+ 
+ #define DEF_VX_BINARY_CASE_0(T, OP)                                        \
+ void                                                                       \
+ test_vx_binary_case_0 (T * restrict out, T * restrict in, T x, unsigned n) \
+ {                                                                          \
+   for (unsigned i = 0; i < n; i++)                                         \
+     out[i] = in[i] OP x;                                                   \
+ }
+ #define DEF_VX_BINARY_CASE_0_WRAP(T, OP)         DEF_VX_BINARY_CASE_0(T, OP)
+ #define RUN_VX_BINARY_CASE_0(out, in, x, n)      test_vx_binary_case_0(out, in, x, n)
+ #define RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n) RUN_VX_BINARY_CASE_0(out, in, x, n)
+ 
+ #define VX_BINARY_BODY(op)       \
+   out[k + 0] = in[k + 0] op tmp; \
+   out[k + 1] = in[k + 1] op tmp; \
+   k += 2;
+ 
+ #define VX_BINARY_BODY_X4(op) \
+   VX_BINARY_BODY(op)          \
+   VX_BINARY_BODY(op)
+ 
+ #define VX_BINARY_BODY_X8(op) \
+   VX_BINARY_BODY_X4(op)       \
+   VX_BINARY_BODY_X4(op)
+ 
+ #define VX_BINARY_BODY_X16(op) \
+   VX_BINARY_BODY_X8(op)        \
+   VX_BINARY_BODY_X8(op)
+ 
+ #define VX_BINARY_BODY_X32(op) \
+   VX_BINARY_BODY_X16(op)       \
+   VX_BINARY_BODY_X16(op)
+ 
+ #define VX_BINARY_BODY_X64(op) \
+   VX_BINARY_BODY_X32(op)       \
+   VX_BINARY_BODY_X32(op)
+ 
+ #define VX_BINARY_BODY_X128(op) \
+   VX_BINARY_BODY_X64(op)        \
+   VX_BINARY_BODY_X64(op)
+ 
+ #define DEF_VX_BINARY_CASE_1(T, OP, BODY)                                  \
+ void                                                                       \
+ test_vx_binary_case_1 (T * restrict out, T * restrict in, T x, unsigned n) \
+ {                                                                          \
+   unsigned k = 0;                                                          \
+   T tmp = x + 3;                                                           \
+                                                                            \
+   while (k < n)                                                            \
+     {                                                                      \
+       tmp = tmp ^ 0x3f;                                                    \
+       BODY(OP)                                                             \
+     }                                                                      \
+ }
+ #define DEF_VX_BINARY_CASE_1_WRAP(T, OP, BODY) DEF_VX_BINARY_CASE_1(T, OP, BODY)
+ 
+ #endif
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,401 ----
+ #ifndef HAVE_DEFINED_VX_BINARY_DATA_H
+ #define HAVE_DEFINED_VX_BINARY_DATA_H
+ 
+ #define N 16
+ 
+ #define TEST_BINARY_DATA(T, NAME)      test_##T##_##NAME##_data
+ #define TEST_BINARY_DATA_WRAP(T, NAME) TEST_BINARY_DATA(T, NAME)
+ 
+ int8_t TEST_BINARY_DATA(int8_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+     },
+   },
+   {
+     { 127 },
+     {
+          0,    0,    0,    0,
+         -1,   -1,   -1,   -1,
+       -128, -128, -128, -128,
+         -2,   -2,   -2,   -2,
+     },
+     {
+        127,  127,  127,  127,
+        126,  126,  126,  126,
+         -1,   -1,   -1,   -1,
+        125,  125,  125,  125,
+     },
+   },
+   {
+     { -128 },
+     {
+          0,    0,    0,    0,
+          1,    1,    1,    1,
+        127,  127,  127,  127,
+          2,    2,    2,    2,
+     },
+     {
+       -128, -128, -128, -128,
+       -127, -127, -127, -127,
+         -1,   -1,   -1,   -1,
+       -126, -126, -126, -126,
+     },
+   },
+ };
+ 
+ int16_t TEST_BINARY_DATA(int16_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+     },
+   },
+   {
+     { 32767 },
+     {
+            0,      0,      0,      0,
+           -1,     -1,     -1,     -1,
+       -32768, -32768, -32768, -32768,
+           -2,     -2,     -2,     -2,
+     },
+     {
+        32767,  32767,  32767,  32767,
+        32766,  32766,  32766,  32766,
+           -1,     -1,     -1,     -1,
+        32765,  32765,  32765,  32765,
+     },
+   },
+   {
+     { -32768 },
+     {
+            0,      0,      0,      0,
+            1,      1,      1,      1,
+        32767,  32767,  32767,  32767,
+            2,      2,      2,      2,
+     },
+     {
+       -32768, -32768, -32768, -32768,
+       -32767, -32767, -32767, -32767,
+           -1,     -1,     -1,     -1,
+       -32766, -32766, -32766, -32766,
+     },
+   },
+ };
+ 
+ int32_t TEST_BINARY_DATA(int32_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+     },
+   },
+   {
+     { 2147483647 },
+     {
+                 0,           0,           0,           0,
+                -1,          -1,          -1,          -1,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+                -2,          -2,          -2,          -2,
+     },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+        2147483646,  2147483646,  2147483646,  2147483646,
+                -1,          -1,          -1,          -1,
+        2147483645,  2147483645,  2147483645,  2147483645,
+     },
+   },
+   {
+     { -2147483648 },
+     {
+                 0,           0,           0,           0,
+                 1,           1,           1,           1,
+        2147483647,  2147483647,  2147483647,  2147483647,
+                 2,           2,           2,           2,
+     },
+     {
+       -2147483648, -2147483648, -2147483648, -2147483648,
+       -2147483647, -2147483647, -2147483647, -2147483647,
+                -1,          -1,          -1,          -1,
+       -2147483646, -2147483646, -2147483646, -2147483646,
+     },
+   },
+ };
+ 
+ int64_t TEST_BINARY_DATA(int64_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+     },
+   },
+   {
+     { 9223372036854775807ll },
+     {
+                             0,                       0,                       0,                       0,
+                            -1,                      -1,                      -1,                      -1,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+                            -2,                      -2,                      -2,                      -2,
+     },
+     {
+        9223372036854775807ll,  9223372036854775807ll,  9223372036854775807ll,  9223372036854775807ll,
+        9223372036854775806ll,  9223372036854775806ll,  9223372036854775806ll,  9223372036854775806ll,
+                           -1,                     -1,                     -1,                     -1,
+        9223372036854775805ll,  9223372036854775805ll,  9223372036854775805ll,  9223372036854775805ll,
+     },
+   },
+   {
+     { -9223372036854775808ull },
+     {
+                            0,                      0,                      0,                      0,
+                            1,                      1,                      1,                      1,
+        9223372036854775807ll,  9223372036854775807ll,  9223372036854775807ll,  9223372036854775807ll,
+                            2,                      2,                      2,                      2,
+     },
+     {
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+        -9223372036854775807ll,  -9223372036854775807ll,  -9223372036854775807ll,  -9223372036854775807ll,
+                            -1,                      -1,                      -1,                      -1,
+        -9223372036854775806ll,  -9223372036854775806ll,  -9223372036854775806ll,  -9223372036854775806ll,
+     },
+   },
+ };
+ 
+ uint8_t TEST_BINARY_DATA(uint8_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       11, 11, 11, 11,
+        9,  9,  9,  9,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+       12, 12, 12, 12,
+       10, 10, 10, 10,
+     },
+   },
+   {
+     { 127 },
+     {
+         0,   0,   0,   0,
+         1,   1,   1,   1,
+       127, 127, 127, 127,
+       128, 128, 128, 128,
+     },
+     {
+       127, 127, 127, 127,
+       128, 128, 128, 128,
+       254, 254, 254, 254,
+       255, 255, 255, 255,
+     },
+   },
+   {
+     { 253 },
+     {
+          0,   0,   0,   0,
+          1,   1,   1,   1,
+          2,   2,   2,   2,
+        255, 255, 255, 255,
+     },
+     {
+        253, 253, 253, 253,
+        254, 254, 254, 254,
+        255, 255, 255, 255,
+        252, 252, 252, 252,
+     },
+   },
+ };
+ 
+ uint16_t TEST_BINARY_DATA(uint16_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       11, 11, 11, 11,
+        9,  9,  9,  9,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+       12, 12, 12, 12,
+       10, 10, 10, 10,
+     },
+   },
+   {
+     { 32767 },
+     {
+           0,     0,     0,     0,
+           1,     1,     1,     1,
+       32767, 32767, 32767, 32767,
+       32768, 32768, 32768, 32768,
+     },
+     {
+       32767, 32767, 32767, 32767,
+       32768, 32768, 32768, 32768,
+       65534, 65534, 65534, 65534,
+       65535, 65535, 65535, 65535,
+     },
+   },
+   {
+     { 65533 },
+     {
+            0,     0,     0,     0,
+            1,     1,     1,     1,
+            2,     2,     2,     2,
+        65535, 65535, 65535, 65535,
+     },
+     {
+        65533, 65533, 65533, 65533,
+        65534, 65534, 65534, 65534,
+        65535, 65535, 65535, 65535,
+        65532, 65532, 65532, 65532,
+     },
+   },
+ };
+ 
+ uint32_t TEST_BINARY_DATA(uint32_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       11, 11, 11, 11,
+        9,  9,  9,  9,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+       12, 12, 12, 12,
+       10, 10, 10, 10,
+     },
+   },
+   {
+     { 2147483647 },
+     {
+                0,          0,          0,          0,
+                1,          1,          1,          1,
+       2147483647, 2147483647, 2147483647, 2147483647,
+       2147483648, 2147483648, 2147483648, 2147483648,
+     },
+     {
+       2147483647, 2147483647, 2147483647, 2147483647,
+       2147483648, 2147483648, 2147483648, 2147483648,
+       4294967294, 4294967294, 4294967294, 4294967294,
+       4294967295, 4294967295, 4294967295, 4294967295,
+     },
+   },
+   {
+     { 4294967293 },
+     {
+                 0,          0,          0,          0,
+                 1,          1,          1,          1,
+                 2,          2,          2,          2,
+        4294967295, 4294967295, 4294967295, 4294967295,
+     },
+     {
+        4294967293, 4294967293, 4294967293, 4294967293,
+        4294967294, 4294967294, 4294967294, 4294967294,
+        4294967295, 4294967295, 4294967295, 4294967295,
+        4294967292, 4294967292, 4294967292, 4294967292,
+     },
+   },
+ };
+ 
+ uint64_t TEST_BINARY_DATA(uint64_t, vadd)[][3][N] =
+ {
+   {
+     { 1 },
+     {
+        0,  0,  0,  0,
+        1,  1,  1,  1,
+       11, 11, 11, 11,
+        9,  9,  9,  9,
+     },
+     {
+        1,  1,  1,  1,
+        2,  2,  2,  2,
+       12, 12, 12, 12,
+       10, 10, 10, 10,
+     },
+   },
+   {
+     { 9223372036854775807ull },
+     {
+                            0,                      0,                      0,                      0,
+                            1,                      1,                      1,                      1,
+       9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull,
+       9223372036854775808ull, 9223372036854775808ull, 9223372036854775808ull, 9223372036854775808ull,
+     },
+     {
+       9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull,
+       9223372036854775808ull, 9223372036854775808ull, 9223372036854775808ull, 9223372036854775808ull,
+       18446744073709551614ull, 18446744073709551614ull, 18446744073709551614ull, 18446744073709551614ull,
+       18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+     },
+   },
+   {
+     { 18446744073709551613ull },
+     {
+                              0,                       0,                       0,                       0,
+                              1,                       1,                       1,                       1,
+                              2,                       2,                       2,                       2,
+        18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+     },
+     {
+        18446744073709551613ull, 18446744073709551613ull, 18446744073709551613ull, 18446744073709551613ull,
+        18446744073709551614ull, 18446744073709551614ull, 18446744073709551614ull, 18446744073709551614ull,
+        18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+        18446744073709551612ull, 18446744073709551612ull, 18446744073709551612ull, 18446744073709551612ull,
+     },
+   },
+ };
+ 
+ #endif
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,26 ----
+ #ifndef HAVE_DEFINED_VX_BINARY_RUN_H
+ #define HAVE_DEFINED_VX_BINARY_RUN_H
+ 
+ int
+ main ()
+ {
+   unsigned i, k;
+   T out[N];
+ 
+   for (i = 0; i < sizeof (TEST_DATA) / sizeof (TEST_DATA[0]); i++)
+     {
+       T x = TEST_DATA[i][0][0];
+       T *in = TEST_DATA[i][1];
+       T *expect = TEST_DATA[i][2];
+ 
+       TEST_RUN (out, in, x, N);
+ 
+       for (k = 0; k < N; k++)
+ 	if (out[k] != expect[k])
+ 	  __builtin_abort ();
+     }
+ 
+   return 0;
+ }
+ 
+ #endif
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int16_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int32_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int64_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-i8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int8_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint16_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint32_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint64_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-1-u8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint8_t, +)
+ 
+ /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int16_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int32_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int64_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-i8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int8_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint16_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint32_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint64_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-2-u8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint8_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int16_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int32_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int64_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-i8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(int8_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint16_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint32_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint64_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-3-u8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d --param=gpr2vr-cost=15" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_0(uint8_t, +)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int16_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int32_t, +, VX_BINARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int64_t, +, VX_BINARY_BODY)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-i8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int8_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint16_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint32_t, +, VX_BINARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint64_t, +, VX_BINARY_BODY)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-4-u8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint8_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int16_t, +, VX_BINARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int32_t, +, VX_BINARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int64_t, +, VX_BINARY_BODY)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-i8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int8_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint16_t, +, VX_BINARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint32_t, +, VX_BINARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint64_t, +, VX_BINARY_BODY)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-5-u8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint8_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int16_t, +, VX_BINARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int32_t, +, VX_BINARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int64_t, +, VX_BINARY_BODY)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-i8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(int8_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,9 ----
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint16_t, +, VX_BINARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint32_t, +, VX_BINARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint64_t, +, VX_BINARY_BODY)
+ 
+ /* { dg-final { scan-assembler-not {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-6-u8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
+ 
+ #include "vx_binary.h"
+ 
+ DEF_VX_BINARY_CASE_1(uint8_t, +, VX_BINARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler {vadd.vx} } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u16.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u16.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u16.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u32.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u32.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u32.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u64.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u64.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u64.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u8.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u8.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-u8.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { 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
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, +)
+ 
+ #define TEST_DATA               TEST_BINARY_DATA_WRAP(T, vadd)
+ #define TEST_RUN(out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,66 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvbc -mabi=lp64d" } */
+ 
+ #include <stdint-gcc.h>
+ 
+ int8_t crc8_data8 ()
+ {
+   return __builtin_crc8_data8 (0x34, 'a', 0x12);
+ }
+ 
+ int16_t crc16_data8 ()
+ {
+   return __builtin_crc16_data8 (0x1234, 'a', 0x1021);
+ }
+ 
+ int16_t crc16_data16 ()
+ {
+   return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021);
+ }
+ 
+ int32_t crc32_data8 ()
+ {
+   return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123);
+ }
+ 
+ int32_t crc32_data16 ()
+ {
+   return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123);
+ }
+ 
+ int32_t crc32_data32 ()
+ {
+   return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123);
+ }
+ 
+ int8_t rev_crc8_data8 ()
+ {
+   return __builtin_rev_crc8_data8 (0x34, 'a', 0x12);
+ }
+ 
+ int16_t rev_crc16_data8 ()
+ {
+   return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021);
+ }
+ 
+ int16_t rev_crc16_data16 ()
+ {
+   return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021);
+ }
+ 
+ int32_t rev_crc32_data8 ()
+ {
+   return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123);
+ }
+ 
+ int32_t rev_crc32_data16 ()
+ {
+   return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123);
+ }
+ 
+ int32_t rev_crc32_data32 ()
+ {
+   return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123);
+ }
+ /* { dg-final { scan-assembler-times "vclmul.vx" 12 } } */
+ /* { dg-final { scan-assembler-times "vclmulh.vx" 12 } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp	Sun May  4 22:32:27 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp	Sun May 11 22:32:37 2025
*************** foreach op $AUTOVEC_TEST_OPTS {
*** 132,136 ****
--- 132,153 ----
      "$op" ""
  }
  
+ # vx_vf tests
+ set AUTOVEC_TEST_OPTS [list \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m1 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m4 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m8 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=dynamic -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m1 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m4 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m8 -ffast-math} \
+   {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=dynamic -ffast-math} ]
+ foreach op $AUTOVEC_TEST_OPTS {
+   dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/vx_vf/*.\[cS\]]] \
+     "$op" ""
+ }
+ 
  # All done.
  dg-finish
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/xor-synthesis-1.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/xor-synthesis-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/xor-synthesis-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/xor-synthesis-1.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile { target { rv64 } } } */
+ /* { dg-options "-march=rv64gb -mabi=lp64d" } */
+ 
+ unsigned long foo(unsigned long src) { return src ^ 0xffffffffefffffffUL; }
+ 
+ /* { dg-final { scan-assembler-times "\\sbinvi\t" 1 } } */
+ /* { dg-final { scan-assembler-times "\\snot\t" 1 } } */
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile { target { rv64 } } } */
+ /* { dg-options "-march=rv64gb -mabi=lp64d" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+ 
+ unsigned long foo(unsigned long src) { return src ^ 0x8800000000000007; }
+ 
+ /* xfailed until we remove mvconst_internal.  */
+ /* { dg-final { scan-assembler-times "\\sbinvi\t" 2 { xfail *-*-* } } } */
+ /* { dg-final { scan-assembler-times "\\sxori\t" 1 { xfail *-*-* } } } */
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/xor-synthesis-3.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/xor-synthesis-3.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/xor-synthesis-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/xor-synthesis-3.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile { target { rv64 } } } */
+ /* { dg-options "-march=rv64gb -mabi=lp64d" } */
+ 
+ unsigned long foo(unsigned long src) { return src ^ 0x8c00000000000001; }
+ 
+ /* { dg-final { scan-assembler-times "\\srori\t" 2 } } */
+ /* { dg-final { scan-assembler-times "\\sxori\t" 1 } } */
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/riscv/zbb-rol-ror-03.c gcc-16-20250511/gcc/testsuite/gcc.target/riscv/zbb-rol-ror-03.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/riscv/zbb-rol-ror-03.c	Sun May  4 22:32:27 2025
--- gcc-16-20250511/gcc/testsuite/gcc.target/riscv/zbb-rol-ror-03.c	Sun May 11 22:32:37 2025
*************** unsigned int rol(unsigned int rs1, unsig
*** 10,16 ****
  }
  unsigned int ror(unsigned int rs1, unsigned int rs2)
  {
!     int shamt = rs2 & (64 - 1);
      return (rs1 >> shamt) | (rs1 << ((32 - shamt) & (32 - 1)));
  }
  
--- 10,16 ----
  }
  unsigned int ror(unsigned int rs1, unsigned int rs2)
  {
!     int shamt = rs2 & (32 - 1);
      return (rs1 >> shamt) | (rs1 << ((32 - shamt) & (32 - 1)));
  }
  
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/s390/vector/cstoreti-1.c gcc-16-20250511/gcc/testsuite/gcc.target/s390/vector/cstoreti-1.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/s390/vector/cstoreti-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/s390/vector/cstoreti-1.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,127 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -march=z13" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /*
+ ** test_le:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     vecg	\2,\1
+ **     jne	\.L.+
+ **     vchlgs	%v.,\1,\2
+ **     lghi	%r2,0
+ **     locghinl	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_le (__int128 x, __int128 y) { return x <= y; }
+ 
+ /*
+ ** test_leu:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     veclg	\2,\1
+ **     jne	\.L.+
+ **     vchlgs	%v.,\1,\2
+ **     lghi	%r2,0
+ **     locghinl	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_leu (unsigned __int128 x, unsigned __int128 y) { return x <= y; }
+ 
+ /*
+ ** test_lt:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     vecg	\1,\2
+ **     jne	\.L.+
+ **     vchlgs	%v.,\2,\1
+ **     lghi	%r2,0
+ **     locghil	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_lt (__int128 x, __int128 y) { return x < y; }
+ 
+ /*
+ ** test_ltu:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     veclg	\1,\2
+ **     jne	\.L.+
+ **     vchlgs	%v.,\2,\1
+ **     lghi	%r2,0
+ **     locghil	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_ltu (unsigned __int128 x, unsigned __int128 y) { return x < y; }
+ 
+ /*
+ ** test_ge:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     vecg	\1,\2
+ **     jne	\.L.+
+ **     vchlgs	%v.,\2,\1
+ **     lghi	%r2,0
+ **     locghinl	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_ge (__int128 x, __int128 y) { return x >= y; }
+ 
+ /*
+ ** test_geu:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     veclg	\1,\2
+ **     jne	\.L.+
+ **     vchlgs	%v.,\2,\1
+ **     lghi	%r2,0
+ **     locghinl	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_geu (unsigned __int128 x, unsigned __int128 y) { return x >= y; }
+ 
+ /*
+ ** test_gt:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     vecg	\2,\1
+ **     jne	\.L.+
+ **     vchlgs	%v.,\1,\2
+ **     lghi	%r2,0
+ **     locghil	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_gt (__int128 x, __int128 y) { return x > y; }
+ 
+ /*
+ ** test_gtu:
+ **     vl	(%v.),0\(%r2\),3
+ **     vl	(%v.),0\(%r3\),3
+ **     veclg	\2,\1
+ **     jne	\.L.+
+ **     vchlgs	%v.,\1,\2
+ **     lghi	%r2,0
+ **     locghil	%r2,1
+ **     br	%r14
+ */
+ 
+ int test_gtu (unsigned __int128 x, unsigned __int128 y) { return x > y; }
+ 
+ /* { dg-final { scan-assembler-times {vceqgs\t} 4 } } */
+ /* { dg-final { scan-assembler-times {locghie\t} 2 } } */
+ /* { dg-final { scan-assembler-times {locghine\t} 2 } } */
+ 
+ int test_eq (__int128 x, __int128 y) { return x == y; }
+ 
+ int test_equ (unsigned __int128 x, unsigned __int128 y) { return x == y; }
+ 
+ int test_ne (__int128 x, __int128 y) { return x != y; }
+ 
+ int test_neu (unsigned __int128 x, unsigned __int128 y) { return x != y; }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gcc.target/s390/vector/cstoreti-2.c gcc-16-20250511/gcc/testsuite/gcc.target/s390/vector/cstoreti-2.c
*** gcc-16-20250504/gcc/testsuite/gcc.target/s390/vector/cstoreti-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gcc.target/s390/vector/cstoreti-2.c	Sun May 11 22:32:37 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -march=z17" } */
+ /* { dg-final { scan-assembler-times {vecq\t} 8 } } */
+ /* { dg-final { scan-assembler-times {veclq\t} 4 } } */
+ /* { dg-final { scan-assembler-times {locghile\t} 1 } } LE */
+ /* { dg-final { scan-assembler-times {slbgr\t} 1 } } LEU */
+ /* { dg-final { scan-assembler-times {locghil\t} 2 } } LT LTU */
+ /* { dg-final { scan-assembler-times {locghihe\t} 2 } } GE GEU */
+ /* { dg-final { scan-assembler-times {locghih\t} 1 } } GT */
+ /* { dg-final { scan-assembler-times {alcgr\t} 1 } } GTU */
+ /* { dg-final { scan-assembler-times {locghie\t} 2 } } EQ EQU */
+ /* { dg-final { scan-assembler-times {locghine\t} 2 } } NE NEU */
+ 
+ int test_le (__int128 x, __int128 y) { return x <= y; }
+ int test_leu (unsigned __int128 x, unsigned __int128 y) { return x <= y; }
+ int test_lt (__int128 x, __int128 y) { return x < y; }
+ int test_ltu (unsigned __int128 x, unsigned __int128 y) { return x < y; }
+ int test_ge (__int128 x, __int128 y) { return x >= y; }
+ int test_geu (unsigned __int128 x, unsigned __int128 y) { return x >= y; }
+ int test_gt (__int128 x, __int128 y) { return x > y; }
+ int test_gtu (unsigned __int128 x, unsigned __int128 y) { return x > y; }
+ int test_eq (__int128 x, __int128 y) { return x == y; }
+ int test_equ (unsigned __int128 x, unsigned __int128 y) { return x == y; }
+ int test_ne (__int128 x, __int128 y) { return x != y; }
+ int test_neu (unsigned __int128 x, unsigned __int128 y) { return x != y; }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90	Sun May  4 22:32:28 2025
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90	Sun May 11 22:32:38 2025
***************
*** 1,4 ****
! ! { dg-do run }
  program basic_do_concurrent
    implicit none
    integer :: i, arr(10)
--- 1,4 ----
! ! { dg-do compile }
  program basic_do_concurrent
    implicit none
    integer :: i, arr(10)
*************** program basic_do_concurrent
*** 7,11 ****
      arr(i) = i
    end do
  
    print *, arr
! end program basic_do_concurrent
\ No newline at end of file
--- 7,14 ----
      arr(i) = i
    end do
  
+   do concurrent (i=1:10);enddo
+   do,concurrent (i=1:10);arr(i)=i;enddo
+ 
    print *, arr
! end program basic_do_concurrent
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/guality/pr120193.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/guality/pr120193.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/guality/pr120193.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/guality/pr120193.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,26 ----
+ ! PR fortran/120193
+ ! { dg-do run }
+ ! { dg-options "-g -funsigned" }
+ ! { dg-skip-if "" { *-*-* }  { "*" } { "-O0" } }
+ 
+ program foo
+   unsigned(kind=1) :: a(2), e
+   unsigned(kind=2) :: b(2), f
+   unsigned(kind=4) :: c(2), g
+   unsigned(kind=8) :: d(2), h
+   character(kind=1, len=1) :: i(2), j
+   character(kind=4, len=1) :: k(2), l
+   a = 97u_1	! { dg-final { gdb-test 24 "a" "d" } }
+   b = 97u_2	! { dg-final { gdb-test 24 "b" "c" } }
+   c = 97u_4	! { dg-final { gdb-test 24 "c" "b" } }
+   d = 97u_8	! { dg-final { gdb-test 24 "d" "a" } }
+   e = 97u_1	! { dg-final { gdb-test 24 "e" "97" } }
+   f = 97u_2	! { dg-final { gdb-test 24 "f" "97" } }
+   g = 97u_4	! { dg-final { gdb-test 24 "g" "97" } }
+   h = 97u_8	! { dg-final { gdb-test 24 "h" "97" } }
+   i = 'a'	! { dg-final { gdb-test 24 "i" "('a', 'a')" } }
+   j = 'b'	! { dg-final { gdb-test 24 "j" "'b'" } }
+   k = 'c'
+   l = 'd'
+   print *, a
+ end program
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/interface_60.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/interface_60.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/interface_60.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/interface_60.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,70 ----
+ ! { dg-do run }
+ ! { dg-options "-Wexternal-argument-mismatch" }
+ ! Originally proc_ptr_52.f90, this gave an error with the warning above.
+ 
+ module cs
+ 
+ implicit none
+ 
+ integer, target :: integer_target
+ 
+ abstract interface
+    function classStar_map_ifc(x) result(y)
+       class(*), pointer            :: y
+       class(*), target, intent(in) :: x
+    end function classStar_map_ifc
+ end interface
+ 
+ contains
+ 
+    function fun(x) result(y)
+       class(*), pointer            :: y
+       class(*), target, intent(in) :: x
+       select type (x)
+       type is (integer)
+          integer_target = x        ! Deals with dangling target.
+          y => integer_target
+       class default
+          y => null()
+       end select
+    end function fun
+ 
+    function apply(fap, x) result(y)
+       procedure(classStar_map_ifc) :: fap
+       integer, intent(in) :: x
+       integer :: y
+       class(*), pointer :: p
+       y = 0                        ! Get rid of 'y' undefined warning
+       p => fap (x)
+       select type (p)
+       type is (integer)
+          y = p
+       end select
+    end function apply
+ 
+    function selector() result(fsel)
+       procedure(classStar_map_ifc), pointer :: fsel
+       fsel => fun
+    end function selector
+ 
+ end module cs
+ 
+ 
+ program classStar_map
+ 
+ use cs
+ implicit none
+ 
+ integer :: x, y
+ procedure(classStar_map_ifc), pointer :: fm
+ 
+ x = 123654
+ fm => selector ()               ! Fixed by second chunk in patch
+ y = apply (fm, x)               ! Fixed by first chunk in patch
+ if (x .ne. y) stop 1
+ 
+ x = 2 * x
+ y = apply (fun, x)             ! PR93925; fixed as above
+ if (x .ne. y) stop 2
+ 
+ end program classStar_map
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/interface_61.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/interface_61.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/interface_61.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/interface_61.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,27 ----
+ ! { dg-do compile }
+ ! { dg-options -Wexternal-argument-mismatch }
+ ! PR fortran/120163 - this used to cause an error.
+ ! Original test case by Bálint Aradi
+ module mod1
+   implicit none
+ 
+   abstract interface
+     pure subroutine callback_interface(a)
+       real, intent(in) :: a
+     end subroutine callback_interface
+   end interface
+ 
+ contains
+ 
+   subroutine caller(callback)
+     procedure(callback_interface) :: callback
+     real :: a
+     call callback(a)
+   end subroutine caller
+ 
+ end module mod1
+ 
+ 
+ module mod2
+   use mod1
+ end module mod2
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/pr119948.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/pr119948.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/pr119948.f90	Sun May  4 22:32:28 2025
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/pr119948.f90	Sun May 11 22:32:38 2025
***************
*** 1,7 ****
! ! { dg-do compile }
  !
! ! Test the fix for PR119948, which used to fail as indicated below with,
! ! "Error: Bad allocate-object at (1) for a PURE procedure"
  !
  ! Contributed by Damian Rouson  <damian@archaeologic.codes>
  !
--- 1,8 ----
! ! { dg-do run }
  !
! ! Test the fix for PR119948, which used to fail as indicated below with:
! ! (1) "Error: Bad allocate-object at (1) for a PURE procedure"
! ! (2) "Error: ‘construct_test2 at (1) is not a variable"
  !
  ! Contributed by Damian Rouson  <damian@archaeologic.codes>
  !
*************** module test_m
*** 18,50 ****
        type(test_t) :: test
        type(test_t), intent(in) :: arg
      end function
!     pure module function construct_test_sub(arg) result(test)
        implicit none
        type(test_t) :: test
        type(test_t), intent(in) :: arg
      end function
    end interface
  
  contains
    module procedure construct_test
!     allocate(test%i, source = arg%i) ! Used to fail here
    end procedure
  end module
  
  submodule (test_m)test_s
  contains
!   module procedure construct_test_sub
      allocate(test%i, source = arg%i) ! This was OK.
    end procedure
  end submodule
  
    use test_m
    type(test_t) :: res, dummy
!   dummy%i = 42
    res = construct_test (dummy)
    if (res%i /= dummy%i) stop 1
!   dummy%i = -42
!   res = construct_test_sub (dummy)
    if (res%i /= dummy%i) stop 2
    deallocate (res%i, dummy%i)
  end
--- 19,83 ----
        type(test_t) :: test
        type(test_t), intent(in) :: arg
      end function
! 
!     pure module function construct_test2(arg)
!       implicit none
!       type(test_t) construct_test2
!       type(test_t), intent(in) :: arg
!     end function
! 
!     pure module function construct_test_3(arg) result(test)
        implicit none
        type(test_t) :: test
        type(test_t), intent(in) :: arg
      end function
+ 
+     pure module function construct_test_4(arg)
+       implicit none
+       type(test_t) :: construct_test_4
+       type(test_t), intent(in) :: arg
+     end function
    end interface
  
  contains
    module procedure construct_test
!     allocate(test%i, source = arg%i) ! Fail #1
!   end procedure
! 
!   module procedure construct_test2
!     allocate(construct_test2%i, source = arg%i)    ! Fail #2
    end procedure
  end module
  
  submodule (test_m)test_s
  contains
!   module procedure construct_test_3
      allocate(test%i, source = arg%i) ! This was OK.
    end procedure
+ 
+   module procedure construct_test_4
+     allocate(construct_test_4%i, source = arg%i) ! This was OK.
+   end procedure
  end submodule
  
    use test_m
    type(test_t) :: res, dummy
! !
!   dummy%i = int (rand () * 1e6)
    res = construct_test (dummy)
    if (res%i /= dummy%i) stop 1
! !
!   dummy%i = int (rand () * 1e6)
!   res = construct_test2 (dummy)
    if (res%i /= dummy%i) stop 2
+ !
+   dummy%i = int (rand () * 1e6)
+   res = construct_test_3 (dummy)
+   if (res%i /= dummy%i) stop 3
+ 
+   dummy%i = int (rand () * 1e6)
+   res = construct_test_4 (dummy)
+   if (res%i /= dummy%i) stop 4
+ 
    deallocate (res%i, dummy%i)
  end
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120049_a.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120049_a.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120049_a.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120049_a.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do preprocess }
+ ! { dg-additional-options "-cpp" }
+ !
+ ! Test the fix for PR86248
+ program tests_gtk_sup
+   use gtk_sup
+   implicit none
+   type(c_ptr), target :: val
+   if (c_associated(val, c_loc(val))) then
+     stop 1
+   endif
+   if (c_associated(c_loc(val), val)) then
+     stop 2
+   endif
+ end program tests_gtk_sup
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120049_b.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120049_b.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120049_b.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120049_b.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,8 ----
+ ! { dg-do  run }
+ ! { dg-additional-sources pr120049_a.f90 }
+ !
+ ! Module for pr120049.f90
+ !
+ module gtk_sup
+   use, intrinsic :: iso_c_binding
+ end module gtk_sup
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120152_1.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120152_1.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120152_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120152_1.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,52 ----
+ ! PR libfortran/120152
+ ! { dg-do run }
+ 
+ subroutine f1
+   integer(kind=8) :: a (10, 10, 10), b (10, 10)
+   logical :: c (10, 10, 10)
+   a = 0
+   c = .true.
+   b = maxloc (a, 2, c, 8, .true.)
+ end
+ subroutine f2
+   integer(kind=8) :: a (10, 10, 10)
+   integer(kind=4) :: b (10, 10)
+   logical :: c (10, 10, 10)
+   a = 0
+   c = .true.
+   b = maxloc (a, 2, c, 4, .true.)
+ end
+ subroutine f3
+   integer(kind=8) :: a (10, 10, 10), b (10, 10)
+   a = 0
+   b = maxloc (a, 2, kind=8, back=.true.)
+ end
+ subroutine f4
+   integer(kind=8) :: a (10, 10, 10)
+   integer(kind=4) :: b (10, 10)
+   a = 0
+   b = maxloc (a, 2, kind=4, back=.true.)
+ end
+ subroutine f5
+   integer(kind=8) :: a (10, 10, 10), b (10, 10)
+   logical :: c
+   a = 0
+   c = .false.
+   b = maxloc (a, 2, c, 8, .true.)
+ end
+ subroutine f6
+   integer(kind=8) :: a (10, 10, 10)
+   integer(kind=4) :: b (10, 10)
+   logical :: c
+   a = 0
+   c = .false.
+   b = maxloc (a, 2, c, 4, .true.)
+ end
+ program pr120152
+   call f1
+   call f2
+   call f3
+   call f4
+   call f5
+   call f6
+ end
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120152_2.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120152_2.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120152_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120152_2.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,80 ----
+ ! PR libfortran/120152
+ ! { dg-do run { target fortran_large_int } }
+ 
+ subroutine f1
+   integer(kind=16) :: a (10, 10, 10)
+   integer(kind=8) :: b (10, 10)
+   logical :: c (10, 10, 10)
+   a = 0
+   c = .true.
+   b = maxloc (a, 2, c, 8, .true.)
+ end
+ subroutine f2
+   integer(kind=16) :: a (10, 10, 10)
+   integer(kind=4) :: b (10, 10)
+   logical :: c (10, 10, 10)
+   a = 0
+   c = .true.
+   b = maxloc (a, 2, c, 4, .true.)
+ end
+ subroutine f3
+   integer(kind=16) :: a (10, 10, 10)
+   integer(kind=8) :: b (10, 10)
+   a = 0
+   b = maxloc (a, 2, kind=8, back=.true.)
+ end
+ subroutine f4
+   integer(kind=16) :: a (10, 10, 10)
+   integer(kind=4) :: b (10, 10)
+   a = 0
+   b = maxloc (a, 2, kind=4, back=.true.)
+ end
+ subroutine f5
+   integer(kind=16) :: a (10, 10, 10)
+   integer(kind=8) :: b (10, 10)
+   logical :: c
+   a = 0
+   c = .false.
+   b = maxloc (a, 2, c, 8, .true.)
+ end
+ subroutine f6
+   integer(kind=16) :: a (10, 10, 10)
+   integer(kind=4) :: b (10, 10)
+   logical :: c
+   a = 0
+   c = .false.
+   b = maxloc (a, 2, c, 4, .true.)
+ end
+ subroutine f7
+   integer(kind=8) :: a (10, 10, 10)
+   integer(kind=16) :: b (10, 10)
+   logical :: c (10, 10, 10)
+   a = 0
+   c = .true.
+   b = maxloc (a, 2, c, 16, .true.)
+ end
+ subroutine f8
+   integer(kind=8) :: a (10, 10, 10)
+   integer(kind=16) :: b (10, 10)
+   a = 0
+   b = maxloc (a, 2, kind=16, back=.true.)
+ end
+ subroutine f9
+   integer(kind=8) :: a (10, 10, 10)
+   integer(kind=16) :: b (10, 10)
+   logical :: c
+   a = 0
+   c = .false.
+   b = maxloc (a, 2, c, 16, .true.)
+ end
+ program pr120152
+   call f1
+   call f2
+   call f3
+   call f4
+   call f5
+   call f6
+   call f7
+   call f8
+   call f9
+ end
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120153.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120153.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120153.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120153.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,36 ----
+ ! PR libfortran/120153
+ ! { dg-do run { target fortran_large_int } }
+ ! { dg-additional-options "-funsigned" }
+ 
+ subroutine f1
+   unsigned(kind=16) :: a (10, 10, 10)
+   integer(kind=16) :: b (10, 10)
+   logical :: c (10, 10, 10)
+   a = 0u_16
+   c = .true.
+   b = maxloc (a, 2, c, 16, .true.)
+ end
+ subroutine f2
+   unsigned(kind=16) :: a (10, 10, 10)
+   integer(kind=16) :: b (10, 10)
+   a = 0u_16
+   b = maxloc (a, 2, kind=16, back=.true.)
+ end
+ subroutine f3
+   unsigned(kind=16) :: a (10, 10, 10)
+   integer(kind=8) :: b (10, 10)
+   logical :: c
+   a = 0u_16
+   c = .false.
+   b = maxloc (a, 2, c, 16, .true.)
+ end
+ subroutine f4
+   unsigned(kind=16) :: a (5, 5, 5)
+   call random_number (a)
+ end
+ program pr120153
+   call f1
+   call f2
+   call f3
+   call f4
+ end
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120158.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120158.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/pr120158.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/pr120158.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,15 ----
+ ! PR libfortran/120158
+ ! { dg-do run { target fortran_large_int } }
+ ! { dg-additional-options "-funsigned" }
+ 
+   unsigned(kind=8) :: a(10, 10, 10), b(10, 10)
+   integer(kind=8) :: c(10, 10), d(10, 10)
+   a = 0u_8
+   if (maxval (a) .ne. 0u_8) stop 1
+   b = maxval (a, 1)
+   if (any (b .ne. 0u_8)) stop 2
+   c = maxloc (a, 1)
+   d = maxloc (a, 2, back=.true.)
+   if (any (c .ne. 1)) stop 3
+   if (any (d .ne. 10)) stop 4
+ end
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gfortran.dg/transfer_array_subref.f90 gcc-16-20250511/gcc/testsuite/gfortran.dg/transfer_array_subref.f90
*** gcc-16-20250504/gcc/testsuite/gfortran.dg/transfer_array_subref.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gfortran.dg/transfer_array_subref.f90	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,48 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2 -fdump-tree-optimized" }
+ !
+ ! PR fortran/102891 - passing of inquiry ref of complex array to TRANSFER
+ 
+ program main
+   implicit none
+   integer, parameter :: dp = 8
+ 
+   type complex_wrap1
+      complex(dp) :: z(2)
+   end type complex_wrap1
+ 
+   type complex_wrap2
+      complex(dp), dimension(:), allocatable :: z
+   end type complex_wrap2
+ 
+   type(complex_wrap1) :: x = complex_wrap1([ (1, 2), (3, 4) ])
+   type(complex_wrap2) :: w
+ 
+   w%z = x%z
+ 
+   ! The following statements should get optimized away...
+   if (size (transfer ( x%z%re ,[1.0_dp])) /= 2) error stop 1
+   if (size (transfer ((x%z%re),[1.0_dp])) /= 2) error stop 2
+   if (size (transfer ([x%z%re],[1.0_dp])) /= 2) error stop 3
+   if (size (transfer ( x%z%im ,[1.0_dp])) /= 2) error stop 4
+   if (size (transfer ((x%z%im),[1.0_dp])) /= 2) error stop 5
+   if (size (transfer ([x%z%im],[1.0_dp])) /= 2) error stop 6
+ 
+   ! ... while the following may not:
+   if (any  (transfer ( x%z%re ,[1.0_dp])  /= x%z%re)) stop 7
+   if (any  (transfer ( x%z%im ,[1.0_dp])  /= x%z%im)) stop 8
+ 
+   if (size (transfer ( w%z%re ,[1.0_dp])) /= 2) stop 11
+   if (size (transfer ((w%z%re),[1.0_dp])) /= 2) stop 12
+   if (size (transfer ([w%z%re],[1.0_dp])) /= 2) stop 13
+   if (size (transfer ( w%z%im ,[1.0_dp])) /= 2) stop 14
+   if (size (transfer ((w%z%im),[1.0_dp])) /= 2) stop 15
+   if (size (transfer ([w%z%im],[1.0_dp])) /= 2) stop 16
+ 
+   if (any  (transfer ( w%z%re ,[1.0_dp])  /= x%z%re)) stop 17
+   if (any  (transfer ( w%z%im ,[1.0_dp])  /= x%z%im)) stop 18
+ 
+   deallocate (w%z)
+ end program main
+ 
+ ! { dg-final { scan-tree-dump-not "_gfortran_error_stop_numeric" "optimized" } }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gm2/pim/pass/highbit.mod gcc-16-20250511/gcc/testsuite/gm2/pim/pass/highbit.mod
*** gcc-16-20250504/gcc/testsuite/gm2/pim/pass/highbit.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gm2/pim/pass/highbit.mod	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,13 ----
+ MODULE highbit ;
+ 
+ FROM libc IMPORT printf ;
+ 
+ TYPE
+    set = BITSET ;
+ 
+ CONST
+    HighBit = MAX (set) ;
+ 
+ BEGIN
+    printf ("the MAX (set) = %d\n", HighBit)
+ END highbit.
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gm2/pim/pass/highbit2.mod gcc-16-20250511/gcc/testsuite/gm2/pim/pass/highbit2.mod
*** gcc-16-20250504/gcc/testsuite/gm2/pim/pass/highbit2.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gm2/pim/pass/highbit2.mod	Sun May 11 22:32:38 2025
***************
*** 0 ****
--- 1,13 ----
+ MODULE highbit2 ;
+ 
+ FROM libc IMPORT printf ;
+ 
+ TYPE
+    set = BITSET ;
+ 
+ CONST
+    HighBit = MAX (BITSET) ;
+ 
+ BEGIN
+    printf ("the MAX (BITSET) = %d\n", HighBit)
+ END highbit2.
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gnat.dg/opt106.adb gcc-16-20250511/gcc/testsuite/gnat.dg/opt106.adb
*** gcc-16-20250504/gcc/testsuite/gnat.dg/opt106.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gnat.dg/opt106.adb	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,11 ----
+ -- { dg-do run }
+ -- { dg-options "-O2" }
+ 
+ with Opt106_Pkg1; use Opt106_Pkg1;
+ 
+ procedure Opt106 is
+   Obj : T := (False, 0, 0, 0, True);
+ 
+ begin
+   Proc (Obj, 0, False, True);
+ end;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg1.adb gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg1.adb
*** gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg1.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg1.adb	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,39 ----
+ with Opt106_Pkg2; use Opt106_Pkg2;
+ 
+ package body Opt106_Pkg1 is
+ 
+   procedure Proc (Obj     : in out T;
+                   Data    : Integer;
+                   Last    : Boolean;
+                   Stretch : Boolean) is
+ 
+   begin
+     if Stretch and then (Obj.Delayed /= 0 or else not Obj.Attach_Last) then
+       raise Program_Error;
+     end if;
+ 
+     if Obj.Delayed /= 0 then
+       Stop (Obj.Delayed, Obj.Before, Data, False);
+     end if;
+ 
+     if Last or (Obj.Delayed = 0 and not Stretch) then
+       Stop (Data, Obj.Before, 0, Last);
+ 
+       if Last then
+         Obj.Initialized := False;
+       else
+         Obj.Next := 0;
+         Obj.Before := Data;
+       end if;
+ 
+     else
+       if Stretch then
+         Obj.Next := 1;
+       else
+         Obj.Before := Obj.Delayed;
+       end if;
+       Obj.Delayed := Data;
+     end if;
+   end;
+ 
+ end Opt106_Pkg1;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg1.ads gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg1.ads
*** gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg1.ads	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,16 ----
+ package Opt106_Pkg1 is
+ 
+   type T is record
+     Initialized   : Boolean;
+     Before        : Integer;
+     Delayed       : Integer;
+     Next          : Integer;
+     Attach_Last   : Boolean;
+   end record;
+ 
+   procedure Proc (Obj     : in out T;
+                   Data    : Integer;
+                   Last    : Boolean;
+                   Stretch : Boolean);
+ 
+ end Opt106_Pkg1;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg2.adb gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg2.adb
*** gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg2.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg2.adb	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,11 ----
+ package body Opt106_Pkg2 is
+ 
+   procedure Stop (Delayed : Integer;
+                   Before  : Integer;
+                   After   : Integer;
+                   Last    : Boolean) is
+   begin
+      raise Program_Error;
+   end;
+ 
+ end Opt106_Pkg2;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg2.ads gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg2.ads
*** gcc-16-20250504/gcc/testsuite/gnat.dg/opt106_pkg2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gnat.dg/opt106_pkg2.ads	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,8 ----
+ package Opt106_Pkg2 is
+ 
+   procedure Stop (Delayed : Integer;
+                   Before  : Integer;
+                   After   : Integer;
+                   Last    : Boolean);
+ 
+ end Opt106_Pkg2;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/gnat.dg/specs/finalizable1.ads gcc-16-20250511/gcc/testsuite/gnat.dg/specs/finalizable1.ads
*** gcc-16-20250504/gcc/testsuite/gnat.dg/specs/finalizable1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/gnat.dg/specs/finalizable1.ads	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,11 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatX0" }
+ 
+ package Finalizable1 is
+ 
+   type Root is abstract tagged null record
+     with Finalizable => (Finalize => Finalize);
+ 
+   procedure Finalize (This : in out Root) is abstract;
+ 
+ end Finalizable1;
diff -Nrcpad gcc-16-20250504/gcc/testsuite/lib/gcc-dg.exp gcc-16-20250511/gcc/testsuite/lib/gcc-dg.exp
*** gcc-16-20250504/gcc/testsuite/lib/gcc-dg.exp	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/lib/gcc-dg.exp	Sun May 11 22:32:39 2025
*************** load_lib scanipa.exp
*** 26,31 ****
--- 26,32 ----
  load_lib scanwpaipa.exp
  load_lib scanlang.exp
  load_lib scansarif.exp
+ load_lib scanhtml.exp
  load_lib timeout.exp
  load_lib timeout-dg.exp
  load_lib prune.exp
diff -Nrcpad gcc-16-20250504/gcc/testsuite/lib/htmltest.py gcc-16-20250511/gcc/testsuite/lib/htmltest.py
*** gcc-16-20250504/gcc/testsuite/lib/htmltest.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/lib/htmltest.py	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,9 ----
+ import os
+ import xml.etree.ElementTree as ET
+ 
+ def html_tree_from_env():
+     # return parsed HTML content as an ET from an HTML_PATH file
+     html_filename = os.environ['HTML_PATH']
+     html_filename += '.html'
+     print('html_filename: %r' % html_filename)
+     return ET.parse(html_filename)
diff -Nrcpad gcc-16-20250504/gcc/testsuite/lib/scanhtml.exp gcc-16-20250511/gcc/testsuite/lib/scanhtml.exp
*** gcc-16-20250504/gcc/testsuite/lib/scanhtml.exp	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/lib/scanhtml.exp	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,90 ----
+ # Copyright (C) 2000-2025 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ # 
+ # This program 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/>.
+ 
+ # Various utilities for scanning HTML output, used by gcc-dg.exp and
+ # g++-dg.exp.
+ #
+ # This is largely borrowed from scansarif.exp.
+ 
+ proc html-pytest-format-line { args } {
+     global subdir
+ 
+     set testcase [lindex $args 0]
+     set pytest_script [lindex $args 1]
+     set output_line [lindex $args 2]
+ 
+     set index [string first "::" $output_line]
+     set test_output [string range $output_line [expr $index + 2] [string length $output_line]]
+ 
+     return "$subdir/$testcase ${pytest_script}::${test_output}"
+ }
+ 
+ # Call by dg-final to run a pytest Python script.
+ # We pass filename of a test via HTML_PATH environment variable.
+ 
+ proc run-html-pytest { args } {
+     global srcdir subdir
+     # Extract the test file name from the arguments.
+     set testcase [lindex $args 0]
+ 
+     verbose "Running HTML $testcase in $srcdir/$subdir" 2
+     set testcase [remote_download host $testcase]
+ 
+     set pytest_script [lindex $args 1]
+     if { ![check_effective_target_pytest3] } {
+       unsupported "$pytest_script pytest python3 is missing"
+       return
+     }
+ 
+     setenv HTML_PATH $testcase
+     set libdir "${srcdir}/lib"
+ 
+     # Set/prepend libdir to PYTHONPATH
+     if [info exists ::env(PYTHONPATH)] {
+ 	set old_PYTHONPATH $::env(PYTHONPATH)
+ 	setenv PYTHONPATH "${libdir}:${old_PYTHONPATH}"
+     } else {
+ 	setenv PYTHONPATH "${libdir}"
+     }
+     
+     verbose "PYTHONPATH=[getenv PYTHONPATH]" 2
+ 
+     spawn -noecho python3 -m pytest --color=no -rap -s --tb=no $srcdir/$subdir/$pytest_script
+ 
+     if [info exists old_PYTHONPATH] {
+ 	setenv PYTHONPATH ${old_PYTHONPATH}
+     }
+ 
+     set prefix "\[^\r\n\]*"
+     expect {
+       -re "FAILED($prefix)\[^\r\n\]+\r\n" {
+        set output [html-pytest-format-line $testcase $pytest_script $expect_out(1,string)]
+        fail $output
+        exp_continue
+       }
+       -re "ERROR($prefix)\[^\r\n\]+\r\n" {
+        set output [html-pytest-format-line $testcase $pytest_script $expect_out(1,string)]
+        fail $output
+        exp_continue
+       }
+       -re "PASSED($prefix)\[^\r\n\]+\r\n" {
+        set output [html-pytest-format-line $testcase $pytest_script $expect_out(1,string)]
+        pass $output
+        exp_continue
+       }
+     }
+ }
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/lib/target-supports.exp gcc-16-20250511/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20250504/gcc/testsuite/lib/target-supports.exp	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/lib/target-supports.exp	Sun May 11 22:32:39 2025
*************** proc check_effective_target_sync_int_lon
*** 10145,10150 ****
--- 10145,10151 ----
  	     || ([istarget arc*-*-*] && [check_effective_target_arc_atomic])
  	     || [check_effective_target_mips_llsc]
  	     || [istarget nvptx*-*-*]
+ 	     || ([istarget xtensa*-*-*] && [check_effective_target_xtensa_atomic])
  	 }}]
  }
  
*************** proc check_effective_target_sync_char_sh
*** 10182,10188 ****
  	     || ([istarget riscv*-*-*]
  		 && ([check_effective_target_riscv_zalrsc]
  		     || [check_effective_target_riscv_zabha]))
! 	     || [check_effective_target_mips_llsc] }}]
  }
  
  # Return 1 if thread_fence does not rely on __sync_synchronize
--- 10183,10191 ----
  	     || ([istarget riscv*-*-*]
  		 && ([check_effective_target_riscv_zalrsc]
  		     || [check_effective_target_riscv_zabha]))
! 	     || [check_effective_target_mips_llsc]
! 	     || ([istarget xtensa*-*-*] && [check_effective_target_xtensa_atomic])
! 	 }}]
  }
  
  # Return 1 if thread_fence does not rely on __sync_synchronize
*************** proc check_effective_target_speculation_
*** 14407,14409 ****
--- 14410,14421 ----
  	    }
  	}]
  }
+ 
+ # Return 1 if this is a compiler supporting Xtensa atomic operations
+ proc check_effective_target_xtensa_atomic { } {
+     return [check_no_compiler_messages xtensa_atomic assembly {
+ 	#if __XCHAL_HAVE_S32C1I != 1 && __XCHAL_HAVE_EXCLUSIVE != 1
+ 	#error FOO
+ 	#endif
+     }]
+ }
diff -Nrcpad gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-logical-location-c.py gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-logical-location-c.py
*** gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-logical-location-c.py	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-logical-location-c.py	Sun May 11 22:32:39 2025
*************** def test_sarif_output_with_logical_locat
*** 31,37 ****
--- 31,46 ----
  
      assert len(location['logicalLocations']) == 1
      logical_loc = location['logicalLocations'][0]
+     assert logical_loc['index'] == 0
+     assert logical_loc['fullyQualifiedName'] == 'test_qualified_name'
+ 
+     # Check theRun.logicalLocations
+     assert 'logicalLocations' in run
+     assert len(run['logicalLocations']) == 1
+     logical_loc = run['logicalLocations'][0]
      assert logical_loc['name'] == 'test_short_name'
      assert logical_loc['fullyQualifiedName'] == 'test_qualified_name'
      assert logical_loc['decoratedName'] == 'test_decorated_name'
      assert logical_loc['kind'] == 'function'
+     assert logical_loc['index'] == 0
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-logical-location.c gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-logical-location.c
*** gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-logical-location.c	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-logical-location.c	Sun May 11 22:32:39 2025
*************** PRINT "hello world!";
*** 20,25 ****
--- 20,26 ----
  const int line_num = __LINE__ - 2;
  
  #include <assert.h>
+ #include <string.h>
  
  int
  main ()
*************** main ()
*** 62,67 ****
--- 63,79 ----
    diagnostic_finish (d, "can't find %qs", "foo");
    /* end quoted source */
  
+   /* Verify that the accessors work.  */
+   assert (diagnostic_logical_location_get_kind (logical_loc)
+ 	  == DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION);
+   assert (!diagnostic_logical_location_get_parent (logical_loc));
+   assert (!strcmp (diagnostic_logical_location_get_short_name (logical_loc),
+ 		   "test_short_name"));
+   assert (!strcmp (diagnostic_logical_location_get_fully_qualified_name (logical_loc),
+ 		   "test_qualified_name"));
+   assert (!strcmp (diagnostic_logical_location_get_decorated_name (logical_loc),
+ 		   "test_decorated_name"));
+ 
    /* Verify that creating a diagnostic_logical_location with equal values 
       yields the same instance.  */
    const diagnostic_logical_location *dup
diff -Nrcpad gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-logical-location.cc gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-logical-location.cc
*** gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-logical-location.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-logical-location.cc	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,91 ----
+ /* C++ example of using a logical location.
+ 
+    Intended output is similar to:
+ 
+ In function 'test_qualified_name':
+ PATH/test-error-with-note.cc:17:8: error: can't find 'foo'
+    17 | PRINT "hello world!";
+       |        ^~~~~~~~~~~~
+ 
+    along with the equivalent in SARIF.  */
+ 
+ #include "libgdiagnostics++.h"
+ 
+ /* Placeholder source:
+ _________111111111122
+ 123456789012345678901
+ PRINT "hello world!";
+ */
+ const int line_num = __LINE__ - 2;
+ 
+ #include <assert.h>
+ #include <string.h>
+ 
+ int
+ main ()
+ {
+   libgdiagnostics::manager mgr;
+ 
+   auto file = mgr.new_file (__FILE__, "c");
+ 
+   mgr.add_text_sink (stderr, DIAGNOSTIC_COLORIZE_IF_TTY);
+ 
+   auto loc_start = mgr.new_location_from_file_line_column (file, line_num, 8);
+   auto loc_end = mgr.new_location_from_file_line_column (file, line_num, 19);
+   auto loc_range = mgr.new_location_from_range (loc_start, loc_start, loc_end);
+ 
+   auto err (mgr.begin_diagnostic (DIAGNOSTIC_LEVEL_ERROR));
+   err.set_location (loc_range);
+ 
+   libgdiagnostics::logical_location logical_loc
+     = mgr.new_logical_location (DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION,
+ 				NULL, /* parent */
+ 				"test_short_name",
+ 				"test_qualified_name",
+ 				"test_decorated_name");
+   err.set_logical_location (logical_loc);
+ 
+   err.finish ("can't find %qs", "foo");
+ 
+   /* Verify that the accessors work.  */
+   assert (logical_loc.get_kind ()
+ 	  == DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION);
+   assert (logical_loc.get_parent ().m_inner == nullptr);
+   assert (!strcmp (logical_loc.get_short_name (),
+ 		   "test_short_name"));
+   assert (!strcmp (logical_loc.get_fully_qualified_name (),
+ 		   "test_qualified_name"));
+   assert (!strcmp (logical_loc.get_decorated_name (),
+ 		   "test_decorated_name"));
+ 
+   /* Verify that libgdiagnostic::logical_location instances created with
+      equal values compare as equal.  */
+   libgdiagnostics::logical_location dup
+     = mgr.new_logical_location (DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION,
+ 				NULL, /* parent */
+ 				"test_short_name",
+ 				"test_qualified_name",
+ 				"test_decorated_name");
+   assert (dup == logical_loc); 
+ 
+   /* Verify that libgdiagnostic::logical_location instances created with
+      differing values compare as non-equal.  */
+   libgdiagnostics::logical_location other
+     = mgr.new_logical_location (DIAGNOSTIC_LOGICAL_LOCATION_KIND_FUNCTION,
+ 				NULL, /* parent */
+ 				"something_else",
+ 				NULL, NULL);
+   assert (other != logical_loc); 
+ 
+   return 0;
+ }
+ 
+ /* Check the output from the text sink.  */
+ /* { dg-begin-multiline-output "" }
+ In function 'test_qualified_name':
+    { dg-end-multiline-output "" } */
+ /* { dg-regexp "\[^\n\r\]+test-logical-location.cc:17:8: error: can't find 'foo'" } */
+ /* { dg-begin-multiline-output "" }
+    17 | PRINT "hello world!";
+       |        ^~~~~~~~~~~~
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json-c.py gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json-c.py
*** gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json-c.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json-c.py	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,79 ----
+ from sarif import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ def test_sarif_output_with_logical_location(sarif):
+     schema = sarif['$schema']
+     assert schema == 'https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json'
+ 
+     version = sarif['version']
+     assert version == '2.1.0'
+ 
+     runs = sarif['runs']
+     run = runs[0]
+ 
+     tool = run['tool']
+     assert tool['driver']['name'] == 'test-nested-logical-locations-json.c.exe'
+ 
+     results = run['results']
+     assert len(results) == 2
+ 
+     result = results[0]
+     assert result['ruleId'] == 'warning'
+     assert result['level'] == 'warning'
+     assert result['message']['text'] == "product ID is blank"
+     assert len(result['locations']) == 1
+     location = result['locations'][0]
+     assert len(location['logicalLocations']) == 1
+     logical_loc = location['logicalLocations'][0]
+     assert logical_loc['index'] == 3
+     assert logical_loc['fullyQualifiedName'] == '/orders/0/productIds/1'
+ 
+     result = results[1]
+     assert result['ruleId'] == 'warning'
+     assert result['level'] == 'warning'
+     assert result['message']['text'] == "value is negative"
+     assert len(result['locations']) == 1
+     location = result['locations'][0]
+     assert len(location['logicalLocations']) == 1
+     logical_loc = location['logicalLocations'][0]
+     assert logical_loc['index'] == 4
+     assert logical_loc['fullyQualifiedName'] == '/orders/0/total'
+ 
+     # Check theRun.logicalLocations
+     assert 'logicalLocations' in run
+     assert len(run['logicalLocations']) == 5
+     logical_loc = run['logicalLocations'][0]
+     assert logical_loc['name'] == 'orders'
+     assert logical_loc['fullyQualifiedName'] == '/orders'
+     assert logical_loc['kind'] == 'array'
+     assert logical_loc['index'] == 0
+     logical_loc = run['logicalLocations'][1]
+     assert logical_loc['name'] == '0'
+     assert logical_loc['fullyQualifiedName'] == '/orders/0'
+     assert logical_loc['kind'] == 'object'
+     assert logical_loc['parentIndex'] == 0
+     assert logical_loc['index'] == 1
+     logical_loc = run['logicalLocations'][2]
+     assert logical_loc['name'] == 'productIds'
+     assert logical_loc['fullyQualifiedName'] == '/orders/0/productIds'
+     assert logical_loc['kind'] == 'array'
+     assert logical_loc['parentIndex'] == 1
+     assert logical_loc['index'] == 2
+     logical_loc = run['logicalLocations'][3]
+     assert logical_loc['name'] == '1'
+     assert logical_loc['fullyQualifiedName'] == '/orders/0/productIds/1'
+     assert logical_loc['kind'] == 'value'
+     assert logical_loc['parentIndex'] == 2
+     assert logical_loc['index'] == 3
+     logical_loc = run['logicalLocations'][4]
+     assert logical_loc['name'] == 'total'
+     assert logical_loc['fullyQualifiedName'] == '/orders/0/total'
+     assert logical_loc['kind'] == 'property'
+     assert logical_loc['parentIndex'] == 1
+     assert logical_loc['index'] == 4
+ 
diff -Nrcpad gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json.c gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json.c
*** gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-nested-logical-locations-json.c	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,165 ----
+ /* Example of nested logical locations, based on the JSON example in
+    SARIF v2.1.0, 3.33.7 "kind" property;
+    though see https://github.com/oasis-tcs/sarif-spec/issues/670
+ 
+    Intended output is similar to:
+ 
+ In JSON value '/orders/0/productIds/1':
+ PATH/test-nested-logical-locations-json.c:28:32: warning: product ID is blank
+    28 |       "productIds": [ "A-101", "", "A-223" ],
+       |                                ^~
+ In JSON property '/orders/0/total':
+ PATH/test-nested-logical-locations-json.c:29:16: warning: value is negative
+    29 |       "total": "-3.25"
+       |                ^~~~~~~
+ 
+    along with the equivalent in SARIF, capturing JSON structure
+    as nested logical locations.  */
+ 
+ #include "libgdiagnostics.h"
+ #include "test-helpers.h"
+ 
+ /* Placeholder source:
+ _________1111111111222222222233333333334444444444
+ 1234567890123456789012345678901234567890123456789
+ {
+   "orders": [
+     {
+       "productIds": [ "A-101", "", "A-223" ],
+       "total": "-3.25"
+     }
+   ]
+ }
+ */
+ const int start_line_num = __LINE__ - 9;
+ const int line_num_of_product_ids = start_line_num + 3;
+ const int line_num_of_total = line_num_of_product_ids + 1;
+ 
+ #include <assert.h>
+ 
+ int
+ main ()
+ {
+   begin_test ("test-nested-logical-locations-json.c.exe",
+ 	      "test-nested-logical-locations-json.c.sarif",
+ 	      __FILE__, "c");
+ 
+   /* Create tree of logical locations.  */
+   /* begin quoted source */
+   const diagnostic_logical_location *logical_loc_orders_arr
+     = diagnostic_manager_new_logical_location (diag_mgr,
+ 					       DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY,
+ 					       NULL, /* parent */
+ 					       "orders",
+ 					       "/orders",
+ 					       NULL);
+   const diagnostic_logical_location *logical_loc_order_0
+     = diagnostic_manager_new_logical_location (diag_mgr,
+ 					       DIAGNOSTIC_LOGICAL_LOCATION_KIND_OBJECT,
+ 					       logical_loc_orders_arr, /* parent */
+ 					       "0",
+ 					       "/orders/0",
+ 					       NULL);
+   const diagnostic_logical_location *logical_loc_product_ids
+     = diagnostic_manager_new_logical_location (diag_mgr,
+ 					       DIAGNOSTIC_LOGICAL_LOCATION_KIND_ARRAY,
+ 					       logical_loc_order_0, /* parent */
+ 					       "productIds",
+ 					       "/orders/0/productIds",
+ 					       NULL);
+   const diagnostic_logical_location *logical_loc_element_1
+     = diagnostic_manager_new_logical_location (diag_mgr,
+ 					       DIAGNOSTIC_LOGICAL_LOCATION_KIND_VALUE,
+ 					       logical_loc_product_ids, /* parent */
+ 					       "1",
+ 					       "/orders/0/productIds/1",
+ 					       NULL);
+   const diagnostic_logical_location *logical_loc_total
+     = diagnostic_manager_new_logical_location (diag_mgr,
+ 					       DIAGNOSTIC_LOGICAL_LOCATION_KIND_PROPERTY,
+ 					       logical_loc_order_0, /* parent */
+ 					       "total",
+ 					       "/orders/0/total",
+ 					       NULL);
+   /* end quoted source */
+ 
+   {
+     const int line_num = line_num_of_product_ids;
+     const diagnostic_physical_location *loc_start
+       = diagnostic_manager_new_location_from_file_line_column (diag_mgr,
+ 							       main_file,
+ 							       line_num,
+ 							       32);
+     const diagnostic_physical_location *loc_end
+       = diagnostic_manager_new_location_from_file_line_column (diag_mgr,
+ 							       main_file,
+ 							       line_num,
+ 							       33);
+     const diagnostic_physical_location *loc_range
+       = diagnostic_manager_new_location_from_range (diag_mgr,
+ 						    loc_start,
+ 						    loc_start,
+ 						    loc_end);
+ 
+     diagnostic *d = diagnostic_begin (diag_mgr,
+ 				      DIAGNOSTIC_LEVEL_WARNING);
+     diagnostic_set_location (d, loc_range);
+ 
+     diagnostic_set_logical_location (d, logical_loc_element_1);
+ 
+     diagnostic_finish (d, "product ID is blank");
+   }
+   {
+     const int line_num = line_num_of_total;
+     const diagnostic_physical_location *loc_start
+       = diagnostic_manager_new_location_from_file_line_column (diag_mgr,
+ 							       main_file,
+ 							       line_num,
+ 							       16);
+     const diagnostic_physical_location *loc_end
+       = diagnostic_manager_new_location_from_file_line_column (diag_mgr,
+ 							       main_file,
+ 							       line_num,
+ 							       22);
+     const diagnostic_physical_location *loc_range
+       = diagnostic_manager_new_location_from_range (diag_mgr,
+ 						    loc_start,
+ 						    loc_start,
+ 						    loc_end);
+ 
+     diagnostic *d = diagnostic_begin (diag_mgr,
+ 				      DIAGNOSTIC_LEVEL_WARNING);
+     diagnostic_set_location (d, loc_range);
+ 
+     diagnostic_set_logical_location (d, logical_loc_total);
+ 
+     diagnostic_finish (d, "value is negative");
+   }
+ 
+   return end_test ();
+ }
+ 
+ /* Check the output from the text sink.  */
+ /* { dg-begin-multiline-output "" }
+ In JSON value '/orders/0/productIds/1':
+    { dg-end-multiline-output "" } */
+ /* { dg-regexp "\[^\n\r\]+test-nested-logical-locations-json.c:28:32: warning: product ID is blank" } */
+ /* { dg-begin-multiline-output "" }
+    28 |       "productIds": [ "A-101", "", "A-223" ],
+       |                                ^~
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
+ In JSON property '/orders/0/total':
+    { dg-end-multiline-output "" } */
+ /* { dg-regexp "\[^\n\r\]+test-nested-logical-locations-json.c:29:16: warning: value is negative" } */
+ /* { dg-begin-multiline-output "" }
+    29 |       "total": "-3.25"
+       |                ^~~~~~~
+    { dg-end-multiline-output "" } */
+ 
+ /* Verify that some JSON was written to a file with the expected name:
+    { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest test-nested-logical-locations-json.c "test-nested-logical-locations-json-c.py" } } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py
*** gcc-16-20250504/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py	Sun May 11 22:32:39 2025
*************** def test_sarif_output_for_warning_with_p
*** 51,60 ****
  
      assert len(location['logicalLocations']) == 1
      logical_loc = location['logicalLocations'][0]
!     assert logical_loc['name'] == 'make_a_list_of_random_ints_badly'
      assert logical_loc['fullyQualifiedName'] == 'make_a_list_of_random_ints_badly'
-     assert logical_loc['decoratedName'] == 'make_a_list_of_random_ints_badly'
-     assert logical_loc['kind'] == 'function'
  
      assert len(result['codeFlows']) == 1
      assert len(result['codeFlows'][0]['threadFlows']) == 1
--- 51,58 ----
  
      assert len(location['logicalLocations']) == 1
      logical_loc = location['logicalLocations'][0]
!     assert logical_loc['index'] == 0
      assert logical_loc['fullyQualifiedName'] == 'make_a_list_of_random_ints_badly'
  
      assert len(result['codeFlows']) == 1
      assert len(result['codeFlows'][0]['threadFlows']) == 1
*************** def test_sarif_output_for_warning_with_p
*** 106,108 ****
--- 104,116 ----
          == "when calling 'PyList_Append', passing NULL from (1) as argument 1"
      assert tfl_2['nestingLevel'] == 0
      assert tfl_2['executionOrder'] == 3
+ 
+     # Check theRun.logicalLocations
+     assert 'logicalLocations' in run
+     assert len(run['logicalLocations']) == 1
+     logical_loc = run['logicalLocations'][0]
+     assert logical_loc['name'] == 'make_a_list_of_random_ints_badly'
+     assert logical_loc['fullyQualifiedName'] == 'make_a_list_of_random_ints_badly'
+     assert logical_loc['decoratedName'] == 'make_a_list_of_random_ints_badly'
+     assert logical_loc['kind'] == 'function'
+     assert logical_loc['index'] == 0
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.1-not-an-object.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.1-not-an-object.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.1-not-an-object.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.1-not-an-object.sarif	Sun May 11 22:32:39 2025
***************
*** 1,6 ****
--- 1,9 ----
  [ null ] // { dg-error "expected a sarifLog object as the top-level value \\\[SARIF v2.1.0 §3.1\\\]" }
  
  /* { dg-begin-multiline-output "" }
+ In JSON array '':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      1 | [ null ]
        | ^~~~~~~~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-missing-arguments-for-placeholders.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-missing-arguments-for-placeholders.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-missing-arguments-for-placeholders.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-missing-arguments-for-placeholders.sarif	Sun May 11 22:32:39 2025
***************
*** 9,14 ****
--- 9,17 ----
  }
  
  /* { dg-begin-multiline-output "" }
+ In JSON object '/runs/0/results/0/message':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      6 |       { "message": { "text" : "the {0} {1} fox jumps over the {2} dog" } }
        |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     { dg-end-multiline-output "" }  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-not-enough-arguments-for-placeholders.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-not-enough-arguments-for-placeholders.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-not-enough-arguments-for-placeholders.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.11-not-enough-arguments-for-placeholders.sarif	Sun May 11 22:32:39 2025
***************
*** 9,14 ****
--- 9,17 ----
  }
  
  /* { dg-begin-multiline-output "" }
+ In JSON object '/runs/0/results/0/message':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      6 |       { "message": { "text" : "the {0} {1} fox jumps over the {2} dog", "arguments": ["quick", "brown"] } }
        |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     { dg-end-multiline-output "" }  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.5-unescaped-braces.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.5-unescaped-braces.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.5-unescaped-braces.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.11.5-unescaped-braces.sarif	Sun May 11 22:32:39 2025
***************
*** 10,15 ****
--- 10,18 ----
  }
  
  /* { dg-begin-multiline-output "" }
+ In JSON property '/runs/0/results/0/message/text':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      6 |       { "message": { "text" : "before {} after" },
        |                               ^~~~~~~~~~~~~~~~~
     { dg-end-multiline-output ""  }  */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-no-version.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-no-version.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-no-version.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-no-version.sarif	Sun May 11 22:32:39 2025
***************
*** 1,6 ****
--- 1,9 ----
  { } // { dg-error "expected sarifLog object to have a 'version' property \\\[SARIF v2.1.0 §3.13.2\\\]" }
  
  /* { dg-begin-multiline-output "" }
+ In JSON object '':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      1 | { }
        | ^~~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-version-not-a-string.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-version-not-a-string.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-version-not-a-string.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.2-version-not-a-string.sarif	Sun May 11 22:32:39 2025
***************
*** 1,6 ****
--- 1,9 ----
  { "version" : 42 } // { dg-error "15: expected sarifLog.version to be a JSON string; got JSON number \\\[SARIF v2.1.0 §3.13.2\\\]" }
  
  /* { dg-begin-multiline-output "" }
+ In JSON property '/version':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      1 | { "version" : 42 }
        |               ^~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-bad-runs.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-bad-runs.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-bad-runs.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-bad-runs.sarif	Sun May 11 22:32:39 2025
***************
*** 2,7 ****
--- 2,10 ----
    "runs": 42 } // { dg-error "expected sarifLog.runs to be 'null' or an array \\\[SARIF v2.1.0 §3.13.4\\\]" }
  
  /* { dg-begin-multiline-output "" }
+ In JSON property '/runs':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      2 |   "runs": 42 }
        |           ^~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-no-runs.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-no-runs.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-no-runs.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-no-runs.sarif	Sun May 11 22:32:39 2025
***************
*** 1,6 ****
--- 1,9 ----
  { "version": "2.1.0" } // { dg-error "expected sarifLog object to have a 'runs' property \\\[SARIF v2.1.0 §3.13.4\\\]" }
  
  /* { dg-begin-multiline-output "" }
+ In JSON object '':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      1 | { "version": "2.1.0" }
        | ^~~~~~~~~~~~~~~~~~~~~~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-non-object-in-runs.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-non-object-in-runs.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-non-object-in-runs.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.13.4-non-object-in-runs.sarif	Sun May 11 22:32:39 2025
***************
*** 2,7 ****
--- 2,10 ----
    "runs" : [42] } // { dg-error "expected element of sarifLog.runs array to be an object \\\[SARIF v2.1.0 §3.13.4\\\]" }
  
  /* { dg-begin-multiline-output "" }
+ In JSON property '/runs/0':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
      2 |   "runs" : [42] }
        |             ^~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.27.10-bad-level.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.27.10-bad-level.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.27.10-bad-level.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.27.10-bad-level.sarif	Sun May 11 22:32:39 2025
***************
*** 20,25 ****
--- 20,28 ----
  }
  
  /* { dg-begin-multiline-output "" }
+ In JSON property '/runs/0/results/0/level':
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
     12 |           "level": "mostly harmless",
        |                    ^~~~~~~~~~~~~~~~~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.33.3-index-out-of-range.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.33.3-index-out-of-range.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.33.3-index-out-of-range.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.33.3-index-out-of-range.sarif	Sun May 11 22:32:39 2025
***************
*** 27,32 ****
--- 27,35 ----
  }
  
  /* { dg-begin-multiline-output "" }
+ In JSON property '/runs/0/results/0/locations/0/logicalLocations/0/index'
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
     17 |                                     "index": 42
        |                                              ^~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif	Sun May 11 22:32:39 2025
***************
*** 20,25 ****
--- 20,28 ----
  }
  
  /* { dg-begin-multiline-output "" }
+ In JSON property '/runs/0/results/0/level'
+    { dg-end-multiline-output "" } */
+ /* { dg-begin-multiline-output "" }
     12 |           "level": "none",
        |                    ^~~~~~
     { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,83 ----
+ /* Adapted from the JSON example in SARIF v2.1.0, 3.33.7 "kind" property;
+    see https://github.com/oasis-tcs/sarif-spec/issues/670  */
+ {
+     "version": "2.1.0",
+     "runs": [
+ 	{
+ 	    "tool": {
+ 		"driver": {
+ 		    "name": "example JSON scanner"
+ 		}
+ 	    },
+ 	    "results": [
+ 		{
+ 		    "message": {"text": "product ID is blank"},
+ 		    "locations": [
+ 			{
+ 			    "logicalLocations": [
+ 				{
+ 				    "fullyQualifiedName": "/orders/0/productIds/1",
+ 				    "index": 3
+ 				}
+ 			    ]
+ 			}
+ 		    ]
+ 		},
+ 		{
+ 		    "message": {"text": "value is negative"},
+ 		    "locations": [
+ 			{
+ 			    "logicalLocations": [
+ 				{
+ 				    "fullyQualifiedName": "/orders/0/total",
+ 				    "index": 4
+ 				}
+ 			    ]
+ 			}
+ 		    ]
+ 		}
+ 	    ],
+ 	    "logicalLocations": [
+ 		{
+ 		    "name": "orders",
+ 		    "fullyQualifiedName": "/orders",
+ 		    "kind": "array"
+ 		},
+ 		{
+ 		    "name": "0",
+ 		    "fullyQualifiedName": "/orders/0",
+ 		    "kind": "object",
+ 		    "parentIndex": 0
+ 		},
+ 		{
+ 		    "name": "productIds",
+ 		    "fullyQualifiedName": "/orders/0/productIds",
+ 		    "kind": "array",
+ 		    "parentIndex": 1
+ 		},
+ 		{
+ 		    "name": "1",
+ 		    "fullyQualifiedName": "/orders/0/productIds/1",
+ 		    "kind": "value",
+ 		    "parentIndex": 2
+ 		},
+ 		{
+ 		    "name": "total",
+ 		    "fullyQualifiedName": "/orders/0/total",
+ 		    "kind": "property",
+ 		    "parentIndex": 1
+ 		}
+ 	    ]
+ 	}
+     ]
+ }
+ 
+ /* { dg-begin-multiline-output "" }
+ In JSON value '/orders/0/productIds/1':
+ example JSON scanner: warning: product ID is blank
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+ In JSON property '/orders/0/total':
+ example JSON scanner: warning: value is negative
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif
*** gcc-16-20250504/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif	Sun May 11 22:32:39 2025
***************
*** 0 ****
--- 1,77 ----
+ /* Adapted from the XML example in SARIF v2.1.0, 3.33.7 "kind" property;
+    see also https://github.com/oasis-tcs/sarif-spec/issues/669  */
+ {
+     "version": "2.1.0",
+     "runs": [
+ 	{
+ 	    "tool": {
+ 		"driver": {
+ 		    "name": "example XML scanner"
+ 		}
+ 	    },
+ 	    "results": [
+ 		{
+ 		    "message": {"text": "empty value"},
+ 		    "locations": [
+ 			{
+ 			    "logicalLocations": [
+ 				{
+ 				    "fullyQualifiedName": "/orders/order[1]/@number",
+ 				    "index": 2
+ 				}
+ 			    ]
+ 			}
+ 		    ]
+ 		},
+ 		{
+ 		    "message": {"text": "total is negative"},
+ 		    "locations": [
+ 			{
+ 			    "logicalLocations": [
+ 				{
+ 				    "fullyQualifiedName": "/orders/order[1]/total/text()",
+ 				    "index": 3
+ 				}
+ 			    ]
+ 			}
+ 		    ]
+ 		}
+ 	    ],
+ 	    "logicalLocations": [
+ 		{
+ 		    "name": "orders",
+ 		    "fullyQualifiedName": "/orders",
+ 		    "kind": "element"
+ 		},
+ 		{
+ 		    "name": "order[1]",
+ 		    "fullyQualifiedName": "/orders/order[1]",
+ 		    "kind": "element",
+ 		    "parentIndex": 0
+ 		},
+ 		{
+ 		    "name": "number",
+ 		    "fullyQualifiedName": "/orders/order[1]/@number",
+ 		    "kind": "attribute",
+ 		    "parentIndex": 1
+ 		},
+ 		{
+ 		    "name": "text",
+ 		    "fullyQualifiedName": "/orders/order[1]/total/text()",
+ 		    "kind": "text",
+ 		    "parentIndex": 1
+ 		}
+ 	    ]
+ 	}
+     ]
+ }
+ 
+ /* { dg-begin-multiline-output "" }
+ In attribute '/orders/order[1]/@number':
+ example XML scanner: warning: empty value
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+ In text '/orders/order[1]/total/text()':
+ example XML scanner: warning: total is negative
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250504/gcc/tree-diagnostic-client-data-hooks.cc gcc-16-20250511/gcc/tree-diagnostic-client-data-hooks.cc
*** gcc-16-20250504/gcc/tree-diagnostic-client-data-hooks.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-diagnostic-client-data-hooks.cc	Sun May 11 22:32:39 2025
*************** public:
*** 123,134 ****
      return &m_version_info;
    }
  
!   const logical_location *get_current_logical_location () const final override
    {
!     if (current_function_decl)
!       return &m_current_fndecl_logical_loc;
!     else
!       return NULL;
    }
  
    const char *
--- 123,136 ----
      return &m_version_info;
    }
  
!   const logical_location_manager *get_logical_location_manager () const final override
    {
!     return &m_logical_location_manager;
!   }
! 
!   logical_location_manager::key get_current_logical_location () const final override
!   {
!     return m_logical_location_manager.key_from_tree (current_function_decl);
    }
  
    const char *
*************** public:
*** 159,165 ****
  
  private:
    compiler_version_info m_version_info;
!   current_fndecl_logical_location m_current_fndecl_logical_loc;
  };
  
  /* Create a compiler_data_hooks (so that the class can be local
--- 161,167 ----
  
  private:
    compiler_version_info m_version_info;
!   tree_logical_location_manager m_logical_location_manager;
  };
  
  /* Create a compiler_data_hooks (so that the class can be local
diff -Nrcpad gcc-16-20250504/gcc/tree-if-conv.cc gcc-16-20250511/gcc/tree-if-conv.cc
*** gcc-16-20250504/gcc/tree-if-conv.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-if-conv.cc	Sun May 11 22:32:39 2025
*************** if_convertible_gimple_assign_stmt_p (gim
*** 1066,1076 ****
  	fprintf (dump_file, "tree could trap...\n");
        return false;
      }
!   else if ((INTEGRAL_TYPE_P (TREE_TYPE (lhs))
! 	    || POINTER_TYPE_P (TREE_TYPE (lhs)))
! 	   && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (lhs))
! 	   && arith_code_with_undefined_signed_overflow
! 				(gimple_assign_rhs_code (stmt)))
      /* We have to rewrite stmts with undefined overflow.  */
      need_to_rewrite_undefined = true;
  
--- 1066,1072 ----
  	fprintf (dump_file, "tree could trap...\n");
        return false;
      }
!   else if (gimple_needing_rewrite_undefined (stmt))
      /* We have to rewrite stmts with undefined overflow.  */
      need_to_rewrite_undefined = true;
  
*************** predicate_statements (loop_p loop)
*** 2830,2836 ****
        for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);)
  	{
  	  gassign *stmt = dyn_cast <gassign *> (gsi_stmt (gsi));
- 	  tree lhs;
  	  if (!stmt)
  	    ;
  	  else if (is_false_predicate (cond)
--- 2826,2831 ----
*************** predicate_statements (loop_p loop)
*** 2886,2898 ****
  
  	      gsi_replace (&gsi, new_stmt, true);
  	    }
! 	  else if (((lhs = gimple_assign_lhs (stmt)), true)
! 		   && (INTEGRAL_TYPE_P (TREE_TYPE (lhs))
! 		       || POINTER_TYPE_P (TREE_TYPE (lhs)))
! 		   && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (lhs))
! 		   && arith_code_with_undefined_signed_overflow
! 						(gimple_assign_rhs_code (stmt)))
! 	    rewrite_to_defined_overflow (&gsi);
  	  else if (gimple_vdef (stmt))
  	    {
  	      tree lhs = gimple_assign_lhs (stmt);
--- 2881,2888 ----
  
  	      gsi_replace (&gsi, new_stmt, true);
  	    }
! 	  else if (gimple_needing_rewrite_undefined (stmt))
! 	    rewrite_to_defined_unconditional (&gsi);
  	  else if (gimple_vdef (stmt))
  	    {
  	      tree lhs = gimple_assign_lhs (stmt);
*************** predicate_statements (loop_p loop)
*** 2946,2952 ****
  	      gsi_replace (&gsi, new_call, true);
  	    }
  
! 	  lhs = gimple_get_lhs (gsi_stmt (gsi));
  	  if (lhs && TREE_CODE (lhs) == SSA_NAME)
  	    ssa_names.add (lhs);
  	  gsi_next (&gsi);
--- 2936,2942 ----
  	      gsi_replace (&gsi, new_call, true);
  	    }
  
! 	  tree lhs = gimple_get_lhs (gsi_stmt (gsi));
  	  if (lhs && TREE_CODE (lhs) == SSA_NAME)
  	    ssa_names.add (lhs);
  	  gsi_next (&gsi);
diff -Nrcpad gcc-16-20250504/gcc/tree-logical-location.cc gcc-16-20250511/gcc/tree-logical-location.cc
*** gcc-16-20250504/gcc/tree-logical-location.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-logical-location.cc	Sun May 11 22:32:39 2025
***************
*** 1,4 ****
! /* Subclasses of logical_location with knowledge of "tree".
     Copyright (C) 2022-2025 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
--- 1,4 ----
! /* Subclass of logical_location_manager with knowledge of "tree".
     Copyright (C) 2022-2025 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
*************** along with GCC; see the file COPYING3.
*** 27,76 ****
  #include "langhooks.h"
  #include "intl.h"
  
! /* class compiler_logical_location : public logical_location.  */
  
! /* Get a string for DECL suitable for use by the SARIF logicalLocation
!    "name" property (SARIF v2.1.0 section 3.33.4).  */
  
  const char *
! compiler_logical_location::get_short_name_for_tree (tree decl)
  {
!   gcc_assert (decl);
!   return identifier_to_locale (lang_hooks.decl_printable_name (decl, 0));
! }
  
! /* Get a string for DECL suitable for use by the SARIF logicalLocation
!    "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5).  */
  
  const char *
! compiler_logical_location::get_name_with_scope_for_tree (tree decl)
  {
!   gcc_assert (decl);
!   return identifier_to_locale (lang_hooks.decl_printable_name (decl, 1));
! }
  
! /* Get a string for DECL suitable for use by the SARIF logicalLocation
!    "decoratedName" property (SARIF v2.1.0 section 3.33.6).  */
  
  const char *
! compiler_logical_location::get_internal_name_for_tree (tree decl)
  {
!   gcc_assert (decl);
!   if (HAS_DECL_ASSEMBLER_NAME_P (decl))
!     if (tree id = DECL_ASSEMBLER_NAME (decl))
!       return IDENTIFIER_POINTER (id);
    return NULL;
  }
  
- /* Get what kind of SARIF logicalLocation DECL is (if any).  */
- 
  enum logical_location_kind
! compiler_logical_location::get_kind_for_tree (tree decl)
  {
!   if (!decl)
!     return LOGICAL_LOCATION_KIND_UNKNOWN;
  
!   switch (TREE_CODE (decl))
      {
      default:
        return LOGICAL_LOCATION_KIND_UNKNOWN;
--- 27,93 ----
  #include "langhooks.h"
  #include "intl.h"
  
! static void
! assert_valid_tree (const_tree node)
! {
!   gcc_assert (node);
!   gcc_assert (DECL_P (node) || TYPE_P (node));
!   gcc_assert (TREE_CODE (node) != TRANSLATION_UNIT_DECL);
! }
  
! /* class tree_logical_location_manager : public logical_location_manager.  */
  
  const char *
! tree_logical_location_manager::get_short_name (key k) const
  {
!   tree node = tree_from_key (k);
!   assert_valid_tree (node);
  
!   if (DECL_P (node))
!     return identifier_to_locale (lang_hooks.decl_printable_name (node, 0));
!   if (TYPE_P (node))
!     return IDENTIFIER_POINTER (TYPE_IDENTIFIER (node));
!   return nullptr;
! }
  
  const char *
! tree_logical_location_manager::get_name_with_scope (key k) const
  {
!   tree node = tree_from_key (k);
!   assert_valid_tree (node);
  
!   if (DECL_P (node))
!     return identifier_to_locale (lang_hooks.decl_printable_name (node, 1));
!   if (TYPE_P (node))
!     return nullptr;
!   return nullptr;
! }
  
  const char *
! tree_logical_location_manager::get_internal_name (key k) const
  {
!   tree node = tree_from_key (k);
!   assert_valid_tree (node);
! 
!   if (DECL_P (node))
!     {
!       if (HAS_DECL_ASSEMBLER_NAME_P (node)
! 	  && TREE_CODE (node) != NAMESPACE_DECL) // FIXME
! 	if (tree id = DECL_ASSEMBLER_NAME (node))
! 	  return IDENTIFIER_POINTER (id);
!     }
!   else if (TYPE_P (node))
!     return nullptr;
    return NULL;
  }
  
  enum logical_location_kind
! tree_logical_location_manager::get_kind (key k) const
  {
!   tree node = tree_from_key (k);
!   assert_valid_tree (node);
  
!   switch (TREE_CODE (node))
      {
      default:
        return LOGICAL_LOCATION_KIND_UNKNOWN;
*************** compiler_logical_location::get_kind_for_
*** 80,173 ****
        return LOGICAL_LOCATION_KIND_PARAMETER;
      case VAR_DECL:
        return LOGICAL_LOCATION_KIND_VARIABLE;
!     }
! }
! 
! label_text
! compiler_logical_location::get_name_for_tree_for_path_output (tree decl)
! {
!   gcc_assert (decl);
!   const char *n = DECL_NAME (decl)
!     ? identifier_to_locale (lang_hooks.decl_printable_name (decl, 2))
!     : _("<anonymous>");
!   return label_text::borrow (n);
! }
! 
! /* class tree_logical_location : public compiler_logical_location.  */
! 
! /* Implementation of the logical_location vfuncs, using m_decl.  */
! 
! const char *
! tree_logical_location::get_short_name () const
! {
!   gcc_assert (m_decl);
!   return get_short_name_for_tree (m_decl);
! }
! 
! const char *
! tree_logical_location::get_name_with_scope () const
! {
!   gcc_assert (m_decl);
!   return get_name_with_scope_for_tree (m_decl);
! }
! 
! const char *
! tree_logical_location::get_internal_name () const
! {
!   gcc_assert (m_decl);
!   return get_internal_name_for_tree (m_decl);
! }
  
! enum logical_location_kind
! tree_logical_location::get_kind () const
! {
!   gcc_assert (m_decl);
!   return get_kind_for_tree (m_decl);
  }
  
  label_text
! tree_logical_location::get_name_for_path_output () const
! {
!   gcc_assert (m_decl);
!   return get_name_for_tree_for_path_output (m_decl);
! }
! 
! /* class current_fndecl_logical_location : public compiler_logical_location.  */
! 
! /* Implementation of the logical_location vfuncs, using
!    current_function_decl.  */
! 
! const char *
! current_fndecl_logical_location::get_short_name () const
! {
!   gcc_assert (current_function_decl);
!   return get_short_name_for_tree (current_function_decl);
! }
! 
! const char *
! current_fndecl_logical_location::get_name_with_scope () const
  {
!   gcc_assert (current_function_decl);
!   return get_name_with_scope_for_tree (current_function_decl);
! }
  
! const char *
! current_fndecl_logical_location::get_internal_name () const
! {
!   gcc_assert (current_function_decl);
!   return get_internal_name_for_tree (current_function_decl);
  }
  
! enum logical_location_kind
! current_fndecl_logical_location::get_kind () const
  {
!   gcc_assert (current_function_decl);
!   return get_kind_for_tree (current_function_decl);
! }
  
! label_text
! current_fndecl_logical_location::get_name_for_path_output () const
! {
!   gcc_assert (current_function_decl);
!   return get_name_for_tree_for_path_output (current_function_decl);
  }
--- 97,147 ----
        return LOGICAL_LOCATION_KIND_PARAMETER;
      case VAR_DECL:
        return LOGICAL_LOCATION_KIND_VARIABLE;
!     case NAMESPACE_DECL:
!       return LOGICAL_LOCATION_KIND_NAMESPACE;
  
!     case RECORD_TYPE:
!       return LOGICAL_LOCATION_KIND_TYPE;
!     }
  }
  
  label_text
! tree_logical_location_manager::get_name_for_path_output (key k) const
  {
!   tree node = tree_from_key (k);
!   assert_valid_tree (node);
  
!   if (DECL_P (node))
!     {
!       const char *n = DECL_NAME (node)
! 	? identifier_to_locale (lang_hooks.decl_printable_name (node, 2))
! 	: _("<anonymous>");
!       return label_text::borrow (n);
!     }
!   else if (TYPE_P (node))
!     return label_text ();
!   return label_text ();
  }
  
! logical_location
! tree_logical_location_manager::get_parent (key k) const
  {
!   tree node = tree_from_key (k);
!   assert_valid_tree (node);
  
!   if (DECL_P (node))
!     {
!       if (!DECL_CONTEXT (node))
! 	return logical_location ();
!       if (TREE_CODE (DECL_CONTEXT (node)) == TRANSLATION_UNIT_DECL)
! 	return logical_location ();
!       return key_from_tree (DECL_CONTEXT (node));
!     }
!   else if (TYPE_P (node))
!     {
!       if (!TYPE_CONTEXT (node))
! 	return logical_location ();
!       return key_from_tree (TYPE_CONTEXT (node));
!     }
!   return logical_location ();
  }
diff -Nrcpad gcc-16-20250504/gcc/tree-logical-location.h gcc-16-20250511/gcc/tree-logical-location.h
*** gcc-16-20250504/gcc/tree-logical-location.h	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-logical-location.h	Sun May 11 22:32:39 2025
***************
*** 1,4 ****
! /* Subclasses of logical_location with knowledge of "tree".
     Copyright (C) 2022-2025 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
--- 1,4 ----
! /* Subclass of logical_location_manager with knowledge of "tree".
     Copyright (C) 2022-2025 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
*************** along with GCC; see the file COPYING3.
*** 23,70 ****
  
  #include "logical-location.h"
  
! /* Abstract subclass of logical_location, with knowledge of "tree", but
!    for no specific tree.  */
! 
! class compiler_logical_location : public logical_location
! {
!  protected:
!   static const char *get_short_name_for_tree (tree);
!   static const char *get_name_with_scope_for_tree (tree);
!   static const char *get_internal_name_for_tree (tree);
!   static enum logical_location_kind get_kind_for_tree (tree);
!   static label_text get_name_for_tree_for_path_output (tree);
! };
! 
! /* Concrete subclass of logical_location, with reference to a specific
!    tree.  */
! 
! class tree_logical_location : public compiler_logical_location
  {
  public:
!   tree_logical_location (tree decl) : m_decl (decl) {}
! 
!   const char *get_short_name () const final override;
!   const char *get_name_with_scope () const final override;
!   const char *get_internal_name () const final override;
!   enum logical_location_kind get_kind () const final override;
!   label_text get_name_for_path_output () const final override;
! 
! private:
!   tree m_decl;
! };
! 
! /* Concrete subclass of logical_location, with reference to
!    current_function_decl.  */
  
! class current_fndecl_logical_location : public compiler_logical_location
! {
! public:
!   const char *get_short_name () const final override;
!   const char *get_name_with_scope () const final override;
!   const char *get_internal_name () const final override;
!   enum logical_location_kind get_kind () const final override;
!   label_text get_name_for_path_output () const final override;
  };
  
  #endif /* GCC_TREE_LOGICAL_LOCATION_H.  */
--- 23,50 ----
  
  #include "logical-location.h"
  
! /* A subclass of logical_location_manager in which the keys are
!    "tree".
!    Note that there is no integration with the garbage collector,
!    and so logical_location instances can only be short-lived.  */
! class tree_logical_location_manager : public logical_location_manager
  {
  public:
!   const char *get_short_name (key) const final override;
!   const char *get_name_with_scope (key) const final override;
!   const char *get_internal_name (key) const final override;
!   enum logical_location_kind get_kind (key) const final override;
!   label_text get_name_for_path_output (key) const final override;
!   key get_parent (key) const final override;
  
!   static tree tree_from_key (logical_location k)
!   {
!     return const_cast<tree> (k.cast_to<const_tree> ());
!   }
!   static logical_location key_from_tree (tree node)
!   {
!     return logical_location::from_ptr (node);
!   }
  };
  
  #endif /* GCC_TREE_LOGICAL_LOCATION_H.  */
diff -Nrcpad gcc-16-20250504/gcc/tree-scalar-evolution.cc gcc-16-20250511/gcc/tree-scalar-evolution.cc
*** gcc-16-20250504/gcc/tree-scalar-evolution.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-scalar-evolution.cc	Sun May 11 22:32:39 2025
*************** final_value_replacement_loop (class loop
*** 3932,3942 ****
  	  gsi2 = gsi_start (stmts);
  	  while (!gsi_end_p (gsi2))
  	    {
! 	      gimple *stmt = gsi_stmt (gsi2);
! 	      if (is_gimple_assign (stmt)
! 		  && arith_code_with_undefined_signed_overflow
! 		       (gimple_assign_rhs_code (stmt)))
! 		rewrite_to_defined_overflow (&gsi2);
  	      gsi_next (&gsi2);
  	    }
  	}
--- 3932,3939 ----
  	  gsi2 = gsi_start (stmts);
  	  while (!gsi_end_p (gsi2))
  	    {
! 	      if (gimple_needing_rewrite_undefined (gsi_stmt (gsi2)))
! 		rewrite_to_defined_unconditional (&gsi2);
  	      gsi_next (&gsi2);
  	    }
  	}
diff -Nrcpad gcc-16-20250504/gcc/tree-ssa-ifcombine.cc gcc-16-20250511/gcc/tree-ssa-ifcombine.cc
*** gcc-16-20250504/gcc/tree-ssa-ifcombine.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-ssa-ifcombine.cc	Sun May 11 22:32:39 2025
*************** ifcombine_mark_ssa_name_walk (tree *t, i
*** 514,528 ****
  static inline void
  ifcombine_rewrite_to_defined_overflow (gimple_stmt_iterator gsi)
  {
!   gassign *ass = dyn_cast <gassign *> (gsi_stmt (gsi));
!   if (!ass)
      return;
!   tree lhs = gimple_assign_lhs (ass);
!   if ((INTEGRAL_TYPE_P (TREE_TYPE (lhs))
!        || POINTER_TYPE_P (TREE_TYPE (lhs)))
!       && arith_code_with_undefined_signed_overflow
!       (gimple_assign_rhs_code (ass)))
!     rewrite_to_defined_overflow (&gsi);
  }
  
  
--- 514,522 ----
  static inline void
  ifcombine_rewrite_to_defined_overflow (gimple_stmt_iterator gsi)
  {
!   if (!gimple_needing_rewrite_undefined (gsi_stmt (gsi)))
      return;
!   rewrite_to_defined_unconditional (&gsi);
  }
  
  
diff -Nrcpad gcc-16-20250504/gcc/tree-ssa-loop-im.cc gcc-16-20250511/gcc/tree-ssa-loop-im.cc
*** gcc-16-20250504/gcc/tree-ssa-loop-im.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-ssa-loop-im.cc	Sun May 11 22:32:39 2025
*************** compute_invariantness (basic_block bb)
*** 1241,1252 ****
  		   lim_data->cost);
  	}
  
!       if (lim_data->cost >= LIM_EXPENSIVE
! 	  /* When we run before PRE and PRE is active hoist all expressions
! 	     since PRE would do so anyway and we can preserve range info
! 	     but PRE cannot.  */
! 	  || (flag_tree_pre && !in_loop_pipeline))
  	set_profitable_level (stmt);
      }
  }
  
--- 1241,1264 ----
  		   lim_data->cost);
  	}
  
!       if (lim_data->cost >= LIM_EXPENSIVE)
  	set_profitable_level (stmt);
+       /* When we run before PRE and PRE is active hoist all expressions
+ 	 to the always executed loop since PRE would do so anyway
+ 	 and we can preserve range info while PRE cannot.  */
+       else if (flag_tree_pre && !in_loop_pipeline
+ 	       && outermost)
+ 	{
+ 	  class loop *mloop = lim_data->max_loop;
+ 	  if (loop_depth (outermost) > loop_depth (mloop))
+ 	    {
+ 	      mloop = outermost;
+ 	      if (dump_file && (dump_flags & TDF_DETAILS))
+ 		fprintf (dump_file, "  constraining to loop depth %d\n\n\n",
+ 			 loop_depth (mloop));
+ 	    }
+ 	  set_level (stmt, bb->loop_father, mloop);
+ 	}
      }
  }
  
*************** move_computations_worker (basic_block bb
*** 1407,1421 ****
           when the target loop header is executed and the stmt may
  	 invoke undefined integer or pointer overflow rewrite it to
  	 unsigned arithmetic.  */
!       if (is_gimple_assign (stmt)
! 	  && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
! 	  && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
! 	  && arith_code_with_undefined_signed_overflow
! 	       (gimple_assign_rhs_code (stmt))
  	  && (!ALWAYS_EXECUTED_IN (bb)
  	      || !(ALWAYS_EXECUTED_IN (bb) == level
  		   || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
! 	gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
        else
  	gsi_insert_on_edge (e, stmt);
      }
--- 1419,1429 ----
           when the target loop header is executed and the stmt may
  	 invoke undefined integer or pointer overflow rewrite it to
  	 unsigned arithmetic.  */
!       if (gimple_needing_rewrite_undefined (stmt)
  	  && (!ALWAYS_EXECUTED_IN (bb)
  	      || !(ALWAYS_EXECUTED_IN (bb) == level
  		   || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
! 	gsi_insert_seq_on_edge (e, rewrite_to_defined_unconditional (stmt));
        else
  	gsi_insert_on_edge (e, stmt);
      }
diff -Nrcpad gcc-16-20250504/gcc/tree-ssa-loop-split.cc gcc-16-20250511/gcc/tree-ssa-loop-split.cc
*** gcc-16-20250504/gcc/tree-ssa-loop-split.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-ssa-loop-split.cc	Sun May 11 22:32:39 2025
*************** split_loop (class loop *loop1)
*** 663,673 ****
  		gsi = gsi_start (stmts2);
  		while (!gsi_end_p (gsi))
  		  {
! 		    gimple *stmt = gsi_stmt (gsi);
! 		    if (is_gimple_assign (stmt)
! 			&& arith_code_with_undefined_signed_overflow
! 						(gimple_assign_rhs_code (stmt)))
! 		      rewrite_to_defined_overflow (&gsi);
  		    gsi_next (&gsi);
  		  }
  	      }
--- 663,670 ----
  		gsi = gsi_start (stmts2);
  		while (!gsi_end_p (gsi))
  		  {
! 		    if (gimple_needing_rewrite_undefined (gsi_stmt (gsi)))
! 		      rewrite_to_defined_unconditional (&gsi);
  		    gsi_next (&gsi);
  		  }
  	      }
diff -Nrcpad gcc-16-20250504/gcc/tree-ssa-phiopt.cc gcc-16-20250511/gcc/tree-ssa-phiopt.cc
*** gcc-16-20250504/gcc/tree-ssa-phiopt.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-ssa-phiopt.cc	Sun May 11 22:32:39 2025
*************** move_stmt (gimple *stmt, gimple_stmt_ite
*** 838,870 ****
    // Mark the name to be renamed if there is one.
    bitmap_set_bit (inserted_exprs, SSA_NAME_VERSION (name));
    gimple_stmt_iterator gsi1 = gsi_for_stmt (stmt);
!   gsi_move_before (&gsi1, gsi);
    reset_flow_sensitive_info (name);
  
    /* Rewrite some code which might be undefined when
       unconditionalized. */
!   if (gimple_assign_single_p (stmt))
!     {
!       tree rhs = gimple_assign_rhs1 (stmt);
!       /* VCE from integral types to another integral types but with
! 	 different precisions need to be changed into casts
! 	 to be well defined when unconditional. */
!       if (gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR
! 	  && INTEGRAL_TYPE_P (TREE_TYPE (name))
! 	  && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (rhs, 0))))
! 	{
! 	  if (dump_file && (dump_flags & TDF_DETAILS))
! 	    {
! 	      fprintf (dump_file, "rewriting stmt with maybe undefined VCE ");
! 	      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
! 	    }
! 	  tree new_rhs = TREE_OPERAND (rhs, 0);
! 	  gcc_assert (is_gimple_val (new_rhs));
! 	  gimple_assign_set_rhs_code (stmt, NOP_EXPR);
! 	  gimple_assign_set_rhs1 (stmt, new_rhs);
! 	  update_stmt (stmt);
! 	}
!     }
  }
  
  /* RAII style class to temporarily remove flow sensitive
--- 838,850 ----
    // Mark the name to be renamed if there is one.
    bitmap_set_bit (inserted_exprs, SSA_NAME_VERSION (name));
    gimple_stmt_iterator gsi1 = gsi_for_stmt (stmt);
!   gsi_move_before (&gsi1, gsi, GSI_NEW_STMT);
    reset_flow_sensitive_info (name);
  
    /* Rewrite some code which might be undefined when
       unconditionalized. */
!   if (gimple_needing_rewrite_undefined (stmt))
!     rewrite_to_defined_unconditional (gsi);
  }
  
  /* RAII style class to temporarily remove flow sensitive
*************** cond_store_replacement (basic_block midd
*** 3546,3553 ****
        /* If LHS is an access to a local variable without address-taken
  	 (or when we allow data races) and known not to trap, we could
  	 always safely move down the store.  */
        if (ref_can_have_store_data_races (lhs)
! 	  || tree_could_trap_p (lhs))
  	return false;
      }
  
--- 3526,3539 ----
        /* If LHS is an access to a local variable without address-taken
  	 (or when we allow data races) and known not to trap, we could
  	 always safely move down the store.  */
+       tree base;
        if (ref_can_have_store_data_races (lhs)
! 	  || tree_could_trap_p (lhs)
! 	  /* tree_could_trap_p is a predicate for rvalues, so check
! 	     for readonly memory explicitly.  */
! 	  || ((base = get_base_address (lhs))
! 	      && DECL_P (base)
! 	      && TREE_READONLY (base)))
  	return false;
      }
  
diff -Nrcpad gcc-16-20250504/gcc/tree-ssa-reassoc.cc gcc-16-20250511/gcc/tree-ssa-reassoc.cc
*** gcc-16-20250504/gcc/tree-ssa-reassoc.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-ssa-reassoc.cc	Sun May 11 22:32:39 2025
*************** update_range_test (struct range_entry *r
*** 2925,2954 ****
  	 !gsi_end_p (gsi); gsi_next (&gsi))
        {
  	gimple *stmt = gsi_stmt (gsi);
! 	if (is_gimple_assign (stmt))
! 	  if (tree lhs = gimple_assign_lhs (stmt))
! 	    if ((INTEGRAL_TYPE_P (TREE_TYPE (lhs))
! 		 || POINTER_TYPE_P (TREE_TYPE (lhs)))
! 		&& TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (lhs)))
! 	      {
! 		enum tree_code code = gimple_assign_rhs_code (stmt);
! 		if (arith_code_with_undefined_signed_overflow (code))
! 		  {
! 		    gimple_stmt_iterator gsip = gsi;
! 		    gimple_stmt_iterator gsin = gsi;
! 		    gsi_prev (&gsip);
! 		    gsi_next (&gsin);
! 		    rewrite_to_defined_overflow (&gsi);
! 		    unsigned uid = gimple_uid (stmt);
! 		    if (gsi_end_p (gsip))
! 		      gsip = gsi_after_labels (bb);
! 		    else
! 		      gsi_next (&gsip);
! 		    for (; gsi_stmt (gsip) != gsi_stmt (gsin);
! 			 gsi_next (&gsip))
! 		      gimple_set_uid (gsi_stmt (gsip), uid);
! 		  }
! 	      }
        }
  
    if (opcode == BIT_IOR_EXPR
--- 2925,2946 ----
  	 !gsi_end_p (gsi); gsi_next (&gsi))
        {
  	gimple *stmt = gsi_stmt (gsi);
! 	if (gimple_needing_rewrite_undefined (stmt))
! 	  {
! 	    gimple_stmt_iterator gsip = gsi;
! 	    gimple_stmt_iterator gsin = gsi;
! 	    gsi_prev (&gsip);
! 	    gsi_next (&gsin);
! 	    rewrite_to_defined_unconditional (&gsi);
! 	    unsigned uid = gimple_uid (stmt);
! 	    if (gsi_end_p (gsip))
! 	      gsip = gsi_after_labels (bb);
! 	    else
! 	      gsi_next (&gsip);
! 	    for (; gsi_stmt (gsip) != gsi_stmt (gsin);
! 		 gsi_next (&gsip))
! 	      gimple_set_uid (gsi_stmt (gsip), uid);
! 	  }
        }
  
    if (opcode == BIT_IOR_EXPR
diff -Nrcpad gcc-16-20250504/gcc/tree-ssa-structalias.cc gcc-16-20250511/gcc/tree-ssa-structalias.cc
*** gcc-16-20250504/gcc/tree-ssa-structalias.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-ssa-structalias.cc	Sun May 11 22:32:39 2025
*************** create_variable_info_for (tree decl, con
*** 6562,6568 ****
  	  varpool_node *vnode = varpool_node::get (decl);
  
  	  /* For escaped variables initialize them from nonlocal.  */
! 	  if (!vnode->all_refs_explicit_p ())
  	    make_copy_constraint (vi, nonlocal_id);
  
  	  /* While we can in theory walk references for the varpool
--- 6562,6568 ----
  	  varpool_node *vnode = varpool_node::get (decl);
  
  	  /* For escaped variables initialize them from nonlocal.  */
! 	  if (!vnode || !vnode->all_refs_explicit_p ())
  	    make_copy_constraint (vi, nonlocal_id);
  
  	  /* While we can in theory walk references for the varpool
*************** create_variable_info_for (tree decl, con
*** 6581,6587 ****
  		process_constraint (new_constraint (lhs, *rhsp));
  	      /* If this is a variable that escapes from the unit
  		 the initializer escapes as well.  */
! 	      if (!vnode->all_refs_explicit_p ())
  		{
  		  lhs.var = escaped_id;
  		  lhs.offset = 0;
--- 6581,6587 ----
  		process_constraint (new_constraint (lhs, *rhsp));
  	      /* If this is a variable that escapes from the unit
  		 the initializer escapes as well.  */
! 	      if (!vnode || !vnode->all_refs_explicit_p ())
  		{
  		  lhs.var = escaped_id;
  		  lhs.offset = 0;
diff -Nrcpad gcc-16-20250504/gcc/tree-switch-conversion.cc gcc-16-20250511/gcc/tree-switch-conversion.cc
*** gcc-16-20250504/gcc/tree-switch-conversion.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-switch-conversion.cc	Sun May 11 22:32:39 2025
*************** bit_test_cluster::find_bit_tests (vec<cl
*** 1793,1804 ****
       end up with as few clusters as possible.  */
  
    unsigned l = clusters.length ();
-   auto_vec<min_cluster_item> min;
-   min.reserve (l + 1);
  
!   gcc_checking_assert (l > 0);
    gcc_checking_assert (l <= INT_MAX);
  
    int bits_in_word = GET_MODE_BITSIZE (word_mode);
  
    /* First phase: Compute the minimum number of clusters for each prefix of the
--- 1793,1806 ----
       end up with as few clusters as possible.  */
  
    unsigned l = clusters.length ();
  
!   if (l == 0)
!     return clusters.copy ();
    gcc_checking_assert (l <= INT_MAX);
  
+   auto_vec<min_cluster_item> min;
+   min.reserve (l + 1);
+ 
    int bits_in_word = GET_MODE_BITSIZE (word_mode);
  
    /* First phase: Compute the minimum number of clusters for each prefix of the
diff -Nrcpad gcc-16-20250504/gcc/tree-vect-data-refs.cc gcc-16-20250511/gcc/tree-vect-data-refs.cc
*** gcc-16-20250504/gcc/tree-vect-data-refs.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-vect-data-refs.cc	Sun May 11 22:32:39 2025
*************** vect_analyze_early_break_dependences (lo
*** 734,740 ****
  
  	  stmt_vec_info stmt_vinfo
  	    = vect_stmt_to_vectorize (loop_vinfo->lookup_stmt (stmt));
- 	  stmt = STMT_VINFO_STMT (stmt_vinfo);
  	  auto dr_ref = STMT_VINFO_DATA_REF (stmt_vinfo);
  	  if (!dr_ref)
  	    continue;
--- 734,739 ----
*************** vect_slp_analyze_instance_dependence (ve
*** 1203,1208 ****
--- 1202,1298 ----
      for (unsigned k = 0; k < SLP_TREE_SCALAR_STMTS (store).length (); ++k)
        gimple_set_visited (SLP_TREE_SCALAR_STMTS (store)[k]->stmt, false);
  
+   /* If this is a SLP instance with a store check if there's a dependent
+      load that cannot be forwarded from a previous iteration of a loop
+      both are in.  This is to avoid situations like that in PR115777.  */
+   if (res && store)
+     {
+       stmt_vec_info store_info
+ 	= DR_GROUP_FIRST_ELEMENT (SLP_TREE_SCALAR_STMTS (store)[0]);
+       class loop *store_loop = gimple_bb (store_info->stmt)->loop_father;
+       if (! loop_outer (store_loop))
+ 	return res;
+       vec<loop_p> loop_nest;
+       loop_nest.create (1);
+       loop_nest.quick_push (store_loop);
+       data_reference *drs = nullptr;
+       for (slp_tree &load : SLP_INSTANCE_LOADS (instance))
+ 	{
+ 	  if (! STMT_VINFO_GROUPED_ACCESS (SLP_TREE_SCALAR_STMTS (load)[0]))
+ 	    continue;
+ 	  stmt_vec_info load_info
+ 	    = DR_GROUP_FIRST_ELEMENT (SLP_TREE_SCALAR_STMTS (load)[0]);
+ 	  if (gimple_bb (load_info->stmt)->loop_father != store_loop)
+ 	    continue;
+ 
+ 	  /* For now concern ourselves with write-after-read as we also
+ 	     only look for re-use of the store within the same SLP instance.
+ 	     We can still get a RAW here when the instance contais a PHI
+ 	     with a backedge though, thus this test.  */
+ 	  if (! vect_stmt_dominates_stmt_p (STMT_VINFO_STMT (load_info),
+ 					    STMT_VINFO_STMT (store_info)))
+ 	    continue;
+ 
+ 	  if (! drs)
+ 	    {
+ 	      drs = create_data_ref (loop_preheader_edge (store_loop),
+ 				     store_loop,
+ 				     DR_REF (STMT_VINFO_DATA_REF (store_info)),
+ 				     store_info->stmt, false, false);
+ 	      if (! DR_BASE_ADDRESS (drs)
+ 		  || TREE_CODE (DR_STEP (drs)) != INTEGER_CST)
+ 		break;
+ 	    }
+ 	  data_reference *drl
+ 	    = create_data_ref (loop_preheader_edge (store_loop),
+ 			       store_loop,
+ 			       DR_REF (STMT_VINFO_DATA_REF (load_info)),
+ 			       load_info->stmt, true, false);
+ 
+ 	  /* See whether the DRs have a known constant distance throughout
+ 	     the containing loop iteration.  */
+ 	  if (! DR_BASE_ADDRESS (drl)
+ 	      || ! operand_equal_p (DR_STEP (drs), DR_STEP (drl))
+ 	      || ! operand_equal_p (DR_BASE_ADDRESS (drs),
+ 				    DR_BASE_ADDRESS (drl))
+ 	      || ! operand_equal_p (DR_OFFSET (drs), DR_OFFSET (drl)))
+ 	    {
+ 	      free_data_ref (drl);
+ 	      continue;
+ 	    }
+ 
+ 	  /* If the next iteration load overlaps with a non-power-of-two offset
+ 	     we are surely failing any STLF attempt.  */
+ 	  HOST_WIDE_INT step = TREE_INT_CST_LOW (DR_STEP (drl));
+ 	  unsigned HOST_WIDE_INT sizes
+ 	    = (TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drs))))
+ 	       * DR_GROUP_SIZE (store_info));
+ 	  unsigned HOST_WIDE_INT sizel
+ 	    = (TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drl))))
+ 	       * DR_GROUP_SIZE (load_info));
+ 	  if (ranges_overlap_p (TREE_INT_CST_LOW (DR_INIT (drl)) + step, sizel,
+ 				TREE_INT_CST_LOW (DR_INIT (drs)), sizes))
+ 	    {
+ 	      unsigned HOST_WIDE_INT dist
+ 		= absu_hwi (TREE_INT_CST_LOW (DR_INIT (drl)) + step
+ 			    - TREE_INT_CST_LOW (DR_INIT (drs)));
+ 	      poly_uint64 loadsz = tree_to_poly_uint64
+ 				     (TYPE_SIZE_UNIT (SLP_TREE_VECTYPE (load)));
+ 	      poly_uint64 storesz = tree_to_poly_uint64
+ 				    (TYPE_SIZE_UNIT (SLP_TREE_VECTYPE (store)));
+ 	      /* When the overlap aligns with vector sizes used for the loads
+ 		 and the vector stores are larger or equal to the loads
+ 		 forwarding should work.  */
+ 	      if (maybe_gt (loadsz, storesz) || ! multiple_p (dist, loadsz))
+ 		load->avoid_stlf_fail = true;
+ 	    }
+ 	  free_data_ref (drl);
+ 	}
+       if (drs)
+ 	free_data_ref (drs);
+       loop_nest.release ();
+     }
+ 
    return res;
  }
  
diff -Nrcpad gcc-16-20250504/gcc/tree-vect-loop.cc gcc-16-20250511/gcc/tree-vect-loop.cc
*** gcc-16-20250504/gcc/tree-vect-loop.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-vect-loop.cc	Sun May 11 22:32:39 2025
*************** vect_emit_reduction_init_stmts (loop_vec
*** 5470,5545 ****
      }
  }
  
- /* Function get_initial_def_for_reduction
- 
-    Input:
-    REDUC_INFO - the info_for_reduction
-    INIT_VAL - the initial value of the reduction variable
-    NEUTRAL_OP - a value that has no effect on the reduction, as per
- 		neutral_op_for_reduction
- 
-    Output:
-    Return a vector variable, initialized according to the operation that
- 	STMT_VINFO performs. This vector will be used as the initial value
- 	of the vector of partial results.
- 
-    The value we need is a vector in which element 0 has value INIT_VAL
-    and every other element has value NEUTRAL_OP.  */
- 
- static tree
- get_initial_def_for_reduction (loop_vec_info loop_vinfo,
- 			       stmt_vec_info reduc_info,
- 			       tree init_val, tree neutral_op)
- {
-   class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
-   tree scalar_type = TREE_TYPE (init_val);
-   tree vectype = get_vectype_for_scalar_type (loop_vinfo, scalar_type);
-   tree init_def;
-   gimple_seq stmts = NULL;
- 
-   gcc_assert (vectype);
- 
-   gcc_assert (POINTER_TYPE_P (scalar_type) || INTEGRAL_TYPE_P (scalar_type)
- 	      || SCALAR_FLOAT_TYPE_P (scalar_type));
- 
-   gcc_assert (nested_in_vect_loop_p (loop, reduc_info)
- 	      || loop == (gimple_bb (reduc_info->stmt))->loop_father);
- 
-   if (operand_equal_p (init_val, neutral_op))
-     {
-       /* If both elements are equal then the vector described above is
- 	 just a splat.  */
-       neutral_op = gimple_convert (&stmts, TREE_TYPE (vectype), neutral_op);
-       init_def = gimple_build_vector_from_val (&stmts, vectype, neutral_op);
-     }
-   else
-     {
-       neutral_op = gimple_convert (&stmts, TREE_TYPE (vectype), neutral_op);
-       init_val = gimple_convert (&stmts, TREE_TYPE (vectype), init_val);
-       if (!TYPE_VECTOR_SUBPARTS (vectype).is_constant ())
- 	{
- 	  /* Construct a splat of NEUTRAL_OP and insert INIT_VAL into
- 	     element 0.  */
- 	  init_def = gimple_build_vector_from_val (&stmts, vectype,
- 						   neutral_op);
- 	  init_def = gimple_build (&stmts, CFN_VEC_SHL_INSERT,
- 				   vectype, init_def, init_val);
- 	}
-       else
- 	{
- 	  /* Build {INIT_VAL, NEUTRAL_OP, NEUTRAL_OP, ...}.  */
- 	  tree_vector_builder elts (vectype, 1, 2);
- 	  elts.quick_push (init_val);
- 	  elts.quick_push (neutral_op);
- 	  init_def = gimple_build_vector (&stmts, &elts);
- 	}
-     }
- 
-   if (stmts)
-     vect_emit_reduction_init_stmts (loop_vinfo, reduc_info, stmts);
-   return init_def;
- }
- 
  /* Get at the initial defs for the reduction PHIs for REDUC_INFO,
     which performs a reduction involving GROUP_SIZE scalar statements.
     NUMBER_OF_VECTORS is the number of vector defs to create.  If NEUTRAL_OP
--- 5470,5475 ----
*************** vect_create_epilog_for_reduction (loop_v
*** 5951,5957 ****
       loop-closed PHI of the inner loop which we remember as
       def for the reduction PHI generation.  */
    bool double_reduc = false;
-   stmt_vec_info rdef_info = stmt_info;
    if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_double_reduction_def)
      {
        double_reduc = true;
--- 5881,5886 ----
*************** vect_create_epilog_for_reduction (loop_v
*** 5981,6000 ****
    auto_vec<tree> reduc_inputs;
    int j, i;
    vec<tree> &scalar_results = reduc_info->reduc_scalar_results;
!   unsigned int group_size = 1, k;
    /* SLP reduction without reduction chain, e.g.,
       # a1 = phi <a2, a0>
       # b1 = phi <b2, b0>
       a2 = operation (a1)
       b2 = operation (b1)  */
    bool slp_reduc
!     = (slp_node
!        && !REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info)));
    bool direct_slp_reduc;
    tree induction_index = NULL_TREE;
  
!   if (slp_node)
!     group_size = SLP_TREE_LANES (slp_node);
  
    if (nested_in_vect_loop_p (loop, stmt_info))
      {
--- 5910,5927 ----
    auto_vec<tree> reduc_inputs;
    int j, i;
    vec<tree> &scalar_results = reduc_info->reduc_scalar_results;
!   unsigned int k;
    /* SLP reduction without reduction chain, e.g.,
       # a1 = phi <a2, a0>
       # b1 = phi <b2, b0>
       a2 = operation (a1)
       b2 = operation (b1)  */
    bool slp_reduc
!     = !REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info));
    bool direct_slp_reduc;
    tree induction_index = NULL_TREE;
  
!   unsigned int group_size = SLP_TREE_LANES (slp_node);
  
    if (nested_in_vect_loop_p (loop, stmt_info))
      {
*************** vect_create_epilog_for_reduction (loop_v
*** 6024,6041 ****
      /* All statements produce live-out values.  */
      live_out_stmts = SLP_TREE_SCALAR_STMTS (slp_node);
  
!   unsigned vec_num;
!   int ncopies;
!   if (slp_node)
!     {
!       vec_num = SLP_TREE_VEC_DEFS (slp_node_instance->reduc_phis).length ();
!       ncopies = 1;
!     }
!   else
!     {
!       vec_num = 1;
!       ncopies = STMT_VINFO_VEC_STMTS (reduc_info).length ();
!     }
  
    /* For cond reductions we want to create a new vector (INDEX_COND_EXPR)
       which is updated with the current index of the loop for every match of
--- 5951,5958 ----
      /* All statements produce live-out values.  */
      live_out_stmts = SLP_TREE_SCALAR_STMTS (slp_node);
  
!   unsigned vec_num
!     = SLP_TREE_VEC_DEFS (slp_node_instance->reduc_phis).length ();
  
    /* For cond reductions we want to create a new vector (INDEX_COND_EXPR)
       which is updated with the current index of the loop for every match of
*************** vect_create_epilog_for_reduction (loop_v
*** 6050,6102 ****
    if (STMT_VINFO_REDUC_TYPE (reduc_info) == COND_REDUCTION)
      {
        auto_vec<std::pair<tree, bool>, 2> ccompares;
!       if (slp_node)
! 	{
! 	  slp_tree cond_node = slp_node_instance->root;
! 	  while (cond_node != slp_node_instance->reduc_phis)
! 	    {
! 	      stmt_vec_info cond_info = SLP_TREE_REPRESENTATIVE (cond_node);
! 	      int slp_reduc_idx;
! 	      if (gimple_assign_rhs_code (cond_info->stmt) == COND_EXPR)
! 		{
! 		  gimple *vec_stmt
! 		    = SSA_NAME_DEF_STMT (SLP_TREE_VEC_DEFS (cond_node)[0]);
! 		  gcc_assert (gimple_assign_rhs_code (vec_stmt) == VEC_COND_EXPR);
! 		  ccompares.safe_push
! 		    (std::make_pair (gimple_assign_rhs1 (vec_stmt),
! 				     STMT_VINFO_REDUC_IDX (cond_info) == 2));
! 		  /* ???  We probably want to have REDUC_IDX on the SLP node?
! 		     We have both three and four children COND_EXPR nodes
! 		     dependent on whether the comparison is still embedded
! 		     as GENERIC.  So work backwards.  */
! 		  slp_reduc_idx = (SLP_TREE_CHILDREN (cond_node).length () - 3
! 				   + STMT_VINFO_REDUC_IDX (cond_info));
! 		}
! 	      else
! 		slp_reduc_idx = STMT_VINFO_REDUC_IDX (cond_info);
! 	      cond_node = SLP_TREE_CHILDREN (cond_node)[slp_reduc_idx];
! 	    }
! 	}
!       else
  	{
! 	  stmt_vec_info cond_info = STMT_VINFO_REDUC_DEF (reduc_info);
! 	  cond_info = vect_stmt_to_vectorize (cond_info);
! 	  while (cond_info != reduc_info)
  	    {
! 	      if (gimple_assign_rhs_code (cond_info->stmt) == COND_EXPR)
! 		{
! 		  gimple *vec_stmt = STMT_VINFO_VEC_STMTS (cond_info)[0];
! 		  gcc_assert (gimple_assign_rhs_code (vec_stmt) == VEC_COND_EXPR);
! 		  ccompares.safe_push
! 		    (std::make_pair (gimple_assign_rhs1 (vec_stmt),
! 				     STMT_VINFO_REDUC_IDX (cond_info) == 2));
! 		}
! 	      cond_info
! 		= loop_vinfo->lookup_def (gimple_op (cond_info->stmt,
! 						     1 + STMT_VINFO_REDUC_IDX
! 						     (cond_info)));
! 	      cond_info = vect_stmt_to_vectorize (cond_info);
  	    }
  	}
        gcc_assert (ccompares.length () != 0);
  
--- 5967,5995 ----
    if (STMT_VINFO_REDUC_TYPE (reduc_info) == COND_REDUCTION)
      {
        auto_vec<std::pair<tree, bool>, 2> ccompares;
!       slp_tree cond_node = slp_node_instance->root;
!       while (cond_node != slp_node_instance->reduc_phis)
  	{
! 	  stmt_vec_info cond_info = SLP_TREE_REPRESENTATIVE (cond_node);
! 	  int slp_reduc_idx;
! 	  if (gimple_assign_rhs_code (cond_info->stmt) == COND_EXPR)
  	    {
! 	      gimple *vec_stmt
! 		= SSA_NAME_DEF_STMT (SLP_TREE_VEC_DEFS (cond_node)[0]);
! 	      gcc_assert (gimple_assign_rhs_code (vec_stmt) == VEC_COND_EXPR);
! 	      ccompares.safe_push
! 		(std::make_pair (gimple_assign_rhs1 (vec_stmt),
! 				 STMT_VINFO_REDUC_IDX (cond_info) == 2));
! 	      /* ???  We probably want to have REDUC_IDX on the SLP node?
! 		 We have both three and four children COND_EXPR nodes
! 		 dependent on whether the comparison is still embedded
! 		 as GENERIC.  So work backwards.  */
! 	      slp_reduc_idx = (SLP_TREE_CHILDREN (cond_node).length () - 3
! 			       + STMT_VINFO_REDUC_IDX (cond_info));
  	    }
+ 	  else
+ 	    slp_reduc_idx = STMT_VINFO_REDUC_IDX (cond_info);
+ 	  cond_node = SLP_TREE_CHILDREN (cond_node)[slp_reduc_idx];
  	}
        gcc_assert (ccompares.length () != 0);
  
*************** vect_create_epilog_for_reduction (loop_v
*** 6205,6234 ****
    /* We need to reduce values in all exits.  */
    exit_bb = loop_exit->dest;
    exit_gsi = gsi_after_labels (exit_bb);
!   reduc_inputs.create (slp_node ? vec_num : ncopies);
    for (unsigned i = 0; i < vec_num; i++)
      {
        gimple_seq stmts = NULL;
!       if (slp_node)
! 	def = vect_get_slp_vect_def (slp_node, i);
        else
- 	def = gimple_get_lhs (STMT_VINFO_VEC_STMTS (rdef_info)[0]);
-       for (j = 0; j < ncopies; j++)
  	{
! 	  tree new_def = copy_ssa_name (def);
! 	  phi = create_phi_node (new_def, exit_bb);
! 	  if (j)
! 	    def = gimple_get_lhs (STMT_VINFO_VEC_STMTS (rdef_info)[j]);
! 	  if (LOOP_VINFO_IV_EXIT (loop_vinfo) == loop_exit)
! 	    SET_PHI_ARG_DEF (phi, loop_exit->dest_idx, def);
! 	  else
! 	    {
! 	      for (unsigned k = 0; k < gimple_phi_num_args (phi); k++)
! 		SET_PHI_ARG_DEF (phi, k, def);
! 	    }
! 	  new_def = gimple_convert (&stmts, vectype, new_def);
! 	  reduc_inputs.quick_push (new_def);
  	}
        gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
      }
  
--- 6098,6119 ----
    /* We need to reduce values in all exits.  */
    exit_bb = loop_exit->dest;
    exit_gsi = gsi_after_labels (exit_bb);
!   reduc_inputs.create (vec_num);
    for (unsigned i = 0; i < vec_num; i++)
      {
        gimple_seq stmts = NULL;
!       def = vect_get_slp_vect_def (slp_node, i);
!       tree new_def = copy_ssa_name (def);
!       phi = create_phi_node (new_def, exit_bb);
!       if (LOOP_VINFO_IV_EXIT (loop_vinfo) == loop_exit)
! 	SET_PHI_ARG_DEF (phi, loop_exit->dest_idx, def);
        else
  	{
! 	  for (unsigned k = 0; k < gimple_phi_num_args (phi); k++)
! 	    SET_PHI_ARG_DEF (phi, k, def);
  	}
+       new_def = gimple_convert (&stmts, vectype, new_def);
+       reduc_inputs.quick_push (new_def);
        gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
      }
  
*************** vect_create_epilog_for_reduction (loop_v
*** 6284,6291 ****
    if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info))
        || direct_slp_reduc
        || (slp_reduc
! 	  && constant_multiple_p (TYPE_VECTOR_SUBPARTS (vectype), group_size))
!       || ncopies > 1)
      {
        gimple_seq stmts = NULL;
        tree single_input = reduc_inputs[0];
--- 6169,6175 ----
    if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info))
        || direct_slp_reduc
        || (slp_reduc
! 	  && constant_multiple_p (TYPE_VECTOR_SUBPARTS (vectype), group_size)))
      {
        gimple_seq stmts = NULL;
        tree single_input = reduc_inputs[0];
*************** vect_create_epilog_for_reduction (loop_v
*** 6579,6585 ****
  	 is itself a neutral value.  */
        tree vector_identity = NULL_TREE;
        tree neutral_op = NULL_TREE;
!       if (slp_node)
  	{
  	  tree initial_value = NULL_TREE;
  	  if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info)))
--- 6463,6469 ----
  	 is itself a neutral value.  */
        tree vector_identity = NULL_TREE;
        tree neutral_op = NULL_TREE;
!       if (1)
  	{
  	  tree initial_value = NULL_TREE;
  	  if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info)))
*************** static bool
*** 7088,7097 ****
  vectorize_fold_left_reduction (loop_vec_info loop_vinfo,
  			       stmt_vec_info stmt_info,
  			       gimple_stmt_iterator *gsi,
! 			       gimple **vec_stmt, slp_tree slp_node,
  			       gimple *reduc_def_stmt,
  			       code_helper code, internal_fn reduc_fn,
! 			       tree *ops, int num_ops, tree vectype_in,
  			       int reduc_index, vec_loop_masks *masks,
  			       vec_loop_lens *lens)
  {
--- 6972,6981 ----
  vectorize_fold_left_reduction (loop_vec_info loop_vinfo,
  			       stmt_vec_info stmt_info,
  			       gimple_stmt_iterator *gsi,
! 			       slp_tree slp_node,
  			       gimple *reduc_def_stmt,
  			       code_helper code, internal_fn reduc_fn,
! 			       int num_ops, tree vectype_in,
  			       int reduc_index, vec_loop_masks *masks,
  			       vec_loop_lens *lens)
  {
*************** vectorize_fold_left_reduction (loop_vec_
*** 7099,7112 ****
    tree vectype_out = STMT_VINFO_VECTYPE (stmt_info);
    internal_fn mask_reduc_fn = get_masked_reduction_fn (reduc_fn, vectype_in);
  
-   int ncopies;
-   if (slp_node)
-     ncopies = 1;
-   else
-     ncopies = vect_get_num_copies (loop_vinfo, vectype_in);
- 
    gcc_assert (!nested_in_vect_loop_p (loop, stmt_info));
-   gcc_assert (ncopies == 1);
  
    bool is_cond_op = false;
    if (!code.is_tree_code ())
--- 6983,6989 ----
*************** vectorize_fold_left_reduction (loop_vec_
*** 7118,7126 ****
  
    gcc_assert (TREE_CODE_LENGTH (tree_code (code)) == binary_op);
  
!   if (slp_node)
!     gcc_assert (known_eq (TYPE_VECTOR_SUBPARTS (vectype_out),
! 			  TYPE_VECTOR_SUBPARTS (vectype_in)));
  
    /* The operands either come from a binary operation or an IFN_COND operation.
       The former is a gimple assign with binary rhs and the latter is a
--- 6995,7002 ----
  
    gcc_assert (TREE_CODE_LENGTH (tree_code (code)) == binary_op);
  
!   gcc_assert (known_eq (TYPE_VECTOR_SUBPARTS (vectype_out),
! 			TYPE_VECTOR_SUBPARTS (vectype_in)));
  
    /* The operands either come from a binary operation or an IFN_COND operation.
       The former is a gimple assign with binary rhs and the latter is a
*************** vectorize_fold_left_reduction (loop_vec_
*** 7130,7165 ****
    int group_size = 1;
    stmt_vec_info scalar_dest_def_info;
    auto_vec<tree> vec_oprnds0, vec_opmask;
!   if (slp_node)
!     {
!       vect_get_slp_defs (SLP_TREE_CHILDREN (slp_node)[(is_cond_op ? 2 : 0)
! 						      + (1 - reduc_index)],
! 						      &vec_oprnds0);
!       group_size = SLP_TREE_SCALAR_STMTS (slp_node).length ();
!       scalar_dest_def_info = SLP_TREE_SCALAR_STMTS (slp_node)[group_size - 1];
!       /* For an IFN_COND_OP we also need the vector mask operand.  */
!       if (is_cond_op)
! 	vect_get_slp_defs (SLP_TREE_CHILDREN (slp_node)[0], &vec_opmask);
!     }
!   else
!     {
!       tree op0, opmask;
!       if (!is_cond_op)
! 	op0 = ops[1 - reduc_index];
!       else
! 	{
! 	  op0 = ops[2 + (1 - reduc_index)];
! 	  opmask = ops[0];
! 	}
!       vect_get_vec_defs_for_operand (loop_vinfo, stmt_info, 1,
! 				     op0, &vec_oprnds0);
!       scalar_dest_def_info = stmt_info;
! 
!       /* For an IFN_COND_OP we also need the vector mask operand.  */
!       if (is_cond_op)
! 	vect_get_vec_defs_for_operand (loop_vinfo, stmt_info, 1,
! 				       opmask, &vec_opmask);
!     }
  
    gimple *sdef = vect_orig_stmt (scalar_dest_def_info)->stmt;
    tree scalar_dest = gimple_get_lhs (sdef);
--- 7006,7019 ----
    int group_size = 1;
    stmt_vec_info scalar_dest_def_info;
    auto_vec<tree> vec_oprnds0, vec_opmask;
!   vect_get_slp_defs (SLP_TREE_CHILDREN (slp_node)[(is_cond_op ? 2 : 0)
! 						  + (1 - reduc_index)],
! 						  &vec_oprnds0);
!   group_size = SLP_TREE_SCALAR_STMTS (slp_node).length ();
!   scalar_dest_def_info = SLP_TREE_SCALAR_STMTS (slp_node)[group_size - 1];
!   /* For an IFN_COND_OP we also need the vector mask operand.  */
!   if (is_cond_op)
!     vect_get_slp_defs (SLP_TREE_CHILDREN (slp_node)[0], &vec_opmask);
  
    gimple *sdef = vect_orig_stmt (scalar_dest_def_info)->stmt;
    tree scalar_dest = gimple_get_lhs (sdef);
*************** vectorize_fold_left_reduction (loop_vec_
*** 7167,7173 ****
    tree reduc_var = gimple_phi_result (reduc_def_stmt);
  
    int vec_num = vec_oprnds0.length ();
-   gcc_assert (vec_num == 1 || slp_node);
    tree vec_elem_type = TREE_TYPE (vectype_out);
    gcc_checking_assert (useless_type_conversion_p (scalar_type, vec_elem_type));
  
--- 7021,7026 ----
*************** vectorize_fold_left_reduction (loop_vec_
*** 7279,7291 ****
  				     scalar_dest_def_info,
  				     new_stmt, gsi);
  
!       if (slp_node)
! 	slp_node->push_vec_def (new_stmt);
!       else
! 	{
! 	  STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_stmt);
! 	  *vec_stmt = new_stmt;
! 	}
      }
  
    return true;
--- 7132,7138 ----
  				     scalar_dest_def_info,
  				     new_stmt, gsi);
  
!       slp_node->push_vec_def (new_stmt);
      }
  
    return true;
*************** vectorizable_lane_reducing (loop_vec_inf
*** 7543,7549 ****
  	    return false;
  	}
  
!       if (slp_node && !vect_maybe_update_slp_op_vectype (slp_op, vectype))
  	{
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
--- 7390,7396 ----
  	    return false;
  	}
  
!       if (!vect_maybe_update_slp_op_vectype (slp_op, vectype))
  	{
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
*************** vectorizable_reduction (loop_vec_info lo
*** 7682,7704 ****
      {
        if (is_a <gphi *> (stmt_info->stmt))
  	{
! 	  if (slp_node)
! 	    {
! 	      /* We eventually need to set a vector type on invariant
! 		 arguments.  */
! 	      unsigned j;
! 	      slp_tree child;
! 	      FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (slp_node), j, child)
! 		if (!vect_maybe_update_slp_op_vectype
! 		       (child, SLP_TREE_VECTYPE (slp_node)))
! 		  {
! 		    if (dump_enabled_p ())
! 		      dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 				       "incompatible vector types for "
! 				       "invariants\n");
! 		    return false;
! 		  }
! 	    }
  	  /* Analysis for double-reduction is done on the outer
  	     loop PHI, nested cycles have no further restrictions.  */
  	  STMT_VINFO_TYPE (stmt_info) = cycle_phi_info_type;
--- 7529,7548 ----
      {
        if (is_a <gphi *> (stmt_info->stmt))
  	{
! 	  /* We eventually need to set a vector type on invariant
! 	     arguments.  */
! 	  unsigned j;
! 	  slp_tree child;
! 	  FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (slp_node), j, child)
! 	    if (!vect_maybe_update_slp_op_vectype
! 		   (child, SLP_TREE_VECTYPE (slp_node)))
! 	      {
! 		if (dump_enabled_p ())
! 		  dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 				   "incompatible vector types for "
! 				   "invariants\n");
! 		return false;
! 	      }
  	  /* Analysis for double-reduction is done on the outer
  	     loop PHI, nested cycles have no further restrictions.  */
  	  STMT_VINFO_TYPE (stmt_info) = cycle_phi_info_type;
*************** vectorizable_reduction (loop_vec_info lo
*** 7723,7729 ****
  	     the outer loop PHI.  The latter is what we want to analyze
  	     the reduction with.  The LC PHI is handled by
  	     vectorizable_lc_phi.  */
- 	  gcc_assert (slp_node);
  	  return gimple_phi_num_args (as_a <gphi *> (stmt_info->stmt)) == 2;
  	}
        use_operand_p use_p;
--- 7567,7572 ----
*************** vectorizable_reduction (loop_vec_info lo
*** 7734,7746 ****
        phi_info = loop_vinfo->lookup_stmt (use_stmt);
      }
  
!   if (slp_node)
!     {
!       slp_node_instance->reduc_phis = slp_node;
!       /* ???  We're leaving slp_node to point to the PHIs, we only
! 	 need it to get at the number of vector stmts which wasn't
! 	 yet initialized for the instance root.  */
!     }
  
    /* PHIs should not participate in patterns.  */
    gcc_assert (!STMT_VINFO_RELATED_STMT (phi_info));
--- 7577,7586 ----
        phi_info = loop_vinfo->lookup_stmt (use_stmt);
      }
  
!   slp_node_instance->reduc_phis = slp_node;
!   /* ???  We're leaving slp_node to point to the PHIs, we only
!      need it to get at the number of vector stmts which wasn't
!      yet initialized for the instance root.  */
  
    /* PHIs should not participate in patterns.  */
    gcc_assert (!STMT_VINFO_RELATED_STMT (phi_info));
*************** vectorizable_reduction (loop_vec_info lo
*** 7756,7766 ****
    unsigned reduc_chain_length = 0;
    bool only_slp_reduc_chain = true;
    stmt_info = NULL;
!   slp_tree slp_for_stmt_info = slp_node ? slp_node_instance->root : NULL;
    /* For double-reductions we start SLP analysis at the inner loop LC PHI
       which is the def of the outer loop live stmt.  */
!   if (STMT_VINFO_DEF_TYPE (reduc_info) == vect_double_reduction_def
!       && slp_node)
      slp_for_stmt_info = SLP_TREE_CHILDREN (slp_for_stmt_info)[0];
    while (reduc_def != PHI_RESULT (reduc_def_phi))
      {
--- 7596,7605 ----
    unsigned reduc_chain_length = 0;
    bool only_slp_reduc_chain = true;
    stmt_info = NULL;
!   slp_tree slp_for_stmt_info = slp_node_instance->root;
    /* For double-reductions we start SLP analysis at the inner loop LC PHI
       which is the def of the outer loop live stmt.  */
!   if (STMT_VINFO_DEF_TYPE (reduc_info) == vect_double_reduction_def)
      slp_for_stmt_info = SLP_TREE_CHILDREN (slp_for_stmt_info)[0];
    while (reduc_def != PHI_RESULT (reduc_def_phi))
      {
*************** vectorizable_reduction (loop_vec_info lo
*** 7863,7869 ****
  
        reduc_def = op.ops[reduc_idx];
        reduc_chain_length++;
!       if (!stmt_info && slp_node)
  	slp_for_stmt_info = SLP_TREE_CHILDREN (slp_for_stmt_info)[0];
      }
    /* PHIs should not participate in patterns.  */
--- 7702,7708 ----
  
        reduc_def = op.ops[reduc_idx];
        reduc_chain_length++;
!       if (!stmt_info)
  	slp_for_stmt_info = SLP_TREE_CHILDREN (slp_for_stmt_info)[0];
      }
    /* PHIs should not participate in patterns.  */
*************** vectorizable_reduction (loop_vec_info lo
*** 7877,7890 ****
  
    /* STMT_VINFO_REDUC_DEF doesn't point to the first but the last
       element.  */
!   if (slp_node && REDUC_GROUP_FIRST_ELEMENT (stmt_info))
      {
        gcc_assert (!REDUC_GROUP_NEXT_ELEMENT (stmt_info));
        stmt_info = REDUC_GROUP_FIRST_ELEMENT (stmt_info);
      }
    if (REDUC_GROUP_FIRST_ELEMENT (stmt_info))
!     gcc_assert (slp_node
! 		&& REDUC_GROUP_FIRST_ELEMENT (stmt_info) == stmt_info);
  
    /* 1. Is vectorizable reduction?  */
    /* Not supportable if the reduction variable is used in the loop, unless
--- 7716,7728 ----
  
    /* STMT_VINFO_REDUC_DEF doesn't point to the first but the last
       element.  */
!   if (REDUC_GROUP_FIRST_ELEMENT (stmt_info))
      {
        gcc_assert (!REDUC_GROUP_NEXT_ELEMENT (stmt_info));
        stmt_info = REDUC_GROUP_FIRST_ELEMENT (stmt_info);
      }
    if (REDUC_GROUP_FIRST_ELEMENT (stmt_info))
!     gcc_assert (REDUC_GROUP_FIRST_ELEMENT (stmt_info) == stmt_info);
  
    /* 1. Is vectorizable reduction?  */
    /* Not supportable if the reduction variable is used in the loop, unless
*************** vectorizable_reduction (loop_vec_info lo
*** 7939,7945 ****
       OK to use them in a reduction chain or when the reduction group
       has just one element.  */
    if (lane_reducing
-       && slp_node
        && !REDUC_GROUP_FIRST_ELEMENT (stmt_info)
        && SLP_TREE_LANES (slp_node) > 1)
      {
--- 7777,7782 ----
*************** vectorizable_reduction (loop_vec_info lo
*** 8017,8023 ****
    /* If we have a condition reduction, see if we can simplify it further.  */
    if (reduction_type == COND_REDUCTION)
      {
!       if (slp_node && SLP_TREE_LANES (slp_node) != 1)
  	return false;
  
        /* When the condition uses the reduction value in the condition, fail.  */
--- 7854,7860 ----
    /* If we have a condition reduction, see if we can simplify it further.  */
    if (reduction_type == COND_REDUCTION)
      {
!       if (SLP_TREE_LANES (slp_node) != 1)
  	return false;
  
        /* When the condition uses the reduction value in the condition, fail.  */
*************** vectorizable_reduction (loop_vec_info lo
*** 8119,8128 ****
    if (STMT_VINFO_LIVE_P (phi_info))
      return false;
  
!   if (slp_node)
!     ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
!   else
!     ncopies = vect_get_num_copies (loop_vinfo, vectype_in);
  
    gcc_assert (ncopies >= 1);
  
--- 7956,7962 ----
    if (STMT_VINFO_LIVE_P (phi_info))
      return false;
  
!   ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
  
    gcc_assert (ncopies >= 1);
  
*************** vectorizable_reduction (loop_vec_info lo
*** 8194,8201 ****
  	 outer-loop vectorization is safe.  Likewise when we are vectorizing
  	 a series of reductions using SLP and the VF is one the reductions
  	 are performed in scalar order.  */
!       if (slp_node
! 	  && !REDUC_GROUP_FIRST_ELEMENT (stmt_info)
  	  && known_eq (LOOP_VINFO_VECT_FACTOR (loop_vinfo), 1u))
  	;
        else if (needs_fold_left_reduction_p (op.type, orig_code))
--- 8028,8034 ----
  	 outer-loop vectorization is safe.  Likewise when we are vectorizing
  	 a series of reductions using SLP and the VF is one the reductions
  	 are performed in scalar order.  */
!       if (!REDUC_GROUP_FIRST_ELEMENT (stmt_info)
  	  && known_eq (LOOP_VINFO_VECT_FACTOR (loop_vinfo), 1u))
  	;
        else if (needs_fold_left_reduction_p (op.type, orig_code))
*************** vectorizable_reduction (loop_vec_info lo
*** 8227,8233 ****
         || reduction_type == INTEGER_INDUC_COND_REDUCTION
         || reduction_type == CONST_COND_REDUCTION
         || reduction_type == EXTRACT_LAST_REDUCTION)
!       && slp_node
        && ncopies > 1)
      {
        if (dump_enabled_p ())
--- 8060,8066 ----
         || reduction_type == INTEGER_INDUC_COND_REDUCTION
         || reduction_type == CONST_COND_REDUCTION
         || reduction_type == EXTRACT_LAST_REDUCTION)
!       && 1
        && ncopies > 1)
      {
        if (dump_enabled_p ())
*************** vectorizable_reduction (loop_vec_info lo
*** 8236,8252 ****
        return false;
      }
  
-   if ((double_reduc || reduction_type != TREE_CODE_REDUCTION)
-       && !slp_node
-       && ncopies > 1)
-     {
-       if (dump_enabled_p ())
- 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- 			 "multiple types in double reduction or condition "
- 			 "reduction or fold-left reduction.\n");
-       return false;
-     }
- 
    internal_fn reduc_fn = IFN_LAST;
    if (reduction_type == TREE_CODE_REDUCTION
        || reduction_type == FOLD_LEFT_REDUCTION
--- 8069,8074 ----
*************** vectorizable_reduction (loop_vec_info lo
*** 8308,8321 ****
  
    /* For SLP reductions, see if there is a neutral value we can use.  */
    tree neutral_op = NULL_TREE;
!   if (slp_node)
!     {
!       tree initial_value = NULL_TREE;
!       if (REDUC_GROUP_FIRST_ELEMENT (stmt_info) != NULL)
! 	initial_value = vect_phi_initial_value (reduc_def_phi);
!       neutral_op = neutral_op_for_reduction (TREE_TYPE (vectype_out),
! 					     orig_code, initial_value);
!     }
  
    if (double_reduc && reduction_type == FOLD_LEFT_REDUCTION)
      {
--- 8130,8140 ----
  
    /* For SLP reductions, see if there is a neutral value we can use.  */
    tree neutral_op = NULL_TREE;
!   tree initial_value = NULL_TREE;
!   if (REDUC_GROUP_FIRST_ELEMENT (stmt_info) != NULL)
!     initial_value = vect_phi_initial_value (reduc_def_phi);
!   neutral_op = neutral_op_for_reduction (TREE_TYPE (vectype_out),
! 					 orig_code, initial_value);
  
    if (double_reduc && reduction_type == FOLD_LEFT_REDUCTION)
      {
*************** vectorizable_reduction (loop_vec_info lo
*** 8341,8347 ****
      }
  
    if (reduction_type == FOLD_LEFT_REDUCTION
!       && (slp_node && SLP_TREE_LANES (slp_node) > 1)
        && !REDUC_GROUP_FIRST_ELEMENT (stmt_info))
      {
        /* We cannot use in-order reductions in this case because there is
--- 8160,8166 ----
      }
  
    if (reduction_type == FOLD_LEFT_REDUCTION
!       && SLP_TREE_LANES (slp_node) > 1
        && !REDUC_GROUP_FIRST_ELEMENT (stmt_info))
      {
        /* We cannot use in-order reductions in this case because there is
*************** vectorizable_reduction (loop_vec_info lo
*** 8370,8377 ****
      }
  
    /* Check extra constraints for variable-length unchained SLP reductions.  */
!   if (slp_node
!       && !REDUC_GROUP_FIRST_ELEMENT (stmt_info)
        && !nunits_out.is_constant ())
      {
        /* We checked above that we could build the initial vector when
--- 8189,8195 ----
      }
  
    /* Check extra constraints for variable-length unchained SLP reductions.  */
!   if (!REDUC_GROUP_FIRST_ELEMENT (stmt_info)
        && !nunits_out.is_constant ())
      {
        /* We checked above that we could build the initial vector when
*************** vectorizable_reduction (loop_vec_info lo
*** 8465,8473 ****
     own reduction accumulator since one of the main goals of unrolling a
     reduction is to reduce the aggregate loop-carried latency.  */
    if (ncopies > 1
!       && (!slp_node
! 	  || (!REDUC_GROUP_FIRST_ELEMENT (stmt_info)
! 	      && SLP_TREE_LANES (slp_node) == 1))
        && (STMT_VINFO_RELEVANT (stmt_info) <= vect_used_only_live)
        && reduc_chain_length == 1
        && loop_vinfo->suggested_unroll_factor == 1)
--- 8283,8290 ----
     own reduction accumulator since one of the main goals of unrolling a
     reduction is to reduce the aggregate loop-carried latency.  */
    if (ncopies > 1
!       && !REDUC_GROUP_FIRST_ELEMENT (stmt_info)
!       && SLP_TREE_LANES (slp_node) == 1
        && (STMT_VINFO_RELEVANT (stmt_info) <= vect_used_only_live)
        && reduc_chain_length == 1
        && loop_vinfo->suggested_unroll_factor == 1)
*************** vectorizable_reduction (loop_vec_info lo
*** 8518,8525 ****
       reduction.  */
    single_defuse_cycle &= !lane_reducing;
  
!   if (slp_node
!       && (single_defuse_cycle || reduction_type == FOLD_LEFT_REDUCTION))
      for (i = 0; i < (int) op.num_ops; i++)
        if (!vect_maybe_update_slp_op_vectype (slp_op[i], vectype_op[i]))
  	{
--- 8335,8341 ----
       reduction.  */
    single_defuse_cycle &= !lane_reducing;
  
!   if (single_defuse_cycle || reduction_type == FOLD_LEFT_REDUCTION)
      for (i = 0; i < (int) op.num_ops; i++)
        if (!vect_maybe_update_slp_op_vectype (slp_op[i], vectype_op[i]))
  	{
*************** vectorizable_reduction (loop_vec_info lo
*** 8549,8555 ****
      {
        stmt_vec_info tem
  	= vect_stmt_to_vectorize (STMT_VINFO_REDUC_DEF (phi_info));
!       if (slp_node && REDUC_GROUP_FIRST_ELEMENT (tem))
  	{
  	  gcc_assert (!REDUC_GROUP_NEXT_ELEMENT (tem));
  	  tem = REDUC_GROUP_FIRST_ELEMENT (tem);
--- 8365,8371 ----
      {
        stmt_vec_info tem
  	= vect_stmt_to_vectorize (STMT_VINFO_REDUC_DEF (phi_info));
!       if (REDUC_GROUP_FIRST_ELEMENT (tem))
  	{
  	  gcc_assert (!REDUC_GROUP_NEXT_ELEMENT (tem));
  	  tem = REDUC_GROUP_FIRST_ELEMENT (tem);
*************** vect_emulate_mixed_dot_prod (loop_vec_in
*** 8645,8655 ****
  bool
  vect_transform_reduction (loop_vec_info loop_vinfo,
  			  stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
! 			  gimple **vec_stmt, slp_tree slp_node)
  {
    tree vectype_out = STMT_VINFO_VECTYPE (stmt_info);
    class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
-   unsigned ncopies;
    unsigned vec_num;
  
    stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
--- 8461,8470 ----
  bool
  vect_transform_reduction (loop_vec_info loop_vinfo,
  			  stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
! 			  slp_tree slp_node)
  {
    tree vectype_out = STMT_VINFO_VECTYPE (stmt_info);
    class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
    unsigned vec_num;
  
    stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
*************** vect_transform_reduction (loop_vec_info
*** 8677,8692 ****
    if (!vectype_in)
      vectype_in = STMT_VINFO_VECTYPE (stmt_info);
  
!   if (slp_node)
!     {
!       ncopies = 1;
!       vec_num = vect_get_num_copies (loop_vinfo, slp_node, vectype_in);
!     }
!   else
!     {
!       ncopies = vect_get_num_copies (loop_vinfo, vectype_in);
!       vec_num = 1;
!     }
  
    code_helper code = canonicalize_code (op.code, op.type);
    internal_fn cond_fn = get_conditional_internal_fn (code, op.type);
--- 8492,8498 ----
    if (!vectype_in)
      vectype_in = STMT_VINFO_VECTYPE (stmt_info);
  
!   vec_num = vect_get_num_copies (loop_vinfo, slp_node, vectype_in);
  
    code_helper code = canonicalize_code (op.code, op.type);
    internal_fn cond_fn = get_conditional_internal_fn (code, op.type);
*************** vect_transform_reduction (loop_vec_info
*** 8702,8711 ****
    if (dump_enabled_p ())
      dump_printf_loc (MSG_NOTE, vect_location, "transform reduction.\n");
  
-   /* FORNOW: Multiple types are not supported for condition.  */
-   if (code == COND_EXPR)
-     gcc_assert (ncopies == 1);
- 
    /* A binary COND_OP reduction must have the same definition and else
       value. */
    bool cond_fn_p = code.is_internal_fn ()
--- 8508,8513 ----
*************** vect_transform_reduction (loop_vec_info
*** 8729,8736 ****
        internal_fn reduc_fn = STMT_VINFO_REDUC_FN (reduc_info);
        gcc_assert (code.is_tree_code () || cond_fn_p);
        return vectorize_fold_left_reduction
! 	  (loop_vinfo, stmt_info, gsi, vec_stmt, slp_node, reduc_def_phi,
! 	   code, reduc_fn, op.ops, op.num_ops, vectype_in,
  	   reduc_index, masks, lens);
      }
  
--- 8531,8538 ----
        internal_fn reduc_fn = STMT_VINFO_REDUC_FN (reduc_info);
        gcc_assert (code.is_tree_code () || cond_fn_p);
        return vectorize_fold_left_reduction
! 	  (loop_vinfo, stmt_info, gsi, slp_node, reduc_def_phi,
! 	   code, reduc_fn, op.num_ops, vectype_in,
  	   reduc_index, masks, lens);
      }
  
*************** vect_transform_reduction (loop_vec_info
*** 8748,8780 ****
    tree scalar_dest = gimple_get_lhs (stmt_info->stmt);
    tree vec_dest = vect_create_destination_var (scalar_dest, vectype_out);
  
-   if (lane_reducing && !slp_node && !single_defuse_cycle)
-     {
-       /* Note: there are still vectorizable cases that can not be handled by
- 	 single-lane slp.  Probably it would take some time to evolve the
- 	 feature to a mature state.  So we have to keep the below non-slp code
- 	 path as failsafe for lane-reducing support.  */
-       gcc_assert (op.num_ops <= 3);
-       for (unsigned i = 0; i < op.num_ops; i++)
- 	{
- 	  unsigned oprnd_ncopies = ncopies;
- 
- 	  if ((int) i == reduc_index)
- 	    {
- 	      tree vectype = STMT_VINFO_VECTYPE (stmt_info);
- 	      oprnd_ncopies = vect_get_num_copies (loop_vinfo, vectype);
- 	    }
- 
- 	  vect_get_vec_defs_for_operand (loop_vinfo, stmt_info, oprnd_ncopies,
- 					 op.ops[i], &vec_oprnds[i]);
- 	}
-     }
    /* Get NCOPIES vector definitions for all operands except the reduction
       definition.  */
!   else if (!cond_fn_p)
      {
        gcc_assert (reduc_index >= 0 && reduc_index <= 2);
!       vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies,
  			 single_defuse_cycle && reduc_index == 0
  			 ? NULL_TREE : op.ops[0], &vec_oprnds[0],
  			 single_defuse_cycle && reduc_index == 1
--- 8550,8561 ----
    tree scalar_dest = gimple_get_lhs (stmt_info->stmt);
    tree vec_dest = vect_create_destination_var (scalar_dest, vectype_out);
  
    /* Get NCOPIES vector definitions for all operands except the reduction
       definition.  */
!   if (!cond_fn_p)
      {
        gcc_assert (reduc_index >= 0 && reduc_index <= 2);
!       vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, 1,
  			 single_defuse_cycle && reduc_index == 0
  			 ? NULL_TREE : op.ops[0], &vec_oprnds[0],
  			 single_defuse_cycle && reduc_index == 1
*************** vect_transform_reduction (loop_vec_info
*** 8789,8795 ****
  	 vectype.  */
        gcc_assert (single_defuse_cycle
  		  && (reduc_index == 1 || reduc_index == 2));
!       vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, op.ops[0],
  			 truth_type_for (vectype_in), &vec_oprnds[0],
  			 reduc_index == 1 ? NULL_TREE : op.ops[1],
  			 NULL_TREE, &vec_oprnds[1],
--- 8570,8576 ----
  	 vectype.  */
        gcc_assert (single_defuse_cycle
  		  && (reduc_index == 1 || reduc_index == 2));
!       vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, 1, op.ops[0],
  			 truth_type_for (vectype_in), &vec_oprnds[0],
  			 reduc_index == 1 ? NULL_TREE : op.ops[1],
  			 NULL_TREE, &vec_oprnds[1],
*************** vect_transform_reduction (loop_vec_info
*** 8945,8951 ****
  	     handle over the operand to other dependent statements.  */
  	  gcc_assert (reduc_vop);
  
! 	  if (slp_node && TREE_CODE (reduc_vop) == SSA_NAME
  	      && !SSA_NAME_IS_DEFAULT_DEF (reduc_vop))
  	    new_stmt = SSA_NAME_DEF_STMT (reduc_vop);
  	  else
--- 8726,8732 ----
  	     handle over the operand to other dependent statements.  */
  	  gcc_assert (reduc_vop);
  
! 	  if (TREE_CODE (reduc_vop) == SSA_NAME
  	      && !SSA_NAME_IS_DEFAULT_DEF (reduc_vop))
  	    new_stmt = SSA_NAME_DEF_STMT (reduc_vop);
  	  else
*************** vect_transform_reduction (loop_vec_info
*** 8969,8975 ****
  	      std::swap (vop[0], vop[1]);
  	    }
  	  tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					  vec_num * ncopies, vectype_in,
  					  mask_index++);
  	  gcall *call = gimple_build_call_internal (cond_fn, 4, mask,
  						    vop[0], vop[1], vop[0]);
--- 8750,8756 ----
  	      std::swap (vop[0], vop[1]);
  	    }
  	  tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					  vec_num, vectype_in,
  					  mask_index++);
  	  gcall *call = gimple_build_call_internal (cond_fn, 4, mask,
  						    vop[0], vop[1], vop[0]);
*************** vect_transform_reduction (loop_vec_info
*** 8987,8993 ****
  	  if (masked_loop_p && mask_by_cond_expr)
  	    {
  	      tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					      vec_num * ncopies, vectype_in,
  					      mask_index++);
  	      build_vect_cond_expr (code, vop, mask, gsi);
  	    }
--- 8768,8774 ----
  	  if (masked_loop_p && mask_by_cond_expr)
  	    {
  	      tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					      vec_num, vectype_in,
  					      mask_index++);
  	      build_vect_cond_expr (code, vop, mask, gsi);
  	    }
*************** vect_transform_reduction (loop_vec_info
*** 9015,9029 ****
  
        if (single_defuse_cycle && i < num - 1)
  	vec_oprnds[reduc_index].safe_push (gimple_get_lhs (new_stmt));
-       else if (slp_node)
- 	slp_node->push_vec_def (new_stmt);
        else
! 	STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_stmt);
      }
  
-   if (!slp_node)
-     *vec_stmt = STMT_VINFO_VEC_STMTS (stmt_info)[0];
- 
    return true;
  }
  
--- 8796,8805 ----
  
        if (single_defuse_cycle && i < num - 1)
  	vec_oprnds[reduc_index].safe_push (gimple_get_lhs (new_stmt));
        else
! 	slp_node->push_vec_def (new_stmt);
      }
  
    return true;
  }
  
*************** vect_transform_reduction (loop_vec_info
*** 9031,9044 ****
  
  bool
  vect_transform_cycle_phi (loop_vec_info loop_vinfo,
! 			  stmt_vec_info stmt_info, gimple **vec_stmt,
  			  slp_tree slp_node, slp_instance slp_node_instance)
  {
    tree vectype_out = STMT_VINFO_VECTYPE (stmt_info);
    class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
    int i;
-   int ncopies;
-   int j;
    bool nested_cycle = false;
    int vec_num;
  
--- 8807,8818 ----
  
  bool
  vect_transform_cycle_phi (loop_vec_info loop_vinfo,
! 			  stmt_vec_info stmt_info,
  			  slp_tree slp_node, slp_instance slp_node_instance)
  {
    tree vectype_out = STMT_VINFO_VECTYPE (stmt_info);
    class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
    int i;
    bool nested_cycle = false;
    int vec_num;
  
*************** vect_transform_cycle_phi (loop_vec_info
*** 9058,9082 ****
      /* Leave the scalar phi in place.  */
      return true;
  
!   if (slp_node)
!     {
!       vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
!       ncopies = 1;
!     }
!   else
!     {
!       vec_num = 1;
!       ncopies = vect_get_num_copies (loop_vinfo,
! 				     STMT_VINFO_VECTYPE (stmt_info));
!     }
  
    /* Check whether we should use a single PHI node and accumulate
       vectors to one before the backedge.  */
    if (STMT_VINFO_FORCE_SINGLE_CYCLE (reduc_info))
!     {
!       ncopies = 1;
!       vec_num = 1;
!     }
  
    /* Create the destination vector  */
    gphi *phi = as_a <gphi *> (stmt_info->stmt);
--- 8832,8843 ----
      /* Leave the scalar phi in place.  */
      return true;
  
!   vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
  
    /* Check whether we should use a single PHI node and accumulate
       vectors to one before the backedge.  */
    if (STMT_VINFO_FORCE_SINGLE_CYCLE (reduc_info))
!     vec_num = 1;
  
    /* Create the destination vector  */
    gphi *phi = as_a <gphi *> (stmt_info->stmt);
*************** vect_transform_cycle_phi (loop_vec_info
*** 9086,9243 ****
    /* Get the loop-entry arguments.  */
    tree vec_initial_def = NULL_TREE;
    auto_vec<tree> vec_initial_defs;
!   if (slp_node)
      {
!       vec_initial_defs.reserve (vec_num);
!       /* Optimize: if initial_def is for REDUC_MAX smaller than the base
! 	 and we can't use zero for induc_val, use initial_def.  Similarly
! 	 for REDUC_MIN and initial_def larger than the base.  */
!       if (STMT_VINFO_REDUC_TYPE (reduc_info) == INTEGER_INDUC_COND_REDUCTION)
! 	{
! 	  gcc_assert (SLP_TREE_LANES (slp_node) == 1);
! 	  tree initial_def = vect_phi_initial_value (phi);
! 	  reduc_info->reduc_initial_values.safe_push (initial_def);
! 	  tree induc_val = STMT_VINFO_VEC_INDUC_COND_INITIAL_VAL (reduc_info);
! 	  if (TREE_CODE (initial_def) == INTEGER_CST
! 	      && !integer_zerop (induc_val)
! 	      && ((STMT_VINFO_REDUC_CODE (reduc_info) == MAX_EXPR
! 		   && tree_int_cst_lt (initial_def, induc_val))
! 		  || (STMT_VINFO_REDUC_CODE (reduc_info) == MIN_EXPR
! 		      && tree_int_cst_lt (induc_val, initial_def))))
! 	    {
! 	      induc_val = initial_def;
! 	      /* Communicate we used the initial_def to epilouge
! 		 generation.  */
! 	      STMT_VINFO_VEC_INDUC_COND_INITIAL_VAL (reduc_info) = NULL_TREE;
! 	    }
! 	  vec_initial_defs.quick_push
! 	    (build_vector_from_val (vectype_out, induc_val));
! 	}
!       else if (nested_cycle)
! 	{
! 	  unsigned phi_idx = loop_preheader_edge (loop)->dest_idx;
! 	  vect_get_slp_defs (SLP_TREE_CHILDREN (slp_node)[phi_idx],
! 			     &vec_initial_defs);
! 	}
!       else
  	{
! 	  gcc_assert (slp_node == slp_node_instance->reduc_phis);
! 	  vec<tree> &initial_values = reduc_info->reduc_initial_values;
! 	  vec<stmt_vec_info> &stmts = SLP_TREE_SCALAR_STMTS (slp_node);
! 
! 	  unsigned int num_phis = stmts.length ();
! 	  if (REDUC_GROUP_FIRST_ELEMENT (reduc_stmt_info))
! 	    num_phis = 1;
! 	  initial_values.reserve (num_phis);
! 	  for (unsigned int i = 0; i < num_phis; ++i)
! 	    {
! 	      gphi *this_phi = as_a<gphi *> (stmts[i]->stmt);
! 	      initial_values.quick_push (vect_phi_initial_value (this_phi));
! 	    }
! 	  if (vec_num == 1)
! 	    vect_find_reusable_accumulator (loop_vinfo, reduc_info);
! 	  if (!initial_values.is_empty ())
! 	    {
! 	      tree initial_value
! 		= (num_phis == 1 ? initial_values[0] : NULL_TREE);
! 	      code_helper code = STMT_VINFO_REDUC_CODE (reduc_info);
! 	      tree neutral_op
! 		= neutral_op_for_reduction (TREE_TYPE (vectype_out),
! 					    code, initial_value);
! 	      /* Try to simplify the vector initialization by applying an
! 		 adjustment after the reduction has been performed.  This
! 		 can also break a critical path but on the other hand
! 		 requires to keep the initial value live across the loop.  */
! 	      if (neutral_op
! 		  && initial_values.length () == 1
! 		  && !reduc_info->reused_accumulator
! 		  && STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def
! 		  && !operand_equal_p (neutral_op, initial_values[0]))
! 		{
! 		  STMT_VINFO_REDUC_EPILOGUE_ADJUSTMENT (reduc_info)
! 		    = initial_values[0];
! 		  initial_values[0] = neutral_op;
! 		}
! 	      get_initial_defs_for_reduction (loop_vinfo, reduc_info,
! 					      &vec_initial_defs, vec_num,
! 					      stmts.length (), neutral_op);
! 	    }
  	}
      }
    else
      {
!       /* Get at the scalar def before the loop, that defines the initial
! 	 value of the reduction variable.  */
!       tree initial_def = vect_phi_initial_value (phi);
!       reduc_info->reduc_initial_values.safe_push (initial_def);
!       /* Optimize: if initial_def is for REDUC_MAX smaller than the base
! 	 and we can't use zero for induc_val, use initial_def.  Similarly
! 	 for REDUC_MIN and initial_def larger than the base.  */
!       if (STMT_VINFO_REDUC_TYPE (reduc_info) == INTEGER_INDUC_COND_REDUCTION)
! 	{
! 	  tree induc_val = STMT_VINFO_VEC_INDUC_COND_INITIAL_VAL (reduc_info);
! 	  if (TREE_CODE (initial_def) == INTEGER_CST
! 	      && !integer_zerop (induc_val)
! 	      && ((STMT_VINFO_REDUC_CODE (reduc_info) == MAX_EXPR
! 		   && tree_int_cst_lt (initial_def, induc_val))
! 		  || (STMT_VINFO_REDUC_CODE (reduc_info) == MIN_EXPR
! 		      && tree_int_cst_lt (induc_val, initial_def))))
! 	    {
! 	      induc_val = initial_def;
! 	      /* Communicate we used the initial_def to epilouge
! 		 generation.  */
! 	      STMT_VINFO_VEC_INDUC_COND_INITIAL_VAL (reduc_info) = NULL_TREE;
! 	    }
! 	  vec_initial_def = build_vector_from_val (vectype_out, induc_val);
! 	}
!       else if (nested_cycle)
  	{
! 	  /* Do not use an adjustment def as that case is not supported
! 	     correctly if ncopies is not one.  */
! 	  vect_get_vec_defs_for_operand (loop_vinfo, reduc_stmt_info,
! 					 ncopies, initial_def,
! 					 &vec_initial_defs);
  	}
!       else if (STMT_VINFO_REDUC_TYPE (reduc_info) == CONST_COND_REDUCTION
! 	       || STMT_VINFO_REDUC_TYPE (reduc_info) == COND_REDUCTION)
! 	/* Fill the initial vector with the initial scalar value.  */
! 	vec_initial_def
! 	  = get_initial_def_for_reduction (loop_vinfo, reduc_stmt_info,
! 					   initial_def, initial_def);
!       else
  	{
! 	  if (ncopies == 1)
! 	    vect_find_reusable_accumulator (loop_vinfo, reduc_info);
! 	  if (!reduc_info->reduc_initial_values.is_empty ())
  	    {
! 	      initial_def = reduc_info->reduc_initial_values[0];
! 	      code_helper code = STMT_VINFO_REDUC_CODE (reduc_info);
! 	      tree neutral_op
! 		= neutral_op_for_reduction (TREE_TYPE (initial_def),
! 					    code, initial_def);
! 	      gcc_assert (neutral_op);
! 	      /* Try to simplify the vector initialization by applying an
! 		 adjustment after the reduction has been performed.  */
! 	      if (!reduc_info->reused_accumulator
! 		  && STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def
! 		  && !operand_equal_p (neutral_op, initial_def))
! 		{
! 		  STMT_VINFO_REDUC_EPILOGUE_ADJUSTMENT (reduc_info)
! 		    = initial_def;
! 		  initial_def = neutral_op;
! 		}
! 	      vec_initial_def
! 		= get_initial_def_for_reduction (loop_vinfo, reduc_info,
! 						 initial_def, neutral_op);
  	    }
  	}
      }
  
    if (vec_initial_def)
      {
!       vec_initial_defs.create (ncopies);
!       for (i = 0; i < ncopies; ++i)
! 	vec_initial_defs.quick_push (vec_initial_def);
      }
  
    if (auto *accumulator = reduc_info->reused_accumulator)
--- 8847,8932 ----
    /* Get the loop-entry arguments.  */
    tree vec_initial_def = NULL_TREE;
    auto_vec<tree> vec_initial_defs;
!   vec_initial_defs.reserve (vec_num);
!   /* Optimize: if initial_def is for REDUC_MAX smaller than the base
!      and we can't use zero for induc_val, use initial_def.  Similarly
!      for REDUC_MIN and initial_def larger than the base.  */
!   if (STMT_VINFO_REDUC_TYPE (reduc_info) == INTEGER_INDUC_COND_REDUCTION)
      {
!       gcc_assert (SLP_TREE_LANES (slp_node) == 1);
!       tree initial_def = vect_phi_initial_value (phi);
!       reduc_info->reduc_initial_values.safe_push (initial_def);
!       tree induc_val = STMT_VINFO_VEC_INDUC_COND_INITIAL_VAL (reduc_info);
!       if (TREE_CODE (initial_def) == INTEGER_CST
! 	  && !integer_zerop (induc_val)
! 	  && ((STMT_VINFO_REDUC_CODE (reduc_info) == MAX_EXPR
! 	       && tree_int_cst_lt (initial_def, induc_val))
! 	      || (STMT_VINFO_REDUC_CODE (reduc_info) == MIN_EXPR
! 		  && tree_int_cst_lt (induc_val, initial_def))))
  	{
! 	  induc_val = initial_def;
! 	  /* Communicate we used the initial_def to epilouge
! 	     generation.  */
! 	  STMT_VINFO_VEC_INDUC_COND_INITIAL_VAL (reduc_info) = NULL_TREE;
  	}
+       vec_initial_defs.quick_push
+ 	(build_vector_from_val (vectype_out, induc_val));
+     }
+   else if (nested_cycle)
+     {
+       unsigned phi_idx = loop_preheader_edge (loop)->dest_idx;
+       vect_get_slp_defs (SLP_TREE_CHILDREN (slp_node)[phi_idx],
+ 			 &vec_initial_defs);
      }
    else
      {
!       gcc_assert (slp_node == slp_node_instance->reduc_phis);
!       vec<tree> &initial_values = reduc_info->reduc_initial_values;
!       vec<stmt_vec_info> &stmts = SLP_TREE_SCALAR_STMTS (slp_node);
! 
!       unsigned int num_phis = stmts.length ();
!       if (REDUC_GROUP_FIRST_ELEMENT (reduc_stmt_info))
! 	num_phis = 1;
!       initial_values.reserve (num_phis);
!       for (unsigned int i = 0; i < num_phis; ++i)
  	{
! 	  gphi *this_phi = as_a<gphi *> (stmts[i]->stmt);
! 	  initial_values.quick_push (vect_phi_initial_value (this_phi));
  	}
!       if (vec_num == 1)
! 	vect_find_reusable_accumulator (loop_vinfo, reduc_info);
!       if (!initial_values.is_empty ())
  	{
! 	  tree initial_value
! 	    = (num_phis == 1 ? initial_values[0] : NULL_TREE);
! 	  code_helper code = STMT_VINFO_REDUC_CODE (reduc_info);
! 	  tree neutral_op
! 	    = neutral_op_for_reduction (TREE_TYPE (vectype_out),
! 					code, initial_value);
! 	  /* Try to simplify the vector initialization by applying an
! 	     adjustment after the reduction has been performed.  This
! 	     can also break a critical path but on the other hand
! 	     requires to keep the initial value live across the loop.  */
! 	  if (neutral_op
! 	      && initial_values.length () == 1
! 	      && !reduc_info->reused_accumulator
! 	      && STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def
! 	      && !operand_equal_p (neutral_op, initial_values[0]))
  	    {
! 	      STMT_VINFO_REDUC_EPILOGUE_ADJUSTMENT (reduc_info)
! 		= initial_values[0];
! 	      initial_values[0] = neutral_op;
  	    }
+ 	  get_initial_defs_for_reduction (loop_vinfo, reduc_info,
+ 					  &vec_initial_defs, vec_num,
+ 					  stmts.length (), neutral_op);
  	}
      }
  
    if (vec_initial_def)
      {
!       vec_initial_defs.create (1);
!       vec_initial_defs.quick_push (vec_initial_def);
      }
  
    if (auto *accumulator = reduc_info->reused_accumulator)
*************** vect_transform_cycle_phi (loop_vec_info
*** 9312,9340 ****
    for (i = 0; i < vec_num; i++)
      {
        tree vec_init_def = vec_initial_defs[i];
!       for (j = 0; j < ncopies; j++)
! 	{
! 	  /* Create the reduction-phi that defines the reduction
! 	     operand.  */
! 	  gphi *new_phi = create_phi_node (vec_dest, loop->header);
! 
! 	  /* Set the loop-entry arg of the reduction-phi.  */
! 	  if (j != 0 && nested_cycle)
! 	    vec_init_def = vec_initial_defs[j];
! 	  add_phi_arg (new_phi, vec_init_def, loop_preheader_edge (loop),
! 		       UNKNOWN_LOCATION);
  
! 	  /* The loop-latch arg is set in epilogue processing.  */
  
! 	  if (slp_node)
! 	    slp_node->push_vec_def (new_phi);
! 	  else
! 	    {
! 	      if (j == 0)
! 		*vec_stmt = new_phi;
! 	      STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_phi);
! 	    }
! 	}
      }
  
    return true;
--- 9001,9015 ----
    for (i = 0; i < vec_num; i++)
      {
        tree vec_init_def = vec_initial_defs[i];
!       /* Create the reduction-phi that defines the reduction
! 	 operand.  */
!       gphi *new_phi = create_phi_node (vec_dest, loop->header);
!       add_phi_arg (new_phi, vec_init_def, loop_preheader_edge (loop),
! 		   UNKNOWN_LOCATION);
  
!       /* The loop-latch arg is set in epilogue processing.  */
  
!       slp_node->push_vec_def (new_phi);
      }
  
    return true;
*************** vect_transform_cycle_phi (loop_vec_info
*** 9344,9350 ****
  
  bool
  vectorizable_lc_phi (loop_vec_info loop_vinfo,
! 		     stmt_vec_info stmt_info, gimple **vec_stmt,
  		     slp_tree slp_node)
  {
    if (!loop_vinfo
--- 9019,9025 ----
  
  bool
  vectorizable_lc_phi (loop_vec_info loop_vinfo,
! 		     stmt_vec_info stmt_info,
  		     slp_tree slp_node)
  {
    if (!loop_vinfo
*************** vectorizable_lc_phi (loop_vec_info loop_
*** 9356,9377 ****
        && STMT_VINFO_DEF_TYPE (stmt_info) != vect_double_reduction_def)
      return false;
  
!   if (!vec_stmt) /* transformation not required.  */
      {
!       /* Deal with copies from externs or constants that disguise as
! 	 loop-closed PHI nodes (PR97886).  */
!       if (slp_node
! 	  && !vect_maybe_update_slp_op_vectype (SLP_TREE_CHILDREN (slp_node)[0],
! 						SLP_TREE_VECTYPE (slp_node)))
! 	{
! 	  if (dump_enabled_p ())
! 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			     "incompatible vector types for invariants\n");
! 	  return false;
! 	}
!       STMT_VINFO_TYPE (stmt_info) = lc_phi_info_type;
!       return true;
      }
  
    tree vectype = STMT_VINFO_VECTYPE (stmt_info);
    tree scalar_dest = gimple_phi_result (stmt_info->stmt);
--- 9031,9055 ----
        && STMT_VINFO_DEF_TYPE (stmt_info) != vect_double_reduction_def)
      return false;
  
!   /* Deal with copies from externs or constants that disguise as
!      loop-closed PHI nodes (PR97886).  */
!   if (!vect_maybe_update_slp_op_vectype (SLP_TREE_CHILDREN (slp_node)[0],
! 					 SLP_TREE_VECTYPE (slp_node)))
      {
!       if (dump_enabled_p ())
! 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			 "incompatible vector types for invariants\n");
!       return false;
      }
+   STMT_VINFO_TYPE (stmt_info) = lc_phi_info_type;
+   return true;
+ }
+ 
+ bool
+ vect_transform_lc_phi (loop_vec_info loop_vinfo,
+ 		       stmt_vec_info stmt_info,
+ 		       slp_tree slp_node)
+ {
  
    tree vectype = STMT_VINFO_VECTYPE (stmt_info);
    tree scalar_dest = gimple_phi_result (stmt_info->stmt);
*************** vectorizable_lc_phi (loop_vec_info loop_
*** 9379,9399 ****
    edge e = single_pred_edge (bb);
    tree vec_dest = vect_create_destination_var (scalar_dest, vectype);
    auto_vec<tree> vec_oprnds;
!   vect_get_vec_defs (loop_vinfo, stmt_info, slp_node,
! 		     !slp_node ? vect_get_num_copies (loop_vinfo, vectype) : 1,
  		     gimple_phi_arg_def (stmt_info->stmt, 0), &vec_oprnds);
    for (unsigned i = 0; i < vec_oprnds.length (); i++)
      {
        /* Create the vectorized LC PHI node.  */
        gphi *new_phi = create_phi_node (vec_dest, bb);
        add_phi_arg (new_phi, vec_oprnds[i], e, UNKNOWN_LOCATION);
!       if (slp_node)
! 	slp_node->push_vec_def (new_phi);
!       else
! 	STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_phi);
      }
-   if (!slp_node)
-     *vec_stmt = STMT_VINFO_VEC_STMTS (stmt_info)[0];
  
    return true;
  }
--- 9057,9071 ----
    edge e = single_pred_edge (bb);
    tree vec_dest = vect_create_destination_var (scalar_dest, vectype);
    auto_vec<tree> vec_oprnds;
!   vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, 1,
  		     gimple_phi_arg_def (stmt_info->stmt, 0), &vec_oprnds);
    for (unsigned i = 0; i < vec_oprnds.length (); i++)
      {
        /* Create the vectorized LC PHI node.  */
        gphi *new_phi = create_phi_node (vec_dest, bb);
        add_phi_arg (new_phi, vec_oprnds[i], e, UNKNOWN_LOCATION);
!       slp_node->push_vec_def (new_phi);
      }
  
    return true;
  }
*************** update_epilogue_loop_vinfo (class loop *
*** 12203,12209 ****
  	      gimple *stmt = STMT_VINFO_STMT (related_vinfo);
  	      stmt_worklist.safe_push (stmt);
  	      /* Set BB such that the assert in
! 		'get_initial_def_for_reduction' is able to determine that
  		the BB of the related stmt is inside this loop.  */
  	      gimple_set_bb (stmt,
  			     gimple_bb (new_stmt));
--- 11875,11881 ----
  	      gimple *stmt = STMT_VINFO_STMT (related_vinfo);
  	      stmt_worklist.safe_push (stmt);
  	      /* Set BB such that the assert in
! 		'get_initial_defs_for_reduction' is able to determine that
  		the BB of the related stmt is inside this loop.  */
  	      gimple_set_bb (stmt,
  			     gimple_bb (new_stmt));
diff -Nrcpad gcc-16-20250504/gcc/tree-vect-slp.cc gcc-16-20250511/gcc/tree-vect-slp.cc
*** gcc-16-20250504/gcc/tree-vect-slp.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-vect-slp.cc	Sun May 11 22:32:39 2025
*************** _slp_tree::_slp_tree ()
*** 122,127 ****
--- 122,128 ----
    SLP_TREE_DEF_TYPE (this) = vect_uninitialized_def;
    SLP_TREE_CODE (this) = ERROR_MARK;
    this->ldst_lanes = false;
+   this->avoid_stlf_fail = false;
    SLP_TREE_VECTYPE (this) = NULL_TREE;
    SLP_TREE_REPRESENTATIVE (this) = NULL;
    SLP_TREE_MEMORY_ACCESS_TYPE (this) = VMAT_INVARIANT;
*************** out:
*** 2616,2628 ****
        if (oprnds_info[0]->def_stmts[0]
  	  && is_a<gassign *> (oprnds_info[0]->def_stmts[0]->stmt))
  	code = gimple_assign_rhs_code (oprnds_info[0]->def_stmts[0]->stmt);
  
        for (unsigned j = 0; j < group_size; ++j)
  	{
  	  FOR_EACH_VEC_ELT (oprnds_info, i, oprnd_info)
  	    {
  	      stmt_vec_info stmt_info = oprnd_info->def_stmts[j];
! 	      if (!stmt_info || !stmt_info->stmt
  		  || !is_a<gassign *> (stmt_info->stmt)
  		  || gimple_assign_rhs_code (stmt_info->stmt) != code
  		  || skip_args[i])
--- 2617,2630 ----
        if (oprnds_info[0]->def_stmts[0]
  	  && is_a<gassign *> (oprnds_info[0]->def_stmts[0]->stmt))
  	code = gimple_assign_rhs_code (oprnds_info[0]->def_stmts[0]->stmt);
+       basic_block bb = nullptr;
  
        for (unsigned j = 0; j < group_size; ++j)
  	{
  	  FOR_EACH_VEC_ELT (oprnds_info, i, oprnd_info)
  	    {
  	      stmt_vec_info stmt_info = oprnd_info->def_stmts[j];
! 	      if (!stmt_info
  		  || !is_a<gassign *> (stmt_info->stmt)
  		  || gimple_assign_rhs_code (stmt_info->stmt) != code
  		  || skip_args[i])
*************** out:
*** 2630,2635 ****
--- 2632,2645 ----
  		  success = false;
  		  break;
  		}
+ 	      /* Avoid mixing lanes with defs in different basic-blocks.  */
+ 	      if (!bb)
+ 		bb = gimple_bb (vect_orig_stmt (stmt_info)->stmt);
+ 	      else if (gimple_bb (vect_orig_stmt (stmt_info)->stmt) != bb)
+ 		{
+ 		  success = false;
+ 		  break;
+ 		}
  
  	      bool exists;
  	      unsigned &stmt_idx
*************** vect_print_slp_tree (dump_flags_t dump_k
*** 3104,3110 ****
  					 SLP_TREE_REF_COUNT (node));
    if (SLP_TREE_VECTYPE (node))
      dump_printf (metadata, " %T", SLP_TREE_VECTYPE (node));
!   dump_printf (metadata, "\n");
    if (SLP_TREE_DEF_TYPE (node) == vect_internal_def)
      {
        if (SLP_TREE_CODE (node) == VEC_PERM_EXPR)
--- 3114,3121 ----
  					 SLP_TREE_REF_COUNT (node));
    if (SLP_TREE_VECTYPE (node))
      dump_printf (metadata, " %T", SLP_TREE_VECTYPE (node));
!   dump_printf (metadata, "%s\n",
! 	       node->avoid_stlf_fail ? " (avoid-stlf-fail)" : "");
    if (SLP_TREE_DEF_TYPE (node) == vect_internal_def)
      {
        if (SLP_TREE_CODE (node) == VEC_PERM_EXPR)
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5040,5053 ****
  	    vec<stmt_vec_info> roots = vNULL;
  	    vec<tree> remain = vNULL;
  	    gphi *phi = as_a<gphi *> (STMT_VINFO_STMT (stmt_info));
- 	    stmts.create (1);
  	    tree def = gimple_phi_arg_def_from_edge (phi, latch_e);
  	    stmt_vec_info lc_info = loop_vinfo->lookup_def (def);
! 	    stmts.quick_push (vect_stmt_to_vectorize (lc_info));
! 	    vect_build_slp_instance (vinfo, slp_inst_kind_reduc_group,
! 				     stmts, roots, remain,
! 				     max_tree_size, &limit,
! 				     bst_map, NULL, force_single_lane);
  	    /* When the latch def is from a different cycle this can only
  	       be a induction.  Build a simple instance for this.
  	       ???  We should be able to start discovery from the PHI
--- 5051,5067 ----
  	    vec<stmt_vec_info> roots = vNULL;
  	    vec<tree> remain = vNULL;
  	    gphi *phi = as_a<gphi *> (STMT_VINFO_STMT (stmt_info));
  	    tree def = gimple_phi_arg_def_from_edge (phi, latch_e);
  	    stmt_vec_info lc_info = loop_vinfo->lookup_def (def);
! 	    if (lc_info)
! 	      {
! 		stmts.create (1);
! 		stmts.quick_push (vect_stmt_to_vectorize (lc_info));
! 		vect_build_slp_instance (vinfo, slp_inst_kind_reduc_group,
! 					 stmts, roots, remain,
! 					 max_tree_size, &limit,
! 					 bst_map, NULL, force_single_lane);
! 	      }
  	    /* When the latch def is from a different cycle this can only
  	       be a induction.  Build a simple instance for this.
  	       ???  We should be able to start discovery from the PHI
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5057,5064 ****
  	    tem.quick_push (stmt_info);
  	    if (!bst_map->get (tem))
  	      {
- 		gcc_assert (STMT_VINFO_DEF_TYPE (stmt_info)
- 			    == vect_induction_def);
  		stmts.create (1);
  		stmts.quick_push (stmt_info);
  		vect_build_slp_instance (vinfo, slp_inst_kind_reduc_group,
--- 5071,5076 ----
*************** vect_slp_analyze_node_operations_1 (vec_
*** 7832,7852 ****
  			    node, node_instance, cost_vec);
  }
  
  /* Verify if we can externalize a set of internal defs.  */
  
  static bool
  vect_slp_can_convert_to_external (const vec<stmt_vec_info> &stmts)
  {
    basic_block bb = NULL;
    for (stmt_vec_info stmt : stmts)
!     if (!stmt)
!       return false;
!     /* Constant generation uses get_later_stmt which can only handle
!        defs from the same BB.  */
!     else if (!bb)
!       bb = gimple_bb (stmt->stmt);
!     else if (gimple_bb (stmt->stmt) != bb)
        return false;
    return true;
  }
  
--- 7844,7913 ----
  			    node, node_instance, cost_vec);
  }
  
+ static int
+ sort_ints (const void *a_, const void *b_)
+ {
+   int a = *(const int *)a_;
+   int b = *(const int *)b_;
+   return a - b;
+ }
+ 
  /* Verify if we can externalize a set of internal defs.  */
  
  static bool
  vect_slp_can_convert_to_external (const vec<stmt_vec_info> &stmts)
  {
+   /* Constant generation uses get_later_stmt which can only handle
+      defs from the same BB or a set of defs that can be ordered
+      with a dominance query.  */
    basic_block bb = NULL;
+   bool all_same = true;
+   auto_vec<int> bbs;
+   bbs.reserve_exact (stmts.length ());
    for (stmt_vec_info stmt : stmts)
!     {
!       if (!stmt)
! 	return false;
!       else if (!bb)
! 	bb = gimple_bb (stmt->stmt);
!       else if (gimple_bb (stmt->stmt) != bb)
! 	all_same = false;
!       bbs.quick_push (gimple_bb (stmt->stmt)->index);
!     }
!   if (all_same)
!     return true;
! 
!   /* Produce a vector of unique BB indexes for the defs.  */
!   bbs.qsort (sort_ints);
!   unsigned i, j;
!   for (i = 1, j = 1; i < bbs.length (); ++i)
!     if (bbs[i] != bbs[j-1])
!       bbs[j++] = bbs[i];
!   gcc_assert (j >= 2);
!   bbs.truncate (j);
! 
!   if (bbs.length () == 2)
!     return (dominated_by_p (CDI_DOMINATORS,
! 			    BASIC_BLOCK_FOR_FN (cfun, bbs[0]),
! 			    BASIC_BLOCK_FOR_FN (cfun, bbs[1]))
! 	    || dominated_by_p (CDI_DOMINATORS,
! 			       BASIC_BLOCK_FOR_FN (cfun, bbs[1]),
! 			       BASIC_BLOCK_FOR_FN (cfun, bbs[0])));
! 
!   /* ???  For more than two BBs we can sort the vector and verify the
!      result is a total order.  But we can't use vec::qsort with a
!      compare function using a dominance query since there's no way to
!      signal failure and any fallback for an unordered pair would
!      fail qsort_chk later.
!      For now simply hope that ordering after BB index provides the
!      best candidate total order.  If required we can implement our
!      own mergesort or export an entry without checking.  */
!   for (unsigned i = 1; i < bbs.length (); ++i)
!     if (!dominated_by_p (CDI_DOMINATORS,
! 			 BASIC_BLOCK_FOR_FN (cfun, bbs[i]),
! 			 BASIC_BLOCK_FOR_FN (cfun, bbs[i-1])))
        return false;
+ 
    return true;
  }
  
diff -Nrcpad gcc-16-20250504/gcc/tree-vect-stmts.cc gcc-16-20250511/gcc/tree-vect-stmts.cc
*** gcc-16-20250504/gcc/tree-vect-stmts.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-vect-stmts.cc	Sun May 11 22:32:39 2025
*************** vect_stmt_relevant_p (stmt_vec_info stmt
*** 419,436 ****
  	}
      }
  
!   /* Check if it's an induction and multiple exits.  In this case there will be
!      a usage later on after peeling which is needed for the alternate exit.  */
    if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
!       && STMT_VINFO_DEF_TYPE (stmt_info) == vect_induction_def)
      {
        if (dump_enabled_p ())
! 	  dump_printf_loc (MSG_NOTE, vect_location,
! 			   "vec_stmt_relevant_p: induction forced for "
! 			   "early break.\n");
        LOOP_VINFO_EARLY_BREAKS_LIVE_IVS (loop_vinfo).safe_push (stmt_info);
        *live_p = true;
- 
      }
  
    if (*live_p && *relevant == vect_unused_in_scope
--- 419,440 ----
  	}
      }
  
!   /* Check if it's a not live PHI and multiple exits.  In this case
!      there will be a usage later on after peeling which is needed for the
!      alternate exit.  */
    if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
!       && is_a <gphi *> (stmt)
!       && gimple_bb (stmt) == LOOP_VINFO_LOOP (loop_vinfo)->header
!       && ((! VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (stmt_info))
! 	  && ! *live_p)
! 	  || STMT_VINFO_DEF_TYPE (stmt_info) == vect_induction_def))
      {
        if (dump_enabled_p ())
! 	dump_printf_loc (MSG_NOTE, vect_location,
! 			 "vec_stmt_relevant_p: PHI forced live for "
! 			 "early break.\n");
        LOOP_VINFO_EARLY_BREAKS_LIVE_IVS (loop_vinfo).safe_push (stmt_info);
        *live_p = true;
      }
  
    if (*live_p && *relevant == vect_unused_in_scope
*************** vect_mark_stmts_to_be_vectorized (loop_v
*** 714,719 ****
--- 718,725 ----
        bb = bbs[i];
        for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
  	{
+ 	  if (virtual_operand_p (gimple_phi_result (gsi_stmt (si))))
+ 	    continue;
  	  stmt_vec_info phi_info = loop_vinfo->lookup_stmt (gsi_stmt (si));
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_NOTE, vect_location, "init: phi relevant? %G",
*************** get_group_load_store_type (vec_info *vin
*** 2134,2139 ****
--- 2140,2153 ----
  			    : vect_store_lanes_supported (vectype, group_size,
  							  masked_p))) != IFN_LAST)
  	    *memory_access_type = VMAT_LOAD_STORE_LANES;
+ 	  else if (!loop_vinfo && slp_node->avoid_stlf_fail)
+ 	    {
+ 	      *memory_access_type = VMAT_ELEMENTWISE;
+ 	      if (dump_enabled_p ())
+ 		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 				 "using element-wise load to avoid disrupting "
+ 				 "cross iteration store-to-load forwarding\n");
+ 	    }
  	  else
  	    *memory_access_type = VMAT_CONTIGUOUS;
  
*************** vectorizable_operation (vec_info *vinfo,
*** 6798,6804 ****
    poly_uint64 nunits_in;
    poly_uint64 nunits_out;
    tree vectype_out;
-   unsigned int ncopies;
    int vec_num;
    int i;
    vec<tree> vec_oprnds0 = vNULL;
--- 6812,6817 ----
*************** vectorizable_operation (vec_info *vinfo,
*** 6859,6865 ****
      }
  
    scalar_dest = gimple_assign_lhs (stmt);
!   vectype_out = STMT_VINFO_VECTYPE (stmt_info);
  
    /* Most operations cannot handle bit-precision types without extra
       truncations.  */
--- 6872,6878 ----
      }
  
    scalar_dest = gimple_assign_lhs (stmt);
!   vectype_out = SLP_TREE_VECTYPE (slp_node);
  
    /* Most operations cannot handle bit-precision types without extra
       truncations.  */
*************** vectorizable_operation (vec_info *vinfo,
*** 6970,6989 ****
      }
  
    /* Multiple types in SLP are handled by creating the appropriate number of
!      vectorized stmts for each SLP node.  Hence, NCOPIES is always 1 in
!      case of SLP.  */
!   if (slp_node)
!     {
!       ncopies = 1;
!       vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
!     }
!   else
!     {
!       ncopies = vect_get_num_copies (loop_vinfo, vectype);
!       vec_num = 1;
!     }
! 
!   gcc_assert (ncopies >= 1);
  
    /* Reject attempts to combine mask types with nonmask types, e.g. if
       we have an AND between a (nonmask) boolean loaded from memory and
--- 6983,6990 ----
      }
  
    /* Multiple types in SLP are handled by creating the appropriate number of
!      vectorized stmts for each SLP node.  */
!   vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
  
    /* Reject attempts to combine mask types with nonmask types, e.g. if
       we have an AND between a (nonmask) boolean loaded from memory and
*************** vectorizable_operation (vec_info *vinfo,
*** 7025,7033 ****
  	 ops we have to lower the lowering code assumes we are
  	 dealing with word_mode.  */
        if (!INTEGRAL_TYPE_P (TREE_TYPE (vectype))
  	  || (((code == PLUS_EXPR || code == MINUS_EXPR || code == NEGATE_EXPR)
! 	    || !target_support_p)
! 	   && maybe_ne (GET_MODE_SIZE (vec_mode), UNITS_PER_WORD))
  	  /* Check only during analysis.  */
  	  || (!vec_stmt && !vect_can_vectorize_without_simd_p (code)))
  	{
--- 7026,7035 ----
  	 ops we have to lower the lowering code assumes we are
  	 dealing with word_mode.  */
        if (!INTEGRAL_TYPE_P (TREE_TYPE (vectype))
+ 	  || !GET_MODE_SIZE (vec_mode).is_constant ()
  	  || (((code == PLUS_EXPR || code == MINUS_EXPR || code == NEGATE_EXPR)
! 	       || !target_support_p)
! 	      && maybe_ne (GET_MODE_SIZE (vec_mode), UNITS_PER_WORD))
  	  /* Check only during analysis.  */
  	  || (!vec_stmt && !vect_can_vectorize_without_simd_p (code)))
  	{
*************** vectorizable_operation (vec_info *vinfo,
*** 7067,7078 ****
  	  if (cond_len_fn != IFN_LAST
  	      && direct_internal_fn_supported_p (cond_len_fn, vectype,
  						 OPTIMIZE_FOR_SPEED))
! 	    vect_record_loop_len (loop_vinfo, lens, ncopies * vec_num, vectype,
  				  1);
  	  else if (cond_fn != IFN_LAST
  		   && direct_internal_fn_supported_p (cond_fn, vectype,
  						      OPTIMIZE_FOR_SPEED))
! 	    vect_record_loop_mask (loop_vinfo, masks, ncopies * vec_num,
  				   vectype, NULL);
  	  else
  	    {
--- 7069,7080 ----
  	  if (cond_len_fn != IFN_LAST
  	      && direct_internal_fn_supported_p (cond_len_fn, vectype,
  						 OPTIMIZE_FOR_SPEED))
! 	    vect_record_loop_len (loop_vinfo, lens, vec_num, vectype,
  				  1);
  	  else if (cond_fn != IFN_LAST
  		   && direct_internal_fn_supported_p (cond_fn, vectype,
  						      OPTIMIZE_FOR_SPEED))
! 	    vect_record_loop_mask (loop_vinfo, masks, vec_num,
  				   vectype, NULL);
  	  else
  	    {
*************** vectorizable_operation (vec_info *vinfo,
*** 7085,7094 ****
  	}
  
        /* Put types on constant and invariant SLP children.  */
!       if (slp_node
! 	  && (!vect_maybe_update_slp_op_vectype (slp_op0, vectype)
! 	      || !vect_maybe_update_slp_op_vectype (slp_op1, vectype)
! 	      || !vect_maybe_update_slp_op_vectype (slp_op2, vectype)))
  	{
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
--- 7087,7095 ----
  	}
  
        /* Put types on constant and invariant SLP children.  */
!       if (!vect_maybe_update_slp_op_vectype (slp_op0, vectype)
! 	  || !vect_maybe_update_slp_op_vectype (slp_op1, vectype)
! 	  || !vect_maybe_update_slp_op_vectype (slp_op2, vectype))
  	{
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
*************** vectorizable_operation (vec_info *vinfo,
*** 7099,7113 ****
        STMT_VINFO_TYPE (stmt_info) = op_vec_info_type;
        DUMP_VECT_SCOPE ("vectorizable_operation");
        vect_model_simple_cost (vinfo, stmt_info,
! 			      ncopies, dt, ndts, slp_node, cost_vec);
        if (using_emulated_vectors_p)
  	{
  	  /* The above vect_model_simple_cost call handles constants
  	     in the prologue and (mis-)costs one of the stmts as
  	     vector stmt.  See below for the actual lowering that will
  	     be applied.  */
! 	  unsigned n
! 	    = slp_node ? SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) : ncopies;
  	  switch (code)
  	    {
  	    case PLUS_EXPR:
--- 7100,7113 ----
        STMT_VINFO_TYPE (stmt_info) = op_vec_info_type;
        DUMP_VECT_SCOPE ("vectorizable_operation");
        vect_model_simple_cost (vinfo, stmt_info,
! 			      1, dt, ndts, slp_node, cost_vec);
        if (using_emulated_vectors_p)
  	{
  	  /* The above vect_model_simple_cost call handles constants
  	     in the prologue and (mis-)costs one of the stmts as
  	     vector stmt.  See below for the actual lowering that will
  	     be applied.  */
! 	  unsigned n = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
  	  switch (code)
  	    {
  	    case PLUS_EXPR:
*************** vectorizable_operation (vec_info *vinfo,
*** 7160,7219 ****
    else
      vec_dest = vect_create_destination_var (scalar_dest, vectype_out);
  
!   /* In case the vectorization factor (VF) is bigger than the number
!      of elements that we can fit in a vectype (nunits), we have to generate
!      more than one vector stmt - i.e - we need to "unroll" the
!      vector stmt by a factor VF/nunits.  In doing so, we record a pointer
!      from one copy of the vector stmt to the next, in the field
!      STMT_VINFO_RELATED_STMT.  This is necessary in order to allow following
!      stages to find the correct vector defs to be used when vectorizing
!      stmts that use the defs of the current stmt.  The example below
!      illustrates the vectorization process when VF=16 and nunits=4 (i.e.,
!      we need to create 4 vectorized stmts):
! 
!      before vectorization:
!                                 RELATED_STMT    VEC_STMT
!         S1:     x = memref      -               -
!         S2:     z = x + 1       -               -
! 
!      step 1: vectorize stmt S1 (done in vectorizable_load. See more details
!              there):
!                                 RELATED_STMT    VEC_STMT
!         VS1_0:  vx0 = memref0   VS1_1           -
!         VS1_1:  vx1 = memref1   VS1_2           -
!         VS1_2:  vx2 = memref2   VS1_3           -
!         VS1_3:  vx3 = memref3   -               -
!         S1:     x = load        -               VS1_0
!         S2:     z = x + 1       -               -
! 
!      step2: vectorize stmt S2 (done here):
!         To vectorize stmt S2 we first need to find the relevant vector
!         def for the first operand 'x'.  This is, as usual, obtained from
!         the vector stmt recorded in the STMT_VINFO_VEC_STMT of the stmt
!         that defines 'x' (S1).  This way we find the stmt VS1_0, and the
!         relevant vector def 'vx0'.  Having found 'vx0' we can generate
!         the vector stmt VS2_0, and as usual, record it in the
!         STMT_VINFO_VEC_STMT of stmt S2.
!         When creating the second copy (VS2_1), we obtain the relevant vector
!         def from the vector stmt recorded in the STMT_VINFO_RELATED_STMT of
!         stmt VS1_0.  This way we find the stmt VS1_1 and the relevant
!         vector def 'vx1'.  Using 'vx1' we create stmt VS2_1 and record a
!         pointer to it in the STMT_VINFO_RELATED_STMT of the vector stmt VS2_0.
!         Similarly when creating stmts VS2_2 and VS2_3.  This is the resulting
!         chain of stmts and pointers:
!                                 RELATED_STMT    VEC_STMT
!         VS1_0:  vx0 = memref0   VS1_1           -
!         VS1_1:  vx1 = memref1   VS1_2           -
!         VS1_2:  vx2 = memref2   VS1_3           -
!         VS1_3:  vx3 = memref3   -               -
!         S1:     x = load        -               VS1_0
!         VS2_0:  vz0 = vx0 + v1  VS2_1           -
!         VS2_1:  vz1 = vx1 + v1  VS2_2           -
!         VS2_2:  vz2 = vx2 + v1  VS2_3           -
!         VS2_3:  vz3 = vx3 + v1  -               -
!         S2:     z = x + 1       -               VS2_0  */
! 
!   vect_get_vec_defs (vinfo, stmt_info, slp_node, ncopies,
  		     op0, &vec_oprnds0, op1, &vec_oprnds1, op2, &vec_oprnds2);
    /* Arguments are ready.  Create the new vector stmt.  */
    FOR_EACH_VEC_ELT (vec_oprnds0, i, vop0)
--- 7160,7166 ----
    else
      vec_dest = vect_create_destination_var (scalar_dest, vectype_out);
  
!   vect_get_vec_defs (vinfo, stmt_info, slp_node, 1,
  		     op0, &vec_oprnds0, op1, &vec_oprnds1, op2, &vec_oprnds2);
    /* Arguments are ready.  Create the new vector stmt.  */
    FOR_EACH_VEC_ELT (vec_oprnds0, i, vop0)
*************** vectorizable_operation (vec_info *vinfo,
*** 7222,7309 ****
        vop1 = ((op_type == binary_op || op_type == ternary_op)
  	      ? vec_oprnds1[i] : NULL_TREE);
        vop2 = ((op_type == ternary_op) ? vec_oprnds2[i] : NULL_TREE);
!       if (using_emulated_vectors_p
! 	  && (code == PLUS_EXPR || code == MINUS_EXPR || code == NEGATE_EXPR))
  	{
  	  /* Lower the operation.  This follows vector lowering.  */
! 	  unsigned int width = vector_element_bits (vectype);
! 	  tree inner_type = TREE_TYPE (vectype);
! 	  tree word_type
! 	    = build_nonstandard_integer_type (GET_MODE_BITSIZE (word_mode), 1);
! 	  HOST_WIDE_INT max = GET_MODE_MASK (TYPE_MODE (inner_type));
! 	  tree low_bits = build_replicated_int_cst (word_type, width, max >> 1);
! 	  tree high_bits
! 	    = build_replicated_int_cst (word_type, width, max & ~(max >> 1));
  	  tree wvop0 = make_ssa_name (word_type);
  	  new_stmt = gimple_build_assign (wvop0, VIEW_CONVERT_EXPR,
  					  build1 (VIEW_CONVERT_EXPR,
  						  word_type, vop0));
  	  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	  tree result_low, signs;
! 	  if (code == PLUS_EXPR || code == MINUS_EXPR)
  	    {
! 	      tree wvop1 = make_ssa_name (word_type);
  	      new_stmt = gimple_build_assign (wvop1, VIEW_CONVERT_EXPR,
  					      build1 (VIEW_CONVERT_EXPR,
  						      word_type, vop1));
  	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	      signs = make_ssa_name (word_type);
! 	      new_stmt = gimple_build_assign (signs,
! 					      BIT_XOR_EXPR, wvop0, wvop1);
! 	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	      tree b_low = make_ssa_name (word_type);
! 	      new_stmt = gimple_build_assign (b_low,
! 					      BIT_AND_EXPR, wvop1, low_bits);
! 	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	      tree a_low = make_ssa_name (word_type);
! 	      if (code == PLUS_EXPR)
! 		new_stmt = gimple_build_assign (a_low,
! 						BIT_AND_EXPR, wvop0, low_bits);
! 	      else
! 		new_stmt = gimple_build_assign (a_low,
! 						BIT_IOR_EXPR, wvop0, high_bits);
! 	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	      if (code == MINUS_EXPR)
  		{
! 		  new_stmt = gimple_build_assign (NULL_TREE,
! 						  BIT_NOT_EXPR, signs);
  		  signs = make_ssa_name (word_type);
  		  gimple_assign_set_lhs (new_stmt, signs);
  		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  		}
! 	      new_stmt = gimple_build_assign (NULL_TREE,
! 					      BIT_AND_EXPR, signs, high_bits);
! 	      signs = make_ssa_name (word_type);
! 	      gimple_assign_set_lhs (new_stmt, signs);
! 	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  	      result_low = make_ssa_name (word_type);
! 	      new_stmt = gimple_build_assign (result_low, code, a_low, b_low);
  	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  	    }
  	  else
  	    {
! 	      tree a_low = make_ssa_name (word_type);
! 	      new_stmt = gimple_build_assign (a_low,
! 					      BIT_AND_EXPR, wvop0, low_bits);
! 	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	      signs = make_ssa_name (word_type);
! 	      new_stmt = gimple_build_assign (signs, BIT_NOT_EXPR, wvop0);
! 	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	      new_stmt = gimple_build_assign (NULL_TREE,
! 					      BIT_AND_EXPR, signs, high_bits);
! 	      signs = make_ssa_name (word_type);
! 	      gimple_assign_set_lhs (new_stmt, signs);
! 	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  	      result_low = make_ssa_name (word_type);
! 	      new_stmt = gimple_build_assign (result_low,
! 					      MINUS_EXPR, high_bits, a_low);
  	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  	    }
- 	  new_stmt = gimple_build_assign (NULL_TREE, BIT_XOR_EXPR, result_low,
- 					  signs);
- 	  result_low = make_ssa_name (word_type);
- 	  gimple_assign_set_lhs (new_stmt, result_low);
- 	  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  	  new_stmt = gimple_build_assign (NULL_TREE, VIEW_CONVERT_EXPR,
  					  build1 (VIEW_CONVERT_EXPR,
  						  vectype, result_low));
--- 7169,7276 ----
        vop1 = ((op_type == binary_op || op_type == ternary_op)
  	      ? vec_oprnds1[i] : NULL_TREE);
        vop2 = ((op_type == ternary_op) ? vec_oprnds2[i] : NULL_TREE);
!       if (using_emulated_vectors_p)
  	{
  	  /* Lower the operation.  This follows vector lowering.  */
! 	  tree word_type = build_nonstandard_integer_type
! 			     (GET_MODE_BITSIZE (vec_mode).to_constant (), 1);
  	  tree wvop0 = make_ssa_name (word_type);
  	  new_stmt = gimple_build_assign (wvop0, VIEW_CONVERT_EXPR,
  					  build1 (VIEW_CONVERT_EXPR,
  						  word_type, vop0));
  	  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	  tree wvop1 = NULL_TREE;
! 	  if (vop1)
  	    {
! 	      wvop1 = make_ssa_name (word_type);
  	      new_stmt = gimple_build_assign (wvop1, VIEW_CONVERT_EXPR,
  					      build1 (VIEW_CONVERT_EXPR,
  						      word_type, vop1));
  	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 	    }
! 
! 	  tree result_low;
! 	  if (code == PLUS_EXPR || code == MINUS_EXPR || code == NEGATE_EXPR)
! 	    {
! 	      unsigned int width = vector_element_bits (vectype);
! 	      tree inner_type = TREE_TYPE (vectype);
! 	      HOST_WIDE_INT max = GET_MODE_MASK (TYPE_MODE (inner_type));
! 	      tree low_bits
! 		= build_replicated_int_cst (word_type, width, max >> 1);
! 	      tree high_bits
! 		= build_replicated_int_cst (word_type,
! 					    width, max & ~(max >> 1));
! 	      tree signs;
! 	      if (code == PLUS_EXPR || code == MINUS_EXPR)
  		{
! 		  signs = make_ssa_name (word_type);
! 		  new_stmt = gimple_build_assign (signs,
! 						  BIT_XOR_EXPR, wvop0, wvop1);
! 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 		  tree b_low = make_ssa_name (word_type);
! 		  new_stmt = gimple_build_assign (b_low, BIT_AND_EXPR,
! 						  wvop1, low_bits);
! 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 		  tree a_low = make_ssa_name (word_type);
! 		  if (code == PLUS_EXPR)
! 		    new_stmt = gimple_build_assign (a_low, BIT_AND_EXPR,
! 						    wvop0, low_bits);
! 		  else
! 		    new_stmt = gimple_build_assign (a_low, BIT_IOR_EXPR,
! 						    wvop0, high_bits);
! 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 		  if (code == MINUS_EXPR)
! 		    {
! 		      new_stmt = gimple_build_assign (NULL_TREE,
! 						      BIT_NOT_EXPR, signs);
! 		      signs = make_ssa_name (word_type);
! 		      gimple_assign_set_lhs (new_stmt, signs);
! 		      vect_finish_stmt_generation (vinfo, stmt_info,
! 						   new_stmt, gsi);
! 		    }
! 		  new_stmt = gimple_build_assign (NULL_TREE, BIT_AND_EXPR,
! 						  signs, high_bits);
  		  signs = make_ssa_name (word_type);
  		  gimple_assign_set_lhs (new_stmt, signs);
  		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
+ 		  result_low = make_ssa_name (word_type);
+ 		  new_stmt = gimple_build_assign (result_low, code,
+ 						  a_low, b_low);
+ 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  		}
! 	      else /* if (code == NEGATE_EXPR) */
! 		{
! 		  tree a_low = make_ssa_name (word_type);
! 		  new_stmt = gimple_build_assign (a_low, BIT_AND_EXPR,
! 						  wvop0, low_bits);
! 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 		  signs = make_ssa_name (word_type);
! 		  new_stmt = gimple_build_assign (signs, BIT_NOT_EXPR, wvop0);
! 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 		  new_stmt = gimple_build_assign (NULL_TREE, BIT_AND_EXPR,
! 						  signs, high_bits);
! 		  signs = make_ssa_name (word_type);
! 		  gimple_assign_set_lhs (new_stmt, signs);
! 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 		  result_low = make_ssa_name (word_type);
! 		  new_stmt = gimple_build_assign (result_low,
! 						  MINUS_EXPR, high_bits, a_low);
! 		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
! 		}
! 	      new_stmt = gimple_build_assign (NULL_TREE, BIT_XOR_EXPR,
! 					      result_low, signs);
  	      result_low = make_ssa_name (word_type);
! 	      gimple_assign_set_lhs (new_stmt, result_low);
  	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
  	    }
  	  else
  	    {
! 	      new_stmt = gimple_build_assign (NULL_TREE, code, wvop0, wvop1);
  	      result_low = make_ssa_name (word_type);
! 	      gimple_assign_set_lhs (new_stmt, result_low);
  	      vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
+ 
  	    }
  	  new_stmt = gimple_build_assign (NULL_TREE, VIEW_CONVERT_EXPR,
  					  build1 (VIEW_CONVERT_EXPR,
  						  vectype, result_low));
*************** vectorizable_operation (vec_info *vinfo,
*** 7316,7322 ****
  	  tree mask;
  	  if (masked_loop_p)
  	    mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 				       vec_num * ncopies, vectype, i);
  	  else
  	    /* Dummy mask.  */
  	    mask = build_minus_one_cst (truth_type_for (vectype));
--- 7283,7289 ----
  	  tree mask;
  	  if (masked_loop_p)
  	    mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 				       vec_num, vectype, i);
  	  else
  	    /* Dummy mask.  */
  	    mask = build_minus_one_cst (truth_type_for (vectype));
*************** vectorizable_operation (vec_info *vinfo,
*** 7343,7349 ****
  	  if (len_loop_p)
  	    {
  	      tree len = vect_get_loop_len (loop_vinfo, gsi, lens,
! 					    vec_num * ncopies, vectype, i, 1);
  	      signed char biasval
  		= LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS (loop_vinfo);
  	      tree bias = build_int_cst (intQI_type_node, biasval);
--- 7310,7316 ----
  	  if (len_loop_p)
  	    {
  	      tree len = vect_get_loop_len (loop_vinfo, gsi, lens,
! 					    vec_num, vectype, i, 1);
  	      signed char biasval
  		= LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS (loop_vinfo);
  	      tree bias = build_int_cst (intQI_type_node, biasval);
*************** vectorizable_operation (vec_info *vinfo,
*** 7370,7390 ****
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op0,
! 								 ncopies}))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					     vec_num * ncopies, vectype, i);
  
  		  vop0 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op1,
! 								 ncopies }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					     vec_num * ncopies, vectype, i);
  
  		  vop1 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
  					   vop1, gsi);
--- 7337,7355 ----
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op0, 1 }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					     vec_num, vectype, i);
  
  		  vop0 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op1, 1 }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					     vec_num, vectype, i);
  
  		  vop1 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
  					   vop1, gsi);
*************** vectorizable_operation (vec_info *vinfo,
*** 7415,7429 ****
  				       new_stmt, gsi);
  	}
  
!       if (slp_node)
! 	slp_node->push_vec_def (new_stmt);
!       else
! 	STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_stmt);
      }
  
-   if (!slp_node)
-     *vec_stmt = STMT_VINFO_VEC_STMTS (stmt_info)[0];
- 
    vec_oprnds0.release ();
    vec_oprnds1.release ();
    vec_oprnds2.release ();
--- 7380,7388 ----
  				       new_stmt, gsi);
  	}
  
!       slp_node->push_vec_def (new_stmt);
      }
  
    vec_oprnds0.release ();
    vec_oprnds1.release ();
    vec_oprnds2.release ();
*************** vectorizable_store (vec_info *vinfo,
*** 8778,8783 ****
--- 8737,8751 ----
  	  if (n == const_nunits)
  	    {
  	      int mis_align = dr_misalignment (first_dr_info, vectype);
+ 	      /* With VF > 1 we advance the DR by step, if that is constant
+ 		 and only aligned when performed VF times, DR alignment
+ 		 analysis can analyze this as aligned since it assumes
+ 		 contiguous accesses.  But that is not how we code generate
+ 		 here, so adjust for this.  */
+ 	      if (maybe_gt (vf, 1u)
+ 		  && !multiple_p (DR_STEP_ALIGNMENT (first_dr_info->dr),
+ 				  DR_TARGET_ALIGNMENT (first_dr_info)))
+ 		mis_align = -1;
  	      dr_alignment_support dr_align
  		= vect_supportable_dr_alignment (vinfo, dr_info, vectype,
  						 mis_align);
*************** vectorizable_store (vec_info *vinfo,
*** 8799,8804 ****
--- 8767,8776 ----
  	      ltype = build_vector_type (elem_type, n);
  	      lvectype = vectype;
  	      int mis_align = dr_misalignment (first_dr_info, ltype);
+ 	      if (maybe_gt (vf, 1u)
+ 		  && !multiple_p (DR_STEP_ALIGNMENT (first_dr_info->dr),
+ 				  DR_TARGET_ALIGNMENT (first_dr_info)))
+ 		mis_align = -1;
  	      dr_alignment_support dr_align
  		= vect_supportable_dr_alignment (vinfo, dr_info, ltype,
  						 mis_align);
*************** vectorizable_store (vec_info *vinfo,
*** 8859,8875 ****
  		}
  	    }
  	  unsigned align;
! 	  /* ???  We'd want to use
! 	       if (alignment_support_scheme == dr_aligned)
! 		 align = known_alignment (DR_TARGET_ALIGNMENT (first_dr_info));
! 	     since doing that is what we assume we can in the above checks.
! 	     But this interferes with groups with gaps where for example
! 	     VF == 2 makes the group in the unrolled loop aligned but the
! 	     fact that we advance with step between the two subgroups
! 	     makes the access to the second unaligned.  See PR119586.
! 	     We have to anticipate that here or adjust code generation to
! 	     avoid the misaligned loads by means of permutations.  */
! 	  align = dr_alignment (vect_dr_behavior (vinfo, first_dr_info));
  	  /* Alignment is at most the access size if we do multiple stores.  */
  	  if (nstores > 1)
  	    align = MIN (tree_to_uhwi (TYPE_SIZE_UNIT (ltype)), align);
--- 8831,8840 ----
  		}
  	    }
  	  unsigned align;
! 	  if (alignment_support_scheme == dr_aligned)
! 	    align = known_alignment (DR_TARGET_ALIGNMENT (first_dr_info));
! 	  else
! 	    align = dr_alignment (vect_dr_behavior (vinfo, first_dr_info));
  	  /* Alignment is at most the access size if we do multiple stores.  */
  	  if (nstores > 1)
  	    align = MIN (tree_to_uhwi (TYPE_SIZE_UNIT (ltype)), align);
*************** vectorizable_load (vec_info *vinfo,
*** 10797,10802 ****
--- 10762,10776 ----
  	  if (n == const_nunits)
  	    {
  	      int mis_align = dr_misalignment (first_dr_info, vectype);
+ 	      /* With VF > 1 we advance the DR by step, if that is constant
+ 		 and only aligned when performed VF times, DR alignment
+ 		 analysis can analyze this as aligned since it assumes
+ 		 contiguous accesses.  But that is not how we code generate
+ 		 here, so adjust for this.  */
+ 	      if (maybe_gt (vf, 1u)
+ 		  && !multiple_p (DR_STEP_ALIGNMENT (first_dr_info->dr),
+ 				  DR_TARGET_ALIGNMENT (first_dr_info)))
+ 		mis_align = -1;
  	      dr_alignment_support dr_align
  		= vect_supportable_dr_alignment (vinfo, dr_info, vectype,
  						 mis_align);
*************** vectorizable_load (vec_info *vinfo,
*** 10825,10830 ****
--- 10799,10808 ----
  		  if (VECTOR_TYPE_P (ptype))
  		    {
  		      mis_align = dr_misalignment (first_dr_info, ptype);
+ 		      if (maybe_gt (vf, 1u)
+ 			  && !multiple_p (DR_STEP_ALIGNMENT (first_dr_info->dr),
+ 					  DR_TARGET_ALIGNMENT (first_dr_info)))
+ 			mis_align = -1;
  		      dr_align
  			= vect_supportable_dr_alignment (vinfo, dr_info, ptype,
  							 mis_align);
*************** vectorizable_load (vec_info *vinfo,
*** 10844,10851 ****
  		}
  	    }
  	  unsigned align;
! 	  /* ???  The above is still wrong, see vectorizable_store.  */
! 	  align = dr_alignment (vect_dr_behavior (vinfo, first_dr_info));
  	  /* Alignment is at most the access size if we do multiple loads.  */
  	  if (nloads > 1)
  	    align = MIN (tree_to_uhwi (TYPE_SIZE_UNIT (ltype)), align);
--- 10822,10831 ----
  		}
  	    }
  	  unsigned align;
! 	  if (alignment_support_scheme == dr_aligned)
! 	    align = known_alignment (DR_TARGET_ALIGNMENT (first_dr_info));
! 	  else
! 	    align = dr_alignment (vect_dr_behavior (vinfo, first_dr_info));
  	  /* Alignment is at most the access size if we do multiple loads.  */
  	  if (nloads > 1)
  	    align = MIN (tree_to_uhwi (TYPE_SIZE_UNIT (ltype)), align);
*************** vect_analyze_stmt (vec_info *vinfo,
*** 14006,14012 ****
  	  || vectorizable_comparison (vinfo, stmt_info, NULL, NULL, node,
  				      cost_vec)
  	  || vectorizable_lc_phi (as_a <loop_vec_info> (vinfo),
! 				  stmt_info, NULL, node)
  	  || vectorizable_recurr (as_a <loop_vec_info> (vinfo),
  				   stmt_info, NULL, node, cost_vec)
  	  || vectorizable_early_exit (vinfo, stmt_info, NULL, NULL, node,
--- 13986,13992 ----
  	  || vectorizable_comparison (vinfo, stmt_info, NULL, NULL, node,
  				      cost_vec)
  	  || vectorizable_lc_phi (as_a <loop_vec_info> (vinfo),
! 				  stmt_info, node)
  	  || vectorizable_recurr (as_a <loop_vec_info> (vinfo),
  				   stmt_info, NULL, node, cost_vec)
  	  || vectorizable_early_exit (vinfo, stmt_info, NULL, NULL, node,
*************** vect_transform_stmt (vec_info *vinfo,
*** 14173,14191 ****
  
      case reduc_vec_info_type:
        done = vect_transform_reduction (as_a <loop_vec_info> (vinfo), stmt_info,
! 				       gsi, &vec_stmt, slp_node);
        gcc_assert (done);
        break;
  
      case cycle_phi_info_type:
        done = vect_transform_cycle_phi (as_a <loop_vec_info> (vinfo), stmt_info,
! 				       &vec_stmt, slp_node, slp_node_instance);
        gcc_assert (done);
        break;
  
      case lc_phi_info_type:
!       done = vectorizable_lc_phi (as_a <loop_vec_info> (vinfo),
! 				  stmt_info, &vec_stmt, slp_node);
        gcc_assert (done);
        break;
  
--- 14153,14171 ----
  
      case reduc_vec_info_type:
        done = vect_transform_reduction (as_a <loop_vec_info> (vinfo), stmt_info,
! 				       gsi, slp_node);
        gcc_assert (done);
        break;
  
      case cycle_phi_info_type:
        done = vect_transform_cycle_phi (as_a <loop_vec_info> (vinfo), stmt_info,
! 				       slp_node, slp_node_instance);
        gcc_assert (done);
        break;
  
      case lc_phi_info_type:
!       done = vect_transform_lc_phi (as_a <loop_vec_info> (vinfo),
! 				    stmt_info, slp_node);
        gcc_assert (done);
        break;
  
diff -Nrcpad gcc-16-20250504/gcc/tree-vectorizer.h gcc-16-20250511/gcc/tree-vectorizer.h
*** gcc-16-20250504/gcc/tree-vectorizer.h	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/tree-vectorizer.h	Sun May 11 22:32:39 2025
*************** struct _slp_tree {
*** 266,271 ****
--- 266,274 ----
    /* Whether uses of this load or feeders of this store are suitable
       for load/store-lanes.  */
    bool ldst_lanes;
+   /* For BB vect, flag to indicate this load node should be vectorized
+      as to avoid STLF fails because of related stores.  */
+   bool avoid_stlf_fail;
  
    int vertex;
  
*************** extern bool vectorizable_induction (loop
*** 2622,2633 ****
  				    stmt_vector_for_cost *);
  extern bool vect_transform_reduction (loop_vec_info, stmt_vec_info,
  				      gimple_stmt_iterator *,
! 				      gimple **, slp_tree);
  extern bool vect_transform_cycle_phi (loop_vec_info, stmt_vec_info,
- 				      gimple **,
  				      slp_tree, slp_instance);
! extern bool vectorizable_lc_phi (loop_vec_info, stmt_vec_info,
! 				 gimple **, slp_tree);
  extern bool vectorizable_phi (vec_info *, stmt_vec_info, gimple **, slp_tree,
  			      stmt_vector_for_cost *);
  extern bool vectorizable_recurr (loop_vec_info, stmt_vec_info,
--- 2625,2635 ----
  				    stmt_vector_for_cost *);
  extern bool vect_transform_reduction (loop_vec_info, stmt_vec_info,
  				      gimple_stmt_iterator *,
! 				      slp_tree);
  extern bool vect_transform_cycle_phi (loop_vec_info, stmt_vec_info,
  				      slp_tree, slp_instance);
! extern bool vectorizable_lc_phi (loop_vec_info, stmt_vec_info, slp_tree);
! extern bool vect_transform_lc_phi (loop_vec_info, stmt_vec_info, slp_tree);
  extern bool vectorizable_phi (vec_info *, stmt_vec_info, gimple **, slp_tree,
  			      stmt_vector_for_cost *);
  extern bool vectorizable_recurr (loop_vec_info, stmt_vec_info,
diff -Nrcpad gcc-16-20250504/gcc/vr-values.cc gcc-16-20250511/gcc/vr-values.cc
*** gcc-16-20250504/gcc/vr-values.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/gcc/vr-values.cc	Sun May 11 22:32:39 2025
*************** simplify_using_ranges::simplify (gimple_
*** 1996,2005 ****
  
  	case BIT_AND_EXPR:
  	case BIT_IOR_EXPR:
! 	  /* Optimize away BIT_AND_EXPR and BIT_IOR_EXPR
! 	     if all the bits being cleared are already cleared or
! 	     all the bits being set are already set.  */
! 	  if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1)))
  	    return simplify_bit_ops_using_ranges (gsi, stmt);
  	  break;
  
--- 1996,2008 ----
  
  	case BIT_AND_EXPR:
  	case BIT_IOR_EXPR:
! 	  /* Optimize away BIT_AND_EXPR and BIT_IOR_EXPR if all the bits
! 	     being cleared are already cleared or all the bits being set
! 	     are already set.  Beware that boolean types must be handled
! 	     logically (see range-op.cc) unless they have precision 1.  */
! 	  if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
! 	      && (TREE_CODE (TREE_TYPE (rhs1)) != BOOLEAN_TYPE
! 		  || TYPE_PRECISION (TREE_TYPE (rhs1)) == 1))
  	    return simplify_bit_ops_using_ranges (gsi, stmt);
  	  break;
  
diff -Nrcpad gcc-16-20250504/libatomic/ChangeLog gcc-16-20250511/libatomic/ChangeLog
*** gcc-16-20250504/libatomic/ChangeLog	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libatomic/ChangeLog	Sun May 11 22:32:39 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-05-09  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116792
+ 	* testsuite/lib/libatomic.exp: Add load_lib of scanhtml.exp.
+ 
  2025-04-16  Jakub Jelinek  <jakub@redhat.com>
  
  	PR libgcc/101075
diff -Nrcpad gcc-16-20250504/libatomic/testsuite/lib/libatomic.exp gcc-16-20250511/libatomic/testsuite/lib/libatomic.exp
*** gcc-16-20250504/libatomic/testsuite/lib/libatomic.exp	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libatomic/testsuite/lib/libatomic.exp	Sun May 11 22:32:39 2025
*************** load_gcc_lib scandump.exp
*** 37,42 ****
--- 37,43 ----
  load_gcc_lib scanlang.exp
  load_gcc_lib scanrtl.exp
  load_gcc_lib scansarif.exp
+ load_gcc_lib scanhtml.exp
  load_gcc_lib scantree.exp
  load_gcc_lib scanltrans.exp
  load_gcc_lib scanipa.exp
diff -Nrcpad gcc-16-20250504/libcpp/ChangeLog gcc-16-20250511/libcpp/ChangeLog
*** gcc-16-20250504/libcpp/ChangeLog	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libcpp/ChangeLog	Sun May 11 22:32:39 2025
***************
*** 1,3 ****
--- 1,16 ----
+ 2025-05-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR preprocessor/108900
+ 	PR preprocessor/116047
+ 	PR preprocessor/120061
+ 	* files.cc (_cpp_stack_file): Revert 2025-03-28 change.
+ 	* line-map.cc (linemap_add): Use
+ 	SOURCE_LINE (from, linemap_included_from (map - 1)) + 1; instead of
+ 	SOURCE_LINE (from, from[1].start_location); to compute to_line
+ 	for LC_LEAVE.  For LC_ENTER included_from computation, look at
+ 	map[-2] or even lower if map[-1] has the same start_location as
+ 	map[0].
+ 
  2025-04-28  Lewis Hyatt  <lhyatt@gmail.com>
  
  	PR c/118838
diff -Nrcpad gcc-16-20250504/libcpp/files.cc gcc-16-20250511/libcpp/files.cc
*** gcc-16-20250504/libcpp/files.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libcpp/files.cc	Sun May 11 22:32:39 2025
*************** _cpp_stack_file (cpp_reader *pfile, _cpp
*** 1047,1060 ****
  		    && (pfile->line_table->highest_location
  			!= LINE_MAP_MAX_LOCATION - 1));
  
-   if (decrement && LINEMAPS_ORDINARY_USED (pfile->line_table))
-     {
-       const line_map_ordinary *map
- 	= LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table);
-       if (map && map->start_location == pfile->line_table->highest_location)
- 	decrement = false;
-     }
- 
    if (decrement)
      pfile->line_table->highest_location--;
  
--- 1047,1052 ----
diff -Nrcpad gcc-16-20250504/libcpp/line-map.cc gcc-16-20250511/libcpp/line-map.cc
*** gcc-16-20250504/libcpp/line-map.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libcpp/line-map.cc	Sun May 11 22:32:39 2025
*************** linemap_add (line_maps *set, enum lc_rea
*** 621,628 ****
  	 #include "included", inside the same "includer" file.  */
  
        linemap_assert (!MAIN_FILE_P (map - 1));
!       /* (MAP - 1) points to the map we are leaving. The
! 	 map from which (MAP - 1) got included should be the map
  	 that comes right before MAP in the same file.  */
        from = linemap_included_from_linemap (set, map - 1);
  
--- 621,628 ----
  	 #include "included", inside the same "includer" file.  */
  
        linemap_assert (!MAIN_FILE_P (map - 1));
!       /* (MAP - 1) points to the map we are leaving.  The
! 	 map from which (MAP - 1) got included should be usually the map
  	 that comes right before MAP in the same file.  */
        from = linemap_included_from_linemap (set, map - 1);
  
*************** linemap_add (line_maps *set, enum lc_rea
*** 630,636 ****
        if (to_file == NULL)
  	{
  	  to_file = ORDINARY_MAP_FILE_NAME (from);
! 	  to_line = SOURCE_LINE (from, from[1].start_location);
  	  sysp = ORDINARY_MAP_IN_SYSTEM_HEADER_P (from);
  	}
        else
--- 630,653 ----
        if (to_file == NULL)
  	{
  	  to_file = ORDINARY_MAP_FILE_NAME (from);
! 	  /* Compute the line on which the map resumes, for #include this
! 	     should be the line after the #include line.  Usually FROM is
! 	     the map right before LC_ENTER map - the first map of the included
! 	     file, and in that case SOURCE_LINE (from, from[1].start_location);
! 	     computes the right line (and does handle even some special cases
! 	     (e.g. where for returning from <command line> we still want to
! 	     be at line 0 or some -traditional-cpp cases).  In rare cases
! 	     FROM can be followed by LC_RENAME created by linemap_line_start
! 	     for line right after #include line.  If that happens,
! 	     start_location of the FROM[1] map will be the same as
! 	     start_location of FROM[2] LC_ENTER, but FROM[1] start_location
! 	     might not have advance enough for moving to a full next line.
! 	     In that case compute the line of #include line and add 1 to it
! 	     to advance to the next line.  See PR120061.  */
! 	  if (from[1].reason == LC_RENAME)
! 	    to_line = SOURCE_LINE (from, linemap_included_from (map - 1)) + 1;
! 	  else
! 	    to_line = SOURCE_LINE (from, from[1].start_location);
  	  sysp = ORDINARY_MAP_IN_SYSTEM_HEADER_P (from);
  	}
        else
*************** linemap_add (line_maps *set, enum lc_rea
*** 660,670 ****
        if (set->depth == 0)
  	map->included_from = 0;
        else
! 	/* The location of the end of the just-closed map.  */
! 	map->included_from
! 	  = (((map[0].start_location - 1 - map[-1].start_location)
! 	      & ~((loc_one << map[-1].m_column_and_range_bits) - 1))
! 	     + map[-1].start_location);
        set->depth++;
        if (set->trace_includes)
  	trace_include (set, map);
--- 677,702 ----
        if (set->depth == 0)
  	map->included_from = 0;
        else
! 	{
! 	  /* Compute location from whence this line map was included.
! 	     For #include this should be preferrably column 0 of the
! 	     line on which #include directive appears.
! 	     map[-1] is the just closed map and usually included_from
! 	     falls within that map.  In rare cases linemap_line_start
! 	     can insert a new LC_RENAME map for the line immediately
! 	     after #include line, in that case map[-1] will have the
! 	     same start_location as the new one and so included_from
! 	     would not be from map[-1] but likely map[-2].  If that
! 	     happens, mask off map[-2] m_column_and_range_bits bits
! 	     instead of map[-1].  See PR120061.  */
! 	  int i = -1;
! 	  while (map[i].start_location == map[0].start_location)
! 	    --i;
! 	  map->included_from
! 	    = (((map[0].start_location - 1 - map[i].start_location)
! 		& ~((loc_one << map[i].m_column_and_range_bits) - 1))
! 	       + map[i].start_location);
! 	}
        set->depth++;
        if (set->trace_includes)
  	trace_include (set, map);
diff -Nrcpad gcc-16-20250504/libgcobol/ChangeLog gcc-16-20250511/libgcobol/ChangeLog
*** gcc-16-20250504/libgcobol/ChangeLog	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/ChangeLog	Sun May 11 22:32:40 2025
***************
*** 1,3 ****
--- 1,58 ----
+ 2025-05-10  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* common-defs.h (ec_cmp): Delete "getenv("match_declarative")" calls.
+ 	(enabled_exception_match): Delete "getenv("match_declarative")" calls.
+ 	* libgcobol.cc: Eliminate __gg__odo_violation.
+ 
+ 2025-05-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac: Handle --enable-libgcobol.
+ 	Let it override LIBGCOBOL_SUPPORTED.
+ 	* configure: Regenerate.
+ 
+ 2025-05-06  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.h.in: Regenerate.
+ 	* configure: Regenerate.
+ 	* configure.ac: Check for program_invocation_short_name and
+ 	and getprogname().
+ 	* libgcobol.cc (default_exception_handler): When the platform
+ 	has program_invocation_short_name, use it otherwise fall
+ 	back to using getprogname() or a constant string (if neither
+ 	interface is available).
+ 
+ 2025-05-05  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.cc: Add #include <vector>.
+ 	* common-defs.h (COMMON_DEFS_H_): Add #include <stdio.h>.
+ 	(enum cbl_file_mode_t): Add file_mode_any_e.
+ 	(enum file_stmt_t): Created.
+ 	(cbl_file_mode_str): Add case for file_mode_any_e.
+ 	(ec_cmp): Exceptions.
+ 	(struct cbl_enabled_exception_t): Likewise.
+ 	(struct cbl_declarative_t): Likewise.
+ 	(class cbl_enabled_exceptions_array_t): Likewise.
+ 	(class cbl_enabled_exceptions_t): Likewise.
+ 	(struct cbl_enabled_exceptions_array_t): Likewise.
+ 	(enabled_exception_match): Likewise.
+ 	* constants.cc: Add #include <vector>.
+ 	* exceptl.h (struct cbl_exception_t): Removed.
+ 	(struct cbl_declarative_t): Removed.
+ 	(class ec_status_t): Removed.
+ 	* gcobolio.h: Add symbol_table_index to cblc_file_t.
+ 	* gfileio.cc: Add #include <vector>
+ 	(establish_status): Comment.
+ 	(__io__file_init): Handle symbol_table_index.
+ 	(__io__file_delete): Set file->prior_op.
+ 	(__io__file_rewrite): Likewise.
+ 	(__io__file_read): Likewise.
+ 	(__io__file_open): Likewise.
+ 	(__io__file_close): Likewise.
+ 	* gmath.cc: Include #include <vector>.
+ 	* intrinsic.cc: Include #include <vector>.
+ 	* libgcobol.cc: Multiple modifications for exceptions.
+ 	* valconv.cc: #include <vector>.
+ 
  2025-05-02  Jakub Jelinek  <jakub@redhat.com>
  
  	PR cobol/119364
diff -Nrcpad gcc-16-20250504/libgcobol/charmaps.cc gcc-16-20250511/libgcobol/charmaps.cc
*** gcc-16-20250504/libgcobol/charmaps.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/charmaps.cc	Sun May 11 22:32:40 2025
***************
*** 37,42 ****
--- 37,43 ----
  #include <unordered_map>
  #include <locale.h>
  #include <iconv.h>
+ #include <vector>
  
  #include "ec.h"
  #include "common-defs.h"
diff -Nrcpad gcc-16-20250504/libgcobol/common-defs.h gcc-16-20250511/libgcobol/common-defs.h
*** gcc-16-20250504/libgcobol/common-defs.h	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/common-defs.h	Sun May 11 22:32:40 2025
***************
*** 30,35 ****
--- 30,36 ----
  #ifndef COMMON_DEFS_H_
  #define COMMON_DEFS_H_
  
+ #include <stdio.h>
  #include <stdint.h>
  #include <list>
  
*************** enum cbl_file_mode_t {
*** 235,240 ****
--- 236,242 ----
    file_mode_output_e = 'w',
    file_mode_extend_e = 'a',
    file_mode_io_e     = '+',
+   file_mode_any_e, 
  };
  
  enum cbl_round_t {
*************** enum bitop_t {
*** 284,289 ****
--- 286,301 ----
    bit_xor_op,
  };
  
+ enum file_stmt_t {
+   file_stmt_delete_e, 
+   file_stmt_merge_e, 
+   file_stmt_read_e, 
+   file_stmt_rewrite_e, 
+   file_stmt_sort_e, 
+   file_stmt_start_e, 
+   file_stmt_write_e, 
+ };
+   
  enum file_close_how_t {
    file_close_no_how_e     = 0x00,
    file_close_removal_e    = 0x01,
*************** cbl_file_mode_str( cbl_file_mode_t mode
*** 376,381 ****
--- 388,394 ----
    case file_mode_output_e: return "file_mode_output_e: 'w'";
    case file_mode_io_e:     return "file_mode_io_e: '+'";
    case file_mode_extend_e: return "file_mode_extend_e: 'a'";
+   case file_mode_any_e:    return "file_mode_any_e";
    }
    return "???";
  };
*************** enum module_type_t {
*** 388,445 ****
    module_toplevel_e,
  };
  
! 
! static inline bool
! ec_cmp( ec_type_t raised, ec_type_t mask )
  {
!   if( raised == mask ) return true;
  
!   // Do not match on only the low byte.
!   if( 0 < (~EC_ALL_E & static_cast<uint32_t>(mask)) ) return false;
  
!   return  0 != ( static_cast<uint32_t>(raised)
!                  &
!                  static_cast<uint32_t>(mask) );
  }
  
  struct cbl_enabled_exception_t {
!   bool enabled, location;
    ec_type_t ec;
    size_t file;
  
    cbl_enabled_exception_t()
!     : enabled(false)
!     , location(false)
      , ec(ec_none_e)
      , file(0)
    {}
  
!   cbl_enabled_exception_t( bool enabled, bool location,
!                            ec_type_t ec, size_t file = 0 )
!     : enabled(enabled)
!     , location(location)
      , ec(ec)
      , file(file)
    {}
  
!   // sort by  ec and file, not enablement
    bool operator<( const cbl_enabled_exception_t& that ) const {
      if( ec == that.ec ) return file < that.file;
      return ec < that.ec;
    }
!   // match on ec and file, not enablement
    bool operator==( const cbl_enabled_exception_t& that ) const {
      return ec == that.ec && file == that.file;
    }
  };
  
  
! class cbl_enabled_exceptions_array_t;
  
  class cbl_enabled_exceptions_t : protected std::set<cbl_enabled_exception_t>
  {
!   friend cbl_enabled_exceptions_array_t;
!   void apply( const cbl_enabled_exception_t& elem ) {
      auto inserted = insert( elem );
      if( ! inserted.second ) {
        erase(inserted.first);
--- 401,574 ----
    module_toplevel_e,
  };
  
! /*
!  * Compare a "raised" EC to an enabled EC or of a declarative.  "raised" may in
!  * fact not be raised; in the compiler this function is used to compare a TURN
!  * directive to the list of enabled ECs.
!  */
! static bool
! ec_cmp( ec_type_t raised, ec_type_t ec )
  {
!   if( raised == ec ) return true;
  
!   // If both low bytes are nonzero, we had to match exactly, above. 
!   if( (~EC_ALL_E & static_cast<uint32_t>(raised))
!       &&
!       (~EC_ALL_E & static_cast<uint32_t>(ec)) ) {
!     return false;
!   }
  
!   // Level 1 and 2 have low byte of zero. 
!   // If one low byte is zero, see if they're the same kind.
!   return 0xFF < ( static_cast<uint32_t>(raised)
! 		  &
! 		  static_cast<uint32_t>(ec) );
  }
  
  struct cbl_enabled_exception_t {
!   bool location;
    ec_type_t ec;
    size_t file;
  
    cbl_enabled_exception_t()
!     : location(false)
      , ec(ec_none_e)
      , file(0)
    {}
  
!   cbl_enabled_exception_t( bool location, ec_type_t ec, size_t file = 0 )
!     : location(location)
      , ec(ec)
      , file(file)
    {}
  
!   // sort by  ec and file
    bool operator<( const cbl_enabled_exception_t& that ) const {
      if( ec == that.ec ) return file < that.file;
      return ec < that.ec;
    }
!   // match on ec and file
    bool operator==( const cbl_enabled_exception_t& that ) const {
      return ec == that.ec && file == that.file;
    }
+ 
+   void dump( int i ) const;
  };
  
+ struct cbl_declarative_t {
+   enum { files_max = 16 };
+   size_t section; // implies program
+   uint32_t global;  // See the note below
+   ec_type_t type;
+   uint32_t nfile, files[files_max];
+   cbl_file_mode_t mode;
  
! /*  The ::global member originally was "bool global".  A bool, however, occupies
!     only one byte of storage.  The structure, in turn, is constructed on
!     four-byte boundaries for members, so there were three padding bytes between
!     the single byte of global and the ::type member.
! 
!     When used to create a "blob", where the structure was treated as a stream
!     of bytes that were used to create a constructor for an array of bytes,
!     valgrind noticed that those three padding bytes were not initialized, and
!     generated the appropriate error message.  This made it hard to find other
!     problems.
! 
!     Changing the declaration from "bool" to "uint32_t" seems to have eliminated
!     the valgrind error without affecting overall performance.  */
! 
!   cbl_declarative_t( cbl_file_mode_t mode = file_mode_none_e )
!     : section(0), global(false)
!     , type(ec_none_e)
!     , nfile(0)
!     , mode(mode)
!   {
!     std::fill(files, files + COUNT_OF(files), 0);
!   }
!   cbl_declarative_t( ec_type_t type )
!     : section(0), global(false)
!     , type(type)
!     , nfile(0)
!     , mode(file_mode_none_e)
!   {
!     std::fill(files, files + COUNT_OF(files), 0);
!   }
! 
!   cbl_declarative_t( size_t section, ec_type_t type,
!                      const std::list<size_t>& files,
!                      cbl_file_mode_t mode,
! 		     bool global = false )
!     : section(section), global(global)
!     , type(type)
!     , nfile(files.size())
!     , mode(mode)
!   {
!     assert( files.size() <= COUNT_OF(this->files) );
!     std::fill(this->files, this->files + COUNT_OF(this->files), 0);
!     if( nfile > 0 ) {
!       std::copy( files.begin(), files.end(), this->files );
!     }
!   }
!   cbl_declarative_t( const cbl_declarative_t& that )
!     : section(that.section)
!     , global(that.global)
!     , type(that.type)
!     , nfile(that.nfile)
!     , mode(that.mode)
!   {
!     std::fill(files, files + COUNT_OF(files), 0);
!     if( nfile > 0 ) {
!       std::copy( that.files, that.files + nfile, this->files );
!     }
!   }
!   constexpr cbl_declarative_t& operator=(const cbl_declarative_t&) = default;
! 
!   std::vector<uint64_t> encode() const;
!   void decode( const std::vector<uint64_t>& encoded );
! 
!   /*
!    * Sort file names before file modes, and file modes before non-IO.
!    */
!   bool operator<( const cbl_declarative_t& that ) const {
!     // file name declaratives first, in section order
!     if( nfile != 0 ) {
!       if( that.nfile != 0 ) return section < that.section;
!       return true;
!     }
!     // file mode declaratives between file name declaratives and non-IO
!     if( mode != file_mode_none_e ) {
!       if( that.nfile != 0 ) return false;
!       if( that.mode == file_mode_none_e ) return true;
!       return section < that.section;
!     }
!     // all others by section, after names and modes
!     if( that.nfile != 0 ) return false;
!     if( that.mode != file_mode_none_e ) return false;
!     return section < that.section;
!   }
! 
!   // TRUE if there are no files to match, or the provided file is in the list.
!   bool match_file( size_t file ) const {
!     static const auto pend = files + nfile;
! 
!     return nfile == 0 || pend != std::find(files, files + nfile, file);
!   }
! 
!   // USE Format 1 names a file mode, or at least one file, and not an EC.
!   bool is_format_1() const {
!     return mode != file_mode_none_e;
!   }
! };
! 
! typedef std::vector<cbl_declarative_t> cbl_declaratives_t;
  
  class cbl_enabled_exceptions_t : protected std::set<cbl_enabled_exception_t>
  {
!   void apply( bool enabled, const cbl_enabled_exception_t& elem ) {
!     if( ! enabled ) {
!       erase(elem);
!       return;
!     }
      auto inserted = insert( elem );
      if( ! inserted.second ) {
        erase(inserted.first);
*************** class cbl_enabled_exceptions_t : protect
*** 448,504 ****
    }
  
   public:
!   bool turn_on_off( bool enabled, bool location, ec_type_t type,
                      std::set<size_t> files );
  
!   const cbl_enabled_exception_t * match( ec_type_t type, size_t file = 0 );
  
    void dump() const;
  
    void clear() { std::set<cbl_enabled_exception_t>::clear(); }
  
    bool   empty() const { return std::set<cbl_enabled_exception_t>::empty(); }
    size_t  size() const { return std::set<cbl_enabled_exception_t>::size(); }
  
    cbl_enabled_exceptions_t& operator=( const cbl_enabled_exceptions_t& ) = default;
  };
  
  extern cbl_enabled_exceptions_t enabled_exceptions;
  
- /*
-  * This class is passed to the runtime function evaluating the raised exception.
-  * It is constructed in genapi.cc from the compile-time table.
-  */
- struct cbl_enabled_exceptions_array_t {
-   size_t nec;
-   cbl_enabled_exception_t *ecs;
- 
-   cbl_enabled_exceptions_array_t( size_t nec, cbl_enabled_exception_t *ecs )
-     : nec(nec), ecs(ecs) {}
- 
-   cbl_enabled_exceptions_array_t( const cbl_enabled_exceptions_t& input =
-                                   cbl_enabled_exceptions_t() )
-     : nec(input.size())
-     , ecs(NULL)
-   {
-     if( ! input.empty() ) {
-       ecs = new cbl_enabled_exception_t[nec];
-       std::copy(input.begin(), input.end(), ecs);
-     }
-   }
- 
-   cbl_enabled_exceptions_array_t&
-   operator=( const cbl_enabled_exceptions_array_t& input);
- 
- 
-   bool match( ec_type_t ec, size_t file = 0 ) const;
- 
-   size_t nbytes() const { return nec * sizeof(ecs[0]); }
- };
- 
  template <typename T>
  T enabled_exception_match( T beg, T end, ec_type_t type, size_t file ) {
!   cbl_enabled_exception_t input( true, true, // don't matter
                                   type, file );
    auto output = std::find(beg, end, input);
    if( output == end ) {
--- 577,611 ----
    }
  
   public:
!   cbl_enabled_exceptions_t() {}
!   cbl_enabled_exceptions_t( size_t nec, const cbl_enabled_exception_t *ecs ) 
!     : std::set<cbl_enabled_exception_t>(ecs, ecs + nec)
!   {}
!   void turn_on_off( bool enabled, bool location, ec_type_t type,
                      std::set<size_t> files );
  
!   const cbl_enabled_exception_t * match( ec_type_t ec, size_t file = 0 ) const;
  
    void dump() const;
+   void dump( const char tag[] ) const;
+   uint32_t status() const;
  
    void clear() { std::set<cbl_enabled_exception_t>::clear(); }
  
    bool   empty() const { return std::set<cbl_enabled_exception_t>::empty(); }
    size_t  size() const { return std::set<cbl_enabled_exception_t>::size(); }
  
+   std::vector<uint64_t> encode() const;
+   cbl_enabled_exceptions_t& decode( const std::vector<uint64_t>& encoded );
+ 
    cbl_enabled_exceptions_t& operator=( const cbl_enabled_exceptions_t& ) = default;
  };
  
  extern cbl_enabled_exceptions_t enabled_exceptions;
  
  template <typename T>
  T enabled_exception_match( T beg, T end, ec_type_t type, size_t file ) {
!   cbl_enabled_exception_t input( true, // doesn't matter
                                   type, file );
    auto output = std::find(beg, end, input);
    if( output == end ) {
diff -Nrcpad gcc-16-20250504/libgcobol/config.h.in gcc-16-20250511/libgcobol/config.h.in
*** gcc-16-20250504/libgcobol/config.h.in	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/config.h.in	Sun May 11 22:32:40 2025
***************
*** 6,14 ****
--- 6,21 ----
  /* Define to 1 if you have the <complex.h> header file. */
  #undef HAVE_COMPLEX_H
  
+ /* Define to 1 if you have the declaration of `program_invocation_short_name',
+    and to 0 if you don't. */
+ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+ 
  /* Define to 1 if you have the <dlfcn.h> header file. */
  #undef HAVE_DLFCN_H
  
+ /* Define to 1 if you have the <errno.h> header file. */
+ #undef HAVE_ERRNO_H
+ 
  /* Define to 1 if you have the <fenv.h> header file. */
  #undef HAVE_FENV_H
  
***************
*** 21,26 ****
--- 28,36 ----
  /* Define to 1 if you have the <fptrap.h> header file. */
  #undef HAVE_FPTRAP_H
  
+ /* Define to 1 if you have the `getprogname' function. */
+ #undef HAVE_GETPROGNAME
+ 
  /* Define if you have the iconv() function and it works. */
  #undef HAVE_ICONV
  
diff -Nrcpad gcc-16-20250504/libgcobol/configure gcc-16-20250511/libgcobol/configure
*** gcc-16-20250504/libgcobol/configure	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/configure	Sun May 11 22:32:40 2025
*************** enable_option_checking
*** 788,793 ****
--- 788,794 ----
  enable_multilib
  enable_maintainer_mode
  enable_silent_rules
+ enable_libgcobol
  enable_version_specific_runtime_libs
  enable_dependency_tracking
  enable_shared
*************** Optional Features:
*** 1438,1443 ****
--- 1439,1445 ----
                            sometimes confusing) to the casual installer
    --enable-silent-rules   less verbose build output (undo: "make V=1")
    --disable-silent-rules  verbose build output (undo: "make V=0")
+   --enable-libgcobol      Enable libgcobol
    --enable-version-specific-runtime-libs
                            Specify that runtime libraries should be installed
                            in a compiler-specific directory
*************** $as_echo "$ac_res" >&6; }
*** 2380,2385 ****
--- 2382,2433 ----
  
  } # ac_fn_cxx_check_header_compile
  
+ # ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES
+ # -----------------------------------------------
+ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+ # accordingly.
+ ac_fn_cxx_check_decl ()
+ {
+   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+   as_decl_name=`echo $2|sed 's/ *(.*//'`
+   as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+ $as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+ if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ $4
+ int
+ main ()
+ {
+ #ifndef $as_decl_name
+ #ifdef __cplusplus
+   (void) $as_decl_use;
+ #else
+   (void) $as_decl_name;
+ #endif
+ #endif
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_cxx_try_compile "$LINENO"; then :
+   eval "$3=yes"
+ else
+   eval "$3=no"
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ 
+ } # ac_fn_cxx_check_decl
+ 
  # ac_fn_cxx_check_func LINENO FUNC VAR
  # ------------------------------------
  # Tests whether FUNC exists, setting the cache variable VAR accordingly
*************** as_fn_append ac_header_list " fenv.h"
*** 2796,2801 ****
--- 2844,2851 ----
  as_fn_append ac_header_list " fptrap.h"
  as_fn_append ac_header_list " complex.h"
  as_fn_append ac_header_list " stdlib.h"
+ as_fn_append ac_header_list " errno.h"
+ as_fn_append ac_func_list " getprogname"
  as_fn_append ac_func_list " random_r"
  as_fn_append ac_func_list " srandom_r"
  as_fn_append ac_func_list " initstate_r"
*************** END
*** 3675,3680 ****
--- 3725,3740 ----
  fi
  
  
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-libgcobol" >&5
+ $as_echo_n "checking for --enable-libgcobol... " >&6; }
+ # Check whether --enable-libgcobol was given.
+ if test "${enable_libgcobol+set}" = set; then :
+   enableval=$enable_libgcobol;
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_libgcobol" >&5
+ $as_echo "$enable_libgcobol" >&6; }
+ 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-version-specific-runtime-libs" >&5
  $as_echo_n "checking for --enable-version-specific-runtime-libs... " >&6; }
  # Check whether --enable-version-specific-runtime-libs was given.
*************** else
*** 11750,11756 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11753 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11810,11816 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11813 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11856,11862 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11859 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11916,11922 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11919 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** _ACEOF
*** 16747,16752 ****
--- 16807,16820 ----
  unset LIBGCOBOL_SUPPORTED
  . ${srcdir}/configure.tgt
  
+ # Decide if it's usable.
+ case $LIBGCOBOL_SUPPORTED:$enable_libgcobol in
+ *:no)  use_libgcobol=no  ;;
+ *:yes) use_libgcobol=yes ;;
+ yes:*) use_libgcobol=yes ;;
+ *:*)   use_libgcobol=no  ;;
+ esac
+ 
  # -----------------
  # __int128 support
  # -----------------
*************** fi
*** 16839,16845 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcobol_cv_have_int128" >&5
  $as_echo "$libgcobol_cv_have_int128" >&6; }
  
!  if test "x$LIBGCOBOL_SUPPORTED" = xyes && test "x$libgcobol_cv_have_int128" = xyes; then
    BUILD_LIBGCOBOL_TRUE=
    BUILD_LIBGCOBOL_FALSE='#'
  else
--- 16907,16913 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcobol_cv_have_int128" >&5
  $as_echo "$libgcobol_cv_have_int128" >&6; }
  
!  if test "x$use_libgcobol" = xyes && test "x$libgcobol_cv_have_int128" = xyes; then
    BUILD_LIBGCOBOL_TRUE=
    BUILD_LIBGCOBOL_FALSE='#'
  else
*************** done
*** 17016,17022 ****
  
  
  
! # These are GLIBC
  
  
  
--- 17084,17112 ----
  
  
  
! 
! 
! # Look for a way to represent the program name
! # First, check the GLIBC case
! ac_fn_cxx_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "
! #if HAVE_ERRNO_H
! # define _GNU_SOURCE
! # include <errno.h>
! #endif
! 
! "
! if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then :
!   ac_have_decl=1
! else
!   ac_have_decl=0
! fi
! 
! cat >>confdefs.h <<_ACEOF
! #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl
! _ACEOF
! 
! 
! # Check an alternate
  
  
  
*************** done
*** 17035,17040 ****
--- 17125,17135 ----
  
  
  
+ 
+ # These are GLIBC
+ 
+ 
+ 
  
  
  
diff -Nrcpad gcc-16-20250504/libgcobol/configure.ac gcc-16-20250511/libgcobol/configure.ac
*** gcc-16-20250504/libgcobol/configure.ac	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/configure.ac	Sun May 11 22:32:40 2025
*************** AM_MAINTAINER_MODE
*** 40,45 ****
--- 40,50 ----
  
  AM_INIT_AUTOMAKE([1.15.1 no-define foreign no-dist -Wall -Wno-portability])
  
+ AC_MSG_CHECKING([for --enable-libgcobol])
+ AC_ARG_ENABLE(libgcobol,
+   [AS_HELP_STRING([--enable-libgcobol], [Enable libgcobol])])
+ AC_MSG_RESULT($enable_libgcobol)
+ 
  AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
  AC_ARG_ENABLE(version-specific-runtime-libs,
  AS_HELP_STRING([--enable-version-specific-runtime-libs],
*************** AC_CHECK_SIZEOF([void *])
*** 138,143 ****
--- 143,156 ----
  unset LIBGCOBOL_SUPPORTED
  . ${srcdir}/configure.tgt
  
+ # Decide if it's usable.
+ case $LIBGCOBOL_SUPPORTED:$enable_libgcobol in
+ *:no)  use_libgcobol=no  ;;
+ *:yes) use_libgcobol=yes ;;
+ yes:*) use_libgcobol=yes ;;
+ *:*)   use_libgcobol=no  ;;
+ esac
+ 
  # -----------------
  # __int128 support
  # -----------------
*************** AC_CACHE_CHECK([whether __int128 is supp
*** 164,170 ****
      libgcobol_cv_have_int128=no
  ])])
  
! AM_CONDITIONAL(BUILD_LIBGCOBOL, [test "x$LIBGCOBOL_SUPPORTED" = xyes && test "x$libgcobol_cv_have_int128" = xyes])
  
  # Check if functions are available in libc before adding extra libs.
  AC_SEARCH_LIBS([malloc], [c])
--- 177,183 ----
      libgcobol_cv_have_int128=no
  ])])
  
! AM_CONDITIONAL(BUILD_LIBGCOBOL, [test "x$use_libgcobol" = xyes && test "x$libgcobol_cv_have_int128" = xyes])
  
  # Check if functions are available in libc before adding extra libs.
  AC_SEARCH_LIBS([malloc], [c])
*************** esac
*** 188,194 ****
  AC_SUBST(extra_ldflags_libgcobol)
  
  AC_CHECK_HEADERS_ONCE(floatingpoint.h ieeefp.h fenv.h fptrap.h \
! complex.h stdlib.h)
  
  # These are GLIBC
  AC_CHECK_FUNCS_ONCE(random_r srandom_r initstate_r setstate_r)
--- 201,219 ----
  AC_SUBST(extra_ldflags_libgcobol)
  
  AC_CHECK_HEADERS_ONCE(floatingpoint.h ieeefp.h fenv.h fptrap.h \
! complex.h stdlib.h errno.h)
! 
! # Look for a way to represent the program name
! # First, check the GLIBC case
! AC_CHECK_DECLS([program_invocation_short_name], , ,[
! #if HAVE_ERRNO_H
! # define _GNU_SOURCE
! # include <errno.h>
! #endif
! ])
! 
! # Check an alternate
! AC_CHECK_FUNCS_ONCE(getprogname)
  
  # These are GLIBC
  AC_CHECK_FUNCS_ONCE(random_r srandom_r initstate_r setstate_r)
diff -Nrcpad gcc-16-20250504/libgcobol/constants.cc gcc-16-20250511/libgcobol/constants.cc
*** gcc-16-20250504/libgcobol/constants.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/constants.cc	Sun May 11 22:32:40 2025
***************
*** 39,44 ****
--- 39,45 ----
  #include <unistd.h>
  #include <algorithm>
  #include <unordered_map>
+ #include <vector>
  
  #include "ec.h"
  #include "io.h"
diff -Nrcpad gcc-16-20250504/libgcobol/exceptl.h gcc-16-20250511/libgcobol/exceptl.h
*** gcc-16-20250504/libgcobol/exceptl.h	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/exceptl.h	Sun May 11 22:32:40 2025
*************** extern ec_descr_t *__gg__exception_table
*** 117,256 ****
  
   */
  
- // SymException
- struct cbl_exception_t {
-   size_t program, file;
-   ec_type_t type;
-   cbl_file_mode_t mode;
- };
- 
- 
- struct cbl_declarative_t {
-   enum { files_max = 16 };
-   size_t section; // implies program
-   bool global;
-   ec_type_t type;
-   uint32_t nfile, files[files_max];
-   cbl_file_mode_t mode;
- 
-   cbl_declarative_t( cbl_file_mode_t mode = file_mode_none_e )
-     : section(0), global(false), type(ec_none_e)
-     , nfile(0)
-     , mode(mode)
-   {
-     std::fill(files, files + COUNT_OF(files), 0);
-   }
-   cbl_declarative_t( ec_type_t type )
-     : section(0), global(false), type(type)
-     , nfile(0)
-     , mode(file_mode_none_e)
-   {
-     std::fill(files, files + COUNT_OF(files), 0);
-   }
- 
-   cbl_declarative_t( size_t section, ec_type_t type,
-                      const std::list<size_t>& files,
-                      cbl_file_mode_t mode, bool global = false )
-     : section(section), global(global), type(type)
-     , nfile(files.size())
-     , mode(mode)
-   {
-     assert( files.size() <= COUNT_OF(this->files) );
-     std::fill(this->files, this->files + COUNT_OF(this->files), 0);
-     if( nfile > 0 ) {
-       std::copy( files.begin(), files.end(), this->files );
-     }
-   }
-   cbl_declarative_t( const cbl_declarative_t& that )
-     : section(that.section), global(that.global), type(that.type)
-     , nfile(that.nfile)
-     , mode(that.mode)
-   {
-     std::fill(files, files + COUNT_OF(files), 0);
-     if( nfile > 0 ) {
-       std::copy( that.files, that.files + nfile, this->files );
-     }
-   }
- 
-   /*
-    * Sort file names before file modes, and file modes before non-IO.
-    */
-   bool operator<( const cbl_declarative_t& that ) const {
-     // file name declaratives first, in section order
-     if( nfile != 0 ) {
-       if( that.nfile != 0 ) return section < that.section;
-       return true;
-     }
-     // file mode declaratives between file name declaratives and non-IO
-     if( mode != file_mode_none_e ) {
-       if( that.nfile != 0 ) return false;
-       if( that.mode == file_mode_none_e ) return true;
-       return section < that.section;
-     }
-     // all others by section, after names and modes
-     if( that.nfile != 0 ) return false;
-     if( that.mode != file_mode_none_e ) return false;
-     return section < that.section;
-   }
- 
-   // TRUE if there are no files to match, or the provided file is in the list.
-   bool match_file( size_t file ) const {
-     static const auto pend = files + nfile;
- 
-     return nfile == 0 || pend != std::find(files, files + nfile, file);
-   }
- 
-   // USE Format 1 names a file mode, or at least one file, and not an EC.
-   bool is_format_1() const {
-     assert(type != ec_none_e || nfile > 0 || mode != file_mode_none_e);
-     return nfile > 0 || mode != file_mode_none_e;
-   }
- };
- 
- 
- /*
-  * ec_status_t represents the runtime exception condition status for
-  * any statement.  Prior to execution, the generated code
-  * clears "type", and sets "source_file" and "lineno".
-  *
-  * If the statement includes some kind of ON ERROR
-  * clause, the generated code sets "handled" to the exception type
-  * handled by that clause, else it sets "handled" to ec_none_e.
-  *
-  * Post-execution, the generated code sets "type" to the appropriate
-  * exception, if any.  The match-exception logic compares any raised
-  * exception to the set of declaratives, and returns a symbol-table
-  * index to the matching declarative, if any.
-  */
- class ec_status_t {
-   char msg[132];
- public:
-   ec_type_t type, handled;
-   cbl_name_t statement; // e.g., "ADD"
-   size_t lineno;
-   const char *source_file;
- 
-   ec_status_t()
-     : type(ec_none_e)
-     , handled(ec_none_e)
-     , lineno(0)
-     , source_file(NULL)
-   {
-     msg[0] = statement[0] = '\0';
-   }
- 
-   ec_status_t& update();
-   ec_status_t& enable( unsigned int mask );
- 
-   const char * exception_location() {
-     snprintf(msg, sizeof(msg), "%s:%zu: '%s'", source_file, lineno, statement);
-     return msg;
-   }
-   ec_type_t unhandled() const {
-     return ec_type_t(static_cast<unsigned int>(type)
-                      &
-                      ~static_cast<unsigned int>(handled));
-   }
- };
- 
  #endif
--- 117,120 ----
diff -Nrcpad gcc-16-20250504/libgcobol/gcobolio.h gcc-16-20250511/libgcobol/gcobolio.h
*** gcc-16-20250504/libgcobol/gcobolio.h	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/gcobolio.h	Sun May 11 22:32:40 2025
*************** typedef struct cblc_file_t
*** 96,101 ****
--- 96,102 ----
      {
      // This structure must match the code in structs.cc
      char                *name;             // This is the name of the structure; might be the name of an environment variable
+     size_t               symbol_table_index;  // of the related cbl_field_t structure
      char                *filename;         // The name of the file to be opened
      FILE                *file_pointer;     // The FILE *pointer
      cblc_field_t        *default_record;   // The record_area
diff -Nrcpad gcc-16-20250504/libgcobol/gfileio.cc gcc-16-20250511/libgcobol/gfileio.cc
*** gcc-16-20250504/libgcobol/gfileio.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/gfileio.cc	Sun May 11 22:32:40 2025
***************
*** 39,44 ****
--- 39,45 ----
  #include <time.h>
  #include <unistd.h>
  #include <algorithm>
+ #include <vector>
  
  #include "config.h"
  #include "libgcobol-fp.h"
*************** establish_status(cblc_file_t *file, long
*** 253,259 ****
                                    0,
                                    truncation_e,
                                    NULL);
!   // Set the EC-EXCEPTION accoring the status code
    __gg__set_exception_file(file);
    }
  
--- 254,260 ----
                                    0,
                                    truncation_e,
                                    NULL);
!   // Set the EC-EXCEPTION according to the status code
    __gg__set_exception_file(file);
    }
  
*************** void
*** 299,304 ****
--- 300,306 ----
  __gg__file_init(
    cblc_file_t   *file,
    const char    *name,
+   size_t         symbol_table_index,
    cblc_field_t **keys,
    int           *key_numbers,
    int           *uniques,
*************** __gg__file_init(
*** 319,324 ****
--- 321,327 ----
    if( !(file->flags & file_flag_initialized_e) )
      {
      file->name                = strdup(name);
+     file->symbol_table_index  = symbol_table_index;
      file->filename            = NULL ;
      file->file_pointer        = NULL ;
      file->keys                = keys;
*************** done:
*** 632,638 ****
    memcpy(file->default_record->data, stash, file->default_record->capacity);
    free(stash);
    fseek(file->file_pointer, starting_pos, SEEK_SET);
! 
    establish_status(file, -1);
    }
  
--- 635,641 ----
    memcpy(file->default_record->data, stash, file->default_record->capacity);
    free(stash);
    fseek(file->file_pointer, starting_pos, SEEK_SET);
!   file->prior_op = file_op_delete;
    establish_status(file, -1);
    }
  
*************** done:
*** 741,746 ****
--- 744,750 ----
    memcpy(file->default_record->data, stash, file->default_record->capacity);
    free(stash);
    fseek(file->file_pointer, starting_pos, SEEK_SET);
+   file->prior_op = file_op_delete;
    establish_status(file, -1);
    }
  
*************** done:
*** 1095,1103 ****
--- 1099,1109 ----
      memcpy(file->default_record->data, stash, file->record_area_min);
      free(stash);
      stash = NULL;
+     file->prior_op = file_op_delete;
      position_state_restore(file, position_state);
      }
  
+   file->prior_op = file_op_delete;
    establish_status(file, -1);
    }
  
*************** __io__file_delete(cblc_file_t *file, boo
*** 1124,1130 ****
      {
      file->flags |= file_flag_existed_e;
      }
-   file->prior_op = file_op_delete;
    }
  
  static void
--- 1130,1135 ----
*************** done:
*** 1529,1540 ****
      file->flags |= file_flag_existed_e;
      }
  
    establish_status(file, fpos);
    if( file->io_status < FhNotOkay )
      {
      file->flags |= file_flag_existed_e;
      }
-   file->prior_op = file_op_start;
    }
  
  static void
--- 1534,1545 ----
      file->flags |= file_flag_existed_e;
      }
  
+   file->prior_op = file_op_start;
    establish_status(file, fpos);
    if( file->io_status < FhNotOkay )
      {
      file->flags |= file_flag_existed_e;
      }
    }
  
  static void
*************** sequential_file_rewrite( cblc_file_t *fi
*** 1679,1688 ****
  done:
    // Per the standard, return the file location pointer back to whence it came:
    fseek(file->file_pointer, starting_position, SEEK_SET);
!   if( handle_ferror(file, __func__, "fseek() error") )
!     {
!     goto done;
!     }
    establish_status(file, starting_position);
    }
  
--- 1684,1692 ----
  done:
    // Per the standard, return the file location pointer back to whence it came:
    fseek(file->file_pointer, starting_position, SEEK_SET);
!   handle_ferror(file, __func__, "fseek() error");
!   file->prior_op = file_op_rewrite;
!   file->prior_op = file_op_rewrite;
    establish_status(file, starting_position);
    }
  
*************** relative_file_rewrite_varying( cblc_file
*** 1798,1807 ****
  done:
    // Per the standard, return the file location pointer back to whence it came:
    fseek(file->file_pointer, starting_position, SEEK_SET);
!   if( handle_ferror(file, __func__, "fseek() error") )
!     {
!     goto done;
!     }
    establish_status(file, starting_position);
    }
  
--- 1802,1809 ----
  done:
    // Per the standard, return the file location pointer back to whence it came:
    fseek(file->file_pointer, starting_position, SEEK_SET);
!   handle_ferror(file, __func__, "fseek() error"); 
!   file->prior_op = file_op_rewrite;
    establish_status(file, starting_position);
    }
  
*************** relative_file_rewrite( cblc_file_t *file
*** 1901,1910 ****
  done:
    // Per the standard, return the file location pointer back to whence it came:
    fseek(file->file_pointer, starting_position, SEEK_SET);
!   if( handle_ferror(file, __func__, "fseek() error") )
!     {
!     goto done;
!     }
    establish_status(file, starting_position);
    }
  
--- 1903,1910 ----
  done:
    // Per the standard, return the file location pointer back to whence it came:
    fseek(file->file_pointer, starting_position, SEEK_SET);
!   handle_ferror(file, __func__, "fseek() error"); 
!   file->prior_op = file_op_rewrite;
    establish_status(file, starting_position);
    }
  
*************** done:
*** 2173,2179 ****
      {
      position_state_restore(file, position_state);
      }
! 
    establish_status(file, fpos);
    file->prior_read_location = -1;
    }
--- 2173,2179 ----
      {
      position_state_restore(file, position_state);
      }
!   file->prior_op = file_op_rewrite;
    establish_status(file, fpos);
    file->prior_read_location = -1;
    }
*************** __io__file_rewrite(cblc_file_t *file, si
*** 2204,2210 ****
      {
      file->flags |= file_flag_existed_e;
      }
-   file->prior_op = file_op_rewrite;
    }
  
  static void
--- 2204,2209 ----
*************** relative_file_write_varying(cblc_file_t
*** 2352,2357 ****
--- 2351,2357 ----
      }
  
  done:
+   file->prior_op = file_op_write;
    establish_status(file, -1);
    }
  
*************** relative_file_write(cblc_file_t    *file
*** 2485,2490 ****
--- 2485,2491 ----
      }
  
  done:
+   file->prior_op = file_op_write;
    establish_status(file, -1);
    }
  
*************** sequential_file_write(cblc_file_t    *fi
*** 2672,2677 ****
--- 2673,2679 ----
      }
  
  done:
+   file->prior_op = file_op_write;
    establish_status(file, -1);
    }
  
*************** indexed_file_write( cblc_file_t    *file
*** 2839,2844 ****
--- 2841,2847 ----
    file_indexed_update_indices(file, position_to_write);
  
  done:
+   file->prior_op = file_op_write;
    establish_status(file, -1);
    }
  
*************** __io__file_write(   cblc_file_t    *file
*** 2925,2936 ****
        break;
      }
  done:
    establish_status(file, -1);
    if( file->io_status < FhNotOkay )
      {
      file->flags |= file_flag_existed_e;
      }
-   file->prior_op = file_op_write;
    }
  
  static void
--- 2928,2939 ----
        break;
      }
  done:
+   file->prior_op = file_op_write;
    establish_status(file, -1);
    if( file->io_status < FhNotOkay )
      {
      file->flags |= file_flag_existed_e;
      }
    }
  
  static void
*************** line_sequential_file_read(  cblc_file_t
*** 3074,3079 ****
--- 3077,3083 ----
                                      NULL);
      }
  done:
+   file->prior_op = file_op_read;
    establish_status(file, fpos);
    }
  
*************** sequential_file_read(  cblc_file_t  *fil
*** 3186,3191 ****
--- 3190,3196 ----
                                      NULL);
      }
  done:
+   file->prior_op = file_op_read;
    establish_status(file, fpos);
    return characters_read;
    }
*************** done:
*** 3373,3378 ****
--- 3378,3384 ----
                                      truncation_e,
                                      NULL);
      }
+   file->prior_op = file_op_read;
    establish_status(file, fpos);
    }
  
*************** done:
*** 3571,3576 ****
--- 3577,3583 ----
                                      truncation_e,
                                      NULL);
      }
+   file->prior_op = file_op_read;
    establish_status(file, fpos);
    }
  
*************** done:
*** 3764,3769 ****
--- 3771,3777 ----
                                      truncation_e,
                                      NULL);
      }
+   file->prior_op = file_op_read;
    establish_status(file, fpos);
    }
  
*************** __io__file_read(cblc_file_t *file,
*** 3792,3797 ****
--- 3800,3806 ----
          {
          file->io_status = FsReadError; // "46"
          }
+       file->prior_op = file_op_read;
        establish_status(file, -1);
        return;
        }
*************** __io__file_read(cblc_file_t *file,
*** 3810,3821 ****
--- 3819,3832 ----
            {
            file->io_status = FsReadError; // "46"
            }
+         file->prior_op = file_op_read;
          establish_status(file, -1);
          }
        else
          {
          // This is a format 2 read
          file->io_status = FsNotFound; // "23"
+         file->prior_op = file_op_read;
          establish_status(file, -1);
          }
        return;
*************** __io__file_read(cblc_file_t *file,
*** 3826,3831 ****
--- 3837,3843 ----
      {
      // Attempting to read a file that isn't open
      file->io_status = FsReadNotOpen;    // "47"
+     file->prior_op = file_op_read;
      establish_status(file, -1);
      return;
      }
*************** __io__file_read(cblc_file_t *file,
*** 3834,3839 ****
--- 3846,3852 ----
      {
      // The file is open, but not in INPUT or I-O mode:
      file->io_status = FsReadNotOpen;    // "47"
+     file->prior_op = file_op_read;
      establish_status(file, -1);
      return;
      }
*************** __io__file_read(cblc_file_t *file,
*** 3876,3882 ****
      {
      file->flags |= file_flag_existed_e;
      }
-   file->prior_op = file_op_read;
    }
  
  static void
--- 3889,3894 ----
*************** __io__file_open(cblc_file_t *file,
*** 4327,4334 ****
  
      __gg__file_reopen(file, mode_char);
      }
-   establish_status(file, -1);
    file->prior_op = file_op_open;
    }
  
  static void
--- 4339,4346 ----
  
      __gg__file_reopen(file, mode_char);
      }
    file->prior_op = file_op_open;
+   establish_status(file, -1);
    }
  
  static void
*************** __io__file_close( cblc_file_t *file, int
*** 4387,4394 ****
    file->filename = NULL;
  
    done:
-   establish_status(file, fpos);
    file->prior_op = file_op_close;
    }
  
  static cblc_file_t *stashed;
--- 4399,4406 ----
    file->filename = NULL;
  
    done:
    file->prior_op = file_op_close;
+   establish_status(file, fpos);
    }
  
  static cblc_file_t *stashed;
diff -Nrcpad gcc-16-20250504/libgcobol/gmath.cc gcc-16-20250511/libgcobol/gmath.cc
*** gcc-16-20250504/libgcobol/gmath.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/gmath.cc	Sun May 11 22:32:40 2025
***************
*** 38,43 ****
--- 38,44 ----
  #include <time.h>
  #include <unistd.h>
  #include <algorithm>
+ #include <vector>
  
  #include "config.h"
  #include "libgcobol-fp.h"
***************
*** 47,53 ****
  #include "io.h"
  #include "gcobolio.h"
  #include "libgcobol.h"
- #include "common-defs.h"
  #include "gmath.h"
  #include "gcobolio.h"
  
--- 48,53 ----
diff -Nrcpad gcc-16-20250504/libgcobol/intrinsic.cc gcc-16-20250511/libgcobol/intrinsic.cc
*** gcc-16-20250504/libgcobol/intrinsic.cc	Sun May  4 22:32:30 2025
--- gcc-16-20250511/libgcobol/intrinsic.cc	Sun May 11 22:32:40 2025
***************
*** 43,48 ****
--- 43,49 ----
  #include <cctype>
  #include <langinfo.h>
  #include <string.h>
+ #include <vector>
  
  #include "config.h"
  #include "libgcobol-fp.h"
diff -Nrcpad gcc-16-20250504/libgcobol/libgcobol.cc gcc-16-20250511/libgcobol/libgcobol.cc
*** gcc-16-20250504/libgcobol/libgcobol.cc	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgcobol/libgcobol.cc	Sun May 11 22:32:40 2025
***************
*** 27,53 ****
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
- #include <ctype.h>
- #include <err.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <math.h>
- #include <fenv.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #include <unistd.h>
- #include <vector>
  #include <algorithm>
! #include <unordered_map>
  #include <set>
  #include <string>
  #include <setjmp.h>
  #include <signal.h>
! #include <dlfcn.h>
! #include <dirent.h>
! #include <sys/resource.h>
  
  #include "config.h"
  #include "libgcobol-fp.h"
--- 27,58 ----
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  #include <algorithm>
! #include <cctype>
! #include <cerrno>
! #include <cstdio>
! #include <cstdlib>
! #include <cstring>
! #include <ctime>
  #include <set>
+ #include <stack>
  #include <string>
+ #include <unordered_map>
+ #include <vector>
+ 
+ #include <dirent.h>
+ #include <dlfcn.h>
+ #include <err.h>
+ #include <fcntl.h>
+ #include <fenv.h>
+ #include <math.h> // required for fpclassify(3)
  #include <setjmp.h>
  #include <signal.h>
! #include <syslog.h>
! #include <unistd.h>
! #if __has_include(<errno.h>)
! # include <errno.h> // for program_invocation_short_name
! #endif
  
  #include "config.h"
  #include "libgcobol-fp.h"
***************
*** 62,67 ****
--- 67,73 ----
  #include "valconv.h"
  
  #include <sys/mman.h>
+ #include <sys/resource.h>
  #include <sys/stat.h>
  #include <sys/types.h>
  
*************** strfromf64 (char *s, size_t n, const cha
*** 93,98 ****
--- 99,112 ----
  # endif
  #endif
  
+ // Enable Declarative tracing via "match_declarative" environment variable.
+ #if defined(MATCH_DECLARATIVE) || true
+ # undef  MATCH_DECLARATIVE
+ # define MATCH_DECLARATIVE getenv("match_declarative")
+ #else
+ # define MATCH_DECLARATIVE (nullptr)
+ #endif
+ 
  // This couldn't be defined in symbols.h because it conflicts with a LEVEL66
  // in parse.h
  #define LEVEL66 (66)
*************** strfromf64 (char *s, size_t n, const cha
*** 107,114 ****
  
  // These global values are established as the COBOL program executes
  int         __gg__exception_code              = 0    ;
- int         __gg__exception_handled           = 0    ;
- int         __gg__exception_file_number       = 0    ;
  int         __gg__exception_file_status       = 0    ;
  const char *__gg__exception_file_name         = NULL ;
  const char *__gg__exception_program_id        = NULL ;
--- 121,126 ----
*************** int         __gg__exception_line_number
*** 119,128 ****
  const char *__gg__exception_statement         = NULL ;
  int         __gg__default_compute_error       = 0    ;
  int         __gg__rdigits                     = 0    ;
- int         __gg__odo_violation               = 0    ;
  int         __gg__nop                         = 0    ;
  int         __gg__main_called                 = 0    ;
  
  // What follows are arrays that are used by features like INSPECT, STRING,
  // UNSTRING, and, particularly, arithmetic_operation.  These features are
  // characterized by having unknown, and essentially unlimited, numbers of
--- 131,144 ----
  const char *__gg__exception_statement         = NULL ;
  int         __gg__default_compute_error       = 0    ;
  int         __gg__rdigits                     = 0    ;
  int         __gg__nop                         = 0    ;
  int         __gg__main_called                 = 0    ;
  
+ // During SORT operations, we don't want the end-of-file condition, which
+ // happens as a matter of course, from setting the EOF exception condition.
+ // Setting this variable to 'true' suppresses the error condition.
+ static bool sv_suppress_eof_ec = false;
+ 
  // What follows are arrays that are used by features like INSPECT, STRING,
  // UNSTRING, and, particularly, arithmetic_operation.  These features are
  // characterized by having unknown, and essentially unlimited, numbers of
*************** size_t       *  __gg__treeplet_4s
*** 171,188 ****
  // used to keep track of local variables.
  size_t      __gg__unique_prog_id              = 0    ;
  
! // These values are the persistent stashed versions of the global values
! static int         stashed_exception_code;
! static int         stashed_exception_handled;
! static int         stashed_exception_file_number;
! static int         stashed_exception_file_status;
! static const char *stashed_exception_file_name;
! static const char *stashed_exception_program_id;
! static const char *stashed_exception_section;
! static const char *stashed_exception_paragraph;
! static const char *stashed_exception_source_file;
! static int         stashed_exception_line_number;
! static const char *stashed_exception_statement;
  
  static int sv_from_raise_statement = 0;
  
--- 187,209 ----
  // used to keep track of local variables.
  size_t      __gg__unique_prog_id              = 0    ;
  
! // Whenever an exception status is set, a snapshot of the current statement
! // location information are established in the "last_exception..." variables.
! // This is in accordance with the ISO requirements of "14.6.13.1.1 General" that
! // describe how a "last exception status" is maintained.
! // other "location" information 
! static int         last_exception_code;
! static const char *last_exception_program_id;
! static const char *last_exception_section;
! static const char *last_exception_paragraph;
! static const char *last_exception_source_file;
! static int         last_exception_line_number;
! static const char *last_exception_statement;
! // These variables are similar, and are established when an exception is
! // raised for a file I-O operation.
! static cblc_file_prior_op_t last_exception_file_operation;
! static file_status_t        last_exception_file_status;
! static const char          *last_exception_file_name;
  
  static int sv_from_raise_statement = 0;
  
*************** void       *__gg__entry_location = NULL;
*** 205,222 ****
--- 226,373 ----
  // nested PERFORM PROC statements.
  void       *__gg__exit_address = NULL;
  
+ /*
+  * ec_status_t represents the runtime exception condition status for
+  * any statement.  There are 4 states:
+  *   1.  initial, all zeros
+  *   2.  updated, copy global EC state for by Declarative and/or default
+  *   3.  matched, Declarative found, isection nonzero
+  *   4.  handled, where handled == type
+  *
+  * If the statement includes some kind of ON ERROR
+  * clause that covers it, the generated code does not raise an EC. 
+  *
+  * The status is updated by __gg_match_exception if it runs, else
+  * __gg__check_fatal_exception. 
+  *
+  * If a Declarative is matched, its section number is passed to handled_by(),
+  * which does two things:
+  *  1. sets isection to record the declarative
+  *  2. for a nonfatal EC, sets handled, indication no further action is needed
+  *
+  * A Declarative may use RESUME, which clears ec_status, which is a "handled" state. 
+  * 
+  * Default processing ensures return to initial state. 
+  */
+ class ec_status_t {
+  public:
+   struct file_status_t {
+     size_t ifile; 
+     cblc_file_prior_op_t operation; 
+     cbl_file_mode_t mode; 
+     cblc_field_t *user_status;
+     const char * filename;
+     file_status_t() : ifile(0) , operation(file_op_none), mode(file_mode_none_e) {}
+     file_status_t( cblc_file_t *file )
+       : ifile(file->symbol_table_index)
+       , operation(file->prior_op)
+       , mode(cbl_file_mode_t(file->mode_char))
+       , user_status(file->user_status)
+       , filename(file->filename)
+     {}
+     const char * op_str() const {
+       switch( operation ) {
+       case file_op_none: return "none";
+       case file_op_open: return "open";
+       case file_op_close: return "close";
+       case file_op_start: return "start";
+       case file_op_read: return "read";
+       case file_op_write: return "write";
+       case file_op_rewrite: return "rewrite";
+       case file_op_delete: return "delete";
+       }
+       return "???";
+     }
+   };
+  private:  
+   char msg[132];
+   ec_type_t type, handled;
+   size_t isection;
+   cbl_enabled_exceptions_t enabled;
+   cbl_declaratives_t declaratives;
+   struct file_status_t file;
+  public:
+   size_t lineno;
+   const char *source_file;
+   cbl_name_t statement; // e.g., "ADD"
+ 
+   ec_status_t()
+     : type(ec_none_e)
+     , handled(ec_none_e)
+     , isection(0)
+     , lineno(0)
+     , source_file(NULL)
+   {
+     msg[0] = statement[0] = '\0';
+   }
+ 
+   bool is_fatal() const;
+   ec_status_t& update();
+   
+   bool is_enabled() const { return enabled.match(type); }
+   bool is_enabled( ec_type_t ec) const { return enabled.match(ec); }
+   ec_status_t& handled_by( size_t declarative_section ) {
+     isection = declarative_section;
+     // A fatal exception remains unhandled unless RESUME clears it. 
+     if( ! is_fatal() ) { 
+       handled = type;
+     }
+     return *this;
+   }
+   ec_status_t& clear() {
+     handled = type = ec_none_e;
+     isection = lineno = 0;
+     msg[0] = statement[0] = '\0';
+     return *this;
+   }
+   bool unset() const { return isection == 0 && lineno == 0; }
+   
+   void reset_environment() const;
+   ec_status_t& copy_environment();
+   
+   // Return the EC's type if it is *not* handled.
+   ec_type_t unhandled() const {
+     bool was_handled = ec_cmp(type, handled);
+     return was_handled? ec_none_e : type;
+   }
+ 
+   bool done() const { return unhandled() == ec_none_e; }
+ 
+   const file_status_t& file_status() const { return file; }
+ 
+   const char * exception_location() {
+     snprintf(msg, sizeof(msg), "%s:%zu: '%s'", source_file, lineno, statement);
+     return msg;
+   }
+ };
+ 
+ /*
+  * Capture the global EC status at the beginning of Declarative matching. While
+  * executing the Declarative, push the current status on a stack. When the
+  * Declarative returns, restore EC status from the stack.
+  *
+  * If the Declarative includes a RESUME statement, it clears the on-stack
+  * status, thus avoiding any default handling.
+  */
  static ec_status_t ec_status;
+ static std::stack<ec_status_t> ec_stack;
+ 
+ static cbl_enabled_exceptions_t enabled_ECs;
+ static cbl_declaratives_t declaratives;
  
  static const ec_descr_t *
  local_ec_type_descr( ec_type_t type ) {
    auto p = std::find( __gg__exception_table, __gg__exception_table_end, type );
    if( p == __gg__exception_table_end )
      {
+       warnx("%s:%d: no such EC value %08x", __func__, __LINE__, type);
      __gg__abort("Fell off the end of the __gg__exception_table");
      }
    return p;
  }
  
+ cblc_file_t * __gg__file_stashed();
+ 
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wunused-function"
  // Keep this debugging function around for when it is needed
*************** local_ec_type_str( ec_type_t type ) {
*** 228,246 ****
  }
  #pragma GCC diagnostic pop
  
! ec_status_t& ec_status_t::update() {
!   handled =   ec_type_t(__gg__exception_handled);
!   type    =   ec_type_t(__gg__exception_code);
!   __gg__exception_code = ec_none_e;
!   source_file = __gg__exception_source_file;
!   lineno = __gg__exception_line_number;
    if( __gg__exception_statement ) {
      snprintf(statement, sizeof(statement), "%s", __gg__exception_statement);
    }
  
    return *this;
  }
  
  static cbl_truncation_mode truncation_mode = trunc_std_e;
  
  struct program_state
--- 379,428 ----
  }
  #pragma GCC diagnostic pop
  
! bool
! ec_status_t::is_fatal() const {
!   auto descr = local_ec_type_descr(type);
!   return descr->disposition == ec_category_fatal_e;
! }
! 
! ec_status_t&
! ec_status_t::update() {
!   handled =   ec_none_e;
!   type =      ec_type_t(__gg__exception_code);
!   source_file =         __gg__exception_source_file;
!   lineno =              __gg__exception_line_number;
    if( __gg__exception_statement ) {
      snprintf(statement, sizeof(statement), "%s", __gg__exception_statement);
    }
+   cblc_file_t *stashed = __gg__file_stashed();
+   this->file = stashed? file_status_t(stashed) : file_status_t();
+ 
+   if( type != ec_none_e && MATCH_DECLARATIVE ) {
+     warnx( "ec_status_t::update:%d: EC %s by %s (handled %s) " , __LINE__,
+            local_ec_type_str(type),
+            __gg__exception_statement? statement : "<none>",
+            local_ec_type_str(handled) );
+   }
+ 
+   this->enabled = ::enabled_ECs;
+   this->declaratives = ::declaratives;
+ 
+   return *this;
+ }
  
+ ec_status_t&
+ ec_status_t::copy_environment() {
+   this->enabled = ::enabled_ECs;
+   this->declaratives = ::declaratives;
    return *this;
  }
  
+ void
+ ec_status_t::reset_environment() const {
+   ::enabled_ECs = enabled;
+   ::declaratives = declaratives;
+ }
+ 
  static cbl_truncation_mode truncation_mode = trunc_std_e;
  
  struct program_state
*************** __gg__compare_2(cblc_field_t *left_side,
*** 4310,4316 ****
        // The right side is numeric.  Sometimes people write code where they
        // take the refmod of a numeric displays.  If somebody did that here,
        // just do a complete straight-up character by character comparison:
!       
        if( right_refmod )
          {
          retval = compare_strings(   (char *)left_location,
--- 4492,4498 ----
        // The right side is numeric.  Sometimes people write code where they
        // take the refmod of a numeric displays.  If somebody did that here,
        // just do a complete straight-up character by character comparison:
! 
        if( right_refmod )
          {
          retval = compare_strings(   (char *)left_location,
*************** __gg__file_sort_ff_input(   cblc_file_t
*** 6181,6186 ****
--- 6363,6369 ----
    // We are going to read records from input and write them to workfile.  These
    // files are already open.
  
+   sv_suppress_eof_ec = true;
    for(;;)
      {
      // Read the data from the input file into its record_area
*************** __gg__file_sort_ff_input(   cblc_file_t
*** 6213,6218 ****
--- 6396,6402 ----
                          before_advancing,
                          0); // non-random
      }
+   sv_suppress_eof_ec = false;
    }
  
  extern "C"
*************** __gg__file_sort_ff_output(  cblc_file_t
*** 6227,6232 ****
--- 6411,6417 ----
    // Make sure workfile is positioned at the beginning
    __gg__file_reopen(workfile, 'r');
  
+   sv_suppress_eof_ec = true;
    for(;;)
      {
      __gg__file_read(  workfile,
*************** __gg__file_sort_ff_output(  cblc_file_t
*** 6248,6253 ****
--- 6433,6439 ----
                          advancing,
                          0); // 1 would be is_random
      }
+   sv_suppress_eof_ec = false;
    }
  
  extern "C"
*************** __gg__sort_workfile(cblc_file_t    *work
*** 6272,6277 ****
--- 6458,6464 ----
    size_t bytes_read;
    size_t bytes_to_write;
  
+   sv_suppress_eof_ec = true;
    for(;;)
      {
      __gg__file_read(workfile,
*************** __gg__sort_workfile(cblc_file_t    *work
*** 6307,6312 ****
--- 6494,6500 ----
      memcpy(contents+offset, workfile->default_record->data, bytes_read);
      offset += bytes_read;
      }
+   sv_suppress_eof_ec = false;
  
    sort_contents(contents,
                  offsets,
*************** __gg__display(    cblc_field_t *field,
*** 8776,8782 ****
    {
    display_both( field,
                  field->data + offset,
!                 size ? size : field->capacity,
                  0,
                  file_descriptor,
                  advance);
--- 8964,8970 ----
    {
    display_both( field,
                  field->data + offset,
!                 size,
                  0,
                  file_descriptor,
                  advance);
*************** __gg__display_string( int     file_descr
*** 8830,8837 ****
      }
    }
  
- #pragma GCC diagnostic push
- 
  static
  char *
  mangler_core(const char *s, const char *eos)
--- 9018,9023 ----
*************** int __gg__is_canceled(size_t function_po
*** 10900,10957 ****
  static inline ec_type_t
  local_ec_type_of( file_status_t status )
    {
-   ec_type_t retval;
    int status10 = (int)status / 10;
!   if( !(status10 < 10 && status10 >= 0) )
      {
      __gg__abort("local_ec_type_of(): status10 out of range");
      }
!   switch(status10)
!     {
!     case 0:
!       // This actually should be ec_io_warning_e, but that's new for ISO 1989:2013
!       retval = ec_none_e;
!       break;
!     case 1:
!       retval = ec_io_at_end_e;
!       break;
!     case 2:
!       retval = ec_io_invalid_key_e;
!       break;
!     case 3:
!       retval = ec_io_permanent_error_e;
!       break;
!     case 4:
!       retval = ec_io_logic_error_e;
!       break;
!     case 5:
!       retval = ec_io_record_operation_e;
!       break;
!     case 6:
!       retval = ec_io_file_sharing_e;
!       break;
!     case 7:
!       retval = ec_io_record_content_e;
!       break;
!     case 9:
!       retval = ec_io_imp_e;
!       break;
  
!     default:
!       retval = ec_none_e;
!       break;
!     }
!   return retval;
    }
  
- bool
- cbl_enabled_exceptions_array_t::match( ec_type_t ec, size_t file ) const {
-   auto output = enabled_exception_match( ecs, ecs + nec, ec, file );
-   return output < ecs + nec? output->enabled : false;
- }
- 
- static cbl_enabled_exceptions_array_t enabled_ECs;
- 
  /*
   * Store and report the enabled exceptions.
   * 7.3.20.3 General rules:
--- 11086,11115 ----
  static inline ec_type_t
  local_ec_type_of( file_status_t status )
    {
    int status10 = (int)status / 10;
!   assert( 0 <= status10 ); // was enum, can't be negative. 
!   if( 10 < status10 ) 
      {
      __gg__abort("local_ec_type_of(): status10 out of range");
      }
!   
!   static const std::vector<ec_type_t> ec_by_status {
!     /* 0 */ ec_none_e, // ec_io_warning_e if low byte is nonzero
!     /* 1 */ ec_io_at_end_e, 
!     /* 2 */ ec_io_invalid_key_e,
!     /* 3 */ ec_io_permanent_error_e,
!     /* 4 */ ec_io_logic_error_e,
!     /* 5 */ ec_io_record_operation_e,
!     /* 6 */ ec_io_file_sharing_e,
!     /* 7 */ ec_io_record_content_e,
!     /* 8 */ ec_none_e, // unused, not defined by ISO
!     /* 9 */ ec_io_imp_e,
!   };
!   assert(ec_by_status.size() == 10);
  
!   return ec_by_status[status10];
    }
  
  /*
   * Store and report the enabled exceptions.
   * 7.3.20.3 General rules:
*************** struct exception_descr_t {
*** 10962,11119 ****
    std::set<size_t> files;
  };
  
  /*
   * Compare the raised exception, cbl_exception_t, to the USE critera
!  * of a declarative, cbl_declarative_t.  Return FALSE if the exception
!  * raised was already handled by the statement that provoked the
!  * exception, as indicated by the "handled" file status.
!  *
!  * This copes with I/O exceptions: ec_io_e and friends.
   */
! 
! class match_file_declarative {
!   const cbl_exception_t& oops;
!   const ec_type_t handled_type;
!  protected:
!   bool handled() const {
!     return oops.type == handled_type || oops.type == ec_none_e;
    }
!  public:
!   match_file_declarative( const cbl_exception_t& oops, file_status_t handled )
!     : oops(oops), handled_type( local_ec_type_of(handled) )
!   {}
  
!   bool operator()( const cbl_declarative_t& dcl ) {
  
!     // Declarative is for the raised exception and not handled by the statement.
!     if( handled() ) return false;
!     bool matches = enabled_ECs.match(dcl.type);
  
      // I/O declaratives match by file or mode, not EC.
      if( dcl.is_format_1() ) { // declarative is for particular files or mode
!       if( dcl.nfile > 0 ) {
!         matches = dcl.match_file(oops.file);
!       } else {
!         matches = oops.mode == dcl.mode;
        }
      }
  
!     return matches;
    }
! };
! 
! cblc_file_t * __gg__file_stashed();
! static ec_type_t ec_raised_and_handled;
  
  static void
! default_exception_handler( ec_type_t ec)
  {
    if( ec != ec_none_e ) {
!     auto p = std::find_if( __gg__exception_table, __gg__exception_table_end,
                             [ec](const ec_descr_t& descr) {
                               return descr.type == ec;
                             } );
!     if( p == __gg__exception_table_end ) {
!       err(EXIT_FAILURE,
!           "logic error: %s:%zu: %s unknown exception %x",
!            ec_status.source_file,
!            ec_status.lineno,
!            ec_status.statement,
!            ec );
      }
  
!     const char *disposition = NULL;
  
!     switch( p->disposition ) {
!     case ec_category_fatal_e:
!       warnx("fatal exception at %s:%zu:%s %s (%s)",
!             ec_status.source_file,
!             ec_status.lineno,
!             ec_status.statement,
!             p->name,
!             p->description );
!       abort();
!       break;
      case ec_category_none_e:
-       disposition = "category none?";
-       break;
-     case ec_category_nonfatal_e:
-       disposition = "nonfatal";
-       break;
-     case ec_category_implementor_e:
-       disposition = "implementor";
-       break;
      case uc_category_none_e:
-       disposition = "uc_category_none_e";
        break;
      case uc_category_fatal_e:
!       disposition = "uc_category_fatal_e";
        break;
      case uc_category_nonfatal_e:
!       disposition = "uc_category_nonfatal_e";
        break;
      case uc_category_implementor_e:
-       disposition = "uc_category_implementor_e";
        break;
      }
  
!     // If the EC was handled by a declarative, keep mum.
!     if( ec == ec_raised_and_handled ) {
!       ec_raised_and_handled = ec_none_e;
!       return;
!     }
! 
!     warnx("%s exception at %s:%zu:%s %s (%s)",
!           disposition,
!           ec_status.source_file,
!           ec_status.lineno,
!           ec_status.statement,
!           p->name,
!           p->description );
    }
  }
  
  extern "C"
  void
  __gg__check_fatal_exception()
  {
!   if( ec_raised_and_handled == ec_none_e ) return;
!   /*
!    * "... if checking for EC-I-O exception conditions is not enabled,
!    * there is no link between EC-I-O exception conditions and I-O
!    * status values."
!    */
!   if( ec_cmp(ec_raised_and_handled, ec_io_e) ) return;
  
!   default_exception_handler(ec_raised_and_handled);
!   ec_raised_and_handled = ec_none_e;
  }
  
  extern "C"
  void
! __gg__clear_exception()
  {
!   ec_raised_and_handled = ec_none_e;
  }
  
! 
! cbl_enabled_exceptions_array_t&
! cbl_enabled_exceptions_array_t::operator=( const cbl_enabled_exceptions_array_t& input )
  {
!   if( nec == input.nec ) {
!     if( nec == 0 || 0 == memcmp(ecs, input.ecs, nbytes()) ) return *this;
!   }
  
!   if( nec < input.nec ) {
!     if( nec > 0 ) delete[] ecs;
!     ecs = new cbl_enabled_exception_t[1 + input.nec];
!   }
!   if( input.nec > 0 ) {
!     auto pend = std::copy( input.ecs, input.ecs + input.nec, ecs );
!     std::fill(pend, ecs + input.nec, cbl_enabled_exception_t());
!   }
!   nec = input.nec;
!   return *this;
  }
  
  // Update the list of compiler-maintained enabled exceptions.
--- 11120,11432 ----
    std::set<size_t> files;
  };
  
+ struct cbl_exception_t {
+   size_t program, file;
+   ec_type_t type;
+   cbl_file_mode_t mode;
+ };
+ 
  /*
   * Compare the raised exception, cbl_exception_t, to the USE critera
!  * of a declarative, cbl_declarative_t.
   */
! static bool
! match_declarative( bool enabled,
!                    const cbl_exception_t& raised,
!                    const cbl_declarative_t& dcl )
! {
!   if( MATCH_DECLARATIVE && raised.type) {
!     warnx("match_declarative: checking:    ec %s vs. dcl %s (%s enabled and %s format_1)",
!           local_ec_type_str(raised.type),
!           local_ec_type_str(dcl.type),
!           enabled? "is" : "not",
!           dcl.is_format_1()? "is" : "not");
    }
!   if( ! (enabled || dcl.is_format_1()) ) return false;
  
!   bool matches = ec_cmp(raised.type, (dcl.type));
  
!   if( matches && dcl.nfile > 0 ) {
!     matches = dcl.match_file(raised.file);
!   }
  
+   // Having matched, the EC must either be enabled, or
+   // the Declarative must be USE Format 1.
+   if( matches ) {
      // I/O declaratives match by file or mode, not EC.
      if( dcl.is_format_1() ) { // declarative is for particular files or mode
!       if( dcl.nfile == 0 ) {
!         matches = raised.mode == dcl.mode;
        }
+     } else {
+       matches = enabled;
      }
  
!     if( matches && MATCH_DECLARATIVE ) {
!       warnx("                   matches exception      %s (file %zu mode %s)",
!             local_ec_type_str(raised.type),
!             raised.file,
!             cbl_file_mode_str(raised.mode));
!     }
    }
!   return matches;
! }
  
+ /*
+  * The default exception handler is called if:
+  *   1.  The EC is enabled and was not handled by a Declarative, or
+  *   2.  The EC is EC-I-O and was not handled by a Format-1 Declarative, or
+  *   3.  The EC is EC-I-O, associated with a file, and is not OPEN or CLOSE.
+  */
  static void
! default_exception_handler( ec_type_t ec )
  {
+ #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+   /* Declared in errno.h, when available.  */
+   const char *ident = program_invocation_short_name;
+ #elif defined (HAVE_GETPROGNAME)
+   /* Declared in stdlib.h.  */
+   const char *ident = getprogname();
+ #else
+   /* Avoid a NULL entry.  */
+   const char *ident = "unnamed_COBOL_program";
+ #endif
+   static bool first_time = true;
+   static int priority = LOG_INFO, option = LOG_PERROR, facility = LOG_USER;
+   ec_disposition_t disposition = ec_category_fatal_e;
+ 
+   if( first_time ) {
+     // TODO: Program to set option in library via command-line and/or environment.
+     //       Library listens to program, not to the environment.
+     openlog(ident, option, facility);
+     first_time = false;
+   }
+ 
    if( ec != ec_none_e ) {
!     auto pec = std::find_if( __gg__exception_table, __gg__exception_table_end,
                             [ec](const ec_descr_t& descr) {
                               return descr.type == ec;
                             } );
!     if( pec != __gg__exception_table_end ) {
!       disposition = pec->disposition;
!     } else {
!       warnx("logic error: unknown exception %x", ec );
      }
+     /*
+      * An enabled, unhandled fatal EC normally results in termination. But
+      * EC-I-O is a special case:
+      *   OPEN and CLOSE never result in termination.
+      *   A SELECT statement with FILE STATUS indicates the user will handle the error.
+      *   Only I/O statements are considered.
+      * Declaratives are handled first.  We are in the default handler here,
+      * which is reached only if no Declarative was matched.
+      */
+     auto file = ec_status.file_status();
+     const char *filename = nullptr;
  
!     if( file.ifile ) {
!       filename = file.filename;
!       switch( last_exception_file_operation ) {
!       case file_op_none:   // not an I/O statement
!         assert(false);
!         abort();
!       case file_op_open:
!       case file_op_close:  // No OPEN/CLOSE results in a fatal error.
!         disposition = ec_category_none_e;
!         break;
!       default:
!         if( file.user_status ) {
!           // Not fatal if FILE STATUS is part of the file's SELECT statement.
!           disposition = ec_category_none_e;
!         }
!         break;
!       }
!     } else {
!       assert( ec_status.is_enabled() );
!       assert( ec_status.is_enabled(ec) );
!     }
  
!     switch( disposition ) {
      case ec_category_none_e:
      case uc_category_none_e:
        break;
+     case ec_category_fatal_e:
      case uc_category_fatal_e:
!       if( filename ) {
!         syslog(priority, "fatal exception: %s:%zu: %s %s: %s (%s)",
!                program_name,
!                ec_status.lineno,
!                ec_status.statement,
!                filename, // show affected file before EC name
!                pec->name,
!                pec->description);
!       } else {
!         syslog(priority, "fatal exception: %s:%zu: %s: %s (%s)",
!                program_name,
!                ec_status.lineno,
!                ec_status.statement,
!                pec->name,
!                pec->description);
!       }
!       abort();
        break;
+     case ec_category_nonfatal_e:
      case uc_category_nonfatal_e:
!       syslog(priority, "%s:%zu: %s: %s (%s)",
!              program_name,
!              ec_status.lineno,
!              ec_status.statement,
!              pec->name,
!              pec->description);
        break;
+     case ec_category_implementor_e:
      case uc_category_implementor_e:
        break;
      }
  
!     ec_status.clear();
    }
  }
  
+ /*
+  * To reach the default handler, an EC must have effect and not have been
+  * handled by program logic.  To have effect, it must have been enabled
+  * explictly, or be of type EC-I-O.  An EC may be handled by the statement or
+  * by a Declarative.
+  *
+  * Any EC handled by statement's conditional clause (e.g. ON SIZE ERROR)
+  * prevents an EC from being raised.  Because it is not raised, it is handled
+  * neither by a Declarative, nor by the the default handler.
+  *
+  * A nonfatal EC matched to a Declarative is considered handled.  A fatal EC is
+  * considered handled if the Declarative uses RESUME.  For any EC that is
+  * handled (with RESUME for fatal), program control passes to the next
+  * statement. Else control passes here first.
+  *
+  * Any EC explicitly enabled (with >>TURN) must be explicitly handled.  Only
+  * explicitly enabled ECs appear in enabled_ECs.  when EC-I-O is raised as a
+  * byproduct of error status on a file operation, we say it is "implicitly
+  * enabled".  It need not be explicitly handled.
+  *
+  * Implicit EC-I-O not handled by the statement or a Declarative is considered
+  * handled if the statement includes the FILE STATUS phrase.  OPEN and CLOSE
+  * never cause program termination with EC-I-O; for those two statements the
+  * fatal status is ignored.  These conditions are screened out by
+  * __gg__check_fatal_exception(), so that the default handler is not called.
+  *
+  * An unhandled EC reaches the default handler for any of 3 reasons:
+  *   1.  It is EC-I-O (enabled does not matter).
+  *   2.  It is enabled.
+  *   3.  It is fatal and was matched to a Declarative that did not use RESUME.
+  * The default handler, default_exception_handler(), logs the EC.  For a fatal
+  * EC, the process terminated with abort(3).
+  *
+  * Except for OPEN and CLOSE, I/O statements that raise an unhandled fatal EC
+  * cause program termination, consistent with IBM documentation.  See
+  * Enterprise COBOL for z/OS: Enterprise COBOL for z/OS 6.4 Programming Guide,
+  * page 244, "Handling errors in input and output operations".
+  */
  extern "C"
  void
  __gg__check_fatal_exception()
  {
!   if( MATCH_DECLARATIVE )
!     warnx("%s: ec_status is %s", __func__, ec_status.unset()? "unset" : "set");
  
!   if( ec_status.copy_environment().unset() )
!     ec_status.update();  // __gg__match_exception was not called first
! 
!   if( ec_status.done() ) { // false for part-handled fatal
!     if( MATCH_DECLARATIVE )
!       warnx("%s: clearing ec_status", __func__);
!     ec_status.clear();
!     return; // already handled
!   }
! 
!   auto ec = ec_status.unhandled();
! 
!   if( MATCH_DECLARATIVE )
!     warnx("%s: %s was not handled %s enabled", __func__,
!           local_ec_type_str(ec), ec_status.is_enabled(ec)? "is" : "is not");
! 
!   // Look for ways I/O statement might have dealt with EC.
!   auto file = ec_status.file_status();
!   if( file.ifile && ec_cmp(ec, ec_io_e) ) {
!     if( MATCH_DECLARATIVE )
!       warnx("%s: %s with %sFILE STATUS", __func__,
!             file.op_str(), file.user_status? "" : "no ");
!     if( file.user_status ) {
!       ec_status.clear();
!       return; // has FILE STATUS, ok
!     }
!     switch( file.operation ) {
!     case file_op_none:
!       assert(false);
!       abort();
!     case file_op_open: // implicit, no Declarative, no FILE STATUS, but ok
!     case file_op_close:
!       ec_status.clear();
!       return;
!     case file_op_start:
!     case file_op_read:
!     case file_op_write:
!     case file_op_rewrite:
!     case file_op_delete:
!       break;
!     }
!   } else {
!     if( ! ec_status.is_enabled() ) {
!       if( MATCH_DECLARATIVE )
!         warnx("%s: %s is not enabled", __func__, local_ec_type_str(ec));
!       ec_status.clear();
!       return;
!     }
!     if( MATCH_DECLARATIVE )
!       warnx("%s: %s is enabled", __func__, local_ec_type_str(ec));
!   }
! 
!   if( MATCH_DECLARATIVE )
!     warnx("%s: calling default_exception_handler(%s)", __func__,
!           local_ec_type_str(ec));
! 
!   default_exception_handler(ec);
  }
  
+ /*
+  * Preserve the state of the raised EC during Declarative execution.
+  */
  extern "C"
  void
! __gg__exception_push()
  {
!   ec_stack.push(ec_status);
!   if( MATCH_DECLARATIVE )
!     warnx("%s: %s: %zu ECs, %zu declaratives", __func__,
!           __gg__exception_statement, enabled_ECs.size(), declaratives.size());
  }
  
! /*
!  * Restore the state of the raised EC after Declarative execution.
!  */
! extern "C"
! void
! __gg__exception_pop()
  {
!   ec_status = ec_stack.top();
!   ec_stack.pop();
!   ec_status.reset_environment();
!   if( MATCH_DECLARATIVE )
!     warnx("%s: %s: %zu ECs, %zu declaratives", __func__,
!           __gg__exception_statement, enabled_ECs.size(), declaratives.size());
!   __gg__check_fatal_exception();
! }
  
! // Called for RESUME in a Declarative to indicate a fatal EC was handled.
! extern "C"
! void
! __gg__clear_exception()
! {
!   ec_stack.top().clear();
  }
  
  // Update the list of compiler-maintained enabled exceptions.
*************** extern "C"
*** 11121,11219 ****
  void
  __gg__stash_exceptions( size_t nec, cbl_enabled_exception_t *ecs )
  {
!   enabled_ECs = cbl_enabled_exceptions_array_t(nec, ecs);
  
!   if( false && getenv("match_declarative") )
      warnx("%s: %zu exceptions enabled", __func__, nec);
  }
  
  
  /*
!  * Match the raised exception against a declarative handler
!  *
!  * ECs unrelated to I/O are not matched to a Declarative unless
!  * enabled.  Declaratives for I/O errors, on the other hand, match
!  * regardless of whether or not any EC is enabled.
   *
!  * Declaratives handle I-O errors with USE Format 1. They don't name a
!  * specific EC.  They're matched based on the file's status,
!  * irrespective of whether or not EC-I-O is enabled.  If EC-I-O is
!  * enabled, and mentioned in a Declarative USE statement, then it is
!  * matched just like any other Format 3 USE statement.
   */
  extern "C"
  void
! __gg__match_exception( cblc_field_t *index,
!                        const cbl_declarative_t *dcls )
  {
!   static const cbl_declarative_t no_declaratives[1] = {};
! 
!   size_t ifile = __gg__exception_file_number;
!   // The exception file number is assumed to always be zero, unless it's
!   // been set to a non-zero value.  Having picked up that value it is our job
!   // to immediately set it back to zero:
!   __gg__exception_file_number = 0;
! 
!   int  handled = __gg__exception_handled;
!   cblc_file_t *stashed = __gg__file_stashed();
  
!   if( dcls == NULL ) dcls = no_declaratives;
!   size_t ndcl = dcls[0].section;
!   auto eodcls  = dcls + 1 + ndcl, p = eodcls;
  
    auto ec = ec_status.update().unhandled();
  
!   // We need to set exception handled back to 0.  We do it here because
!   // ec_status.update() looks at it
!   __gg__exception_handled = 0;
  
!   if(__gg__exception_code != ec_none_e) // cleared by ec_status_t::update
!     {
!     __gg__abort("__gg__match_exception(): __gg__exception_code should be ec_none_e");
!     }
!   if( ec == ec_none_e ) {
!     if( ifile == 0) goto set_exception_section;
  
!     if( stashed == nullptr )
!       {
!       __gg__abort("__gg__match_exception(): stashed is null");
!       }
!     ec = local_ec_type_of( stashed->io_status );
!   }
  
!   if( ifile > 0 ) { // an I/O exception is raised
!     if( stashed == nullptr )
!       {
!       __gg__abort("__gg__match_exception(): stashed is null (2)");
        }
!     auto mode = cbl_file_mode_t(stashed->mode_char);
!     cbl_exception_t oops = {0, ifile, ec, mode };
!     p = std::find_if( dcls + 1, eodcls,
!                       match_file_declarative(oops, file_status_t(handled)) );
  
!   } else {  // non-I/O exception
!     auto enabled = enabled_ECs.match(ec);
!     if( enabled ) {
!       p = std::find_if( dcls + 1, eodcls, [ec] (const cbl_declarative_t& dcl) {
!                           if( ! enabled_ECs.match(dcl.type) ) return false;
!                           if( ! ec_cmp(ec, dcl.type) ) return false;
!                           return true;
!                         } );
!       if( p == eodcls ) {
!         default_exception_handler(ec);
        }
-     } else { // not enabled
      }
!   }
! 
!  set_exception_section:
!   size_t retval = p == eodcls? 0 : p->section;
!   ec_raised_and_handled = retval? ec : ec_none_e;
  
    // If a declarative matches the raised exception, return its
    // symbol_table index.
    __gg__int128_to_field(index,
!                         (__int128)retval,
                          0,
                          truncation_e,
                          NULL);
--- 11434,11524 ----
  void
  __gg__stash_exceptions( size_t nec, cbl_enabled_exception_t *ecs )
  {
!   enabled_ECs = cbl_enabled_exceptions_t(nec, ecs);
  
!   if( false && MATCH_DECLARATIVE )
      warnx("%s: %zu exceptions enabled", __func__, nec);
  }
  
+ void
+ cbl_enabled_exception_t::dump( int i ) const {
+   warnx("cbl_enabled_exception_t: %2d  {%s, %s, %zu}",
+         i,
+         location? "location" : "    none",
+         local_ec_type_str(ec),
+         file );
+ }
  
  /*
!  * Match the raised exception against a Declarative.
   *
!  * A Declarative that handles I/O errors with USE Format 1 doesn't name a
!  * specific EC.  It's matched based on the file's status, irrespective of
!  * whether or not EC-I-O is enabled.  USE Format 1 Declaratives are honored
!  * regardless of any >>TURN directive.
!  * 
!  * An EC is enabled by the >>TURN directive.  The only ECs that can be disabled
!  * are those that were explicitly enabled.  If EC-I-O is enabled, and mentioned
!  * in a Declarative with USE Format 3, then it is matched just like any other.
   */
  extern "C"
  void
! __gg__match_exception( cblc_field_t *index )
  {
!   size_t isection = 0;
  
!   if( MATCH_DECLARATIVE ) enabled_ECs.dump("match_exception begin");
  
    auto ec = ec_status.update().unhandled();
  
!   if( ec != ec_none_e ) { 
!     /*
!      * An EC was raised and was not handled by the statement. 
!      * We know the EC and, for I/O, the current file and its mode. 
!      * Scan declaratives for a match: 
!      *   - EC is enabled or program has a Format 1 Declarative
!      *   - EC matches the Declarative's USE statement
!      * Format 1 declaratives apply only to EC-I-O, whether or not enabled. 
!      * Format 1 may be restricted to a particular mode (for all files).
!      * Format 1 and 3 may be restricted to a set of files. 
!      */
!     auto f = ec_status.file_status();
!     cbl_exception_t raised = { 0, f.ifile, ec, f.mode };
!     bool enabled = enabled_ECs.match(ec);
  
!     if( MATCH_DECLARATIVE ) enabled_ECs.dump("match_exception enabled");
  
!     auto p = std::find_if( declaratives.begin(), declaratives.end(),
!                            [enabled, raised]( const cbl_declarative_t& dcl ) {
!                              return match_declarative(enabled, raised, dcl);
!                            } );
  
!     if( p == declaratives.end() ) {
!       if( MATCH_DECLARATIVE ) {
!         warnx("__gg__match_exception:%d: raised exception "
!               "%s not matched (%zu enabled)", __LINE__,
!               local_ec_type_str(ec), enabled_ECs.size());
        }
!     } else {
!       isection = p->section;
!       ec_status.handled_by(isection);
  
!       if( MATCH_DECLARATIVE ) {
!         warnx("__gg__match_exception:%d: matched "
!               "%s against mask %s for section #%zu",
!               __LINE__,
!               local_ec_type_str(ec),
!               local_ec_type_str(p->type),
!               p->section);
        }
      }
!     assert(ec != ec_none_e); 
!   } // end EC match logic 
  
    // If a declarative matches the raised exception, return its
    // symbol_table index.
    __gg__int128_to_field(index,
!                         (__int128)isection,
                          0,
                          truncation_e,
                          NULL);
*************** void
*** 11342,11382 ****
  __gg__func_exception_location(cblc_field_t *dest)
    {
    char ach[512] = " ";
!   if( stashed_exception_code )
      {
      ach[0] = '\0';
!     if( stashed_exception_program_id )
        {
!       strcat(ach, stashed_exception_program_id);
        strcat(ach, "; ");
        }
  
!     if( stashed_exception_paragraph )
        {
!       strcat(ach, stashed_exception_paragraph );
!       if( stashed_exception_section )
          {
          strcat(ach, " OF ");
!         strcat(ach, stashed_exception_section);
          }
        }
      else
        {
!       if( stashed_exception_section )
          {
!         strcat(ach, stashed_exception_section);
          }
        }
      strcat(ach, "; ");
  
!     if( stashed_exception_source_file )
        {
        char achSource[128] = "";
        snprintf( achSource,
                  sizeof(achSource),
                  "%s:%d ",
!                 stashed_exception_source_file,
!                 stashed_exception_line_number);
        strcat(ach, achSource);
        }
      else
--- 11647,11687 ----
  __gg__func_exception_location(cblc_field_t *dest)
    {
    char ach[512] = " ";
!   if( last_exception_code )
      {
      ach[0] = '\0';
!     if( last_exception_program_id )
        {
!       strcat(ach, last_exception_program_id);
        strcat(ach, "; ");
        }
  
!     if( last_exception_paragraph )
        {
!       strcat(ach, last_exception_paragraph );
!       if( last_exception_section )
          {
          strcat(ach, " OF ");
!         strcat(ach, last_exception_section);
          }
        }
      else
        {
!       if( last_exception_section )
          {
!         strcat(ach, last_exception_section);
          }
        }
      strcat(ach, "; ");
  
!     if( last_exception_source_file )
        {
        char achSource[128] = "";
        snprintf( achSource,
                  sizeof(achSource),
                  "%s:%d ",
!                 last_exception_source_file,
!                 last_exception_line_number);
        strcat(ach, achSource);
        }
      else
*************** void
*** 11393,11401 ****
  __gg__func_exception_statement(cblc_field_t *dest)
    {
    char ach[128] = " ";
!   if(stashed_exception_statement)
      {
!     snprintf(ach, sizeof(ach), "%s", stashed_exception_statement);
      ach[sizeof(ach)-1] = '\0';
      }
    __gg__adjust_dest_size(dest, strlen(ach));
--- 11698,11706 ----
  __gg__func_exception_statement(cblc_field_t *dest)
    {
    char ach[128] = " ";
!   if(last_exception_statement)
      {
!     snprintf(ach, sizeof(ach), "%s", last_exception_statement);
      ach[sizeof(ach)-1] = '\0';
      }
    __gg__adjust_dest_size(dest, strlen(ach));
*************** void
*** 11407,11418 ****
  __gg__func_exception_status(cblc_field_t *dest)
    {
    char ach[128] = "<not in table?>";
!   if(stashed_exception_code)
      {
      ec_descr_t *p = __gg__exception_table;
      while(p < __gg__exception_table_end )
        {
!       if( p->type == (ec_type_t)stashed_exception_code )
          {
          snprintf(ach, sizeof(ach), "%s", p->name);
          break;
--- 11712,11723 ----
  __gg__func_exception_status(cblc_field_t *dest)
    {
    char ach[128] = "<not in table?>";
!   if(last_exception_code)
      {
      ec_descr_t *p = __gg__exception_table;
      while(p < __gg__exception_table_end )
        {
!       if( p->type == (ec_type_t)last_exception_code )
          {
          snprintf(ach, sizeof(ach), "%s", p->name);
          break;
*************** __gg__func_exception_status(cblc_field_t
*** 11428,11448 ****
    memcpy(dest->data, ach, strlen(ach));
    }
  
- static cblc_file_t *recent_file = NULL;
- 
  extern "C"
  void
  __gg__set_exception_file(cblc_file_t *file)
    {
-   recent_file = file;
    ec_type_t ec = local_ec_type_of( file->io_status );
    if( ec )
      {
!     exception_raise(ec);
      }
    }
  
- 
  extern "C"
  void
  __gg__func_exception_file(cblc_field_t *dest, cblc_file_t *file)
--- 11733,11757 ----
    memcpy(dest->data, ach, strlen(ach));
    }
  
  extern "C"
  void
  __gg__set_exception_file(cblc_file_t *file)
    {
    ec_type_t ec = local_ec_type_of( file->io_status );
    if( ec )
      {
!     // During SORT operations, which routinely read files until they end, we
!     // need to suppress them.
!     if( ec != ec_io_at_end_e || !sv_suppress_eof_ec )
!       {
!       last_exception_file_operation = file->prior_op;
!       last_exception_file_status    = file->io_status;
!       last_exception_file_name      = file->name;
!       exception_raise(ec);
!       }
      }
    }
  
  extern "C"
  void
  __gg__func_exception_file(cblc_field_t *dest, cblc_file_t *file)
*************** __gg__func_exception_file(cblc_field_t *
*** 11451,11470 ****
    if( !file )
      {
      // This is where we process FUNCTION EXCEPTION-FILE <no parameter>
!     if( !(stashed_exception_code & ec_io_e) || !recent_file)
        {
!       // There is no EC-I-O exception code, so we return two spaces
        strcpy(ach, "00");
        }
      else
        {
        if( sv_from_raise_statement )
          {
          strcpy(ach, "  ");
          }
        else
          {
!         snprintf(ach, sizeof(ach), "%2.2d%s", recent_file->io_status, recent_file->name);
          }
        }
      }
--- 11760,11783 ----
    if( !file )
      {
      // This is where we process FUNCTION EXCEPTION-FILE <no parameter>
!     if( !(last_exception_code & ec_io_e) )
        {
!       // There is no EC-I-O exception code, so we return two alphanumeric zeros.
        strcpy(ach, "00");
        }
      else
        {
+       // The last exception code is an EC-I-O
        if( sv_from_raise_statement )
          {
          strcpy(ach, "  ");
          }
        else
          {
!         snprintf( ach,
!                   sizeof(ach), "%2.2d%s",
!                   last_exception_file_status,
!                   last_exception_file_name);
          }
        }
      }
*************** extern "C"
*** 11490,11525 ****
  void
  __gg__set_exception_code(ec_type_t ec, int from_raise_statement)
    {
    sv_from_raise_statement = from_raise_statement;
  
    __gg__exception_code = ec;
    if( ec == ec_none_e)
      {
!     stashed_exception_code          = 0    ;
!     stashed_exception_handled       = 0    ;
!     stashed_exception_file_number   = 0    ;
!     stashed_exception_file_status   = 0    ;
!     stashed_exception_file_name     = NULL ;
!     stashed_exception_program_id    = NULL ;
!     stashed_exception_section       = NULL ;
!     stashed_exception_paragraph     = NULL ;
!     stashed_exception_source_file   = NULL ;
!     stashed_exception_line_number   = 0    ;
!     stashed_exception_statement     = NULL ;
      }
    else
      {
!     stashed_exception_code          = __gg__exception_code         ;
!     stashed_exception_handled       = __gg__exception_handled      ;
!     stashed_exception_file_number   = __gg__exception_file_number  ;
!     stashed_exception_file_status   = __gg__exception_file_status  ;
!     stashed_exception_file_name     = __gg__exception_file_name    ;
!     stashed_exception_program_id    = __gg__exception_program_id   ;
!     stashed_exception_section       = __gg__exception_section      ;
!     stashed_exception_paragraph     = __gg__exception_paragraph    ;
!     stashed_exception_source_file   = __gg__exception_source_file  ;
!     stashed_exception_line_number   = __gg__exception_line_number  ;
!     stashed_exception_statement     = __gg__exception_statement    ;
      }
    }
  
--- 11803,11852 ----
  void
  __gg__set_exception_code(ec_type_t ec, int from_raise_statement)
    {
+   if( MATCH_DECLARATIVE )
+     {
+     warnx("%s: %s:%u: %s: %s",
+           __func__,
+           __gg__exception_source_file,
+           __gg__exception_line_number,
+           __gg__exception_statement,
+           local_ec_type_str(ec));
+     }
    sv_from_raise_statement = from_raise_statement;
  
    __gg__exception_code = ec;
    if( ec == ec_none_e)
      {
!     last_exception_code           = 0            ;
!     last_exception_program_id     = NULL         ;
!     last_exception_section        = NULL         ;
!     last_exception_paragraph      = NULL         ;
!     last_exception_source_file    = NULL         ;
!     last_exception_line_number    = 0            ;
!     last_exception_statement      = NULL         ;
!     last_exception_file_operation = file_op_none ;
!     last_exception_file_status    = FsSuccess    ;
!     last_exception_file_name      = NULL         ;
      }
    else
      {
!     last_exception_code           = __gg__exception_code         ;
!     last_exception_program_id     = __gg__exception_program_id   ;
!     last_exception_section        = __gg__exception_section      ;
!     last_exception_paragraph      = __gg__exception_paragraph    ;
!     last_exception_source_file    = __gg__exception_source_file  ;
!     last_exception_line_number    = __gg__exception_line_number  ;
!     last_exception_statement      = __gg__exception_statement    ;
! 
!     // These are set in __gg__set_exception_file just before this routine is
!     // called.  In cases where the ec is not a file-i-o operation, we clear 
!     // them here:
!     if( !(ec & ec_io_e) )
!       {
!       last_exception_file_operation = file_op_none ;
!       last_exception_file_status    = FsSuccess  ;
!       last_exception_file_name      = NULL    ;
!       }
      }
    }
  
*************** __gg__module_name(cblc_field_t *dest, mo
*** 12657,12659 ****
--- 12984,13105 ----
    memcpy(dest->data, result, strlen(result)+1);
    }
  
+ /*
+  * Runtime functions defined for cbl_enabled_exceptions_t
+  */
+ cbl_enabled_exceptions_t&
+ cbl_enabled_exceptions_t::decode( const std::vector<uint64_t>& encoded ) {
+   auto p = encoded.begin();
+   while( p != encoded.end() ) {
+     auto location = static_cast<bool>(*p++);
+     auto ec = static_cast<ec_type_t>(*p++);
+     auto file = *p++;
+     cbl_enabled_exception_t enabled(location, ec, file);
+     insert(enabled);
+   }
+   return *this;
+ }
+ const cbl_enabled_exception_t *
+ cbl_enabled_exceptions_t::match( ec_type_t type, size_t file ) const {
+   auto output = enabled_exception_match( begin(), end(), type, file );
+ 
+   if( output != end() ) {
+     if( MATCH_DECLARATIVE )
+       warnx("          enabled_exception_match found %x in input\n", type);
+     return &*output;
+   }
+   return nullptr;
+ }
+ 
+ void
+ cbl_enabled_exceptions_t::dump( const char tag[] ) const {
+   if( empty() ) {
+     warnx("%s:  no enabled exceptions", tag );
+     return;
+   }
+   int i = 1;
+   for( auto& elem : *this ) {
+     warnx("%s: %2d  {%s, %04x %s, %ld}", tag,
+     i++,
+     elem.location? "with location" : "  no location",
+     elem.ec,
+     local_ec_type_str(elem.ec),
+     elem.file );
+   }
+ }
+ 
+ 
+ static std::vector<cbl_declarative_t>&
+ decode( std::vector<cbl_declarative_t>& dcls,
+         const std::vector<uint64_t>& encoded ) {
+   auto p = encoded.begin();
+   while( p != encoded.end() ) {
+     auto section = static_cast<size_t>(*p++);
+     auto global = static_cast<bool>(*p++);
+     auto type = static_cast<ec_type_t>(*p++);
+     auto nfile = static_cast<uint32_t>(*p++);
+     std::list<size_t> files;
+     assert(nfile <= cbl_declarative_t::files_max);
+     auto pend = p + nfile;
+     std::copy(p, pend, std::back_inserter(files));
+     p += cbl_declarative_t::files_max;
+     auto mode = cbl_file_mode_t(*p++);
+     cbl_declarative_t dcl( section, type, files, mode, global );
+     dcls.push_back(dcl);
+   }
+   return dcls;
+ }
+ 
+ static std::vector<cbl_declarative_t>&
+ operator<<( std::vector<cbl_declarative_t>& dcls,
+             const std::vector<uint64_t>& encoded ) {
+   return decode( dcls, encoded );
+ }
+ 
+ // The first element of each array is the number of elements that follow
+ extern "C"
+ void
+ __gg__set_exception_environment( uint64_t *ecs, uint64_t *dcls )
+   {
+   static struct prior_t {
+     uint64_t *ecs = nullptr, *dcls = nullptr;
+   } prior;
+ 
+   if( MATCH_DECLARATIVE )
+     if( prior.ecs != ecs || prior.dcls != dcls )
+       warnx("set_exception_environment: %s: %p, %p",
+             __gg__exception_statement, ecs, dcls);
+ 
+   if( ecs ) {
+     if( prior.ecs != ecs ) {
+       uint64_t *ecs_begin = ecs + 1, *ecs_end = ecs_begin + ecs[0];
+       if( MATCH_DECLARATIVE ) {
+         warnx("%zu elements implies %zu ECs", ecs[0], ecs[0] / 3);
+       }
+       cbl_enabled_exceptions_t enabled;
+       enabled_ECs = enabled.decode( std::vector<uint64_t>(ecs_begin, ecs_end) );
+       if( MATCH_DECLARATIVE ) enabled_ECs.dump("set_exception_environment");
+     }
+   } else {
+     enabled_ECs.clear();
+   }
+ 
+   if( dcls ) {
+     if( prior.dcls != dcls ) {
+       uint64_t *dcls_begin = dcls + 1, *dcls_end = dcls_begin + dcls[0];
+       if( MATCH_DECLARATIVE ) {
+         warnx("%zu elements implies %zu declaratives", dcls[0], dcls[0] / 21);
+       }
+       declaratives.clear();
+       declaratives << std::vector<uint64_t>( dcls_begin, dcls_end );
+     }
+   } else {
+     declaratives.clear();
+   }
+ 
+   __gg__exception_code = ec_none_e;
+ 
+   prior.ecs = ecs;
+   prior.dcls = dcls;
+   }
+ 
diff -Nrcpad gcc-16-20250504/libgcobol/valconv.cc gcc-16-20250511/libgcobol/valconv.cc
*** gcc-16-20250504/libgcobol/valconv.cc	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgcobol/valconv.cc	Sun May 11 22:32:40 2025
***************
*** 34,39 ****
--- 34,40 ----
  #include <string.h>
  #include <algorithm>
  #include <unordered_map>
+ #include <vector>
  
  #include "ec.h"
  #include "common-defs.h"
diff -Nrcpad gcc-16-20250504/libgfortran/ChangeLog gcc-16-20250511/libgfortran/ChangeLog
*** gcc-16-20250504/libgfortran/ChangeLog	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/ChangeLog	Sun May 11 22:32:40 2025
***************
*** 1,3 ****
--- 1,70 ----
+ 2025-05-10  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	* io/read.c (read_f): Comment typo, explict -> explicit.
+ 
+ 2025-05-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libfortran/120158
+ 	* m4/iparm.m4 (atype_min): For atype_name starting with
+ 	GFC_UINTEGER define to 0.
+ 	* generated/maxloc0_16_m1.c: Regenerate.
+ 	* generated/maxloc0_16_m2.c: Regenerate.
+ 	* generated/maxloc0_16_m4.c: Regenerate.
+ 	* generated/maxloc0_16_m8.c: Regenerate.
+ 	* generated/maxloc0_16_m16.c: Regenerate.
+ 	* generated/maxloc0_4_m1.c: Regenerate.
+ 	* generated/maxloc0_4_m2.c: Regenerate.
+ 	* generated/maxloc0_4_m4.c: Regenerate.
+ 	* generated/maxloc0_4_m8.c: Regenerate.
+ 	* generated/maxloc0_4_m16.c: Regenerate.
+ 	* generated/maxloc0_8_m1.c: Regenerate.
+ 	* generated/maxloc0_8_m2.c: Regenerate.
+ 	* generated/maxloc0_8_m4.c: Regenerate.
+ 	* generated/maxloc0_8_m8.c: Regenerate.
+ 	* generated/maxloc0_8_m16.c: Regenerate.
+ 	* generated/maxloc1_16_m1.c: Regenerate.
+ 	* generated/maxloc1_16_m2.c: Regenerate.
+ 	* generated/maxloc1_16_m4.c: Regenerate.
+ 	* generated/maxloc1_16_m8.c: Regenerate.
+ 	* generated/maxloc1_16_m16.c: Regenerate.
+ 	* generated/maxloc1_4_m1.c: Regenerate.
+ 	* generated/maxloc1_4_m2.c: Regenerate.
+ 	* generated/maxloc1_4_m4.c: Regenerate.
+ 	* generated/maxloc1_4_m8.c: Regenerate.
+ 	* generated/maxloc1_4_m16.c: Regenerate.
+ 	* generated/maxloc1_8_m1.c: Regenerate.
+ 	* generated/maxloc1_8_m2.c: Regenerate.
+ 	* generated/maxloc1_8_m4.c: Regenerate.
+ 	* generated/maxloc1_8_m8.c: Regenerate.
+ 	* generated/maxloc1_8_m16.c: Regenerate.
+ 	* generated/maxval_m1.c: Regenerate.
+ 	* generated/maxval_m2.c: Regenerate.
+ 	* generated/maxval_m4.c: Regenerate.
+ 	* generated/maxval_m8.c: Regenerate.
+ 	* generated/maxval_m16.c: Regenerate.
+ 
+ 2025-05-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libfortran/120153
+ 	* Makefile.am (i_maxloc1_c): Add generated/maxloc1_16_m16.c.
+ 	* intrinsics/random.c (arandom_m16): Use #ifdef HAVE_GFC_UINTEGER_16
+ 	guard rather than #ifdef GFC_HAVE_GFC_UINTEGER_16.
+ 	* gfortran.map (GFORTRAN_15): Remove _gfortran_arandom_m16,
+ 	_gfortran_maxloc1_16_m16, _gfortran_mmaxloc1_16_m16 and
+ 	_gfortran_smaxloc1_16_m16.
+ 	(GFORTRAN_15.2): New symbol version, add those 4 symbols to it.
+ 	* generated/maxloc1_16_m16.c: New file.
+ 	* Makefile.in: Regenerate.
+ 
+ 2025-05-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libfortran/120152
+ 	* Makefile.am (i_maxloc1_c): Readd generated/maxloc1_4_i8.c,
+ 	generated/maxloc1_8_i8.c, generated/maxloc1_16_i8.c,
+ 	generated/maxloc1_4_i16.c, generated/maxloc1_8_i16.c.  Move
+ 	generated/maxloc1_16_i16.c entry earlier in the list.
+ 	* Makefile.in: Regenerated.
+ 
  2025-04-22  Andre Vehreschild  <vehre@gcc.gnu.org>
  
  	* caf/libcaf.h: Add mapping mode to coarray's register.
diff -Nrcpad gcc-16-20250504/libgfortran/Makefile.am gcc-16-20250511/libgfortran/Makefile.am
*** gcc-16-20250504/libgfortran/Makefile.am	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/Makefile.am	Sun May 11 22:32:40 2025
*************** generated/maxloc1_16_i2.c \
*** 400,405 ****
--- 400,411 ----
  generated/maxloc1_4_i4.c \
  generated/maxloc1_8_i4.c \
  generated/maxloc1_16_i4.c \
+ generated/maxloc1_4_i8.c \
+ generated/maxloc1_8_i8.c \
+ generated/maxloc1_16_i8.c \
+ generated/maxloc1_4_i16.c \
+ generated/maxloc1_8_i16.c \
+ generated/maxloc1_16_i16.c \
  generated/maxloc1_4_m1.c \
  generated/maxloc1_8_m1.c \
  generated/maxloc1_16_m1.c \
*************** generated/maxloc1_8_m8.c \
*** 414,420 ****
  generated/maxloc1_16_m8.c \
  generated/maxloc1_4_m16.c \
  generated/maxloc1_8_m16.c \
! generated/maxloc1_16_i16.c \
  generated/maxloc1_4_r4.c \
  generated/maxloc1_8_r4.c \
  generated/maxloc1_16_r4.c \
--- 420,426 ----
  generated/maxloc1_16_m8.c \
  generated/maxloc1_4_m16.c \
  generated/maxloc1_8_m16.c \
! generated/maxloc1_16_m16.c \
  generated/maxloc1_4_r4.c \
  generated/maxloc1_8_r4.c \
  generated/maxloc1_16_r4.c \
diff -Nrcpad gcc-16-20250504/libgfortran/Makefile.in gcc-16-20250511/libgfortran/Makefile.in
*** gcc-16-20250504/libgfortran/Makefile.in	Sun May  4 22:32:41 2025
--- gcc-16-20250511/libgfortran/Makefile.in	Sun May 11 22:32:52 2025
*************** am__objects_8 = generated/maxloc1_4_i1.l
*** 265,278 ****
  	generated/maxloc1_16_i1.lo generated/maxloc1_4_i2.lo \
  	generated/maxloc1_8_i2.lo generated/maxloc1_16_i2.lo \
  	generated/maxloc1_4_i4.lo generated/maxloc1_8_i4.lo \
! 	generated/maxloc1_16_i4.lo generated/maxloc1_4_m1.lo \
  	generated/maxloc1_8_m1.lo generated/maxloc1_16_m1.lo \
  	generated/maxloc1_4_m2.lo generated/maxloc1_8_m2.lo \
  	generated/maxloc1_16_m2.lo generated/maxloc1_4_m4.lo \
  	generated/maxloc1_8_m4.lo generated/maxloc1_16_m4.lo \
  	generated/maxloc1_4_m8.lo generated/maxloc1_8_m8.lo \
  	generated/maxloc1_16_m8.lo generated/maxloc1_4_m16.lo \
! 	generated/maxloc1_8_m16.lo generated/maxloc1_16_i16.lo \
  	generated/maxloc1_4_r4.lo generated/maxloc1_8_r4.lo \
  	generated/maxloc1_16_r4.lo generated/maxloc1_4_r8.lo \
  	generated/maxloc1_8_r8.lo generated/maxloc1_16_r8.lo \
--- 265,281 ----
  	generated/maxloc1_16_i1.lo generated/maxloc1_4_i2.lo \
  	generated/maxloc1_8_i2.lo generated/maxloc1_16_i2.lo \
  	generated/maxloc1_4_i4.lo generated/maxloc1_8_i4.lo \
! 	generated/maxloc1_16_i4.lo generated/maxloc1_4_i8.lo \
! 	generated/maxloc1_8_i8.lo generated/maxloc1_16_i8.lo \
! 	generated/maxloc1_4_i16.lo generated/maxloc1_8_i16.lo \
! 	generated/maxloc1_16_i16.lo generated/maxloc1_4_m1.lo \
  	generated/maxloc1_8_m1.lo generated/maxloc1_16_m1.lo \
  	generated/maxloc1_4_m2.lo generated/maxloc1_8_m2.lo \
  	generated/maxloc1_16_m2.lo generated/maxloc1_4_m4.lo \
  	generated/maxloc1_8_m4.lo generated/maxloc1_16_m4.lo \
  	generated/maxloc1_4_m8.lo generated/maxloc1_8_m8.lo \
  	generated/maxloc1_16_m8.lo generated/maxloc1_4_m16.lo \
! 	generated/maxloc1_8_m16.lo generated/maxloc1_16_m16.lo \
  	generated/maxloc1_4_r4.lo generated/maxloc1_8_r4.lo \
  	generated/maxloc1_16_r4.lo generated/maxloc1_4_r8.lo \
  	generated/maxloc1_8_r8.lo generated/maxloc1_16_r8.lo \
*************** generated/maxloc1_16_i2.c \
*** 1205,1210 ****
--- 1208,1219 ----
  generated/maxloc1_4_i4.c \
  generated/maxloc1_8_i4.c \
  generated/maxloc1_16_i4.c \
+ generated/maxloc1_4_i8.c \
+ generated/maxloc1_8_i8.c \
+ generated/maxloc1_16_i8.c \
+ generated/maxloc1_4_i16.c \
+ generated/maxloc1_8_i16.c \
+ generated/maxloc1_16_i16.c \
  generated/maxloc1_4_m1.c \
  generated/maxloc1_8_m1.c \
  generated/maxloc1_16_m1.c \
*************** generated/maxloc1_8_m8.c \
*** 1219,1225 ****
  generated/maxloc1_16_m8.c \
  generated/maxloc1_4_m16.c \
  generated/maxloc1_8_m16.c \
! generated/maxloc1_16_i16.c \
  generated/maxloc1_4_r4.c \
  generated/maxloc1_8_r4.c \
  generated/maxloc1_16_r4.c \
--- 1228,1234 ----
  generated/maxloc1_16_m8.c \
  generated/maxloc1_4_m16.c \
  generated/maxloc1_8_m16.c \
! generated/maxloc1_16_m16.c \
  generated/maxloc1_4_r4.c \
  generated/maxloc1_8_r4.c \
  generated/maxloc1_16_r4.c \
*************** generated/maxloc1_8_i4.lo: generated/$(a
*** 2311,2316 ****
--- 2320,2337 ----
  	generated/$(DEPDIR)/$(am__dirstamp)
  generated/maxloc1_16_i4.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
+ generated/maxloc1_4_i8.lo: generated/$(am__dirstamp) \
+ 	generated/$(DEPDIR)/$(am__dirstamp)
+ generated/maxloc1_8_i8.lo: generated/$(am__dirstamp) \
+ 	generated/$(DEPDIR)/$(am__dirstamp)
+ generated/maxloc1_16_i8.lo: generated/$(am__dirstamp) \
+ 	generated/$(DEPDIR)/$(am__dirstamp)
+ generated/maxloc1_4_i16.lo: generated/$(am__dirstamp) \
+ 	generated/$(DEPDIR)/$(am__dirstamp)
+ generated/maxloc1_8_i16.lo: generated/$(am__dirstamp) \
+ 	generated/$(DEPDIR)/$(am__dirstamp)
+ generated/maxloc1_16_i16.lo: generated/$(am__dirstamp) \
+ 	generated/$(DEPDIR)/$(am__dirstamp)
  generated/maxloc1_4_m1.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
  generated/maxloc1_8_m1.lo: generated/$(am__dirstamp) \
*************** generated/maxloc1_4_m16.lo: generated/$(
*** 2339,2345 ****
  	generated/$(DEPDIR)/$(am__dirstamp)
  generated/maxloc1_8_m16.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
! generated/maxloc1_16_i16.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
  generated/maxloc1_4_r4.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
--- 2360,2366 ----
  	generated/$(DEPDIR)/$(am__dirstamp)
  generated/maxloc1_8_m16.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
! generated/maxloc1_16_m16.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
  generated/maxloc1_4_r4.lo: generated/$(am__dirstamp) \
  	generated/$(DEPDIR)/$(am__dirstamp)
*************** distclean-compile:
*** 4197,4203 ****
--- 4218,4226 ----
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_i16.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_i2.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_i4.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_i8.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_m1.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_m16.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_m2.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_m4.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_m8.Plo@am__quote@
*************** distclean-compile:
*** 4209,4216 ****
--- 4232,4241 ----
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_s1.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_16_s4.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_i1.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_i16.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_i2.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_i4.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_i8.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_m1.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_m16.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_m2.Plo@am__quote@
*************** distclean-compile:
*** 4224,4231 ****
--- 4249,4258 ----
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_s1.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_4_s4.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_i1.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_i16.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_i2.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_i4.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_i8.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_m1.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_m16.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/maxloc1_8_m2.Plo@am__quote@
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_16_m1.c gcc-16-20250511/libgfortran/generated/maxloc0_16_m1.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_16_m1.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_16_m1.c	Sun May 11 22:32:40 2025
*************** maxloc0_16_m1 (gfc_array_i16 * const res
*** 96,102 ****
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_1_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_16_m1 (gfc_array_i16 * const re
*** 271,277 ****
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_1_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_16_m16.c gcc-16-20250511/libgfortran/generated/maxloc0_16_m16.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_16_m16.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_16_m16.c	Sun May 11 22:32:40 2025
*************** maxloc0_16_m16 (gfc_array_i16 * const re
*** 96,102 ****
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_16_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_16_m16 (gfc_array_i16 * const r
*** 271,277 ****
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_16_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_16_m2.c gcc-16-20250511/libgfortran/generated/maxloc0_16_m2.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_16_m2.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_16_m2.c	Sun May 11 22:32:40 2025
*************** maxloc0_16_m2 (gfc_array_i16 * const res
*** 96,102 ****
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_2_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_16_m2 (gfc_array_i16 * const re
*** 271,277 ****
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_2_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_16_m4.c gcc-16-20250511/libgfortran/generated/maxloc0_16_m4.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_16_m4.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_16_m4.c	Sun May 11 22:32:40 2025
*************** maxloc0_16_m4 (gfc_array_i16 * const res
*** 96,102 ****
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_4_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_16_m4 (gfc_array_i16 * const re
*** 271,277 ****
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_4_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_16_m8.c gcc-16-20250511/libgfortran/generated/maxloc0_16_m8.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_16_m8.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_16_m8.c	Sun May 11 22:32:40 2025
*************** maxloc0_16_m8 (gfc_array_i16 * const res
*** 96,102 ****
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_8_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_16_m8 (gfc_array_i16 * const re
*** 271,277 ****
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_8_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_4_m1.c gcc-16-20250511/libgfortran/generated/maxloc0_4_m1.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_4_m1.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_4_m1.c	Sun May 11 22:32:40 2025
*************** maxloc0_4_m1 (gfc_array_i4 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_1_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_4_m1 (gfc_array_i4 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_1_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_4_m16.c gcc-16-20250511/libgfortran/generated/maxloc0_4_m16.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_4_m16.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_4_m16.c	Sun May 11 22:32:40 2025
*************** maxloc0_4_m16 (gfc_array_i4 * const rest
*** 96,102 ****
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_16_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_4_m16 (gfc_array_i4 * const res
*** 271,277 ****
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_16_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_4_m2.c gcc-16-20250511/libgfortran/generated/maxloc0_4_m2.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_4_m2.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_4_m2.c	Sun May 11 22:32:40 2025
*************** maxloc0_4_m2 (gfc_array_i4 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_2_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_4_m2 (gfc_array_i4 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_2_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_4_m4.c gcc-16-20250511/libgfortran/generated/maxloc0_4_m4.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_4_m4.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_4_m4.c	Sun May 11 22:32:40 2025
*************** maxloc0_4_m4 (gfc_array_i4 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_4_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_4_m4 (gfc_array_i4 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_4_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_4_m8.c gcc-16-20250511/libgfortran/generated/maxloc0_4_m8.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_4_m8.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_4_m8.c	Sun May 11 22:32:40 2025
*************** maxloc0_4_m8 (gfc_array_i4 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_8_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_4_m8 (gfc_array_i4 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_8_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_8_m1.c gcc-16-20250511/libgfortran/generated/maxloc0_8_m1.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_8_m1.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_8_m1.c	Sun May 11 22:32:40 2025
*************** maxloc0_8_m1 (gfc_array_i8 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_1_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_8_m1 (gfc_array_i8 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_1_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_1_INFINITY)
      maxval = -GFC_UINTEGER_1_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_8_m16.c gcc-16-20250511/libgfortran/generated/maxloc0_8_m16.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_8_m16.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_8_m16.c	Sun May 11 22:32:40 2025
*************** maxloc0_8_m16 (gfc_array_i8 * const rest
*** 96,102 ****
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_16_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_8_m16 (gfc_array_i8 * const res
*** 271,277 ****
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_16_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_16_INFINITY)
      maxval = -GFC_UINTEGER_16_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_8_m2.c gcc-16-20250511/libgfortran/generated/maxloc0_8_m2.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_8_m2.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_8_m2.c	Sun May 11 22:32:40 2025
*************** maxloc0_8_m2 (gfc_array_i8 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_2_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_8_m2 (gfc_array_i8 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_2_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_2_INFINITY)
      maxval = -GFC_UINTEGER_2_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_8_m4.c gcc-16-20250511/libgfortran/generated/maxloc0_8_m4.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_8_m4.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_8_m4.c	Sun May 11 22:32:40 2025
*************** maxloc0_8_m4 (gfc_array_i8 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_4_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_8_m4 (gfc_array_i8 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_4_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_4_INFINITY)
      maxval = -GFC_UINTEGER_4_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc0_8_m8.c gcc-16-20250511/libgfortran/generated/maxloc0_8_m8.c
*** gcc-16-20250504/libgfortran/generated/maxloc0_8_m8.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc0_8_m8.c	Sun May 11 22:32:40 2025
*************** maxloc0_8_m8 (gfc_array_i8 * const restr
*** 96,102 ****
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_8_HUGE;
  #endif
    while (base)
      {
--- 96,102 ----
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
*************** mmaxloc0_8_m8 (gfc_array_i8 * const rest
*** 271,277 ****
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = -GFC_UINTEGER_8_HUGE;
  #endif
    while (base)
      {
--- 271,277 ----
  #if defined(GFC_UINTEGER_8_INFINITY)
      maxval = -GFC_UINTEGER_8_INFINITY;
  #else
!     maxval = 0;
  #endif
    while (base)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_16_m1.c gcc-16-20250511/libgfortran/generated/maxloc1_16_m1.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_16_m1.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_16_m1.c	Sun May 11 22:32:40 2025
*************** maxloc1_16_m1 (gfc_array_i16 * const res
*** 147,153 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_1_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_16_m1 (gfc_array_i16 * const re
*** 366,372 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_1_HUGE;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_16_m16.c gcc-16-20250511/libgfortran/generated/maxloc1_16_m16.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_16_m16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libgfortran/generated/maxloc1_16_m16.c	Sun May 11 22:32:40 2025
***************
*** 0 ****
--- 1,591 ----
+ /* Implementation of the MAXLOC intrinsic
+    Copyright (C) 2002-2025 Free Software Foundation, Inc.
+    Contributed by Paul Brook <paul@nowt.org>
+ 
+ This file is part of the GNU Fortran runtime library (libgfortran).
+ 
+ Libgfortran 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 of the License, or (at your option) any later version.
+ 
+ Libgfortran 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.
+ 
+ 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/>.  */
+ 
+ #include "libgfortran.h"
+ #include <assert.h>
+ 
+ 
+ #if defined (HAVE_GFC_UINTEGER_16) && defined (HAVE_GFC_INTEGER_16)
+ 
+ #define HAVE_BACK_ARG 1
+ 
+ 
+ extern void maxloc1_16_m16 (gfc_array_i16 * const restrict,
+ 	gfc_array_m16 * const restrict, const index_type * const restrict, GFC_LOGICAL_4 back);
+ export_proto(maxloc1_16_m16);
+ 
+ void
+ maxloc1_16_m16 (gfc_array_i16 * const restrict retarray,
+ 	gfc_array_m16 * const restrict array,
+ 	const index_type * const restrict pdim, GFC_LOGICAL_4 back)
+ {
+   index_type count[GFC_MAX_DIMENSIONS];
+   index_type extent[GFC_MAX_DIMENSIONS];
+   index_type sstride[GFC_MAX_DIMENSIONS];
+   index_type dstride[GFC_MAX_DIMENSIONS];
+   const GFC_UINTEGER_16 * restrict base;
+   GFC_INTEGER_16 * restrict dest;
+   index_type rank;
+   index_type n;
+   index_type len;
+   index_type delta;
+   index_type dim;
+   int continue_loop;
+ 
+   /* Make dim zero based to avoid confusion.  */
+   rank = GFC_DESCRIPTOR_RANK (array) - 1;
+   dim = (*pdim) - 1;
+ 
+   if (unlikely (dim < 0 || dim > rank))
+     {
+       runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+  		     "is %ld, should be between 1 and %ld",
+ 		     (long int) dim + 1, (long int) rank + 1);
+     }
+ 
+   len = GFC_DESCRIPTOR_EXTENT(array,dim);
+   if (len < 0)
+     len = 0;
+   delta = GFC_DESCRIPTOR_STRIDE(array,dim);
+ 
+   for (n = 0; n < dim; n++)
+     {
+       sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
+ 
+       if (extent[n] < 0)
+ 	extent[n] = 0;
+     }
+   for (n = dim; n < rank; n++)
+     {
+       sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1);
+       extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
+ 
+       if (extent[n] < 0)
+ 	extent[n] = 0;
+     }
+ 
+   if (retarray->base_addr == NULL)
+     {
+       size_t alloc_size, str;
+ 
+       for (n = 0; n < rank; n++)
+ 	{
+ 	  if (n == 0)
+ 	    str = 1;
+ 	  else
+ 	    str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1];
+ 
+ 	  GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str);
+ 
+ 	}
+ 
+       retarray->offset = 0;
+       retarray->dtype.rank = rank;
+ 
+       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
+ 
+       retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_16));
+       if (alloc_size == 0)
+ 	return;
+     }
+   else
+     {
+       if (rank != GFC_DESCRIPTOR_RANK (retarray))
+ 	runtime_error ("rank of return array incorrect in"
+ 		       " MAXLOC intrinsic: is %ld, should be %ld",
+ 		       (long int) (GFC_DESCRIPTOR_RANK (retarray)),
+ 		       (long int) rank);
+ 
+       if (unlikely (compile_options.bounds_check))
+ 	bounds_ifunction_return ((array_t *) retarray, extent,
+ 				 "return value", "MAXLOC");
+     }
+ 
+   for (n = 0; n < rank; n++)
+     {
+       count[n] = 0;
+       dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+       if (extent[n] <= 0)
+ 	return;
+     }
+ 
+   base = array->base_addr;
+   dest = retarray->base_addr;
+ 
+   continue_loop = 1;
+   while (continue_loop)
+     {
+       const GFC_UINTEGER_16 * restrict src;
+       GFC_INTEGER_16 result;
+       src = base;
+       {
+ 
+ 	GFC_UINTEGER_16 maxval;
+ #if defined (GFC_UINTEGER_16_INFINITY)
+ 	maxval = -GFC_UINTEGER_16_INFINITY;
+ #else
+ 	maxval = 0;
+ #endif
+ 	result = 1;
+ 	if (len <= 0)
+ 	  *dest = 0;
+ 	else
+ 	  {
+ #if ! defined HAVE_BACK_ARG
+ 	    for (n = 0; n < len; n++, src += delta)
+ 	      {
+ #endif
+ 
+ #if defined (GFC_UINTEGER_16_QUIET_NAN)
+      	     for (n = 0; n < len; n++, src += delta)
+ 	       {
+ 		if (*src >= maxval)
+ 		  {
+ 		    maxval = *src;
+ 		    result = (GFC_INTEGER_16)n + 1;
+ 		    break;
+ 		  }
+ 	      }
+ #else
+ 	    n = 0;
+ #endif
+ 	    for (; n < len; n++, src += delta)
+ 	      {
+ 		if (back ? *src >= maxval : *src > maxval)
+ 		  {
+ 		    maxval = *src;
+ 		    result = (GFC_INTEGER_16)n + 1;
+ 		  }
+ 	      }
+ 	    
+ 	    *dest = result;
+ 	  }
+       }
+       /* Advance to the next element.  */
+       count[0]++;
+       base += sstride[0];
+       dest += dstride[0];
+       n = 0;
+       while (count[n] == extent[n])
+ 	{
+ 	  /* When we get to the end of a dimension, reset it and increment
+ 	     the next dimension.  */
+ 	  count[n] = 0;
+ 	  /* We could precalculate these products, but this is a less
+ 	     frequently used path so probably not worth it.  */
+ 	  base -= sstride[n] * extent[n];
+ 	  dest -= dstride[n] * extent[n];
+ 	  n++;
+ 	  if (n >= rank)
+ 	    {
+ 	      /* Break out of the loop.  */
+ 	      continue_loop = 0;
+ 	      break;
+ 	    }
+ 	  else
+ 	    {
+ 	      count[n]++;
+ 	      base += sstride[n];
+ 	      dest += dstride[n];
+ 	    }
+ 	}
+     }
+ }
+ 
+ 
+ extern void mmaxloc1_16_m16 (gfc_array_i16 * const restrict,
+ 	gfc_array_m16 * const restrict, const index_type * const restrict,
+ 	gfc_array_l1 * const restrict, GFC_LOGICAL_4 back);
+ export_proto(mmaxloc1_16_m16);
+ 
+ void
+ mmaxloc1_16_m16 (gfc_array_i16 * const restrict retarray,
+ 	gfc_array_m16 * const restrict array,
+ 	const index_type * const restrict pdim,
+ 	gfc_array_l1 * const restrict mask, GFC_LOGICAL_4 back)
+ {
+   index_type count[GFC_MAX_DIMENSIONS];
+   index_type extent[GFC_MAX_DIMENSIONS];
+   index_type sstride[GFC_MAX_DIMENSIONS];
+   index_type dstride[GFC_MAX_DIMENSIONS];
+   index_type mstride[GFC_MAX_DIMENSIONS];
+   GFC_INTEGER_16 * restrict dest;
+   const GFC_UINTEGER_16 * restrict base;
+   const GFC_LOGICAL_1 * restrict mbase;
+   index_type rank;
+   index_type dim;
+   index_type n;
+   index_type len;
+   index_type delta;
+   index_type mdelta;
+   int mask_kind;
+ 
+   if (mask == NULL)
+     {
+ #ifdef HAVE_BACK_ARG
+       maxloc1_16_m16 (retarray, array, pdim, back);
+ #else
+       maxloc1_16_m16 (retarray, array, pdim);
+ #endif
+       return;
+     }
+ 
+   dim = (*pdim) - 1;
+   rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ 
+ 
+   if (unlikely (dim < 0 || dim > rank))
+     {
+       runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+  		     "is %ld, should be between 1 and %ld",
+ 		     (long int) dim + 1, (long int) rank + 1);
+     }
+ 
+   len = GFC_DESCRIPTOR_EXTENT(array,dim);
+   if (len < 0)
+     len = 0;
+ 
+   mbase = mask->base_addr;
+ 
+   mask_kind = GFC_DESCRIPTOR_SIZE (mask);
+ 
+   if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8
+ #ifdef HAVE_GFC_LOGICAL_16
+       || mask_kind == 16
+ #endif
+       )
+     mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind);
+   else
+     runtime_error ("Funny sized logical array");
+ 
+   delta = GFC_DESCRIPTOR_STRIDE(array,dim);
+   mdelta = GFC_DESCRIPTOR_STRIDE_BYTES(mask,dim);
+ 
+   for (n = 0; n < dim; n++)
+     {
+       sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+       mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
+       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
+ 
+       if (extent[n] < 0)
+ 	extent[n] = 0;
+ 
+     }
+   for (n = dim; n < rank; n++)
+     {
+       sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n + 1);
+       mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask, n + 1);
+       extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
+ 
+       if (extent[n] < 0)
+ 	extent[n] = 0;
+     }
+ 
+   if (retarray->base_addr == NULL)
+     {
+       size_t alloc_size, str;
+ 
+       for (n = 0; n < rank; n++)
+ 	{
+ 	  if (n == 0)
+ 	    str = 1;
+ 	  else
+ 	    str= GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1];
+ 
+ 	  GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str);
+ 
+ 	}
+ 
+       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
+ 
+       retarray->offset = 0;
+       retarray->dtype.rank = rank;
+ 
+       retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_16));
+       if (alloc_size == 0)
+ 	return;
+     }
+   else
+     {
+       if (rank != GFC_DESCRIPTOR_RANK (retarray))
+ 	runtime_error ("rank of return array incorrect in MAXLOC intrinsic");
+ 
+       if (unlikely (compile_options.bounds_check))
+ 	{
+ 	  bounds_ifunction_return ((array_t *) retarray, extent,
+ 				   "return value", "MAXLOC");
+ 	  bounds_equal_extents ((array_t *) mask, (array_t *) array,
+ 	  			"MASK argument", "MAXLOC");
+ 	}
+     }
+ 
+   for (n = 0; n < rank; n++)
+     {
+       count[n] = 0;
+       dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+       if (extent[n] <= 0)
+ 	return;
+     }
+ 
+   dest = retarray->base_addr;
+   base = array->base_addr;
+ 
+   while (base)
+     {
+       const GFC_UINTEGER_16 * restrict src;
+       const GFC_LOGICAL_1 * restrict msrc;
+       GFC_INTEGER_16 result;
+       src = base;
+       msrc = mbase;
+       {
+ 
+ 	GFC_UINTEGER_16 maxval;
+ #if defined (GFC_UINTEGER_16_INFINITY)
+ 	maxval = -GFC_UINTEGER_16_INFINITY;
+ #else
+ 	maxval = 0;
+ #endif
+ #if defined (GFC_UINTEGER_16_QUIET_NAN)
+ 	GFC_INTEGER_16 result2 = 0;
+ #endif
+ 	result = 0;
+ 	for (n = 0; n < len; n++, src += delta, msrc += mdelta)
+ 	  {
+ 
+ 		if (*msrc)
+ 		  {
+ #if defined (GFC_UINTEGER_16_QUIET_NAN)
+ 		    if (!result2)
+ 		      result2 = (GFC_INTEGER_16)n + 1;
+ 		    if (*src >= maxval)
+ #endif
+ 		      {
+ 			maxval = *src;
+ 			result = (GFC_INTEGER_16)n + 1;
+ 			break;
+ 		      }
+ 		  }
+ 	      }
+ #if defined (GFC_UINTEGER_16_QUIET_NAN)
+ 	    if (unlikely (n >= len))
+ 	      result = result2;
+ 	    else
+ #endif
+ 	    if (back)
+ 	      for (; n < len; n++, src += delta, msrc += mdelta)
+ 	      	{
+ 		  if (*msrc && unlikely (*src >= maxval))
+ 		    {
+ 		      maxval = *src;
+ 		      result = (GFC_INTEGER_16)n + 1;
+ 		    }
+ 		}
+ 	    else
+ 	      for (; n < len; n++, src += delta, msrc += mdelta)
+ 	        {
+ 		  if (*msrc && unlikely (*src > maxval))
+ 		    {
+ 		      maxval = *src;
+ 		      result = (GFC_INTEGER_16)n + 1;
+ 		    }
+ 	  }
+ 	*dest = result;
+       }
+       /* Advance to the next element.  */
+       count[0]++;
+       base += sstride[0];
+       mbase += mstride[0];
+       dest += dstride[0];
+       n = 0;
+       while (count[n] == extent[n])
+ 	{
+ 	  /* When we get to the end of a dimension, reset it and increment
+ 	     the next dimension.  */
+ 	  count[n] = 0;
+ 	  /* We could precalculate these products, but this is a less
+ 	     frequently used path so probably not worth it.  */
+ 	  base -= sstride[n] * extent[n];
+ 	  mbase -= mstride[n] * extent[n];
+ 	  dest -= dstride[n] * extent[n];
+ 	  n++;
+ 	  if (n >= rank)
+ 	    {
+ 	      /* Break out of the loop.  */
+ 	      base = NULL;
+ 	      break;
+ 	    }
+ 	  else
+ 	    {
+ 	      count[n]++;
+ 	      base += sstride[n];
+ 	      mbase += mstride[n];
+ 	      dest += dstride[n];
+ 	    }
+ 	}
+     }
+ }
+ 
+ 
+ extern void smaxloc1_16_m16 (gfc_array_i16 * const restrict,
+ 	gfc_array_m16 * const restrict, const index_type * const restrict,
+ 	GFC_LOGICAL_4 *, GFC_LOGICAL_4 back);
+ export_proto(smaxloc1_16_m16);
+ 
+ void
+ smaxloc1_16_m16 (gfc_array_i16 * const restrict retarray,
+ 	gfc_array_m16 * const restrict array,
+ 	const index_type * const restrict pdim,
+ 	GFC_LOGICAL_4 * mask, GFC_LOGICAL_4 back)
+ {
+   index_type count[GFC_MAX_DIMENSIONS];
+   index_type extent[GFC_MAX_DIMENSIONS];
+   index_type dstride[GFC_MAX_DIMENSIONS];
+   GFC_INTEGER_16 * restrict dest;
+   index_type rank;
+   index_type n;
+   index_type dim;
+ 
+ 
+   if (mask == NULL || *mask)
+     {
+ #ifdef HAVE_BACK_ARG
+       maxloc1_16_m16 (retarray, array, pdim, back);
+ #else
+       maxloc1_16_m16 (retarray, array, pdim);
+ #endif
+       return;
+     }
+   /* Make dim zero based to avoid confusion.  */
+   dim = (*pdim) - 1;
+   rank = GFC_DESCRIPTOR_RANK (array) - 1;
+ 
+   if (unlikely (dim < 0 || dim > rank))
+     {
+       runtime_error ("Dim argument incorrect in MAXLOC intrinsic: "
+  		     "is %ld, should be between 1 and %ld",
+ 		     (long int) dim + 1, (long int) rank + 1);
+     }
+ 
+   for (n = 0; n < dim; n++)
+     {
+       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
+ 
+       if (extent[n] <= 0)
+ 	extent[n] = 0;
+     }
+ 
+   for (n = dim; n < rank; n++)
+     {
+       extent[n] =
+ 	GFC_DESCRIPTOR_EXTENT(array,n + 1);
+ 
+       if (extent[n] <= 0)
+ 	extent[n] = 0;
+     }
+ 
+   if (retarray->base_addr == NULL)
+     {
+       size_t alloc_size, str;
+ 
+       for (n = 0; n < rank; n++)
+ 	{
+ 	  if (n == 0)
+ 	    str = 1;
+ 	  else
+ 	    str = GFC_DESCRIPTOR_STRIDE(retarray,n-1) * extent[n-1];
+ 
+ 	  GFC_DIMENSION_SET(retarray->dim[n], 0, extent[n] - 1, str);
+ 
+ 	}
+ 
+       retarray->offset = 0;
+       retarray->dtype.rank = rank;
+ 
+       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
+ 
+       retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_16));
+       if (alloc_size == 0)
+ 	return;
+     }
+   else
+     {
+       if (rank != GFC_DESCRIPTOR_RANK (retarray))
+ 	runtime_error ("rank of return array incorrect in"
+ 		       " MAXLOC intrinsic: is %ld, should be %ld",
+ 		       (long int) (GFC_DESCRIPTOR_RANK (retarray)),
+ 		       (long int) rank);
+ 
+       if (unlikely (compile_options.bounds_check))
+ 	{
+ 	  for (n=0; n < rank; n++)
+ 	    {
+ 	      index_type ret_extent;
+ 
+ 	      ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,n);
+ 	      if (extent[n] != ret_extent)
+ 		runtime_error ("Incorrect extent in return value of"
+ 			       " MAXLOC intrinsic in dimension %ld:"
+ 			       " is %ld, should be %ld", (long int) n + 1,
+ 			       (long int) ret_extent, (long int) extent[n]);
+ 	    }
+ 	}
+     }
+ 
+   for (n = 0; n < rank; n++)
+     {
+       count[n] = 0;
+       dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+     }
+ 
+   dest = retarray->base_addr;
+ 
+   while(1)
+     {
+       *dest = 0;
+       count[0]++;
+       dest += dstride[0];
+       n = 0;
+       while (count[n] == extent[n])
+ 	{
+ 	  /* When we get to the end of a dimension, reset it and increment
+ 	     the next dimension.  */
+ 	  count[n] = 0;
+ 	  /* We could precalculate these products, but this is a less
+ 	     frequently used path so probably not worth it.  */
+ 	  dest -= dstride[n] * extent[n];
+ 	  n++;
+ 	  if (n >= rank)
+ 	    return;
+ 	  else
+ 	    {
+ 	      count[n]++;
+ 	      dest += dstride[n];
+ 	    }
+       	}
+     }
+ }
+ 
+ #endif
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_16_m2.c gcc-16-20250511/libgfortran/generated/maxloc1_16_m2.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_16_m2.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_16_m2.c	Sun May 11 22:32:40 2025
*************** maxloc1_16_m2 (gfc_array_i16 * const res
*** 147,153 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_2_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_16_m2 (gfc_array_i16 * const re
*** 366,372 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_2_HUGE;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_16_m4.c gcc-16-20250511/libgfortran/generated/maxloc1_16_m4.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_16_m4.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_16_m4.c	Sun May 11 22:32:40 2025
*************** maxloc1_16_m4 (gfc_array_i16 * const res
*** 147,153 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_4_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_16_m4 (gfc_array_i16 * const re
*** 366,372 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_4_HUGE;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_16_m8.c gcc-16-20250511/libgfortran/generated/maxloc1_16_m8.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_16_m8.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_16_m8.c	Sun May 11 22:32:40 2025
*************** maxloc1_16_m8 (gfc_array_i16 * const res
*** 147,153 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_8_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_16_m8 (gfc_array_i16 * const re
*** 366,372 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_8_HUGE;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	GFC_INTEGER_16 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_4_m1.c gcc-16-20250511/libgfortran/generated/maxloc1_4_m1.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_4_m1.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_4_m1.c	Sun May 11 22:32:40 2025
*************** maxloc1_4_m1 (gfc_array_i4 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_1_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_4_m1 (gfc_array_i4 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_1_HUGE;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_4_m16.c gcc-16-20250511/libgfortran/generated/maxloc1_4_m16.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_4_m16.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_4_m16.c	Sun May 11 22:32:40 2025
*************** maxloc1_4_m16 (gfc_array_i4 * const rest
*** 147,153 ****
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_16_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_4_m16 (gfc_array_i4 * const res
*** 366,372 ****
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_16_HUGE;
  #endif
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_4_m2.c gcc-16-20250511/libgfortran/generated/maxloc1_4_m2.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_4_m2.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_4_m2.c	Sun May 11 22:32:40 2025
*************** maxloc1_4_m2 (gfc_array_i4 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_2_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_4_m2 (gfc_array_i4 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_2_HUGE;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_4_m4.c gcc-16-20250511/libgfortran/generated/maxloc1_4_m4.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_4_m4.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_4_m4.c	Sun May 11 22:32:40 2025
*************** maxloc1_4_m4 (gfc_array_i4 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_4_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_4_m4 (gfc_array_i4 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_4_HUGE;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_4_m8.c gcc-16-20250511/libgfortran/generated/maxloc1_4_m8.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_4_m8.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_4_m8.c	Sun May 11 22:32:40 2025
*************** maxloc1_4_m8 (gfc_array_i4 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_8_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_4_m8 (gfc_array_i4 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_8_HUGE;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	GFC_INTEGER_4 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_8_m1.c gcc-16-20250511/libgfortran/generated/maxloc1_8_m1.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_8_m1.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_8_m1.c	Sun May 11 22:32:40 2025
*************** maxloc1_8_m1 (gfc_array_i8 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_1_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_8_m1 (gfc_array_i8 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_1_HUGE;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	maxval = -GFC_UINTEGER_1_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_8_m16.c gcc-16-20250511/libgfortran/generated/maxloc1_8_m16.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_8_m16.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_8_m16.c	Sun May 11 22:32:40 2025
*************** maxloc1_8_m16 (gfc_array_i8 * const rest
*** 147,153 ****
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_16_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_8_m16 (gfc_array_i8 * const res
*** 366,372 ****
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_16_HUGE;
  #endif
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_16_INFINITY)
  	maxval = -GFC_UINTEGER_16_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_8_m2.c gcc-16-20250511/libgfortran/generated/maxloc1_8_m2.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_8_m2.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_8_m2.c	Sun May 11 22:32:40 2025
*************** maxloc1_8_m2 (gfc_array_i8 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_2_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_8_m2 (gfc_array_i8 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_2_HUGE;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	maxval = -GFC_UINTEGER_2_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_8_m4.c gcc-16-20250511/libgfortran/generated/maxloc1_8_m4.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_8_m4.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_8_m4.c	Sun May 11 22:32:40 2025
*************** maxloc1_8_m4 (gfc_array_i8 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_4_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_8_m4 (gfc_array_i8 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_4_HUGE;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	maxval = -GFC_UINTEGER_4_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxloc1_8_m8.c gcc-16-20250511/libgfortran/generated/maxloc1_8_m8.c
*** gcc-16-20250504/libgfortran/generated/maxloc1_8_m8.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxloc1_8_m8.c	Sun May 11 22:32:40 2025
*************** maxloc1_8_m8 (gfc_array_i8 * const restr
*** 147,153 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_8_HUGE;
  #endif
  	result = 1;
  	if (len <= 0)
--- 147,153 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = 0;
  #endif
  	result = 1;
  	if (len <= 0)
*************** mmaxloc1_8_m8 (gfc_array_i8 * const rest
*** 366,372 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = -GFC_UINTEGER_8_HUGE;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
--- 366,372 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	maxval = -GFC_UINTEGER_8_INFINITY;
  #else
! 	maxval = 0;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	GFC_INTEGER_8 result2 = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxval_m1.c gcc-16-20250511/libgfortran/generated/maxval_m1.c
*** gcc-16-20250504/libgfortran/generated/maxval_m1.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxval_m1.c	Sun May 11 22:32:40 2025
*************** maxval_m1 (gfc_array_m1 * const restrict
*** 143,152 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	result = -GFC_UINTEGER_1_INFINITY;
  #else
! 	result = -GFC_UINTEGER_1_HUGE;
  #endif
  	if (len <= 0)
! 	  *dest = -GFC_UINTEGER_1_HUGE;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
--- 143,152 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	result = -GFC_UINTEGER_1_INFINITY;
  #else
! 	result = 0;
  #endif
  	if (len <= 0)
! 	  *dest = 0;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
*************** mmaxval_m1 (gfc_array_m1 * const restric
*** 351,357 ****
  #if defined (GFC_UINTEGER_1_INFINITY)
  	result = -GFC_UINTEGER_1_INFINITY;
  #else
! 	result = -GFC_UINTEGER_1_HUGE;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	int non_empty_p = 0;
--- 351,357 ----
  #if defined (GFC_UINTEGER_1_INFINITY)
  	result = -GFC_UINTEGER_1_INFINITY;
  #else
! 	result = 0;
  #endif
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
  	int non_empty_p = 0;
*************** mmaxval_m1 (gfc_array_m1 * const restric
*** 372,380 ****
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_1_QUIET_NAN : -GFC_UINTEGER_1_HUGE;
  #else
! 		result = -GFC_UINTEGER_1_HUGE;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
--- 372,380 ----
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_1_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_1_QUIET_NAN : 0;
  #else
! 		result = 0;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
*************** smaxval_m1 (gfc_array_m1 * const restric
*** 535,541 ****
  
    while(1)
      {
!       *dest = -GFC_UINTEGER_1_HUGE;
        count[0]++;
        dest += dstride[0];
        n = 0;
--- 535,541 ----
  
    while(1)
      {
!       *dest = 0;
        count[0]++;
        dest += dstride[0];
        n = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxval_m16.c gcc-16-20250511/libgfortran/generated/maxval_m16.c
*** gcc-16-20250504/libgfortran/generated/maxval_m16.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxval_m16.c	Sun May 11 22:32:40 2025
*************** maxval_m16 (gfc_array_m16 * const restri
*** 143,152 ****
  #if defined (GFC_UINTEGER_16_INFINITY)
  	result = -GFC_UINTEGER_16_INFINITY;
  #else
! 	result = -GFC_UINTEGER_16_HUGE;
  #endif
  	if (len <= 0)
! 	  *dest = -GFC_UINTEGER_16_HUGE;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
--- 143,152 ----
  #if defined (GFC_UINTEGER_16_INFINITY)
  	result = -GFC_UINTEGER_16_INFINITY;
  #else
! 	result = 0;
  #endif
  	if (len <= 0)
! 	  *dest = 0;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
*************** mmaxval_m16 (gfc_array_m16 * const restr
*** 351,357 ****
  #if defined (GFC_UINTEGER_16_INFINITY)
  	result = -GFC_UINTEGER_16_INFINITY;
  #else
! 	result = -GFC_UINTEGER_16_HUGE;
  #endif
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
  	int non_empty_p = 0;
--- 351,357 ----
  #if defined (GFC_UINTEGER_16_INFINITY)
  	result = -GFC_UINTEGER_16_INFINITY;
  #else
! 	result = 0;
  #endif
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
  	int non_empty_p = 0;
*************** mmaxval_m16 (gfc_array_m16 * const restr
*** 372,380 ****
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_16_QUIET_NAN : -GFC_UINTEGER_16_HUGE;
  #else
! 		result = -GFC_UINTEGER_16_HUGE;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
--- 372,380 ----
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_16_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_16_QUIET_NAN : 0;
  #else
! 		result = 0;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
*************** smaxval_m16 (gfc_array_m16 * const restr
*** 535,541 ****
  
    while(1)
      {
!       *dest = -GFC_UINTEGER_16_HUGE;
        count[0]++;
        dest += dstride[0];
        n = 0;
--- 535,541 ----
  
    while(1)
      {
!       *dest = 0;
        count[0]++;
        dest += dstride[0];
        n = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxval_m2.c gcc-16-20250511/libgfortran/generated/maxval_m2.c
*** gcc-16-20250504/libgfortran/generated/maxval_m2.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxval_m2.c	Sun May 11 22:32:40 2025
*************** maxval_m2 (gfc_array_m2 * const restrict
*** 143,152 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	result = -GFC_UINTEGER_2_INFINITY;
  #else
! 	result = -GFC_UINTEGER_2_HUGE;
  #endif
  	if (len <= 0)
! 	  *dest = -GFC_UINTEGER_2_HUGE;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
--- 143,152 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	result = -GFC_UINTEGER_2_INFINITY;
  #else
! 	result = 0;
  #endif
  	if (len <= 0)
! 	  *dest = 0;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
*************** mmaxval_m2 (gfc_array_m2 * const restric
*** 351,357 ****
  #if defined (GFC_UINTEGER_2_INFINITY)
  	result = -GFC_UINTEGER_2_INFINITY;
  #else
! 	result = -GFC_UINTEGER_2_HUGE;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	int non_empty_p = 0;
--- 351,357 ----
  #if defined (GFC_UINTEGER_2_INFINITY)
  	result = -GFC_UINTEGER_2_INFINITY;
  #else
! 	result = 0;
  #endif
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
  	int non_empty_p = 0;
*************** mmaxval_m2 (gfc_array_m2 * const restric
*** 372,380 ****
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_2_QUIET_NAN : -GFC_UINTEGER_2_HUGE;
  #else
! 		result = -GFC_UINTEGER_2_HUGE;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
--- 372,380 ----
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_2_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_2_QUIET_NAN : 0;
  #else
! 		result = 0;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
*************** smaxval_m2 (gfc_array_m2 * const restric
*** 535,541 ****
  
    while(1)
      {
!       *dest = -GFC_UINTEGER_2_HUGE;
        count[0]++;
        dest += dstride[0];
        n = 0;
--- 535,541 ----
  
    while(1)
      {
!       *dest = 0;
        count[0]++;
        dest += dstride[0];
        n = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxval_m4.c gcc-16-20250511/libgfortran/generated/maxval_m4.c
*** gcc-16-20250504/libgfortran/generated/maxval_m4.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxval_m4.c	Sun May 11 22:32:40 2025
*************** maxval_m4 (gfc_array_m4 * const restrict
*** 143,152 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	result = -GFC_UINTEGER_4_INFINITY;
  #else
! 	result = -GFC_UINTEGER_4_HUGE;
  #endif
  	if (len <= 0)
! 	  *dest = -GFC_UINTEGER_4_HUGE;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
--- 143,152 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	result = -GFC_UINTEGER_4_INFINITY;
  #else
! 	result = 0;
  #endif
  	if (len <= 0)
! 	  *dest = 0;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
*************** mmaxval_m4 (gfc_array_m4 * const restric
*** 351,357 ****
  #if defined (GFC_UINTEGER_4_INFINITY)
  	result = -GFC_UINTEGER_4_INFINITY;
  #else
! 	result = -GFC_UINTEGER_4_HUGE;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	int non_empty_p = 0;
--- 351,357 ----
  #if defined (GFC_UINTEGER_4_INFINITY)
  	result = -GFC_UINTEGER_4_INFINITY;
  #else
! 	result = 0;
  #endif
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
  	int non_empty_p = 0;
*************** mmaxval_m4 (gfc_array_m4 * const restric
*** 372,380 ****
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_4_QUIET_NAN : -GFC_UINTEGER_4_HUGE;
  #else
! 		result = -GFC_UINTEGER_4_HUGE;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
--- 372,380 ----
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_4_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_4_QUIET_NAN : 0;
  #else
! 		result = 0;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
*************** smaxval_m4 (gfc_array_m4 * const restric
*** 535,541 ****
  
    while(1)
      {
!       *dest = -GFC_UINTEGER_4_HUGE;
        count[0]++;
        dest += dstride[0];
        n = 0;
--- 535,541 ----
  
    while(1)
      {
!       *dest = 0;
        count[0]++;
        dest += dstride[0];
        n = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/generated/maxval_m8.c gcc-16-20250511/libgfortran/generated/maxval_m8.c
*** gcc-16-20250504/libgfortran/generated/maxval_m8.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/generated/maxval_m8.c	Sun May 11 22:32:40 2025
*************** maxval_m8 (gfc_array_m8 * const restrict
*** 143,152 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	result = -GFC_UINTEGER_8_INFINITY;
  #else
! 	result = -GFC_UINTEGER_8_HUGE;
  #endif
  	if (len <= 0)
! 	  *dest = -GFC_UINTEGER_8_HUGE;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
--- 143,152 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	result = -GFC_UINTEGER_8_INFINITY;
  #else
! 	result = 0;
  #endif
  	if (len <= 0)
! 	  *dest = 0;
  	else
  	  {
  #if ! defined HAVE_BACK_ARG
*************** mmaxval_m8 (gfc_array_m8 * const restric
*** 351,357 ****
  #if defined (GFC_UINTEGER_8_INFINITY)
  	result = -GFC_UINTEGER_8_INFINITY;
  #else
! 	result = -GFC_UINTEGER_8_HUGE;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	int non_empty_p = 0;
--- 351,357 ----
  #if defined (GFC_UINTEGER_8_INFINITY)
  	result = -GFC_UINTEGER_8_INFINITY;
  #else
! 	result = 0;
  #endif
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
  	int non_empty_p = 0;
*************** mmaxval_m8 (gfc_array_m8 * const restric
*** 372,380 ****
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_8_QUIET_NAN : -GFC_UINTEGER_8_HUGE;
  #else
! 		result = -GFC_UINTEGER_8_HUGE;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
--- 372,380 ----
  	    if (unlikely (n >= len))
  	      {
  #if defined (GFC_UINTEGER_8_QUIET_NAN)
! 		result = non_empty_p ? GFC_UINTEGER_8_QUIET_NAN : 0;
  #else
! 		result = 0;
  #endif
  	      }
  	    else for (; n < len; n++, src += delta, msrc += mdelta)
*************** smaxval_m8 (gfc_array_m8 * const restric
*** 535,541 ****
  
    while(1)
      {
!       *dest = -GFC_UINTEGER_8_HUGE;
        count[0]++;
        dest += dstride[0];
        n = 0;
--- 535,541 ----
  
    while(1)
      {
!       *dest = 0;
        count[0]++;
        dest += dstride[0];
        n = 0;
diff -Nrcpad gcc-16-20250504/libgfortran/gfortran.map gcc-16-20250511/libgfortran/gfortran.map
*** gcc-16-20250504/libgfortran/gfortran.map	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/gfortran.map	Sun May 11 22:32:40 2025
*************** GFORTRAN_15 {
*** 1786,1792 ****
      _gfortran_arandom_m2;
      _gfortran_arandom_m4;
      _gfortran_arandom_m8;
-     _gfortran_arandom_m16;
      _gfortran_minval_m16;
      _gfortran_minval_m1;
      _gfortran_minval_m2;
--- 1786,1791 ----
*************** GFORTRAN_15 {
*** 1832,1838 ****
      _gfortran_maxloc0_8_m2;
      _gfortran_maxloc0_8_m4;
      _gfortran_maxloc0_8_m8;
-     _gfortran_maxloc1_16_m16;
      _gfortran_maxloc1_16_m1;
      _gfortran_maxloc1_16_m2;
      _gfortran_maxloc1_16_m4;
--- 1831,1836 ----
*************** GFORTRAN_15 {
*** 1862,1868 ****
      _gfortran_mmaxloc0_8_m2;
      _gfortran_mmaxloc0_8_m4;
      _gfortran_mmaxloc0_8_m8;
-     _gfortran_mmaxloc1_16_m16;
      _gfortran_mmaxloc1_16_m1;
      _gfortran_mmaxloc1_16_m2;
      _gfortran_mmaxloc1_16_m4;
--- 1860,1865 ----
*************** GFORTRAN_15 {
*** 1892,1898 ****
      _gfortran_smaxloc0_8_m2;
      _gfortran_smaxloc0_8_m4;
      _gfortran_smaxloc0_8_m8;
-     _gfortran_smaxloc1_16_m16;
      _gfortran_smaxloc1_16_m1;
      _gfortran_smaxloc1_16_m2;
      _gfortran_smaxloc1_16_m4;
--- 1889,1894 ----
*************** GFORTRAN_15 {
*** 2028,2030 ****
--- 2024,2034 ----
      _gfortran_reduce_c;
      _gfortran_reduce_scalar_c;
  } GFORTRAN_14;
+ 
+ GFORTRAN_15.2 {
+   global:
+     _gfortran_arandom_m16;
+     _gfortran_maxloc1_16_m16;
+     _gfortran_mmaxloc1_16_m16;
+     _gfortran_smaxloc1_16_m16;
+ } GFORTRAN_15;
diff -Nrcpad gcc-16-20250504/libgfortran/intrinsics/random.c gcc-16-20250511/libgfortran/intrinsics/random.c
*** gcc-16-20250504/libgfortran/intrinsics/random.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/intrinsics/random.c	Sun May 11 22:32:40 2025
*************** arandom_m8 (gfc_array_m8 *x)
*** 1215,1221 ****
      }
  }
  
! #ifdef GFC_HAVE_GFC_UINTEGER_16
  
  /* Fill an unsigned array with random bytes.  */
  
--- 1215,1221 ----
      }
  }
  
! #ifdef HAVE_GFC_UINTEGER_16
  
  /* Fill an unsigned array with random bytes.  */
  
diff -Nrcpad gcc-16-20250504/libgfortran/io/read.c gcc-16-20250511/libgfortran/io/read.c
*** gcc-16-20250504/libgfortran/io/read.c	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/io/read.c	Sun May 11 22:32:40 2025
*************** exponent:
*** 1375,1381 ****
  
    /* At this point a digit string is required.  We calculate the value
       of the exponent in order to take account of the scale factor and
!      the d parameter before explict conversion takes place.  */
  
    if (w == 0)
      {
--- 1375,1381 ----
  
    /* At this point a digit string is required.  We calculate the value
       of the exponent in order to take account of the scale factor and
!      the d parameter before explicit conversion takes place.  */
  
    if (w == 0)
      {
diff -Nrcpad gcc-16-20250504/libgfortran/m4/iparm.m4 gcc-16-20250511/libgfortran/m4/iparm.m4
*** gcc-16-20250504/libgfortran/m4/iparm.m4	Sun May  4 22:32:31 2025
--- gcc-16-20250511/libgfortran/m4/iparm.m4	Sun May 11 22:32:40 2025
*************** define_type(rtype, rtype_tmp)dnl
*** 28,34 ****
  define(rtype_qual,`_'rtype_kind)dnl
  ')dnl
  define(atype_max, atype_name`_HUGE')dnl
! define(atype_min,ifelse(regexp(file, `_\(.\)[0-9]*\.c$', `\1'),`i',`(-'atype_max`-1)',`-'atype_max))dnl
  define(atype_inf, atype_name`_INFINITY')dnl
  define(atype_nan, atype_name`_QUIET_NAN')dnl
  define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl
--- 28,34 ----
  define(rtype_qual,`_'rtype_kind)dnl
  ')dnl
  define(atype_max, atype_name`_HUGE')dnl
! define(atype_min,ifelse(index(atype_name,`GFC_UINTEGER'),0,`0',ifelse(regexp(file, `_\(.\)[0-9]*\.c$', `\1'),`i',`(-'atype_max`-1)',`-'atype_max)))dnl
  define(atype_inf, atype_name`_INFINITY')dnl
  define(atype_nan, atype_name`_QUIET_NAN')dnl
  define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl
diff -Nrcpad gcc-16-20250504/libgomp/ChangeLog gcc-16-20250511/libgomp/ChangeLog
*** gcc-16-20250504/libgomp/ChangeLog	Sun May  4 22:32:32 2025
--- gcc-16-20250511/libgomp/ChangeLog	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,38 ----
+ 2025-05-09  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.c/interop-cuda-full.c: Use 'link' instead
+ 	of 'run' when the default device is "! offload_device_nvptx".
+ 	* testsuite/libgomp.c/interop-cuda-libonly.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-full.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-no-headers.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-nvidia-full.F90: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-amd-full.c: Use 'link' instead
+ 	of 'run' when the default device is "! offload_device_gcn".
+ 	* testsuite/libgomp.c/interop-hip-amd-no-hip-header.c: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-amd-full.F90: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-amd-no-module.F90: Likewise.
+ 
+ 2025-05-09  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116792
+ 	* testsuite/lib/libgomp.exp: Add load_lib of scanhtml.exp.
+ 
+ 2025-05-07  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/map-alloc-comp-9.f90: Process differently
+ 	when USE_USM_REQUIREMENT is set.
+ 	* testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90: New test.
+ 
+ 2025-05-06  Tejas Belagod  <tejas.belagod@arm.com>
+ 
+ 	* testsuite/libgomp.c-target/aarch64/udr-sve.c: Fix test.
+ 
+ 2025-05-05  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* testsuite/libgomp.c/interop-hsa.c: GCN offloading only.
+ 
  2025-05-01  Tobias Burnus  <tobias@codesourcery.com>
  
  	* testsuite/libgomp.fortran/allocate-8a.f90: New test.
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/lib/libgomp.exp gcc-16-20250511/libgomp/testsuite/lib/libgomp.exp
*** gcc-16-20250504/libgomp/testsuite/lib/libgomp.exp	Sun May  4 22:32:32 2025
--- gcc-16-20250511/libgomp/testsuite/lib/libgomp.exp	Sun May 11 22:32:42 2025
*************** load_gcc_lib scandump.exp
*** 30,35 ****
--- 30,36 ----
  load_gcc_lib scanlang.exp
  load_gcc_lib scanrtl.exp
  load_gcc_lib scansarif.exp
+ load_gcc_lib scanhtml.exp
  load_gcc_lib scantree.exp
  load_gcc_lib scanltrans.exp
  load_gcc_lib scanoffload.exp
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-cuda-full.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-cuda-full.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-cuda-full.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-cuda-full.c	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
  /* { dg-require-effective-target openacc_cuda } */
  /* { dg-require-effective-target openacc_cudart } */
  /* { dg-additional-options "-lcuda -lcudart" } */
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
  /* { dg-require-effective-target openacc_libcudart } */
  /* { dg-require-effective-target openacc_libcuda } */
  /* { dg-additional-options "-lcuda -lcudart" } */
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do run { target { offload_device_gcn } } } */
+ /* { dg-do link { target { ! offload_device_gcn } } } */
+ 
  /* { dg-require-effective-target gomp_hip_header_amd } */
  /* { dg-require-effective-target gomp_libamdhip64 } */
  /* { dg-additional-options "-lamdhip64" } */
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do run { target { offload_device_gcn } } } */
+ /* { dg-do link { target { ! offload_device_gcn } } } */
+ 
  /* { dg-require-effective-target gomp_libamdhip64 } */
  /* { dg-additional-options "-lamdhip64" } */
  
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
  /* { dg-require-effective-target openacc_cudart } */
  /* { dg-require-effective-target openacc_cuda } */
  /* { dg-require-effective-target gomp_hip_header_nvidia } */
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
  /* { dg-require-effective-target openacc_libcudart } */
  /* { dg-require-effective-target openacc_libcuda } */
  /* { dg-additional-options "-lcuda -lcudart" } */
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
  /* { dg-require-effective-target openacc_cudart } */
  /* { dg-require-effective-target openacc_cuda } */
  /* { dg-additional-options "-lcuda -lcudart" } */
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hsa.c gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hsa.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c/interop-hsa.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c/interop-hsa.c	Sun May 11 22:32:42 2025
***************
*** 1,5 ****
  /* { dg-additional-options "-ldl" } */
! /* { dg-require-effective-target offload_device_gcn } */
  
  #include <stdio.h>
  #include <stdlib.h>
--- 1,7 ----
  /* { dg-additional-options "-ldl" } */
! /* { dg-require-effective-target offload_device_gcn }
!    The 'asm' insert is valid for GCN only:
!    { dg-additional-options -foffload=amdgcn-amdhsa } */
  
  #include <stdio.h>
  #include <stdlib.h>
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c gcc-16-20250511/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c
*** gcc-16-20250504/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c	Sun May 11 22:32:42 2025
***************
*** 9,16 ****
  void __attribute__ ((noipa))
  parallel_reduction ()
  {
!   int a[8] = {1 ,1, 1, 1, 1, 1, 1, 1};
!   int b[8] = {0 ,0, 0, 0, 0, 0, 0, 0};
    svint32_t va = svld1_s32 (svptrue_b32 (), b);
    int i = 0;
    int64_t res;
--- 9,16 ----
  void __attribute__ ((noipa))
  parallel_reduction ()
  {
!   int a[8] = {1, 1, 1, 1, 1, 1, 1, 1};
!   int b[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    svint32_t va = svld1_s32 (svptrue_b32 (), b);
    int i = 0;
    int64_t res;
*************** parallel_reduction ()
*** 30,37 ****
  void __attribute__ ((noipa))
  for_reduction ()
  {
!   int a[8] = {1 ,1, 1, 1, 1, 1, 1, 1};
!   int b[8] = {0 ,0, 0, 0, 0, 0, 0, 0};
    svint32_t va = svld1_s32 (svptrue_b32 (), b);
    int j;
    int64_t res;
--- 30,37 ----
  void __attribute__ ((noipa))
  for_reduction ()
  {
!   int a[8] = {1, 1, 1, 1, 1, 1, 1, 1};
!   int b[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    svint32_t va = svld1_s32 (svptrue_b32 (), b);
    int j;
    int64_t res;
*************** simd_reduction ()
*** 58,70 ****
    for (j = 0; j < 8; j++)
      a[j] = 1;
  
!   #pragma omp simd reduction (+:va, i)
    for (j = 0; j < 16; j++)
!     va = svld1_s32 (svptrue_b32 (), a);
  
    res = svaddv_s32 (svptrue_b32 (), va);
  
!   if (res != 8)
      __builtin_abort ();
  }
  
--- 58,70 ----
    for (j = 0; j < 8; j++)
      a[j] = 1;
  
!   #pragma omp simd reduction (+:va)
    for (j = 0; j < 16; j++)
!     va += svld1_s32 (svptrue_b32 (), a);
  
    res = svaddv_s32 (svptrue_b32 (), va);
  
!   if (res != 128)
      __builtin_abort ();
  }
  
*************** void __attribute__ ((noipa))
*** 72,93 ****
  inscan_reduction_incl ()
  {
    svint32_t va = svindex_s32 (0, 0);
    int j;
    int64_t res = 0;
  
!   #pragma omp parallel
!   #pragma omp for reduction (inscan,+:va) firstprivate (res) lastprivate (res)
    for (j = 0; j < 8; j++)
      {
!       va = svindex_s32 (1, 0);
        #pragma omp scan inclusive (va)
!       res += svaddv_s32 (svptrue_b32 (), va);
      }
  
    if (res != 64)
      __builtin_abort ();
  }
  
  int
  main ()
  {
--- 72,128 ----
  inscan_reduction_incl ()
  {
    svint32_t va = svindex_s32 (0, 0);
+   int a[8] = {1, 1, 1, 1, 1, 1, 1, 1};
+   int b[64] = { 0 };
    int j;
    int64_t res = 0;
  
!   #pragma omp parallel for reduction (inscan, +:va)
    for (j = 0; j < 8; j++)
      {
!       va += svld1_s32 (svptrue_b32 (), a);
        #pragma omp scan inclusive (va)
!       svst1_s32 (svptrue_b32 (), b + j * 8, va);
!     }
! 
!   res = svaddv_s32 (svptrue_b32 (), va);
! 
!   if (res != 64)
!     __builtin_abort ();
! 
!   for (j = 0; j < 64; j+=8)
!     if (b[j] != (j / 8 + 1))
!       __builtin_abort ();
! }
! 
! void __attribute__ ((noipa))
! inscan_reduction_excl ()
! {
!   svint32_t va = svindex_s32 (0, 0);
!   int a[8] = {1, 1, 1, 1, 1, 1, 1, 1};
!   int b[64] = { 0 };
!   int j;
!   int64_t res = 0;
! 
!   #pragma omp parallel for reduction (inscan, +:va)
!   for (j = 0; j < 8; j++)
!     {
!       svst1_s32 (svptrue_b32 (), b + j * 8, va);
!       #pragma omp scan exclusive (va)
!       va += svld1_s32 (svptrue_b32 (), a);
      }
  
+   res = svaddv_s32 (svptrue_b32 (), va);
+ 
    if (res != 64)
      __builtin_abort ();
+ 
+   for (j = 0; j < 64; j+=8)
+     if (b[j] != j / 8)
+       __builtin_abort ();
  }
  
+ 
  int
  main ()
  {
*************** main ()
*** 95,98 ****
--- 130,134 ----
    for_reduction ();
    simd_reduction ();
    inscan_reduction_incl ();
+   inscan_reduction_excl ();
  }
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90 gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90
*** gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ ! { dg-do run { target { offload_device_gcn } } }
+ ! { dg-do link { target { ! offload_device_gcn } } }
+ 
  ! { dg-require-effective-target gomp_hipfort_module }
  ! { dg-require-effective-target gomp_libamdhip64 }
  ! { dg-additional-options "-lamdhip64" }
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90 gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90
*** gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ ! { dg-do run { target { offload_device_gcn } } }
+ ! { dg-do link { target { ! offload_device_gcn } } }
+ 
  ! { dg-require-effective-target gomp_libamdhip64 }
  ! { dg-additional-options "-lamdhip64" }
  
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90 gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90
*** gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ ! { dg-do run { target { offload_device_nvptx } } }
+ ! { dg-do link { target { ! offload_device_nvptx } } }
+ 
  ! { dg-require-effective-target gomp_hipfort_module }
  ! { dg-require-effective-target openacc_cudart }
  ! { dg-require-effective-target openacc_cuda }
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90 gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90
*** gcc-16-20250504/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,6 ----
+ ! { dg-do run { target { offload_device_nvptx } } }
+ ! { dg-do link { target { ! offload_device_nvptx } } }
+ 
  ! { dg-require-effective-target openacc_libcudart }
  ! { dg-require-effective-target openacc_libcuda }
  ! { dg-additional-options "-lcuda -lcudart" }
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90 gcc-16-20250511/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90
*** gcc-16-20250504/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90	Sun May 11 22:32:42 2025
***************
*** 0 ****
--- 1,11 ----
+ ! { dg-additional-options "-cpp -DUSE_USM_REQUIREMENT=1 -Wno-openmp" }
+ !
+ ! We silence the warning:
+ !  Mapping of polymorphic list item '...' is unspecified behavior [-Wopenmp]
+ !
+ ! Ensure that polymorphic mapping is diagnosed as undefined behavior
+ ! Ensure that static access to polymorphic variables works
+ 
+ ! Run map-alloc-comp-9.f90 in unified-shared-memory mode
+ 
+ #include "map-alloc-comp-9.f90"
diff -Nrcpad gcc-16-20250504/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90 gcc-16-20250511/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
*** gcc-16-20250504/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90	Sun May 11 22:32:42 2025
***************
*** 1,8 ****
--- 1,19 ----
+ ! { dg-additional-options "-cpp" }
+ !
  ! Ensure that polymorphic mapping is diagnosed as undefined behavior
  ! Ensure that static access to polymorphic variables works
  
+ ! Some extended tests are only run with shared memory
+ ! To enforce this (where possible) on the device side:
+ !   #define USE_USM_REQUIREMENT
+ ! which is done in map-alloc-comp-9-usm.f90
+ 
  subroutine test(case)
  implicit none(type, external)
+ #ifdef USE_USM_REQUIREMENT
+   !$omp requires unified_shared_memory
+ #endif
+ 
  type t
    integer :: x(4)
  end type t
*************** var4%y2(2)%y%x%x = -7 * [1111,2222,3333,
*** 73,82 ****
--- 84,97 ----
  var4%y2(2)%y%x2(1)%x = -8 * [1111,2222,3333,4444]
  var4%y2(2)%y%x2(2)%x = -9 * [1111,2222,3333,4444]
  
+ #ifdef USE_USM_REQUIREMENT
+ is_shared_mem = .true.
+ #else
  is_shared_mem = .false.
  !$omp target map(to: is_shared_mem)
    is_shared_mem = .true.
  !$omp end target
+ #endif
  
  if (case == 1) then
    ! implicit mapping
*************** end subroutine test
*** 532,537 ****
--- 547,556 ----
  program main
    use omp_lib
    implicit none(type, external)
+ #ifdef USE_USM_REQUIREMENT
+   !$omp requires unified_shared_memory
+ #endif
+ 
    interface
      subroutine test(case)
        integer, value :: case
diff -Nrcpad gcc-16-20250504/libitm/ChangeLog gcc-16-20250511/libitm/ChangeLog
*** gcc-16-20250504/libitm/ChangeLog	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libitm/ChangeLog	Sun May 11 22:32:42 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-05-09  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116792
+ 	* testsuite/lib/libitm.exp: Add load_lib of scanhtml.exp.
+ 
  2025-01-02  Jakub Jelinek  <jakub@redhat.com>
  
  	* libitm.texi: Bump @copying's copyright year.
diff -Nrcpad gcc-16-20250504/libitm/testsuite/lib/libitm.exp gcc-16-20250511/libitm/testsuite/lib/libitm.exp
*** gcc-16-20250504/libitm/testsuite/lib/libitm.exp	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libitm/testsuite/lib/libitm.exp	Sun May 11 22:32:42 2025
*************** load_gcc_lib scandump.exp
*** 43,48 ****
--- 43,49 ----
  load_gcc_lib scanlang.exp
  load_gcc_lib scanrtl.exp
  load_gcc_lib scansarif.exp
+ load_gcc_lib scanhtml.exp
  load_gcc_lib scantree.exp
  load_gcc_lib scanltrans.exp
  load_gcc_lib scanipa.exp
diff -Nrcpad gcc-16-20250504/libphobos/ChangeLog gcc-16-20250511/libphobos/ChangeLog
*** gcc-16-20250504/libphobos/ChangeLog	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libphobos/ChangeLog	Sun May 11 22:32:43 2025
***************
*** 1,3 ****
--- 1,12 ----
+ 2025-05-09  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116792
+ 	* testsuite/lib/libphobos-dg.exp: Add load_lib of scanhtml.exp.
+ 
+ 2025-05-06  Sam James  <sam@gentoo.org>
+ 
+ 	* configure.tgt: Add sparc64-unknown-linux-gnu as a supported target.
+ 
  2025-04-12  Iain Buclaw  <ibuclaw@gdcproject.org>
  
  	PR d/119761
diff -Nrcpad gcc-16-20250504/libphobos/configure.tgt gcc-16-20250511/libphobos/configure.tgt
*** gcc-16-20250504/libphobos/configure.tgt	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libphobos/configure.tgt	Sun May 11 22:32:43 2025
*************** case "${target}" in
*** 58,64 ****
    s390*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
!   sparc*-*-solaris2.11*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    *-*-darwin9* | *-*-darwin1[01]*)
--- 58,64 ----
    s390*-linux*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
!   sparc64-*-linux* | sparc*-*-solaris2.11*)
  	LIBPHOBOS_SUPPORTED=yes
  	;;
    *-*-darwin9* | *-*-darwin1[01]*)
diff -Nrcpad gcc-16-20250504/libphobos/testsuite/lib/libphobos-dg.exp gcc-16-20250511/libphobos/testsuite/lib/libphobos-dg.exp
*** gcc-16-20250504/libphobos/testsuite/lib/libphobos-dg.exp	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libphobos/testsuite/lib/libphobos-dg.exp	Sun May 11 22:32:43 2025
*************** load_gcc_lib scanasm.exp
*** 24,29 ****
--- 24,30 ----
  load_gcc_lib scanlang.exp
  load_gcc_lib scanrtl.exp
  load_gcc_lib scansarif.exp
+ load_gcc_lib scanhtml.exp
  load_gcc_lib scantree.exp
  load_gcc_lib scanipa.exp
  load_gcc_lib torture-options.exp
diff -Nrcpad gcc-16-20250504/libstdc++-v3/ChangeLog gcc-16-20250511/libstdc++-v3/ChangeLog
*** gcc-16-20250504/libstdc++-v3/ChangeLog	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libstdc++-v3/ChangeLog	Sun May 11 22:32:43 2025
***************
*** 1,3 ****
--- 1,131 ----
+ 2025-05-10  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* src/c++23/print.cc [__VXWORKS__]: Include ioLib.h.
+ 
+ 2025-05-09  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/chrono_io.h (__formatter_chrono::_M_format_to):
+ 	Extracted from _M_format.
+ 	(__formatter_chrono::_M_format): Use _Padding_sink and delegate
+ 	to _M_format_to.
+ 
+ 2025-05-09  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/format (__Sink_iter<_CharT>::_M_discarding)
+ 	(__Sink<_CharT>::_M_discarding, _Iter_sink<_CharT, _OutIter>::_M_discarding)
+ 	(_Padding_sinl<_CharT, _Out>::_M_padwidth)
+ 	(_Padding_sink<_CharT, _Out>::_M_maxwidth): Remove const.
+ 	(_Padding_sink<_CharT, _Out>::_M_sync_discarding)
+ 	(_Padding_sink<_CharT, _Out>::_M_discarding): Define.
+ 	(_Padding_sink<_CharT, _Out>::_Padding_sink(_Out, size_t, size_t))
+ 	(_Padding_sink<_CharT, _Out>::_M_force_update):
+ 	(_Padding_sink<_CharT, _Out>::_M_flush): Call _M_sync_discarding.
+ 	(_Padding_sink<_CharT, _Out>::_Padding_sink(_Out, size_t)): Delegate.
+ 
+ 2025-05-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120159
+ 	* src/c++23/std.cc.in (is_layout_compatible_v): Export.
+ 
+ 2025-05-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++23/std.cc.in: Fix export for std::extents.
+ 
+ 2025-05-07  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* testsuite/23_containers/mdspan/extents/class_mandates_neg.cc: New test.
+ 	* testsuite/23_containers/mdspan/extents/ctor_copy.cc: New test.
+ 	* testsuite/23_containers/mdspan/extents/ctor_ints.cc: New test.
+ 	* testsuite/23_containers/mdspan/extents/ctor_shape.cc: New test.
+ 	* testsuite/23_containers/mdspan/extents/custom_integer.cc: New test.
+ 	* testsuite/23_containers/mdspan/extents/misc.cc: New test.
+ 
+ 2025-05-07  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/107761
+ 	* include/std/mdspan (extents): New class.
+ 	* src/c++23/std.cc.in: Add 'using std::extents'.
+ 
+ 2025-05-07  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* doc/doxygen/user.cfg.in: Add <mdspan>.
+ 	* include/Makefile.am: Ditto.
+ 	* include/Makefile.in: Ditto.
+ 	* include/precompiled/stdc++.h: Ditto.
+ 	* include/std/mdspan: New file.
+ 
+ 2025-05-07  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/bits/version.def: Add internal feature testing macro
+ 	__glibcxx_mdspan.
+ 	* include/bits/version.h: Regenerate.
+ 
+ 2025-05-07  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/120114
+ 	* include/bits/chrono_io.h (__formatter_chrono::_M_format): Use __field_width.
+ 	* testsuite/std/time/format/pr120114.cc: New test.
+ 
+ 2025-05-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120147
+ 	* acinclude.m4 (GLIBCXX_ENABLE_BACKTRACE): Restore use of
+ 	AC_LANG_CPLUSPLUS.
+ 	* configure: Regenerate.
+ 
+ 2025-05-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/70560
+ 	PR libstdc++/119667
+ 	* acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Only check for
+ 	__atomic_fetch_add on _Atomic_word. Define new macro
+ 	_GLIBCXX_ATOMIC_WORD_BUILTINS and stop defining macro
+ 	_GLIBCXX_ATOMIC_BUILTINS.
+ 	(GLIBCXX_ENABLE_BACKTRACE): Check for __atomic_load_n and
+ 	__atomic_store_n on int, void* and size_t.
+ 	* config.h.in: Regenerate.
+ 	* configure: Regenerate.
+ 	* configure.host: Fix typo in comment.
+ 	* include/ext/atomicity.h (__exchange_and_add, __atomic_add):
+ 	Depend on _GLIBCXX_ATOMIC_WORD_BUILTINS macro instead of old
+ 	_GLIBCXX_ATOMIC_BUILTINS macro.
+ 
+ 2025-05-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117905
+ 	* include/pstl/glue_numeric_impl.h (reduce, transform_reduce)
+ 	(transform_reduce, inclusive_scan, transform_exclusive_scan)
+ 	(transform_inclusive_scan): Use std::move for __init parameter.
+ 	* include/pstl/numeric_impl.h (__brick_transform_reduce)
+ 	(__pattern_transform_reduce, __brick_transform_scan)
+ 	(__pattern_transform_scan): Likewise.
+ 	* include/std/numeric (inclusive_scan, transform_exclusive_scan):
+ 	Use std::move to create local copy of the first element.
+ 	* testsuite/26_numerics/pstl/numeric_ops/108236.cc: Move test
+ 	using move-only type to ...
+ 	* testsuite/26_numerics/pstl/numeric_ops/move_only.cc: New test.
+ 
+ 2025-05-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120029
+ 	* src/c++17/fs_path.cc (path::operator+=(const path&)): Handle
+ 	parameters that alias the path or one of its components.
+ 	* testsuite/27_io/filesystem/path/concat/120029.cc: New test.
+ 	* testsuite/experimental/filesystem/path/concat/120029.cc: New
+ 	test.
+ 
+ 2025-05-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR c++/120112
+ 	* include/bits/ptr_traits.h (_Safe_iterator_base): Use class
+ 	keyword in class-head of declaration.
+ 	* include/debug/debug.h (_Safe_iterator): Likewise.
+ 
+ 2025-05-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_iterator.h (counted_iterator): Add noexcept
+ 	to friend operators which only access the _M_length member.
+ 
  2025-05-02  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* include/std/memory: Define __glibcxx_want_addressof_constexpr.
diff -Nrcpad gcc-16-20250504/libstdc++-v3/acinclude.m4 gcc-16-20250511/libstdc++-v3/acinclude.m4
*** gcc-16-20250504/libstdc++-v3/acinclude.m4	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libstdc++-v3/acinclude.m4	Sun May 11 22:32:43 2025
*************** AC_DEFUN([GLIBCXX_ENABLE_PCH], [
*** 3709,3724 ****
    AC_SUBST(glibcxx_PCHFLAGS)
  ])
  
- 
  dnl
  dnl Check for atomic builtins.
  dnl See:
  dnl http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
  dnl
! dnl This checks to see if the host supports the compiler-generated
! dnl builtins for atomic operations for various integral sizes. Note, this
! dnl is intended to be an all-or-nothing switch, so all the atomic operations
! dnl that are used should be checked.
  dnl
  dnl Note:
  dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
--- 3709,3730 ----
    AC_SUBST(glibcxx_PCHFLAGS)
  ])
  
  dnl
  dnl Check for atomic builtins.
  dnl See:
  dnl http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
  dnl
! dnl This checks to see if the host supports __atomic_fetch_add on _Atomic_word.
! dnl
! dnl We don't want libstdc++.so to depend on libatomic.so for basic
! dnl functionality like library-internal reference counting. This means we
! dnl should not use atomics for reference counting unless it can be done
! dnl using native instructions and not by calling into libatomic.
! dnl This policy could change if linking to libatomic.so becomes implicit.
! dnl
! dnl Defines:
! dnl  GLIBCXX_ATOMIC_WORD_BUILTINS - if atomic builtins should be used for
! dnl                                 increments and decrements of _Atomic_word.
  dnl
  dnl Note:
  dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
*************** AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS
*** 3728,3734 ****
    AC_LANG_CPLUSPLUS
    old_CXXFLAGS="$CXXFLAGS"
  
!   # Do link tests if possible, instead asm tests, limited to some platforms
    # see discussion in PR target/40134, PR libstdc++/40133 and the thread
    # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
    atomic_builtins_link_tests=no
--- 3734,3740 ----
    AC_LANG_CPLUSPLUS
    old_CXXFLAGS="$CXXFLAGS"
  
!   # Do link tests if possible, otherwise asm tests. Limited to some platforms
    # see discussion in PR target/40134, PR libstdc++/40133 and the thread
    # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
    atomic_builtins_link_tests=no
*************** AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS
*** 3741,3963 ****
      esac
    fi
  
!   if test x$atomic_builtins_link_tests = xyes; then
! 
!   # Do link tests.
! 
!   CXXFLAGS="$CXXFLAGS -fno-exceptions"
! 
!   AC_CACHE_CHECK([for atomic builtins for bool],
!     glibcxx_cv_atomic_bool, [
!     AC_TRY_LINK(
!       [ ],
!       [typedef bool atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        // N.B. __atomic_fetch_add is not supported for bool.
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
!       ],
!       [glibcxx_cv_atomic_bool=yes],
!       [glibcxx_cv_atomic_bool=no])
!   ])
  
!   AC_CACHE_CHECK([for atomic builtins for short],
!     glibcxx_cv_atomic_short, [
!     AC_TRY_LINK(
!       [ ],
!       [typedef short atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
!       ],
!       [glibcxx_cv_atomic_short=yes],
!       [glibcxx_cv_atomic_short=no])
!   ])
  
!   AC_CACHE_CHECK([for atomic builtins for int],
!     glibcxx_cv_atomic_int, [
!     AC_TRY_LINK(
!       [ ],
!       [typedef int atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
!       ],
!       [glibcxx_cv_atomic_int=yes],
!       [glibcxx_cv_atomic_int=no])
!   ])
  
!   AC_CACHE_CHECK([for atomic builtins for long long],
!     glibcxx_cv_atomic_long_long, [
!     AC_TRY_LINK(
!       [ ],
!       [typedef long long atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
!       ],
!       [glibcxx_cv_atomic_long_long=yes],
!       [glibcxx_cv_atomic_long_long=no])
!   ])
  
    else
  
!   # Do asm tests.
! 
!   # Compile unoptimized.
!   CXXFLAGS='-O0 -S'
! 
!   # Fake what AC_TRY_COMPILE does.
! 
!     cat > conftest.$ac_ext << EOF
! [#]line __oline__ "configure"
! int main()
! {
!   typedef bool atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   // N.B. __atomic_fetch_add is not supported for bool.
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
! }
! EOF
! 
!     AC_MSG_CHECKING([for atomic builtins for bool])
!     if AC_TRY_EVAL(ac_compile); then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_bool=no
!       else
! 	glibcxx_cv_atomic_bool=yes
!       fi
!     fi
!     AC_MSG_RESULT($glibcxx_cv_atomic_bool)
!     rm -f conftest*
! 
!     cat > conftest.$ac_ext << EOF
! [#]line __oline__ "configure"
! int main()
! {
!   typedef short atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
! }
! EOF
! 
!     AC_MSG_CHECKING([for atomic builtins for short])
!     if AC_TRY_EVAL(ac_compile); then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_short=no
!       else
! 	glibcxx_cv_atomic_short=yes
!       fi
!     fi
!     AC_MSG_RESULT($glibcxx_cv_atomic_short)
!     rm -f conftest*
! 
!     cat > conftest.$ac_ext << EOF
! [#]line __oline__ "configure"
! int main()
! {
!   // NB: _Atomic_word not necessarily int.
!   typedef int atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
! }
! EOF
  
!     AC_MSG_CHECKING([for atomic builtins for int])
!     if AC_TRY_EVAL(ac_compile); then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_int=no
!       else
! 	glibcxx_cv_atomic_int=yes
!       fi
!     fi
!     AC_MSG_RESULT($glibcxx_cv_atomic_int)
!     rm -f conftest*
  
      cat > conftest.$ac_ext << EOF
  [#]line __oline__ "configure"
  int main()
  {
!   typedef long long atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
  }
  EOF
  
!     AC_MSG_CHECKING([for atomic builtins for long long])
      if AC_TRY_EVAL(ac_compile); then
        if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_long_long=no
        else
! 	glibcxx_cv_atomic_long_long=yes
        fi
      fi
!     AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
      rm -f conftest*
- 
    fi
  
    CXXFLAGS="$old_CXXFLAGS"
    AC_LANG_RESTORE
  
!   # Set atomicity_dir to builtins if all but the long long test above passes,
    # or if the builtins were already chosen (e.g. by configure.host).
!   if { test "$glibcxx_cv_atomic_bool" = yes \
!      && test "$glibcxx_cv_atomic_short" = yes \
!      && test "$glibcxx_cv_atomic_int" = yes; } \
       || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
!     AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
!     [Define if the compiler supports C++11 atomics.])
      atomicity_dir=cpu/generic/atomicity_builtins
    fi
  
--- 3747,3805 ----
      esac
    fi
  
!   if test "$atomic_builtins_link_tests" = yes; then
  
!     # Do link tests.
  
!     CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
!     AC_CACHE_CHECK([for atomic builtins for _Atomic_word],
! 	glibcxx_cv_atomic_word,
! 	[AC_TRY_LINK([#include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"],
! 		     [_Atomic_word a = 0, b;
! 		      b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);],
! 		     [glibcxx_cv_atomic_word=yes],
! 		     [glibcxx_cv_atomic_word=no])])
  
    else
+     # Do asm tests.
  
!     # Compile unoptimized.
!     CXXFLAGS='-O0 -S'
  
!     # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
  [#]line __oline__ "configure"
+ [#]include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int main()
  {
!   _Atomic_word a = 0, b;
!   b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);
  }
  EOF
  
!     AC_MSG_CHECKING([for atomic builtins for _Atomic_word])
      if AC_TRY_EVAL(ac_compile); then
        if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_word=no
        else
! 	glibcxx_cv_atomic_word=yes
        fi
      fi
!     AC_MSG_RESULT($glibcxx_cv_atomic_word)
      rm -f conftest*
    fi
  
    CXXFLAGS="$old_CXXFLAGS"
    AC_LANG_RESTORE
  
!   # Set atomicity_dir to builtins if the test above passes,
    # or if the builtins were already chosen (e.g. by configure.host).
!   if test "$glibcxx_cv_atomic_word" = yes \
       || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
!     AC_DEFINE(_GLIBCXX_ATOMIC_WORD_BUILTINS, 1,
!     [Define if the compiler supports native atomics for _Atomic_word.])
      atomicity_dir=cpu/generic/atomicity_builtins
    fi
  
*************** AC_DEFUN([GLIBCXX_ENABLE_BACKTRACE], [
*** 5448,5455 ****
  
    BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
  
!   # libbacktrace only needs atomics for int, which we've already tested
!   if test "$glibcxx_cv_atomic_int" = "yes"; then
      BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_ATOMIC_FUNCTIONS=1"
    fi
  
--- 5290,5366 ----
  
    BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
  
!   AC_LANG_CPLUSPLUS
!   old_CXXFLAGS="$CXXFLAGS"
! 
!   # libbacktrace's own configure.ac only tests atomics for int,
!   # but the code actually uses atomics for size_t and pointers as well.
!   if test "$atomic_builtins_link_tests" = yes; then
! 
!     CXXFLAGS='-O0'
! 
!     AC_CACHE_CHECK([for atomic builtins for libbacktrace],
! 	glibcxx_cv_libbacktrace_atomics,
! 	[AC_TRY_LINK([], [
! 	    int i = 0;
! 	    int* p = &i;
! 	    size_t s = 0;
! 	    // backtrace_atomic_load_pointer
! 	    void* vp = __atomic_load_n(&p, __ATOMIC_ACQUIRE);
! 	    // backtrace_atomic_load_int
! 	    int i2 = __atomic_load_n(&i, __ATOMIC_ACQUIRE);
! 	    // backtrace_atomic_store_pointer
! 	    __atomic_store_n(&p, &i, __ATOMIC_RELEASE);
! 	    // backtrace_atomic_store_size_t
! 	    __atomic_store_n(&s, s, __ATOMIC_RELEASE);
! 	    // backtrace_atomic_store_int
! 	    __atomic_store_n(&i, i, __ATOMIC_RELEASE);
! 			 ],
! 		     [glibcxx_cv_libbacktrace_atomics=yes],
! 		     [glibcxx_cv_libbacktrace_atomics=no])])
! 
!   else
!     # Do asm tests.
! 
!     CXXFLAGS='-O0 -S'
! 
!     cat > conftest.$ac_ext << EOF
! [#]line __oline__ "configure"
! [#]include <stddef.h>
! int main()
! {
!   int i = 0;
!   int* p = &i;
!   size_t s = 0;
!   // backtrace_atomic_load_pointer
!   void* vp = __atomic_load_n(&p, __ATOMIC_ACQUIRE);
!   // backtrace_atomic_load_int
!   int i2 = __atomic_load_n(&i, __ATOMIC_ACQUIRE);
!   // backtrace_atomic_store_pointer
!   __atomic_store_n(&p, &i, __ATOMIC_RELEASE);
!   // backtrace_atomic_store_size_t
!   __atomic_store_n(&s, s, __ATOMIC_RELEASE);
!   // backtrace_atomic_store_int
!   __atomic_store_n(&i, i, __ATOMIC_RELEASE);
! }
! EOF
! 
!     AC_MSG_CHECKING([for atomic builtins for libbacktrace])
!     if AC_TRY_EVAL(ac_compile); then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_libbacktrace_atomics=no
!       else
! 	glibcxx_cv_libbacktrace_atomics=yes
!       fi
!     fi
!     AC_MSG_RESULT($glibcxx_cv_libbacktrace_atomics)
!     rm -f conftest*
!   fi
! 
!   CXXFLAGS="$old_CXXFLAGS"
!   AC_LANG_RESTORE
! 
!   if test "$glibcxx_cv_libbacktrace_atomics" = yes; then
      BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_ATOMIC_FUNCTIONS=1"
    fi
  
diff -Nrcpad gcc-16-20250504/libstdc++-v3/config.h.in gcc-16-20250511/libstdc++-v3/config.h.in
*** gcc-16-20250504/libstdc++-v3/config.h.in	Sun May  4 22:32:33 2025
--- gcc-16-20250511/libstdc++-v3/config.h.in	Sun May 11 22:32:43 2025
***************
*** 643,650 ****
     <cwchar> in namespace std for C++98. */
  #undef _GLIBCXX98_USE_C99_WCHAR
  
! /* Define if the compiler supports C++11 atomics. */
! #undef _GLIBCXX_ATOMIC_BUILTINS
  
  /* Define if global objects can be aligned to
     std::hardware_destructive_interference_size. */
--- 643,650 ----
     <cwchar> in namespace std for C++98. */
  #undef _GLIBCXX98_USE_C99_WCHAR
  
! /* Define if the compiler supports native atomics for _Atomic_word. */
! #undef _GLIBCXX_ATOMIC_WORD_BUILTINS
  
  /* Define if global objects can be aligned to
     std::hardware_destructive_interference_size. */
diff -Nrcpad gcc-16-20250504/libstdc++-v3/configure gcc-16-20250511/libstdc++-v3/configure
*** gcc-16-20250504/libstdc++-v3/configure	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/configure	Sun May 11 22:32:52 2025
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 15989,15995 ****
  
    old_CXXFLAGS="$CXXFLAGS"
  
!   # Do link tests if possible, instead asm tests, limited to some platforms
    # see discussion in PR target/40134, PR libstdc++/40133 and the thread
    # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
    atomic_builtins_link_tests=no
--- 15989,15995 ----
  
    old_CXXFLAGS="$CXXFLAGS"
  
!   # Do link tests if possible, otherwise asm tests. Limited to some platforms
    # see discussion in PR target/40134, PR libstdc++/40133 and the thread
    # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
    atomic_builtins_link_tests=no
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 16002,16327 ****
      esac
    fi
  
!   if test x$atomic_builtins_link_tests = xyes; then
! 
!   # Do link tests.
! 
!   CXXFLAGS="$CXXFLAGS -fno-exceptions"
! 
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for bool" >&5
! $as_echo_n "checking for atomic builtins for bool... " >&6; }
! if ${glibcxx_cv_atomic_bool+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
! 
!     if test x$gcc_no_link = xyes; then
!   as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
! fi
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! typedef bool atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        // N.B. __atomic_fetch_add is not supported for bool.
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_cxx_try_link "$LINENO"; then :
!   glibcxx_cv_atomic_bool=yes
! else
!   glibcxx_cv_atomic_bool=no
! fi
! rm -f core conftest.err conftest.$ac_objext \
!     conftest$ac_exeext conftest.$ac_ext
! 
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_bool" >&5
! $as_echo "$glibcxx_cv_atomic_bool" >&6; }
! 
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for short" >&5
! $as_echo_n "checking for atomic builtins for short... " >&6; }
! if ${glibcxx_cv_atomic_short+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
! 
!     if test x$gcc_no_link = xyes; then
!   as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
! fi
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! typedef short atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_cxx_try_link "$LINENO"; then :
!   glibcxx_cv_atomic_short=yes
! else
!   glibcxx_cv_atomic_short=no
! fi
! rm -f core conftest.err conftest.$ac_objext \
!     conftest$ac_exeext conftest.$ac_ext
! 
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_short" >&5
! $as_echo "$glibcxx_cv_atomic_short" >&6; }
! 
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for int" >&5
! $as_echo_n "checking for atomic builtins for int... " >&6; }
! if ${glibcxx_cv_atomic_int+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
! 
!     if test x$gcc_no_link = xyes; then
!   as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
! fi
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! typedef int atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
  
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_cxx_try_link "$LINENO"; then :
!   glibcxx_cv_atomic_int=yes
! else
!   glibcxx_cv_atomic_int=no
! fi
! rm -f core conftest.err conftest.$ac_objext \
!     conftest$ac_exeext conftest.$ac_ext
  
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_int" >&5
! $as_echo "$glibcxx_cv_atomic_int" >&6; }
  
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for long long" >&5
! $as_echo_n "checking for atomic builtins for long long... " >&6; }
! if ${glibcxx_cv_atomic_long_long+:} false; then :
    $as_echo_n "(cached) " >&6
  else
! 
!     if test x$gcc_no_link = xyes; then
    as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
  fi
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
! 
  int
  main ()
  {
! typedef long long atomic_type;
!        atomic_type c1;
!        atomic_type c2;
!        atomic_type c3(0);
!        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 				   __ATOMIC_RELAXED);
!        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!        __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
    ;
    return 0;
  }
  _ACEOF
  if ac_fn_cxx_try_link "$LINENO"; then :
!   glibcxx_cv_atomic_long_long=yes
  else
!   glibcxx_cv_atomic_long_long=no
  fi
  rm -f core conftest.err conftest.$ac_objext \
      conftest$ac_exeext conftest.$ac_ext
- 
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_long_long" >&5
! $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
  
    else
  
!   # Do asm tests.
! 
!   # Compile unoptimized.
!   CXXFLAGS='-O0 -S'
! 
!   # Fake what AC_TRY_COMPILE does.
! 
!     cat > conftest.$ac_ext << EOF
! #line 16185 "configure"
! int main()
! {
!   typedef bool atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   // N.B. __atomic_fetch_add is not supported for bool.
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
! }
! EOF
! 
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for bool" >&5
! $as_echo_n "checking for atomic builtins for bool... " >&6; }
!     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
!   (eval $ac_compile) 2>&5
!   ac_status=$?
!   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
!   test $ac_status = 0; }; then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_bool=no
!       else
! 	glibcxx_cv_atomic_bool=yes
!       fi
!     fi
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_bool" >&5
! $as_echo "$glibcxx_cv_atomic_bool" >&6; }
!     rm -f conftest*
! 
!     cat > conftest.$ac_ext << EOF
! #line 16220 "configure"
! int main()
! {
!   typedef short atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
! }
! EOF
! 
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for short" >&5
! $as_echo_n "checking for atomic builtins for short... " >&6; }
!     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
!   (eval $ac_compile) 2>&5
!   ac_status=$?
!   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
!   test $ac_status = 0; }; then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_short=no
!       else
! 	glibcxx_cv_atomic_short=yes
!       fi
!     fi
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_short" >&5
! $as_echo "$glibcxx_cv_atomic_short" >&6; }
!     rm -f conftest*
! 
!     cat > conftest.$ac_ext << EOF
! #line 16255 "configure"
! int main()
! {
!   // NB: _Atomic_word not necessarily int.
!   typedef int atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
! }
! EOF
  
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for int" >&5
! $as_echo_n "checking for atomic builtins for int... " >&6; }
!     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
!   (eval $ac_compile) 2>&5
!   ac_status=$?
!   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
!   test $ac_status = 0; }; then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_int=no
!       else
! 	glibcxx_cv_atomic_int=yes
!       fi
!     fi
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_int" >&5
! $as_echo "$glibcxx_cv_atomic_int" >&6; }
!     rm -f conftest*
  
      cat > conftest.$ac_ext << EOF
! #line 16291 "configure"
  int main()
  {
!   typedef long long atomic_type;
!   atomic_type c1;
!   atomic_type c2;
!   atomic_type c3(0);
!   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
!   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
! 			      __ATOMIC_RELAXED);
!   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
!   __atomic_load_n(&c1, __ATOMIC_RELAXED);
! 
!   return 0;
  }
  EOF
  
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for long long" >&5
! $as_echo_n "checking for atomic builtins for long long... " >&6; }
      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; }; then
        if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_long_long=no
        else
! 	glibcxx_cv_atomic_long_long=yes
        fi
      fi
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_long_long" >&5
! $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
      rm -f conftest*
- 
    fi
  
    CXXFLAGS="$old_CXXFLAGS"
--- 16002,16078 ----
      esac
    fi
  
!   if test "$atomic_builtins_link_tests" = yes; then
  
!     # Do link tests.
  
!     CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for _Atomic_word" >&5
! $as_echo_n "checking for atomic builtins for _Atomic_word... " >&6; }
! if ${glibcxx_cv_atomic_word+:} false; then :
    $as_echo_n "(cached) " >&6
  else
!   if test x$gcc_no_link = xyes; then
    as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
  fi
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
! #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int
  main ()
  {
! _Atomic_word a = 0, b;
! 		      b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);
    ;
    return 0;
  }
  _ACEOF
  if ac_fn_cxx_try_link "$LINENO"; then :
!   glibcxx_cv_atomic_word=yes
  else
!   glibcxx_cv_atomic_word=no
  fi
  rm -f core conftest.err conftest.$ac_objext \
      conftest$ac_exeext conftest.$ac_ext
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_word" >&5
! $as_echo "$glibcxx_cv_atomic_word" >&6; }
  
    else
+     # Do asm tests.
  
!     # Compile unoptimized.
!     CXXFLAGS='-O0 -S'
  
!     # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16051 "configure"
! #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int main()
  {
!   _Atomic_word a = 0, b;
!   b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);
  }
  EOF
  
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for _Atomic_word" >&5
! $as_echo_n "checking for atomic builtins for _Atomic_word... " >&6; }
      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
    (eval $ac_compile) 2>&5
    ac_status=$?
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; }; then
        if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_atomic_word=no
        else
! 	glibcxx_cv_atomic_word=yes
        fi
      fi
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_atomic_word" >&5
! $as_echo "$glibcxx_cv_atomic_word" >&6; }
      rm -f conftest*
    fi
  
    CXXFLAGS="$old_CXXFLAGS"
*************** ac_link='$CC -o conftest$ac_exeext $CFLA
*** 16332,16345 ****
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  
!   # Set atomicity_dir to builtins if all but the long long test above passes,
    # or if the builtins were already chosen (e.g. by configure.host).
!   if { test "$glibcxx_cv_atomic_bool" = yes \
!      && test "$glibcxx_cv_atomic_short" = yes \
!      && test "$glibcxx_cv_atomic_int" = yes; } \
       || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
  
! $as_echo "#define _GLIBCXX_ATOMIC_BUILTINS 1" >>confdefs.h
  
      atomicity_dir=cpu/generic/atomicity_builtins
    fi
--- 16083,16094 ----
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  
!   # Set atomicity_dir to builtins if the test above passes,
    # or if the builtins were already chosen (e.g. by configure.host).
!   if test "$glibcxx_cv_atomic_word" = yes \
       || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
  
! $as_echo "#define _GLIBCXX_ATOMIC_WORD_BUILTINS 1" >>confdefs.h
  
      atomicity_dir=cpu/generic/atomicity_builtins
    fi
*************** $as_echo "mutex" >&6; }
*** 16445,16451 ****
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16448 "configure"
  int main()
  {
    _Decimal32 d1;
--- 16194,16200 ----
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16197 "configure"
  int main()
  {
    _Decimal32 d1;
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 16487,16493 ****
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16490 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
--- 16236,16242 ----
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16239 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
*************** fi
*** 53788,53795 ****
  
    BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
  
!   # libbacktrace only needs atomics for int, which we've already tested
!   if test "$glibcxx_cv_atomic_int" = "yes"; then
      BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_ATOMIC_FUNCTIONS=1"
    fi
  
--- 53537,53653 ----
  
    BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
  
!   ac_ext=cpp
! ac_cpp='$CXXCPP $CPPFLAGS'
! ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
! 
!   old_CXXFLAGS="$CXXFLAGS"
! 
!   # libbacktrace's own configure.ac only tests atomics for int,
!   # but the code actually uses atomics for size_t and pointers as well.
!   if test "$atomic_builtins_link_tests" = yes; then
! 
!     CXXFLAGS='-O0'
! 
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for libbacktrace" >&5
! $as_echo_n "checking for atomic builtins for libbacktrace... " >&6; }
! if ${glibcxx_cv_libbacktrace_atomics+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   if test x$gcc_no_link = xyes; then
!   as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
! fi
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! 
! 	    int i = 0;
! 	    int* p = &i;
! 	    size_t s = 0;
! 	    // backtrace_atomic_load_pointer
! 	    void* vp = __atomic_load_n(&p, __ATOMIC_ACQUIRE);
! 	    // backtrace_atomic_load_int
! 	    int i2 = __atomic_load_n(&i, __ATOMIC_ACQUIRE);
! 	    // backtrace_atomic_store_pointer
! 	    __atomic_store_n(&p, &i, __ATOMIC_RELEASE);
! 	    // backtrace_atomic_store_size_t
! 	    __atomic_store_n(&s, s, __ATOMIC_RELEASE);
! 	    // backtrace_atomic_store_int
! 	    __atomic_store_n(&i, i, __ATOMIC_RELEASE);
! 
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_cxx_try_link "$LINENO"; then :
!   glibcxx_cv_libbacktrace_atomics=yes
! else
!   glibcxx_cv_libbacktrace_atomics=no
! fi
! rm -f core conftest.err conftest.$ac_objext \
!     conftest$ac_exeext conftest.$ac_ext
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_libbacktrace_atomics" >&5
! $as_echo "$glibcxx_cv_libbacktrace_atomics" >&6; }
! 
!   else
!     # Do asm tests.
! 
!     CXXFLAGS='-O0 -S'
! 
!     cat > conftest.$ac_ext << EOF
! #line 53604 "configure"
! #include <stddef.h>
! int main()
! {
!   int i = 0;
!   int* p = &i;
!   size_t s = 0;
!   // backtrace_atomic_load_pointer
!   void* vp = __atomic_load_n(&p, __ATOMIC_ACQUIRE);
!   // backtrace_atomic_load_int
!   int i2 = __atomic_load_n(&i, __ATOMIC_ACQUIRE);
!   // backtrace_atomic_store_pointer
!   __atomic_store_n(&p, &i, __ATOMIC_RELEASE);
!   // backtrace_atomic_store_size_t
!   __atomic_store_n(&s, s, __ATOMIC_RELEASE);
!   // backtrace_atomic_store_int
!   __atomic_store_n(&i, i, __ATOMIC_RELEASE);
! }
! EOF
! 
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atomic builtins for libbacktrace" >&5
! $as_echo_n "checking for atomic builtins for libbacktrace... " >&6; }
!     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
!   (eval $ac_compile) 2>&5
!   ac_status=$?
!   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
!   test $ac_status = 0; }; then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
! 	glibcxx_cv_libbacktrace_atomics=no
!       else
! 	glibcxx_cv_libbacktrace_atomics=yes
!       fi
!     fi
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_libbacktrace_atomics" >&5
! $as_echo "$glibcxx_cv_libbacktrace_atomics" >&6; }
!     rm -f conftest*
!   fi
! 
!   CXXFLAGS="$old_CXXFLAGS"
!   ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! 
! 
!   if test "$glibcxx_cv_libbacktrace_atomics" = yes; then
      BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_ATOMIC_FUNCTIONS=1"
    fi
  
diff -Nrcpad gcc-16-20250504/libstdc++-v3/configure.host gcc-16-20250511/libstdc++-v3/configure.host
*** gcc-16-20250504/libstdc++-v3/configure.host	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/configure.host	Sun May 11 22:32:44 2025
*************** esac
*** 180,186 ****
  
  
  # Set specific CPU overrides for atomicity_dir.
! # This can be over-ridden in GLIBCXX_ENABLE_ATOMIC_BUILTINS.
  # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
  if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/atomicity.h ; then
    atomicity_dir=$cpu_include_dir
--- 180,186 ----
  
  
  # Set specific CPU overrides for atomicity_dir.
! # This can be overridden in GLIBCXX_ENABLE_ATOMIC_BUILTINS.
  # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
  if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/atomicity.h ; then
    atomicity_dir=$cpu_include_dir
diff -Nrcpad gcc-16-20250504/libstdc++-v3/doc/doxygen/user.cfg.in gcc-16-20250511/libstdc++-v3/doc/doxygen/user.cfg.in
*** gcc-16-20250504/libstdc++-v3/doc/doxygen/user.cfg.in	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/doc/doxygen/user.cfg.in	Sun May 11 22:32:44 2025
*************** INPUT                  = @srcdir@/doc/do
*** 880,885 ****
--- 880,886 ----
                           include/list \
                           include/locale \
                           include/map \
+                          include/mdspan \
                           include/memory \
                           include/memory_resource \
                           include/mutex \
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/Makefile.am gcc-16-20250511/libstdc++-v3/include/Makefile.am
*** gcc-16-20250504/libstdc++-v3/include/Makefile.am	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/Makefile.am	Sun May 11 22:32:44 2025
*************** std_freestanding = \
*** 38,43 ****
--- 38,44 ----
  	${std_srcdir}/generator \
  	${std_srcdir}/iterator \
  	${std_srcdir}/limits \
+ 	${std_srcdir}/mdspan \
  	${std_srcdir}/memory \
  	${std_srcdir}/numbers \
  	${std_srcdir}/numeric \
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/Makefile.in gcc-16-20250511/libstdc++-v3/include/Makefile.in
*** gcc-16-20250504/libstdc++-v3/include/Makefile.in	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/Makefile.in	Sun May 11 22:32:44 2025
*************** std_freestanding = \
*** 396,401 ****
--- 396,402 ----
  	${std_srcdir}/generator \
  	${std_srcdir}/iterator \
  	${std_srcdir}/limits \
+ 	${std_srcdir}/mdspan \
  	${std_srcdir}/memory \
  	${std_srcdir}/numbers \
  	${std_srcdir}/numeric \
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/bits/chrono_io.h gcc-16-20250511/libstdc++-v3/include/bits/chrono_io.h
*** gcc-16-20250504/libstdc++-v3/include/bits/chrono_io.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/bits/chrono_io.h	Sun May 11 22:32:44 2025
*************** namespace __format
*** 503,511 ****
  	_M_format(const _Tp& __t, _FormatContext& __fc,
  		  bool __is_neg = false) const
  	{
! 	  auto __first = _M_spec._M_chrono_specs.begin();
! 	  const auto __last = _M_spec._M_chrono_specs.end();
! 	  if (__first == __last)
  	    return _M_format_to_ostream(__t, __fc, __is_neg);
  
  #if defined _GLIBCXX_USE_NL_LANGINFO_L && __CHAR_BIT__ == 8
--- 503,509 ----
  	_M_format(const _Tp& __t, _FormatContext& __fc,
  		  bool __is_neg = false) const
  	{
! 	  if (_M_spec._M_chrono_specs.empty())
  	    return _M_format_to_ostream(__t, __fc, __is_neg);
  
  #if defined _GLIBCXX_USE_NL_LANGINFO_L && __CHAR_BIT__ == 8
*************** namespace __format
*** 525,553 ****
  		    __fc._M_loc =  __with_encoding_conversion(__loc);
  		}
  #endif
- 
- 	  _Sink_iter<_CharT> __out;
- 	  __format::_Str_sink<_CharT> __sink;
- 	  bool __write_direct = false;
- 	  if constexpr (is_same_v<typename _FormatContext::iterator,
- 				  _Sink_iter<_CharT>>)
- 	    {
- 	      if (_M_spec._M_width_kind == __format::_WP_none)
- 		{
- 		  __out = __fc.out();
- 		  __write_direct = true;
- 		}
- 	      else
- 		__out = __sink.out();
- 	    }
- 	  else
- 	    __out = __sink.out();
- 
  	  // formatter<duration> passes the correct value of __is_neg
  	  // for durations but for hh_mm_ss we decide it here.
  	  if constexpr (__is_specialization_of<_Tp, chrono::hh_mm_ss>)
  	    __is_neg = __t.is_negative();
  
  	  auto __print_sign = [&__is_neg, &__out] {
  	    if constexpr (chrono::__is_duration_v<_Tp>
  			    || __is_specialization_of<_Tp, chrono::hh_mm_ss>)
--- 523,551 ----
  		    __fc._M_loc =  __with_encoding_conversion(__loc);
  		}
  #endif
  	  // formatter<duration> passes the correct value of __is_neg
  	  // for durations but for hh_mm_ss we decide it here.
  	  if constexpr (__is_specialization_of<_Tp, chrono::hh_mm_ss>)
  	    __is_neg = __t.is_negative();
  
+ 	  const size_t __padwidth = _M_spec._M_get_width(__fc);
+ 	  if (__padwidth == 0)
+ 	    return _M_format_to(__t, __fc.out(), __fc, __is_neg);
+ 
+ 	  using _Out = typename _FormatContext::iterator;
+ 	  _Padding_sink<_Out, _CharT> __sink(__fc.out(), __padwidth);
+ 	  _M_format_to(__t, __sink.out(), __fc, __is_neg);
+ 	  return __sink._M_finish(_M_spec._M_align, _M_spec._M_fill);
+ 	}
+ 
+       template<typename _Tp, typename _Out, typename _FormatContext>
+ 	_Out
+ 	_M_format_to(const _Tp& __t, _Out __out, _FormatContext& __fc,
+ 		     bool __is_neg) const
+ 	{
+ 	  auto __first = _M_spec._M_chrono_specs.begin();
+ 	  const auto __last = _M_spec._M_chrono_specs.end();
+ 
  	  auto __print_sign = [&__is_neg, &__out] {
  	    if constexpr (chrono::__is_duration_v<_Tp>
  			    || __is_specialization_of<_Tp, chrono::hh_mm_ss>)
*************** namespace __format
*** 699,713 ****
  		}
  	    }
  	  while (__first != __last);
! 
! 	  if constexpr (is_same_v<typename _FormatContext::iterator,
! 				  _Sink_iter<_CharT>>)
! 	    if (__write_direct)
! 	      return __out;
! 
! 	  auto __str = std::move(__sink).get();
! 	  return __format::__write_padded_as_spec(__str, __str.size(),
! 						  __fc, _M_spec);
  	}
  
        _ChronoSpec<_CharT> _M_spec;
--- 697,703 ----
  		}
  	    }
  	  while (__first != __last);
! 	  return std::move(__out);
  	}
  
        _ChronoSpec<_CharT> _M_spec;
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/bits/ptr_traits.h gcc-16-20250511/libstdc++-v3/include/bits/ptr_traits.h
*** gcc-16-20250504/libstdc++-v3/include/bits/ptr_traits.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/bits/ptr_traits.h	Sun May 11 22:32:44 2025
***************
*** 36,42 ****
  
  #if __cplusplus > 201703L
  #include <concepts>
! namespace __gnu_debug { struct _Safe_iterator_base; }
  #endif
  
  namespace std _GLIBCXX_VISIBILITY(default)
--- 36,42 ----
  
  #if __cplusplus > 201703L
  #include <concepts>
! namespace __gnu_debug { class _Safe_iterator_base; }
  #endif
  
  namespace std _GLIBCXX_VISIBILITY(default)
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/bits/stl_iterator.h gcc-16-20250511/libstdc++-v3/include/bits/stl_iterator.h
*** gcc-16-20250504/libstdc++-v3/include/bits/stl_iterator.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/bits/stl_iterator.h	Sun May 11 22:32:44 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2511,2527 ****
  	[[nodiscard]]
  	friend constexpr iter_difference_t<_It2>
  	operator-(const counted_iterator& __x,
! 		  const counted_iterator<_It2>& __y)
  	{ return __y._M_length - __x._M_length; }
  
        [[nodiscard]]
        friend constexpr iter_difference_t<_It>
!       operator-(const counted_iterator& __x, default_sentinel_t)
        { return -__x._M_length; }
  
        [[nodiscard]]
        friend constexpr iter_difference_t<_It>
!       operator-(default_sentinel_t, const counted_iterator& __y)
        { return __y._M_length; }
  
        constexpr counted_iterator&
--- 2511,2527 ----
  	[[nodiscard]]
  	friend constexpr iter_difference_t<_It2>
  	operator-(const counted_iterator& __x,
! 		  const counted_iterator<_It2>& __y) noexcept
  	{ return __y._M_length - __x._M_length; }
  
        [[nodiscard]]
        friend constexpr iter_difference_t<_It>
!       operator-(const counted_iterator& __x, default_sentinel_t) noexcept
        { return -__x._M_length; }
  
        [[nodiscard]]
        friend constexpr iter_difference_t<_It>
!       operator-(default_sentinel_t, const counted_iterator& __y) noexcept
        { return __y._M_length; }
  
        constexpr counted_iterator&
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2548,2566 ****
  	[[nodiscard]]
  	friend constexpr bool
  	operator==(const counted_iterator& __x,
! 		   const counted_iterator<_It2>& __y)
  	{ return __x._M_length == __y._M_length; }
  
        [[nodiscard]]
        friend constexpr bool
!       operator==(const counted_iterator& __x, default_sentinel_t)
        { return __x._M_length == 0; }
  
        template<common_with<_It> _It2>
  	[[nodiscard]]
  	friend constexpr strong_ordering
  	operator<=>(const counted_iterator& __x,
! 		    const counted_iterator<_It2>& __y)
  	{ return __y._M_length <=> __x._M_length; }
  
        [[nodiscard]]
--- 2548,2566 ----
  	[[nodiscard]]
  	friend constexpr bool
  	operator==(const counted_iterator& __x,
! 		   const counted_iterator<_It2>& __y) noexcept
  	{ return __x._M_length == __y._M_length; }
  
        [[nodiscard]]
        friend constexpr bool
!       operator==(const counted_iterator& __x, default_sentinel_t) noexcept
        { return __x._M_length == 0; }
  
        template<common_with<_It> _It2>
  	[[nodiscard]]
  	friend constexpr strong_ordering
  	operator<=>(const counted_iterator& __x,
! 		    const counted_iterator<_It2>& __y) noexcept
  	{ return __y._M_length <=> __x._M_length; }
  
        [[nodiscard]]
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/bits/version.def gcc-16-20250511/libstdc++-v3/include/bits/version.def
*** gcc-16-20250504/libstdc++-v3/include/bits/version.def	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/bits/version.def	Sun May 11 22:32:44 2025
*************** ftms = {
*** 1000,1005 ****
--- 1000,1014 ----
  };
  
  ftms = {
+   name = mdspan;
+   no_stdname = true; // FIXME: remove
+   values = {
+     v = 1; // FIXME: 202207
+     cxxmin = 23;
+   };
+ };
+ 
+ ftms = {
    name = ssize;
    values = {
      v = 201902;
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/bits/version.h gcc-16-20250511/libstdc++-v3/include/bits/version.h
*** gcc-16-20250504/libstdc++-v3/include/bits/version.h	Sun May  4 22:32:42 2025
--- gcc-16-20250511/libstdc++-v3/include/bits/version.h	Sun May 11 22:32:44 2025
***************
*** 1114,1119 ****
--- 1114,1128 ----
  #endif /* !defined(__cpp_lib_span) && defined(__glibcxx_want_span) */
  #undef __glibcxx_want_span
  
+ #if !defined(__cpp_lib_mdspan)
+ # if (__cplusplus >= 202100L)
+ #  define __glibcxx_mdspan 1L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_mdspan) && defined(__glibcxx_want_mdspan) */
+ #undef __glibcxx_want_mdspan
+ 
  #if !defined(__cpp_lib_ssize)
  # if (__cplusplus >= 202002L)
  #  define __glibcxx_ssize 201902L
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/debug/debug.h gcc-16-20250511/libstdc++-v3/include/debug/debug.h
*** gcc-16-20250504/libstdc++-v3/include/debug/debug.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/debug/debug.h	Sun May 11 22:32:44 2025
*************** namespace __gnu_debug
*** 58,64 ****
    using namespace std::__debug;
  
    template<typename _Ite, typename _Seq, typename _Cat>
!     struct _Safe_iterator;
  }
  
  #if ! defined _GLIBCXX_DEBUG || ! _GLIBCXX_HOSTED
--- 58,64 ----
    using namespace std::__debug;
  
    template<typename _Ite, typename _Seq, typename _Cat>
!     class _Safe_iterator;
  }
  
  #if ! defined _GLIBCXX_DEBUG || ! _GLIBCXX_HOSTED
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/ext/atomicity.h gcc-16-20250511/libstdc++-v3/include/ext/atomicity.h
*** gcc-16-20250504/libstdc++-v3/include/ext/atomicity.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/ext/atomicity.h	Sun May 11 22:32:44 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 61,67 ****
    // To abstract locking primitives across all thread policies, use:
    // __exchange_and_add_dispatch
    // __atomic_add_dispatch
! #ifdef _GLIBCXX_ATOMIC_BUILTINS
    inline _Atomic_word
    __attribute__((__always_inline__))
    __exchange_and_add(volatile _Atomic_word* __mem, int __val)
--- 61,67 ----
    // To abstract locking primitives across all thread policies, use:
    // __exchange_and_add_dispatch
    // __atomic_add_dispatch
! #ifdef _GLIBCXX_ATOMIC_WORD_BUILTINS
    inline _Atomic_word
    __attribute__((__always_inline__))
    __exchange_and_add(volatile _Atomic_word* __mem, int __val)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 71,77 ****
    __attribute__((__always_inline__))
    __atomic_add(volatile _Atomic_word* __mem, int __val)
    { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
! #else
    _Atomic_word
    __exchange_and_add(volatile _Atomic_word*, int) _GLIBCXX_NOTHROW;
  
--- 71,77 ----
    __attribute__((__always_inline__))
    __atomic_add(volatile _Atomic_word* __mem, int __val)
    { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
! #else // Defined in config/cpu/.../atomicity.h
    _Atomic_word
    __exchange_and_add(volatile _Atomic_word*, int) _GLIBCXX_NOTHROW;
  
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/precompiled/stdc++.h gcc-16-20250511/libstdc++-v3/include/precompiled/stdc++.h
*** gcc-16-20250504/libstdc++-v3/include/precompiled/stdc++.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/precompiled/stdc++.h	Sun May 11 22:32:44 2025
***************
*** 228,233 ****
--- 228,234 ----
  #include <flat_map>
  #include <flat_set>
  #include <generator>
+ #include <mdspan>
  #include <print>
  #include <spanstream>
  #include <stacktrace>
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/pstl/glue_numeric_impl.h gcc-16-20250511/libstdc++-v3/include/pstl/glue_numeric_impl.h
*** gcc-16-20250504/libstdc++-v3/include/pstl/glue_numeric_impl.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/pstl/glue_numeric_impl.h	Sun May 11 22:32:44 2025
*************** __pstl::__internal::__enable_if_executio
*** 25,31 ****
  reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
         _BinaryOperation __binary_op)
  {
!     return transform_reduce(std::forward<_ExecutionPolicy>(__exec), __first, __last, __init, __binary_op,
                              __pstl::__internal::__no_op());
  }
  
--- 25,31 ----
  reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
         _BinaryOperation __binary_op)
  {
!     return transform_reduce(std::forward<_ExecutionPolicy>(__exec), __first, __last, std::move(__init), __binary_op,
                              __pstl::__internal::__no_op());
  }
  
*************** template <class _ExecutionPolicy, class
*** 33,39 ****
  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
  reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init)
  {
!     return transform_reduce(std::forward<_ExecutionPolicy>(__exec), __first, __last, __init, std::plus<_Tp>(),
                              __pstl::__internal::__no_op());
  }
  
--- 33,39 ----
  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
  reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init)
  {
!     return transform_reduce(std::forward<_ExecutionPolicy>(__exec), __first, __last, std::move(__init), std::plus<_Tp>(),
                              __pstl::__internal::__no_op());
  }
  
*************** transform_reduce(_ExecutionPolicy&& __ex
*** 58,64 ****
  
      typedef typename iterator_traits<_ForwardIterator1>::value_type _InputType;
      return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
!                                                           __first1, __last1, __first2, __init, std::plus<_InputType>(),
                                                            std::multiplies<_InputType>());
  }
  
--- 58,64 ----
  
      typedef typename iterator_traits<_ForwardIterator1>::value_type _InputType;
      return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
!                                                           __first1, __last1, __first2, std::move(__init), std::plus<_InputType>(),
                                                            std::multiplies<_InputType>());
  }
  
*************** transform_reduce(_ExecutionPolicy&& __ex
*** 70,76 ****
  {
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first1, __first2);
      return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
!                                                           __first1, __last1, __first2, __init, __binary_op1,
                                                            __binary_op2);
  }
  
--- 70,76 ----
  {
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first1, __first2);
      return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
!                                                           __first1, __last1, __first2, std::move(__init), __binary_op1,
                                                            __binary_op2);
  }
  
*************** transform_reduce(_ExecutionPolicy&& __ex
*** 81,87 ****
  {
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first);
      return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
!                                                           __first, __last, __init, __binary_op, __unary_op);
  }
  
  // [exclusive.scan]
--- 81,87 ----
  {
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first);
      return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
!                                                           __first, __last, std::move(__init), __binary_op, __unary_op);
  }
  
  // [exclusive.scan]
*************** inclusive_scan(_ExecutionPolicy&& __exec
*** 139,145 ****
                 _ForwardIterator2 __result, _BinaryOperation __binary_op, _Tp __init)
  {
      return transform_inclusive_scan(std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __binary_op,
!                                     __pstl::__internal::__no_op(), __init);
  }
  
  // [transform.exclusive.scan]
--- 139,145 ----
                 _ForwardIterator2 __result, _BinaryOperation __binary_op, _Tp __init)
  {
      return transform_inclusive_scan(std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __binary_op,
!                                     __pstl::__internal::__no_op(), std::move(__init));
  }
  
  // [transform.exclusive.scan]
*************** transform_exclusive_scan(_ExecutionPolic
*** 154,160 ****
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
  
      return __pstl::__internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first,
!                                                         __last, __result, __unary_op, __init, __binary_op,
                                                          /*inclusive=*/std::false_type());
  }
  
--- 154,160 ----
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
  
      return __pstl::__internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first,
!                                                         __last, __result, __unary_op, std::move(__init), __binary_op,
                                                          /*inclusive=*/std::false_type());
  }
  
*************** transform_inclusive_scan(_ExecutionPolic
*** 170,176 ****
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
  
      return __pstl::__internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first,
!                                                         __last, __result, __unary_op, __init, __binary_op,
                                                          /*inclusive=*/std::true_type());
  }
  
--- 170,176 ----
      auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
  
      return __pstl::__internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first,
!                                                         __last, __result, __unary_op, std::move(__init), __binary_op,
                                                          /*inclusive=*/std::true_type());
  }
  
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/pstl/numeric_impl.h gcc-16-20250511/libstdc++-v3/include/pstl/numeric_impl.h
*** gcc-16-20250504/libstdc++-v3/include/pstl/numeric_impl.h	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/pstl/numeric_impl.h	Sun May 11 22:32:44 2025
*************** __brick_transform_reduce(_ForwardIterato
*** 35,41 ****
                           _BinaryOperation1 __binary_op1, _BinaryOperation2 __binary_op2,
                           /*is_vector=*/std::false_type) noexcept
  {
!     return std::inner_product(__first1, __last1, __first2, __init, __binary_op1, __binary_op2);
  }
  
  template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _Tp, class _BinaryOperation1,
--- 35,41 ----
                           _BinaryOperation1 __binary_op1, _BinaryOperation2 __binary_op2,
                           /*is_vector=*/std::false_type) noexcept
  {
!     return std::inner_product(__first1, __last1, __first2, std::move(__init), __binary_op1, __binary_op2);
  }
  
  template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _Tp, class _BinaryOperation1,
*************** __brick_transform_reduce(_RandomAccessIt
*** 48,54 ****
  {
      typedef typename std::iterator_traits<_RandomAccessIterator1>::difference_type _DifferenceType;
      return __unseq_backend::__simd_transform_reduce(
!         __last1 - __first1, __init, __binary_op1,
          [=, &__binary_op2](_DifferenceType __i) { return __binary_op2(__first1[__i], __first2[__i]); });
  }
  
--- 48,54 ----
  {
      typedef typename std::iterator_traits<_RandomAccessIterator1>::difference_type _DifferenceType;
      return __unseq_backend::__simd_transform_reduce(
!         __last1 - __first1, std::move(__init), __binary_op1,
          [=, &__binary_op2](_DifferenceType __i) { return __binary_op2(__first1[__i], __first2[__i]); });
  }
  
*************** __pattern_transform_reduce(_Tag, _Execut
*** 59,65 ****
                             _ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1,
                             _BinaryOperation2 __binary_op2) noexcept
  {
!     return __brick_transform_reduce(__first1, __last1, __first2, __init, __binary_op1, __binary_op2,
                                      typename _Tag::__is_vector{});
  }
  
--- 59,65 ----
                             _ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1,
                             _BinaryOperation2 __binary_op2) noexcept
  {
!     return __brick_transform_reduce(__first1, __last1, __first2, std::move(__init), __binary_op1, __binary_op2,
                                      typename _Tag::__is_vector{});
  }
  
*************** __pattern_transform_reduce(__parallel_ta
*** 79,90 ****
                  __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __first1, __last1,
                  [__first1, __first2, __binary_op2](_RandomAccessIterator1 __i) mutable
                  { return __binary_op2(*__i, *(__first2 + (__i - __first1))); },
!                 __init,
                  __binary_op1, // Combine
                  [__first1, __first2, __binary_op1, __binary_op2](_RandomAccessIterator1 __i, _RandomAccessIterator1 __j,
                                                                   _Tp __init) -> _Tp
                  {
!                     return __internal::__brick_transform_reduce(__i, __j, __first2 + (__i - __first1), __init,
                                                                  __binary_op1, __binary_op2, _IsVector{});
                  });
          });
--- 79,90 ----
                  __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __first1, __last1,
                  [__first1, __first2, __binary_op2](_RandomAccessIterator1 __i) mutable
                  { return __binary_op2(*__i, *(__first2 + (__i - __first1))); },
!                 std::move(__init),
                  __binary_op1, // Combine
                  [__first1, __first2, __binary_op1, __binary_op2](_RandomAccessIterator1 __i, _RandomAccessIterator1 __j,
                                                                   _Tp __init) -> _Tp
                  {
!                     return __internal::__brick_transform_reduce(__i, __j, __first2 + (__i - __first1), std::move(__init),
                                                                  __binary_op1, __binary_op2, _IsVector{});
                  });
          });
*************** _Tp
*** 99,105 ****
  __brick_transform_reduce(_ForwardIterator __first, _ForwardIterator __last, _Tp __init, _BinaryOperation __binary_op,
                           _UnaryOperation __unary_op, /*is_vector=*/std::false_type) noexcept
  {
!     return std::transform_reduce(__first, __last, __init, __binary_op, __unary_op);
  }
  
  template <class _RandomAccessIterator, class _Tp, class _UnaryOperation, class _BinaryOperation>
--- 99,105 ----
  __brick_transform_reduce(_ForwardIterator __first, _ForwardIterator __last, _Tp __init, _BinaryOperation __binary_op,
                           _UnaryOperation __unary_op, /*is_vector=*/std::false_type) noexcept
  {
!     return std::transform_reduce(__first, __last, std::move(__init), __binary_op, __unary_op);
  }
  
  template <class _RandomAccessIterator, class _Tp, class _UnaryOperation, class _BinaryOperation>
*************** __brick_transform_reduce(_RandomAccessIt
*** 110,116 ****
  {
      typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type _DifferenceType;
      return __unseq_backend::__simd_transform_reduce(
!         __last - __first, __init, __binary_op,
          [=, &__unary_op](_DifferenceType __i) { return __unary_op(__first[__i]); });
  }
  
--- 110,116 ----
  {
      typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type _DifferenceType;
      return __unseq_backend::__simd_transform_reduce(
!         __last - __first, std::move(__init), __binary_op,
          [=, &__unary_op](_DifferenceType __i) { return __unary_op(__first[__i]); });
  }
  
*************** _Tp
*** 120,126 ****
  __pattern_transform_reduce(_Tag, _ExecutionPolicy&&, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
                             _BinaryOperation __binary_op, _UnaryOperation __unary_op) noexcept
  {
!     return __internal::__brick_transform_reduce(__first, __last, __init, __binary_op, __unary_op,
                                                  typename _Tag::__is_vector{});
  }
  
--- 120,126 ----
  __pattern_transform_reduce(_Tag, _ExecutionPolicy&&, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
                             _BinaryOperation __binary_op, _UnaryOperation __unary_op) noexcept
  {
!     return __internal::__brick_transform_reduce(__first, __last, std::move(__init), __binary_op, __unary_op,
                                                  typename _Tag::__is_vector{});
  }
  
*************** __pattern_transform_reduce(__parallel_ta
*** 138,146 ****
          {
              return __par_backend::__parallel_transform_reduce(
                  __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __first, __last,
!                 [__unary_op](_RandomAccessIterator __i) mutable { return __unary_op(*__i); }, __init, __binary_op,
                  [__unary_op, __binary_op](_RandomAccessIterator __i, _RandomAccessIterator __j, _Tp __init) {
!                     return __internal::__brick_transform_reduce(__i, __j, __init, __binary_op, __unary_op, _IsVector{});
                  });
          });
  }
--- 138,146 ----
          {
              return __par_backend::__parallel_transform_reduce(
                  __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __first, __last,
!                 [__unary_op](_RandomAccessIterator __i) mutable { return __unary_op(*__i); }, std::move(__init), __binary_op,
                  [__unary_op, __binary_op](_RandomAccessIterator __i, _RandomAccessIterator __j, _Tp __init) {
!                     return __internal::__brick_transform_reduce(__i, __j, std::move(__init), __binary_op, __unary_op, _IsVector{});
                  });
          });
  }
*************** __brick_transform_scan(_RandomAccessIter
*** 181,187 ****
          __init = __binary_op(__init, __unary_op(*__first));
          *__result = __init;
      }
!     return std::make_pair(__result, __init);
  }
  
  // type is arithmetic and binary operation is a user defined operation.
--- 181,187 ----
          __init = __binary_op(__init, __unary_op(*__first));
          *__result = __init;
      }
!     return std::make_pair(__result, std::move(__init));
  }
  
  // type is arithmetic and binary operation is a user defined operation.
*************** __brick_transform_scan(_RandomAccessIter
*** 199,209 ****
                         /*is_vector=*/std::true_type) noexcept
  {
  #if defined(_PSTL_UDS_PRESENT)
!     return __unseq_backend::__simd_scan(__first, __last - __first, __result, __unary_op, __init, __binary_op,
                                          _Inclusive());
  #else
      // We need to call serial brick here to call function for inclusive and exclusive scan that depends on _Inclusive() value
!     return __internal::__brick_transform_scan(__first, __last, __result, __unary_op, __init, __binary_op, _Inclusive(),
                                                /*is_vector=*/std::false_type());
  #endif
  }
--- 199,209 ----
                         /*is_vector=*/std::true_type) noexcept
  {
  #if defined(_PSTL_UDS_PRESENT)
!     return __unseq_backend::__simd_scan(__first, __last - __first, __result, __unary_op, std::move(__init), __binary_op,
                                          _Inclusive());
  #else
      // We need to call serial brick here to call function for inclusive and exclusive scan that depends on _Inclusive() value
!     return __internal::__brick_transform_scan(__first, __last, __result, __unary_op, std::move(__init), __binary_op, _Inclusive(),
                                                /*is_vector=*/std::false_type());
  #endif
  }
*************** __brick_transform_scan(_RandomAccessIter
*** 215,221 ****
                         _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op, _Inclusive,
                         /*is_vector=*/std::true_type) noexcept
  {
!     return __internal::__brick_transform_scan(__first, __last, __result, __unary_op, __init, __binary_op, _Inclusive(),
                                                /*is_vector=*/std::false_type());
  }
  
--- 215,221 ----
                         _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op, _Inclusive,
                         /*is_vector=*/std::true_type) noexcept
  {
!     return __internal::__brick_transform_scan(__first, __last, __result, __unary_op, std::move(__init), __binary_op, _Inclusive(),
                                                /*is_vector=*/std::false_type());
  }
  
*************** __pattern_transform_scan(__parallel_tag<
*** 247,265 ****
          {
              __par_backend::__parallel_transform_scan(
                  __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __last - __first,
!                 [__first, __unary_op](_DifferenceType __i) mutable { return __unary_op(__first[__i]); }, __init,
                  __binary_op,
                  [__first, __unary_op, __binary_op](_DifferenceType __i, _DifferenceType __j, _Tp __init)
                  {
                      // Execute serial __brick_transform_reduce, due to the explicit SIMD vectorization (reduction) requires a commutative operation for the guarantee of correct scan.
!                     return __internal::__brick_transform_reduce(__first + __i, __first + __j, __init, __binary_op,
                                                                  __unary_op,
                                                                  /*__is_vector*/ std::false_type());
                  },
                  [__first, __unary_op, __binary_op, __result](_DifferenceType __i, _DifferenceType __j, _Tp __init)
                  {
                      return __internal::__brick_transform_scan(__first + __i, __first + __j, __result + __i, __unary_op,
!                                                               __init, __binary_op, _Inclusive(), _IsVector{})
                          .second;
                  });
              return __result + (__last - __first);
--- 247,265 ----
          {
              __par_backend::__parallel_transform_scan(
                  __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __last - __first,
!                 [__first, __unary_op](_DifferenceType __i) mutable { return __unary_op(__first[__i]); }, std::move(__init),
                  __binary_op,
                  [__first, __unary_op, __binary_op](_DifferenceType __i, _DifferenceType __j, _Tp __init)
                  {
                      // Execute serial __brick_transform_reduce, due to the explicit SIMD vectorization (reduction) requires a commutative operation for the guarantee of correct scan.
!                     return __internal::__brick_transform_reduce(__first + __i, __first + __j, std::move(__init), __binary_op,
                                                                  __unary_op,
                                                                  /*__is_vector*/ std::false_type());
                  },
                  [__first, __unary_op, __binary_op, __result](_DifferenceType __i, _DifferenceType __j, _Tp __init)
                  {
                      return __internal::__brick_transform_scan(__first + __i, __first + __j, __result + __i, __unary_op,
!                                                               std::move(__init), __binary_op, _Inclusive(), _IsVector{})
                          .second;
                  });
              return __result + (__last - __first);
*************** __pattern_transform_scan(__parallel_tag<
*** 286,292 ****
          [&]()
          {
              __par_backend::__parallel_strict_scan(
!                 __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __n, __init,
                  [__first, __unary_op, __binary_op, __result](_DifferenceType __i, _DifferenceType __len)
                  {
                      return __internal::__brick_transform_scan(__first + __i, __first + (__i + __len), __result + __i,
--- 286,292 ----
          [&]()
          {
              __par_backend::__parallel_strict_scan(
!                 __backend_tag{}, std::forward<_ExecutionPolicy>(__exec), __n, std::move(__init),
                  [__first, __unary_op, __binary_op, __result](_DifferenceType __i, _DifferenceType __len)
                  {
                      return __internal::__brick_transform_scan(__first + __i, __first + (__i + __len), __result + __i,
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/std/format gcc-16-20250511/libstdc++-v3/include/std/format
*** gcc-16-20250504/libstdc++-v3/include/std/format	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/std/format	Sun May 11 22:32:44 2025
*************** namespace __format
*** 3144,3149 ****
--- 3144,3153 ----
        auto
        _M_reserve(size_t __n) const
        { return _M_sink->_M_reserve(__n); }
+ 
+       bool
+       _M_discarding() const
+       { return _M_sink->_M_discarding(); }
      };
  
    // Abstract base class for type-erased character sinks.
*************** namespace __format
*** 3263,3268 ****
--- 3267,3277 ----
        _M_bump(size_t __n)
        { _M_next += __n; }
  
+       // Returns true if the _Sink is discarding incoming characters.
+       virtual bool
+       _M_discarding() const
+       { return false; }
+ 
      public:
        _Sink(const _Sink&) = delete;
        _Sink& operator=(const _Sink&) = delete;
*************** namespace __format
*** 3488,3493 ****
--- 3497,3510 ----
  	_M_count += __s.size();
        }
  
+       bool
+       _M_discarding() const override
+       {
+ 	// format_to_n return total number of characters, that would be written,
+ 	// see C++20 [format.functions] p20
+ 	return false;
+       }
+ 
      public:
        [[__gnu__::__always_inline__]]
        explicit
*************** namespace __format
*** 3550,3555 ****
--- 3567,3580 ----
  	  }
        }
  
+       bool
+       _M_discarding() const override
+       {
+ 	// format_to_n return total number of characters, that would be written,
+ 	// see C++20 [format.functions] p20
+ 	return false;
+       }
+ 
        typename _Sink<_CharT>::_Reservation
        _M_reserve(size_t __n) final
        {
*************** namespace __format
*** 3636,3652 ****
    template<typename _Out, typename _CharT>
      class _Padding_sink : public _Str_sink<_CharT>
      {
!       const size_t _M_padwidth;
!       const size_t _M_maxwidth;
        _Out _M_out;
        size_t _M_printwidth;
  
        [[__gnu__::__always_inline__]]
        bool
        _M_ignoring() const
!       {
! 	return _M_printwidth >= _M_maxwidth;
!       }
  
        [[__gnu__::__always_inline__]]
        bool
--- 3661,3675 ----
    template<typename _Out, typename _CharT>
      class _Padding_sink : public _Str_sink<_CharT>
      {
!       size_t _M_padwidth;
!       size_t _M_maxwidth;
        _Out _M_out;
        size_t _M_printwidth;
  
        [[__gnu__::__always_inline__]]
        bool
        _M_ignoring() const
!       { return _M_printwidth >= _M_maxwidth; }
  
        [[__gnu__::__always_inline__]]
        bool
*************** namespace __format
*** 3660,3670 ****
--- 3683,3702 ----
        }
  
        void
+       _M_sync_discarding()
+       {
+ 	if constexpr (is_same_v<_Out, _Sink_iter<_CharT>>)
+ 	  if (_M_out._M_discarding())
+ 	    _M_maxwidth = _M_printwidth;
+       }
+ 
+       void
        _M_flush()
        {
  	span<_CharT> __new = this->_M_used();
  	basic_string_view<_CharT> __str(__new.data(), __new.size());
  	_M_out = __format::__write(std::move(_M_out), __str);
+ 	_M_sync_discarding();
  	this->_M_rewind();
        }
  
*************** namespace __format
*** 3682,3688 ****
  	// We have more characters than padidng, no padding is needed,
  	// write direclty to _M_out.
  	if (_M_printwidth >= _M_padwidth)
! 	  _M_out = __format::__write(std::move(_M_out), __str);
  	// We reached _M_maxwidth that is smaller than _M_padwidth.
  	// Store the prefix sequence in _M_seq, and free _M_buf.
  	else
--- 3714,3723 ----
  	// We have more characters than padidng, no padding is needed,
  	// write direclty to _M_out.
  	if (_M_printwidth >= _M_padwidth)
! 	  {
! 	    _M_out = __format::__write(std::move(_M_out), __str);
! 	    _M_sync_discarding();
! 	  }
  	// We reached _M_maxwidth that is smaller than _M_padwidth.
  	// Store the prefix sequence in _M_seq, and free _M_buf.
  	else
*************** namespace __format
*** 3718,3723 ****
--- 3753,3762 ----
  	  _Str_sink<_CharT>::_M_overflow();
        }
  
+       bool
+       _M_discarding() const override
+       { return _M_ignoring(); }
+ 
        typename _Sink<_CharT>::_Reservation
        _M_reserve(size_t __n) override
        {
*************** namespace __format
*** 3752,3766 ****
  
      public:
        [[__gnu__::__always_inline__]]
!       explicit _Padding_sink(_Out __out, size_t __padwidth)
!       : _M_padwidth(__padwidth), _M_maxwidth(-1),
  	_M_out(std::move(__out)), _M_printwidth(0)
!       { }
  
        [[__gnu__::__always_inline__]]
!       explicit _Padding_sink(_Out __out, size_t __padwidth, size_t __maxwidth)
!       : _M_padwidth(__padwidth), _M_maxwidth(__maxwidth),
! 	_M_out(std::move(__out)), _M_printwidth(0)
        { }
  
        _Out
--- 3791,3806 ----
  
      public:
        [[__gnu__::__always_inline__]]
!       explicit
!       _Padding_sink(_Out __out, size_t __padwidth, size_t __maxwidth)
!       : _M_padwidth(__padwidth), _M_maxwidth(__maxwidth),
  	_M_out(std::move(__out)), _M_printwidth(0)
!       { _M_sync_discarding(); }
  
        [[__gnu__::__always_inline__]]
!       explicit
!       _Padding_sink(_Out __out, size_t __padwidth)
!       : _Padding_sink(std::move(__out), __padwidth, (size_t)-1)
        { }
  
        _Out
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/std/mdspan gcc-16-20250511/libstdc++-v3/include/std/mdspan
*** gcc-16-20250504/libstdc++-v3/include/std/mdspan	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/include/std/mdspan	Sun May 11 22:32:44 2025
***************
*** 0 ****
--- 1,309 ----
+ // <mdspan> -*- C++ -*-
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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.
+ 
+ // 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/>.
+ 
+ /** @file mdspan
+  *  This is a Standard C++ Library header.
+  */
+ 
+ #ifndef _GLIBCXX_MDSPAN
+ #define _GLIBCXX_MDSPAN 1
+ 
+ #ifdef _GLIBCXX_SYSHDR
+ #pragma GCC system_header
+ #endif
+ 
+ #include <span>
+ #include <array>
+ #include <type_traits>
+ #include <limits>
+ #include <utility>
+ 
+ #define __glibcxx_want_mdspan
+ #include <bits/version.h>
+ 
+ #ifdef __glibcxx_mdspan
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+   namespace __mdspan
+   {
+     template<typename _IndexType, array _Extents>
+       class _ExtentsStorage
+       {
+       public:
+ 	static consteval bool
+ 	_S_is_dyn(size_t __ext) noexcept
+ 	{ return __ext == dynamic_extent; }
+ 
+ 	template<typename _OIndexType>
+ 	  static constexpr _IndexType
+ 	  _S_int_cast(const _OIndexType& __other) noexcept
+ 	  { return _IndexType(__other); }
+ 
+ 	static constexpr size_t _S_rank = _Extents.size();
+ 
+ 	// For __r in [0, _S_rank], _S_dynamic_index[__r] is the number
+ 	// of dynamic extents up to (and not including) __r.
+ 	//
+ 	// If __r is the index of a dynamic extent, then
+ 	// _S_dynamic_index[__r] is the index of that extent in
+ 	// _M_dynamic_extents.
+ 	static constexpr auto _S_dynamic_index = [] consteval
+ 	{
+ 	  array<size_t, _S_rank+1> __ret;
+ 	  size_t __dyn = 0;
+ 	  for(size_t __i = 0; __i < _S_rank; ++__i)
+ 	    {
+ 	      __ret[__i] = __dyn;
+ 	      __dyn += _S_is_dyn(_Extents[__i]);
+ 	    }
+ 	  __ret[_S_rank] = __dyn;
+ 	  return __ret;
+ 	}();
+ 
+ 	static constexpr size_t _S_rank_dynamic = _S_dynamic_index[_S_rank];
+ 
+ 	// For __r in [0, _S_rank_dynamic), _S_dynamic_index_inv[__r] is the
+ 	// index of the __r-th dynamic extent in _Extents.
+ 	static constexpr auto _S_dynamic_index_inv = [] consteval
+ 	{
+ 	  array<size_t, _S_rank_dynamic> __ret;
+ 	  for (size_t __i = 0, __r = 0; __i < _S_rank; ++__i)
+ 	    if (_S_is_dyn(_Extents[__i]))
+ 	      __ret[__r++] = __i;
+ 	  return __ret;
+ 	}();
+ 
+ 	static constexpr size_t
+ 	_S_static_extent(size_t __r) noexcept
+ 	{ return _Extents[__r]; }
+ 
+ 	constexpr _IndexType
+ 	_M_extent(size_t __r) const noexcept
+ 	{
+ 	  auto __se = _Extents[__r];
+ 	  if (__se == dynamic_extent)
+ 	    return _M_dynamic_extents[_S_dynamic_index[__r]];
+ 	  else
+ 	    return __se;
+ 	}
+ 
+ 	template<size_t _OtherRank, typename _GetOtherExtent>
+ 	  constexpr void
+ 	  _M_init_dynamic_extents(_GetOtherExtent __get_extent) noexcept
+ 	  {
+ 	    for(size_t __i = 0; __i < _S_rank_dynamic; ++__i)
+ 	      {
+ 		size_t __di = __i;
+ 		if constexpr (_OtherRank != _S_rank_dynamic)
+ 		  __di = _S_dynamic_index_inv[__i];
+ 		_M_dynamic_extents[__i] = _S_int_cast(__get_extent(__di));
+ 	      }
+ 	  }
+ 
+ 	constexpr
+ 	_ExtentsStorage() noexcept = default;
+ 
+ 	template<typename _OIndexType, array _OExtents>
+ 	  constexpr
+ 	  _ExtentsStorage(const _ExtentsStorage<_OIndexType, _OExtents>&
+ 			  __other) noexcept
+ 	  {
+ 	    _M_init_dynamic_extents<_S_rank>([&__other](size_t __i)
+ 	      { return __other._M_extent(__i); });
+ 	  }
+ 
+ 	template<typename _OIndexType, size_t _Nm>
+ 	  constexpr
+ 	  _ExtentsStorage(span<const _OIndexType, _Nm> __exts) noexcept
+ 	  {
+ 	    _M_init_dynamic_extents<_Nm>(
+ 	      [&__exts](size_t __i) -> const _OIndexType&
+ 	      { return __exts[__i]; });
+ 	  }
+ 
+       private:
+ 	using _S_storage = __array_traits<_IndexType, _S_rank_dynamic>::_Type;
+ 	[[no_unique_address]] _S_storage _M_dynamic_extents;
+       };
+ 
+     template<typename _OIndexType, typename _SIndexType>
+       concept __valid_index_type =
+ 	is_convertible_v<_OIndexType, _SIndexType> &&
+ 	is_nothrow_constructible_v<_SIndexType, _OIndexType>;
+ 
+     template<size_t _Extent, typename _IndexType>
+       concept
+       __valid_static_extent = _Extent == dynamic_extent
+ 	|| _Extent <= numeric_limits<_IndexType>::max();
+   }
+ 
+   template<typename _IndexType, size_t... _Extents>
+     class extents
+     {
+       static_assert(is_integral_v<_IndexType>, "_IndexType must be integral.");
+       static_assert(
+ 	  (__mdspan::__valid_static_extent<_Extents, _IndexType> && ...),
+ 	  "Extents must either be dynamic or representable as _IndexType");
+ 
+     public:
+       using index_type = _IndexType;
+       using size_type = make_unsigned_t<index_type>;
+       using rank_type = size_t;
+ 
+       static constexpr rank_type
+       rank() noexcept { return _S_storage::_S_rank; }
+ 
+       static constexpr rank_type
+       rank_dynamic() noexcept { return _S_storage::_S_rank_dynamic; }
+ 
+       static constexpr size_t
+       static_extent(rank_type __r) noexcept
+       {
+ 	__glibcxx_assert(__r < rank());
+ 	if constexpr (rank() == 0)
+ 	  __builtin_trap();
+ 	else
+ 	  return _S_storage::_S_static_extent(__r);
+       }
+ 
+       constexpr index_type
+       extent(rank_type __r) const noexcept
+       {
+ 	__glibcxx_assert(__r < rank());
+ 	if constexpr (rank() == 0)
+ 	  __builtin_trap();
+ 	else
+ 	  return _M_dynamic_extents._M_extent(__r);
+       }
+ 
+       constexpr
+       extents() noexcept = default;
+ 
+     private:
+       static consteval bool
+       _S_is_less_dynamic(size_t __ext, size_t __oext)
+       { return (__ext != dynamic_extent) && (__oext == dynamic_extent); }
+ 
+       template<typename _OIndexType, size_t... _OExtents>
+ 	static consteval bool
+ 	_S_ctor_explicit()
+ 	{
+ 	  return (_S_is_less_dynamic(_Extents, _OExtents) || ...)
+ 	    || (numeric_limits<index_type>::max()
+ 		< numeric_limits<_OIndexType>::max());
+ 	}
+ 
+       template<size_t... _OExtents>
+ 	static consteval bool
+ 	_S_is_compatible_extents()
+ 	{
+ 	  if constexpr (sizeof...(_OExtents) != rank())
+ 	    return false;
+ 	  else
+ 	    return ((_OExtents == dynamic_extent || _Extents == dynamic_extent
+ 		     || _OExtents == _Extents) && ...);
+ 	}
+ 
+     public:
+       template<typename _OIndexType, size_t... _OExtents>
+ 	requires (_S_is_compatible_extents<_OExtents...>())
+ 	constexpr explicit(_S_ctor_explicit<_OIndexType, _OExtents...>())
+ 	extents(const extents<_OIndexType, _OExtents...>& __other) noexcept
+ 	: _M_dynamic_extents(__other._M_dynamic_extents)
+ 	{ }
+ 
+       template<__mdspan::__valid_index_type<index_type>... _OIndexTypes>
+ 	requires (sizeof...(_OIndexTypes) == rank()
+ 		  || sizeof...(_OIndexTypes) == rank_dynamic())
+ 	constexpr explicit extents(_OIndexTypes... __exts) noexcept
+ 	: _M_dynamic_extents(span<const _IndexType, sizeof...(_OIndexTypes)>(
+ 	    initializer_list{_S_storage::_S_int_cast(__exts)...}))
+ 	{ }
+ 
+       template<__mdspan::__valid_index_type<index_type> _OIndexType, size_t _Nm>
+ 	requires (_Nm == rank() || _Nm == rank_dynamic())
+ 	constexpr explicit(_Nm != rank_dynamic())
+ 	extents(span<_OIndexType, _Nm> __exts) noexcept
+ 	: _M_dynamic_extents(span<const _OIndexType, _Nm>(__exts))
+ 	{ }
+ 
+ 
+       template<__mdspan::__valid_index_type<index_type> _OIndexType, size_t _Nm>
+ 	requires (_Nm == rank() || _Nm == rank_dynamic())
+ 	constexpr explicit(_Nm != rank_dynamic())
+ 	extents(const array<_OIndexType, _Nm>& __exts) noexcept
+ 	: _M_dynamic_extents(span<const _OIndexType, _Nm>(__exts))
+ 	{ }
+ 
+       template<typename _OIndexType, size_t... _OExtents>
+ 	friend constexpr bool
+ 	operator==(const extents& __self,
+ 		   const extents<_OIndexType, _OExtents...>& __other) noexcept
+ 	{
+ 	  if constexpr (!_S_is_compatible_extents<_OExtents...>())
+ 	    return false;
+ 	  else
+ 	    {
+ 	      for (size_t __i = 0; __i < __self.rank(); ++__i)
+ 		if (!cmp_equal(__self.extent(__i), __other.extent(__i)))
+ 		  return false;
+ 	      return true;
+ 	    }
+ 	}
+ 
+     private:
+       using _S_storage = __mdspan::_ExtentsStorage<
+ 	_IndexType, array<size_t, sizeof...(_Extents)>{_Extents...}>;
+       [[no_unique_address]] _S_storage _M_dynamic_extents;
+ 
+       template<typename _OIndexType, size_t... _OExtents>
+ 	friend class extents;
+     };
+ 
+   namespace __mdspan
+   {
+     template<typename _IndexType, size_t... _Counts>
+       auto __build_dextents_type(integer_sequence<size_t, _Counts...>)
+ 	-> extents<_IndexType, ((void) _Counts, dynamic_extent)...>;
+ 
+     template<typename _Tp>
+       consteval size_t
+       __dynamic_extent() { return dynamic_extent; }
+   }
+ 
+   template<typename _IndexType, size_t _Rank>
+     using dextents = decltype(__mdspan::__build_dextents_type<_IndexType>(
+ 	make_index_sequence<_Rank>()));
+ 
+   template<typename... _Integrals>
+     requires (is_convertible_v<_Integrals, size_t> && ...)
+     explicit extents(_Integrals...) ->
+       extents<size_t, __mdspan::__dynamic_extent<_Integrals>()...>;
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ }
+ #endif
+ #endif
diff -Nrcpad gcc-16-20250504/libstdc++-v3/include/std/numeric gcc-16-20250511/libstdc++-v3/include/std/numeric
*** gcc-16-20250504/libstdc++-v3/include/std/numeric	Sun May  4 22:32:34 2025
--- gcc-16-20250511/libstdc++-v3/include/std/numeric	Sun May 11 22:32:44 2025
*************** namespace __detail
*** 582,588 ****
      {
        if (__first != __last)
  	{
! 	  auto __init = *__first;
  	  *__result++ = __init;
  	  ++__first;
  	  if (__first != __last)
--- 582,588 ----
      {
        if (__first != __last)
  	{
! 	  auto __init = std::move(*__first);
  	  *__result++ = __init;
  	  ++__first;
  	  if (__first != __last)
*************** namespace __detail
*** 645,652 ****
      {
        while (__first != __last)
  	{
! 	  auto __v = __init;
! 	  __init = __binary_op(__init, __unary_op(*__first));
  	  ++__first;
  	  *__result++ = std::move(__v);
  	}
--- 645,652 ----
      {
        while (__first != __last)
  	{
! 	  auto __v = std::move(__init);
! 	  __init = __binary_op(__v, __unary_op(*__first));
  	  ++__first;
  	  *__result++ = std::move(__v);
  	}
diff -Nrcpad gcc-16-20250504/libstdc++-v3/src/c++17/fs_path.cc gcc-16-20250511/libstdc++-v3/src/c++17/fs_path.cc
*** gcc-16-20250504/libstdc++-v3/src/c++17/fs_path.cc	Sun May  4 22:32:35 2025
--- gcc-16-20250511/libstdc++-v3/src/c++17/fs_path.cc	Sun May 11 22:32:45 2025
*************** path::operator+=(const path& p)
*** 880,885 ****
--- 880,895 ----
        return *this;
      }
  
+   // Handle p += p which would otherwise access dangling pointers after
+   // reallocating _M_cmpts and _M_pathname.
+   if (&p == this) [[unlikely]]
+     return *this += p.native();
+   // Handle p += *i where i is in [p.begin(),p.end()), for the same reason.
+   if (_M_type() == _Type::_Multi && p._M_type() != _Type::_Multi)
+     for (const path& cmpt : *this)
+       if (&cmpt == &p) [[unlikely]]
+ 	return *this += p.native();
+ 
  #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
    if (_M_type() == _Type::_Root_name
        || (_M_type() == _Type::_Filename && _M_pathname.size() == 1))
diff -Nrcpad gcc-16-20250504/libstdc++-v3/src/c++23/print.cc gcc-16-20250511/libstdc++-v3/src/c++23/print.cc
*** gcc-16-20250504/libstdc++-v3/src/c++23/print.cc	Sun May  4 22:32:35 2025
--- gcc-16-20250511/libstdc++-v3/src/c++23/print.cc	Sun May 11 22:32:45 2025
***************
*** 43,48 ****
--- 43,52 ----
  # include <unistd.h>  // isatty
  #endif
  
+ #ifdef __VXWORKS__
+ #include <ioLib.h>
+ #endif
+ 
  namespace std _GLIBCXX_VISIBILITY(default)
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
diff -Nrcpad gcc-16-20250504/libstdc++-v3/src/c++23/std.cc.in gcc-16-20250511/libstdc++-v3/src/c++23/std.cc.in
*** gcc-16-20250504/libstdc++-v3/src/c++23/std.cc.in	Sun May  4 22:32:35 2025
--- gcc-16-20250511/libstdc++-v3/src/c++23/std.cc.in	Sun May 11 22:32:45 2025
*************** export namespace std
*** 1833,1839 ****
    }
  }
  
! // FIXME <mdspan>
  
  // 20.2 <memory>
  export namespace std
--- 1833,1846 ----
    }
  }
  
! // <mdspan>
! #if __glibcxx_mdspan
! export namespace std
! {
!   using std::extents;
!   // FIXME layout_*, default_accessor and mdspan
! }
! #endif
  
  // 20.2 <memory>
  export namespace std
*************** export namespace std
*** 3107,3112 ****
--- 3114,3120 ----
  #if __cpp_lib_is_layout_compatible
    using std::is_corresponding_member;
    using std::is_layout_compatible;
+   using std::is_layout_compatible_v;
  #endif
  #if __cpp_lib_is_pointer_interconvertible
    using std::is_pointer_interconvertible_base_of;
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc	Sun May 11 22:32:47 2025
***************
*** 0 ****
--- 1,8 ----
+ // { dg-do compile { target c++23 } }
+ #include<mdspan>
+ 
+ std::extents<char, size_t(1) << 9> e1; // { dg-error "from here" }
+ std::extents<double, 1> e2;            // { dg-error "from here" }
+ // { dg-prune-output "dynamic or representable as _IndexType" }
+ // { dg-prune-output "must be integral" }
+ // { dg-prune-output "invalid use of incomplete type" }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc	Sun May 11 22:32:47 2025
***************
*** 0 ****
--- 1,82 ----
+ // { dg-do run { target c++23 } }
+ #include <mdspan>
+ 
+ #include <testsuite_hooks.h>
+ 
+ // Test the copy ctor and the ctor from other extents.
+ 
+ constexpr auto dyn = std::dynamic_extent;
+ 
+ // Not constructible
+ static_assert(!std::is_constructible_v<std::extents<int>,
+ 				       std::extents<int, 1>>);
+ 
+ static_assert(!std::is_constructible_v<std::extents<int, 1, 1>,
+ 				       std::extents<int, 1>>);
+ 
+ static_assert(!std::is_constructible_v<std::extents<int, dyn>,
+ 				       std::extents<int, dyn, dyn>>);
+ 
+ static_assert(!std::is_constructible_v<std::extents<int, 2, 2>,
+ 				       std::extents<int, 1, 2>>);
+ 
+ // Nothrow constructible
+ static_assert(std::is_nothrow_constructible_v<std::extents<int, 1>,
+ 					      std::extents<unsigned int, dyn>>);
+ static_assert(std::is_nothrow_constructible_v<std::extents<unsigned int, dyn>,
+ 					      std::extents<int, 1>>);
+ 
+ // Implicit conversion
+ static_assert(!std::is_convertible_v<std::extents<unsigned int>,
+ 				     std::extents<int>>);
+ static_assert(std::is_convertible_v<std::extents<int>,
+ 				    std::extents<unsigned int>>);
+ 
+ static_assert(!std::is_convertible_v<std::extents<unsigned int, 1>,
+ 				     std::extents<int, 1>>);
+ static_assert(std::is_convertible_v<std::extents<int, 1>,
+ 				    std::extents<unsigned int, 1>>);
+ 
+ static_assert(!std::is_convertible_v<std::extents<int, dyn>,
+ 				     std::extents<int, 1>>);
+ static_assert(std::is_convertible_v<std::extents<int, 1>,
+ 				    std::extents<int, dyn>>);
+ 
+ static_assert(!std::is_convertible_v<std::extents<unsigned int, 1>,
+ 				     std::extents<int, dyn>>);
+ static_assert(std::is_convertible_v<std::extents<int, 1>,
+ 				    std::extents<unsigned int, dyn>>);
+ 
+ template<typename T, size_t... Extents, typename Other>
+   constexpr void
+   test_ctor(const Other& other)
+   {
+     auto e = std::extents<T, Extents...>(other);
+     VERIFY(e == other);
+   }
+ 
+ constexpr int
+ test_all()
+ {
+   auto e0 = std::extents<int>();
+   test_ctor<int>(e0);
+ 
+   auto e1 = std::extents<int, 1, 2, 3>();
+   test_ctor<int, 1, 2, 3>(e1);
+   test_ctor<int, 1, dyn, 3>(e1);
+   test_ctor<unsigned int, 1, dyn, 3>(e1);
+ 
+   auto e2 = std::extents<unsigned int, 1, dyn, 3>{1, 2, 3};
+   test_ctor<int, 1, 2, 3>(e2);
+   test_ctor<int, 1, dyn, 3>(e2);
+   test_ctor<int, 1, dyn, dyn>(e2);
+   return true;
+ }
+ 
+ int
+ main()
+ {
+   test_all();
+   static_assert(test_all());
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc	Sun May 11 22:32:47 2025
***************
*** 0 ****
--- 1,62 ----
+ // { dg-do run { target c++23 } }
+ #include <mdspan>
+ 
+ #include <testsuite_hooks.h>
+ 
+ constexpr auto dyn = std::dynamic_extent;
+ 
+ class A {};
+ 
+ // Not constructible if the number of integer-like arguments isn't either
+ // rank() or rank_dynamic().
+ static_assert(!std::is_constructible_v<std::extents<int>, int>);
+ static_assert(!std::is_constructible_v<std::extents<int, dyn, dyn>, int>);
+ static_assert(!std::is_constructible_v<std::extents<int, 1, dyn, 3>, int, int>);
+ 
+ // Not constructible from non integer-like objects.
+ static_assert(!std::is_constructible_v<std::extents<int, 1>, int, A>);
+ 
+ // No implicit conversion from integer-like objects.
+ template<typename Extent, typename... OExtents>
+   constexpr bool
+   is_explicit()
+   {
+     return std::is_nothrow_constructible_v<Extent, OExtents...>
+ 	   && !std::is_convertible_v<Extent, OExtents...>;
+   }
+ 
+ static_assert(is_explicit<std::extents<int, 1>, int>());
+ static_assert(is_explicit<std::extents<int, 1>, unsigned int>());
+ static_assert(is_explicit<std::extents<unsigned int, 1>, int>());
+ 
+ constexpr bool
+ test_all()
+ {
+   auto expected = std::extents<int, 1, 2, 3>(1, 2, 3);
+ 
+   // From all extents.
+   VERIFY((std::extents<int, 1, 2, 3>(1, 2, 3)) == expected);
+   VERIFY((std::extents<int, dyn, 2, 3>(1, 2, 3)) == expected);
+   VERIFY((std::extents<int, dyn, 2, dyn>(1, 2, 3)) == expected);
+ 
+   VERIFY((std::extents<int, 1, 2, 3>{1, 2, 3}) == expected);
+   VERIFY((std::extents<int, dyn, 2, 3>{1, 2, 3}) == expected);
+   VERIFY((std::extents<int, dyn, 2, dyn>{1, 2, 3}) == expected);
+ 
+   // From only dynamic extents.
+   VERIFY((std::extents<int, dyn, 2, 3>(1)) == expected);
+   VERIFY((std::extents<int, dyn, 2, dyn>(1, 3)) == expected);
+ 
+   VERIFY((std::extents<int, dyn, 2, 3>{1}) == expected);
+   VERIFY((std::extents<int, dyn, 2, dyn>{1, 3}) == expected);
+ 
+   return true;
+ }
+ 
+ int
+ main()
+ {
+   test_all();
+   static_assert(test_all());
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc	Sun May 11 22:32:47 2025
***************
*** 0 ****
--- 1,160 ----
+ // { dg-do run { target c++23 } }
+ #include <mdspan>
+ 
+ #include <testsuite_hooks.h>
+ 
+ constexpr auto dyn = std::dynamic_extent;
+ 
+ template<typename Extent, typename T, size_t N>
+   constexpr bool
+   constructible()
+   {
+     return std::is_nothrow_constructible_v<Extent, std::array<T, N>>
+ 	   && std::is_nothrow_constructible_v<Extent, std::span<T, N>>;
+   }
+ 
+ template<typename Extent, typename T, size_t N>
+   constexpr bool
+   not_constructible()
+   {
+     return !std::is_constructible_v<Extent, std::array<T, N>>
+ 	   && !std::is_constructible_v<Extent, std::span<T, N>>;
+   }
+ 
+ template<typename Extent, typename T, size_t N>
+   constexpr bool
+   convertible()
+   {
+     return std::is_convertible_v<std::array<T, N>, Extent>
+ 	   && std::is_convertible_v<std::span<T, N>, Extent>;
+   }
+ 
+ template<typename Extent, typename T, size_t N>
+   constexpr bool
+   not_convertible()
+   {
+     return !std::is_convertible_v<std::array<T, N>, Extent>
+ 	   && !std::is_convertible_v<std::span<T, N>, Extent>;
+   }
+ 
+ static_assert(constructible<std::extents<int, 1, 2>, int, 2>());
+ static_assert(not_constructible<std::extents<int, 1, 2>, int, 1>());
+ 
+ static_assert(constructible<std::extents<int>, int, 0>());
+ static_assert(convertible<std::extents<int>, int, 0>());
+ static_assert(convertible<std::extents<unsigned int>, int, 0>());
+ static_assert(convertible<std::extents<int>, unsigned int, 0>());
+ 
+ static_assert(constructible<std::extents<int, 1, dyn>, int, 1>());
+ static_assert(convertible<std::extents<int, 1, dyn>, int, 1>());
+ static_assert(convertible<std::extents<unsigned int, 1, dyn>, int, 1>());
+ static_assert(convertible<std::extents<int, 1, dyn>, unsigned int, 1>());
+ 
+ static_assert(constructible<std::extents<int, 1, dyn>, int, 2>());
+ static_assert(not_convertible<std::extents<int, 1, dyn>, int, 2>());
+ static_assert(not_convertible<std::extents<unsigned int, 1, dyn>, int, 2>());
+ static_assert(not_convertible<std::extents<int, 1, dyn>, unsigned int, 2>());
+ 
+ // Non-integer, but convertible.
+ static_assert(constructible<std::extents<int, dyn>, double, 1>());
+ static_assert(convertible<std::extents<int, dyn>, double, 1>());
+ 
+ namespace all_extents
+ {
+   template<typename Shape>
+     constexpr void
+     test_ctor(Shape shape)
+     {
+       auto expected = std::extents<int, 1, 2, 3>();
+       VERIFY((std::extents<int, 1, dyn, 3>(shape)) == expected);
+       VERIFY((std::extents<int, dyn, dyn, dyn>(shape)) == expected);
+       VERIFY((std::extents<int, 1, 2, 3>(shape)) == expected);
+     }
+ 
+   constexpr void
+   test_common_shapes()
+   {
+     auto array = std::array<int, 3>{1, 2, 3};
+     auto span_const = std::span<const int, 3>(array);
+     auto span = std::span<int, 3>(array);
+ 
+     test_ctor(array);
+     test_ctor(span);
+     test_ctor(span_const);
+   }
+ 
+   constexpr void
+   test_empty_shapes()
+   {
+     auto shape = std::array<int, 0>();
+     auto span = std::span<int, 0>(shape);
+ 
+     auto expected = std::extents<int>();
+     VERIFY((std::extents<int>(shape)) == expected);
+     VERIFY((std::extents<int>(span)) == expected);
+   }
+ 
+   constexpr bool
+   test_all()
+   {
+     test_common_shapes();
+     test_empty_shapes();
+     return true;
+   }
+ }
+ 
+ namespace only_dynamic_extents
+ {
+   template<typename Extents, typename Shape>
+     constexpr void
+     test_ctor(const Shape& shape)
+     {
+       Extents e = shape;
+ 
+       VERIFY(e.rank_dynamic() == shape.size());
+ 
+       size_t di = 0;
+       for(size_t i = 0; i < e.rank(); ++i)
+ 	if(e.static_extent(i) == dyn)
+ 	  VERIFY(e.extent(i) == shape[di++]);
+     }
+ 
+   template<typename Extents, typename T, size_t N>
+     constexpr void
+     test_all_shape_types(std::array<T, N> shape)
+     {
+       test_ctor<Extents>(shape);
+       test_ctor<Extents>(std::span<T, N>(shape));
+       test_ctor<Extents>(std::span<const T, N>(shape));
+     }
+ 
+   constexpr void
+   test_common_shapes()
+   {
+     auto s = std::array<int, 0>{};
+     auto s2 = std::array<int, 1>{2};
+     auto s123 = std::array<int, 3>{1, 2, 3};
+ 
+     test_all_shape_types<std::extents<int, 1, dyn, 3>>(s2);
+     test_all_shape_types<std::extents<int, dyn, dyn, dyn>>(s123);
+     test_all_shape_types<std::extents<int, 1, 2, 3>>(s);
+   }
+ 
+   constexpr bool
+   test_all()
+   {
+     test_common_shapes();
+     return true;
+   }
+ }
+ 
+ int
+ main()
+ {
+   all_extents::test_all();
+   static_assert(all_extents::test_all());
+ 
+   only_dynamic_extents::test_all();
+   static_assert(only_dynamic_extents::test_all());
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc	Sun May 11 22:32:47 2025
***************
*** 0 ****
--- 1,87 ----
+ // { dg-do run { target c++23 } }
+ #include <mdspan>
+ 
+ #include <testsuite_hooks.h>
+ 
+ // Test construction from a custom integer-like object, that has
+ // no copy/move ctor or copy/move assignment operator.
+ 
+ constexpr size_t dyn = std::dynamic_extent;
+ 
+ class IntLike
+ {
+ public:
+   explicit
+   IntLike(int i)
+   : _M_i(i)
+   { }
+ 
+   IntLike() = delete;
+   IntLike(const IntLike&) = delete;
+   IntLike(IntLike&&) = delete;
+ 
+   const IntLike&
+   operator=(const IntLike&) = delete;
+ 
+   const IntLike&
+   operator=(IntLike&&) = delete;
+ 
+   constexpr
+   operator int() const noexcept
+   { return _M_i; }
+ 
+ private:
+   int _M_i;
+ };
+ 
+ static_assert(std::is_convertible_v<IntLike, int>);
+ static_assert(std::is_nothrow_constructible_v<int, IntLike>);
+ 
+ void
+ test_shape(const auto& s2, const auto& s23)
+ {
+   std::extents<int, 2, 3> expected;
+ 
+   std::extents<int, 2, 3> e1(s23);
+   VERIFY(e1 == expected);
+ 
+   std::extents<int, dyn, 3> e2(s2);
+   VERIFY(e2 == expected);
+ 
+   std::extents<int, dyn, 3> e3(s23);
+   VERIFY(e3 == expected);
+ 
+   std::extents<int, dyn, dyn> e4(s23);
+   VERIFY(e4 == expected);
+ }
+ 
+ void
+ test_pack()
+ {
+   std::extents<int, 2, 3> expected;
+ 
+   std::extents<int, dyn, 3> e1(IntLike(2));
+   VERIFY(e1 == expected);
+ 
+   std::extents<int, dyn, 3> e2(IntLike(2), IntLike(3));
+   VERIFY(e2 == expected);
+ 
+   std::extents<int, dyn, dyn> e3(IntLike(2), IntLike(3));
+   VERIFY(e3 == expected);
+ }
+ 
+ int
+ main()
+ {
+   auto a2 = std::array<IntLike, 1>{IntLike(2)};
+   auto s2 = std::span<IntLike, 1>(a2);
+ 
+   auto a23 = std::array<IntLike, 2>{IntLike(2), IntLike(3)};
+   auto s23 = std::span<IntLike, 2>(a23);
+ 
+   test_shape(a2, a23);
+   test_shape(s2, s23);
+   test_pack();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc	Sun May 11 22:32:47 2025
***************
*** 0 ****
--- 1,224 ----
+ // { dg-do run { target c++23 } }
+ #include <mdspan>
+ 
+ #include <testsuite_hooks.h>
+ 
+ constexpr size_t dyn = std::dynamic_extent;
+ 
+ // Check class traits.
+ static_assert(std::regular<std::extents<int>>);
+ static_assert(std::regular<std::extents<int, 1>>);
+ static_assert(std::regular<std::extents<int, dyn>>);
+ 
+ static_assert(std::is_trivially_copyable_v<std::extents<int>>);
+ static_assert(std::is_trivially_copyable_v<std::extents<int, 1>>);
+ static_assert(std::is_trivially_copyable_v<std::extents<int, dyn>>);
+ 
+ // Check member typedefs.
+ static_assert(std::is_same_v<std::extents<int, 1, 2>::rank_type, size_t>);
+ 
+ static_assert(std::is_unsigned_v<std::extents<int, 2>::size_type>);
+ static_assert(std::is_unsigned_v<std::extents<unsigned int, 2>::size_type>);
+ 
+ static_assert(std::is_same_v<std::extents<char, 2>::index_type, char>);
+ static_assert(std::is_same_v<std::extents<int, 2>::index_type, int>);
+ static_assert(std::is_same_v<std::extents<unsigned int, 2>::index_type,
+ 	      unsigned int>);
+ 
+ // Check `rank`.
+ static_assert(std::extents<int, 1>::rank() == 1);
+ static_assert(std::extents<int, dyn>::rank() == 1);
+ static_assert(std::extents<int, 2, dyn>::rank() == 2);
+ 
+ // Check `rank_dynamic`.
+ static_assert(std::extents<int, 1>::rank_dynamic() == 0);
+ static_assert(std::extents<int, dyn>::rank_dynamic() == 1);
+ static_assert(std::extents<int, 2, dyn>::rank_dynamic() == 1);
+ static_assert(std::extents<int, dyn, dyn>::rank_dynamic() == 2);
+ 
+ template<typename T, size_t... Extents>
+   constexpr bool
+   check_rank_return_types()
+   {
+     auto e = std::extents<T, Extents...>();
+     return std::is_same_v<decltype(e.rank()), size_t>
+ 	   && std::is_same_v<decltype(e.rank_dynamic()), size_t>;
+   }
+ 
+ static_assert(check_rank_return_types<int, 1>());
+ 
+ // Check that the static extents don't take up space.
+ static_assert(sizeof(std::extents<int, 1, dyn>) == sizeof(int));
+ static_assert(sizeof(std::extents<char, 1, dyn>) == sizeof(char));
+ 
+ template<typename Extents>
+ class Container
+ {
+   int dummy;
+   [[no_unique_address]] std::extents<size_t> b0;
+ };
+ 
+ static_assert(sizeof(Container<std::extents<char, 1, 2>>) == sizeof(int));
+ static_assert(sizeof(Container<std::extents<size_t, 1, 2>>) == sizeof(int));
+ 
+ // operator=
+ static_assert(std::is_nothrow_assignable_v<std::extents<int, dyn, 2>,
+ 					   std::extents<int, 1, 2>>);
+ 
+ constexpr bool
+ test_assign()
+ {
+   auto e1 = std::extents<int, 1, 2>();
+   auto e2 = std::extents<int, 1, 2>();
+ 
+   e2 = e1;
+   VERIFY(e2 == e1);
+ 
+   auto e5 = std::extents<int, 1, dyn>();
+   e5 = e1;
+   VERIFY(e5 == e1);
+ 
+   auto e3 = std::extents<int, dyn, dyn>(1, 2);
+   auto e4 = std::extents<int, dyn, dyn>(3, 4);
+   e3 = e4;
+   VERIFY(e3 == e4);
+   return true;
+ }
+ 
+ // Deduction guide
+ template<size_t Rank, typename... Extents>
+ constexpr void
+ test_deduction(Extents... exts)
+ {
+   std::array<size_t, sizeof...(exts)> shape{static_cast<size_t>(exts)...};
+   std::dextents<size_t, Rank> expected(shape);
+   std::extents e(exts...);
+   static_assert(std::is_same_v<decltype(e), std::dextents<size_t, Rank>>);
+   VERIFY(e == expected);
+ }
+ 
+ constexpr bool
+ test_deduction_all()
+ {
+   test_deduction<0>();
+   test_deduction<1>(1);
+   test_deduction<2>(1.0, 2.0f);
+   test_deduction<3>(int(1), char(2), size_t(3));
+   return true;
+ }
+ 
+ class A {};
+ 
+ template<typename... Extents>
+   concept deducible = requires
+   {
+     { std::extents(Extents{}...) }
+       -> std::convertible_to<std::dextents<size_t, sizeof...(Extents)>>;
+   };
+ 
+ static_assert(deducible<int>);
+ static_assert(!deducible<A, A>);
+ 
+ // dextents
+ static_assert(std::is_same_v<std::dextents<int, 0>, std::extents<int>>);
+ static_assert(std::is_same_v<std::dextents<int, 1>, std::extents<int, dyn>>);
+ static_assert(std::is_same_v<std::dextents<int, 5>,
+ 	      std::extents<int, dyn, dyn, dyn, dyn, dyn>>);
+ 
+ static_assert(std::dextents<int, 5>::rank() == 5);
+ static_assert(std::dextents<int, 5>::rank_dynamic() == 5);
+ static_assert(std::is_same_v<typename std::dextents<int, 5>::index_type, int>);
+ 
+ // static_extent
+ static_assert(std::extents<int, 1, 2>::static_extent(0) == 1);
+ static_assert(std::extents<int, 1, 2>::static_extent(1) == 2);
+ 
+ static_assert(std::extents<int, 1, dyn>::static_extent(0) == 1);
+ static_assert(std::extents<int, 1, dyn>::static_extent(1) == dyn);
+ 
+ static_assert(std::extents<int, dyn, dyn>::static_extent(0) == dyn);
+ static_assert(std::extents<int, dyn, dyn>::static_extent(1) == dyn);
+ 
+ // extent
+ template<typename Extent>
+   constexpr void
+   test_extent(const Extent& e,
+     const std::array<typename Extent::index_type, Extent::rank()>& shape)
+   {
+     for(size_t i = 0; i < e.rank(); ++i)
+       VERIFY(e.extent(i) == shape[i]);
+   }
+ 
+ constexpr bool
+ test_extent_all()
+ {
+   test_extent(std::extents<int, 1, 2>{}, {1, 2});
+   test_extent(std::extents<int, 1, dyn>{2}, {1, 2});
+   test_extent(std::extents<int, dyn, dyn>{1, 2}, {1, 2});
+   return true;
+ }
+ 
+ // operator==
+ template<typename Lhs, typename Rhs>
+   constexpr void
+   test_ops_eq(const Lhs& lhs, const Rhs& rhs, bool expected)
+   {
+     VERIFY((lhs == rhs) == expected);
+     VERIFY((lhs != rhs) == !expected);
+   }
+ 
+ constexpr void
+ test_op_eq_rank_zero()
+ {
+   auto e1 = std::extents<int>();
+   auto e2 = std::extents<int>();
+   auto e3 = std::extents<unsigned int>();
+ 
+   test_ops_eq(e1, e2, true);
+   test_ops_eq(e1, e3, true);
+ }
+ 
+ constexpr void
+ test_op_eq_common()
+ {
+   auto e1 = std::extents<int, 1, 2, 3>();
+   auto e2 = std::extents<int, 1, 2, 3>();
+   auto e3 = std::extents<int, 1, dyn, 3>(2);
+   auto e4 = std::extents<int, 1, dyn, 3>(3);
+ 
+   auto e5 = std::extents<int, 1>();
+   auto e6 = std::extents<int, 1, 3, 3>();
+ 
+   test_ops_eq(e1, e2, true);
+   test_ops_eq(e1, e3, true);
+   test_ops_eq(e1, e4, false);
+ 
+   test_ops_eq(e1, e5, false);
+   test_ops_eq(e1, e6, false);
+   test_ops_eq(e3, e6, false);
+ }
+ 
+ constexpr bool
+ test_op_eq_all()
+ {
+   test_op_eq_rank_zero();
+   test_op_eq_common();
+   return true;
+ }
+ 
+ int
+ main()
+ {
+   test_assign();
+   static_assert(test_assign());
+ 
+   test_deduction_all();
+   static_assert(test_deduction_all());
+ 
+   test_extent_all();
+   static_assert(test_extent_all());
+ 
+   test_op_eq_all();
+   static_assert(test_op_eq_all());
+   return 0;
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc gcc-16-20250511/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc	Sun May  4 22:32:38 2025
--- gcc-16-20250511/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc	Sun May 11 22:32:48 2025
***************
*** 8,37 ****
  #include <execution>
  #include <testsuite_hooks.h>
  
- struct Mint
- {
-   Mint(int i = 0) : val(i) { }
-   Mint(Mint&&) = default;
-   Mint& operator=(Mint&&) = default;
- 
-   operator int() const { return val; }
- 
- private:
-   int val;
- };
- 
- void
- test_move_only()
- {
-   const int input[]{10, 20, 30};
-   int output[3];
-   std::exclusive_scan(std::execution::seq, input, input+3, output, Mint(5),
- 		      std::plus<int>{});
-   VERIFY( output[0] == 5 );
-   VERIFY( output[1] == 15 );
-   VERIFY( output[2] == 35 );
- }
- 
  void
  test_pr108236()
  {
--- 8,13 ----
*************** test_pr108236()
*** 45,50 ****
  
  int main()
  {
-   test_move_only();
    test_pr108236();
  }
--- 21,25 ----
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/move_only.cc gcc-16-20250511/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/move_only.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/move_only.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/move_only.cc	Sun May 11 22:32:48 2025
***************
*** 0 ****
--- 1,90 ----
+ // { dg-options "-ltbb" }
+ // { dg-do run { target c++17 } }
+ // { dg-require-effective-target tbb_backend }
+ 
+ #include <numeric>
+ #include <execution>
+ #include <testsuite_hooks.h>
+ 
+ struct Mint
+ {
+   Mint(int i = 0) : val(i) { }
+ 
+   Mint(Mint&& m) : val(m.val) { m.val = -1; }
+ 
+   Mint& operator=(Mint&& m)
+   {
+     val = m.val;
+     m.val = -1;
+     return *this;
+   }
+ 
+   operator int() const
+   {
+     VERIFY(val >= 0); // Check we don't read value of a moved-from instance.
+     return val;
+   }
+ 
+   friend Mint operator+(const Mint& lhs, const Mint& rhs)
+   { return Mint(lhs.val + rhs.val); }
+ 
+ private:
+   int val;
+ };
+ 
+ void
+ test_reduce()
+ {
+   Mint input[]{1, 2, 3};
+   Mint m = std::reduce(std::execution::seq, input, input+3);
+   VERIFY( static_cast<int>(m) == 6 );
+ 
+   m = std::reduce(std::execution::seq, input, input+3, Mint(100));
+   VERIFY( static_cast<int>(m) == 106 );
+ 
+   m = std::reduce(std::execution::seq, input, input+3, Mint(200),
+ 		  std::plus<>{});
+   VERIFY( static_cast<int>(m) == 206 );
+ }
+ 
+ void
+ test_transform_reduce()
+ {
+ }
+ 
+ void
+ test_exclusive_scan()
+ {
+   const int input[]{10, 20, 30};
+   int output[3];
+   std::exclusive_scan(std::execution::seq, input, input+3, output, Mint(5),
+ 		      std::plus<int>{});
+   VERIFY( output[0] == 5 );
+   VERIFY( output[1] == 15 );
+   VERIFY( output[2] == 35 );
+ }
+ 
+ void
+ test_inclusive_scan()
+ {
+ }
+ 
+ void
+ test_transform_exclusive_scan()
+ {
+ }
+ 
+ void
+ test_transform_inclusive_scan()
+ {
+ }
+ 
+ int main()
+ {
+   test_reduce();
+   test_transform_reduce();
+   test_exclusive_scan();
+   test_inclusive_scan();
+   test_transform_exclusive_scan();
+   test_transform_inclusive_scan();
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc gcc-16-20250511/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc	Sun May 11 22:32:49 2025
***************
*** 0 ****
--- 1,72 ----
+ // { dg-do run { target c++17 } }
+ 
+ // Bug libstdc++/120029
+ // Dangling iterator usage in path::operator+=(const path& p) when this == p
+ 
+ #include <filesystem>
+ #include <testsuite_hooks.h>
+ 
+ namespace fs = std::filesystem;
+ 
+ void
+ test_root_dir()
+ {
+   fs::path p = "/";
+   p += p;
+   p += p;
+   VERIFY( p == "////" );
+   p += p.filename();
+   VERIFY( p == "////" );
+   p += *std::prev(p.end());
+   VERIFY( p == "////" );
+ }
+ 
+ void
+ test_root_name()
+ {
+   fs::path p = "C:/";
+   p += p;
+   p += p;
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += p.filename();
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += *std::prev(p.end());
+   VERIFY( p == "C:/C:/C:/C:/" );
+ }
+ 
+ void
+ test_filename()
+ {
+   fs::path p = "file";
+   p += p;
+   p += p;
+   VERIFY( p == "filefilefilefile" );
+   p += p.filename();
+   VERIFY( p == "filefilefilefilefilefilefilefile" );
+   p += *std::prev(p.end());
+   VERIFY( p == "filefilefilefilefilefilefilefilefilefilefilefilefilefilefilefile" );
+ }
+ 
+ void
+ test_multi()
+ {
+   fs::path p = "/home/username/Documents/mu";
+   p += p;
+   p += p;
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu" );
+   p += p.filename();
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumu" );
+   p += *std::prev(p.end());
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumumumu" );
+   auto n = std::distance(p.begin(), p.end());
+   for (int i = 0; i < n; ++i)
+     p += *std::next(p.begin(), i);
+ }
+ 
+ int main()
+ {
+   test_root_dir();
+   test_root_name();
+   test_filename();
+   test_multi();
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc gcc-16-20250511/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc	Sun May 11 22:32:49 2025
***************
*** 0 ****
--- 1,74 ----
+ // { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
+ // { dg-do run { target c++11 } }
+ // { dg-require-filesystem-ts "" }
+ 
+ // Bug libstdc++/120029
+ // Dangling iterator usage in path::operator+=(const path& p) when this == p
+ 
+ #include <experimental/filesystem>
+ #include <testsuite_hooks.h>
+ 
+ namespace fs = std::experimental::filesystem;
+ 
+ void
+ test_root_dir()
+ {
+   fs::path p = "/";
+   p += p;
+   p += p;
+   VERIFY( p == "////" );
+   p += p.filename();
+   VERIFY( p == "////////" );
+   p += *std::prev(p.end());
+   VERIFY( p == "////////////////" );
+ }
+ 
+ void
+ test_root_name()
+ {
+   fs::path p = "C:/";
+   p += p;
+   p += p;
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += p.filename(); // For Filesystem TS the filename is "."
+   VERIFY( p == "C:/C:/C:/C:/." );
+   p += *std::prev(p.end());
+   VERIFY( p == "C:/C:/C:/C:/.." );
+ }
+ 
+ void
+ test_filename()
+ {
+   fs::path p = "file";
+   p += p;
+   p += p;
+   VERIFY( p == "filefilefilefile" );
+   p += p.filename();
+   VERIFY( p == "filefilefilefilefilefilefilefile" );
+   p += *std::prev(p.end());
+   VERIFY( p == "filefilefilefilefilefilefilefilefilefilefilefilefilefilefilefile" );
+ }
+ 
+ void
+ test_multi()
+ {
+   fs::path p = "/home/username/Documents/mu";
+   p += p;
+   p += p;
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu" );
+   p += p.filename();
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumu" );
+   p += *std::prev(p.end());
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumumumu" );
+   auto n = std::distance(p.begin(), p.end());
+   for (int i = 0; i < n; ++i)
+     p += *std::next(p.begin(), i);
+ }
+ 
+ int main()
+ {
+   test_root_dir();
+   test_root_name();
+   test_filename();
+   test_multi();
+ }
diff -Nrcpad gcc-16-20250504/libstdc++-v3/testsuite/std/time/format/pr120114.cc gcc-16-20250511/libstdc++-v3/testsuite/std/time/format/pr120114.cc
*** gcc-16-20250504/libstdc++-v3/testsuite/std/time/format/pr120114.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250511/libstdc++-v3/testsuite/std/time/format/pr120114.cc	Sun May 11 22:32:49 2025
***************
*** 0 ****
--- 1,125 ----
+ // { dg-do run { target c++23 } }
+ // { dg-options "-fexec-charset=UTF-8" }
+ // { dg-timeout-factor 2 }
+ 
+ #include <algorithm>
+ #include <chrono>
+ #include <testsuite_hooks.h>
+ 
+ #define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S)
+ #define WIDEN(S) WIDEN_(_CharT, S)
+ 
+ template<typename _CharT>
+ void
+ test_from_format_string()
+ {
+   std::basic_string<_CharT> res;
+   using namespace std::chrono_literals;
+   auto date = 2025y/std::chrono::May/05d;
+ 
+   res = std::format(WIDEN("{:+<13%F\U0001f921}"), date);
+   VERIFY( res == WIDEN("2025-05-05\U0001f921+") );
+ 
+   res = std::format(WIDEN("{:->15%F\U0001f921}"), date);
+   VERIFY( res == WIDEN("---2025-05-05\U0001f921") );
+ 
+   res = std::format(WIDEN("{:=^20%F\U0001f921}"), date);
+   VERIFY( res == WIDEN("====2025-05-05\U0001f921====") );
+ }
+ 
+ template<typename _CharT>
+ void
+ test_formatted_value()
+ {
+   // Custom time_put facet which returns Ideographic Telegraph Symbol
+   // for given month for Om.
+   struct TimePut : std::time_put<_CharT>
+   {
+     using iter_type = std::time_put<_CharT>::iter_type;
+     using char_type = std::time_put<_CharT>::char_type;
+ 
+     iter_type
+     do_put(iter_type out, std::ios_base& io, char_type fill, const tm* t,
+ 	   char format, char modifier) const override
+     {
+       if (format != 'm' && modifier != 'm')
+ 	return std::time_put<_CharT>::do_put(out, io, fill, t, format, modifier);
+       std::basic_string_view<_CharT> str;
+       switch (t->tm_mon)
+        {
+ 	 case 0:
+ 	   str = WIDEN("\u32C0");
+ 	   break;
+ 	 case 1:
+ 	   str = WIDEN("\u32C1");
+ 	   break;
+ 	 case 2:
+ 	   str = WIDEN("\u32C2");
+ 	   break;
+ 	 case 3:
+ 	   str = WIDEN("\u32C3");
+ 	   break;
+ 	 case 4:
+ 	   str = WIDEN("\u32C4");
+ 	   break;
+ 	 case 5:
+ 	   str = WIDEN("\u32C5");
+ 	   break;
+ 	 case 6:
+ 	   str = WIDEN("\u32C6");
+ 	   break;
+ 	 case 7:
+ 	   str = WIDEN("\u32C7");
+ 	   break;
+ 	 case 8:
+ 	   str = WIDEN("\u32C8");
+ 	   break;
+ 	 case 9:
+ 	   str = WIDEN("\u32C9");
+ 	   break;
+ 	 case 10:
+ 	   str = WIDEN("\u32CA");
+ 	   break;
+ 	 case 11:
+ 	   str = WIDEN("\u32CB");
+ 	   break;
+        };
+        return std::copy(str.begin(), str.end(), out);
+     }
+   };
+   const std::locale loc(std::locale::classic(), new TimePut);
+ 
+   std::basic_string<_CharT> res;
+ 
+   res = std::format(loc, WIDEN("{:<1L%Om}"), std::chrono::January);
+   VERIFY( res == WIDEN("\u32C0") );
+ 
+   res = std::format(loc, WIDEN("{:>2L%Om}"), std::chrono::February);
+   VERIFY( res == WIDEN("\u32C1") );
+ 
+   res = std::format(loc, WIDEN("{:<3L%Om}"), std::chrono::March);
+   VERIFY( res == WIDEN("\u32C2 ") );
+ 
+   res = std::format(loc, WIDEN("{:^4L%Om}"), std::chrono::April);
+   VERIFY( res == WIDEN(" \u32C3 ") );
+ 
+   res = std::format(loc, WIDEN("{:>5L%Om}"), std::chrono::May);
+   VERIFY( res == WIDEN("   \u32C4") );
+ 
+   res = std::format(loc, WIDEN("{:+<6L%Om}"), std::chrono::June);
+   VERIFY( res == WIDEN("\u32C5++++") );
+ 
+   res = std::format(loc, WIDEN("{:=^7L%Om}"), std::chrono::July);
+   VERIFY( res == WIDEN("==\u32C6===") );
+ 
+   res = std::format(loc, WIDEN("{:->8L%Om}"), std::chrono::August);
+   VERIFY( res == WIDEN("------\u32C7") );
+ }
+ 
+ int main()
+ {
+   test_from_format_string<char>();
+   test_from_format_string<wchar_t>();
+   test_formatted_value<char>();
+   test_formatted_value<wchar_t>();
+ }
diff -Nrcpad gcc-16-20250504/libvtv/ChangeLog gcc-16-20250511/libvtv/ChangeLog
*** gcc-16-20250504/libvtv/ChangeLog	Sun May  4 22:32:40 2025
--- gcc-16-20250511/libvtv/ChangeLog	Sun May 11 22:32:50 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-05-09  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/116792
+ 	* testsuite/lib/libvtv-dg.exp: Add load_lib of scanhtml.exp.
+ 
  2024-11-18  David Malcolm  <dmalcolm@redhat.com>
  
  	* testsuite/lib/libvtv.exp: Add
diff -Nrcpad gcc-16-20250504/libvtv/testsuite/lib/libvtv-dg.exp gcc-16-20250511/libvtv/testsuite/lib/libvtv-dg.exp
*** gcc-16-20250504/libvtv/testsuite/lib/libvtv-dg.exp	Sun May  4 22:32:40 2025
--- gcc-16-20250511/libvtv/testsuite/lib/libvtv-dg.exp	Sun May 11 22:32:50 2025
***************
*** 13,18 ****
--- 13,19 ----
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  
  load_gcc_lib scansarif.exp
+ load_gcc_lib scanhtml.exp
  
  proc libvtv-dg-test { prog do_what extra_tool_flags } {
      return [gcc-dg-test-1 libvtv_target_compile $prog $do_what $extra_tool_flags]
