diff -Nrcpad gcc-16-20250615/LAST_UPDATED gcc-16-20250622/LAST_UPDATED
*** gcc-16-20250615/LAST_UPDATED	Sun Jun 15 22:34:33 2025
--- gcc-16-20250622/LAST_UPDATED	Sun Jun 22 22:34:34 2025
***************
*** 1 ****
! Obtained from git: master revision afe3401f2e73e21d0e54ea8529642e37ae4a23d5
--- 1 ----
! Obtained from git: master revision 596ab7c67f05f45f94e527830404c391141ec85c
diff -Nrcpad gcc-16-20250615/MD5SUMS gcc-16-20250622/MD5SUMS
*** gcc-16-20250615/MD5SUMS	Sun Jun 15 22:34:46 2025
--- gcc-16-20250622/MD5SUMS	Sun Jun 22 22:34:39 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20250615.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-20250622.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
*************** d32239bcb673463ab874e80d47fae504  COPYIN
*** 25,35 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 5eecfcc93e1096e84e337d00e2a2c177  LAST_UPDATED
  0243224447499a1a62c0125937291a7c  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
! 20b3d34e305ceb74fbf9ce3f1e57817f  Makefile.in
! 3893d3761aa0864c071907a44196451c  Makefile.tpl
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  d91842c1dd3e9080dd06b73340b682ee  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
--- 25,35 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 7cc4b23a23913209e187c765ede02cce  LAST_UPDATED
  0243224447499a1a62c0125937291a7c  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
! 7dcc983bfbcda6838b504185562b60a3  Makefile.in
! 2c81c9de7da119a00341d5e9529e629f  Makefile.tpl
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  d91842c1dd3e9080dd06b73340b682ee  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 152,159 ****
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! 399886ce72246f57551e00eee98a3e61  configure
! 548ae1da0b97f26d2041de7ce6ae9ef1  configure.ac
  ee0613335cef93cc6f0f9375ce947171  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
--- 152,159 ----
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! 9d9c5508a65175be5f9e10721e55ebbc  configure
! 82e46c5338f6449fa0a149b6adf12797  configure.ac
  ee0613335cef93cc6f0f9375ce947171  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 516,522 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 3873264dd1afb6d446a7e6a7df3c48f2  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 516,522 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 97fce58ff7aad50779db6f11fbac68f0  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 553,571 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 6c26a70fb6984b95bb58ad99775542fc  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 4e6f86cd5f1167ed6ff9f3fb17a87384  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! e50df584b55e226265f40d5821021286  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 553,571 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 36177472a04f877d3874afdccd32b917  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 23956154cef18ee478426f2e806d7377  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 2caa2f16ce6027a37342c74c6bc08b5f  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** e529e93557ba835a90440062c302bbfe  gcc/ad
*** 592,598 ****
  eea9961506181531b5f7f1a7f62fe428  gcc/ada/ChangeLog-2024
  5598cfcecd6612ea21efddabbbe1ecc0  gcc/ada/ChangeLog.ptr
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
! 597f68d7246e635c0cd3df7099ec272c  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
  f9a43fc9d1cd806374fd057b920c4688  gcc/ada/Makefile.rtl
  db7e461b5b214c390e35d18397979f74  gcc/ada/accessibility.adb
--- 592,598 ----
  eea9961506181531b5f7f1a7f62fe428  gcc/ada/ChangeLog-2024
  5598cfcecd6612ea21efddabbbe1ecc0  gcc/ada/ChangeLog.ptr
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
! 5fa4a4aa07a319aa991e3260393e64b9  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
  f9a43fc9d1cd806374fd057b920c4688  gcc/ada/Makefile.rtl
  db7e461b5b214c390e35d18397979f74  gcc/ada/accessibility.adb
*************** aad2a318697514ee6e576768c075fc0e  gcc/ad
*** 828,834 ****
  c6d8bff803673243e76f3e9aa705e974  gcc/ada/frontend.adb
  6f776be1d84e9d8c996b576c19a4349f  gcc/ada/frontend.ads
  7cb990da5787a02f58f48506632b9364  gcc/ada/gcc-interface/Make-lang.in
! d35232c0fa372b2e71ab7add32118b39  gcc/ada/gcc-interface/Makefile.in
  b02134e55a04db5c49a710da26b19be1  gcc/ada/gcc-interface/ada-builtin-types.def
  bc1175cb4ea0b9cb5f8751b3f0da7f74  gcc/ada/gcc-interface/ada-builtins.def
  9671d558ad879f15e73993538906ebda  gcc/ada/gcc-interface/ada-tree.def
--- 828,834 ----
  c6d8bff803673243e76f3e9aa705e974  gcc/ada/frontend.adb
  6f776be1d84e9d8c996b576c19a4349f  gcc/ada/frontend.ads
  7cb990da5787a02f58f48506632b9364  gcc/ada/gcc-interface/Make-lang.in
! c966c1785f2c20d928007c7842c93db0  gcc/ada/gcc-interface/Makefile.in
  b02134e55a04db5c49a710da26b19be1  gcc/ada/gcc-interface/ada-builtin-types.def
  bc1175cb4ea0b9cb5f8751b3f0da7f74  gcc/ada/gcc-interface/ada-builtins.def
  9671d558ad879f15e73993538906ebda  gcc/ada/gcc-interface/ada-tree.def
*************** cbf1143b39dba16ccff2bad507662b80  gcc/ad
*** 2883,2889 ****
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
  a67c36c91c4dea7353be4635f19754d1  gcc/ada/sem.adb
  852fbcc89a3ed10b6c00d4f9686d1405  gcc/ada/sem.ads
! a2f51950a7d3736df297fddd81cab2ae  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
  89685570d809f05ecf279b006d5b53b7  gcc/ada/sem_attr.adb
  825e191d7eee72ea4718b1fc2ba02824  gcc/ada/sem_attr.ads
--- 2883,2889 ----
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
  a67c36c91c4dea7353be4635f19754d1  gcc/ada/sem.adb
  852fbcc89a3ed10b6c00d4f9686d1405  gcc/ada/sem.ads
! 77e7d484fc0452e0030a2a24479da4b0  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
  89685570d809f05ecf279b006d5b53b7  gcc/ada/sem_attr.adb
  825e191d7eee72ea4718b1fc2ba02824  gcc/ada/sem_attr.ads
*************** df3f6c6882fc8f715d4cc537af0f6442  gcc/ad
*** 3054,3060 ****
  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
--- 3054,3060 ----
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! 8e9ce47ddff1fd3fd3b4702589f8ad23  gcc/analyzer/ChangeLog
  c1d8dcf12e8a4e4782fe39d54eed2d1d  gcc/analyzer/access-diagram.cc
  9de61ebb9551c4e4ef3bfa77f503bfa0  gcc/analyzer/access-diagram.h
  0fbda9dacfcf6f4071f7bee8c6b7dbe9  gcc/analyzer/analysis-plan.cc
*************** ab7785be9752af3c41527ce7aa08e5f9  gcc/an
*** 3081,3095 ****
  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
--- 3081,3095 ----
  0c33640a03f3ee40fe825f5f1e2ad950  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
  3f62325364760248ae18299a0bd12bf2  gcc/analyzer/checker-event.cc
! f35c616beb0caf53d918a3aa7cfabd1b  gcc/analyzer/checker-event.h
! c4687f7aa3cb8374e9f9a685ba14ee0e  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
! 2546d588840487b3d4203a3d1772783b  gcc/analyzer/diagnostic-manager.cc
  f44cc8516da447fede0702befbb862f6  gcc/analyzer/diagnostic-manager.h
  66966ef6aa01ef22fe422f7715c0011a  gcc/analyzer/engine.cc
  acc1f4f20384df654fa365f64ad6a6f9  gcc/analyzer/engine.h
*************** c77616ec7ed7ec81357de9544f955910  gcc/at
*** 3161,3168 ****
  0e1b67f20b5d137d4e1d6915400e406b  gcc/attribs.cc
  1bdf6723b4c88b5b1495f718e4dd00c7  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
! a88264865cd925d5ce50ebc9c8e0c137  gcc/auto-profile.cc
! fe453e02b17197af9a9101edb6590b74  gcc/auto-profile.h
  b49502046f4647eae48740d67a1ad97e  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
  db748cbed8c442a442779d8d857a3ae4  gcc/backend.h
--- 3161,3168 ----
  0e1b67f20b5d137d4e1d6915400e406b  gcc/attribs.cc
  1bdf6723b4c88b5b1495f718e4dd00c7  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
! 3049600f55b669dc92c245e5e2d8ee80  gcc/auto-profile.cc
! e229f7b70350c202e4563272e7f07ca4  gcc/auto-profile.h
  b49502046f4647eae48740d67a1ad97e  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
  db748cbed8c442a442779d8d857a3ae4  gcc/backend.h
*************** f808dbcc1ad6add5a0867c4b3e03fc4d  gcc/bu
*** 3178,3184 ****
  bec6a30db0391a4a551e8bd86db93219  gcc/builtins.cc
  dd55b2c473c288bdc5752f7da8cc21e7  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! fbaaeded56347f16bc9355764bc59a8b  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
--- 3178,3184 ----
  bec6a30db0391a4a551e8bd86db93219  gcc/builtins.cc
  dd55b2c473c288bdc5752f7da8cc21e7  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! 9a6b7083acc86b674ed7757eb0a98d50  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
*************** fc808567009babd00ebcf49b5b985691  gcc/c-
*** 3214,3221 ****
  4286e0086805aa55b325f25d060c6003  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
  ed4e4a12acd44dcb58dd646d038bc97a  gcc/c-family/c-warn.cc
! 2a25d7ae8eb4df735c60846992d4493c  gcc/c-family/c.opt
! d5b8ff413daae8e04d6380b3696fa4c7  gcc/c-family/c.opt.urls
  22bd7478421befafcfbd805e3ca373ac  gcc/c-family/cppspec.cc
  aaf683e3b02704cfbfab0627d82edf85  gcc/c-family/known-headers.cc
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
--- 3214,3221 ----
  4286e0086805aa55b325f25d060c6003  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
  ed4e4a12acd44dcb58dd646d038bc97a  gcc/c-family/c-warn.cc
! a51a5f8bf0e3793fce3e55e272e240ac  gcc/c-family/c.opt
! 2cce490660cb987edcb2126db0fd0be8  gcc/c-family/c.opt.urls
  22bd7478421befafcfbd805e3ca373ac  gcc/c-family/cppspec.cc
  aaf683e3b02704cfbfab0627d82edf85  gcc/c-family/known-headers.cc
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
*************** bbad65845fcf9cdbc5137d96f92eacab  gcc/cf
*** 3266,3327 ****
  7c2358ab451ca13a153f64b7682d772a  gcc/cfgloopmanip.h
  86fd277253913430380bc5d51e4b395b  gcc/cfgrtl.cc
  132f0eb682ec622dc563cfc697da1fb8  gcc/cfgrtl.h
! e17f666ccc839ffe367b81141bfaa508  gcc/cgraph.cc
  6efd2066f705098914ba5a90b8214010  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! ddb1c446a640363023c4417dd21c51a5  gcc/cobol/ChangeLog
! 14224ad11813da21939481d8dd5eb218  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! 9fe3e756e47ccf4ed80c11e535ec2de9  gcc/cobol/cbldiag.h
! 20e6b8fb8b95db7ab38864b7931812ce  gcc/cobol/cdf-copy.cc
! 6b6726b4757008e205b5f9096fe2e476  gcc/cobol/cdf.y
! f60907e04786ba43a52126e7cde0e49a  gcc/cobol/cdfval.h
! 77fc5e59eed5f55ff8b66d9138ca6c18  gcc/cobol/cobol-system.h
! 8a1232cc40a34e1a92e07d4d85b2e2aa  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
! 46737f82628267b070d0c217c0a87e70  gcc/cobol/copybook.h
! d82104539470e81b006b5f9227229da7  gcc/cobol/dts.h
! c229c0cae609de02bf65d6a9cc63b868  gcc/cobol/except.cc
  8208f264c49dfd56f856e8a4229545b9  gcc/cobol/exceptg.h
  24c537bb1367d796de8c91d7fb8ce910  gcc/cobol/gcobc
  1276523bb287dcb395003b230b9462f8  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  ee529adcf01d8ec47590b845d67064e2  gcc/cobol/gcobolspec.cc
! d336ef8c1a3331697786da7b17b016e2  gcc/cobol/genapi.cc
! 9405cedcadb1d8d4dc1ec68fc2fb0c59  gcc/cobol/genapi.h
! 033c74fe6abf78033a7be7135bc86e96  gcc/cobol/gengen.cc
! 5a15fbb14271aa588750f652642e3b68  gcc/cobol/gengen.h
! 03907d50aa67f715c8b1af3c9fc37fd2  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! a756f44fff2c4f4136a54415eadd9a5e  gcc/cobol/genutil.cc
! 40de4fe66e173dc50d9f3cb593866265  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
! 3b70c7910812017584e9dcb2db68e630  gcc/cobol/inspect.h
  2c85ade938027e95c4c411b384f6ad11  gcc/cobol/lang-specs.h
  4ab99742b15962360c2189eb9cdb087c  gcc/cobol/lang.opt
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
! 1d114db4c6ef51aab01cb878ad99b271  gcc/cobol/lexio.cc
! a674c18d797f48c8bc7ca31a09f2c642  gcc/cobol/lexio.h
! 03a5ab34493d838287c4a118b5045f13  gcc/cobol/parse.y
! 1353fa7097baee179e37e19de8c4de59  gcc/cobol/parse_ante.h
! 4d55488629c09ff19bd872e7dd9d0fc7  gcc/cobol/parse_util.h
! 9689989861d0489b87a4f018a5e55c8a  gcc/cobol/scan.l
! 7634fadf4c5641a9f168a793bea88a2a  gcc/cobol/scan_ante.h
! 028d321b36fa057857916c125928df97  gcc/cobol/scan_post.h
! 31c4d4468924864effced0de842cfc10  gcc/cobol/show_parse.h
  d75653f25ec3b747265e4ab78aa71521  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
! 52955eaae3c4975b535d6eec5b98f1e1  gcc/cobol/symbols.cc
! ca2865149429457a06ea1dab34bffa9c  gcc/cobol/symbols.h
! a86e336e67bb1b692c75bb7840ee326c  gcc/cobol/symfind.cc
! a7b20717b0839af4783bead169c2ab02  gcc/cobol/token_names.h
  94ee230280ef44983fee5c81648f8669  gcc/cobol/udf/stored-char-length.cbl
! b55722cc671e79c2b44189403629de29  gcc/cobol/util.cc
! cf96dbd1c8f1ce54defd6c5ed84862cb  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
  30202062ccc5696f6203f07ab6965763  gcc/collect2-aix.cc
--- 3266,3327 ----
  7c2358ab451ca13a153f64b7682d772a  gcc/cfgloopmanip.h
  86fd277253913430380bc5d51e4b395b  gcc/cfgrtl.cc
  132f0eb682ec622dc563cfc697da1fb8  gcc/cfgrtl.h
! c1215ccb67376db53d2ba9dcfdcf5bab  gcc/cgraph.cc
  6efd2066f705098914ba5a90b8214010  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! 6b8842d0342104521107a87804a892e6  gcc/cobol/ChangeLog
! 450df51cf60a6697f9f7d8ba227547f1  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! 9a13fd3cc88107d0eacd2642a730e64c  gcc/cobol/cbldiag.h
! 030342886cc720f11f17d7691f6f24ae  gcc/cobol/cdf-copy.cc
! 1a52622fd7c15c6ca66f134c6e88200e  gcc/cobol/cdf.y
! be7e601b0229e2acc39beaaf8c3fb315  gcc/cobol/cdfval.h
! fb65c7259141f1223fa29175a2e441ed  gcc/cobol/cobol-system.h
! ee4949fbb8e044a8e4f2b3c410068ea2  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
! bdd6fbf13776c7983a16ac857615424c  gcc/cobol/copybook.h
! 0a781b261895ff7f99592ae18f32722b  gcc/cobol/dts.h
! a9b94de9dc310de2e8a9dc0619b0f448  gcc/cobol/except.cc
  8208f264c49dfd56f856e8a4229545b9  gcc/cobol/exceptg.h
  24c537bb1367d796de8c91d7fb8ce910  gcc/cobol/gcobc
  1276523bb287dcb395003b230b9462f8  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  ee529adcf01d8ec47590b845d67064e2  gcc/cobol/gcobolspec.cc
! 783288b330c35a6e4e7c5305d7a8af9f  gcc/cobol/genapi.cc
! 3e36796912b5946b5476905621c23f88  gcc/cobol/genapi.h
! 76715d80eb92c82c589f36918524fe44  gcc/cobol/gengen.cc
! a55838d98cd220b3d5367d83c32d64c5  gcc/cobol/gengen.h
! f0d89caf87ef5de96b8553aa49e712e3  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! 42723832cb37bac963c95a117b89f2e2  gcc/cobol/genutil.cc
! 93c85e56e83ecabfb62729e46c3af130  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
! 0fa33dbe050697f40b5e8df91896da9a  gcc/cobol/inspect.h
  2c85ade938027e95c4c411b384f6ad11  gcc/cobol/lang-specs.h
  4ab99742b15962360c2189eb9cdb087c  gcc/cobol/lang.opt
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
! 1fc11522ebe3b5f6a4476a4fc671c005  gcc/cobol/lexio.cc
! d3d23cf0118f6d909db4f77c7d753dec  gcc/cobol/lexio.h
! 11ec054763a9e15f6012f08fd2d7d9b8  gcc/cobol/parse.y
! 6de15739e8518d4869a6ff160e45a0ef  gcc/cobol/parse_ante.h
! f76848cec8095aa9b4bda7d8cda8b162  gcc/cobol/parse_util.h
! cb5c9a5236dad8f58a71d23f6278fbd9  gcc/cobol/scan.l
! ea93cc6e5d103955594b1d60c7e1e2c9  gcc/cobol/scan_ante.h
! dc23157881f66b51ceb1c14b45d4f349  gcc/cobol/scan_post.h
! 98c9f76a3a609b005371e23b4ccc6f95  gcc/cobol/show_parse.h
  d75653f25ec3b747265e4ab78aa71521  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
! 83336c5b7adecd6402f7ce49cf47a851  gcc/cobol/symbols.cc
! a4f8e4dbad2319dbe46edb1271fd268d  gcc/cobol/symbols.h
! 919355a9377ff4f45564df87fe4983fe  gcc/cobol/symfind.cc
! 58d0bac6f2e387d8a6cb2fba899d66b1  gcc/cobol/token_names.h
  94ee230280ef44983fee5c81648f8669  gcc/cobol/udf/stored-char-length.cbl
! cc027677ab26d5ae1933a01d547b2e06  gcc/cobol/util.cc
! f3b588ca273ab39de39bf43e96f8f1db  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
  30202062ccc5696f6203f07ab6965763  gcc/collect2-aix.cc
*************** f842f1b8595f3ac795ba92c2b07085e6  gcc/co
*** 3378,3384 ****
  03a53ecd36b397fbe0846ead66505e2d  gcc/common/config/pa/pa-common.cc
  1fbcfc1a92bb13e4405bc75767cf8a36  gcc/common/config/pdp11/pdp11-common.cc
  7ee5967300d3c96a608eea63008aa893  gcc/common/config/pru/pru-common.cc
! 32ac20bcf0b3b7dbed68099639d7cdfe  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
--- 3378,3384 ----
  03a53ecd36b397fbe0846ead66505e2d  gcc/common/config/pa/pa-common.cc
  1fbcfc1a92bb13e4405bc75767cf8a36  gcc/common/config/pdp11/pdp11-common.cc
  7ee5967300d3c96a608eea63008aa893  gcc/common/config/pru/pru-common.cc
! c15ef3710d0fea7363eec1a012fae3ac  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
*** 3393,3401 ****
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 417e94e154d32185488976be33bdc404  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
! 1d528f9807496430cc01191e59f745d3  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  ddbb7a934f8b8aa068e7b765c4375fbe  gcc/config/aarch64/aarch64-abi-ms.h
  9ff4e02500f5622983fef95cce7f38fd  gcc/config/aarch64/aarch64-arches.def
--- 3393,3401 ----
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! a4552649692b9ada2fccf33ddd5c898f  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
! 9bcf037bfdb5f868d936869520657a4a  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  ddbb7a934f8b8aa068e7b765c4375fbe  gcc/config/aarch64/aarch64-abi-ms.h
  9ff4e02500f5622983fef95cce7f38fd  gcc/config/aarch64/aarch64-arches.def
*************** f0a8397b1e293e23f65674cd004845ae  gcc/co
*** 3409,3414 ****
--- 3409,3416 ----
  bef2a61270424fd606c71d78d20ad675  gcc/config/aarch64/aarch64-d.cc
  36405b6300d5ec6ca8faf17212ad1bc9  gcc/config/aarch64/aarch64-d.h
  d75100bc2f054afcf41a992cdaa5f793  gcc/config/aarch64/aarch64-early-ra.cc
+ 4e4b58e49ac3a9b7571e6f4bfa3f0080  gcc/config/aarch64/aarch64-elf-metadata.cc
+ 36c75fd114fd69390b4e55e4a2324b19  gcc/config/aarch64/aarch64-elf-metadata.h
  a626b42ff6790e8447d6f7bf1b19e5fb  gcc/config/aarch64/aarch64-elf-raw.h
  843882d6c2a5ee474fe70407c459300d  gcc/config/aarch64/aarch64-elf.h
  6e8efccd687b154a1a7fcc3e9672274f  gcc/config/aarch64/aarch64-errata.h
*************** f931bc8e97c2f1358ad3ad91e902d553  gcc/co
*** 3426,3436 ****
  c9a52df251f3132f3562d3fffaa39c7b  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  b14ff14af09e35148ebaceacc90e59a7  gcc/config/aarch64/aarch64-passes.def
! 825361f50687226bb40a82050d51e8d6  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
! 9ea76d93e2634ee882d4a122c5bd8ee5  gcc/config/aarch64/aarch64-simd.md
  e3fe67e652934d5092addccac9c9f30a  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
--- 3428,3438 ----
  c9a52df251f3132f3562d3fffaa39c7b  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  b14ff14af09e35148ebaceacc90e59a7  gcc/config/aarch64/aarch64-passes.def
! ed8b4ea0c25011b1f5f8000e9cb8655c  gcc/config/aarch64/aarch64-protos.h
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 02c5862c6dae83d189736aefb9707f44  gcc/config/aarch64/aarch64-simd.md
  e3fe67e652934d5092addccac9c9f30a  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
*************** e2d80b89552da0c6b4cb6bede3b2e573  gcc/co
*** 3448,3460 ****
  354a32b5af602553358eb32a9ac919a5  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! 58dcac476d037bda0f1e7ac5c1a5d55e  gcc/config/aarch64/aarch64-sve.md
  5fadf27df621c41bae0181b584bb27f0  gcc/config/aarch64/aarch64-sve2.md
  805529fa07916adcabb727f19ebd8dd2  gcc/config/aarch64/aarch64-sys-regs.def
  065e0643d90a8831e9495b5ce2c12b0d  gcc/config/aarch64/aarch64-tune.md
  06480b67fa44a0b9fa7de2ed778a3df9  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! 9b09e06ceb16f76951e4284dc5a9dc46  gcc/config/aarch64/aarch64.cc
  4c2226a017b612867a61db1f7929ad43  gcc/config/aarch64/aarch64.h
  b0c9504f794c9543f15ac542746c9931  gcc/config/aarch64/aarch64.md
  84c23cd68c90a9be4b986aa7009ba1c9  gcc/config/aarch64/aarch64.opt
--- 3450,3462 ----
  354a32b5af602553358eb32a9ac919a5  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! 7623e429524852589dc493736c919445  gcc/config/aarch64/aarch64-sve.md
  5fadf27df621c41bae0181b584bb27f0  gcc/config/aarch64/aarch64-sve2.md
  805529fa07916adcabb727f19ebd8dd2  gcc/config/aarch64/aarch64-sys-regs.def
  065e0643d90a8831e9495b5ce2c12b0d  gcc/config/aarch64/aarch64-tune.md
  06480b67fa44a0b9fa7de2ed778a3df9  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! 7c04193698601fc8b2407105571b4a5d  gcc/config/aarch64/aarch64.cc
  4c2226a017b612867a61db1f7929ad43  gcc/config/aarch64/aarch64.h
  b0c9504f794c9543f15ac542746c9931  gcc/config/aarch64/aarch64.md
  84c23cd68c90a9be4b986aa7009ba1c9  gcc/config/aarch64/aarch64.opt
*************** f7165d62ef852e1929a8fc9a85c01ab2  gcc/co
*** 3481,3490 ****
  dfcdbda4a3bb64a86fdf64ce6fce0ae3  gcc/config/aarch64/geniterators.sh
  bc3b4ebfac8bfd42d3e9098f33585afd  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! abbbbf6a81aacb22ddfd5cf90e09c3fb  gcc/config/aarch64/iterators.md
! 3d86aed4fe95882adcb3a5a466d3e9ff  gcc/config/aarch64/predicates.md
  a4e902ee1494ba5eee811ea46ecdf995  gcc/config/aarch64/rtems.h
! 9a62f0d5ab77ee226f2c440e8c4d3a1d  gcc/config/aarch64/t-aarch64
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-freebsd
  7c93b24bd00b44291884d34b3213b75e  gcc/config/aarch64/t-aarch64-linux
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-netbsd
--- 3483,3492 ----
  dfcdbda4a3bb64a86fdf64ce6fce0ae3  gcc/config/aarch64/geniterators.sh
  bc3b4ebfac8bfd42d3e9098f33585afd  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 34170c16bd0c730cf23c213593517751  gcc/config/aarch64/iterators.md
! 5086a9aec97908fe033dfa0fb91f311a  gcc/config/aarch64/predicates.md
  a4e902ee1494ba5eee811ea46ecdf995  gcc/config/aarch64/rtems.h
! 311b65ba9e415ee9bec122a44389ec72  gcc/config/aarch64/t-aarch64
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-freebsd
  7c93b24bd00b44291884d34b3213b75e  gcc/config/aarch64/t-aarch64-linux
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-netbsd
*************** b395ed990d9e6d7c2698fdd602685d3f  gcc/co
*** 3965,3971 ****
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  23106fa0b82354400a9c82b82a9af33a  gcc/config/gcn/gcn-tree.cc
  6a8bbbcc3aeaabb5764442677cc5e730  gcc/config/gcn/gcn-valu.md
! 58246ea2e9e5f1d90f38a3231f63790d  gcc/config/gcn/gcn.cc
  686d66a24f66638a6a8dc76ddae3acb6  gcc/config/gcn/gcn.h
  ec56b3b46deea86778d1b3906f48197a  gcc/config/gcn/gcn.md
  ea362cc71f1b9679e105d57822167b51  gcc/config/gcn/gcn.opt
--- 3967,3973 ----
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  23106fa0b82354400a9c82b82a9af33a  gcc/config/gcn/gcn-tree.cc
  6a8bbbcc3aeaabb5764442677cc5e730  gcc/config/gcn/gcn-valu.md
! e8cb8169e5e20b62bcb93eb3f52ed05e  gcc/config/gcn/gcn.cc
  686d66a24f66638a6a8dc76ddae3acb6  gcc/config/gcn/gcn.h
  ec56b3b46deea86778d1b3906f48197a  gcc/config/gcn/gcn.md
  ea362cc71f1b9679e105d57822167b51  gcc/config/gcn/gcn.opt
*************** d3fb594d11281112ff8d8f304a000c4e  gcc/co
*** 4152,4158 ****
  a4a1a27264871bfba9de0f4fbdb4f3ac  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! 137bda4fe38eb4ba8d13725fa6e46a70  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  97393080d15005c11dc8db98af1eb116  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
--- 4154,4160 ----
  a4a1a27264871bfba9de0f4fbdb4f3ac  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! d62c059bfedb78bff7190cf4301c1878  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  97393080d15005c11dc8db98af1eb116  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
*************** ae55d83d5b332e663522f2352f5a3282  gcc/co
*** 4162,4174 ****
  08c877d750ab52ddb4fe7c99c90d62de  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  2b4efb0edf861dd06ddc1445aa9e4d05  gcc/config/i386/i386-passes.def
! 8c6095a5b42bb540cec543f02f62b2e8  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! fef0eb0c49b7d25e22ac6e88e1cc637c  gcc/config/i386/i386.cc
! a6cfbe637ab786c041cc2872a71bc247  gcc/config/i386/i386.h
! c1795b39b9fb57f2710e2bc5d438f182  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
--- 4164,4176 ----
  08c877d750ab52ddb4fe7c99c90d62de  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  2b4efb0edf861dd06ddc1445aa9e4d05  gcc/config/i386/i386-passes.def
! 1e4f342fabb9b3deea3614a7ce6ba9af  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! cc716f41ed6e19d37555fe79d84d5142  gcc/config/i386/i386.cc
! 2eb1b22e4ae1718401757d9a48959841  gcc/config/i386/i386.h
! d96ee267770cfaef2792ef4dc8330f2c  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
*************** f2528020fcdc72755829904c1e2bd9cd  gcc/co
*** 4784,4795 ****
  8975a99baca4214035d5805cff0cbf4c  gcc/config/or1k/linux.h
  8749d9b447ea37bc29800c0bf265c6e2  gcc/config/or1k/or1k-opts.h
  97baa752f8b46ebaabe66d92886e19a2  gcc/config/or1k/or1k-protos.h
! 4cc703e62ab787471aceefa426fa00d4  gcc/config/or1k/or1k.cc
  fcbfb3ff3577f95c15cf20ae1c95b269  gcc/config/or1k/or1k.h
! f5e7694d32cf1092a0353e9cf60d09d4  gcc/config/or1k/or1k.md
  1ef170db4cf4943c3da6cf4ca8d5f674  gcc/config/or1k/or1k.opt
  08881bec5bba093b5cb1eddd91ef4014  gcc/config/or1k/or1k.opt.urls
! 6e502c5c53fc16b65e45d77f36d63e76  gcc/config/or1k/predicates.md
  db8691a94f44f22cd2b192588632bb9b  gcc/config/or1k/rtems.h
  53bcb430048193eb051a76841ed97244  gcc/config/or1k/t-or1k
  f58d4380ee68891690f4302989ce00cb  gcc/config/or1k/t-rtems
--- 4786,4797 ----
  8975a99baca4214035d5805cff0cbf4c  gcc/config/or1k/linux.h
  8749d9b447ea37bc29800c0bf265c6e2  gcc/config/or1k/or1k-opts.h
  97baa752f8b46ebaabe66d92886e19a2  gcc/config/or1k/or1k-protos.h
! 0a8ae0410b122f35e295f4cb8e352f01  gcc/config/or1k/or1k.cc
  fcbfb3ff3577f95c15cf20ae1c95b269  gcc/config/or1k/or1k.h
! 8e6970aea95e29050f5ced5e315ed756  gcc/config/or1k/or1k.md
  1ef170db4cf4943c3da6cf4ca8d5f674  gcc/config/or1k/or1k.opt
  08881bec5bba093b5cb1eddd91ef4014  gcc/config/or1k/or1k.opt.urls
! ac536539c6fc239c3ee1df15c3374ccb  gcc/config/or1k/predicates.md
  db8691a94f44f22cd2b192588632bb9b  gcc/config/or1k/rtems.h
  53bcb430048193eb051a76841ed97244  gcc/config/or1k/t-or1k
  f58d4380ee68891690f4302989ce00cb  gcc/config/or1k/t-rtems
*************** cd13b51383c99c08d86250b61fed3805  gcc/co
*** 4864,4872 ****
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
  05b752662704585fc33b14aaee77a880  gcc/config/riscv/autovec-opt.md
! 829cbcecbc17da1539fb79b7512d1523  gcc/config/riscv/autovec.md
  40e0e0684e3c3a934587129211c4674c  gcc/config/riscv/bitmanip.md
! c21886991e632848d5622ed5a3188f75  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
  d404c19d5b1a2aca0a73917bb692bd96  gcc/config/riscv/corev.md
  a8964e5c7fad78fa42fc5b8f0dc2e91b  gcc/config/riscv/crypto.md
--- 4866,4874 ----
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
  05b752662704585fc33b14aaee77a880  gcc/config/riscv/autovec-opt.md
! 47e29021b80dec813828275b077dd7be  gcc/config/riscv/autovec.md
  40e0e0684e3c3a934587129211c4674c  gcc/config/riscv/bitmanip.md
! 525889fe38728a8c0ab013c27cb9e4e8  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
  d404c19d5b1a2aca0a73917bb692bd96  gcc/config/riscv/corev.md
  a8964e5c7fad78fa42fc5b8f0dc2e91b  gcc/config/riscv/crypto.md
*************** d8e970a7377ae8ee7892f014d5bbc979  gcc/co
*** 4885,4896 ****
  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
  717dabcf24d5f1356542a7716b96af87  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
! 101863ce3311b29e3db167d642c7bcda  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
  790bd2a5355776ab5ebf4c7814489760  gcc/config/riscv/riscv-d.h
  9848282285cd3a3e21f6181f220f6ba9  gcc/config/riscv/riscv-ext-corev.def
--- 4887,4898 ----
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
! aa0207e67de9f5a818c1bbd8049e59fc  gcc/config/riscv/predicates.md
  d7a63bbbf6653fc311084e8bb09d713b  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  717dabcf24d5f1356542a7716b96af87  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
! 2eefa7fb591a8e7ee6cd5ea10ea84dc4  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
  790bd2a5355776ab5ebf4c7814489760  gcc/config/riscv/riscv-d.h
  9848282285cd3a3e21f6181f220f6ba9  gcc/config/riscv/riscv-ext-corev.def
*************** da4e034d23a8f2754b1dfce0122f286e  gcc/co
*** 4913,4919 ****
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
  b0db0a336461a6390b254a883b8b491a  gcc/config/riscv/riscv-subset.h
  be3e0da2403121c429e21501de9c9b5f  gcc/config/riscv/riscv-target-attr.cc
! b53ebbdbc714a755089dd8beed7fe44f  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
--- 4915,4921 ----
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
  b0db0a336461a6390b254a883b8b491a  gcc/config/riscv/riscv-subset.h
  be3e0da2403121c429e21501de9c9b5f  gcc/config/riscv/riscv-target-attr.cc
! b28f841ed84806ad5833d92370fdc994  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
*************** f51037a9e437f8e9ce7215b2da5ad4e2  gcc/co
*** 4931,4939 ****
  3c65f952c8116cc22f135cab9b639d28  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! ff94fb342535ff083459d6d5ef84e9b5  gcc/config/riscv/riscv.cc
! 1153302a8d65cedebba8e1a3f67931b2  gcc/config/riscv/riscv.h
! 00858c51cf358cbd4bf7e8ff69288203  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
--- 4933,4941 ----
  3c65f952c8116cc22f135cab9b639d28  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 390ed451a4d0ae3bc8460e8a3727ece7  gcc/config/riscv/riscv.cc
! 1e6d5c3cff4825c434ac203d43f0b5ab  gcc/config/riscv/riscv.h
! 8bd37a977d4889f918ddb12b34c3716b  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
*************** e83086f984717f1099ceeba6ce6bfb23  gcc/co
*** 4952,4958 ****
  b5fb046770f7e60fc485d6092c296c38  gcc/config/riscv/sifive_vector.h
  faca69fa18f3f779cd3ee4d6a53e6193  gcc/config/riscv/sync-rvwmo.md
  4dff560d8961c6dd9b4dd18c668c629e  gcc/config/riscv/sync-ztso.md
! 08edcccff9f3994996d3970c2a0da726  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
--- 4954,4960 ----
  b5fb046770f7e60fc485d6092c296c38  gcc/config/riscv/sifive_vector.h
  faca69fa18f3f779cd3ee4d6a53e6193  gcc/config/riscv/sync-rvwmo.md
  4dff560d8961c6dd9b4dd18c668c629e  gcc/config/riscv/sync-ztso.md
! e53f94de39b86b253fdb1472f9bacd9b  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
*************** bcf728ad2379630774fd5bb529d4ee86  gcc/co
*** 4967,4973 ****
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! 355b19a68e255b92c8088807630c3bc9  gcc/config/riscv/vector-iterators.md
  2aac5fc6721c093a0f679d0e14d196e1  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
--- 4969,4975 ----
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! c4272a5cb6f62d49d008d6e9c4d08328  gcc/config/riscv/vector-iterators.md
  2aac5fc6721c093a0f679d0e14d196e1  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
*************** ef292bd063751273e93912005054621c  gcc/co
*** 5452,5458 ****
  784e78d129e667eb51b57cd3bb4cf498  gcc/config/xtensa/elf.opt
  f140d72c4f00aa6f39295fedb6f6fc92  gcc/config/xtensa/elf.opt.urls
  7d826e1325729fc54de80be38daf7484  gcc/config/xtensa/linux.h
! c62fa42da120431da1d1d60a9a882b80  gcc/config/xtensa/predicates.md
  f3a2992c8e85b13e50b261e26924d83f  gcc/config/xtensa/t-xtensa
  4cf53f30f4e09026e45f314036f2449e  gcc/config/xtensa/uclinux.h
  4d05c7a063b0b89e0e6f4cf516e0da92  gcc/config/xtensa/uclinux.opt
--- 5454,5460 ----
  784e78d129e667eb51b57cd3bb4cf498  gcc/config/xtensa/elf.opt
  f140d72c4f00aa6f39295fedb6f6fc92  gcc/config/xtensa/elf.opt.urls
  7d826e1325729fc54de80be38daf7484  gcc/config/xtensa/linux.h
! dc6b3110ed80f72aaaeb0c195a8a79cd  gcc/config/xtensa/predicates.md
  f3a2992c8e85b13e50b261e26924d83f  gcc/config/xtensa/t-xtensa
  4cf53f30f4e09026e45f314036f2449e  gcc/config/xtensa/uclinux.h
  4d05c7a063b0b89e0e6f4cf516e0da92  gcc/config/xtensa/uclinux.opt
*************** f3a2992c8e85b13e50b261e26924d83f  gcc/co
*** 5460,5472 ****
  87fc5c87547999f715031b4ff99fb67b  gcc/config/xtensa/xtensa-dynconfig.cc
  c7be35a23fd70ac184dd9072319304c7  gcc/config/xtensa/xtensa-opts.h
  e59f31891252abdd41eedc784b25ed6b  gcc/config/xtensa/xtensa-protos.h
! c87ebf4d7ad05c1ea600369d7787d789  gcc/config/xtensa/xtensa.cc
! 5cb04061b3da377a69382a940d1039cf  gcc/config/xtensa/xtensa.h
! 1529b9459d4cc31cd134de367a0eb992  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
--- 5462,5474 ----
  87fc5c87547999f715031b4ff99fb67b  gcc/config/xtensa/xtensa-dynconfig.cc
  c7be35a23fd70ac184dd9072319304c7  gcc/config/xtensa/xtensa-opts.h
  e59f31891252abdd41eedc784b25ed6b  gcc/config/xtensa/xtensa-protos.h
! 3ed453dd0300bd28055ba98458f4d4ba  gcc/config/xtensa/xtensa.cc
! f378c965e5e289a389bbf48d20867d48  gcc/config/xtensa/xtensa.h
! b92f4879bce79aeae64e0091394f3cbe  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 42f695f2886b6633d0fa88889ba57cb7  gcc/configure
! 28fe6769b957f08aa39dc2b5d4f8b70d  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5476,5482 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  3a1ca7b4fe869dd9b031c27c8ad034e5  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 24ad750a444c4e52356195a8ea99555c  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5478,5484 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  3a1ca7b4fe869dd9b031c27c8ad034e5  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 6728c6a292b323fbf8394509524d89b8  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp
*** 5515,5542 ****
  b09d7ab3506bc7d8aeef0ddfbca588a9  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! 167833da56621df8026f51eb243c344a  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
  8e902985df4571deafc1c61f71e4250c  gcc/cp/constexpr.cc
! 3974710745a4b09b4184ea22766bf2d3  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
! acfeed39550eb3025efa8a24f7b36f18  gcc/cp/coroutines.cc
  be1619275f92c0a0eb6eb83c1e3c7f6b  gcc/cp/coroutines.h
  b001cf8db89c6befecfd660d313a1002  gcc/cp/cp-gimplify.cc
  3bf6da2fd9bef7475fae5ee6d9cdcf15  gcc/cp/cp-lang.cc
  0083c32822e7d365ab0074f1807e8679  gcc/cp/cp-name-hint.h
  7e2d2d0cd98f02686590d57bb37c0de9  gcc/cp/cp-objcp-common.cc
  acb30767d403ad5a0d7ae97437159ebe  gcc/cp/cp-objcp-common.h
! 144049f5deb1aa6987eb55e86f53cb45  gcc/cp/cp-trait.def
  ce9f2ccac9e2657417018bc8f8064421  gcc/cp/cp-tree.def
! a04ad43f75f38ae95c00784f77661ac8  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
  64450079a2dd9e5a8767bb5e4bf3d904  gcc/cp/cvt.cc
  28a2733b7abed60b2b102105bb7cebaf  gcc/cp/cxx-pretty-print.cc
  955ecfa636599a39229757737e271819  gcc/cp/cxx-pretty-print.h
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
! eb43f99a12121041f275f974cd5fd1b3  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
  a8747e45489cb64f2f4528a1973fcacf  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
--- 5517,5544 ----
  b09d7ab3506bc7d8aeef0ddfbca588a9  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! 7f90c136ac9f52e1ed04214c1334365d  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
  8e902985df4571deafc1c61f71e4250c  gcc/cp/constexpr.cc
! e6fa17ce8a5bb0d13dda2e770f29e9d3  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
! 78ed5e7da2c45931ed1e44da5f9040c9  gcc/cp/coroutines.cc
  be1619275f92c0a0eb6eb83c1e3c7f6b  gcc/cp/coroutines.h
  b001cf8db89c6befecfd660d313a1002  gcc/cp/cp-gimplify.cc
  3bf6da2fd9bef7475fae5ee6d9cdcf15  gcc/cp/cp-lang.cc
  0083c32822e7d365ab0074f1807e8679  gcc/cp/cp-name-hint.h
  7e2d2d0cd98f02686590d57bb37c0de9  gcc/cp/cp-objcp-common.cc
  acb30767d403ad5a0d7ae97437159ebe  gcc/cp/cp-objcp-common.h
! cbd62c9561857481942ff7b69278e505  gcc/cp/cp-trait.def
  ce9f2ccac9e2657417018bc8f8064421  gcc/cp/cp-tree.def
! c6f4b34e5f408e9f57853857df990ec7  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
  64450079a2dd9e5a8767bb5e4bf3d904  gcc/cp/cvt.cc
  28a2733b7abed60b2b102105bb7cebaf  gcc/cp/cxx-pretty-print.cc
  955ecfa636599a39229757737e271819  gcc/cp/cxx-pretty-print.h
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
! 42ffe9727e57e1d15b68c6611cb62019  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
  a8747e45489cb64f2f4528a1973fcacf  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
*************** aaf76a9b03fd0532d2904aef004fd66a  gcc/cp
*** 5556,5569 ****
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  600af25aec04b18064ff0ef80ac0e88d  gcc/cp/method.cc
! 57fffba05a90806e35bd63a82fa88cd2  gcc/cp/module.cc
  06f95ada11e42d69946cf7b65d247c53  gcc/cp/name-lookup.cc
  6e376c0a7ec6c4a14de40885e3b1a0cb  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 5aea05ba09eca18a85bcc111ddcee9ae  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
! 7dc15c0bd67345e2f2150fe02ebd0791  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
--- 5558,5571 ----
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  600af25aec04b18064ff0ef80ac0e88d  gcc/cp/method.cc
! b74d7d351d096f3c6a1af957c496992b  gcc/cp/module.cc
  06f95ada11e42d69946cf7b65d247c53  gcc/cp/name-lookup.cc
  6e376c0a7ec6c4a14de40885e3b1a0cb  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 0e528d878aaffedeabdd48917494f05e  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
! 88a5d5dc87b9b8f224a7e12894edba4b  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
*************** b58bf61fbfed45af179b7104e72a9486  gcc/cp
*** 5572,5578 ****
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  e3798db73e0b3e892e772acbe569a5b8  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! 13852edb69d95f44d9d68f38091e7966  gcc/cp/typeck.cc
  1fea2b59dbf93b59626d7546b3c1f738  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
--- 5574,5580 ----
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  e3798db73e0b3e892e772acbe569a5b8  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! 1deeec26546a4df393e29bd037bf434e  gcc/cp/typeck.cc
  1fea2b59dbf93b59626d7546b3c1f738  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
*************** e4d89cb5b2193b73b577d8871e0d8f3e  gcc/de
*** 5855,5861 ****
  b9d078b88658c87d713e175705b687be  gcc/df-problems.cc
  151d675229ec23b6da3f2cc6ee3d7367  gcc/df-scan.cc
  243e0658083f87e4b05d8914b98053c2  gcc/df.h
! 66523dd93f89ddda9400b525ef7736b9  gcc/dfp.cc
  3a50d04564ba93f9be134a744fdd40f1  gcc/dfp.h
  aa13c8ce0ee0d35ca8e78fef45b93463  gcc/diagnostic-buffer.h
  4b477754fac3d1dfcc21f651d641ea08  gcc/diagnostic-client-data-hooks.h
--- 5857,5863 ----
  b9d078b88658c87d713e175705b687be  gcc/df-problems.cc
  151d675229ec23b6da3f2cc6ee3d7367  gcc/df-scan.cc
  243e0658083f87e4b05d8914b98053c2  gcc/df.h
! b24ae235869e8ddfde6c45d41923f7ef  gcc/dfp.cc
  3a50d04564ba93f9be134a744fdd40f1  gcc/dfp.h
  aa13c8ce0ee0d35ca8e78fef45b93463  gcc/diagnostic-buffer.h
  4b477754fac3d1dfcc21f651d641ea08  gcc/diagnostic-client-data-hooks.h
*************** c8cf51c44328a35a27753d130a351bd5  gcc/di
*** 5888,5894 ****
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
  30426474001fe0a6629783aad6e8a163  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
! 1d51aeacb86eb0d9f17d56d33fbc71fe  gcc/diagnostic.h
  bec68218d528467fd119bf2cd02bc358  gcc/digraph.cc
  18e73120a6e21ceac1adce40777000cf  gcc/digraph.h
  bb82bca6383082ead28f6f21f0a6223f  gcc/doc/analyzer.texi
--- 5890,5896 ----
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
  30426474001fe0a6629783aad6e8a163  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
! d4749d21f4918831776571f1c5d5d07d  gcc/diagnostic.h
  bec68218d528467fd119bf2cd02bc358  gcc/digraph.cc
  18e73120a6e21ceac1adce40777000cf  gcc/digraph.h
  bb82bca6383082ead28f6f21f0a6223f  gcc/doc/analyzer.texi
*************** acdfc663791e4321372e79932070d05d  gcc/do
*** 5907,5920 ****
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! 9647269312fe86103e4018786240edbf  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
  5b1e6708c5ac4fb500ef658bfa6fe3d0  gcc/doc/gccint.texi
  943006b46b746ef59c5c1ab4f334a241  gcc/doc/gcov-dump.texi
  50c3a263a50fc4688ac3be5e8e8744ba  gcc/doc/gcov-tool.texi
! 6662694db9603d95a8c280ab3b6479ea  gcc/doc/gcov.texi
  cc49c44389e2d6e1bc60b761b5602112  gcc/doc/generic.texi
  6dd13335166acce8e899b838ecbd04bd  gcc/doc/gimple.texi
  9da760d0d109c3f78940f84365883d94  gcc/doc/gm2.texi
--- 5909,5922 ----
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! eb448c51f1d94130b38893c8469412c7  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
  5b1e6708c5ac4fb500ef658bfa6fe3d0  gcc/doc/gccint.texi
  943006b46b746ef59c5c1ab4f334a241  gcc/doc/gcov-dump.texi
  50c3a263a50fc4688ac3be5e8e8744ba  gcc/doc/gcov-tool.texi
! 8700253b7c491bd8902f580c7dcff6dc  gcc/doc/gcov.texi
  cc49c44389e2d6e1bc60b761b5602112  gcc/doc/generic.texi
  6dd13335166acce8e899b838ecbd04bd  gcc/doc/gimple.texi
  9da760d0d109c3f78940f84365883d94  gcc/doc/gm2.texi
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 5929,5937 ****
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 06dd852aca896064e0cb6880890cc9c3  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! aafa6ea957f89d7ca135063a7a59a5f0  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 5931,5939 ----
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 8e229b4231160873fbe34414e9f77cf9  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! b19b6280b81373c8d1a052937145c8d8  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** baaae59ceda4df837a6f62ffb0f29ee7  gcc/dw
*** 6008,6014 ****
  fdd976759ee89958c91a4010e53c0f02  gcc/early-remat.cc
  e0339faf7da1ffc9030bc3a53b41cc1c  gcc/edit-context.cc
  237d0c79a98880d977007c3345019bf8  gcc/edit-context.h
! fc08cb49c66efe26457bf6640fe4b649  gcc/emit-rtl.cc
  958b8dfdb92b879b9cbab057e540c587  gcc/emit-rtl.h
  22fb4d062235835cdf34b4077884887d  gcc/errors.cc
  7109c06aed199f804c8906e6febd8c9f  gcc/errors.h
--- 6010,6016 ----
  fdd976759ee89958c91a4010e53c0f02  gcc/early-remat.cc
  e0339faf7da1ffc9030bc3a53b41cc1c  gcc/edit-context.cc
  237d0c79a98880d977007c3345019bf8  gcc/edit-context.h
! 0fa3f12b9f441f701d99e167274a0961  gcc/emit-rtl.cc
  958b8dfdb92b879b9cbab057e540c587  gcc/emit-rtl.h
  22fb4d062235835cdf34b4077884887d  gcc/errors.cc
  7109c06aed199f804c8906e6febd8c9f  gcc/errors.h
*************** a4ee0bae47797ce73f05daef7a07edd4  gcc/ex
*** 6024,6030 ****
  dee0d85cc89e81b4cc185f1c3102811e  gcc/expmed.h
  de0db91482e3d0889769a83bc7e854dc  gcc/expr.cc
  5480b0f834e382e22c92192d7f5a4744  gcc/expr.h
! 6023e86ee70f68a65ad9ecb5735697ae  gcc/ext-dce.cc
  2ecf474a8f5380e5027c5b7a745cd736  gcc/fibonacci_heap.cc
  4e78fbbdb0a8c835b984d732a6d97a7b  gcc/fibonacci_heap.h
  ee644c05e4a3461a8c2f5a4a5ea285bd  gcc/file-find.cc
--- 6026,6032 ----
  dee0d85cc89e81b4cc185f1c3102811e  gcc/expmed.h
  de0db91482e3d0889769a83bc7e854dc  gcc/expr.cc
  5480b0f834e382e22c92192d7f5a4744  gcc/expr.h
! 197524ebed39ef2a97ae6bd4b1f00b4f  gcc/ext-dce.cc
  2ecf474a8f5380e5027c5b7a745cd736  gcc/fibonacci_heap.cc
  4e78fbbdb0a8c835b984d732a6d97a7b  gcc/fibonacci_heap.h
  ee644c05e4a3461a8c2f5a4a5ea285bd  gcc/file-find.cc
*************** a798cdca802a57ffa3473ab610b37c86  gcc/fo
*** 6041,6047 ****
  62673b998414c05d123a9e3cc51be1d9  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! c4ce51eec5965561a71065e614ae0b61  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6043,6049 ----
  62673b998414c05d123a9e3cc51be1d9  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 6e21f4fbfc7e3a7df5658fae27be5215  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** db21881c77a22fd3dbfe253c364af5ee  gcc/fo
*** 6071,6077 ****
  6b01ec523f3bee8e2469370d106896e3  gcc/fortran/arith.h
  1f47886d616538f880e240f661990624  gcc/fortran/array.cc
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
! 1462def6554f5d5387d0168e32b6b9b6  gcc/fortran/check.cc
  ec152c8d16c33705590d8b2ddbcad0b7  gcc/fortran/class.cc
  60b1462a2f8d5fc08582de65eb85c8da  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
--- 6073,6079 ----
  6b01ec523f3bee8e2469370d106896e3  gcc/fortran/arith.h
  1f47886d616538f880e240f661990624  gcc/fortran/array.cc
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
! ed5a7b91a8e3e25ff4fd799b715fcd30  gcc/fortran/check.cc
  ec152c8d16c33705590d8b2ddbcad0b7  gcc/fortran/class.cc
  60b1462a2f8d5fc08582de65eb85c8da  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
*************** af66ab40a5434219772b76ad10035e45  gcc/fo
*** 6098,6104 ****
  aea31b73f1b7395d6302c57cbbf4bacf  gcc/fortran/interface.cc
  18ca0ff7b9d543b25078031bfadf0d2f  gcc/fortran/intrinsic.cc
  751fb9c42a3297fe53e0e7de9564bb27  gcc/fortran/intrinsic.h
! b60821013312d0f84ade44881788b884  gcc/fortran/intrinsic.texi
  4a7f5923c18268b245556ded8e9ba554  gcc/fortran/invoke.texi
  40352b9b20b1301c44326264b3f12cd1  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
--- 6100,6106 ----
  aea31b73f1b7395d6302c57cbbf4bacf  gcc/fortran/interface.cc
  18ca0ff7b9d543b25078031bfadf0d2f  gcc/fortran/intrinsic.cc
  751fb9c42a3297fe53e0e7de9564bb27  gcc/fortran/intrinsic.h
! e201f79869851c4fac61004ffd907741  gcc/fortran/intrinsic.texi
  4a7f5923c18268b245556ded8e9ba554  gcc/fortran/invoke.texi
  40352b9b20b1301c44326264b3f12cd1  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
*************** e0ae917f78fe49a1e67153dca52a68b2  gcc/fo
*** 6120,6126 ****
  4dc9068325ab8f3c2ac3f22ee80283da  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
! 062a6b3178d3ac0121e8d26b61d58185  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
--- 6122,6128 ----
  4dc9068325ab8f3c2ac3f22ee80283da  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
! e7c28cced34260d6ac3cf77ca856618f  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
*************** d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fo
*** 6128,6134 ****
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! 99a62aecb245ac7add34159ffc6cca1d  gcc/fortran/trans-array.cc
  a4f5f15bbfd3cf3b780e3a8875ebf0df  gcc/fortran/trans-array.h
  134a72b3349d427eccb35198acc48a71  gcc/fortran/trans-common.cc
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
--- 6130,6136 ----
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! 2606769ec348e86fa60fa39bd6871ddf  gcc/fortran/trans-array.cc
  a4f5f15bbfd3cf3b780e3a8875ebf0df  gcc/fortran/trans-array.h
  134a72b3349d427eccb35198acc48a71  gcc/fortran/trans-common.cc
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
*************** f574663ce227d0be2e77015c008d708b  gcc/fp
*** 6150,6156 ****
  7d49ef8f960daad31201f864eb1933d9  gcc/function-abi.cc
  12d3c07e3c878f7237f904820da28c93  gcc/function-abi.h
  6e9698e4411a03357b6e2b60bc91c827  gcc/function-tests.cc
! 389fbe3fbd033ac11caeb4c52d344a91  gcc/function.cc
  da5d04420f440a4a085dc91d92c6bfbb  gcc/function.h
  3c08c56c1de3b165b954ab5c185284c5  gcc/fwprop.cc
  261433f3124bfa2a1421c42d657e0560  gcc/gcc-ar.cc
--- 6152,6158 ----
  7d49ef8f960daad31201f864eb1933d9  gcc/function-abi.cc
  12d3c07e3c878f7237f904820da28c93  gcc/function-abi.h
  6e9698e4411a03357b6e2b60bc91c827  gcc/function-tests.cc
! df79cb3564c4cc0893489ca92edc7ebb  gcc/function.cc
  da5d04420f440a4a085dc91d92c6bfbb  gcc/function.h
  3c08c56c1de3b165b954ab5c185284c5  gcc/fwprop.cc
  261433f3124bfa2a1421c42d657e0560  gcc/gcc-ar.cc
*************** fc01aba2ef6a14714b1f93c8cf4194e4  gcc/gi
*** 6227,6233 ****
  d6f9bd05a0669c41ec48c604502d60cf  gcc/gimple-array-bounds.h
  da09d1e31d3994eb3d6958074d7b7ce5  gcc/gimple-builder.cc
  50314e0ad6c6defd28ef9aa5216d4622  gcc/gimple-builder.h
! 613cd84d6a9d33c8a47ce0b484fe65cc  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
  981494f0e6d65629db4c3af73f29109f  gcc/gimple-fold.cc
--- 6229,6235 ----
  d6f9bd05a0669c41ec48c604502d60cf  gcc/gimple-array-bounds.h
  da09d1e31d3994eb3d6958074d7b7ce5  gcc/gimple-builder.cc
  50314e0ad6c6defd28ef9aa5216d4622  gcc/gimple-builder.h
! fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
  981494f0e6d65629db4c3af73f29109f  gcc/gimple-fold.cc
*************** eec072fb4c8277a3634cf4cdc0846598  gcc/in
*** 6441,6447 ****
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! 3d9360ea74446677dbd69b8559883761  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
  2956ae29acd688fd2229744edabdc027  gcc/ipa-fnsummary.cc
--- 6443,6449 ----
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! e56c512eb32210ae6869420bb1bec161  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
  2956ae29acd688fd2229744edabdc027  gcc/ipa-fnsummary.cc
*************** fef6f27045737cc29ebf2dbbd22dda02  gcc/ip
*** 6453,6459 ****
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  afa2616e2d58a9137deaabc102d2d7c1  gcc/ipa-inline-analysis.cc
  8aeea7e05b0080b60353a926b88ee97d  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
--- 6455,6461 ----
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  afa2616e2d58a9137deaabc102d2d7c1  gcc/ipa-inline-analysis.cc
  8aeea7e05b0080b60353a926b88ee97d  gcc/ipa-inline-transform.cc
! aa900dc6c4c8d7ff0ed09280bbb7a6fe  gcc/ipa-inline.cc
  229bac80ef5400801cf4edfd97790ef8  gcc/ipa-inline.h
  19c0cbbd70e071bd63dbb0527d02423e  gcc/ipa-locality-cloning.cc
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
*************** d33136e7edecd120aa035f0e1ad240b0  gcc/ip
*** 6466,6472 ****
  319746b89d79d8638999fe7b6aad58ef  gcc/ipa-polymorphic-call.cc
  83c011375208cf1307980bcb1b18b67a  gcc/ipa-predicate.cc
  3290558dca39b32c0ca581e6c3427551  gcc/ipa-predicate.h
! efab6d5ed309040ea34311e2e35802fe  gcc/ipa-profile.cc
  be8b91a88b033749209c11844ab4ebd7  gcc/ipa-prop.cc
  769c7da3be6c74b69be2f9572626e59f  gcc/ipa-prop.h
  1ab3b52af464e998b39403664a5ee0c4  gcc/ipa-pure-const.cc
--- 6468,6474 ----
  319746b89d79d8638999fe7b6aad58ef  gcc/ipa-polymorphic-call.cc
  83c011375208cf1307980bcb1b18b67a  gcc/ipa-predicate.cc
  3290558dca39b32c0ca581e6c3427551  gcc/ipa-predicate.h
! fa8b12710ac89ee0802b55aec4fe4cda  gcc/ipa-profile.cc
  be8b91a88b033749209c11844ab4ebd7  gcc/ipa-prop.cc
  769c7da3be6c74b69be2f9572626e59f  gcc/ipa-prop.h
  1ab3b52af464e998b39403664a5ee0c4  gcc/ipa-pure-const.cc
*************** e44c0bf9cc0411d7bd57c6585eb6d0e4  gcc/lt
*** 6664,6670 ****
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 49e81864a5c606da37b86ac271ebaef5  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6666,6672 ----
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 3f8a9ff9f33398233a1d15c800241ad3  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** f2f6ad340399124ac1dd7765e1b675a5  gcc/m2
*** 6721,6727 ****
  9ef5089ff86e26a81035ec039bdc6650  gcc/m2/gm2-compiler/M2FileName.def
  742f1dc44d1ac7917fcbaf8704bdb395  gcc/m2/gm2-compiler/M2FileName.mod
  b3c98d490dd50cdd4e4de316e0deca54  gcc/m2/gm2-compiler/M2GCCDeclare.def
! 0334dee0562359e9a335b23e63acc113  gcc/m2/gm2-compiler/M2GCCDeclare.mod
  3d68446acff53fae7c5d6c425f0cf67e  gcc/m2/gm2-compiler/M2GenGCC.def
  27671eb59c0f3868cece3d034a2b15cd  gcc/m2/gm2-compiler/M2GenGCC.mod
  273c623529a07acbf2f80b58e2d7567e  gcc/m2/gm2-compiler/M2Graph.def
--- 6723,6729 ----
  9ef5089ff86e26a81035ec039bdc6650  gcc/m2/gm2-compiler/M2FileName.def
  742f1dc44d1ac7917fcbaf8704bdb395  gcc/m2/gm2-compiler/M2FileName.mod
  b3c98d490dd50cdd4e4de316e0deca54  gcc/m2/gm2-compiler/M2GCCDeclare.def
! 5b42ae2b2bea2b053a252452ce4b57bd  gcc/m2/gm2-compiler/M2GCCDeclare.mod
  3d68446acff53fae7c5d6c425f0cf67e  gcc/m2/gm2-compiler/M2GenGCC.def
  27671eb59c0f3868cece3d034a2b15cd  gcc/m2/gm2-compiler/M2GenGCC.mod
  273c623529a07acbf2f80b58e2d7567e  gcc/m2/gm2-compiler/M2Graph.def
*************** cccf272bab8c31a6af4113dc6a4e7b2d  gcc/m2
*** 6733,6739 ****
  a45ab5cf82c6f9afcaac634dd94f9e74  gcc/m2/gm2-compiler/M2LexBuf.def
  b112f4dc73573695c3456ad0128babea  gcc/m2/gm2-compiler/M2LexBuf.mod
  ce8b84d06b3a3f63e9c45f9a9d2c20ec  gcc/m2/gm2-compiler/M2MetaError.def
! e0b507413bb6cd0581c5eae75886518e  gcc/m2/gm2-compiler/M2MetaError.mod
  30199ab614068ba2ade7649d91420d13  gcc/m2/gm2-compiler/M2Optimize.def
  6b138f381fa3bee219d0c362567bbcb0  gcc/m2/gm2-compiler/M2Optimize.mod
  4de3b1a67e6b8567572dd9a344366b3b  gcc/m2/gm2-compiler/M2Options.def
--- 6735,6741 ----
  a45ab5cf82c6f9afcaac634dd94f9e74  gcc/m2/gm2-compiler/M2LexBuf.def
  b112f4dc73573695c3456ad0128babea  gcc/m2/gm2-compiler/M2LexBuf.mod
  ce8b84d06b3a3f63e9c45f9a9d2c20ec  gcc/m2/gm2-compiler/M2MetaError.def
! d5fe10cebe9d9d283ec9fd8a1f255175  gcc/m2/gm2-compiler/M2MetaError.mod
  30199ab614068ba2ade7649d91420d13  gcc/m2/gm2-compiler/M2Optimize.def
  6b138f381fa3bee219d0c362567bbcb0  gcc/m2/gm2-compiler/M2Optimize.mod
  4de3b1a67e6b8567572dd9a344366b3b  gcc/m2/gm2-compiler/M2Options.def
*************** f84c328e57949cf1d3f9714ac54e6423  gcc/m2
*** 6794,6800 ****
  dfc36d5f0832b9dd188d6557ffef76d3  gcc/m2/gm2-compiler/P2Build.bnf
  5d3aa3c32f62966992c31b5bd6fe9bdb  gcc/m2/gm2-compiler/P2Build.def
  7d034c383eee29111871cfe944a77b96  gcc/m2/gm2-compiler/P2SymBuild.def
! 59bcfdf13f9e458685b5b91da6fc5bdb  gcc/m2/gm2-compiler/P2SymBuild.mod
  3fd9aa5301c284bb3b4ee2d6479b711b  gcc/m2/gm2-compiler/P3Build.bnf
  41f585d1e8e6fd1786dd36cb69cf3e82  gcc/m2/gm2-compiler/P3Build.def
  ad7a010b25f95dc012f12d3c97133a4b  gcc/m2/gm2-compiler/P3SymBuild.def
--- 6796,6802 ----
  dfc36d5f0832b9dd188d6557ffef76d3  gcc/m2/gm2-compiler/P2Build.bnf
  5d3aa3c32f62966992c31b5bd6fe9bdb  gcc/m2/gm2-compiler/P2Build.def
  7d034c383eee29111871cfe944a77b96  gcc/m2/gm2-compiler/P2SymBuild.def
! caa873bb1109b87a03db4edde0bca2dc  gcc/m2/gm2-compiler/P2SymBuild.mod
  3fd9aa5301c284bb3b4ee2d6479b711b  gcc/m2/gm2-compiler/P3Build.bnf
  41f585d1e8e6fd1786dd36cb69cf3e82  gcc/m2/gm2-compiler/P3Build.def
  ad7a010b25f95dc012f12d3c97133a4b  gcc/m2/gm2-compiler/P3SymBuild.def
*************** dbd2f1220cd00cb166d430e11003798c  gcc/m2
*** 7124,7131 ****
  856bb5f6b8f838bb3b97497fe621a6cc  gcc/m2/gm2-libs-log/RealConversions.mod
  4f74af695bdb36d6459b399529d1d885  gcc/m2/gm2-libs-log/RealInOut.def
  ce44025754e0820981b9e02283f5870e  gcc/m2/gm2-libs-log/RealInOut.mod
! fe1be55a46a939f7a405a22881b0f687  gcc/m2/gm2-libs-log/Strings.def
! db1694f61023246efd23d237eb996c21  gcc/m2/gm2-libs-log/Strings.mod
  1d939ca3cbaea49fa509701d1d4b8939  gcc/m2/gm2-libs-log/Termbase.def
  63ff4644bc359f6d9109230a394d407c  gcc/m2/gm2-libs-log/Termbase.mod
  42b80fc3e8510dee78249d5e7a87c6db  gcc/m2/gm2-libs-log/Terminal.def
--- 7126,7133 ----
  856bb5f6b8f838bb3b97497fe621a6cc  gcc/m2/gm2-libs-log/RealConversions.mod
  4f74af695bdb36d6459b399529d1d885  gcc/m2/gm2-libs-log/RealInOut.def
  ce44025754e0820981b9e02283f5870e  gcc/m2/gm2-libs-log/RealInOut.mod
! 8c6c0b7ec2010aa39e9a7b9c4ce06fda  gcc/m2/gm2-libs-log/Strings.def
! 35444e4764abdaec69775a8063ce2f6b  gcc/m2/gm2-libs-log/Strings.mod
  1d939ca3cbaea49fa509701d1d4b8939  gcc/m2/gm2-libs-log/Termbase.def
  63ff4644bc359f6d9109230a394d407c  gcc/m2/gm2-libs-log/Termbase.mod
  42b80fc3e8510dee78249d5e7a87c6db  gcc/m2/gm2-libs-log/Terminal.def
*************** cb2a8c86939322e491658cba12c21c2f  gcc/om
*** 7668,7674 ****
  73fb62acbdd74e28aff8cc147ee7fa11  gcc/omp-low.h
  bf774332919d8fc6ad76372ccefd0aa2  gcc/omp-oacc-kernels-decompose.cc
  51e7c46004876244d3f23ab786112c1a  gcc/omp-oacc-neuter-broadcast.cc
! 42390815a426f073b94d3b1ab2aeb263  gcc/omp-offload.cc
  63335117e85d88f9866c3d00e2c1c163  gcc/omp-offload.h
  d5704680057b6bdba79f8e9d433cc12c  gcc/omp-selectors.h
  c82a0618eb76ff551736f55281d0c66c  gcc/omp-simd-clone.cc
--- 7670,7676 ----
  73fb62acbdd74e28aff8cc147ee7fa11  gcc/omp-low.h
  bf774332919d8fc6ad76372ccefd0aa2  gcc/omp-oacc-kernels-decompose.cc
  51e7c46004876244d3f23ab786112c1a  gcc/omp-oacc-neuter-broadcast.cc
! e5f5c700eae6affedb70e80bd1956763  gcc/omp-offload.cc
  63335117e85d88f9866c3d00e2c1c163  gcc/omp-offload.h
  d5704680057b6bdba79f8e9d433cc12c  gcc/omp-selectors.h
  c82a0618eb76ff551736f55281d0c66c  gcc/omp-simd-clone.cc
*************** ed550d9201c53b2e183ac8da7882fb20  gcc/pr
*** 7759,7772 ****
  445beb21a2f28b79808b2eebd0fe4856  gcc/pretty-print-urlifier.h
  789a283532c12d0634290baa6a4de8dc  gcc/pretty-print.cc
  191fccc415dd02373e9969178df93d03  gcc/pretty-print.h
! 0ca12a1ce54abc07cff889e360731637  gcc/prime-paths.cc
  a6e4e4fab174379976dcb09269c8de98  gcc/print-rtl-function.cc
  a5461dd81ec55dc6f56817a1f356f345  gcc/print-rtl.cc
  63499dea0e911b175def4a9153353027  gcc/print-rtl.h
  25b31c9113a977129e37056b6c5fd751  gcc/print-tree.cc
  469848c1e480b033f7ee22f68ec05f94  gcc/print-tree.h
! a559f8db8fdf600017e3fe66abf3d494  gcc/profile-count.cc
! baf3f698b3459c32f628569084b80d9c  gcc/profile-count.h
  be294583d74c167da1819e51e9001b52  gcc/profile.cc
  d30f617ac9705fc7dc5d14e744fe4ff0  gcc/profile.h
  555a319d44f0f4857aa378a1691e1d27  gcc/range-op-float.cc
--- 7761,7774 ----
  445beb21a2f28b79808b2eebd0fe4856  gcc/pretty-print-urlifier.h
  789a283532c12d0634290baa6a4de8dc  gcc/pretty-print.cc
  191fccc415dd02373e9969178df93d03  gcc/pretty-print.h
! 3612c0ba4344ce8d21ab5bab244d397b  gcc/prime-paths.cc
  a6e4e4fab174379976dcb09269c8de98  gcc/print-rtl-function.cc
  a5461dd81ec55dc6f56817a1f356f345  gcc/print-rtl.cc
  63499dea0e911b175def4a9153353027  gcc/print-rtl.h
  25b31c9113a977129e37056b6c5fd751  gcc/print-tree.cc
  469848c1e480b033f7ee22f68ec05f94  gcc/print-tree.h
! a5fbacfb851b89168fc63a8d1b2598ef  gcc/profile-count.cc
! 127716370a7f778cb89f3e7c4ce094ae  gcc/profile-count.h
  be294583d74c167da1819e51e9001b52  gcc/profile.cc
  d30f617ac9705fc7dc5d14e744fe4ff0  gcc/profile.h
  555a319d44f0f4857aa378a1691e1d27  gcc/range-op-float.cc
*************** e8038f0b65555e326f704a4460123122  gcc/re
*** 7781,7787 ****
  3dd0d65025f58dfce5d6c65cbf460d0a  gcc/read-rtl-function.cc
  cd83aae447be541259a39119965eecb3  gcc/read-rtl-function.h
  9682aead4a158a567da54b3f2e28b405  gcc/read-rtl.cc
! 4e15a5539de152fbb517e87ebb0b0875  gcc/real.cc
  cfd72298c4b4412115571bb0330d1cb4  gcc/real.h
  45eaf15130a976ff2f72716853fe77c6  gcc/realmpfr.cc
  ec455f45b6b3263f840fb385563308d7  gcc/realmpfr.h
--- 7783,7789 ----
  3dd0d65025f58dfce5d6c65cbf460d0a  gcc/read-rtl-function.cc
  cd83aae447be541259a39119965eecb3  gcc/read-rtl-function.h
  9682aead4a158a567da54b3f2e28b405  gcc/read-rtl.cc
! 89ebe9b9c5342412d37a6014678c865b  gcc/real.cc
  cfd72298c4b4412115571bb0330d1cb4  gcc/real.h
  45eaf15130a976ff2f72716853fe77c6  gcc/realmpfr.cc
  ec455f45b6b3263f840fb385563308d7  gcc/realmpfr.h
*************** add2ef65d80adc09236eaff62179a1fe  gcc/rt
*** 7833,7840 ****
  f39c55472711c984059aff01fd972f31  gcc/rtl-tests.cc
  1105088521e8de72d332faeda31306c7  gcc/rtl.cc
  41ece3c6a40e9a14609645318016e228  gcc/rtl.def
! 45a03e4de1b2ffb9033607fb2c48a4e8  gcc/rtl.h
! 64d226d9414797f6f39beaac6975ea67  gcc/rtlanal.cc
  e38f02dbd2d0d8c027ccae4b785f3fb2  gcc/rtlanal.h
  f829c444b36f34672cb4a7b019c4513b  gcc/rtlhash.cc
  ce0129afbbfb3ab85e5bd8ce9672117d  gcc/rtlhash.h
--- 7835,7842 ----
  f39c55472711c984059aff01fd972f31  gcc/rtl-tests.cc
  1105088521e8de72d332faeda31306c7  gcc/rtl.cc
  41ece3c6a40e9a14609645318016e228  gcc/rtl.def
! 2faad00da5b4bafb2dae7b3f35486db7  gcc/rtl.h
! d703ba294024df6233d56f22d1a7f401  gcc/rtlanal.cc
  e38f02dbd2d0d8c027ccae4b785f3fb2  gcc/rtlanal.h
  f829c444b36f34672cb4a7b019c4513b  gcc/rtlhash.cc
  ce0129afbbfb3ab85e5bd8ce9672117d  gcc/rtlhash.h
*************** fdc04e5af7ee387dce07c6ba9a99eaa8  gcc/se
*** 8373,8379 ****
  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
--- 8375,8381 ----
  50d9999185408bcae454174489317b68  gcc/signop.h
  c3069c84ca5c36bf2bde3a7644ce7130  gcc/simple-diagnostic-path.cc
  4155965d1db5d3c178f502d51e128b2f  gcc/simple-diagnostic-path.h
! 69be67be8ae9d985309259e0c8c8f361  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
  599fc125220850c86939202313a6f733  gcc/sparseset.cc
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8427,8433 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 707ec69cc9a2b5c29540c12f577a7e0d  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8429,8435 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 768637c47d495c2341b88a3b18925b25  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** e272ef3520e23457da8ff42e7d7411cb  gcc/te
*** 21711,21716 ****
--- 21713,21719 ----
  a3a3822acc6c0ae0b1c800209c7c3369  gcc/testsuite/g++.dg/conversion/to-virtual-base-1.C
  7a062897a2b4fb8f55640e4a532239dd  gcc/testsuite/g++.dg/conversion/void1.C
  11a0651cbba544a16a3a99edc6dd1232  gcc/testsuite/g++.dg/conversion/void2.C
+ 0ac77b28b37707df51a1cdf4180006e6  gcc/testsuite/g++.dg/coroutines/assume.C
  328c92600a7878c243c41f5fbc6d94ff  gcc/testsuite/g++.dg/coroutines/co-await-initlist1.C
  ada1ece7347c7f19252ad084712f97d6  gcc/testsuite/g++.dg/coroutines/co-await-initlist2.C
  f74a9d1bf6640b367d56a51317dbd163  gcc/testsuite/g++.dg/coroutines/co-await-moveonly1.C
*************** d94eaf98fb64f996342be49a4c220def  gcc/te
*** 21827,21833 ****
  d1a28daa3c4755a0f709ca07f8c48994  gcc/testsuite/g++.dg/coroutines/pr115858.C
  8496292f23f33e07ff0fe7b9e8f1eb91  gcc/testsuite/g++.dg/coroutines/pr115906-yield.C
  9514f224b21eb90bcef5ab37ae609a92  gcc/testsuite/g++.dg/coroutines/pr115906.C
- 01c2de3b3768a7f47dcc1b1c38515ee9  gcc/testsuite/g++.dg/coroutines/pr115908.C
  b75b654187426934820f1e2a8a63aaad  gcc/testsuite/g++.dg/coroutines/pr116327-preview-this.C
  36259c7c65f78b7358d2efa4fb0a9e54  gcc/testsuite/g++.dg/coroutines/pr116482.C
  808c70848e15a3d82e09b131dabb149b  gcc/testsuite/g++.dg/coroutines/pr116502.C
--- 21830,21835 ----
*************** a086058df225e5fda842f4ebd12d6dbd  gcc/te
*** 21836,21841 ****
--- 21838,21844 ----
  59d8e6cfa9a450642b4a378751f44e8a  gcc/testsuite/g++.dg/coroutines/pr116793-1.C
  16df01e113e50e8969f23cb32c1ab8fd  gcc/testsuite/g++.dg/coroutines/pr116880.C
  6f5d9f0541a73db813050efb87fec0d6  gcc/testsuite/g++.dg/coroutines/pr118903.C
+ 4ba2a97e93d914ad5510f0a3df7d5dba  gcc/testsuite/g++.dg/coroutines/pr120273.C
  639bf3d722d542a1aab7bcbf3114716a  gcc/testsuite/g++.dg/coroutines/pr120453.C
  5e0a6f554522f0537a21112c91d33895  gcc/testsuite/g++.dg/coroutines/pr120495.C
  cbb42d13b1660a8eb1d40a3d88308140  gcc/testsuite/g++.dg/coroutines/pr93458-1-missing-traits.C
*************** d70e1067c46528fe83662185c66bef45  gcc/te
*** 22010,22015 ****
--- 22013,22019 ----
  ab314765ac0eb201bb3e11222207ee40  gcc/testsuite/g++.dg/coroutines/torture/pr109867.C
  25fa35420b604bea9857061f35656b5b  gcc/testsuite/g++.dg/coroutines/torture/pr113773.C
  90760c8a1f8f820b4edb0f623596ca78  gcc/testsuite/g++.dg/coroutines/torture/pr115905.C
+ 0028a1a5c1c37a5572baeb20adcf1a82  gcc/testsuite/g++.dg/coroutines/torture/pr115908.C
  980fc5bc26d63a8dc9bc8ac151650f40  gcc/testsuite/g++.dg/coroutines/torture/pr118874.C
  f5e05a528274f5ccbd128504d532f540  gcc/testsuite/g++.dg/coroutines/torture/pr119916.C
  33c54ba08ef1e709e2fb67d90cc048b4  gcc/testsuite/g++.dg/coroutines/torture/pr92933.C
*************** f5e05a528274f5ccbd128504d532f540  gcc/te
*** 22022,22036 ****
  e31d7e9c9741a6022f86423a2dc05bf0  gcc/testsuite/g++.dg/coroutines/torture/pr95519-05-gro.C
  f8ced3c48c7b4157a0ce42b6357a57e1  gcc/testsuite/g++.dg/coroutines/torture/pr95519-06-grooaf.C
  a1d47e00d8d93531524293eaeb79d679  gcc/testsuite/g++.dg/coroutines/torture/pr95519-07-unhandled-exception.C
! c5d894e875c93d964067c3d3f2840963  gcc/testsuite/g++.dg/coroutines/torture/pr95615-01.C
! c4c4d941093caafa7fa4360b5d87ebda  gcc/testsuite/g++.dg/coroutines/torture/pr95615-02.C
! 5530bd9067a590a4775e1e93032ae665  gcc/testsuite/g++.dg/coroutines/torture/pr95615-03.C
! f0b8bd59fbe4178958a8d3d093454011  gcc/testsuite/g++.dg/coroutines/torture/pr95615-04.C
! fbd5b9659b98a2782504a53f6a2ed13a  gcc/testsuite/g++.dg/coroutines/torture/pr95615-05.C
! bc3eb934e3efbca87efc62810de25ebb  gcc/testsuite/g++.dg/coroutines/torture/pr95615.inc
  0c46a0da3de6e20a370e03838d0a76dd  gcc/testsuite/g++.dg/coroutines/torture/pr98704.C
  5e7bca6d14a61fe329d1a4e54dd0d041  gcc/testsuite/g++.dg/coroutines/torture/special-termination-00-sync-completion.C
  729d7261244a4b93f8caf0dadbea7c82  gcc/testsuite/g++.dg/coroutines/torture/special-termination-01-self-destruct.C
  074cd02b7474e8119248041c10f08ad3  gcc/testsuite/g++.dg/cpp/_Pragma1.C
  8ce78309bd631829da82f2798d24d628  gcc/testsuite/g++.dg/cpp/c++98-pedantic.C
  731959b0908b124d4eee4dab104d68bb  gcc/testsuite/g++.dg/cpp/c++98.C
--- 22026,22046 ----
  e31d7e9c9741a6022f86423a2dc05bf0  gcc/testsuite/g++.dg/coroutines/torture/pr95519-05-gro.C
  f8ced3c48c7b4157a0ce42b6357a57e1  gcc/testsuite/g++.dg/coroutines/torture/pr95519-06-grooaf.C
  a1d47e00d8d93531524293eaeb79d679  gcc/testsuite/g++.dg/coroutines/torture/pr95519-07-unhandled-exception.C
! d82e0c0f07010e61dd18cb83f8c2057b  gcc/testsuite/g++.dg/coroutines/torture/pr95615-00-nothing-throws.C
! c4c4d941093caafa7fa4360b5d87ebda  gcc/testsuite/g++.dg/coroutines/torture/pr95615-01-promise-ctor-throws.C
! 5530bd9067a590a4775e1e93032ae665  gcc/testsuite/g++.dg/coroutines/torture/pr95615-02-get-return-object-throws.C
! c5d894e875c93d964067c3d3f2840963  gcc/testsuite/g++.dg/coroutines/torture/pr95615-03-initial-suspend-throws.C
! f0b8bd59fbe4178958a8d3d093454011  gcc/testsuite/g++.dg/coroutines/torture/pr95615-04-initial-await-ready-throws.C
! fbd5b9659b98a2782504a53f6a2ed13a  gcc/testsuite/g++.dg/coroutines/torture/pr95615-05-initial-await-suspend-throws.C
! bdd30a73b1365621820d564740c53d71  gcc/testsuite/g++.dg/coroutines/torture/pr95615-06-initial-await-resume-throws.C
! 39c96ceeab4854929c3d9a217f5423cc  gcc/testsuite/g++.dg/coroutines/torture/pr95615-07-body-throws.C
! 1d02f63a995e0883f0ad09bc49f3a816  gcc/testsuite/g++.dg/coroutines/torture/pr95615-08-initial-suspend-throws-uhe-throws.C
! 3ee461e682d9360fa4d43d551ba5c1cf  gcc/testsuite/g++.dg/coroutines/torture/pr95615-09-body-throws-uhe-throws.C
! 8ae590f83f84cf2460b308be265813e9  gcc/testsuite/g++.dg/coroutines/torture/pr95615.inc
  0c46a0da3de6e20a370e03838d0a76dd  gcc/testsuite/g++.dg/coroutines/torture/pr98704.C
  5e7bca6d14a61fe329d1a4e54dd0d041  gcc/testsuite/g++.dg/coroutines/torture/special-termination-00-sync-completion.C
  729d7261244a4b93f8caf0dadbea7c82  gcc/testsuite/g++.dg/coroutines/torture/special-termination-01-self-destruct.C
+ d571703303e59ab43d8a90e6e4926187  gcc/testsuite/g++.dg/coroutines/unevaluated.C
  074cd02b7474e8119248041c10f08ad3  gcc/testsuite/g++.dg/cpp/_Pragma1.C
  8ce78309bd631829da82f2798d24d628  gcc/testsuite/g++.dg/cpp/c++98-pedantic.C
  731959b0908b124d4eee4dab104d68bb  gcc/testsuite/g++.dg/cpp/c++98.C
*************** c0422b5906ec9f754211435f9c08f8dd  gcc/te
*** 24844,24849 ****
--- 24854,24860 ----
  b6f531b83989cd62725f0bfeb30ad7fe  gcc/testsuite/g++.dg/cpp0x/variadic-crash4.C
  10ac54e6a2408dc79bbc43e024c85267  gcc/testsuite/g++.dg/cpp0x/variadic-crash5.C
  0a24ad717370f7802f37ceebffc7eb3d  gcc/testsuite/g++.dg/cpp0x/variadic-crash6.C
+ 50b83d314d7f9aeac7d1fb5cf683116d  gcc/testsuite/g++.dg/cpp0x/variadic-crash7.C
  51ab54d13c1bc4b5bb4bbc37b0c91002  gcc/testsuite/g++.dg/cpp0x/variadic-decltype1.C
  838c74313216e798999fa2b5ad006175  gcc/testsuite/g++.dg/cpp0x/variadic-default.C
  a959853b4b06b6225bb508d5c51f1e43  gcc/testsuite/g++.dg/cpp0x/variadic-diag1.C
*************** de871ba0c669234d7775a8dd50e71a82  gcc/te
*** 26897,26906 ****
  4bcd92b6654cddea3350b4d87fd6d146  gcc/testsuite/g++.dg/cpp2a/concepts-class5.C
  e2691e1e7623a7d8148288696c039418  gcc/testsuite/g++.dg/cpp2a/concepts-class5a.C
  76dc6502f3e927784b6e441195672a25  gcc/testsuite/g++.dg/cpp2a/concepts-cmath.C
! d6b4a2062d9072a514a787db6f02cc29  gcc/testsuite/g++.dg/cpp2a/concepts-complete1.C
! cb8668f19e63ee61b88c50eb36fc3645  gcc/testsuite/g++.dg/cpp2a/concepts-complete2.C
! 697e220e643e4dd5dbf81947b8621a99  gcc/testsuite/g++.dg/cpp2a/concepts-complete3.C
! 5ecd9522a37f94ff0b55525b8c6bd8d2  gcc/testsuite/g++.dg/cpp2a/concepts-complete4.C
  11178c260b3e89ebdbdce2a5bca50b11  gcc/testsuite/g++.dg/cpp2a/concepts-constrained-parm.C
  65e4b424a121ebbab5beacb2ebbf0591  gcc/testsuite/g++.dg/cpp2a/concepts-conv1.C
  3797e31584c1026d45ee1b5b08c4188b  gcc/testsuite/g++.dg/cpp2a/concepts-conv2.C
--- 26908,26917 ----
  4bcd92b6654cddea3350b4d87fd6d146  gcc/testsuite/g++.dg/cpp2a/concepts-class5.C
  e2691e1e7623a7d8148288696c039418  gcc/testsuite/g++.dg/cpp2a/concepts-class5a.C
  76dc6502f3e927784b6e441195672a25  gcc/testsuite/g++.dg/cpp2a/concepts-cmath.C
! becaf68736cdd389d6149212bb4af7d8  gcc/testsuite/g++.dg/cpp2a/concepts-complete1.C
! 46bf89eb0d23d9f41c4044cfbfa2605f  gcc/testsuite/g++.dg/cpp2a/concepts-complete2.C
! d0de4b90019cbda21e97bb3edf8a879e  gcc/testsuite/g++.dg/cpp2a/concepts-complete3.C
! edf4737c87df798414be7024fe3a8da9  gcc/testsuite/g++.dg/cpp2a/concepts-complete4.C
  11178c260b3e89ebdbdce2a5bca50b11  gcc/testsuite/g++.dg/cpp2a/concepts-constrained-parm.C
  65e4b424a121ebbab5beacb2ebbf0591  gcc/testsuite/g++.dg/cpp2a/concepts-conv1.C
  3797e31584c1026d45ee1b5b08c4188b  gcc/testsuite/g++.dg/cpp2a/concepts-conv2.C
*************** e322c3e2e2a5b94fb9e669c285d188b4  gcc/te
*** 33429,33434 ****
--- 33440,33448 ----
  770da3c5d8d08b57e3bb7638ced6ddac  gcc/testsuite/g++.dg/modules/warn-spec-1_b.C
  08df26e13ad9bcaf7746d9df14f81fcb  gcc/testsuite/g++.dg/modules/warn-spec-2_a.C
  4b28eae84d0803976da47dbc16d446fd  gcc/testsuite/g++.dg/modules/warn-spec-2_b.C
+ 32bda9067b266262f4e1131abc94bca8  gcc/testsuite/g++.dg/modules/warn-spec-3_a.C
+ 3043cd59d7e332d6f4e8f61c6bb432d8  gcc/testsuite/g++.dg/modules/warn-spec-3_b.C
+ 952c780f52f4b4b510d04d6b1c74dd28  gcc/testsuite/g++.dg/modules/warn-spec-3_c.C
  1f4f7d511678a6fe4008c486952c066e  gcc/testsuite/g++.dg/modules/xtreme-header-1.h
  5884b00638991ff8efb1f358bc696bca  gcc/testsuite/g++.dg/modules/xtreme-header-1_a.H
  2f9d3bf7b6222aa9a7879d98c3921af8  gcc/testsuite/g++.dg/modules/xtreme-header-1_b.C
*************** d8f7b87db1014927f2070e74b2efaaf2  gcc/te
*** 36253,36259 ****
  ae55d6e48a2ac8b72c938dc82c696408  gcc/testsuite/g++.dg/template/friend84.C
  7b1e5908f61421fb93ba70039b7baafb  gcc/testsuite/g++.dg/template/friend85.C
  40f2052ca29ac45703070d7e1c57ce4d  gcc/testsuite/g++.dg/template/friend86.C
! ab0d4ef98f5934bea97966eb11b99f85  gcc/testsuite/g++.dg/template/friend87.C
  59b5bf61b7f6210d3cf3b9b45692794a  gcc/testsuite/g++.dg/template/friend9.C
  d5d24fc94d133229a10c5b13f44c253b  gcc/testsuite/g++.dg/template/func1.C
  1959538a6f69b747e873f9e029cc6fa6  gcc/testsuite/g++.dg/template/func2.C
--- 36267,36273 ----
  ae55d6e48a2ac8b72c938dc82c696408  gcc/testsuite/g++.dg/template/friend84.C
  7b1e5908f61421fb93ba70039b7baafb  gcc/testsuite/g++.dg/template/friend85.C
  40f2052ca29ac45703070d7e1c57ce4d  gcc/testsuite/g++.dg/template/friend86.C
! 8b5a278d3c02cae63edfc0733831aca7  gcc/testsuite/g++.dg/template/friend87.C
  59b5bf61b7f6210d3cf3b9b45692794a  gcc/testsuite/g++.dg/template/friend9.C
  d5d24fc94d133229a10c5b13f44c253b  gcc/testsuite/g++.dg/template/func1.C
  1959538a6f69b747e873f9e029cc6fa6  gcc/testsuite/g++.dg/template/func2.C
*************** afb8b6ab7d54fa8eab8865a52a46caa4  gcc/te
*** 43186,43191 ****
--- 43200,43206 ----
  eafc363e633aef7542e621d7ecaa914e  gcc/testsuite/g++.target/i386/pr99108.C
  3660db29974db1f63f1a1f458c8894db  gcc/testsuite/g++.target/i386/pr99679-1.C
  b3fdfe2866e1905292894d815f1fa291  gcc/testsuite/g++.target/i386/pr99679-2.C
+ bb1bb4d82ab7e27c7670e69b269af286  gcc/testsuite/g++.target/i386/shrink_wrap_separate.C
  a621b799eff193996043d9d5462e5c27  gcc/testsuite/g++.target/i386/sse4_1-check.h
  8ac3bf43a1ce0277ed295c7ff1cc85fc  gcc/testsuite/g++.target/i386/sse4_1-pr100637-1b.C
  c06ceb436623685585c49fb701481265  gcc/testsuite/g++.target/i386/sse4_1-pr100637-1w.C
*************** fd7185346c3b94c0a7f7afba7b6bc241  gcc/te
*** 46679,46684 ****
--- 46694,46700 ----
  b7150a91a8e64c0a2f8d47a9f857fd6e  gcc/testsuite/gcc.c-torture/execute/pr119291.c
  e88a36f4cba0e85d5491d4b566b19508  gcc/testsuite/gcc.c-torture/execute/pr119428.c
  6cd050f88ca0f122ca3d062c32ebb9cf  gcc/testsuite/gcc.c-torture/execute/pr120630.c
+ eda2af339f8dd266a02b2d61a5444a03  gcc/testsuite/gcc.c-torture/execute/pr120677.c
  80c02c70a0b6b91b06942e395c34960f  gcc/testsuite/gcc.c-torture/execute/pr15262-1.c
  987c511633ad57d9f08d352eb9512819  gcc/testsuite/gcc.c-torture/execute/pr15262-2.c
  f7f514cfbd791b0c828e0710493b0910  gcc/testsuite/gcc.c-torture/execute/pr15262.c
*************** c468bc46d49a90772b63f81541d1cdf0  gcc/te
*** 51691,51696 ****
--- 51707,51713 ----
  707a475740543f28e7d4a1a1c6dd5e2a  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-1.c
  e9e3452e14dfbc6213d63bbc19163128  gcc/testsuite/gcc.dg/dfp/bid-non-canonical-d64-2.c
  98a1035165205102450c094d1127f8ea  gcc/testsuite/gcc.dg/dfp/bitint-1.c
+ 143efb0e67af1d841185aad9485eab11  gcc/testsuite/gcc.dg/dfp/bitint-10.c
  025dfa34516086fff4ea86cbff142e28  gcc/testsuite/gcc.dg/dfp/bitint-2.c
  ccb86bca1db885e54fa8d30063aa6a9a  gcc/testsuite/gcc.dg/dfp/bitint-3.c
  58ba588e40d3099aca918042db7c5f24  gcc/testsuite/gcc.dg/dfp/bitint-4.c
*************** ccb86bca1db885e54fa8d30063aa6a9a  gcc/te
*** 51698,51703 ****
--- 51715,51721 ----
  730ddc96d99e6d801906d63d8ae43c42  gcc/testsuite/gcc.dg/dfp/bitint-6.c
  0abc14c0fc9758db1fca1a924c745023  gcc/testsuite/gcc.dg/dfp/bitint-7.c
  66591ab0e72f12a0113129becb17a7f0  gcc/testsuite/gcc.dg/dfp/bitint-8.c
+ 5aad3660822951a77e1e44e866886f80  gcc/testsuite/gcc.dg/dfp/bitint-9.c
  2d5128bddc0d69a547254935ce84b555  gcc/testsuite/gcc.dg/dfp/builtin-complex.c
  bbb3a4b9649cd82ff38969cb002504a5  gcc/testsuite/gcc.dg/dfp/builtin-snan-1.c
  d52de125edb1b6785a1995c8d138b9f0  gcc/testsuite/gcc.dg/dfp/builtin-snan-2.c
*************** b6f9108cd4878577de83d43be75185ce  gcc/te
*** 51772,51777 ****
--- 51790,51796 ----
  440b561ad1d9037d4559c7011d636b7a  gcc/testsuite/gcc.dg/dfp/pr104557.c
  82ea312c34b2d7bbfe3d7dc309a1831f  gcc/testsuite/gcc.dg/dfp/pr108068.c
  ea6fd7375471549c289fdf2b28049341  gcc/testsuite/gcc.dg/dfp/pr118560.c
+ 59bca99093471aec4689a575eb6354c1  gcc/testsuite/gcc.dg/dfp/pr120631.c
  d8629eb8e0c765b5a7daa583cb8eedad  gcc/testsuite/gcc.dg/dfp/pr31344.c
  b59fd600db434af135f39c38e21e2d74  gcc/testsuite/gcc.dg/dfp/pr37435.c
  17353eaf91a4f3959fa168324f86f6f5  gcc/testsuite/gcc.dg/dfp/pr41049.c
*************** d08452d24c97493e2434ecdd8c5310c4  gcc/te
*** 55477,55482 ****
--- 55496,55503 ----
  2bc77a865f5ed044c609c7e4633d1a53  gcc/testsuite/gcc.dg/pr118947-1.c
  cccc06652033bffb0ed73a8f12d234c2  gcc/testsuite/gcc.dg/pr119001-1.c
  c7a64c754e3bec3fcb350f02eeca455c  gcc/testsuite/gcc.dg/pr119001-2.c
+ 22c72fb8f0ea443ab61c2bcc7fc0c042  gcc/testsuite/gcc.dg/pr119039-1.c
+ a29c116eab78178f6a285bf4e9f01e15  gcc/testsuite/gcc.dg/pr119039-2.c
  33c13391b7d0c5d156ce1488a8cece3f  gcc/testsuite/gcc.dg/pr119071.c
  a3d075dd1b96232581aa40c9e02294e1  gcc/testsuite/gcc.dg/pr119151.c
  6b5bb26672e398cc957c3f920dbb6d50  gcc/testsuite/gcc.dg/pr119160.c
*************** fa5bb8fde0acecb33a479faffc86bd94  gcc/te
*** 55510,55515 ****
--- 55531,55539 ----
  7e5ecdaab28f17bb60a37435dfa95af7  gcc/testsuite/gcc.dg/pr120525.c
  529713b98b912597ae0fe979488eb31a  gcc/testsuite/gcc.dg/pr120630.c
  4a9d9632d82cf6c4f4f4acbad8ab018d  gcc/testsuite/gcc.dg/pr120638.c
+ d2c0f87695635c09b6a893cd2d5c5478  gcc/testsuite/gcc.dg/pr120661-1.c
+ 799c5822cecd54a85c86ba442df0a63e  gcc/testsuite/gcc.dg/pr120661-2.c
+ 3617a8786eb32339e9abd40e5a0323eb  gcc/testsuite/gcc.dg/pr120701.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** e9469d38b4234580f9b2284233404b3c  gcc/te
*** 59243,59248 ****
--- 59267,59273 ----
  aef01c040da8abd2a1e547ed6a07eb5a  gcc/testsuite/gcc.dg/torture/pr120341-2.c
  12e839fd30c3a301bab4708aee3c9815  gcc/testsuite/gcc.dg/torture/pr120347.c
  590593d14c26e1d9ed776d01fc734a3c  gcc/testsuite/gcc.dg/torture/pr120369-1.c
+ e6e17b2280f19928b738f46328c5dcf7  gcc/testsuite/gcc.dg/torture/pr120654.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
*************** e9fd20c6a5ee817fc329cc085c9032eb  gcc/te
*** 60398,60403 ****
--- 60423,60430 ----
  4fbcebb70fe7512862cd2a9642fd2605  gcc/testsuite/gcc.dg/transparent-union-6.c
  8d1595003065ecd1d4556067ec7e25cc  gcc/testsuite/gcc.dg/tree-prof/20041218-1.c
  3efe9018c42617fad26ca176fc3306fd  gcc/testsuite/gcc.dg/tree-prof/20050826-2.c
+ fe7a25a8994098f4b71009b9a1aad559  gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c
+ 6002203bc07005ca0e9c543037930992  gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c
  7fea89044d1cae3c25a1775dd049cbe7  gcc/testsuite/gcc.dg/tree-prof/bb-reorg.c
  b6efe4d551132d9a7c42ff097c91297d  gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c
  fea6679f47a5ff36663a877937522419  gcc/testsuite/gcc.dg/tree-prof/cmpsf-1.c
*************** cf7f678829144365c7c6e3436f2fe6c9  gcc/te
*** 60410,60416 ****
  8a7ed79d9687fd79c9c1f831e7e7995b  gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1a.c
  26029d99148f25b6e5936d8536719f05  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c
  af6029c2bad38cfb5326e5a120549d06  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1a.c
! aa1766806b0aae39d0f83f4e18d3fa48  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c
  1a6a44bdec75a8550a766d6afea7e532  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-malloc.c
  85d5018bec782bddcb3e3782c0be5143  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-topn.c
  f3d50d6757f0db7ac4ee44425c687545  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c
--- 60437,60443 ----
  8a7ed79d9687fd79c9c1f831e7e7995b  gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1a.c
  26029d99148f25b6e5936d8536719f05  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c
  af6029c2bad38cfb5326e5a120549d06  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1a.c
! f6ef6a87864011f42b4cb60ecbae48e6  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c
  1a6a44bdec75a8550a766d6afea7e532  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-malloc.c
  85d5018bec782bddcb3e3782c0be5143  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-topn.c
  f3d50d6757f0db7ac4ee44425c687545  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c
*************** c80e73a06995d8806bc8a56ee1df1346  gcc/te
*** 62434,62440 ****
  05aea1a4d7030c5cf55b50b84dc9f78f  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2g.c
  15738f38675ee569391bc24effefc64b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2h.c
  881f6db6cb1a3e63bf8dd2e0f203cc95  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-5.c
! 342510956765f8f3e21a344fc1792bae  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
  de890ed0b8a4a8f0e19572bf759856a3  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c
  1e01eee87c695d67cde163a4530069b0  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-9.c
  9131f70d5244737552818651f478cdc5  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-1.c
--- 62461,62467 ----
  05aea1a4d7030c5cf55b50b84dc9f78f  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2g.c
  15738f38675ee569391bc24effefc64b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2h.c
  881f6db6cb1a3e63bf8dd2e0f203cc95  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-5.c
! 4815e1eab046e440d849ed6fad5ed1aa  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
  de890ed0b8a4a8f0e19572bf759856a3  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c
  1e01eee87c695d67cde163a4530069b0  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-9.c
  9131f70d5244737552818651f478cdc5  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-1.c
*************** f29221b3dc2d27ac71c726e119cac0ff  gcc/te
*** 66872,66881 ****
  c45ad55864031fa75ffa4f831160438a  gcc/testsuite/gcc.target/aarch64/branch-protection-option-2.c
  0b8cf058ef48ad79bf7930ffa7dada5f  gcc/testsuite/gcc.target/aarch64/branch-protection-option.c
  cb2d59ab293179fb8d00b44de02f2556  gcc/testsuite/gcc.target/aarch64/bsl-idiom.c
! db5fd5b64a2eb4eb636d6dfdb413c130  gcc/testsuite/gcc.target/aarch64/bti-1.c
  1f3ef5067a390251f12ef6026d548694  gcc/testsuite/gcc.target/aarch64/bti-2.c
  b78c22df355563107f991e1e75999388  gcc/testsuite/gcc.target/aarch64/bti-3.c
  ab6bc72e5251715038d4dfdf5a92be3c  gcc/testsuite/gcc.target/aarch64/bti-4.c
  82ebc34e179e256a16633eeed8f5931d  gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c
  33f370cd2a619d45e68ba5747504d94e  gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c
  ac800c0500abf9ea311dffda98f211fe  gcc/testsuite/gcc.target/aarch64/builtin_apply-1.c
--- 66899,66917 ----
  c45ad55864031fa75ffa4f831160438a  gcc/testsuite/gcc.target/aarch64/branch-protection-option-2.c
  0b8cf058ef48ad79bf7930ffa7dada5f  gcc/testsuite/gcc.target/aarch64/branch-protection-option.c
  cb2d59ab293179fb8d00b44de02f2556  gcc/testsuite/gcc.target/aarch64/bsl-idiom.c
! 5140f253a114c45168aad0ac4e7e735c  gcc/testsuite/gcc.target/aarch64/bti-1.c
  1f3ef5067a390251f12ef6026d548694  gcc/testsuite/gcc.target/aarch64/bti-2.c
  b78c22df355563107f991e1e75999388  gcc/testsuite/gcc.target/aarch64/bti-3.c
  ab6bc72e5251715038d4dfdf5a92be3c  gcc/testsuite/gcc.target/aarch64/bti-4.c
+ e7b812b84363d96b523c20c195b2b742  gcc/testsuite/gcc.target/aarch64/build-attributes/aarch64-build-attributes.exp
+ 2562151402300567ba4eb56469a89394  gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-bti.c
+ 25272f0efe74d4e62080555d8a08619c  gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-gcs.c
+ c8dea11415a69a37c67739e217bec165  gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-pac.c
+ b00668d5ffde6d0f936e2fa8c72ca826  gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-standard.c
+ abd3e1e0417d9d1552bf0fb608740072  gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-bti.c
+ a77472ae4daab7a782d0b7919e3b78b8  gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-gcs.c
+ ce0a270d0ab654727a943988b0a3ce49  gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-pac.c
+ 6fb91caca48df0d04635c25d87072ffd  gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-standard.c
  82ebc34e179e256a16633eeed8f5931d  gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c
  33f370cd2a619d45e68ba5747504d94e  gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c
  ac800c0500abf9ea311dffda98f211fe  gcc/testsuite/gcc.target/aarch64/builtin_apply-1.c
*************** f3f6d3e236c744bb128945fb5e3609df  gcc/te
*** 67555,67560 ****
--- 67591,67603 ----
  ea64f6f6caa9947f9a065dae92817770  gcc/testsuite/gcc.target/aarch64/pr112406.c
  c83a09a0e16c61674cfbebcc059ceb22  gcc/testsuite/gcc.target/aarch64/pr112573.c
  fb47e676224180b04e459251a5e0250a  gcc/testsuite/gcc.target/aarch64/pr112787.c
+ 912d48bfa0282dfee42cbe04b74efb90  gcc/testsuite/gcc.target/aarch64/pr113027-1.c
+ 6de4dfa6a7668db8e6b259b5b9fd90a6  gcc/testsuite/gcc.target/aarch64/pr113027-2.c
+ 9f3105d6b4abfc3900b4d073cdc99532  gcc/testsuite/gcc.target/aarch64/pr113027-3.c
+ d52678c8336070999a146024b464dd25  gcc/testsuite/gcc.target/aarch64/pr113027-4.c
+ 2b9e884b3ab2566e1626e27c19345ec9  gcc/testsuite/gcc.target/aarch64/pr113027-5.c
+ 71e559353ed378a385d35d71c561dfd6  gcc/testsuite/gcc.target/aarch64/pr113027-6.c
+ c20c32749f133df2c65c8758bcfe6e77  gcc/testsuite/gcc.target/aarch64/pr113027-7.c
  12cba4b8ee2e9d41299be00097081971  gcc/testsuite/gcc.target/aarch64/pr113077.c
  de8e78a604e69bc88717147c309e69ef  gcc/testsuite/gcc.target/aarch64/pr113094.c
  e64015aa3333e77e13b230e2bc2580b0  gcc/testsuite/gcc.target/aarch64/pr113104.c
*************** c1b4210e7c857e81f9f5dd17c8019137  gcc/te
*** 72049,72059 ****
  82a96e648c528899d2018dd434c8c574  gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c
  88297aa00c0ea56bf3fce0f8ccae0962  gcc/testsuite/gcc.target/aarch64/sve/pack_1.c
  d3c80688ca6e46a07411a695aff6365c  gcc/testsuite/gcc.target/aarch64/sve/pack_1_run.c
! a560e8d33bc4b495e1f23d0645271de2  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1.c
  40250c68c4a2717b364222c87b1065a7  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1_run.c
! bd0ea7412913a5ce083ddea4613bd169  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1.c
  38e3035a77b1dca0127d31c369ecc94a  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1_run.c
! fa06e7238dbd52dd10fcbc8218d6f455  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c
  f73856c9978f65aed41f7a5c062f010a  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1_run.c
  3767d9f5b48765e1ea663d93605a0b14  gcc/testsuite/gcc.target/aarch64/sve/part_vect_single_iter_epilog.c
  505c7a703249075fb08d211ee30ed590  gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp
--- 72092,72102 ----
  82a96e648c528899d2018dd434c8c574  gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c
  88297aa00c0ea56bf3fce0f8ccae0962  gcc/testsuite/gcc.target/aarch64/sve/pack_1.c
  d3c80688ca6e46a07411a695aff6365c  gcc/testsuite/gcc.target/aarch64/sve/pack_1_run.c
! b77934473484d435442fe6d45fab9ccf  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1.c
  40250c68c4a2717b364222c87b1065a7  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1_run.c
! b6a10f01c0e7852c04bd29416af21fd9  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1.c
  38e3035a77b1dca0127d31c369ecc94a  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1_run.c
! d9ca3ace725686a9292fe9e1d496d379  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c
  f73856c9978f65aed41f7a5c062f010a  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1_run.c
  3767d9f5b48765e1ea663d93605a0b14  gcc/testsuite/gcc.target/aarch64/sve/part_vect_single_iter_epilog.c
  505c7a703249075fb08d211ee30ed590  gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp
*************** b4ad4ea3e1b8b235e71beb9786be1032  gcc/te
*** 72606,72617 ****
  d3805ccb98774fc60783e0d714834aa0  gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_signed_1_run.c
  8f91aaf06d470b496de41940f3e49d4c  gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_unsigned_1.c
  32a0ff26410cd0894dafd6f7f0d291a2  gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_unsigned_1_run.c
! b57de878cb338939c71466f3393bfaf2  gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c
  e7a3b62d81ab7c0991182b370fdfe06f  gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1_run.c
  6831c41ec32a11ef4790d4d2c2a2b2ae  gcc/testsuite/gcc.target/aarch64/sve/unpack_signed_1.c
  0dac8ce2706a1e811d4ef39d2e7c0c52  gcc/testsuite/gcc.target/aarch64/sve/unpack_signed_1_run.c
  5fc3acd66e8ad342f32e01a87a71ead4  gcc/testsuite/gcc.target/aarch64/sve/unpack_unsigned_1.c
  61ef61cfc6c64004c59a9698eaaf6e47  gcc/testsuite/gcc.target/aarch64/sve/unpack_unsigned_1_run.c
  f202a910bae302c6c775c55d23a33bc1  gcc/testsuite/gcc.target/aarch64/sve/unroll-1.c
  244a74375a0c2fe6ee32afc4c0cc347c  gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c
  d876021ee15812d1dc53c0bd7c9fc144  gcc/testsuite/gcc.target/aarch64/sve/uzp1_1_run.c
--- 72649,72667 ----
  d3805ccb98774fc60783e0d714834aa0  gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_signed_1_run.c
  8f91aaf06d470b496de41940f3e49d4c  gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_unsigned_1.c
  32a0ff26410cd0894dafd6f7f0d291a2  gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_unsigned_1_run.c
! fcbf89de7cda852a69ca11af8d2b9dd8  gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c
  e7a3b62d81ab7c0991182b370fdfe06f  gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1_run.c
  6831c41ec32a11ef4790d4d2c2a2b2ae  gcc/testsuite/gcc.target/aarch64/sve/unpack_signed_1.c
  0dac8ce2706a1e811d4ef39d2e7c0c52  gcc/testsuite/gcc.target/aarch64/sve/unpack_signed_1_run.c
  5fc3acd66e8ad342f32e01a87a71ead4  gcc/testsuite/gcc.target/aarch64/sve/unpack_unsigned_1.c
  61ef61cfc6c64004c59a9698eaaf6e47  gcc/testsuite/gcc.target/aarch64/sve/unpack_unsigned_1_run.c
+ a2b8cc7a8d9d0d79ca11573d406f7f6d  gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_1.c
+ 8e60d86282221f5b0f2ca4fb58eb76f8  gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_2.c
+ ea24ecb4164b07ea882a7df9a25bae2e  gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_3.c
+ 274cee25dc1d6c69e609830904c1c0a9  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_1.c
+ cc5ae2e9ab4c84fdefc8af75fc17d5ab  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_2.c
+ 53191c2f3e19f7d558c0a0e9ad1a7755  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_1.c
+ 0b800e2a318d40e9898cab825ffe9a5f  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_2.c
  f202a910bae302c6c775c55d23a33bc1  gcc/testsuite/gcc.target/aarch64/sve/unroll-1.c
  244a74375a0c2fe6ee32afc4c0cc347c  gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c
  d876021ee15812d1dc53c0bd7c9fc144  gcc/testsuite/gcc.target/aarch64/sve/uzp1_1_run.c
*************** c5f278f4dccfd134d9a3e2aa2a67703d  gcc/te
*** 80505,80511 ****
  76ee3b70f25c64cb9b951d654c13073e  gcc/testsuite/gcc.target/i386/avx10_2-bf16-vector-smaxmin-1.c
  417ab35ed9008afe2f322f93299c12d8  gcc/testsuite/gcc.target/i386/avx10_2-builtin-1.c
  a2fc5a1576404e3c308cbd5c09c5efb0  gcc/testsuite/gcc.target/i386/avx10_2-builtin-2.c
! 3e38bcafeb4d5b2f7bb1c52ababdf752  gcc/testsuite/gcc.target/i386/avx10_2-comibf-1.c
  416f727a1fbf3a66e86e4aa12e92573c  gcc/testsuite/gcc.target/i386/avx10_2-comibf-2.c
  105f19196f335ab2a896afa886785ebb  gcc/testsuite/gcc.target/i386/avx10_2-comibf-3.c
  ddae9e3f25193c53de97e445f19efb5b  gcc/testsuite/gcc.target/i386/avx10_2-comibf-4.c
--- 80555,80561 ----
  76ee3b70f25c64cb9b951d654c13073e  gcc/testsuite/gcc.target/i386/avx10_2-bf16-vector-smaxmin-1.c
  417ab35ed9008afe2f322f93299c12d8  gcc/testsuite/gcc.target/i386/avx10_2-builtin-1.c
  a2fc5a1576404e3c308cbd5c09c5efb0  gcc/testsuite/gcc.target/i386/avx10_2-builtin-2.c
! 49731970251e140949ebf0a9dca5d84f  gcc/testsuite/gcc.target/i386/avx10_2-comibf-1.c
  416f727a1fbf3a66e86e4aa12e92573c  gcc/testsuite/gcc.target/i386/avx10_2-comibf-2.c
  105f19196f335ab2a896afa886785ebb  gcc/testsuite/gcc.target/i386/avx10_2-comibf-3.c
  ddae9e3f25193c53de97e445f19efb5b  gcc/testsuite/gcc.target/i386/avx10_2-comibf-4.c
*************** eea712e5edcebcf47419b6442fd41bd4  gcc/te
*** 84170,84176 ****
  b72099cd966e9c576a224799821d5d28  gcc/testsuite/gcc.target/i386/cold-attribute-1.c
  0167fa6749ad93cf0251a4b9260fbccd  gcc/testsuite/gcc.target/i386/cold-attribute-2.c
  c1eab7ffc4e6134b9c680fe0c2920314  gcc/testsuite/gcc.target/i386/cold-attribute-3.c
! dcc5b76590328fd9f7c421fcb66d52d6  gcc/testsuite/gcc.target/i386/cold-attribute-4.c
  6475e870c428b4aeb9a5a7ed5149bb30  gcc/testsuite/gcc.target/i386/combine-mul.c
  51ddf79878f8a3a62bc3a456a718ddb8  gcc/testsuite/gcc.target/i386/compress-float-387-pic.c
  f5b6283707f17b1db37120fd03d9ecf7  gcc/testsuite/gcc.target/i386/compress-float-387.c
--- 84220,84226 ----
  b72099cd966e9c576a224799821d5d28  gcc/testsuite/gcc.target/i386/cold-attribute-1.c
  0167fa6749ad93cf0251a4b9260fbccd  gcc/testsuite/gcc.target/i386/cold-attribute-2.c
  c1eab7ffc4e6134b9c680fe0c2920314  gcc/testsuite/gcc.target/i386/cold-attribute-3.c
! fb80b8e91abc0725f03bd2c87f0692c9  gcc/testsuite/gcc.target/i386/cold-attribute-4.c
  6475e870c428b4aeb9a5a7ed5149bb30  gcc/testsuite/gcc.target/i386/combine-mul.c
  51ddf79878f8a3a62bc3a456a718ddb8  gcc/testsuite/gcc.target/i386/compress-float-387-pic.c
  f5b6283707f17b1db37120fd03d9ecf7  gcc/testsuite/gcc.target/i386/compress-float-387.c
*************** b8833946f76f120528a455a8a038099f  gcc/te
*** 84565,84571 ****
  d458a0e32cb2349bcd36f8d2d34f5f8d  gcc/testsuite/gcc.target/i386/interrupt-13.c
  4609c90dc9ad28bf220f5f449014a1f4  gcc/testsuite/gcc.target/i386/interrupt-14.c
  08e23012b58fe85be0d87a2f9137b0a4  gcc/testsuite/gcc.target/i386/interrupt-15.c
! c6e693b5f9a7c73ab931ca1a8b1030cf  gcc/testsuite/gcc.target/i386/interrupt-16.c
  0bd3898f1b1d458377a8614055066514  gcc/testsuite/gcc.target/i386/interrupt-17.c
  6442ee0aaf57b80fc0c0555b49479df5  gcc/testsuite/gcc.target/i386/interrupt-18.c
  2a92ed875b52c83373107688535325d5  gcc/testsuite/gcc.target/i386/interrupt-19.c
--- 84615,84621 ----
  d458a0e32cb2349bcd36f8d2d34f5f8d  gcc/testsuite/gcc.target/i386/interrupt-13.c
  4609c90dc9ad28bf220f5f449014a1f4  gcc/testsuite/gcc.target/i386/interrupt-14.c
  08e23012b58fe85be0d87a2f9137b0a4  gcc/testsuite/gcc.target/i386/interrupt-15.c
! 5be70a9ac25a5e57fefbc0c9c47ba844  gcc/testsuite/gcc.target/i386/interrupt-16.c
  0bd3898f1b1d458377a8614055066514  gcc/testsuite/gcc.target/i386/interrupt-17.c
  6442ee0aaf57b80fc0c0555b49479df5  gcc/testsuite/gcc.target/i386/interrupt-18.c
  2a92ed875b52c83373107688535325d5  gcc/testsuite/gcc.target/i386/interrupt-19.c
*************** f82327ef3caa200d8024822491c53316  gcc/te
*** 84747,84757 ****
  cda0d89452347311cc45a79be2d8f0fc  gcc/testsuite/gcc.target/i386/memcpy-1.c
  6497cb2d22febb00a904f50025d863bd  gcc/testsuite/gcc.target/i386/memcpy-2.c
  536862ceddae932e3d7da830f0866d31  gcc/testsuite/gcc.target/i386/memcpy-3.c
  27b4fc4c0b0ecbd4614a4e9af86a6a18  gcc/testsuite/gcc.target/i386/memcpy-pr95886.c
! b5176a7f12717b0fd4c9162a139871e9  gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c
  b82d9188c52a269893b5ac6b25f9e515  gcc/testsuite/gcc.target/i386/memcpy-strategy-10.c
  619cbc26dc85de4ded3f5a985d0a23a2  gcc/testsuite/gcc.target/i386/memcpy-strategy-11.c
! b001554c0c381f992911b1e7a465a6b8  gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c
  18088286a0546a409434dcbafef0a896  gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c
  6e857b4eb94b8707c380e73efcbc5a51  gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c
  1d25fe95e37e523bbb1237cd2cfdcc7a  gcc/testsuite/gcc.target/i386/memcpy-strategy-5.c
--- 84797,84813 ----
  cda0d89452347311cc45a79be2d8f0fc  gcc/testsuite/gcc.target/i386/memcpy-1.c
  6497cb2d22febb00a904f50025d863bd  gcc/testsuite/gcc.target/i386/memcpy-2.c
  536862ceddae932e3d7da830f0866d31  gcc/testsuite/gcc.target/i386/memcpy-3.c
+ 50517fb5d4646033c91f4ffec32d7d69  gcc/testsuite/gcc.target/i386/memcpy-pr120708-1.c
+ 3cf7b29a1b5359f4e7c6819c7d0fef69  gcc/testsuite/gcc.target/i386/memcpy-pr120708-2.c
+ 5cb0b1e67d33f6577154b5348833c2ea  gcc/testsuite/gcc.target/i386/memcpy-pr120708-3.c
+ a2854f7fe83760cab7c18efaa883fa19  gcc/testsuite/gcc.target/i386/memcpy-pr120708-4.c
+ cab1fad7719db80bf7a5c712c8e07f67  gcc/testsuite/gcc.target/i386/memcpy-pr120708-5.c
+ 59f59b38785765ee58f5364967ec6317  gcc/testsuite/gcc.target/i386/memcpy-pr120708-6.c
  27b4fc4c0b0ecbd4614a4e9af86a6a18  gcc/testsuite/gcc.target/i386/memcpy-pr95886.c
! 11e1d1767b79743e4e65a799f3369907  gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c
  b82d9188c52a269893b5ac6b25f9e515  gcc/testsuite/gcc.target/i386/memcpy-strategy-10.c
  619cbc26dc85de4ded3f5a985d0a23a2  gcc/testsuite/gcc.target/i386/memcpy-strategy-11.c
! 043547bc2d2818c5fb11e83082688790  gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c
  18088286a0546a409434dcbafef0a896  gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c
  6e857b4eb94b8707c380e73efcbc5a51  gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c
  1d25fe95e37e523bbb1237cd2cfdcc7a  gcc/testsuite/gcc.target/i386/memcpy-strategy-5.c
*************** b001554c0c381f992911b1e7a465a6b8  gcc/te
*** 84759,84767 ****
  ee6163f62ab711d692467ababe19d6e8  gcc/testsuite/gcc.target/i386/memcpy-strategy-7.c
  340d39f8d8ef39d53004ab646169990b  gcc/testsuite/gcc.target/i386/memcpy-strategy-8.c
  2dd9e14dd90d6b63ab5fb4222847a72d  gcc/testsuite/gcc.target/i386/memcpy-strategy-9.c
! 5a0fd04cbd019d9f36835345ab0db6ad  gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c
! c84ec8a2cd4608e33d447c561108ce97  gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c
  40cce91585f47cde61390171cd489668  gcc/testsuite/gcc.target/i386/memset-1.c
  5d42d8053ea9c0f90ccef1a5662638be  gcc/testsuite/gcc.target/i386/memset-strategy-1.c
  e34fc4954adf255e63dd959604f68e95  gcc/testsuite/gcc.target/i386/memset-strategy-2.c
  ab2b88f0bcce4626b92af0e20a2b1f62  gcc/testsuite/gcc.target/i386/memset-strategy-3.c
--- 84815,84825 ----
  ee6163f62ab711d692467ababe19d6e8  gcc/testsuite/gcc.target/i386/memcpy-strategy-7.c
  340d39f8d8ef39d53004ab646169990b  gcc/testsuite/gcc.target/i386/memcpy-strategy-8.c
  2dd9e14dd90d6b63ab5fb4222847a72d  gcc/testsuite/gcc.target/i386/memcpy-strategy-9.c
! 229037e2f4a7e551952f59d46c8a2267  gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c
! f6fd4449a72ddd84f5687641334109d2  gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c
  40cce91585f47cde61390171cd489668  gcc/testsuite/gcc.target/i386/memset-1.c
+ d40214a38af3060ba1bba456c7399a32  gcc/testsuite/gcc.target/i386/memset-pr120708-1.c
+ 131f444cf3fea918073579825312e430  gcc/testsuite/gcc.target/i386/memset-pr120708-2.c
  5d42d8053ea9c0f90ccef1a5662638be  gcc/testsuite/gcc.target/i386/memset-strategy-1.c
  e34fc4954adf255e63dd959604f68e95  gcc/testsuite/gcc.target/i386/memset-strategy-2.c
  ab2b88f0bcce4626b92af0e20a2b1f62  gcc/testsuite/gcc.target/i386/memset-strategy-3.c
*************** fad1f723fea113cd6e9ed9c154a8ac50  gcc/te
*** 84771,84778 ****
  1dd9248dd03293c1a1b721052bea480b  gcc/testsuite/gcc.target/i386/memset-strategy-7.c
  1af29c0ee5e0fa8803b6dd0354a23dee  gcc/testsuite/gcc.target/i386/memset-strategy-8.c
  ff0a702aa0efe0f21e105da81c274eb6  gcc/testsuite/gcc.target/i386/memset-strategy-9.c
! abacd2e1491b7c40915d4be18c0229b4  gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c
! 87dbca58e427b20c0f83b7a2aefbd38a  gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c
  0f0d6bfb1ded50a271c2d5125c308eaf  gcc/testsuite/gcc.target/i386/merge-1.c
  c4570886a9f211d78bbdd2e42072c902  gcc/testsuite/gcc.target/i386/minmax-1.c
  0ff9b1c7cefc9d6f11d41b132dc6cca7  gcc/testsuite/gcc.target/i386/minmax-10.c
--- 84829,84836 ----
  1dd9248dd03293c1a1b721052bea480b  gcc/testsuite/gcc.target/i386/memset-strategy-7.c
  1af29c0ee5e0fa8803b6dd0354a23dee  gcc/testsuite/gcc.target/i386/memset-strategy-8.c
  ff0a702aa0efe0f21e105da81c274eb6  gcc/testsuite/gcc.target/i386/memset-strategy-9.c
! 80d1cd925374a8fc14d44d7e92e78160  gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c
! a08549a6dd0270bcbb432de3edc8040f  gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c
  0f0d6bfb1ded50a271c2d5125c308eaf  gcc/testsuite/gcc.target/i386/merge-1.c
  c4570886a9f211d78bbdd2e42072c902  gcc/testsuite/gcc.target/i386/minmax-1.c
  0ff9b1c7cefc9d6f11d41b132dc6cca7  gcc/testsuite/gcc.target/i386/minmax-10.c
*************** bb420ee68e25b3f2c223a9b99a8e7c79  gcc/te
*** 85803,85811 ****
--- 85861,85874 ----
  8b7deb747f63c3654334325f025937b4  gcc/testsuite/gcc.target/i386/pr120032-2.c
  20bea83e4863880948ed90566766c909  gcc/testsuite/gcc.target/i386/pr120032-3.c
  dd47421a141f36dc244e35b0237335f0  gcc/testsuite/gcc.target/i386/pr120360.c
+ 1404641b6882eb8151341efedd467313  gcc/testsuite/gcc.target/i386/pr120427-1.c
+ b912addc770944f54b5baa8db2467d9d  gcc/testsuite/gcc.target/i386/pr120427-2.c
+ c87152a8a84d546309327b3da89eb566  gcc/testsuite/gcc.target/i386/pr120427-3.c
+ f5a1252b1fe24ea2b97ff3762c399ed9  gcc/testsuite/gcc.target/i386/pr120427-4.c
  ba011de94e8c76e7b3328d4e8e3327b8  gcc/testsuite/gcc.target/i386/pr120434-1.c
  3cfa365a3c52dad131baec47ad46e76d  gcc/testsuite/gcc.target/i386/pr120434-2.c
  252fe8c2e6c536aceb69a6f43a4279b3  gcc/testsuite/gcc.target/i386/pr120553.c
+ b8ebdafc2fa7c81ba75987868812e914  gcc/testsuite/gcc.target/i386/pr120689.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
*************** c05d22a930ef3f74451ec3e9d4db1b74  gcc/te
*** 87837,87842 ****
--- 87900,87906 ----
  e0ace5d39e9cc7930c86ec3fac2a2562  gcc/testsuite/gcc.target/i386/sha512rnds2-2.c
  11a4bd4138e7963e0cd81b6e0197cfe6  gcc/testsuite/gcc.target/i386/shift_mask.c
  b575f46102e75c61317492fad36873d8  gcc/testsuite/gcc.target/i386/shrink_wrap_1.c
+ 5d296e53766a82f967504d535eb71b05  gcc/testsuite/gcc.target/i386/shrink_wrap_separate_check_lea.c
  db687b7347e27fd960300505daa014ee  gcc/testsuite/gcc.target/i386/shuf-concat.c
  2a6e1d7c1d6cc43b2c0c5bc706ded8a7  gcc/testsuite/gcc.target/i386/sibcall-1.c
  19523776640101268df1d976cbbc2f7e  gcc/testsuite/gcc.target/i386/sibcall-2.c
*************** c090869f11057c7ff1b23d043c14ed85  gcc/te
*** 88539,88544 ****
--- 88603,88609 ----
  750a7405dd4a2eeed037db510a92fe3e  gcc/testsuite/gcc.target/i386/stack-check-17.c
  f4f31f4c82164ce7b9fec1c877d2f06a  gcc/testsuite/gcc.target/i386/stack-check-18.c
  85ba669397fb051dbc3e76f146553033  gcc/testsuite/gcc.target/i386/stack-check-19.c
+ 6d828053525a31dec8d546a5f991ca0f  gcc/testsuite/gcc.target/i386/stack-clash-protection.c
  ca5571ee490db85826dd15cbfd5c6555  gcc/testsuite/gcc.target/i386/stack-prot-guard.c
  79da87a540843a0e1db2e7c3a4c97b4a  gcc/testsuite/gcc.target/i386/stack-prot-kernel.c
  915a1e795ed7f5bdc16dea9e8b895e29  gcc/testsuite/gcc.target/i386/stack-prot-sym.c
*************** c94d482c7ef976b5a86a9679daf9ddc1  gcc/te
*** 93685,93691 ****
  c757fc49f54223fc5d30159e042cdbd4  gcc/testsuite/gcc.target/riscv/arch-50.c
  1ce8ea52ed40d6f9cb466d50bdae791f  gcc/testsuite/gcc.target/riscv/arch-51.c
  b4225e859cdd92f35ddd7b8b8b438a8c  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
  8b84caba9ce32304ca1b5db7befd5c29  gcc/testsuite/gcc.target/riscv/arch-55.c
  f6c8f50458c8df94ccafb1928e48202a  gcc/testsuite/gcc.target/riscv/arch-56.c
--- 93750,93756 ----
  c757fc49f54223fc5d30159e042cdbd4  gcc/testsuite/gcc.target/riscv/arch-50.c
  1ce8ea52ed40d6f9cb466d50bdae791f  gcc/testsuite/gcc.target/riscv/arch-51.c
  b4225e859cdd92f35ddd7b8b8b438a8c  gcc/testsuite/gcc.target/riscv/arch-52.c
! dd599081b6389dfcc55c5f74d69f763b  gcc/testsuite/gcc.target/riscv/arch-53.c
  bec789a6108435830e82b6fdd221cb51  gcc/testsuite/gcc.target/riscv/arch-54.c
  8b84caba9ce32304ca1b5db7befd5c29  gcc/testsuite/gcc.target/riscv/arch-55.c
  f6c8f50458c8df94ccafb1928e48202a  gcc/testsuite/gcc.target/riscv/arch-56.c
*************** a0ec9e9b1278bec59b5f6fb4473ae0be  gcc/te
*** 94091,94097 ****
  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
  6308e09d3e5133433b97e26dcb02daba  gcc/testsuite/gcc.target/riscv/load-immediate.c
--- 94156,94162 ----
  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
! b656a9e0d73427727bb0cc6df44334ab  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
  6308e09d3e5133433b97e26dcb02daba  gcc/testsuite/gcc.target/riscv/load-immediate.c
*************** a7cdfe664ef8616a70af588b3a79aa27  gcc/te
*** 94502,94510 ****
--- 94567,94577 ----
  8c4f6b44c5539860ac14e0e52ee563cd  gcc/testsuite/gcc.target/riscv/pr118146-1.c
  b22a15e86fb70037feb383a055b6e153  gcc/testsuite/gcc.target/riscv/pr118146-2.c
  1fa594621b25166287d6d30b0daf189b  gcc/testsuite/gcc.target/riscv/pr118170.c
+ b2926d7d0c3ebd0521abd5b1bd13e5f8  gcc/testsuite/gcc.target/riscv/pr118241.c
  8c91cf2796ff0e2ea816e9d35b520e8d  gcc/testsuite/gcc.target/riscv/pr118248.c
  2635a8ce323c6f470fcbe6331ea7497b  gcc/testsuite/gcc.target/riscv/pr118410-1.c
  acc8133b241415ea173b4e1e06147a04  gcc/testsuite/gcc.target/riscv/pr118410-2.c
+ bf00cac22e30fab76ac74c7b2e5af207  gcc/testsuite/gcc.target/riscv/pr119830.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
*************** de2cab5a8e2da69a8db8d226339e52a8  gcc/te
*** 94653,94661 ****
  22ac7a0e40ee0d73ee3acf39c4790345  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/shift-template.h
  f7bcb68e3023c1e5612ce4e7cb17f707  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-run-nofm.c
  5a96ce3f4fa167a0c456da1d5f773730  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-run.c
! fedc5a35f2902230a0eba2b86761223c  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c
  fa28d1b860b1fc6524ba539f3efa0e8b  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv.c
! 77ac2589f7af6e3365e45efa3f23cd8e  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c
  7cc257aa83a272fbc0eb2b67af1a72ab  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv.c
  93a18051bf5b024c977fe02509c4f2b7  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-template.h
  83b9da5b3175cdf12887b104bf702389  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-zvfh-run.c
--- 94720,94728 ----
  22ac7a0e40ee0d73ee3acf39c4790345  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/shift-template.h
  f7bcb68e3023c1e5612ce4e7cb17f707  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-run-nofm.c
  5a96ce3f4fa167a0c456da1d5f773730  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-run.c
! b7f493a6674358d269e220cbea3ce60d  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c
  fa28d1b860b1fc6524ba539f3efa0e8b  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv.c
! 8bca05c20aaa5865cb3f672e8f3c3dac  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c
  7cc257aa83a272fbc0eb2b67af1a72ab  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv.c
  93a18051bf5b024c977fe02509c4f2b7  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-template.h
  83b9da5b3175cdf12887b104bf702389  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-zvfh-run.c
*************** a5498854044a7005fc430d9e85db21b8  gcc/te
*** 94706,94714 ****
  a3b980bdfbd34def55cb4d3c391fabed  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vrolr-template.h
  8b5ad895beab4f44d6c437c5e895a3ab  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run-nofm.c
  399b2f2863e8796c55f743e8c3ff0927  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run.c
! 39f31f6776f8c07ee2a5a087f2b4708c  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c
  a8fa812d905b55ae57ce821d94f1ffb2  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv.c
! 13b474631ddacfb35a08235d227f9c7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c
  ab2de916b7b2498d0032349388d147eb  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv.c
  3bf21f1fa4bc8a29aba5f4776b4e0db3  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-template.h
  9c0ccbf675e6663254fb7e4b50d269c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-zvfh-run.c
--- 94773,94781 ----
  a3b980bdfbd34def55cb4d3c391fabed  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vrolr-template.h
  8b5ad895beab4f44d6c437c5e895a3ab  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run-nofm.c
  399b2f2863e8796c55f743e8c3ff0927  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run.c
! 5fdfe4163e260a747518a2790d55f06d  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c
  a8fa812d905b55ae57ce821d94f1ffb2  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv.c
! f31ee4d432928a90ee164c79b78869cc  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c
  ab2de916b7b2498d0032349388d147eb  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv.c
  3bf21f1fa4bc8a29aba5f4776b4e0db3  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-template.h
  9c0ccbf675e6663254fb7e4b50d269c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-zvfh-run.c
*************** e5794d88a1109065814ce4f8f2246087  gcc/te
*** 95329,95334 ****
--- 95396,95405 ----
  1064dbbae3b2f7e04909839e8152b061  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
  e7ca8fe6239410f9affbff1106fd2d15  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr119114.c
  446b0327be112ddedf3f8db6bc96d603  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr119224.c
+ 21cad2ea7a1a5a2e645eed965ace99dd  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-1.c
+ 600f9912922423684f29884007330d55  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-2.c
+ b81941261eb74f03f85b72b205359f75  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-3.c
+ 7fc7aa17b0d67ed9ebe9082530c252eb  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652.h
  ee8bcba5f6876f2027f0f263f81465aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-1.c
  7ff884bfa2e6cf9bc4c6172466538515  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-10.c
  b2792e9264dcd6fa2e88f495d51677e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-11.c
*************** a386d42a89f75878c74496c442f903dd  gcc/te
*** 96836,96891 ****
  0b950bd448a42e8497d2523f6f760b73  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
  692d1c1c9345ec28dfc20c3b5bf3fd04  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f32.c
  0edb34b5f84b95688c9fad17bc1647ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f64.c
! 50b050f7261dcaf0c12c93337a81244d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
! 52c5f0398404991821945ddc13243ba0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
! 63a8f53726781ff0c29a4f56e6abf115  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
! 24fb3b93aca4c87feec4c1c2c09a3d86  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
! 4d9f562e5df6e9f94bc2751bba5a5bb4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! 688a5e8ccd21601e76196fc722a475a6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! 2d9b1eabad2e428b1dfb4a680b2ff3d8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
! 3afe8066731140457a3fd960b259b50c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
! 2db5274e98793e56720d8cea42131794  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
! 9a18c8f3bcfeb983047afcfacbf4caf3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
! 4aad86b4f5e8fbe640f824a976447f70  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
! 742bfd8c8c976d666959480f876d01d0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! 09ea1f43ef034dfb961369da0b720e0a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! 610c95a87c877e75bc5aa882511fa235  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! 5605d4d7fb970e375ee03a960d5501e8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
! 2a3875006630527257d2a20e97680a9a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
! 1f313ad9247ec030428dc1d3a4ac782d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
! 2df8e0f1d7644b40befe830ea1f00a3f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
! 6adeb1637ac13c77d1eebc6d2762fbb7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
! 0e21ab90384a2756e08fc828743e857f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! f5508135c951b6601f5e49b20922771d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! 4f5ca493c00cc41d060d9e0ed162eb13  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! 36368859d4001b6f73bbe997d24a6143  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
! 318a2535578268b9eb032dc4fc849cef  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
! ce90c043f7e8a5767f4f52623c512f42  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
! 8ca7742968456da1fb04f228848de8fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
! a36730172826dc2d774bdc3b4dc862f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
! ebea0c316ef0be0c20023c196ff7c94a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
! 1d6ea96b1d245ebecfab36863e1e9bea  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
! 649058e701ca8152d7ef6c82a8abb4bd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
! 840b180f0dcf4460a86922ea079bbc88  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
! 83728de75f2ba6f4fce5a16bac6344cc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
! 0b73079dfba8823a21bba6f82233a495  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
! 9e7d7cbb38c04591510fe8ac6c886cba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
! 25df563b66dbbc09857d909168000713  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
! ccfb221f08f740ae213400b0e4557163  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
! 94af8a48b27ad77303a9f8ba7b480d3e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
! 08e2ea354326b2b3dc2393260f629c5c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
! 4655eedb70dbe62983b3a3dfba3f3bba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
! 707758cf1e770f3bae0a4f4da6e87a4a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
! 1f0aed477916a2a48a477f00022276d9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
! 4963aca4603f62e7dcd1adf2a43a5a92  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
! 49a2396648295907e346ad8723cfc6c0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
! 2040c57e8b059e4aee1b9ef6e0870278  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
! d719dc2b35e639538b6ad199f5b03590  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
! 0ee531acfe70e06c78cfb0ca63ac61f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
! 031179501228562edd7105e634e75ea1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
! d77ee266427bd2501aede4e0ebb036d5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
! 8a6007454ef2951151a09a59b6c6ba1d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! 8458b2ec3bb75af5342ed80abb1fb70b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  f82d1e3332267f884d6990983f9a5c50  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c
  9f3b8184fd845e5425e43d0e12950ff1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c
--- 96907,96962 ----
  0b950bd448a42e8497d2523f6f760b73  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
  692d1c1c9345ec28dfc20c3b5bf3fd04  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f32.c
  0edb34b5f84b95688c9fad17bc1647ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f64.c
! dd7808454602536be88e14f7d10f486f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
! fa4ac03e2d933578c31ca21f07ffc9f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
! ec224a03154ed25208d9fadaa99e389d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
! a294639dc592d5a79e3ebffd1a593df0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
! cb9d37252444eba2d60630d20f442e62  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! a623cb0e43786b01a2ae3e97ce96e4f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! ffcfbc1f6723d7d564516aba4e75d7ea  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
! e52506a17d9756f5e7ace1dd8d96d887  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
! d1668bd03963304916eb77e5bb9ae2a2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
! 12025ed008c85151e36d2b96ecfbf612  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
! 888fc2394d3b6f9c7e35950ebe32dbaa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
! 38323e2d60e44a0ddabe4f44a4d0d839  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! 483213d83622c1de860fd4ff541754c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! dd0b67d34a05d530674fe508aec348ac  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! 46a385189a0a49b2a70800fea5c23d89  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
! 935b44c57c414eccbf398a011d27aa90  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
! cd616239c9c47441ca489ea4964949e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
! 6c4c08f836984218f5c02b2d9c87a193  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
! 828039e9c1e96b046bb47c823fd296f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
! f108a5722bdabafd06db6e85101ecbb0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! 00a4fb9b398f871b2fb627ec3ce85fc8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! ea97fad0adfcd5f7cb145bec6ef558d0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! 6f5e18b259ea9955664dee6a18cd1abe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
! 02a7d4b4aa751ceac00ae2116ae94d76  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
! 865b405c46529b1cfa031526e6550635  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
! 8e28677a3b66e91211f40161b6612cd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
! a9a7b200d108af9cade843626a284798  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
! f556ef945e3c76a7a92d356f4e938183  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
! a2f59782968b8ce2d3b62f40e39577ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
! 8e309a2a5fc2a653374e3a7ce960d7b8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
! b88ce1975df4eeca6e860047cd092caa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
! 880af5d19409b1c80ee418474f4e6ac7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
! 99a98cfbd756fa439da2ae7f2b87f678  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
! 352abf4ca6ef05b6a3991013abc0da7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
! b63ce9d06bf3917eba4fab4cce7c2e95  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
! ae11f45fda59a4dd480816bb0974b884  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
! dfb9d4cdfea7db8d990f7f9af324a3bd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
! 051a75b8ec6eeda7fb6dc7c01e78a098  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
! d6cc501ccc77f8614125d2ea8b16f8e4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
! 4bdf9a4d174180e890cf2995de6584c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
! 67ab5de1138b35e06133eb6ce99150b0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
! ec8562df80b24e7892b6c369531a3730  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
! 8e73711b84b47950cfdcb9db3de68025  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
! 97fcd42af923bbad5b2011ef4e012a71  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
! f3ca09b750b08ad13c305ef710bfc218  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
! c1384de933274d148f7a650993444e09  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
! 8fa4a69a7e573634966c3d5b62fe5406  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
! 46a1e4516968d9123400ed0a23d28952  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
! 013e7c44a65d72cfc4021301c6fb56a2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! 828411eb10885b0e7e501129c336bde2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  f82d1e3332267f884d6990983f9a5c50  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i16.c
  9f3b8184fd845e5425e43d0e12950ff1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vadd-run-1-i32.c
*************** c076a7fbd7f8c0673e5d3a4a627b78a3  gcc/te
*** 96927,96932 ****
--- 96998,97019 ----
  c80030fd3090eea241059b04eac15ce2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-2-u32.c
  a27a441c7767509bda668e7decb95a38  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-2-u64.c
  d2885df0e08ae7841dcf17483e5e95de  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-2-u8.c
+ c9e0d3e065557b4fc3c492151baeb351  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i16.c
+ a26ea6f800cd4cc286de522caf3f734f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i32.c
+ 82cfb25b3a508d6596087f549dd5f559  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i64.c
+ 47815f64ee7f3c2b9eb33c417be63727  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i8.c
+ b700ad820ffefff6b2f1d630e4df4dda  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u16.c
+ 0eddb35a04f29187ed018c67723958e1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u32.c
+ 6923ba1aafd23aae3d9c535613955425  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u64.c
+ d8c613464c106af994a1910ae50db6f3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u8.c
+ 2e152ca37a7e218863cd8c7aa41b8405  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i16.c
+ 8d434d7b2e317d3f0570c78a30136d4b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i32.c
+ a1b9f8ae5b1f332e5b48755b28e40cdb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i64.c
+ 601bfe399957256eadd78a76da4194d6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i8.c
+ 3866f4c66171817617db9e41a4a572ba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u16.c
+ 535e49e9df34ef1ca5da4d694786afe2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u32.c
+ 2b9d8e190f843a7c4a8946cc51f91351  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u64.c
+ 2de3c2ecf1ee7b545dbebb663de55351  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u8.c
  9076cf8f652bb87f5614bdec4824fc2f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i16.c
  f3610778d536959133cfda7115cd7ca8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i32.c
  8b6a8f2a6c0bc3be747fd220041e321f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i64.c
*************** f93d01a4769012de04e02ac44e05cd46  gcc/te
*** 97983,97989 ****
  e4457fcb3c7eb7d9b0612ce8e58acd93  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-34.c
  4b3f57506f7bb41746d7ebfed21be19d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-35.c
  ee08e471795cc953a8159c8367235ec2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c
! dd6de1b486b2dafa5919c7d69c11ccf5  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c
  fc113c8d95b51954d7f9871c93446b9f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-38.c
  a257665e3d63cec5cac3c4516dc204c9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c
  17d98ea8a8a651bc5ea1c12a8a76e844  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c
--- 98070,98076 ----
  e4457fcb3c7eb7d9b0612ce8e58acd93  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-34.c
  4b3f57506f7bb41746d7ebfed21be19d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-35.c
  ee08e471795cc953a8159c8367235ec2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-36.c
! 1b0c37572b837f0e0c8f7e03f1c0b00b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c
  fc113c8d95b51954d7f9871c93446b9f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-38.c
  a257665e3d63cec5cac3c4516dc204c9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c
  17d98ea8a8a651bc5ea1c12a8a76e844  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c
*************** aa4ddbbbf67691c72071a00529ecc48a  gcc/te
*** 98193,98203 ****
  8c51a7469b86f6d410266ba0c13c4f6b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-14.c
  ea2b33efc025442329a336a059925ff7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-15.c
  3f07a9149e9ac4032c6fd871d0371a4c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-16.c
! f2f84382347e414758c259f0dfead3dd  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c
! 8d5d22a52619a43923c5730f8975d232  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c
! 70b874dbbfe0f7b62ec5990a886cc963  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c
  02ec03ccfb668b351de40962b4525774  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-2.c
! 00eb1c6edc60407a4a44d70cee21366b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c
  cde86dd4e44b53be452f5c6b6d1c01da  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-21.c
  2242fb56ee1673059d261659fbcaae30  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-22.c
  b0e5119c93d15f64cec2ddf78c015be6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-23.c
--- 98280,98290 ----
  8c51a7469b86f6d410266ba0c13c4f6b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-14.c
  ea2b33efc025442329a336a059925ff7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-15.c
  3f07a9149e9ac4032c6fd871d0371a4c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-16.c
! 75d1f0f0b1c9a12031ea53c461bd2b15  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c
! cffec56716c682862b9366cda346ab51  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c
! c9a0a7608ef26fb3e1598a09299a3152  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c
  02ec03ccfb668b351de40962b4525774  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-2.c
! 7db23cf82bc61c50eb46d36ada54cde8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c
  cde86dd4e44b53be452f5c6b6d1c01da  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-21.c
  2242fb56ee1673059d261659fbcaae30  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-22.c
  b0e5119c93d15f64cec2ddf78c015be6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-23.c
*************** ada8ab5ecb79eb9a7c676ead41d16895  gcc/te
*** 99182,99187 ****
--- 99269,99275 ----
  645b786f57cf22130bf9547def0c9cd1  gcc/testsuite/gcc.target/riscv/xventanacondops-primitiveSemantics.c
  f686a2e0acc6e52363dfe4de36049ac3  gcc/testsuite/gcc.target/riscv/xventanacondops-xor-01.c
  c44fe89e98d27a7ac7ee27d254a9f8a8  gcc/testsuite/gcc.target/riscv/za-ext.c
+ 46c4eaf7fc54b3a879b2aff3881f11af  gcc/testsuite/gcc.target/riscv/zalrsc.c
  0c373decb8e9d4769304c152ead07ab9  gcc/testsuite/gcc.target/riscv/zawrs.c
  c365e36104fa71b9d21ff3749043ed59  gcc/testsuite/gcc.target/riscv/zba-adduw.c
  8ebdc283aea5f958d8df81217669c6cc  gcc/testsuite/gcc.target/riscv/zba-shNadd-01.c
*************** ba47b75208cc6c431c72274b32d7fd1d  gcc/te
*** 99298,99303 ****
--- 99386,99392 ----
  b8f6723972246fcf0c403bc0a4fff8b8  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_imm_reg.c
  e92eba08f2739947db68fef062bd932f  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_imm_return_reg_reg.c
  c5e49a277aa6f0a5b9a5eca8c469a469  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg.c
+ 6112e534b1b04803b00f47bd0fb0657a  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_reg_return_reg_reg.c
  c0e16418fcba4200f353fc05cb0cb2cd  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_0_imm.c
  08ba82f98c56bbe8ad4ab57c378fadb7  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_imm.c
  871a65c271bbf0b6d94aeedf867cb4c3  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_return_imm_reg.c
*************** a009fbb003840ecc4d7a50c463fa72da  gcc/te
*** 99312,99317 ****
--- 99401,99408 ----
  bb2b3e0ab01f1ec16e989024621b390a  gcc/testsuite/gcc.target/riscv/zihintpause-1.c
  2b3fb44b9845e2008eee1f6ba7b44bc4  gcc/testsuite/gcc.target/riscv/zihintpause-2.c
  b93bb61a6adb25211cec61b639273181  gcc/testsuite/gcc.target/riscv/zihintpause-noarch.c
+ 70e2ba21009e1db30b88fe6569ef97c9  gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-1.c
+ c4d11819daad481809a78407b7815f76  gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-2.c
  f7d12c5379fd73c039260ba85d51a8a7  gcc/testsuite/gcc.target/riscv/zilsd-code-gen.c
  d96c5cb0ac69fd365634d1203364b2db  gcc/testsuite/gcc.target/riscv/zknd32.c
  6e2cf258e5cd8bad0c1d9153cdb923ad  gcc/testsuite/gcc.target/riscv/zknd64.c
*************** f285001fd760bb0206c1906b50f73178  gcc/te
*** 100898,100904 ****
  239326402b381d1c35048c764b531a4c  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
  d0150a0667dab730bd24380792e64840  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
  ce0be853686967c7cfa86c7155e12fbe  gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
! 49271be70124e402f112b4c0112f0a73  gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
  96b2de6d77d0802911b32936e89f5656  gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
  ba43d0510f74e20a8935d7dc1ff269bd  gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
  d2a6ba025a5971544a32ecf48e921154  gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
--- 100989,100995 ----
  239326402b381d1c35048c764b531a4c  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
  d0150a0667dab730bd24380792e64840  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
  ce0be853686967c7cfa86c7155e12fbe  gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
! 7b77af717bba6a40aeee2b7b02502429  gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
  96b2de6d77d0802911b32936e89f5656  gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
  ba43d0510f74e20a8935d7dc1ff269bd  gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
  d2a6ba025a5971544a32ecf48e921154  gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
*************** a9416652aa64c95df384346392cbfe6e  gcc/te
*** 101163,101170 ****
  5a104f8eacc55b9d4292f91bb5b77563  gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c
  d7d13a4de1bb8d4900eec10ef3010828  gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c
  c1831e6dbeb2aec9e1b98afc4cc0902f  gcc/testsuite/gcc.target/xtensa/constsynth_double.c
- 28eaa56254e255a49e278e3a342b35e0  gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_0.c
- ce29d96a29845fe03357acacff463e16  gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_1.c
  553083855fb266d0dde46053f5331304  gcc/testsuite/gcc.target/xtensa/elim_callee_saved.c
  67f6bc3272f355380928a1c0a5bf2049  gcc/testsuite/gcc.target/xtensa/funnel_shifter.c
  5dd88a67050813a2722e394515530667  gcc/testsuite/gcc.target/xtensa/mabi-call0.c
--- 101254,101259 ----
*************** bff4f86cadc34cdb60ab04c217d46dbd  gcc/te
*** 105809,105814 ****
--- 105898,105904 ----
  9f39ddc177a6f3ff474548de040842f7  gcc/testsuite/gfortran.dg/allocate_with_mold_2.f90
  f4cacbb7fc7a73c4dc452abb4169a708  gcc/testsuite/gfortran.dg/allocate_with_mold_3.f90
  7d6318515de269c6859cdb9dea3519ac  gcc/testsuite/gfortran.dg/allocate_with_mold_4.f90
+ 516ab2101e0a7432925ea8c85bbc95d5  gcc/testsuite/gfortran.dg/allocate_with_mold_5.f90
  8525309ee0a25fc4ec16a87c02a27e9a  gcc/testsuite/gfortran.dg/allocate_with_source_1.f90
  31f46b6f8cf8a1610b258ea73d0033de  gcc/testsuite/gfortran.dg/allocate_with_source_10.f08
  3e69f8fb58e06a24fc9934b0040bc33c  gcc/testsuite/gfortran.dg/allocate_with_source_11.f08
*************** c5a256733781be2dc88ea518b8758391  gcc/te
*** 109923,109929 ****
  daa1172ed1d5a6072057b20aaca3b1ec  gcc/testsuite/gfortran.dg/graphite/scop-1.f
  702b0cdf61e5478dccaf83e842bc3466  gcc/testsuite/gfortran.dg/graphite/vect-pr40979.f90
  7f4798472e54ab24309f0edab16c91d1  gcc/testsuite/gfortran.dg/graphite/vect-pr94043.f90
! 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
--- 110013,110019 ----
  daa1172ed1d5a6072057b20aaca3b1ec  gcc/testsuite/gfortran.dg/graphite/scop-1.f
  702b0cdf61e5478dccaf83e842bc3466  gcc/testsuite/gfortran.dg/graphite/vect-pr40979.f90
  7f4798472e54ab24309f0edab16c91d1  gcc/testsuite/gfortran.dg/graphite/vect-pr94043.f90
! 6d96f31789e9318047e153d50e613791  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
*************** eef9c4fb4632664f421c4067e9f7dd53  gcc/te
*** 112920,112925 ****
--- 113010,113016 ----
  bcec3240f40aa5093a05d7cd8024acf3  gcc/testsuite/gfortran.dg/save_6.f90
  751220763a6526f3644c983c901f1c25  gcc/testsuite/gfortran.dg/save_7.f90
  6be5b43eab49c79032e7249345565e1c  gcc/testsuite/gfortran.dg/save_8.f90
+ 54c44419e66a3bf4083075200afb117b  gcc/testsuite/gfortran.dg/save_alloc_character_1.f90
  969e348eec71de0c469550da97db323d  gcc/testsuite/gfortran.dg/save_common.f90
  8077a483f690b8b2a62c945c63fa4b57  gcc/testsuite/gfortran.dg/save_parameter.f90
  1a1f478cd1af5c7ca0f1139bd3142853  gcc/testsuite/gfortran.dg/save_result.f90
*************** c8b716cee316206a2cc9482d0e553937  gcc/te
*** 113119,113124 ****
--- 113210,113216 ----
  660cebcc8ffff86cb4ccb16d81f894fb  gcc/testsuite/gfortran.dg/spread_zerosize_1.f90
  3a0b66bd350086053b26eb6d89399496  gcc/testsuite/gfortran.dg/stat_1.f90
  3d99e8b3d3ffdc87f7cb331267201841  gcc/testsuite/gfortran.dg/stat_2.f90
+ fd95bf33f7e44fecec20961473aa2f46  gcc/testsuite/gfortran.dg/stat_3.f90
  6fd4f51de0ba02b7c11c54cc3d2847c3  gcc/testsuite/gfortran.dg/statement_function_1.f90
  5fc47d7780848b7c842c444d94dc4eca  gcc/testsuite/gfortran.dg/statement_function_2.f90
  dbb65e9cc1aa2d7834531d84c81cb2d0  gcc/testsuite/gfortran.dg/statement_function_3.f
*************** db7436cc6948424e65700d7b6597862f  gcc/te
*** 115279,115284 ****
--- 115371,115377 ----
  2e24a3e28841ca8e384564b7acfa33e3  gcc/testsuite/gm2/pim/fail/badexpression2.mod
  89a7178511546bb8afdc764de0335c4a  gcc/testsuite/gm2/pim/fail/badfunc.mod
  3cd3393b9ababea5806a0cace8d0ebbc  gcc/testsuite/gm2/pim/fail/badifin.mod
+ 903da6080f9bf68896764b9f9949159d  gcc/testsuite/gm2/pim/fail/badmodvar.mod
  8805471600280b26d1436d6cfcff4ac9  gcc/testsuite/gm2/pim/fail/badparam.mod
  06e24a2d59b14219f627f48df32c5901  gcc/testsuite/gm2/pim/fail/badparam2.mod
  13f6eaffdf8fc096d373469d4a6bda4e  gcc/testsuite/gm2/pim/fail/badparamset1.mod
*************** c0a1e7a398973481be6f30c11eee5bae  gcc/te
*** 115315,115320 ****
--- 115408,115416 ----
  cc99f9e949c6dddafb584904b9be8f3c  gcc/testsuite/gm2/pim/fail/constsize3.mod
  8b50d0c15682d656c7047227936175ce  gcc/testsuite/gm2/pim/fail/constvar.mod
  54025100702ca0cb25f9ada45667ec17  gcc/testsuite/gm2/pim/fail/convert5.mod
+ 7ae3ce8e09aa59edde4769f7757ce872  gcc/testsuite/gm2/pim/fail/cyclictypes.mod
+ cf5964a594fddba35dbfb194aeb2e839  gcc/testsuite/gm2/pim/fail/cyclictypes2.mod
+ 34144859bc9578fe905aadbe5f53fbf2  gcc/testsuite/gm2/pim/fail/cyclictypes4.mod
  3f4c180de69d4c0b8298d9e6afdd1060  gcc/testsuite/gm2/pim/fail/dupconst.mod
  3c76b2c22335070f117f23a28bab42ec  gcc/testsuite/gm2/pim/fail/dupenum.mod
  4abe92933af7dafe1feaa8c7a215fb00  gcc/testsuite/gm2/pim/fail/dupfield.mod
*************** bc32d4230d22e40bfcb1e74bb392ab97  gcc/te
*** 116073,116078 ****
--- 116169,116175 ----
  48bea14426a2eb3497c75d91b28ead48  gcc/testsuite/gm2/pimlib/logitech/run/pass/realinput2.mod
  86bd87e23026ed6bf9dab38da47fd638  gcc/testsuite/gm2/pimlib/logitech/run/pass/realinput3.mod
  6de5e9c5a7b2bb68088a9983d496b0ef  gcc/testsuite/gm2/pimlib/logitech/run/pass/rename.mod
+ 90894de07b46fc09b2259d3be72ef874  gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod
  00248d5f46033daa8b9856ff2869e3e5  gcc/testsuite/gm2/pimlib/logitech/run/pass/timedate.mod
  cb7f18d9d8e9955ad964a25e931aacba  gcc/testsuite/gm2/pimlib/logitech/run/pass/writeoct.mod
  0e008071b07f2e6b9b9336fa1f4f28ba  gcc/testsuite/gm2/pimlib/pass/pimlib-pass.exp
*************** bc5d484f0195c40f96573375913aad6a  gcc/te
*** 118348,118353 ****
--- 118445,118451 ----
  b028802f236df04a9a038de337a5c2dc  gcc/testsuite/gnat.dg/specs/aggr5.ads
  8317714735f6bcf3820730db670ecec1  gcc/testsuite/gnat.dg/specs/aggr6.ads
  57ec76624056e533c277432e503fe83c  gcc/testsuite/gnat.dg/specs/aggr7.ads
+ d85e98dad301b07f80ba5ad3d5adbe63  gcc/testsuite/gnat.dg/specs/aggr8.ads
  03d5230a50a20391e0238f6841dcaf91  gcc/testsuite/gnat.dg/specs/ai_116.ads
  7d85593bd2feb29192cd8b150c52dde2  gcc/testsuite/gnat.dg/specs/alignment1.ads
  2137406ab24e57901900aff5d6a8f7d6  gcc/testsuite/gnat.dg/specs/alignment2.ads
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 121306,121312 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 474abc7842ec644f55393de877b9c421  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
--- 121404,121410 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 5f89f68215a27a3ac284de8930332a8a  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
*************** b4a6da1471f279353aaca4956c18cdea  gcc/tr
*** 123766,123772 ****
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  918b3dce8ecc8579127255abad77605e  gcc/tree-call-cdce.cc
! 2c87f033308afd4a480f0002b4e08601  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  ca2c309862705e4161a11efb32eb1ebf  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
--- 123864,123870 ----
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  918b3dce8ecc8579127255abad77605e  gcc/tree-call-cdce.cc
! da458e5a38b79bc75fc738a312e02056  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  ca2c309862705e4161a11efb32eb1ebf  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
*************** e046a9c4874579f81515c4b3d9106b63  gcc/tr
*** 123790,123796 ****
  7e063b1edd28723f3f432596c39cfbee  gcc/tree-hasher.h
  3b55b5e5e173904c824977c38dc00a9c  gcc/tree-if-conv.cc
  002c9568898504ca2025dcacf5151fd6  gcc/tree-if-conv.h
! 13f67eebd4d2b055a6009279c7033b66  gcc/tree-inline.cc
  326f91431bfd3c15d8ddd74699d666e6  gcc/tree-inline.h
  90ca59c0844cd326f35f9cae17ec174b  gcc/tree-into-ssa.cc
  ef1cb0fba517532ecda9f4e0dd5218f7  gcc/tree-into-ssa.h
--- 123888,123894 ----
  7e063b1edd28723f3f432596c39cfbee  gcc/tree-hasher.h
  3b55b5e5e173904c824977c38dc00a9c  gcc/tree-if-conv.cc
  002c9568898504ca2025dcacf5151fd6  gcc/tree-if-conv.h
! 1a6d10aacc6fc861465d30fba9113894  gcc/tree-inline.cc
  326f91431bfd3c15d8ddd74699d666e6  gcc/tree-inline.h
  90ca59c0844cd326f35f9cae17ec174b  gcc/tree-into-ssa.cc
  ef1cb0fba517532ecda9f4e0dd5218f7  gcc/tree-into-ssa.h
*************** df85736a75a28f2d961a417c6edbbeeb  gcc/va
*** 123937,123944 ****
  5ee1b56a5e76c505c40cf28eb30f62e6  gcc/value-range-pretty-print.h
  6b536deb5ade6571e0988bf82fede1e2  gcc/value-range-storage.cc
  0b17e8456f7912204776ffd65ac2da59  gcc/value-range-storage.h
! 0298bac7b6e60a6f547611a2ec75c8cf  gcc/value-range.cc
! 3d0525509765bf6d8ff7d4a7490bcc69  gcc/value-range.h
  deaa5727e1ea5e4802dc5240239a6a3a  gcc/value-relation.cc
  e10bc25b7d5b26ec39898cb88adde4dd  gcc/value-relation.h
  db99ee82ab71b58820d60f9863e62aac  gcc/var-tracking.cc
--- 124035,124042 ----
  5ee1b56a5e76c505c40cf28eb30f62e6  gcc/value-range-pretty-print.h
  6b536deb5ade6571e0988bf82fede1e2  gcc/value-range-storage.cc
  0b17e8456f7912204776ffd65ac2da59  gcc/value-range-storage.h
! 897cd00225966503e9200b046db9d262  gcc/value-range.cc
! 5fb6cbdfaeb472367ed05c400ce8d44a  gcc/value-range.h
  deaa5727e1ea5e4802dc5240239a6a3a  gcc/value-relation.cc
  e10bc25b7d5b26ec39898cb88adde4dd  gcc/value-relation.h
  db99ee82ab71b58820d60f9863e62aac  gcc/var-tracking.cc
*************** d72991a60a600bb2f927c55d8c886217  gcc/ve
*** 123952,123958 ****
  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
--- 124050,124056 ----
  54a3885ae2d326266cc13ab447394d8f  gcc/vector-builder.h
  40fec2b7bbea0b654d0704244caa4e9c  gcc/vmsdbg.h
  c2784afc7476e44bc70100f7c350e07b  gcc/vmsdbgout.cc
! 41fd2e91149d2f3bc8f889ed41c2c410  gcc/vr-values.cc
  0901703123c4198bb16fc8076912bd2e  gcc/vr-values.h
  9ce284cb128dc6f9cadddec86a09bb4a  gcc/vtable-verify.cc
  cdaf5a05f59e5ac25581747f6a7b4fe9  gcc/vtable-verify.h
*************** c4e8176c1964a5ebe0a55900f2141299  gotool
*** 123982,123988 ****
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 5661e25bb3a6436341ef76e3acc83af3  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  44b123c52a2755c9e6bf43ec0c33ae49  include/ansidecl.h
--- 124080,124086 ----
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 803a43febf353bb842997aaa068469fe  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  44b123c52a2755c9e6bf43ec0c33ae49  include/ansidecl.h
*************** add6cc404aee74ef33ad44cf7930a899  includ
*** 124015,124021 ****
  91ecff44973c64cfdfc2e3c412c56a80  include/libcollector.h
  71ab4f2b87330987580da553ce63f7c7  include/libfcollector.h
  e6ec1b5594d3c2b4fb4c7c22a25108be  include/libiberty.h
! 00dc0cc7a7a0b63fdb4677bf86248243  include/longlong.h
  aed43c5ed4317377043b964bab985093  include/lto-symtab.h
  4182cc168d3cd5762aa0182ebb59c5a5  include/md5.h
  94050e374a4cacc270466637b4eb9411  include/objalloc.h
--- 124113,124119 ----
  91ecff44973c64cfdfc2e3c412c56a80  include/libcollector.h
  71ab4f2b87330987580da553ce63f7c7  include/libfcollector.h
  e6ec1b5594d3c2b4fb4c7c22a25108be  include/libiberty.h
! 266ebf6ed7b71766881387dd58040705  include/longlong.h
  aed43c5ed4317377043b964bab985093  include/lto-symtab.h
  4182cc168d3cd5762aa0182ebb59c5a5  include/md5.h
  94050e374a4cacc270466637b4eb9411  include/objalloc.h
*************** cffdeae41b78da05839b193e90188f55  libcod
*** 124243,124249 ****
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! 50f05ce049316ab492baf62329b4e80b  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  e80a909ca87015a009bee9588bb84a64  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
--- 124341,124347 ----
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! 4578e8d1e9bd348775732e4f5a79918c  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  e80a909ca87015a009bee9588bb84a64  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
*************** ce74c78c2cb27bcdeac8a9b0400712cd  libcpp
*** 124260,124273 ****
  c496c50691c37464e0aacc985cc3ab1e  libcpp/identifiers.cc
  625e2785c1c28cbca2c662f92d67cf2b  libcpp/include/cpplib.h
  ac88522f7fec46badcd2623d11a4b61e  libcpp/include/label-text.h
! 3e6896aab65e6ef45626f6853773571b  libcpp/include/line-map.h
  4779aaa10e24fd2398a105e78bdd88a5  libcpp/include/mkdeps.h
  8dc5525eef86dcf1b1ee26cd243ab3a6  libcpp/include/rich-location.h
  d516a30568fd33a5e69be4374f27812f  libcpp/include/symtab.h
  3f05e522dd9325c9807fc4f662533f7b  libcpp/init.cc
  a0d37c297f3d462529b502a4e1bd2378  libcpp/internal.h
  4e6255f45482c932e22abfa044142804  libcpp/lex.cc
! a8d3c292c5b6af1501cb5bbaeb0a86c0  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  9ca45c4c9e1829d625f4cc03b82debd1  libcpp/macro.cc
  b4c085899eca6fc0e5ddc81d15fc2e67  libcpp/makeucnid.cc
--- 124358,124371 ----
  c496c50691c37464e0aacc985cc3ab1e  libcpp/identifiers.cc
  625e2785c1c28cbca2c662f92d67cf2b  libcpp/include/cpplib.h
  ac88522f7fec46badcd2623d11a4b61e  libcpp/include/label-text.h
! 7bab1640ddcf15772a1a51f0315a3099  libcpp/include/line-map.h
  4779aaa10e24fd2398a105e78bdd88a5  libcpp/include/mkdeps.h
  8dc5525eef86dcf1b1ee26cd243ab3a6  libcpp/include/rich-location.h
  d516a30568fd33a5e69be4374f27812f  libcpp/include/symtab.h
  3f05e522dd9325c9807fc4f662533f7b  libcpp/init.cc
  a0d37c297f3d462529b502a4e1bd2378  libcpp/internal.h
  4e6255f45482c932e22abfa044142804  libcpp/lex.cc
! 4db7eb22b48b044d4c574217d110732b  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  9ca45c4c9e1829d625f4cc03b82debd1  libcpp/macro.cc
  b4c085899eca6fc0e5ddc81d15fc2e67  libcpp/makeucnid.cc
*************** f017ba40c4699f1549cd341ad688007f  libgcc
*** 126325,126331 ****
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! 670c2cd55b2829f290a505caa724057c  libgcobol/ChangeLog
  573e7a1dee0641f56d9b797b23dff44b  libgcobol/Makefile.am
  23cf4646d213d05645a0bf48209b374d  libgcobol/Makefile.in
  ff016a65ce3c24bdd22207044f2a126e  libgcobol/README
--- 126423,126430 ----
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! 3b4f74daa64fc17d51a60fb2642aee3a  libgcobol/ChangeLog
! b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  573e7a1dee0641f56d9b797b23dff44b  libgcobol/Makefile.am
  23cf4646d213d05645a0bf48209b374d  libgcobol/Makefile.in
  ff016a65ce3c24bdd22207044f2a126e  libgcobol/README
*************** ff016a65ce3c24bdd22207044f2a126e  libgco
*** 126333,126339 ****
  0bf6afe766a6886d2ac1f175300477f2  libgcobol/aclocal.m4
  3d3a800933c22566d11e09ab88c455e1  libgcobol/charmaps.cc
  08bac5426c592bca32b87e76cd4a87a1  libgcobol/charmaps.h
! b6ee3616eae9ac11be1daad800bf9909  libgcobol/common-defs.h
  6a3b66323eab3b40a9c109aafd9f27c6  libgcobol/config.h.in
  7c39e3ffa421728393475f0c1e747e59  libgcobol/configure
  faf06b9fb823d12e0ec967db524ba97e  libgcobol/configure.ac
--- 126432,126438 ----
  0bf6afe766a6886d2ac1f175300477f2  libgcobol/aclocal.m4
  3d3a800933c22566d11e09ab88c455e1  libgcobol/charmaps.cc
  08bac5426c592bca32b87e76cd4a87a1  libgcobol/charmaps.h
! e4ef5d747b4bb5aad3ba0f23ddf2335a  libgcobol/common-defs.h
  6a3b66323eab3b40a9c109aafd9f27c6  libgcobol/config.h.in
  7c39e3ffa421728393475f0c1e747e59  libgcobol/configure
  faf06b9fb823d12e0ec967db524ba97e  libgcobol/configure.ac
*************** d8a5cbab4bf15a09ef68e887f0562aa5  libgco
*** 126355,126361 ****
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  7921a81e3cbf784d960d70db7bc6e242  libgcobol/valconv.cc
  c7d27fb7e36a42567d7cc4d14e7ed3fe  libgcobol/valconv.h
! 4d17b62fad048ac99adfa7ca9f0bed9a  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
--- 126454,126460 ----
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  7921a81e3cbf784d960d70db7bc6e242  libgcobol/valconv.cc
  c7d27fb7e36a42567d7cc4d14e7ed3fe  libgcobol/valconv.h
! 06a9b331b85a58db2f3ad3141b06400a  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
*************** b29ee7cae3fcc4d764be8a110d096020  libgfo
*** 127248,127254 ****
  dc8f1321adfc8e343b6a370305a09764  libgfortran/intrinsics/size.c
  a59513fa96d8a6c654cab456bd87cdc6  libgfortran/intrinsics/sleep.c
  a8a3ba18811d0fd758b4b3d1cd067b2d  libgfortran/intrinsics/spread_generic.c
! a92436fb0123e0dbb09b4196394fe40e  libgfortran/intrinsics/stat.c
  47dcf8d004f075c126445c87fa1e4784  libgfortran/intrinsics/string_intrinsics.c
  ed16fb722c5320a24fdc6d9b74d1e225  libgfortran/intrinsics/string_intrinsics_inc.c
  91e38077d5e75b08c370195e51e0ae91  libgfortran/intrinsics/symlnk.c
--- 127347,127353 ----
  dc8f1321adfc8e343b6a370305a09764  libgfortran/intrinsics/size.c
  a59513fa96d8a6c654cab456bd87cdc6  libgfortran/intrinsics/sleep.c
  a8a3ba18811d0fd758b4b3d1cd067b2d  libgfortran/intrinsics/spread_generic.c
! 5553384f859ee67a0b1d6e4d2074ace4  libgfortran/intrinsics/stat.c
  47dcf8d004f075c126445c87fa1e4784  libgfortran/intrinsics/string_intrinsics.c
  ed16fb722c5320a24fdc6d9b74d1e225  libgfortran/intrinsics/string_intrinsics_inc.c
  91e38077d5e75b08c370195e51e0ae91  libgfortran/intrinsics/symlnk.c
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 132918,132924 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 14129940f6e90585911ee7e71620b8d3  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  883cfea6de23904b83d6bd58a729c866  libgomp/Makefile.am
  54c7bc8277669e3bf5f1a3db179ae206  libgomp/Makefile.in
--- 133017,133023 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! bbb565e0a30c892c451b2b4fd9c36c05  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  883cfea6de23904b83d6bd58a729c866  libgomp/Makefile.am
  54c7bc8277669e3bf5f1a3db179ae206  libgomp/Makefile.in
*************** fe834e77193cffc9757fa7871241a57b  libgom
*** 133061,133067 ****
  b5ba8a8b2b31f2f9bd9ac0760b81da9f  libgomp/libgomp.h
  50f762df7ab8d23bd5473f223e32cf05  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 7679b9dac242ac19b50759f6a159ac33  libgomp/libgomp.texi
  519d28879206bae759d85cd3bb7b493b  libgomp/libgomp_f.h.in
  fdadcc861565b686070908326f5e5914  libgomp/libgomp_g.h
  a5060d745455b036a62cc46de1fe0576  libgomp/lock.c
--- 133160,133166 ----
  b5ba8a8b2b31f2f9bd9ac0760b81da9f  libgomp/libgomp.h
  50f762df7ab8d23bd5473f223e32cf05  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 77b29151e111d8b27e8fcb0046fd0e15  libgomp/libgomp.texi
  519d28879206bae759d85cd3bb7b493b  libgomp/libgomp_f.h.in
  fdadcc861565b686070908326f5e5914  libgomp/libgomp_g.h
  a5060d745455b036a62cc46de1fe0576  libgomp/lock.c
*************** f1eee47026bb1c516cd1b3a9b9c1c5fa  libgom
*** 133101,133107 ****
  6562eda8ef1a1fd0a2a0a9e5621f684b  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  a8a23ca7c25ca51062b636b0c099096a  libgomp/target-indirect.c
! 97fb711d2cc01dbd47d08cbfda817d0e  libgomp/target.c
  8f03749b5187ce4fb4dce3f7d5b2d9f7  libgomp/task.c
  865cdfdff84a15247efff279e8aca77f  libgomp/taskloop.c
  f540431686cf02c11ae33b1cd66e01ca  libgomp/team.c
--- 133200,133206 ----
  6562eda8ef1a1fd0a2a0a9e5621f684b  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  a8a23ca7c25ca51062b636b0c099096a  libgomp/target-indirect.c
! 1e9a27934c58150f118aea09efb258d4  libgomp/target.c
  8f03749b5187ce4fb4dce3f7d5b2d9f7  libgomp/task.c
  865cdfdff84a15247efff279e8aca77f  libgomp/taskloop.c
  f540431686cf02c11ae33b1cd66e01ca  libgomp/team.c
*************** dd6b619ee130db82170781062477eb42  libgom
*** 133184,133189 ****
--- 133283,133289 ----
  2eb1d9d112637bbafc20c3a646030e32  libgomp/testsuite/libgomp.c++/declare-mapper-8.C
  23c42bd29433374ffd8ef4b669c3ab98  libgomp/testsuite/libgomp.c++/declare-target-indirect-1.C
  69326cfd40097e393a1bdb2e95e9052d  libgomp/testsuite/libgomp.c++/declare_target-1.C
+ a571dcf473210e7664f748b4e44d47f5  libgomp/testsuite/libgomp.c++/declare_target-2.C
  9680d8fd6dafdcd73ddfb70fce9898b5  libgomp/testsuite/libgomp.c++/default-1.C
  01456b503209d46ee61ee8a1877c839c  libgomp/testsuite/libgomp.c++/depend-1.C
  5ddffb7f236c9b7b81760cac311649f6  libgomp/testsuite/libgomp.c++/depend-iterator-1.C
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 137969,137975 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! a02656354377696b01290fe06236d171  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 138069,138075 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 7f6bcd4398c6fe1f35a184175eab5fb9  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** c348ff89d182ca605abdd38410d38e4e  libstd
*** 140581,140588 ****
  35a5a8388dff81d0b60f03635c2412bc  libstdc++-v3/testsuite/20_util/is_class/requirements/explicit_instantiation.cc
  e560ce8df64321f55cb514b3433acccc  libstdc++-v3/testsuite/20_util/is_class/requirements/typedefs.cc
  f4e459f87411ef38d5b77f9cdcea5f4d  libstdc++-v3/testsuite/20_util/is_class/value.cc
! 8e0262639198bc494335575cf9f2d602  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc
! 7d18ecaf4f8613ec2212da82f4958303  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc
  a65f69464a6a814f65cacc6d13d28a90  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/value.cc
  abd275a41bc30e06dd5afcc9de6d6fa6  libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc
  b562522b4260521d81485c8d96aca789  libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc
--- 140681,140688 ----
  35a5a8388dff81d0b60f03635c2412bc  libstdc++-v3/testsuite/20_util/is_class/requirements/explicit_instantiation.cc
  e560ce8df64321f55cb514b3433acccc  libstdc++-v3/testsuite/20_util/is_class/requirements/typedefs.cc
  f4e459f87411ef38d5b77f9cdcea5f4d  libstdc++-v3/testsuite/20_util/is_class/value.cc
! 59fac3a70025714701beab703b2e0231  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc
! 1352507758e3a1126703dfee6abee68d  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc
  a65f69464a6a814f65cacc6d13d28a90  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/value.cc
  abd275a41bc30e06dd5afcc9de6d6fa6  libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc
  b562522b4260521d81485c8d96aca789  libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc
diff -Nrcpad gcc-16-20250615/Makefile.in gcc-16-20250622/Makefile.in
*** gcc-16-20250615/Makefile.in	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/Makefile.in	Sun Jun 22 22:32:17 2025
*************** HOST_EXPORTS = \
*** 207,212 ****
--- 207,213 ----
  	GOC="$(GOC)"; export GOC; \
  	GDC="$(GDC)"; export GDC; \
  	GM2="$(GM2)"; export GM2; \
+ 	GNATMAKE_FOR_BUILD="$(GNATMAKE_FOR_BUILD)"; export GNATMAKE_FOR_BUILD; \
  	AR="$(AR)"; export AR; \
  	AS="$(AS)"; export AS; \
  	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
*************** BASE_TARGET_EXPORTS = \
*** 312,317 ****
--- 313,319 ----
  	GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \
  	GDC="$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GDC; \
  	GM2="$(GM2_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GM2; \
+ 	GNATMAKE_FOR_BUILD="$(GNATMAKE_FOR_BUILD)"; export GNATMAKE_FOR_BUILD; \
  	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
  	DSYMUTIL="$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL; \
  	LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \
*************** GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD
*** 381,386 ****
--- 383,389 ----
  GOC_FOR_BUILD = @GOC_FOR_BUILD@
  GDC_FOR_BUILD = @GDC_FOR_BUILD@
  GM2_FOR_BUILD = @GM2_FOR_BUILD@
+ GNATMAKE_FOR_BUILD = @GNATMAKE_FOR_BUILD@
  LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
  LD_FOR_BUILD = @LD_FOR_BUILD@
  NM_FOR_BUILD = @NM_FOR_BUILD@
diff -Nrcpad gcc-16-20250615/Makefile.tpl gcc-16-20250622/Makefile.tpl
*** gcc-16-20250615/Makefile.tpl	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/Makefile.tpl	Sun Jun 22 22:32:17 2025
*************** HOST_EXPORTS = \
*** 210,215 ****
--- 210,216 ----
  	GOC="$(GOC)"; export GOC; \
  	GDC="$(GDC)"; export GDC; \
  	GM2="$(GM2)"; export GM2; \
+ 	GNATMAKE_FOR_BUILD="$(GNATMAKE_FOR_BUILD)"; export GNATMAKE_FOR_BUILD; \
  	AR="$(AR)"; export AR; \
  	AS="$(AS)"; export AS; \
  	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
*************** BASE_TARGET_EXPORTS = \
*** 315,320 ****
--- 316,322 ----
  	GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \
  	GDC="$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GDC; \
  	GM2="$(GM2_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GM2; \
+ 	GNATMAKE_FOR_BUILD="$(GNATMAKE_FOR_BUILD)"; export GNATMAKE_FOR_BUILD; \
  	DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
  	DSYMUTIL="$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL; \
  	LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \
*************** GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD
*** 384,389 ****
--- 386,392 ----
  GOC_FOR_BUILD = @GOC_FOR_BUILD@
  GDC_FOR_BUILD = @GDC_FOR_BUILD@
  GM2_FOR_BUILD = @GM2_FOR_BUILD@
+ GNATMAKE_FOR_BUILD = @GNATMAKE_FOR_BUILD@
  LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
  LD_FOR_BUILD = @LD_FOR_BUILD@
  NM_FOR_BUILD = @NM_FOR_BUILD@
diff -Nrcpad gcc-16-20250615/configure gcc-16-20250622/configure
*** gcc-16-20250615/configure	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/configure	Sun Jun 22 22:34:31 2025
*************** RANLIB_FOR_BUILD
*** 653,658 ****
--- 653,659 ----
  NM_FOR_BUILD
  LD_FOR_BUILD
  LDFLAGS_FOR_BUILD
+ GNATMAKE_FOR_BUILD
  GDC_FOR_BUILD
  GOC_FOR_BUILD
  GFORTRAN_FOR_BUILD
*************** if test "${build}" != "${host}" ; then
*** 4253,4263 ****
    CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
    CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
    CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
    DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
    GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
    GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
    GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
!   DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
    LD_FOR_BUILD=${LD_FOR_BUILD-ld}
    NM_FOR_BUILD=${NM_FOR_BUILD-nm}
    RANLIB_FOR_BUILD=${RANLIB_FOR_BUILD-ranlib}
--- 4254,4265 ----
    CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
    CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
    CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
+   DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
    DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
    GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
    GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
    GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
!   GNATMAKE_FOR_BUILD=${GNATMAKE_FOR_BUILD-gnatmake}
    LD_FOR_BUILD=${LD_FOR_BUILD-ld}
    NM_FOR_BUILD=${NM_FOR_BUILD-nm}
    RANLIB_FOR_BUILD=${RANLIB_FOR_BUILD-ranlib}
*************** else
*** 4268,4278 ****
    AS_FOR_BUILD="\$(AS)"
    CC_FOR_BUILD="\$(CC)"
    CXX_FOR_BUILD="\$(CXX)"
    DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
    GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
    GOC_FOR_BUILD="\$(GOC)"
    GDC_FOR_BUILD="\$(GDC)"
!   DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
    LD_FOR_BUILD="\$(LD)"
    NM_FOR_BUILD="\$(NM)"
    RANLIB_FOR_BUILD="\$(RANLIB)"
--- 4270,4281 ----
    AS_FOR_BUILD="\$(AS)"
    CC_FOR_BUILD="\$(CC)"
    CXX_FOR_BUILD="\$(CXX)"
+   DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
    DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
    GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
    GOC_FOR_BUILD="\$(GOC)"
    GDC_FOR_BUILD="\$(GDC)"
!   GNATMAKE_FOR_BUILD="\$(GNATMAKE)"
    LD_FOR_BUILD="\$(LD)"
    NM_FOR_BUILD="\$(NM)"
    RANLIB_FOR_BUILD="\$(RANLIB)"
*************** done
*** 11679,11684 ****
--- 11682,11688 ----
  
  
  
+ 
  
  
  
diff -Nrcpad gcc-16-20250615/configure.ac gcc-16-20250622/configure.ac
*** gcc-16-20250615/configure.ac	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/configure.ac	Sun Jun 22 22:32:17 2025
*************** if test "${build}" != "${host}" ; then
*** 1450,1460 ****
    CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
    CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
    CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
    DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
    GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
    GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
    GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
!   DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
    LD_FOR_BUILD=${LD_FOR_BUILD-ld}
    NM_FOR_BUILD=${NM_FOR_BUILD-nm}
    RANLIB_FOR_BUILD=${RANLIB_FOR_BUILD-ranlib}
--- 1450,1461 ----
    CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
    CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
    CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
+   DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
    DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
    GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
    GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
    GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
!   GNATMAKE_FOR_BUILD=${GNATMAKE_FOR_BUILD-gnatmake}
    LD_FOR_BUILD=${LD_FOR_BUILD-ld}
    NM_FOR_BUILD=${NM_FOR_BUILD-nm}
    RANLIB_FOR_BUILD=${RANLIB_FOR_BUILD-ranlib}
*************** else
*** 1465,1475 ****
    AS_FOR_BUILD="\$(AS)"
    CC_FOR_BUILD="\$(CC)"
    CXX_FOR_BUILD="\$(CXX)"
    DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
    GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
    GOC_FOR_BUILD="\$(GOC)"
    GDC_FOR_BUILD="\$(GDC)"
!   DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
    LD_FOR_BUILD="\$(LD)"
    NM_FOR_BUILD="\$(NM)"
    RANLIB_FOR_BUILD="\$(RANLIB)"
--- 1466,1477 ----
    AS_FOR_BUILD="\$(AS)"
    CC_FOR_BUILD="\$(CC)"
    CXX_FOR_BUILD="\$(CXX)"
+   DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
    DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
    GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
    GOC_FOR_BUILD="\$(GOC)"
    GDC_FOR_BUILD="\$(GDC)"
!   GNATMAKE_FOR_BUILD="\$(GNATMAKE)"
    LD_FOR_BUILD="\$(LD)"
    NM_FOR_BUILD="\$(NM)"
    RANLIB_FOR_BUILD="\$(RANLIB)"
*************** AC_SUBST(DSYMUTIL_FOR_BUILD)
*** 3915,3920 ****
--- 3917,3923 ----
  AC_SUBST(GFORTRAN_FOR_BUILD)
  AC_SUBST(GOC_FOR_BUILD)
  AC_SUBST(GDC_FOR_BUILD)
+ AC_SUBST(GNATMAKE_FOR_BUILD)
  AC_SUBST(LDFLAGS_FOR_BUILD)
  AC_SUBST(LD_FOR_BUILD)
  AC_SUBST(NM_FOR_BUILD)
diff -Nrcpad gcc-16-20250615/gcc/ChangeLog gcc-16-20250622/gcc/ChangeLog
*** gcc-16-20250615/gcc/ChangeLog	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/gcc/ChangeLog	Sun Jun 22 22:32:17 2025
***************
*** 1,3 ****
--- 1,502 ----
+ 2025-06-21  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-inline.cc (copy_cfg_body): Fix profile of split functions.
+ 
+ 2025-06-21  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/118241
+ 	* config/riscv/predicates.md (prefetch_operand): New predicate.
+ 	* config/riscv/constraints.md (Q): New constraint.
+ 	* config/riscv/riscv.md (prefetch): Use new predicate and constraint.
+ 	(riscv_prefetchi_<mode>): Similarly.
+ 
+ 2025-06-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120746
+ 	* value-range.cc (irange::snap): Use int type instead of uint.
+ 
+ 2025-06-21  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (dump_inline_stack): New function.
+ 	(get_inline_stack_in_node): New function.
+ 	(get_relative_location_for_stmt): Add FN parameter.
+ 	(has_indirect_call): Remove.
+ 	(function_instance::find_icall_target_map): Add FN parameter.
+ 	(function_instance::remove_icall_target): New function.
+ 	(function_instance::read_function_instance): Set sum_max.
+ 	(autofdo_source_profile::get_count_info): Add NODE parameter.
+ 	(autofdo_source_profile::update_inlined_ind_target): Add NODE parameter.
+ 	(autofdo_source_profile::remove_icall_target): New function.
+ 	(afdo_indirect_call): Add INDIRECT_EDGE parameter; dump reason
+ 	for failure; do not check for recursion; do not inline call.
+ 	(afdo_vpt): Add INDIRECT_EDGE parameter.
+ 	(afdo_set_bb_count): Do not take PROMOTED set.
+ 	(afdo_vpt_for_early_inline): Remove.
+ 	(afdo_annotate_cfg): Do not take PROMOTED set.
+ 	(auto_profile): Do not call afdo_vpt_for_early_inline.
+ 	(afdo_callsite_hot_enough_for_early_inline): Dump count.
+ 	(remove_afdo_speculative_target): New function.
+ 	* auto-profile.h (afdo_vpt_for_early_inline): Declare.
+ 	(remove_afdo_speculative_target): Declare.
+ 	* ipa-inline.cc (inline_functions_by_afdo): Do VPT.
+ 	(early_inliner): Redirecct edges if inlining happened.
+ 	* tree-inline.cc (expand_call_inline): Add sanity check.
+ 
+ 2025-06-21  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (get_inline_stack): Add fn parameter.
+ 	* ipa-inline.cc (want_early_inline_function_p): Do not care
+ 	about AFDO.
+ 	(inline_functions_by_afdo): New function.
+ 	(early_inliner): Use it.
+ 
+ 2025-06-21  Pan Li  <pan2.li@intel.com>
+ 
+ 	PR target/120652
+ 	* config/riscv/autovec.md: Add immediate_operand for
+ 	select_vl operand 2.
+ 
+ 2025-06-20  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120701
+ 	* value-range.cc (irange::verify_range): Verify range pairs are
+ 	sorted properly.
+ 	(irange::snap): Check for over/underflow properly.
+ 
+ 2025-06-20  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	PR target/120722
+ 	* config/gcn/gcn.cc (gcn_hard_regno_mode_ok): Allow SImode in VCC_HI.
+ 
+ 2025-06-20  Jørgen Kvalsvik  <j@lambda.is>
+ 
+ 	PR gcov-profile/120634
+ 	* prime-paths.cc (struct auto_vec_vec): Add constructor from
+ 	vec.
+ 	(test_split_components): Use auto_vec_vec.
+ 	(test_scc_internal_prime_paths): Ditto.
+ 	(test_scc_entry_exit_paths): Ditto.
+ 	(test_complete_prime_paths): Ditto.
+ 	(test_entry_prime_paths): Ditto.
+ 	(test_singleton_path): Ditto.
+ 
+ 2025-06-20  Jørgen Kvalsvik  <j@lambda.is>
+ 
+ 	PR gcov-profile/120634
+ 	* prime-paths.cc (trie::paths): Use auto_vec.
+ 
+ 2025-06-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120654
+ 	* vr-values.cc (range_fits_type_p): Check for undefined_p ()
+ 	before accessing type ().
+ 
+ 2025-06-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120708
+ 	* config/i386/i386-expand.cc (ix86_expand_set_or_cpymem): Use
+ 	MOVE_MAX to get the widest vector mode in vector loop.
+ 
+ 2025-06-20  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k.cc (or1k_noce_conversion_profitable_p): New
+ 	function.
+ 	(or1k_is_cmov_insn): New function.
+ 	(TARGET_NOCE_CONVERSION_PROFITABLE_P): Define macro.
+ 	* config/or1k/or1k.md (cbranchsi4): Convert to insn_and_split.
+ 	(cbranch<mode>4): Convert to insn_and_split.
+ 
+ 2025-06-20  Stafford Horne  <shorne@gmail.com>
+ 
+ 	PR target/120587
+ 	* config/or1k/or1k.md (zero_extendbisi2_sr_f): New expand.
+ 	(extendbisi2_sr_f): New expand.
+ 	* config/or1k/predicates.md (sr_f_reg_operand): New predicate.
+ 
+ 2025-06-20  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-v.cc (expand_vx_binary_vec_dup_vec): Add
+ 	new case UMIN.
+ 	(expand_vx_binary_vec_vec_dup): Ditto.
+ 	* config/riscv/riscv.cc (riscv_rtx_costs): Ditto.
+ 	* config/riscv/vector-iterators.md: Add new op umin.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/120689
+ 	* function.cc (assign_parm_setup_block): Align parm to at least
+ 	word alignment even on !STRICT_ALIGNMENT targets, as long as
+ 	BITS_PER_WORD is not larger than MAX_SUPPORTED_STACK_ALIGNMENT.
+ 
+ 2025-06-19  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120427
+ 	* config/i386/i386.md (*mov<mode>_and): Changed to
+ 	define_insn_and_split.  Split it to "mov $0,mem" if not -Oz.
+ 	(*mov<mode>_or): Changed to define_insn_and_split.  Split it
+ 	to "mov $-1,mem" if not -Oz.
+ 	(peephole2): Don't transform "mov $-1,reg" to "push $-1; pop reg"
+ 	for -Oz since it will be transformed to "or $-1,reg".
+ 
+ 2025-06-19  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR other/115893
+ 	* doc/install.texi (Prerequisites): Note that Texinfo older
+ 	than v7.1 may throw incorrect build warnings, cf.
+ 	https://lists.nongnu.org/archive/html/help-texinfo/2023-11/msg00004.html
+ 
+ 2025-06-19  Dongyan Chen  <chendongyan@isrc.iscas.ac.cn>
+ 
+ 	* config/riscv/riscv-cores.def (RISCV_TUNE): Add "generic" tune.
+ 	* config/riscv/riscv.cc: Add generic_tune_info.
+ 	* config/riscv/riscv.h (RISCV_TUNE_STRING_DEFAULT): Change default tune.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* dfp.cc (decimal_real_to_integer): Use result multiplication not just
+ 	when precision > 128 and dn.exponent > 19, but when precision > 64
+ 	and dn.exponent > 0.
+ 
+ 2025-06-19  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_legitimize_move): Use
+ 	riscv_2x_xlen_mode_p.
+ 	(riscv_binary_cost): Ditto.
+ 	(riscv_hard_regno_mode_ok): Ditto.
+ 
+ 2025-06-19  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_cost_model): Add cost model for
+ 	zilsd.
+ 
+ 2025-06-19  Lili Cui  <lili.cui@intel.com>
+ 
+ 	PR target/120697
+ 	* config/i386/i386.cc (ix86_expand_prologue):
+ 	Remove 3 assertions and associated code.
+ 
+ 2025-06-18  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 	    Richard Sandiford  <richard.sandiford@arm.com>
+ 	    Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR target/119966
+ 	* emit-rtl.cc (validate_subreg): Call simplify_subreg_regno
+ 	instead of checking info.representable_p..
+ 	* rtl.h (simplify_subreg_regno): Add new argument
+ 	allow_stack_regs.
+ 	* rtlanal.cc (simplify_subreg_regno): Do not reject
+ 	stack-related registers if allow_stack_regs is true.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-range.cc (irange::intersect_bitmask): Always update the
+ 	stored mask to reflect the current calculated mask.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/119039
+ 	* value-range.cc (irange::contains_p): Call wide_int version of
+ 	contains_p for singleton ranges.
+ 	(irange::intersect): If either range is a singleton, use
+ 	contains_p.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/119039
+ 	* vr-values.cc (simplify_using_ranges::legacy_fold_cond): Remove.
+ 	(simplify_using_ranges::simplify_switch_using_ranges): Adjust.
+ 
+ 2025-06-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-cfg.cc (dump_function_to_file): Use flags, not dump_flags.
+ 
+ 2025-06-18  Jan Beulich  <jbeulich@suse.com>
+ 
+ 	* doc/gcov.texi: Drop blank after @anchor.
+ 
+ 2025-06-18  Jan Beulich  <jbeulich@suse.com>
+ 
+ 	* doc/extend.texi: Fill first argument of @xref{}.
+ 
+ 2025-06-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* real.cc (decimal_from_integer): Add digits argument, if larger than
+ 	256, use XALLOCAVEC allocated buffer.
+ 	(real_from_integer): Pass val_in's precision divided by 3 to
+ 	decimal_from_integer.
+ 	* dfp.cc (decimal_real_to_integer): For precision > 128 if finite
+ 	and exponent is large, decrease exponent and multiply resulting
+ 	wide_int by powers of 10^19.
+ 
+ 2025-06-18  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-v.cc (expand_vx_binary_vec_dup_vec): Add
+ 	new case SMIN.
+ 	(expand_vx_binary_vec_vec_dup): Ditto.
+ 	* config/riscv/riscv.cc (riscv_rtx_costs): Ditto.
+ 	* config/riscv/vector-iterators.md: Add new op smin.
+ 
+ 2025-06-18  Lili Cui  <lili.cui@intel.com>
+ 	    Michael Matz  <matz@suse.de>
+ 
+ 	* config/i386/i386-protos.h (ix86_get_separate_components):
+ 	New function.
+ 	(ix86_components_for_bb): Likewise.
+ 	(ix86_disqualify_components): Likewise.
+ 	(ix86_emit_prologue_components): Likewise.
+ 	(ix86_emit_epilogue_components): Likewise.
+ 	(ix86_set_handled_components): Likewise.
+ 	* config/i386/i386.cc (save_regs_using_push_pop):
+ 	Split from ix86_compute_frame_layout.
+ 	(ix86_compute_frame_layout):
+ 	Use save_regs_using_push_pop.
+ 	(pro_epilogue_adjust_stack):
+ 	Use gen_pro_epilogue_adjust_stack_add_nocc.
+ 	(ix86_expand_prologue): Add some assertions and adjust
+ 	the stack frame at the beginning of the prolog for shrink
+ 	wrapping separate.
+ 	(ix86_emit_save_regs_using_mov):
+ 	Skip registers that are wrapped separately.
+ 	(ix86_emit_restore_regs_using_mov): Likewise.
+ 	(ix86_expand_epilogue): Add some assertions and set
+ 	restore_regs_via_mov to true for shrink wrapping separate.
+ 	(ix86_get_separate_components): New function.
+ 	(ix86_components_for_bb): Likewise.
+ 	(ix86_disqualify_components): Likewise.
+ 	(ix86_emit_prologue_components): Likewise.
+ 	(ix86_emit_epilogue_components): Likewise.
+ 	(ix86_set_handled_components): Likewise.
+ 	(TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS): Define.
+ 	(TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB): Likewise.
+ 	(TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS): Likewise.
+ 	(TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS): Likewise.
+ 	(TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS): Likewise.
+ 	(TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS): Likewise.
+ 	* config/i386/i386.h (struct machine_function):Add
+ 	reg_is_wrapped_separately array for register wrapping
+ 	information.
+ 	* config/i386/i386.md
+ 	(@pro_epilogue_adjust_stack_add_nocc<mode>): New.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120661
+ 	* value-range.cc (irange::snap): New.
+ 	(irange::snap_subranges): New.
+ 	(irange::set_range_from_bitmask): Call snap_subranges.
+ 	* value-range.h (snap, snap_subranges): New prototypes.
+ 
+ 2025-06-17  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (afdo_indirect_call): Compute speculative edge
+ 	probability.
+ 	(add_scale): Break out from ...
+ 	(scale_bbs): Break out from ...
+ 	(afdo_adjust_guessed_profile): ... here; use componet array instead of
+ 	current_component hash_map; handle components with only 0 profile;
+ 	be more agressive on finding scales along the boundary.
+ 
+ 2025-06-17  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* cgraph.cc (cgraph_node::apply_scale): Special case scaling
+ 	to profile_count::zero ().
+ 	(cgraph_node::verify_node): Add extra compatibility check.
+ 
+ 2025-06-17  Umesh Kalappa  <ukalappa.mips@gmail.com>
+ 
+ 	* config/riscv/sync.md (lrsc_atomic_exchange<mode>): Use scratch
+ 	register for loop control rather than lr output.
+ 
+ 2025-06-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	* diagnostic.h (diagnostic_option_classifier): Friend
+ 	diagnostic_context.
+ 	(diagnostic_context::get_classification_history): New.
+ 
+ 2025-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/120677
+ 	* gimple-crc-optimization.cc (crc_optimization::optimize_crc_loop):
+ 	Insert before gsi_after_labels instead of gsi_start_bb.  Use
+ 	gimple_bb (output_crc) instead of output_crc->bb.  Formatting fix.
+ 
+ 2025-06-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/113027
+ 	* config/aarch64/aarch64-protos.h (aarch64_decompose_vec_struct_index):
+ 	Declare.
+ 	* config/aarch64/aarch64.cc (aarch64_decompose_vec_struct_index): New
+ 	function.
+ 	* config/aarch64/iterators.md (VEL, Vel): Add Advanced SIMD
+ 	structure modes.
+ 	* config/aarch64/aarch64-simd.md (vec_set<VSTRUCT_QD:mode>)
+ 	(vec_extract<VSTRUCT_QD:mode>): New patterns.
+ 
+ 2025-06-17  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* omp-offload.cc (omp_discover_declare_target_tgt_fn_r): Also
+ 	walk external functions that are declare inline (and have a
+ 	DECL_SAVED_TREE).
+ 
+ 2025-06-16  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (aarch64_sve_valid_pred_p):
+ 	Declare helper for aarch64_predicate_operand.
+ 	(aarch64_sve_packed_pred): Declare helper for new expanders.
+ 	(aarch64_sve_fp_pred): Likewise.
+ 	* config/aarch64/aarch64-sve.md (<optab><mode><v_int_equiv>2):
+ 	Extend into...
+ 	(<optab><SVE_HSF:mode><SVE_HSDI:mode>2): New expander for converting
+ 	vectors of HF,SF to vectors of HI,SI,DI.
+ 	(<optab><VNx2DF_ONLY:mode><SVE_2SDI:mode>2): New expander for converting
+ 	vectors of SI,DI to vectors of DF.
+ 	(*aarch64_sve_<optab>_nontrunc<SVE_PARTIAL_F:mode><SVE_HSDI:mode>):
+ 	New pattern to match those we've added here.
+ 	(@aarch64_sve_<optab>_trunc<VNx2DF_ONLY:mode><VNx4SI_ONLY:mode>): Extend
+ 	into...
+ 	(@aarch64_sve_<optab>_trunc<VNx2DF_ONLY:mode><SVE_SI:mode>): Match both
+ 	VNx2SI<-VNx2DF and VNx4SI<-VNx4DF.
+ 	(<optab><v_int_equiv><mode>2): Extend into...
+ 	(<optab><SVE_HSDI:mode><SVE_F:mode>2): New expander for converting vectors
+ 	of HI,SI,DI to vectors of HF,SF,DF.
+ 	(*aarch64_sve_<optab>_nonextend<SVE_HSDI:mode><SVE_PARTIAL_F:mode>): New
+ 	pattern to match those we've added here.
+ 	(trunc<SVE_SDF:mode><SVE_PARTIAL_HSF:mode>2): New expander to handle
+ 	narrowing ('truncating') FP<-FP conversions.
+ 	(*aarch64_sve_<optab>_trunc<SVE_SDF:mode><SVE_PARTIAL_HSF:mode>): New
+ 	pattern to handle those we've added here.
+ 	(extend<SVE_PARTIAL_HSF:mode><SVE_SDF:mode>2): New expander to handle
+ 	widening ('extending') FP<-FP conversions.
+ 	(*aarch64_sve_<optab>_nontrunc<SVE_PARTIAL_HSF:mode><SVE_SDF:mode>): New
+ 	pattern to handle those we've added here.
+ 	* config/aarch64/aarch64.cc (aarch64_sve_packed_pred): New function.
+ 	(aarch64_sve_fp_pred): Likewise.
+ 	(aarch64_sve_valid_pred_p): Likewise.
+ 	* config/aarch64/iterators.md (SVE_PARTIAL_HSF): New mode iterator.
+ 	(SVE_HSF): Likewise.
+ 	(SVE_SDF): Likewise.
+ 	(SVE_SI): Likewise.
+ 	(SVE_2SDI) Likewise.
+ 	(self_mask):  Extend to all integer/FP vector modes.
+ 	(narrower_mask): Likewise (excluding QI).
+ 	* config/aarch64/predicates.md (aarch64_predicate_operand): New special
+ 	predicate to handle narrower predicate modes.
+ 
+ 2025-06-16  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md: Replace uses of SVE_FULL_F_BF
+ 	with SVE_FULL_F_B16B16.
+ 	Replace use of SVE_F with SVE_F_BF.
+ 	* config/aarch64/iterators.md (SVE_PARTIAL_F): New iterator for
+ 	partial SVE FP modes.
+ 	(SVE_FULL_F_BF): Rename to SVE_FULL_F_B16B16.
+ 	(SVE_PARTIAL_F_B16B16): New iterator (BF16 included) for partial
+ 	SVE FP modes.
+ 	(SVE_F_B16B16): New iterator for all SVE FP modes.
+ 	(SVE_BF): New iterator for all SVE BF16 modes.
+ 	(SVE_F): Redefine to exclude BF16 modes.
+ 	(SVE_F_BF): New iterator to replace the previous SVE_F.
+ 	(VPRED): Describe the VPRED mapping for partial vector modes.
+ 	(b): Cover partial FP modes.
+ 	(is_bf16): Likewise.
+ 
+ 2025-06-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* doc/invoke.texi: Document -Wsfinae-incomplete.
+ 
+ 2025-06-16  Matthieu Longo  <matthieu.longo@arm.com>
+ 	    Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+ 
+ 	* config.in: Regenerate.
+ 	* config/aarch64/aarch64-elf-metadata.h
+ 	(class aeabi_subsection): New class for BAs.
+ 	* config/aarch64/aarch64-protos.h
+ 	(aarch64_pacret_enabled): New function.
+ 	* config/aarch64/aarch64.cc
+ 	(HAVE_AS_AEABI_BUILD_ATTRIBUTES): New definition.
+ 	(aarch64_file_end_indicate_exec_stack): Emit BAss.
+ 	(aarch64_pacret_enabled): New function.
+ 	(aarch64_start_file): Indent.
+ 	* configure: Regenerate.
+ 	* configure.ac: New configure check for BAs support in binutils.
+ 
+ 2025-06-16  Matthieu Longo  <matthieu.longo@arm.com>
+ 
+ 	* Makefile.in: Add missing declaration of BACKEND_H.
+ 	* config.gcc: Add aarch64-elf-metadata.o to extra_objs.
+ 	* config/aarch64/aarch64-elf-metadata.h: New file
+ 	* config/aarch64/aarch64-elf-metadata.cc: New file.
+ 	* config/aarch64/aarch64.cc
+ 	(GNU_PROPERTY_AARCH64_FEATURE_1_AND): Removed.
+ 	(GNU_PROPERTY_AARCH64_FEATURE_1_BTI): Likewise.
+ 	(GNU_PROPERTY_AARCH64_FEATURE_1_PAC): Likewise.
+ 	(GNU_PROPERTY_AARCH64_FEATURE_1_GCS): Likewise.
+ 	(aarch64_file_end_indicate_exec_stack): Move GNU properties code to
+ 	aarch64-elf-metadata.cc
+ 	* config/aarch64/t-aarch64: Declare target aarch64-elf-metadata.o
+ 
+ 2025-06-16  Matthieu Longo  <matthieu.longo@arm.com>
+ 
+ 	* config/aarch64/aarch64.cc
+ 	(aarch64_file_end_indicate_exec_stack): Emit assembly comments.
+ 
+ 2025-06-16  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* auto-profile.cc (edge_set): Remove unused typedef.
+ 	(is_bb_annotated): Sanity check that annotated BBs has
+ 	quality AFDO and non-anntoated non-AFDO.  Exceptions are
+ 	zeros.
+ 	(set_bb_annotated): Verify that BB set annotated has
+ 	AFDO profile.
+ 	(afdo_set_bb_count): Do not return true for 0 counts.
+ 	(afdo_find_equiv_class): Fix formating;
+ 	do not combine profile of annoated and non-annotated BBs.
+ 	(afdo_propagate_edge): Fix variable names; dump info
+ 	about changes; do not change non-annoated BB profiles;
+ 	if all flow out of BB was decided on, annotate remaining
+ 	edges with 0.
+ 	(afdo_propagate): Dump info about copied BB counts
+ 	and number of iteraitons used.
+ 	(cmp): New function.
+ 	(afdo_adjust_guessed_profile): New function.
+ 	(afdo_calculate_branch_prob): Do not initialize loop
+ 	optimizer here; call afdo_adjust_guessed_profile.
+ 	(afdo_annotate_cfg): Initialize profile here;
+ 	anotate entry/exit blocks only of profile is non-0.
+ 	* profile-count.h: (profile_count::force_guessed): New.
+ 	* tree-cfg.cc (gimple_verify_flow_info): Fix typo.
+ 
+ 2025-06-16  Jiawei  <jiawei@iscas.ac.cn>
+ 
+ 	* common/config/riscv/riscv-common.cc: Add b-ext and supm.
+ 
+ 2025-06-16  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* config/xtensa/predicates.md (reload_operand):
+ 	Remove.
+ 	* config/xtensa/xtensa.md:
+ 	Remove the peephole2 pattern that was previously added.
+ 
+ 2025-06-16  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* config/xtensa/xtensa.md:
+ 	Remove the peephole2 pattern that was previously added.
+ 
+ 2025-06-16  Jiawei  <jiawei@iscas.ac.cn>
+ 
+ 	* simplify-rtx.cc (simplify_context::simplify_binary_operation_1): Handle
+ 	more logical simplifications.
+ 
+ 2025-06-15  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-v.cc (expand_vx_binary_vec_dup_vec): Add new
+ 	case UMAX.
+ 	(expand_vx_binary_vec_vec_dup): Ditto.
+ 	* config/riscv/riscv.cc (riscv_rtx_costs): Ditto.
+ 	* config/riscv/vector-iterators.md: Add new op umax.
+ 
  2025-06-14  Georg-Johann Lay  <avr@gjlay.de>
  
  	Backported from master:
diff -Nrcpad gcc-16-20250615/gcc/DATESTAMP gcc-16-20250622/gcc/DATESTAMP
*** gcc-16-20250615/gcc/DATESTAMP	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/gcc/DATESTAMP	Sun Jun 22 22:32:18 2025
***************
*** 1 ****
! 20250615
--- 1 ----
! 20250622
diff -Nrcpad gcc-16-20250615/gcc/Makefile.in gcc-16-20250622/gcc/Makefile.in
*** gcc-16-20250615/gcc/Makefile.in	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/gcc/Makefile.in	Sun Jun 22 22:32:18 2025
*************** endif
*** 972,977 ****
--- 972,978 ----
  DUMPFILE_H = $(srcdir)/../libcpp/include/line-map.h dumpfile.h
  VEC_H = vec.h statistics.h $(GGC_H)
  HASH_TABLE_H = $(HASHTAB_H) hash-table.h $(GGC_H)
+ BITMAP_H = bitmap.h $(HASHTAB_H) statistics.h
  EXCEPT_H = except.h $(HASHTAB_H)
  TARGET_DEF = target.def target-hooks-macros.h target-insns.def
  C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h
*************** FLAGS_H = flags.h flag-types.h $(OPTIONS
*** 1023,1028 ****
--- 1024,1031 ----
  OPTIONS_H = options.h flag-types.h $(OPTIONS_H_EXTRA)
  FUNCTION_H = function.h $(HASHTAB_H) $(TM_H) hard-reg-set.h \
  	$(VEC_H) $(INPUT_H)
+ BACKEND_H = backend.h $(TM_H) $(FUNCTION_H) $(BITMAP_H) sbitmap.h \
+ 	$(BASIC_BLOCK_H) cfg.h
  EXPR_H = expr.h insn-config.h $(FUNCTION_H) $(RTL_H) $(FLAGS_H) $(TREE_H) \
  	$(EMIT_RTL_H)
  OPTABS_H = optabs.h insn-codes.h insn-opinit.h
*************** LTO_STREAMER_H = lto-streamer.h $(LINKER
*** 1076,1082 ****
  		$(CGRAPH_H) $(VEC_H) $(HASH_TABLE_H) $(TREE_H) $(GIMPLE_H) \
  		$(GCOV_IO_H) $(DIAGNOSTIC_H) alloc-pool.h
  IPA_PROP_H = ipa-prop.h $(TREE_H) $(VEC_H) $(CGRAPH_H) $(GIMPLE_H) alloc-pool.h
- BITMAP_H = bitmap.h $(HASHTAB_H) statistics.h
  GCC_PLUGIN_H = gcc-plugin.h highlev-plugin-common.h plugin.def \
  		$(CONFIG_H) $(SYSTEM_H) $(HASHTAB_H)
  PLUGIN_H = plugin.h $(GCC_PLUGIN_H)
--- 1079,1084 ----
diff -Nrcpad gcc-16-20250615/gcc/ada/ChangeLog gcc-16-20250622/gcc/ada/ChangeLog
*** gcc-16-20250615/gcc/ada/ChangeLog	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/gcc/ada/ChangeLog	Sun Jun 22 22:32:18 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-06-17  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/120665
+ 	* sem_aggr.adb (Resolve_Container_Aggregate): Use robust guards.
+ 
  2025-06-12  Eric Botcazou  <ebotcazou@adacore.com>
  
  	* gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Variable>: Generate
diff -Nrcpad gcc-16-20250615/gcc/ada/Make-generated.in gcc-16-20250622/gcc/ada/Make-generated.in
*** gcc-16-20250615/gcc/ada/Make-generated.in	Sun Jun 15 22:32:22 2025
--- gcc-16-20250622/gcc/ada/Make-generated.in	Sun Jun 22 22:32:18 2025
***************
*** 1,15 ****
  # Dependencies for compiler sources that are generated at build time
  
- # Note: can't use ?= here, not supported by older versions of GNU Make
- 
- ifeq ($(origin CP), undefined)
- CP=cp
- endif
- 
- ifeq ($(origin MKDIR), undefined)
- MKDIR=mkdir -p
- endif
- 
  fsrcdir := $(shell cd $(srcdir);${PWD_COMMAND})
  
  GEN_IL_INCLUDES = -I$(fsrcdir)/ada
--- 1,5 ----
*************** GEN_IL_FLAGS = -gnata -gnat2012 -gnatw.g
*** 18,24 ****
  ada/seinfo_tables.ads ada/seinfo_tables.adb ada/sinfo.h ada/einfo.h ada/nmake.ads ada/nmake.adb ada/seinfo.ads ada/sinfo-nodes.ads ada/sinfo-nodes.adb ada/einfo-entities.ads ada/einfo-entities.adb: ada/stamp-gen_il ; @true
  ada/stamp-gen_il: $(fsrcdir)/ada/gen_il*
  	$(MKDIR) ada/gen_il
! 	cd ada/gen_il; gnatmake -g $(GEN_IL_FLAGS) gen_il-main
  	# Ignore errors to work around finalization issues in older compilers
  	- cd ada/gen_il; ./gen_il-main
  	$(fsrcdir)/../move-if-change ada/gen_il/seinfo_tables.ads ada/seinfo_tables.ads
--- 8,14 ----
  ada/seinfo_tables.ads ada/seinfo_tables.adb ada/sinfo.h ada/einfo.h ada/nmake.ads ada/nmake.adb ada/seinfo.ads ada/sinfo-nodes.ads ada/sinfo-nodes.adb ada/einfo-entities.ads ada/einfo-entities.adb: ada/stamp-gen_il ; @true
  ada/stamp-gen_il: $(fsrcdir)/ada/gen_il*
  	$(MKDIR) ada/gen_il
! 	cd ada/gen_il; $(GNATMAKE_FOR_BUILD) $(GEN_IL_FLAGS) gen_il-main
  	# Ignore errors to work around finalization issues in older compilers
  	- cd ada/gen_il; ./gen_il-main
  	$(fsrcdir)/../move-if-change ada/gen_il/seinfo_tables.ads ada/seinfo_tables.ads
*************** ada/stamp-gen_il: $(fsrcdir)/ada/gen_il*
*** 39,52 ****
  # would cause bootstrapping with older compilers to fail. You can call it by
  # hand, as a sanity check that these files are legal.
  ada/seinfo_tables.o: ada/seinfo_tables.ads ada/seinfo_tables.adb
! 	cd ada ; gnatmake $(GEN_IL_INCLUDES) seinfo_tables.adb -gnatU -gnatX
  
  ada/snames.h ada/snames.ads ada/snames.adb : ada/stamp-snames ; @true
  ada/stamp-snames : ada/snames.ads-tmpl ada/snames.adb-tmpl ada/snames.h-tmpl ada/xsnamest.adb ada/xutil.ads ada/xutil.adb
  	-$(MKDIR) ada/bldtools/snamest
  	$(RM) $(addprefix ada/bldtools/snamest/,$(notdir $^))
  	$(CP) $^ ada/bldtools/snamest
! 	cd ada/bldtools/snamest && gnatmake xsnamest && ./xsnamest
  	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.ns ada/snames.ads
  	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.nb ada/snames.adb
  	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.nh ada/snames.h
--- 29,42 ----
  # would cause bootstrapping with older compilers to fail. You can call it by
  # hand, as a sanity check that these files are legal.
  ada/seinfo_tables.o: ada/seinfo_tables.ads ada/seinfo_tables.adb
! 	cd ada ; $(GNATMAKE_FOR_BUILD) $(GEN_IL_INCLUDES) seinfo_tables.adb -gnatX
  
  ada/snames.h ada/snames.ads ada/snames.adb : ada/stamp-snames ; @true
  ada/stamp-snames : ada/snames.ads-tmpl ada/snames.adb-tmpl ada/snames.h-tmpl ada/xsnamest.adb ada/xutil.ads ada/xutil.adb
  	-$(MKDIR) ada/bldtools/snamest
  	$(RM) $(addprefix ada/bldtools/snamest/,$(notdir $^))
  	$(CP) $^ ada/bldtools/snamest
! 	cd ada/bldtools/snamest && $(GNATMAKE_FOR_BUILD) xsnamest && ./xsnamest
  	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.ns ada/snames.ads
  	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.nb ada/snames.adb
  	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.nh ada/snames.h
diff -Nrcpad gcc-16-20250615/gcc/ada/gcc-interface/Makefile.in gcc-16-20250622/gcc/ada/gcc-interface/Makefile.in
*** gcc-16-20250615/gcc/ada/gcc-interface/Makefile.in	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/ada/gcc-interface/Makefile.in	Sun Jun 22 22:32:18 2025
*************** INSTALL_DATA_DATE = cp -p
*** 104,109 ****
--- 104,111 ----
  MAKEINFO = makeinfo
  TEXI2DVI = texi2dvi
  TEXI2PDF = texi2pdf
+ 
+ GNATMAKE_FOR_BUILD = gnatmake
  GNATBIND_FLAGS = -static -x
  ADA_CFLAGS =
  ADAFLAGS = -W -Wall -gnatpg -gnata -gnatU
*************** OSCONS_EXTRACT=$(GCC_FOR_ADA_RTS) $(GNAT
*** 629,635 ****
  	-$(MKDIR) ./bldtools/oscons
  	$(RM) $(addprefix ./bldtools/oscons/,$(notdir $^))
  	$(CP) $^ ./bldtools/oscons
! 	(cd ./bldtools/oscons ; gnatmake xoscons)
  
  $(RTSDIR)/s-oscons.ads: ../stamp-gnatlib1-$(RTSDIR) s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons
  	$(RM) $(RTSDIR)/s-oscons-tmplt.i $(RTSDIR)/s-oscons-tmplt.s
--- 631,637 ----
  	-$(MKDIR) ./bldtools/oscons
  	$(RM) $(addprefix ./bldtools/oscons/,$(notdir $^))
  	$(CP) $^ ./bldtools/oscons
! 	(cd ./bldtools/oscons ; $(GNATMAKE_FOR_BUILD) xoscons)
  
  $(RTSDIR)/s-oscons.ads: ../stamp-gnatlib1-$(RTSDIR) s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons
  	$(RM) $(RTSDIR)/s-oscons-tmplt.i $(RTSDIR)/s-oscons-tmplt.s
diff -Nrcpad gcc-16-20250615/gcc/ada/sem_aggr.adb gcc-16-20250622/gcc/ada/sem_aggr.adb
*** gcc-16-20250615/gcc/ada/sem_aggr.adb	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/ada/sem_aggr.adb	Sun Jun 22 22:32:18 2025
*************** package body Sem_Aggr is
*** 4054,4061 ****
  
        if Present (Add_Unnamed_Subp)
          and then No (New_Indexed_Subp)
!         and then Present (Etype (Add_Unnamed_Subp))
!         and then Etype (Add_Unnamed_Subp) /= Any_Type
        then
           declare
              Elmt_Type : constant Entity_Id :=
--- 4054,4061 ----
  
        if Present (Add_Unnamed_Subp)
          and then No (New_Indexed_Subp)
!         and then Present (Entity (Add_Unnamed_Subp))
!         and then Entity (Add_Unnamed_Subp) /= Any_Id
        then
           declare
              Elmt_Type : constant Entity_Id :=
*************** package body Sem_Aggr is
*** 4101,4107 ****
           end;
  
        elsif Present (Add_Named_Subp)
!         and then Etype (Add_Named_Subp) /= Any_Type
        then
           declare
              --  Retrieves types of container, key, and element from the
--- 4101,4108 ----
           end;
  
        elsif Present (Add_Named_Subp)
!         and then Present (Entity (Add_Named_Subp))
!         and then Entity (Add_Named_Subp) /= Any_Id
        then
           declare
              --  Retrieves types of container, key, and element from the
*************** package body Sem_Aggr is
*** 4155,4161 ****
           end;
  
        elsif Present (Assign_Indexed_Subp)
!         and then Etype (Assign_Indexed_Subp) /= Any_Type
        then
           --  Indexed Aggregate. Positional or indexed component
           --  can be present, but not both. Choices must be static
--- 4156,4163 ----
           end;
  
        elsif Present (Assign_Indexed_Subp)
!         and then Present (Entity (Assign_Indexed_Subp))
!         and then Entity (Assign_Indexed_Subp) /= Any_Id
        then
           --  Indexed Aggregate. Positional or indexed component
           --  can be present, but not both. Choices must be static
diff -Nrcpad gcc-16-20250615/gcc/analyzer/ChangeLog gcc-16-20250622/gcc/analyzer/ChangeLog
*** gcc-16-20250615/gcc/analyzer/ChangeLog	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/analyzer/ChangeLog	Sun Jun 22 22:32:18 2025
***************
*** 1,3 ****
--- 1,20 ----
+ 2025-06-18  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* checker-event.h (checker_event::get_kind): New accessor.
+ 	(checker_event::m_kind): Make private.
+ 	* checker-path.cc (checker_path::maybe_log): Use accessor for
+ 	checker_event::m_kind.
+ 	(checker_path::add_event): Likewise.
+ 	(checker_path::debug): Likewise.
+ 	(checker_path::cfg_edge_pair_at_p): Likewise.
+ 	(checker_path::inject_any_inlined_call_events): Likewise.
+ 	* diagnostic-manager.cc
+ 	(diagnostic_manager::prune_for_sm_diagnostic): Likewise.
+ 	(diagnostic_manager::prune_for_sm_diagnostic): Likewise.
+ 	(diagnostic_manager::consolidate_conditions): Likewise.
+ 	(diagnostic_manager::consolidate_unwind_events): Likewise.
+ 	(diagnostic_manager::finish_pruning): Likewise.
+ 
  2025-05-06  David Malcolm  <dmalcolm@redhat.com>
  
  	* checker-event.cc (checker_event::checker_event): Update
diff -Nrcpad gcc-16-20250615/gcc/analyzer/checker-event.h gcc-16-20250622/gcc/analyzer/checker-event.h
*** gcc-16-20250615/gcc/analyzer/checker-event.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/analyzer/checker-event.h	Sun Jun 22 22:32:18 2025
*************** public:
*** 116,121 ****
--- 116,122 ----
  			      sarif_object &thread_flow_loc_obj) const override;
  
    /* Additional functionality.  */
+   enum event_kind get_kind () const { return m_kind; }
    tree get_fndecl () const { return m_effective_fndecl; }
  
    int get_original_stack_depth () const { return m_original_depth; }
*************** protected:
*** 142,148 ****
    checker_event (enum event_kind kind,
  		 const event_loc_info &loc_info);
  
!  public:
    const enum event_kind m_kind;
   protected:
    location_t m_loc;
--- 143,149 ----
    checker_event (enum event_kind kind,
  		 const event_loc_info &loc_info);
  
!  private:
    const enum event_kind m_kind;
   protected:
    location_t m_loc;
diff -Nrcpad gcc-16-20250615/gcc/analyzer/checker-path.cc gcc-16-20250622/gcc/analyzer/checker-path.cc
*** gcc-16-20250615/gcc/analyzer/checker-path.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/analyzer/checker-path.cc	Sun Jun 22 22:32:18 2025
*************** checker_path::maybe_log (logger *logger,
*** 89,95 ****
      {
        logger->start_log_line ();
        logger->log_partial ("%s[%i]: %s ", desc, i,
! 			   event_kind_to_string (m_events[i]->m_kind));
        m_events[i]->dump (logger->get_printer ());
        logger->end_log_line ();
      }
--- 89,95 ----
      {
        logger->start_log_line ();
        logger->log_partial ("%s[%i]: %s ", desc, i,
! 			   event_kind_to_string (m_events[i]->get_kind ()));
        m_events[i]->dump (logger->get_printer ());
        logger->end_log_line ();
      }
*************** checker_path::add_event (std::unique_ptr
*** 103,109 ****
        m_logger->start_log_line ();
        m_logger->log_partial ("added event[%i]: %s ",
  			     m_events.length (),
! 			     event_kind_to_string (event.get ()->m_kind));
        event.get ()->dump (m_logger->get_printer ());
        m_logger->end_log_line ();
      }
--- 103,109 ----
        m_logger->start_log_line ();
        m_logger->log_partial ("added event[%i]: %s ",
  			     m_events.length (),
! 			     event_kind_to_string (event.get ()->get_kind ()));
        event.get ()->dump (m_logger->get_printer ());
        m_logger->end_log_line ();
      }
*************** checker_path::debug () const
*** 123,129 ****
        fprintf (stderr,
  	       "[%i]: %s \"%s\"\n",
  	       i,
! 	       event_kind_to_string (m_events[i]->m_kind),
  	       event_desc.get ());
      }
  }
--- 123,129 ----
        fprintf (stderr,
  	       "[%i]: %s \"%s\"\n",
  	       i,
! 	       event_kind_to_string (m_events[i]->get_kind ()),
  	       event_desc.get ());
      }
  }
*************** checker_path::cfg_edge_pair_at_p (unsign
*** 167,174 ****
  {
    if (m_events.length () < idx + 1)
      return false;
!   return (m_events[idx]->m_kind == event_kind::start_cfg_edge
! 	  && m_events[idx + 1]->m_kind == event_kind::end_cfg_edge);
  }
  
  /* Consider a call from "outer" to "middle" which calls "inner",
--- 167,174 ----
  {
    if (m_events.length () < idx + 1)
      return false;
!   return (m_events[idx]->get_kind () == event_kind::start_cfg_edge
! 	  && m_events[idx + 1]->get_kind () == event_kind::end_cfg_edge);
  }
  
  /* Consider a call from "outer" to "middle" which calls "inner",
*************** checker_path::inject_any_inlined_call_ev
*** 254,260 ****
  	{
  	  logger->start_log_line ();
  	  logger->log_partial ("event[%i]: %s ", ev_idx,
! 			       event_kind_to_string (curr_event->m_kind));
  	  curr_event->dump (logger->get_printer ());
  	  logger->end_log_line ();
  	  for (inlining_iterator iter (curr_event->get_location ());
--- 254,260 ----
  	{
  	  logger->start_log_line ();
  	  logger->log_partial ("event[%i]: %s ", ev_idx,
! 			       event_kind_to_string (curr_event->get_kind ()));
  	  curr_event->dump (logger->get_printer ());
  	  logger->end_log_line ();
  	  for (inlining_iterator iter (curr_event->get_location ());
diff -Nrcpad gcc-16-20250615/gcc/analyzer/diagnostic-manager.cc gcc-16-20250622/gcc/analyzer/diagnostic-manager.cc
*** gcc-16-20250615/gcc/analyzer/diagnostic-manager.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/analyzer/diagnostic-manager.cc	Sun Jun 22 22:32:18 2025
*************** diagnostic_manager::prune_for_sm_diagnos
*** 2599,2617 ****
  		{
  		  label_text sval_desc = sval->get_desc ();
  		  log ("considering event %i (%s), with sval: %qs, state: %qs",
! 		       idx, event_kind_to_string (base_event->m_kind),
  		       sval_desc.get (), state->get_name ());
  		}
  	      else
  		log ("considering event %i (%s), with global state: %qs",
! 		     idx, event_kind_to_string (base_event->m_kind),
  		     state->get_name ());
  	    }
  	  else
  	    log ("considering event %i", idx);
  	}
  
!       switch (base_event->m_kind)
  	{
  	default:
  	  gcc_unreachable ();
--- 2599,2617 ----
  		{
  		  label_text sval_desc = sval->get_desc ();
  		  log ("considering event %i (%s), with sval: %qs, state: %qs",
! 		       idx, event_kind_to_string (base_event->get_kind ()),
  		       sval_desc.get (), state->get_name ());
  		}
  	      else
  		log ("considering event %i (%s), with global state: %qs",
! 		     idx, event_kind_to_string (base_event->get_kind ()),
  		     state->get_name ());
  	    }
  	  else
  	    log ("considering event %i", idx);
  	}
  
!       switch (base_event->get_kind ())
  	{
  	default:
  	  gcc_unreachable ();
*************** diagnostic_manager::prune_for_sm_diagnos
*** 2718,2724 ****
  		log ("filtering events %i and %i: CFG edge", idx, idx + 1);
  		path->delete_event (idx);
  		/* Also delete the corresponding event_kind::end_cfg_edge.  */
! 		gcc_assert (path->get_checker_event (idx)->m_kind
  			    == event_kind::end_cfg_edge);
  		path->delete_event (idx);
  	      }
--- 2718,2724 ----
  		log ("filtering events %i and %i: CFG edge", idx, idx + 1);
  		path->delete_event (idx);
  		/* Also delete the corresponding event_kind::end_cfg_edge.  */
! 		gcc_assert (path->get_checker_event (idx)->get_kind ()
  			    == event_kind::end_cfg_edge);
  		path->delete_event (idx);
  	      }
*************** diagnostic_manager::consolidate_conditio
*** 3109,3115 ****
  	    continue;
  
  	  /* Are we looking for a run of all TRUE edges, or all FALSE edges?  */
! 	  gcc_assert (old_start_ev->m_kind == event_kind::start_cfg_edge);
  	  const start_cfg_edge_event *old_start_cfg_ev
  	    = (const start_cfg_edge_event *)old_start_ev;
  	  const cfg_superedge& first_cfg_sedge
--- 3109,3115 ----
  	    continue;
  
  	  /* Are we looking for a run of all TRUE edges, or all FALSE edges?  */
! 	  gcc_assert (old_start_ev->get_kind () == event_kind::start_cfg_edge);
  	  const start_cfg_edge_event *old_start_cfg_ev
  	    = (const start_cfg_edge_event *)old_start_ev;
  	  const cfg_superedge& first_cfg_sedge
*************** diagnostic_manager::consolidate_conditio
*** 3132,3138 ****
  	    {
  	      const checker_event *iter_ev
  		= path->get_checker_event (next_idx);
! 	      gcc_assert (iter_ev->m_kind == event_kind::start_cfg_edge);
  	      const start_cfg_edge_event *iter_cfg_ev
  		= (const start_cfg_edge_event *)iter_ev;
  	      const cfg_superedge& iter_cfg_sedge
--- 3132,3138 ----
  	    {
  	      const checker_event *iter_ev
  		= path->get_checker_event (next_idx);
! 	      gcc_assert (iter_ev->get_kind () == event_kind::start_cfg_edge);
  	      const start_cfg_edge_event *iter_cfg_ev
  		= (const start_cfg_edge_event *)iter_ev;
  	      const cfg_superedge& iter_cfg_sedge
*************** diagnostic_manager::consolidate_unwind_e
*** 3190,3200 ****
         start_idx++)
      {
        /* Find a run of consecutive unwind_event instances.  */
!       if (path->get_checker_event (start_idx)->m_kind != event_kind::unwind)
  	continue;
        int iter_idx = start_idx + 1;
        while (iter_idx < (int)path->num_events ())
! 	if (path->get_checker_event (iter_idx)->m_kind == event_kind::unwind)
  	  ++iter_idx;
  	else
  	  break;
--- 3190,3202 ----
         start_idx++)
      {
        /* Find a run of consecutive unwind_event instances.  */
!       if (path->get_checker_event (start_idx)->get_kind ()
! 	  != event_kind::unwind)
  	continue;
        int iter_idx = start_idx + 1;
        while (iter_idx < (int)path->num_events ())
! 	if (path->get_checker_event (iter_idx)->get_kind ()
! 	    == event_kind::unwind)
  	  ++iter_idx;
  	else
  	  break;
*************** diagnostic_manager::finish_pruning (chec
*** 3232,3238 ****
        while (idx >= 0 && idx < (signed)path->num_events ())
  	{
  	  checker_event *base_event = path->get_checker_event (idx);
! 	  if (base_event->m_kind == event_kind::function_entry)
  	    {
  	      log ("filtering event %i:"
  		   " function entry for purely intraprocedural path", idx);
--- 3234,3240 ----
        while (idx >= 0 && idx < (signed)path->num_events ())
  	{
  	  checker_event *base_event = path->get_checker_event (idx);
! 	  if (base_event->get_kind () == event_kind::function_entry)
  	    {
  	      log ("filtering event %i:"
  		   " function entry for purely intraprocedural path", idx);
diff -Nrcpad gcc-16-20250615/gcc/auto-profile.cc gcc-16-20250622/gcc/auto-profile.cc
*** gcc-16-20250615/gcc/auto-profile.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/auto-profile.cc	Sun Jun 22 22:32:18 2025
*************** public:
*** 243,251 ****
       is found.  */
    bool get_count_info (location_t loc, count_info *info) const;
  
!   /* Read the inlined indirect call target profile for STMT and store it in
!      MAP, return the total count for all inlined indirect calls.  */
!   gcov_type find_icall_target_map (gcall *stmt, icall_target_map *map) const;
  
    /* Mark LOC as annotated.  */
    void mark_annotated (location_t loc);
--- 243,255 ----
       is found.  */
    bool get_count_info (location_t loc, count_info *info) const;
  
!   /* Read the inlined indirect call target profile for STMT in FN and store it
!      in MAP, return the total count for all inlined indirect calls.  */
!   gcov_type find_icall_target_map (tree fn, gcall *stmt,
! 				   icall_target_map *map) const;
! 
!   /* Remove inlined indirect call target profile for STMT in FN.  */
!   void remove_icall_target (tree fn, gcall *stmt);
  
    /* Mark LOC as annotated.  */
    void mark_annotated (location_t loc);
*************** public:
*** 302,321 ****
    function_instance *get_function_instance_by_decl (tree decl) const;
  
    /* Find count_info for a given gimple STMT. If found, store the count_info
!      in INFO and return true; otherwise return false.  */
!   bool get_count_info (gimple *stmt, count_info *info) const;
  
    /* Find count_info for a given gimple location GIMPLE_LOC. If found,
!      store the count_info in INFO and return true; otherwise return false.  */
!   bool get_count_info (location_t gimple_loc, count_info *info) const;
  
    /* Find total count of the callee of EDGE.  */
    gcov_type get_callsite_total_count (struct cgraph_edge *edge) const;
  
!   /* Update value profile INFO for STMT from the inlined indirect callsite.
!      Return true if INFO is updated.  */
!   bool update_inlined_ind_target (gcall *stmt, count_info *info);
  
  private:
    /* Map from function_instance name index (in string_table) to
       function_instance.  */
--- 306,331 ----
    function_instance *get_function_instance_by_decl (tree decl) const;
  
    /* Find count_info for a given gimple STMT. If found, store the count_info
!      in INFO and return true; otherwise return false.
!      NODE can be used to specify particular inline clone.  */
!   bool get_count_info (gimple *stmt, count_info *info,
! 		       cgraph_node *node = NULL) const;
  
    /* Find count_info for a given gimple location GIMPLE_LOC. If found,
!      store the count_info in INFO and return true; otherwise return false.
!      NODE can be used to specify particular inline clone.  */
!   bool get_count_info (location_t gimple_loc, count_info *info,
! 		       cgraph_node *node = NULL) const;
  
    /* Find total count of the callee of EDGE.  */
    gcov_type get_callsite_total_count (struct cgraph_edge *edge) const;
  
!   /* Update value profile INFO for STMT within NODE from the inlined indirect
!      callsite.  Return true if INFO is updated.  */
!   bool update_inlined_ind_target (gcall *stmt, count_info *info,
! 				  cgraph_node *node);
  
+   void remove_icall_target (cgraph_edge *e);
  private:
    /* Map from function_instance name index (in string_table) to
       function_instance.  */
*************** static autofdo_source_profile *afdo_sour
*** 343,348 ****
--- 353,365 ----
  /* gcov_summary structure to store the profile_info.  */
  static gcov_summary *afdo_profile_info;
  
+ /* Scaling factor for afdo data.  Compared to normal profile
+    AFDO profile counts are much lower, depending on sampling
+    frequency.  We scale data up to reudce effects of roundoff
+    errors.  */
+ 
+ static gcov_type afdo_count_scale = 1;
+ 
  /* Helper functions.  */
  
  /* Return the original name of NAME: strip the suffix that starts
*************** get_function_decl_from_block (tree block
*** 383,392 ****
    return BLOCK_ABSTRACT_ORIGIN (block);
  }
  
  /* Store inline stack for STMT in STACK.  */
  
  static void
! get_inline_stack (location_t locus, inline_stack *stack)
  {
    if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
      return;
--- 400,428 ----
    return BLOCK_ABSTRACT_ORIGIN (block);
  }
  
+ /* Dump STACK to F.  */
+ 
+ static void
+ dump_inline_stack (FILE *f, inline_stack *stack)
+ {
+   bool first = true;
+   for (decl_lineno &p : *stack)
+     {
+       fprintf(f, "%s%s:%i.%i",
+ 	      first ? "" : "; ",
+ 	      IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (p.first)),
+ 	      p.second >> 16,
+ 	      p.second & 65535);
+       first = false;
+     }
+   fprintf (f, "\n");
+ }
+ 
  /* Store inline stack for STMT in STACK.  */
  
  static void
! get_inline_stack (location_t locus, inline_stack *stack,
! 		  tree fn = current_function_decl)
  {
    if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
      return;
*************** get_inline_stack (location_t locus, inli
*** 408,416 ****
            locus = tmp_locus;
          }
      }
!   stack->safe_push (
!       std::make_pair (current_function_decl,
!                       get_combined_location (locus, current_function_decl)));
  }
  
  /* Return STMT's combined location, which is a 32bit integer in which
--- 444,473 ----
            locus = tmp_locus;
          }
      }
!   stack->safe_push (std::make_pair (fn, get_combined_location (locus, fn)));
! }
! 
! /* Same as get_inline_stack for a given node which may be
!    an inline clone.  If NODE is NULL, assume current_function_decl.  */
! static void
! get_inline_stack_in_node (location_t locus, inline_stack *stack,
! 			  cgraph_node *node)
! {
!   if (!node)
!     return get_inline_stack (locus, stack);
!   do
!     {
!       get_inline_stack (locus, stack, node->decl);
!       /* If caller is inlined, continue building stack.  */
!       if (!node->inlined_to)
! 	node = NULL;
!       else
! 	{
! 	  locus = gimple_location (node->callers->call_stmt);
! 	  node = node->callers->caller;
! 	}
!     }
!   while (node);
  }
  
  /* Return STMT's combined location, which is a 32bit integer in which
*************** get_inline_stack (location_t locus, inli
*** 418,424 ****
     of DECL, The lower 16 bits stores the discriminator.  */
  
  static unsigned
! get_relative_location_for_stmt (gimple *stmt)
  {
    location_t locus = gimple_location (stmt);
    if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
--- 475,481 ----
     of DECL, The lower 16 bits stores the discriminator.  */
  
  static unsigned
! get_relative_location_for_stmt (tree fn, gimple *stmt)
  {
    location_t locus = gimple_location (stmt);
    if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
*************** get_relative_location_for_stmt (gimple *
*** 429,453 ****
      if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) != UNKNOWN_LOCATION)
        return get_combined_location (locus,
                                      get_function_decl_from_block (block));
!   return get_combined_location (locus, current_function_decl);
! }
! 
! /* Return true if BB contains indirect call.  */
! 
! static bool
! has_indirect_call (basic_block bb)
! {
!   gimple_stmt_iterator gsi;
! 
!   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
!     {
!       gimple *stmt = gsi_stmt (gsi);
!       if (gimple_code (stmt) == GIMPLE_CALL && !gimple_call_internal_p (stmt)
!           && (gimple_call_fn (stmt) == NULL
!               || TREE_CODE (gimple_call_fn (stmt)) != FUNCTION_DECL))
!         return true;
!     }
!   return false;
  }
  
  /* Member functions for string_table.  */
--- 486,492 ----
      if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) != UNKNOWN_LOCATION)
        return get_combined_location (locus,
                                      get_function_decl_from_block (block));
!   return get_combined_location (locus, fn);
  }
  
  /* Member functions for string_table.  */
*************** void function_instance::merge (function_
*** 585,592 ****
        pos_counts[iter->first].count += iter->second.count;
  }
  
! /* Store the profile info for LOC in INFO. Return TRUE if profile info
!    is found.  */
  
  bool
  function_instance::get_count_info (location_t loc, count_info *info) const
--- 624,630 ----
        pos_counts[iter->first].count += iter->second.count;
  }
  
! /* Return profile info for LOC in INFO.  */
  
  bool
  function_instance::get_count_info (location_t loc, count_info *info) const
*************** function_instance::get_count_info (locat
*** 602,612 ****
     MAP, return the total count for all inlined indirect calls.  */
  
  gcov_type
! function_instance::find_icall_target_map (gcall *stmt,
                                            icall_target_map *map) const
  {
    gcov_type ret = 0;
!   unsigned stmt_offset = get_relative_location_for_stmt (stmt);
  
    for (callsite_map::const_iterator iter = callsites.begin ();
         iter != callsites.end (); ++iter)
--- 640,650 ----
     MAP, return the total count for all inlined indirect calls.  */
  
  gcov_type
! function_instance::find_icall_target_map (tree fn, gcall *stmt,
                                            icall_target_map *map) const
  {
    gcov_type ret = 0;
!   unsigned stmt_offset = get_relative_location_for_stmt (fn, stmt);
  
    for (callsite_map::const_iterator iter = callsites.begin ();
         iter != callsites.end (); ++iter)
*************** function_instance::find_icall_target_map
*** 619,630 ****
            get_identifier (afdo_string_table->get_name (callee)));
        if (node == NULL)
          continue;
!       (*map)[callee] = iter->second->total_count ();
!       ret += iter->second->total_count ();
      }
    return ret;
  }
  
  /* Read the profile and create a function_instance with head count as
     HEAD_COUNT. Recursively read callsites to create nested function_instances
     too. STACK is used to track the recursive creation process.  */
--- 657,690 ----
            get_identifier (afdo_string_table->get_name (callee)));
        if (node == NULL)
          continue;
!       (*map)[callee] = iter->second->total_count () * afdo_count_scale;
!       ret += iter->second->total_count () * afdo_count_scale;
      }
    return ret;
  }
  
+ /* Remove the inlined indirect call target profile for STMT.  */
+ 
+ void
+ function_instance::remove_icall_target (tree fn, gcall *stmt)
+ {
+   unsigned stmt_offset = get_relative_location_for_stmt (fn, stmt);
+   int n = 0;
+ 
+   for (callsite_map::const_iterator iter = callsites.begin ();
+        iter != callsites.end ();)
+     if (iter->first.first != stmt_offset)
+       ++iter;
+     else
+       {
+ 	iter = callsites.erase (iter);
+ 	n++;
+       }
+   /* TODO: If we add support for multiple targets, we may want to
+      remove only those we succesfully inlined.  */
+   gcc_assert (n);
+ }
+ 
  /* Read the profile and create a function_instance with head count as
     HEAD_COUNT. Recursively read callsites to create nested function_instances
     too. STACK is used to track the recursive creation process.  */
*************** function_instance::read_function_instanc
*** 672,677 ****
--- 732,740 ----
        unsigned num_targets = gcov_read_unsigned ();
        gcov_type count = gcov_read_counter ();
        s->pos_counts[offset].count = count;
+       afdo_profile_info->sum_max = std::max (afdo_profile_info->sum_max,
+ 					     count);
+ 
        for (unsigned j = 0; j < stack->length (); j++)
          (*stack)[j]->total_count_ += count;
        for (unsigned j = 0; j < num_targets; j++)
*************** autofdo_source_profile::get_function_ins
*** 719,738 ****
     in INFO and return true; otherwise return false.  */
  
  bool
! autofdo_source_profile::get_count_info (gimple *stmt, count_info *info) const
  {
!   return get_count_info (gimple_location (stmt), info);
  }
  
  bool
  autofdo_source_profile::get_count_info (location_t gimple_loc,
! 					count_info *info) const
  {
    if (LOCATION_LOCUS (gimple_loc) == cfun->function_end_locus)
      return false;
  
    inline_stack stack;
!   get_inline_stack (gimple_loc, &stack);
    if (stack.length () == 0)
      return false;
    function_instance *s = get_function_instance_by_inline_stack (stack);
--- 782,803 ----
     in INFO and return true; otherwise return false.  */
  
  bool
! autofdo_source_profile::get_count_info (gimple *stmt, count_info *info,
! 					cgraph_node *node) const
  {
!   return get_count_info (gimple_location (stmt), info, node);
  }
  
  bool
  autofdo_source_profile::get_count_info (location_t gimple_loc,
! 					count_info *info,
! 					cgraph_node *node) const
  {
    if (LOCATION_LOCUS (gimple_loc) == cfun->function_end_locus)
      return false;
  
    inline_stack stack;
!   get_inline_stack_in_node (gimple_loc, &stack, node);
    if (stack.length () == 0)
      return false;
    function_instance *s = get_function_instance_by_inline_stack (stack);
*************** autofdo_source_profile::get_count_info (
*** 746,752 ****
  
  bool
  autofdo_source_profile::update_inlined_ind_target (gcall *stmt,
!                                                    count_info *info)
  {
    if (dump_file)
      {
--- 811,818 ----
  
  bool
  autofdo_source_profile::update_inlined_ind_target (gcall *stmt,
! 						   count_info *info,
! 						   cgraph_node *node)
  {
    if (dump_file)
      {
*************** autofdo_source_profile::update_inlined_i
*** 757,772 ****
    if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
      {
        if (dump_file)
! 	fprintf (dump_file, " good locus\n");
        return false;
      }
  
    count_info old_info;
!   get_count_info (stmt, &old_info);
    gcov_type total = 0;
    for (icall_target_map::const_iterator iter = old_info.targets.begin ();
         iter != old_info.targets.end (); ++iter)
      total += iter->second;
  
    /* Program behavior changed, original promoted (and inlined) target is not
       hot any more. Will avoid promote the original target.
--- 823,839 ----
    if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
      {
        if (dump_file)
! 	fprintf (dump_file, " bad locus (funciton end)\n");
        return false;
      }
  
    count_info old_info;
!   get_count_info (stmt, &old_info, node);
    gcov_type total = 0;
    for (icall_target_map::const_iterator iter = old_info.targets.begin ();
         iter != old_info.targets.end (); ++iter)
      total += iter->second;
+   total *= afdo_count_scale;
  
    /* Program behavior changed, original promoted (and inlined) target is not
       hot any more. Will avoid promote the original target.
*************** autofdo_source_profile::update_inlined_i
*** 785,791 ****
      }
  
    inline_stack stack;
!   get_inline_stack (gimple_location (stmt), &stack);
    if (stack.length () == 0)
      {
        if (dump_file)
--- 852,858 ----
      }
  
    inline_stack stack;
!   get_inline_stack_in_node (gimple_location (stmt), &stack, node);
    if (stack.length () == 0)
      {
        if (dump_file)
*************** autofdo_source_profile::update_inlined_i
*** 796,819 ****
    if (s == NULL)
      {
        if (dump_file)
! 	fprintf (dump_file, " function not found in inline stack\n");
        return false;
      }
    icall_target_map map;
!   if (s->find_icall_target_map (stmt, &map) == 0)
      {
        if (dump_file)
! 	fprintf (dump_file, " no target map\n");
        return false;
      }
    for (icall_target_map::const_iterator iter = map.begin ();
         iter != map.end (); ++iter)
      info->targets[iter->first] = iter->second;
    if (dump_file)
!     fprintf (dump_file, " looks good\n");
    return true;
  }
  
  /* Find total count of the callee of EDGE.  */
  
  gcov_type
--- 863,908 ----
    if (s == NULL)
      {
        if (dump_file)
! 	{
! 	  fprintf (dump_file, " function not found in inline stack:");
! 	  dump_inline_stack (dump_file, &stack);
! 	}
        return false;
      }
    icall_target_map map;
!   if (s->find_icall_target_map (node ? node->decl
! 				: current_function_decl,
! 				stmt, &map) == 0)
      {
        if (dump_file)
! 	{
! 	  fprintf (dump_file, " no target map for stack: ");
! 	  dump_inline_stack (dump_file, &stack);
! 	}
        return false;
      }
    for (icall_target_map::const_iterator iter = map.begin ();
         iter != map.end (); ++iter)
      info->targets[iter->first] = iter->second;
    if (dump_file)
!     {
!       fprintf (dump_file, " looks good; stack:");
!       dump_inline_stack (dump_file, &stack);
!     }
    return true;
  }
  
+ void
+ autofdo_source_profile::remove_icall_target (cgraph_edge *e)
+ {
+   autofdo::inline_stack stack;
+   autofdo::get_inline_stack_in_node (gimple_location (e->call_stmt),
+ 				     &stack, e->caller);
+   autofdo::function_instance *s
+ 	  = get_function_instance_by_inline_stack (stack);
+   s->remove_icall_target (e->caller->decl, e->call_stmt);
+ }
+ 
  /* Find total count of the callee of EDGE.  */
  
  gcov_type
*************** autofdo_source_profile::get_callsite_tot
*** 822,836 ****
  {
    inline_stack stack;
    stack.safe_push (std::make_pair (edge->callee->decl, 0));
!   get_inline_stack (gimple_location (edge->call_stmt), &stack);
  
    function_instance *s = get_function_instance_by_inline_stack (stack);
!   if (s == NULL
!       ||(afdo_string_table->get_index_by_decl (edge->callee->decl)
! 	 != s->name()))
!     return 0;
  
!   return s->total_count ();
  }
  
  /* Read AutoFDO profile and returns TRUE on success.  */
--- 911,948 ----
  {
    inline_stack stack;
    stack.safe_push (std::make_pair (edge->callee->decl, 0));
! 
!   get_inline_stack_in_node (gimple_location (edge->call_stmt), &stack,
! 			    edge->caller);
!   if (dump_file)
!     {
!       if (!edge->caller->inlined_to)
! 	fprintf (dump_file, "Looking up afdo profile for call %s -> %s stack:",
! 		 edge->caller->dump_name (), edge->callee->dump_name ());
!       else
! 	fprintf (dump_file, "Looking up afdo profile for call %s -> %s transitively %s stack:",
! 		 edge->caller->dump_name (), edge->callee->dump_name (),
! 		 edge->caller->inlined_to->dump_name ());
!       dump_inline_stack (dump_file, &stack);
!     }
  
    function_instance *s = get_function_instance_by_inline_stack (stack);
!   if (s == NULL)
!     {
!       if (dump_file)
! 	fprintf (dump_file, "No function instance found\n");
!       return 0;
!     }
!   if (afdo_string_table->get_index_by_decl (edge->callee->decl) != s->name ())
!     {
!       if (dump_file)
! 	fprintf (dump_file, "Mismatched name of callee %s and profile %s\n",
! 		 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (edge->callee->decl)),
! 		 afdo_string_table->get_name (s->name ()));
!       return 0;
!     }
  
!   return s->total_count () * afdo_count_scale;
  }
  
  /* Read AutoFDO profile and returns TRUE on success.  */
*************** autofdo_source_profile::read ()
*** 889,894 ****
--- 1001,1023 ----
  	  map_[fun_id]->merge (s);
  	}
      }
+   /* Scale up the profile, but leave some bits in case some counts gets
+      bigger than sum_max eventually.  */
+   if (afdo_profile_info->sum_max)
+     afdo_count_scale
+       = MAX (((gcov_type)1 << (profile_count::n_bits / 2))
+ 	     / afdo_profile_info->sum_max, 1);
+   if (dump_file)
+     fprintf (dump_file, "Max count in profile %" PRIu64 "\n"
+ 			"Setting scale %" PRIu64 "\n"
+ 			"Scaled max count %" PRIu64 "\n"
+ 			"Hot count threshold %" PRIu64 "\n",
+ 	     (int64_t)afdo_profile_info->sum_max,
+ 	     (int64_t)afdo_count_scale,
+ 	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale),
+ 	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale
+ 		       / param_hot_bb_count_fraction));
+   afdo_profile_info->sum_max *= afdo_count_scale;
    g->get_dumps ()->dump_finish (profile_pass_num);
    return true;
  }
*************** read_profile (void)
*** 989,1007 ****
         decide if it needs to promote and inline.  */
  
  static bool
! afdo_indirect_call (gimple_stmt_iterator *gsi, const icall_target_map &map,
!                     bool transform)
  {
-   gimple *gs = gsi_stmt (*gsi);
    tree callee;
  
    if (map.size () == 0)
!     return false;
!   gcall *stmt = dyn_cast <gcall *> (gs);
!   if (!stmt
!       || gimple_call_internal_p (stmt)
!       || gimple_call_fndecl (stmt) != NULL_TREE)
!     return false;
  
    gcov_type total = 0;
    icall_target_map::const_iterator max_iter = map.end ();
--- 1118,1152 ----
         decide if it needs to promote and inline.  */
  
  static bool
! afdo_indirect_call (gcall *stmt, const icall_target_map &map,
! 		    bool transform, cgraph_edge *indirect_edge)
  {
    tree callee;
  
    if (map.size () == 0)
!     {
!       if (dump_file)
! 	fprintf (dump_file, "No targets found\n");
!       return false;
!     }
!   if (!stmt)
!     {
!       if (dump_file)
! 	fprintf (dump_file, "No call statement\n");
!       return false;
!     }
!   if (gimple_call_internal_p (stmt))
!     {
!       if (dump_file)
! 	fprintf (dump_file, "Internal call\n");
!       return false;
!     }
!   if (gimple_call_fndecl (stmt) != NULL_TREE)
!     {
!       if (dump_file)
! 	fprintf (dump_file, "Call is already direct\n");
!       return false;
!     }
  
    gcov_type total = 0;
    icall_target_map::const_iterator max_iter = map.end ();
*************** afdo_indirect_call (gimple_stmt_iterator
*** 1013,1052 ****
        if (max_iter == map.end () || max_iter->second < iter->second)
          max_iter = iter;
      }
    struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
        get_identifier (afdo_string_table->get_name (max_iter->first)));
!   if (direct_call == NULL || !direct_call->profile_id)
!     return false;
  
    callee = gimple_call_fn (stmt);
  
-   histogram_value hist = gimple_alloc_histogram_value (
-       cfun, HIST_TYPE_INDIR_CALL, stmt, callee);
-   hist->n_counters = 4;
-   hist->hvalue.counters = XNEWVEC (gcov_type, hist->n_counters);
-   gimple_add_histogram_value (cfun, stmt, hist);
- 
-   /* Total counter */
-   hist->hvalue.counters[0] = total;
-   /* Number of value/counter pairs */
-   hist->hvalue.counters[1] = 1;
-   /* Value */
-   hist->hvalue.counters[2] = direct_call->profile_id;
-   /* Counter */
-   hist->hvalue.counters[3] = max_iter->second;
- 
    if (!transform)
!     return false;
! 
!   cgraph_node* current_function_node = cgraph_node::get (current_function_decl);
  
!   /* If the direct call is a recursive call, don't promote it since
!      we are not set up to inline recursive calls at this stage. */
!   if (direct_call == current_function_node)
!     return false;
  
!   struct cgraph_edge *indirect_edge
!       = current_function_node->get_edge (stmt);
  
    if (dump_file)
      {
--- 1158,1207 ----
        if (max_iter == map.end () || max_iter->second < iter->second)
          max_iter = iter;
      }
+   total *= afdo_count_scale;
    struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
        get_identifier (afdo_string_table->get_name (max_iter->first)));
!   if (direct_call == NULL)
!     {
!       if (dump_file)
! 	fprintf (dump_file, "Failed to find cgraph node for %s\n",
! 		 afdo_string_table->get_name (max_iter->first));
!       return false;
!     }
  
    callee = gimple_call_fn (stmt);
  
    if (!transform)
!     {
!       if (!direct_call->profile_id)
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "No profile id\n");
! 	  return false;
! 	}
!       histogram_value hist = gimple_alloc_histogram_value (
! 	  cfun, HIST_TYPE_INDIR_CALL, stmt, callee);
!       hist->n_counters = 4;
!       hist->hvalue.counters = XNEWVEC (gcov_type, hist->n_counters);
!       gimple_add_histogram_value (cfun, stmt, hist);
  
!       /* Total counter */
!       hist->hvalue.counters[0] = total;
!       /* Number of value/counter pairs */
!       hist->hvalue.counters[1] = 1;
!       /* Value */
!       hist->hvalue.counters[2] = direct_call->profile_id;
!       /* Counter */
!       hist->hvalue.counters[3] = max_iter->second * afdo_count_scale;
  
!       if (!direct_call->profile_id)
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "Histogram attached\n");
! 	  return false;
! 	}
!       return false;
!     }
  
    if (dump_file)
      {
*************** afdo_indirect_call (gimple_stmt_iterator
*** 1056,1071 ****
        print_generic_expr (dump_file, direct_call->decl, TDF_SLIM);
      }
  
!   if (direct_call == NULL)
!     {
!       if (dump_file)
!         fprintf (dump_file, " not transforming\n");
!       return false;
!     }
!   if (DECL_STRUCT_FUNCTION (direct_call->decl) == NULL)
      {
        if (dump_file)
!         fprintf (dump_file, " no declaration\n");
        return false;
      }
  
--- 1211,1220 ----
        print_generic_expr (dump_file, direct_call->decl, TDF_SLIM);
      }
  
!   if (!direct_call->definition)
      {
        if (dump_file)
! 	fprintf (dump_file, " no definition available\n");
        return false;
      }
  
*************** afdo_indirect_call (gimple_stmt_iterator
*** 1076,1088 ****
        fprintf (dump_file, "\n");
      }
  
!   /* FIXME: Count should be initialized.  */
!   struct cgraph_edge *new_edge
!       = indirect_edge->make_speculative (direct_call,
! 					 profile_count::uninitialized ());
!   cgraph_edge::redirect_call_stmt_to_callee (new_edge);
!   gimple_remove_histogram_value (cfun, stmt, hist);
!   inline_call (new_edge, true, NULL, NULL, false);
    return true;
  }
  
--- 1225,1233 ----
        fprintf (dump_file, "\n");
      }
  
!   indirect_edge->make_speculative
! 		(direct_call,
! 		 gimple_bb (stmt)->count.apply_scale (99, 100));
    return true;
  }
  
*************** afdo_indirect_call (gimple_stmt_iterator
*** 1090,1118 ****
     histograms and adds them to list VALUES.  */
  
  static bool
! afdo_vpt (gimple_stmt_iterator *gsi, const icall_target_map &map,
!           bool transform)
  {
!   return afdo_indirect_call (gsi, map, transform);
  }
  
  typedef std::set<basic_block> bb_set;
- typedef std::set<edge> edge_set;
  
  static bool
  is_bb_annotated (const basic_block bb, const bb_set &annotated)
  {
!   return annotated.find (bb) != annotated.end ();
  }
  
  static void
  set_bb_annotated (basic_block bb, bb_set *annotated)
  {
    annotated->insert (bb);
  }
  
! /* Update profile_count by known autofdo count.  */
! void
  update_count_by_afdo_count (profile_count *count, gcov_type c)
  {
    if (c)
--- 1235,1272 ----
     histograms and adds them to list VALUES.  */
  
  static bool
! afdo_vpt (gcall *gs, const icall_target_map &map,
! 	  bool transform, cgraph_edge *indirect_edge)
  {
!   return afdo_indirect_call (gs, map, transform, indirect_edge);
  }
  
  typedef std::set<basic_block> bb_set;
  
  static bool
  is_bb_annotated (const basic_block bb, const bb_set &annotated)
  {
!   if (annotated.find (bb) != annotated.end ())
!     {
!       gcc_checking_assert (bb->count.quality () == AFDO
! 			   || !bb->count.nonzero_p ());
!       return true;
!     }
!   gcc_checking_assert (bb->count.quality () != AFDO
! 		       || !bb->count.nonzero_p ());
!   return false;
  }
  
  static void
  set_bb_annotated (basic_block bb, bb_set *annotated)
  {
+   gcc_checking_assert (bb->count.quality () == AFDO
+ 		       || !bb->count.nonzero_p ());
    annotated->insert (bb);
  }
  
! /* Update COUNT by known autofdo count C.  */
! static void
  update_count_by_afdo_count (profile_count *count, gcov_type c)
  {
    if (c)
*************** update_count_by_afdo_count (profile_coun
*** 1125,1136 ****
      *count = profile_count::zero ().afdo ();
  }
  
  /* For a given BB, set its execution count. Attach value profile if a stmt
     is not in PROMOTED, because we only want to promote an indirect call once.
     Return TRUE if BB is annotated.  */
  
  static bool
! afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
  {
    gimple_stmt_iterator gsi;
    gcov_type max_count = 0;
--- 1279,1303 ----
      *count = profile_count::zero ().afdo ();
  }
  
+ /* Update COUNT by known autofdo count C.  */
+ static void
+ update_count_by_afdo_count (profile_count *count, profile_count c)
+ {
+   if (c.nonzero_p ())
+     *count = c;
+   /* In case we have guessed profile which is already zero, preserve
+      quality info.  */
+   else if (count->nonzero_p ()
+ 	   || count->quality () < c.quality ())
+     *count = c;
+ }
+ 
  /* For a given BB, set its execution count. Attach value profile if a stmt
     is not in PROMOTED, because we only want to promote an indirect call once.
     Return TRUE if BB is annotated.  */
  
  static bool
! afdo_set_bb_count (basic_block bb, hash_set <basic_block> &zero_bbs)
  {
    gimple_stmt_iterator gsi;
    gcov_type max_count = 0;
*************** afdo_set_bb_count (basic_block bb, const
*** 1143,1164 ****
        count_info info;
        gimple *stmt = gsi_stmt (gsi);
        if (gimple_clobber_p (stmt) || is_gimple_debug (stmt))
!         continue;
        if (afdo_source_profile->get_count_info (stmt, &info))
!         {
!           if (info.count > max_count)
!             max_count = info.count;
  	  if (dump_file && info.count)
  	    {
  	      fprintf (dump_file, "  count %" PRIu64 " in stmt: ",
  		       (int64_t)info.count);
  	      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
  	    }
!           has_annotated = true;
!           if (info.targets.size () > 0
!               && promoted.find (stmt) == promoted.end ())
!             afdo_vpt (&gsi, info.targets, false);
!         }
      }
  
    if (!has_annotated)
--- 1310,1335 ----
        count_info info;
        gimple *stmt = gsi_stmt (gsi);
        if (gimple_clobber_p (stmt) || is_gimple_debug (stmt))
! 	continue;
        if (afdo_source_profile->get_count_info (stmt, &info))
! 	{
! 	  if (info.count > max_count)
! 	    max_count = info.count;
  	  if (dump_file && info.count)
  	    {
  	      fprintf (dump_file, "  count %" PRIu64 " in stmt: ",
  		       (int64_t)info.count);
  	      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
  	    }
! 	  has_annotated = true;
! 	  gcall *call = dyn_cast <gcall *> (gsi_stmt (gsi));
! 	  /* TODO; if inlined early and indirect call was not optimized out,
! 	     we will end up speculating again.  Early inliner should remove
! 	     all targets for edges it speculated into safely.  */
! 	  if (call
! 	      && info.targets.size () > 0)
! 	    afdo_vpt (call, info.targets, false, NULL);
! 	}
      }
  
    if (!has_annotated)
*************** afdo_set_bb_count (basic_block bb, const
*** 1202,1214 ****
  
    if (max_count)
      {
!       update_count_by_afdo_count (&bb->count, max_count);
        if (dump_file)
  	fprintf (dump_file,
! 		 " Annotated bb %i with count %" PRId64 "\n",
! 		 bb->index, (int64_t)max_count);
      }
!   return true;
  }
  
  /* BB1 and BB2 are in an equivalent class iff:
--- 1373,1395 ----
  
    if (max_count)
      {
!       update_count_by_afdo_count (&bb->count, max_count * afdo_count_scale);
        if (dump_file)
  	fprintf (dump_file,
! 		 " Annotated bb %i with count %" PRId64
! 		 ", scaled to %" PRId64 "\n",
! 		 bb->index, (int64_t)max_count,
! 		 (int64_t)(max_count * afdo_count_scale));
!       return true;
      }
!   else
!     {
!       if (dump_file)
! 	fprintf (dump_file,
! 		 " bb %i has statements with 0 count\n", bb->index);
!       zero_bbs.add (bb);
!     }
!   return false;
  }
  
  /* BB1 and BB2 are in an equivalent class iff:
*************** afdo_find_equiv_class (bb_set *annotated
*** 1226,1232 ****
    basic_block bb;
  
    FOR_ALL_BB_FN (bb, cfun)
!   bb->aux = NULL;
  
    FOR_ALL_BB_FN (bb, cfun)
    {
--- 1407,1413 ----
    basic_block bb;
  
    FOR_ALL_BB_FN (bb, cfun)
!     bb->aux = NULL;
  
    FOR_ALL_BB_FN (bb, cfun)
    {
*************** afdo_find_equiv_class (bb_set *annotated
*** 1238,1244 ****
  	  && bb1->loop_father == bb->loop_father)
  	{
  	  bb1->aux = bb;
! 	  if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
  	    {
  	      if (dump_file)
  		{
--- 1419,1427 ----
  	  && bb1->loop_father == bb->loop_father)
  	{
  	  bb1->aux = bb;
! 	  if (is_bb_annotated (bb1, *annotated_bb)
! 	      && (!is_bb_annotated (bb, *annotated_bb)
! 		  || bb1->count > bb->count))
  	    {
  	      if (dump_file)
  		{
*************** afdo_find_equiv_class (bb_set *annotated
*** 1247,1254 ****
  			   bb1->index,
  			   bb->index);
  		  bb1->count.dump (dump_file);
  		}
! 	      bb->count = bb1->count;
  	      set_bb_annotated (bb, annotated_bb);
  	    }
  	}
--- 1430,1438 ----
  			   bb1->index,
  			   bb->index);
  		  bb1->count.dump (dump_file);
+ 		  fprintf (dump_file, "\n");
  		}
! 	      update_count_by_afdo_count (&bb->count, bb1->count);
  	      set_bb_annotated (bb, annotated_bb);
  	    }
  	}
*************** afdo_find_equiv_class (bb_set *annotated
*** 1258,1264 ****
  	  && bb1->loop_father == bb->loop_father)
  	{
  	  bb1->aux = bb;
! 	  if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
  	    {
  	      if (dump_file)
  		{
--- 1442,1450 ----
  	  && bb1->loop_father == bb->loop_father)
  	{
  	  bb1->aux = bb;
! 	  if (is_bb_annotated (bb1, *annotated_bb)
! 	      && (!is_bb_annotated (bb, *annotated_bb)
! 		  || bb1->count > bb->count))
  	    {
  	      if (dump_file)
  		{
*************** afdo_find_equiv_class (bb_set *annotated
*** 1267,1274 ****
  			   bb1->index,
  			   bb->index);
  		  bb1->count.dump (dump_file);
  		}
! 	      bb->count = bb1->count;
  	      set_bb_annotated (bb, annotated_bb);
  	    }
  	}
--- 1453,1461 ----
  			   bb1->index,
  			   bb->index);
  		  bb1->count.dump (dump_file);
+ 		  fprintf (dump_file, "\n");
  		}
! 	      update_count_by_afdo_count (&bb->count, bb1->count);
  	      set_bb_annotated (bb, annotated_bb);
  	    }
  	}
*************** afdo_propagate_edge (bool is_succ, bb_se
*** 1294,1343 ****
    {
      edge e, unknown_edge = NULL;
      edge_iterator ei;
!     int num_unknown_edge = 0;
!     int num_edge = 0;
      profile_count total_known_count = profile_count::zero ().afdo ();
  
      FOR_EACH_EDGE (e, ei, is_succ ? bb->succs : bb->preds)
        {
  	gcc_assert (AFDO_EINFO (e) != NULL);
  	if (! AFDO_EINFO (e)->is_annotated ())
! 	  num_unknown_edge++, unknown_edge = e;
  	else
  	  total_known_count += AFDO_EINFO (e)->get_count ();
! 	num_edge++;
        }
  
      /* Be careful not to annotate block with no successor in special cases.  */
!     if (num_unknown_edge == 0 && total_known_count > bb->count)
        {
! 	bb->count = total_known_count;
! 	if (!is_bb_annotated (bb, *annotated_bb))
! 	  set_bb_annotated (bb, annotated_bb);
  	changed = true;
        }
!     else if (num_unknown_edge == 1 && is_bb_annotated (bb, *annotated_bb))
        {
  	if (bb->count > total_known_count)
  	  {
! 	      profile_count new_count = bb->count - total_known_count;
! 	      AFDO_EINFO(unknown_edge)->set_count(new_count);
! 	      if (num_edge == 1)
! 		{
! 		  basic_block succ_or_pred_bb = is_succ ? unknown_edge->dest : unknown_edge->src;
! 		  if (new_count > succ_or_pred_bb->count)
! 		    {
! 		      succ_or_pred_bb->count = new_count;
! 		      if (!is_bb_annotated (succ_or_pred_bb, *annotated_bb))
! 			set_bb_annotated (succ_or_pred_bb, annotated_bb);
! 		    }
! 		}
! 	   }
  	else
! 	  AFDO_EINFO (unknown_edge)->set_count (profile_count::zero().afdo ());
  	AFDO_EINFO (unknown_edge)->set_annotated ();
  	changed = true;
        }
    }
    return changed;
  }
--- 1481,1569 ----
    {
      edge e, unknown_edge = NULL;
      edge_iterator ei;
!     int num_unknown_edges = 0;
!     int num_edges = 0;
      profile_count total_known_count = profile_count::zero ().afdo ();
  
      FOR_EACH_EDGE (e, ei, is_succ ? bb->succs : bb->preds)
        {
  	gcc_assert (AFDO_EINFO (e) != NULL);
  	if (! AFDO_EINFO (e)->is_annotated ())
! 	  num_unknown_edges++, unknown_edge = e;
  	else
  	  total_known_count += AFDO_EINFO (e)->get_count ();
! 	num_edges++;
!       }
!     if (dump_file)
!       {
! 	fprintf (dump_file, "bb %i %s propagating %s edges %i, "
! 		 "unknown edges %i, known count ",
! 		 bb->index,
! 		 is_bb_annotated (bb, *annotated_bb) ? "(annotated)" : "",
! 		 is_succ ? "succesors" : "predecessors", num_edges,
! 		 num_unknown_edges);
! 	total_known_count.dump (dump_file);
! 	fprintf (dump_file, " bb count ");
! 	bb->count.dump (dump_file);
! 	fprintf (dump_file, "\n");
        }
  
      /* Be careful not to annotate block with no successor in special cases.  */
!     if (num_unknown_edges == 0 && num_edges
! 	&& !is_bb_annotated (bb, *annotated_bb))
        {
! 	if (dump_file)
! 	  {
! 	    fprintf (dump_file, "  Annotating bb %i with count ", bb->index);
! 	    total_known_count.dump (dump_file);
! 	    fprintf (dump_file, "\n");
! 	  }
! 	update_count_by_afdo_count (&bb->count, total_known_count);
! 	set_bb_annotated (bb, annotated_bb);
  	changed = true;
        }
!     else if (num_unknown_edges == 1 && is_bb_annotated (bb, *annotated_bb))
        {
  	if (bb->count > total_known_count)
  	  {
! 	    profile_count new_count = bb->count - total_known_count;
! 	    AFDO_EINFO (unknown_edge)->set_count (new_count);
! 	  }
  	else
! 	  AFDO_EINFO (unknown_edge)->set_count
! 		  (profile_count::zero ().afdo ());
! 	if (dump_file)
! 	  {
! 	    fprintf (dump_file, "  Annotated edge %i->%i with count ",
! 		     unknown_edge->src->index, unknown_edge->dest->index);
! 	    AFDO_EINFO (unknown_edge)->get_count ().dump (dump_file);
! 	    fprintf (dump_file, "\n");
! 	  }
  	AFDO_EINFO (unknown_edge)->set_annotated ();
  	changed = true;
        }
+     else if (num_unknown_edges > 1
+ 	     && is_bb_annotated (bb, *annotated_bb)
+ 	     && (total_known_count >= bb->count || !bb->count.nonzero_p ()))
+       {
+ 	FOR_EACH_EDGE (e, ei, is_succ ? bb->succs : bb->preds)
+ 	  {
+ 	    gcc_assert (AFDO_EINFO (e) != NULL);
+ 	    if (! AFDO_EINFO (e)->is_annotated ())
+ 	      {
+ 		AFDO_EINFO (e)->set_count
+ 		       	(profile_count::zero ().afdo ());
+ 		AFDO_EINFO (e)->set_annotated ();
+ 		if (dump_file)
+ 		  {
+ 		    fprintf (dump_file, "  Annotated edge %i->%i with count ",
+ 			     e->src->index, e->dest->index);
+ 		    AFDO_EINFO (unknown_edge)->get_count ().dump (dump_file);
+ 		    fprintf (dump_file, "\n");
+ 		  }
+ 	      }
+ 	  }
+       }
    }
    return changed;
  }
*************** afdo_propagate_circuit (const bb_set &an
*** 1450,1465 ****
  static void
  afdo_propagate (bb_set *annotated_bb)
  {
-   basic_block bb;
    bool changed = true;
    int i = 0;
  
    FOR_ALL_BB_FN (bb, cfun)
!   {
!     bb->count = ((basic_block)bb->aux)->count;
!     if (is_bb_annotated ((basic_block)bb->aux, *annotated_bb))
!       set_bb_annotated (bb, annotated_bb);
!   }
  
    while (changed && i++ < 10)
      {
--- 1676,1700 ----
  static void
  afdo_propagate (bb_set *annotated_bb)
  {
    bool changed = true;
    int i = 0;
  
+   basic_block bb;
    FOR_ALL_BB_FN (bb, cfun)
!     if (!is_bb_annotated (bb, *annotated_bb)
! 	&& is_bb_annotated ((basic_block)bb->aux, *annotated_bb))
!       {
! 	update_count_by_afdo_count (&bb->count, ((basic_block)bb->aux)->count);
! 	set_bb_annotated (bb, annotated_bb);
! 	if (dump_file)
! 	  {
! 	    fprintf (dump_file,
! 		     "  Copying count of bb %i to bb %i; count is:",
! 		     ((basic_block)bb->aux)->index,
! 		     bb->index);
! 	    bb->count.dump (dump_file);
! 	  }
!       }
  
    while (changed && i++ < 10)
      {
*************** afdo_propagate (bb_set *annotated_bb)
*** 1471,1476 ****
--- 1706,1984 ----
          changed = true;
        afdo_propagate_circuit (*annotated_bb);
      }
+   if (dump_file)
+     fprintf (dump_file, "Propated in %i iterations %s\n",
+ 	     i, changed ? "; iteration limit reached\n" : "");
+ }
+ 
+ /* qsort comparator of sreals.  */
+ static int
+ cmp (const void *a, const void *b)
+ {
+   if (*(const sreal *)a < *(const sreal *)b)
+     return 1;
+   if (*(const sreal *)a > *(const sreal *)b)
+     return -1;
+   return 0;
+ }
+ 
+ /* Add scale ORIG/ANNOTATED to SCALES.  */
+ 
+ static void
+ add_scale (vec <sreal> *scales, profile_count annotated, profile_count orig)
+ {
+   if (dump_file)
+     {
+       orig.dump (dump_file);
+       fprintf (dump_file, " should be ");
+       annotated.dump (dump_file);
+       fprintf (dump_file, "\n");
+     }
+   if (orig.nonzero_p ())
+     {
+       sreal scale
+ 	= annotated.guessed_local ()
+ 		.to_sreal_scale (orig);
+       if (dump_file)
+ 	fprintf (dump_file, "    adding scale %.16f\n",
+ 		 scale.to_double ());
+       scales->safe_push (scale);
+     }
+ }
+ 
+ /* Scale counts of all basic blocks in BBS by SCALE and convert them to
+    IPA quality.  */
+ 
+ static void
+ scale_bbs (const vec <basic_block> &bbs, sreal scale)
+ {
+   if (dump_file)
+     fprintf (dump_file, "  Scaling by %.16f\n", scale.to_double ());
+   for (basic_block b : bbs)
+     if (!(b->count == profile_count::zero ())
+ 	&& b->count.initialized_p ())
+       {
+ 	profile_count o = b->count;
+ 	b->count = b->count.force_guessed () * scale;
+ 
+ 	/* If we scaled to 0, make it auto-fdo since that is treated
+ 	   less agressively.  */
+ 	if (!b->count.nonzero_p () && o.nonzero_p ())
+ 	  b->count = profile_count::zero ().afdo ();
+ 	if (dump_file)
+ 	  {
+ 	    fprintf (dump_file, "    bb %i count updated ", b->index);
+ 	    o.dump (dump_file);
+ 	    fprintf (dump_file, " -> ");
+ 	    b->count.dump (dump_file);
+ 	    fprintf (dump_file, "\n");
+ 	  }
+       }
+ }
+ 
+ /* In case given basic block was fully optimized out, AutoFDO
+    will have no data about it.  In this case try to preserve static profile.
+    Identify connected components (in undirected form of CFG) which has
+    no annotations at all.  Look at thir boundaries and try to determine
+    scaling factor and scale.  */
+ 
+ void
+ afdo_adjust_guessed_profile (bb_set *annotated_bb)
+ {
+   /* Basic blocks of connected component currently processed.  */
+   auto_vec <basic_block, 20> bbs (n_basic_blocks_for_fn (cfun));
+   /* Scale factors found.  */
+   auto_vec <sreal, 20> scales;
+   auto_vec <basic_block, 20> stack (n_basic_blocks_for_fn (cfun));
+ 
+   basic_block seed_bb;
+   unsigned int component_id = 1;
+ 
+   /* Map from basic block to its component.
+      0   is used for univisited BBs,
+      1   means that BB is annotated,
+      >=2 is an id of the component BB belongs to.  */
+   auto_vec <unsigned int, 20> component;
+   component.safe_grow (last_basic_block_for_fn (cfun));
+   FOR_ALL_BB_FN (seed_bb, cfun)
+     component[seed_bb->index]
+ 	= is_bb_annotated (seed_bb, *annotated_bb) ? 1 : 0;
+   FOR_ALL_BB_FN (seed_bb, cfun)
+    if (!component[seed_bb->index])
+      {
+        stack.quick_push (seed_bb);
+        component_id++;
+        bbs.truncate (0);
+        scales.truncate (0);
+        component[seed_bb->index] = component_id;
+        profile_count max_count = profile_count::zero ();
+ 
+        /* Identify connected component starting in BB.  */
+        if (dump_file)
+ 	 fprintf (dump_file, "Starting connected component in bb %i\n",
+ 		  seed_bb->index);
+        do
+ 	 {
+ 	   basic_block b = stack.pop ();
+ 
+ 	   bbs.quick_push (b);
+ 	   max_count = max_count.max (b->count);
+ 
+ 	   for (edge e: b->preds)
+ 	     if (!component[e->src->index])
+ 	       {
+ 		  stack.quick_push (e->src);
+ 		  component[e->src->index] = component_id;
+ 	       }
+ 	   for (edge e: b->succs)
+ 	     if (!component[e->dest->index])
+ 	       {
+ 		  stack.quick_push (e->dest);
+ 		  component[e->dest->index] = component_id;
+ 	       }
+ 	 }
+        while (!stack.is_empty ());
+ 
+        /* If all blocks in components has 0 count, we do not need
+ 	  to scale, only we must convert to IPA quality.  */
+        if (!max_count.nonzero_p ())
+ 	 {
+ 	   if (dump_file)
+ 	     fprintf (dump_file, "  All counts are 0; scale = 1\n");
+ 	   scale_bbs (bbs, 1);
+ 	   continue;
+ 	 }
+ 
+        /* Now visit the component and try to figure out its desired
+ 	  frequency.  */
+        for (basic_block b : bbs)
+ 	 {
+ 	   if (dump_file)
+ 	     {
+ 	       fprintf (dump_file, "  visiting bb %i with count ", b->index);
+ 	       b->count.dump (dump_file);
+ 	       fprintf (dump_file, "\n");
+ 	     }
+ 	   if (!b->count.nonzero_p ())
+ 	     continue;
+ 	   /* Sum of counts of annotated edges into B.  */
+ 	   profile_count annotated_count = profile_count::zero ();
+ 	   /* Sum of counts of edges into B with source in current
+ 	      component.  */
+ 	   profile_count current_component_count = profile_count::zero ();
+ 	   bool boundary = false;
+ 
+ 	   for (edge e: b->preds)
+ 	     if (AFDO_EINFO (e)->is_annotated ())
+ 	       {
+ 		 if (dump_file)
+ 		   {
+ 		     fprintf (dump_file, "    Annotated pred edge to %i "
+ 			      "with count ", e->src->index);
+ 		     AFDO_EINFO (e)->get_count ().dump (dump_file);
+ 		     fprintf (dump_file, "\n");
+ 		   }
+ 		 boundary = true;
+ 		 annotated_count += AFDO_EINFO (e)->get_count ();
+ 	       }
+ 	     /* If source is anotated, combine with static
+ 		probability prediction.
+ 		TODO: We can do better in case some of edges out are
+ 		annotated and distribute only remaining count out of BB.  */
+ 	     else if (is_bb_annotated (e->src, *annotated_bb))
+ 	       {
+ 		 boundary = true;
+ 		 if (dump_file)
+ 		   {
+ 		     fprintf (dump_file, "    Annotated predecesor %i "
+ 			      "with count ", e->src->index);
+ 		     e->src->count.dump (dump_file);
+ 		     fprintf (dump_file, " edge count using static profile ");
+ 		     e->count ().dump (dump_file);
+ 		     fprintf (dump_file, "\n");
+ 		   }
+ 		 annotated_count += e->count ();
+ 	       }
+ 	     else
+ 	       {
+ 		 current_component_count += e->count ();
+ 		 gcc_checking_assert (component[e->src->index] == component_id);
+ 	       }
+ 	   if (boundary && current_component_count.initialized_p ())
+ 	     {
+ 	       if (dump_file)
+ 		 fprintf (dump_file, "    bb %i in count ", b->index);
+ 	       add_scale (&scales,
+ 			  annotated_count,
+ 			  b->count - current_component_count);
+ 	     }
+ 	   for (edge e: b->succs)
+ 	     if (AFDO_EINFO (e)->is_annotated ())
+ 	       {
+ 		 if (dump_file)
+ 		   fprintf (dump_file, "    edge %i->%i count ",
+ 			    b->index, e->dest->index);
+ 		 add_scale (&scales, AFDO_EINFO (e)->get_count (), e->count ());
+ 	       }
+ 	     else if (is_bb_annotated (e->dest, *annotated_bb))
+ 	       {
+ 		 profile_count annotated_count = e->dest->count;
+ 		 profile_count out_count = profile_count::zero ();
+ 		 bool ok = true;
+ 		 for (edge e2: e->dest->preds)
+ 		   if (AFDO_EINFO (e2)->is_annotated ())
+ 		     annotated_count -= AFDO_EINFO (e2)->get_count ();
+ 		   else if (component[e->src->index] == component_id)
+ 		     out_count += e->count ();
+ 		   else if (e->probability.nonzero_p ())
+ 		     {
+ 		       ok = false;
+ 		       break;
+ 		     }
+ 		 if (!ok)
+ 		   continue;
+ 		 if (dump_file)
+ 		   fprintf (dump_file,
+ 			    "    edge %i->%i has annotated sucessor; count ",
+ 			    b->index, e->dest->index);
+ 		 add_scale (&scales, annotated_count, e->count ());
+ 	       }
+ 
+ 	 }
+ 
+        /* If we failed to find annotated entry or exit edge,
+ 	  look for exit edges and scale profile so the dest
+ 	  BB get all flow it needs.  This is inprecise because
+ 	  the edge is not annotated and thus BB has more than
+ 	  one such predecessor.  */
+        if (!scales.length ())
+ 	 for (basic_block b : bbs)
+ 	   if (b->count.nonzero_p ())
+ 	     for (edge e: b->succs)
+ 	       if (is_bb_annotated (e->dest, *annotated_bb))
+ 		 {
+ 		   profile_count annotated_count = e->dest->count;
+ 		   for (edge e2: e->dest->preds)
+ 		     if (AFDO_EINFO (e2)->is_annotated ())
+ 		       annotated_count -= AFDO_EINFO (e2)->get_count ();
+ 		   if (dump_file)
+ 		     fprintf (dump_file,
+ 			      "    edge %i->%i has annotated sucessor;"
+ 			      " upper bound count ",
+ 			      b->index, e->dest->index);
+ 		   add_scale (&scales, annotated_count, e->count ());
+ 		 }
+        if (!scales.length ())
+ 	 {
+ 	   if (dump_file)
+ 	     fprintf (dump_file,
+ 		      "  Can not determine count from the boundary; giving up");
+ 	   continue;
+ 	 }
+        gcc_checking_assert (scales.length ());
+        scales.qsort (cmp);
+        scale_bbs (bbs, scales[scales.length () / 2]);
+      }
  }
  
  /* Propagate counts on control flow graph and calculate branch
*************** afdo_calculate_branch_prob (bb_set *anno
*** 1483,1492 ****
    edge_iterator ei;
    basic_block bb;
  
-   calculate_dominance_info (CDI_POST_DOMINATORS);
-   calculate_dominance_info (CDI_DOMINATORS);
-   loop_optimizer_init (0);
- 
    FOR_ALL_BB_FN (bb, cfun)
      {
        gcc_assert (bb->aux == NULL);
--- 1991,1996 ----
*************** afdo_calculate_branch_prob (bb_set *anno
*** 1501,1538 ****
    afdo_propagate (annotated_bb);
  
    FOR_EACH_BB_FN (bb, cfun)
!   {
!     int num_unknown_succ = 0;
!     profile_count total_count = profile_count::zero ().afdo ();
! 
!     FOR_EACH_EDGE (e, ei, bb->succs)
!     {
!       gcc_assert (AFDO_EINFO (e) != NULL);
!       if (! AFDO_EINFO (e)->is_annotated ())
!         num_unknown_succ++;
!       else
!         total_count += AFDO_EINFO (e)->get_count ();
!     }
!     if (num_unknown_succ == 0 && total_count.nonzero_p ())
        {
  	FOR_EACH_EDGE (e, ei, bb->succs)
  	  {
! 	    /* If probability is 1, preserve reliable static prediction
! 	       (This is, for example the case of single fallthru edge
! 		or single fallthru plus unlikely EH edge.)  */
! 	    if (AFDO_EINFO (e)->get_count () == total_count
! 		&& e->probability == profile_probability::always ())
! 	      ;
! 	    else if (AFDO_EINFO (e)->get_count ().nonzero_p ())
! 	      e->probability
! 		= AFDO_EINFO (e)->get_count ().probability_in (total_count);
! 	    /* If probability is zero, preserve reliable static prediction.  */
! 	    else if (e->probability.nonzero_p ()
! 		     || e->probability.quality () == GUESSED)
! 	      e->probability = profile_probability::never ().afdo ();
  	  }
        }
!   }
    FOR_ALL_BB_FN (bb, cfun)
      {
        bb->aux = NULL;
--- 2005,2054 ----
    afdo_propagate (annotated_bb);
  
    FOR_EACH_BB_FN (bb, cfun)
!     if (is_bb_annotated (bb, *annotated_bb))
        {
+ 	bool all_known = true;
+ 	profile_count total_count = profile_count::zero ().afdo ();
+ 
  	FOR_EACH_EDGE (e, ei, bb->succs)
  	  {
! 	    gcc_assert (AFDO_EINFO (e) != NULL);
! 	    if (! AFDO_EINFO (e)->is_annotated ())
! 	      {
! 		/* If by static profile this edge never happens,
! 		   still propagate the rest.  */
! 		if (e->probability.nonzero_p ())
! 		  {
! 		    all_known = false;
! 		    break;
! 		  }
! 	      }
! 	    else
! 	      total_count += AFDO_EINFO (e)->get_count ();
  	  }
+ 	if (!all_known || !total_count.nonzero_p ())
+ 	  continue;
+ 
+ 	FOR_EACH_EDGE (e, ei, bb->succs)
+ 	  if (AFDO_EINFO (e)->is_annotated ())
+ 	    {
+ 	      /* If probability is 1, preserve reliable static prediction
+ 		 (This is, for example the case of single fallthru edge
+ 		  or single fallthru plus unlikely EH edge.)  */
+ 	      if (AFDO_EINFO (e)->get_count () == total_count
+ 		  && e->probability == profile_probability::always ())
+ 		;
+ 	      else if (AFDO_EINFO (e)->get_count ().nonzero_p ())
+ 		e->probability
+ 		  = AFDO_EINFO (e)->get_count ().probability_in (total_count);
+ 	      /* If probability is zero, preserve reliable static
+ 		 prediction.  */
+ 	      else if (e->probability.nonzero_p ()
+ 		       || e->probability.quality () == GUESSED)
+ 		e->probability = profile_probability::never ().afdo ();
+ 	    }
        }
!   afdo_adjust_guessed_profile (annotated_bb);
    FOR_ALL_BB_FN (bb, cfun)
      {
        bb->aux = NULL;
*************** afdo_calculate_branch_prob (bb_set *anno
*** 1543,1624 ****
  	    e->aux = NULL;
  	  }
      }
- 
-   loop_optimizer_finalize ();
-   free_dominance_info (CDI_DOMINATORS);
-   free_dominance_info (CDI_POST_DOMINATORS);
  }
  
! /* Perform value profile transformation using AutoFDO profile. Add the
!    promoted stmts to PROMOTED_STMTS. Return TRUE if there is any
!    indirect call promoted.  */
! 
! static bool
! afdo_vpt_for_early_inline (stmt_set *promoted_stmts)
! {
!   basic_block bb;
!   if (afdo_source_profile->get_function_instance_by_decl (
!           current_function_decl) == NULL)
!     return false;
! 
!   compute_fn_summary (cgraph_node::get (current_function_decl), true);
! 
!   bool has_vpt = false;
!   FOR_EACH_BB_FN (bb, cfun)
!   {
!     if (!has_indirect_call (bb))
!       continue;
!     gimple_stmt_iterator gsi;
! 
!     gcov_type bb_count = 0;
!     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
!       {
!         count_info info;
! 	gimple *stmt = gsi_stmt (gsi);
!         if (afdo_source_profile->get_count_info (stmt, &info))
!           bb_count = MAX (bb_count, info.count);
!       }
! 
!     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
!       {
!         gcall *stmt = dyn_cast <gcall *> (gsi_stmt (gsi));
!         /* IC_promotion and early_inline_2 is done in multiple iterations.
!            No need to promoted the stmt if its in promoted_stmts (means
!            it is already been promoted in the previous iterations).  */
!         if ((!stmt) || gimple_call_fn (stmt) == NULL
!             || TREE_CODE (gimple_call_fn (stmt)) == FUNCTION_DECL
!             || promoted_stmts->find (stmt) != promoted_stmts->end ())
!           continue;
! 
!         count_info info;
!         afdo_source_profile->get_count_info (stmt, &info);
!         info.count = bb_count;
!         if (afdo_source_profile->update_inlined_ind_target (stmt, &info))
!           {
!             /* Promote the indirect call and update the promoted_stmts.  */
!             promoted_stmts->insert (stmt);
!             if (afdo_vpt (&gsi, info.targets, true))
!               has_vpt = true;
!           }
!       }
!   }
! 
!   if (has_vpt)
!     {
!       unsigned todo = optimize_inline_calls (current_function_decl);
!       if (todo & TODO_update_ssa_any)
!        update_ssa (TODO_update_ssa);
!       return true;
!     }
! 
!   return false;
! }
! 
! /* Annotate auto profile to the control flow graph. Do not annotate value
!    profile for stmts in PROMOTED_STMTS.  */
  
  static void
! afdo_annotate_cfg (const stmt_set &promoted_stmts)
  {
    basic_block bb;
    bb_set annotated_bb;
--- 2059,2070 ----
  	    e->aux = NULL;
  	  }
      }
  }
  
! /* Annotate auto profile to the control flow graph.  */
  
  static void
! afdo_annotate_cfg (void)
  {
    basic_block bb;
    bb_set annotated_bb;
*************** afdo_annotate_cfg (const stmt_set &promo
*** 1634,1649 ****
        return;
      }
  
    if (dump_file)
      fprintf (dump_file, "\n\nAnnotating BB profile of %s\n",
  	     cgraph_node::get (current_function_decl)->dump_name ());
  
    /* In the first pass only store non-zero counts.  */
!   gcov_type head_count = s->head_count ();
    bool profile_found = head_count > 0;
    FOR_EACH_BB_FN (bb, cfun)
      {
!       if (afdo_set_bb_count (bb, promoted_stmts))
  	{
  	  if (bb->count.quality () == AFDO)
  	    {
--- 2080,2100 ----
        return;
      }
  
+   calculate_dominance_info (CDI_POST_DOMINATORS);
+   calculate_dominance_info (CDI_DOMINATORS);
+   loop_optimizer_init (0);
+ 
    if (dump_file)
      fprintf (dump_file, "\n\nAnnotating BB profile of %s\n",
  	     cgraph_node::get (current_function_decl)->dump_name ());
  
    /* In the first pass only store non-zero counts.  */
!   gcov_type head_count = s->head_count () * autofdo::afdo_count_scale;
    bool profile_found = head_count > 0;
+   hash_set <basic_block> zero_bbs;
    FOR_EACH_BB_FN (bb, cfun)
      {
!       if (afdo_set_bb_count (bb, zero_bbs))
  	{
  	  if (bb->count.quality () == AFDO)
  	    {
*************** afdo_annotate_cfg (const stmt_set &promo
*** 1653,1699 ****
  	  set_bb_annotated (bb, &annotated_bb);
  	}
      }
    /* Exit without clobbering static profile if there was no
!      non-zero count.
!      ??? Instead of keeping guessed profile we can introduce
!      GUESSED_GLOBAL0_AFDO.  */
    if (!profile_found)
      {
!       if (dump_file)
! 	fprintf (dump_file, "No afdo samples found; keeping original profile");
        return;
      }
  
    /* Update profile.  */
!   update_count_by_afdo_count (&ENTRY_BLOCK_PTR_FOR_FN (cfun)->count,
! 			      head_count);
!   update_count_by_afdo_count (&EXIT_BLOCK_PTR_FOR_FN (cfun)->count, 0);
!   profile_count max_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
! 
!   FOR_EACH_BB_FN (bb, cfun)
!     if (bb->count.quality () != AFDO)
!       update_count_by_afdo_count (&bb->count, 0);
!     else
!       max_count = max_count.max (bb->count);
  
-   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
-       > ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count)
-     {
-       ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count
-           = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
-       set_bb_annotated (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb, &annotated_bb);
-     }
-   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
-       > EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count)
-     {
-       EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count
-           = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
-       set_bb_annotated (EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb, &annotated_bb);
-     }
-   gcc_assert (max_count.nonzero_p ());
    /* Calculate, propagate count and probability information on CFG.  */
    afdo_calculate_branch_prob (&annotated_bb);
  
    cgraph_node::get(current_function_decl)->count
        = ENTRY_BLOCK_PTR_FOR_FN(cfun)->count;
    update_max_bb_count ();
--- 2104,2205 ----
  	  set_bb_annotated (bb, &annotated_bb);
  	}
      }
+   /* We try to preserve static profile for BBs with 0
+      afdo samples, but if even static profile agrees with 0,
+      consider it final so propagation works better.  */
+   for (basic_block bb : zero_bbs)
+     if (bb->count.nonzero_p ())
+       {
+ 	update_count_by_afdo_count (&bb->count, 0);
+ 	set_bb_annotated (bb, &annotated_bb);
+ 	if (dump_file)
+ 	  {
+ 	    fprintf (dump_file, "  Annotating bb %i with count ", bb->index);
+ 	    bb->count.dump (dump_file);
+ 	    fprintf (dump_file,
+ 		     " (has 0 count in both static and afdo profile)\n");
+ 	  }
+       }
    /* Exit without clobbering static profile if there was no
!      non-zero count.  */
    if (!profile_found)
      {
!       /* create_gcov only dumps symbols with some samples in them.
! 	 This means that we get nonempty zero_bbs only if some
! 	 nonzero counts in profile were not matched with statements.
! 	 ??? We can adjust create_gcov to also recordinfo
! 	 about function with no samples.  Then we can distinguish
! 	 between lost profiles which should be kept local and
! 	 real functions with 0 samples during train run.  */
!       if (zero_bbs.is_empty ())
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "No afdo samples found"
! 		     "; Setting global count to afdo0\n");
! 	}
!       else
! 	{
! 	  if (dump_file)
! 	    fprintf (dump_file, "Setting global count to afdo0\n");
! 	}
!       FOR_ALL_BB_FN (bb, cfun)
! 	if (bb->count.quality () == GUESSED_LOCAL)
! 	  bb->count = bb->count.global0afdo ();
! 
!       loop_optimizer_finalize ();
!       free_dominance_info (CDI_DOMINATORS);
!       free_dominance_info (CDI_POST_DOMINATORS);
        return;
      }
  
    /* Update profile.  */
!   if (head_count)
!   {
!     update_count_by_afdo_count (&ENTRY_BLOCK_PTR_FOR_FN (cfun)->count,
! 				head_count);
!     set_bb_annotated (ENTRY_BLOCK_PTR_FOR_FN (cfun), &annotated_bb);
!     if (!is_bb_annotated (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb, annotated_bb)
! 	|| ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
! 	   > ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count)
!       {
! 	ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count
! 	    = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
! 	set_bb_annotated (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb,
! 			  &annotated_bb);
!       }
!     if (!is_bb_annotated (EXIT_BLOCK_PTR_FOR_FN (cfun), annotated_bb)
! 	|| ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
! 	   > EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count)
!       {
! 	EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count
! 	    = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
! 	set_bb_annotated (EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb, &annotated_bb);
!       }
!   }
  
    /* Calculate, propagate count and probability information on CFG.  */
    afdo_calculate_branch_prob (&annotated_bb);
  
+  /* If we failed to turn some of original guessed profile to global,
+      set basic blocks uninitialized.  */
+   FOR_ALL_BB_FN (bb, cfun)
+     if (!bb->count.ipa_p ())
+       {
+ 	/* We skip annotating entry profile if it is 0
+ 	   in hope to be able to determine it better from the
+ 	   static profile.
+ 
+ 	   Now we know we can not derive it from other info,
+ 	   so set it since it is better than UNKNOWN.  */
+ 	if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun))
+ 	  bb->count = profile_count::zero ().afdo ();
+ 	else
+ 	  bb->count = profile_count::uninitialized ();
+ 	if (dump_file)
+ 	  fprintf (dump_file, "  Unknown count of bb %i\n", bb->index);
+ 	cfun->cfg->full_profile = false;
+       }
+ 
    cgraph_node::get(current_function_decl)->count
        = ENTRY_BLOCK_PTR_FOR_FN(cfun)->count;
    update_max_bb_count ();
*************** afdo_annotate_cfg (const stmt_set &promo
*** 1705,1710 ****
--- 2211,2220 ----
        free_dominance_info (CDI_POST_DOMINATORS);
        update_ssa (TODO_update_ssa);
      }
+ 
+   loop_optimizer_finalize ();
+   free_dominance_info (CDI_DOMINATORS);
+   free_dominance_info (CDI_POST_DOMINATORS);
  }
  
  /* Wrapper function to invoke early inliner.  */
*************** auto_profile (void)
*** 1744,1788 ****
  
      push_cfun (DECL_STRUCT_FUNCTION (node->decl));
  
!     /* First do indirect call promotion and early inline to make the
!        IR match the profiled binary before actual annotation.
! 
!        This is needed because an indirect call might have been promoted
!        and inlined in the profiled binary. If we do not promote and
!        inline these indirect calls before annotation, the profile for
!        these promoted functions will be lost.
! 
!        e.g. foo() --indirect_call--> bar()
!        In profiled binary, the callsite is promoted and inlined, making
!        the profile look like:
! 
!        foo: {
!          loc_foo_1: count_1
!          bar@loc_foo_2: {
!            loc_bar_1: count_2
!            loc_bar_2: count_3
!          }
!        }
! 
!        Before AutoFDO pass, loc_foo_2 is not promoted thus not inlined.
!        If we perform annotation on it, the profile inside bar@loc_foo2
!        will be wasted.
! 
!        To avoid this, we promote loc_foo_2 and inline the promoted bar
!        function before annotation, so the profile inside bar@loc_foo2
!        will be useful.  */
!     autofdo::stmt_set promoted_stmts;
!     unsigned int todo = 0;
!     for (int i = 0; i < 10; i++)
!       {
! 	if (!flag_value_profile_transformations
! 	    || !autofdo::afdo_vpt_for_early_inline (&promoted_stmts))
! 	  break;
! 	todo |= early_inline ();
!       }
! 
!     todo |= early_inline ();
!     autofdo::afdo_annotate_cfg (promoted_stmts);
      compute_function_frequency ();
  
      /* Local pure-const may imply need to fixup the cfg.  */
--- 2254,2261 ----
  
      push_cfun (DECL_STRUCT_FUNCTION (node->decl));
  
!     unsigned int todo = early_inline ();
!     autofdo::afdo_annotate_cfg ();
      compute_function_frequency ();
  
      /* Local pure-const may imply need to fixup the cfg.  */
*************** afdo_callsite_hot_enough_for_early_inlin
*** 1844,1849 ****
--- 2317,2330 ----
           temporarily set it to afdo_profile_info to calculate hotness.  */
        profile_info = autofdo::afdo_profile_info;
        is_hot = maybe_hot_count_p (NULL, pcount);
+       if (dump_file)
+ 	{
+ 	  fprintf (dump_file, "Call %s -> %s has %s afdo profile count ",
+ 		   edge->caller->dump_name (), edge->callee->dump_name (),
+ 		   is_hot ? "hot" : "cold");
+ 	  pcount.dump (dump_file);
+ 	  fprintf (dump_file, "\n");
+ 	}
        profile_info = saved_profile_info;
        return is_hot;
      }
*************** afdo_callsite_hot_enough_for_early_inlin
*** 1851,1856 ****
--- 2332,2409 ----
    return false;
  }
  
+ /* Do indirect call promotion during early inlining to make the
+    IR match the profiled binary before actual annotation.
+ 
+    This is needed because an indirect call might have been promoted
+    and inlined in the profiled binary.  If we do not promote and
+    inline these indirect calls before annotation, the profile for
+    these promoted functions will be lost.
+ 
+    e.g. foo() --indirect_call--> bar()
+    In profiled binary, the callsite is promoted and inlined, making
+    the profile look like:
+ 
+    foo: {
+      loc_foo_1: count_1
+      bar@loc_foo_2: {
+        loc_bar_1: count_2
+        loc_bar_2: count_3
+      }
+    }
+ 
+    Before AutoFDO pass, loc_foo_2 is not promoted thus not inlined.
+    If we perform annotation on it, the profile inside bar@loc_foo2
+    will be wasted.
+ 
+    To avoid this, we promote loc_foo_2 and inline the promoted bar
+    function before annotation, so the profile inside bar@loc_foo2
+    will be useful.  */
+ 
+ bool
+ afdo_vpt_for_early_inline (cgraph_node *node)
+ {
+   if (!node->indirect_calls)
+     return false;
+   bool changed = false;
+   cgraph_node *outer = node->inlined_to ? node->inlined_to : node;
+   if (autofdo::afdo_source_profile->get_function_instance_by_decl
+ 	  (outer->decl) == NULL)
+     return false;
+   for (cgraph_edge *e = node->indirect_calls; e; e = e->next_callee)
+     {
+       gcov_type bb_count = 0;
+       autofdo::count_info info;
+       basic_block bb = gimple_bb (e->call_stmt);
+ 
+       /* TODO: This is quadratic; cache the value.  */
+       for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
+ 	   !gsi_end_p (gsi); gsi_next (&gsi))
+ 	{
+ 	  autofdo::count_info info;
+ 	  gimple *stmt = gsi_stmt (gsi);
+ 	  if (autofdo::afdo_source_profile->get_count_info (stmt, &info, node))
+ 	    bb_count = MAX (bb_count, info.count);
+ 	}
+       autofdo::afdo_source_profile->get_count_info (e->call_stmt, &info, node);
+       info.count = bb_count;
+       if (!autofdo::afdo_source_profile->update_inlined_ind_target
+ 		      (e->call_stmt, &info, node))
+ 	continue;
+       changed |= autofdo::afdo_vpt (e->call_stmt, info.targets, true, e);
+     }
+   return changed;
+ }
+ 
+ /* If speculation used during early inline, remove the target
+    so we do not speculate the indirect edge again during afdo pass.  */
+ 
+ void
+ remove_afdo_speculative_target (cgraph_edge *e)
+ {
+   autofdo::afdo_source_profile->remove_icall_target (e);
+ }
+ 
  namespace
  {
  
diff -Nrcpad gcc-16-20250615/gcc/auto-profile.h gcc-16-20250622/gcc/auto-profile.h
*** gcc-16-20250615/gcc/auto-profile.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/auto-profile.h	Sun Jun 22 22:32:18 2025
*************** extern void end_auto_profile (void);
*** 28,31 ****
--- 28,38 ----
  /* Returns TRUE if EDGE is hot enough to be inlined early.  */
  extern bool afdo_callsite_hot_enough_for_early_inline (struct cgraph_edge *);
  
+ /* Try to turn indirect calls into speculative calls for early inlining.  */
+ extern bool afdo_vpt_for_early_inline (cgraph_node *node);
+ 
+ /* If speculation was early inlined, remove it from profile data so we
+    do not repeat it later.  */
+ extern void remove_afdo_speculative_target (cgraph_edge *);
+ 
  #endif /* AUTO_PROFILE_H */
diff -Nrcpad gcc-16-20250615/gcc/c-family/ChangeLog gcc-16-20250622/gcc/c-family/ChangeLog
*** gcc-16-20250615/gcc/c-family/ChangeLog	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/c-family/ChangeLog	Sun Jun 22 22:32:18 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-06-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c.opt: Add -Wsfinae-incomplete.
+ 	* c.opt.urls: Regenerate.
+ 
  2025-06-12  Gwenole Beauchesne  <gb.devel@gmail.com>
  	    Andrew Pinski  <quic_apinski@quicinc.com>
  
diff -Nrcpad gcc-16-20250615/gcc/c-family/c.opt gcc-16-20250622/gcc/c-family/c.opt
*** gcc-16-20250615/gcc/c-family/c.opt	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/c-family/c.opt	Sun Jun 22 22:32:18 2025
*************** Wsequence-point
*** 1319,1324 ****
--- 1319,1332 ----
  C ObjC C++ ObjC++ Var(warn_sequence_point) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
  Warn about possible violations of sequence point rules.
  
+ Wsfinae-incomplete=
+ C++ ObjC++ Var(warn_sfinae_incomplete) Warning Init(1) Joined RejectNegative UInteger IntegerRange(0, 2)
+ Warn about an incomplete type affecting semantics in a non-error context.
+ 
+ Wsfinae-incomplete
+ C++ ObjC++ Warning Alias(Wsfinae-incomplete=, 1, 0)
+ Warn about an incomplete type affecting semantics in a non-error context.
+ 
  Wshadow-ivar
  ObjC ObjC++ Var(warn_shadow_ivar) EnabledBy(Wshadow) Init(1) Warning
  Warn if a local declaration hides an instance variable.
diff -Nrcpad gcc-16-20250615/gcc/c-family/c.opt.urls gcc-16-20250622/gcc/c-family/c.opt.urls
*** gcc-16-20250615/gcc/c-family/c.opt.urls	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/c-family/c.opt.urls	Sun Jun 22 22:32:18 2025
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 756,761 ****
--- 756,767 ----
  Wsequence-point
  UrlSuffix(gcc/Warning-Options.html#index-Wno-sequence-point)
  
+ Wsfinae-incomplete=
+ UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sfinae-incomplete)
+ 
+ Wsfinae-incomplete
+ UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sfinae-incomplete)
+ 
  Wshadow-ivar
  UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow-ivar)
  
diff -Nrcpad gcc-16-20250615/gcc/cgraph.cc gcc-16-20250622/gcc/cgraph.cc
*** gcc-16-20250615/gcc/cgraph.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cgraph.cc	Sun Jun 22 22:32:19 2025
*************** cgraph_node::make_profile_local ()
*** 200,206 ****
  }
  
  /* Turn profile to global0.  Walk into inlined functions.
!    QUALITY must be GUESSED_GLOBAL0 or GUESSED_GLOBAL0_ADJUSTED  */
  void
  cgraph_node::make_profile_global0 (profile_quality quality)
  {
--- 200,207 ----
  }
  
  /* Turn profile to global0.  Walk into inlined functions.
!    QUALITY must be GUESSED_GLOBAL0, GUESSED_GLOBAL0_ADJUSTED
!    or GUESSED_GLOBAL0_AFDO  */
  void
  cgraph_node::make_profile_global0 (profile_quality quality)
  {
*************** cgraph_node::make_profile_global0 (profi
*** 219,224 ****
--- 220,233 ----
  	return;
        count = count.global0adjusted ();
      }
+   else if (quality == GUESSED_GLOBAL0_AFDO)
+     {
+       if (count.quality () == GUESSED_GLOBAL0
+ 	  || count.quality () == GUESSED_GLOBAL0_ADJUSTED
+ 	  || count.quality () == GUESSED_GLOBAL0_AFDO)
+ 	return;
+       count = count.global0afdo ();
+     }
    else
      gcc_unreachable ();
    for (cgraph_edge *e = callees; e; e = e->next_callee)
*************** cgraph_node::make_profile_global0 (profi
*** 231,236 ****
--- 240,247 ----
  	e->count = e->count.global0 ();
        else if (quality == GUESSED_GLOBAL0_ADJUSTED)
  	e->count = e->count.global0adjusted ();
+       else if (quality == GUESSED_GLOBAL0_AFDO)
+ 	e->count = e->count.global0afdo ();
        else
  	gcc_unreachable ();
      }
*************** cgraph_node::make_profile_global0 (profi
*** 241,246 ****
--- 252,259 ----
        e->count = e->count.global0 ();
      else if (quality == GUESSED_GLOBAL0_ADJUSTED)
        e->count = e->count.global0adjusted ();
+     else if (quality == GUESSED_GLOBAL0_AFDO)
+       e->count = e->count.global0afdo ();
      else
        gcc_unreachable ();
  }
*************** cgraph_node::make_profile_global0 (profi
*** 250,256 ****
  void
  cgraph_node::apply_scale (profile_count num, profile_count den)
  {
!   if (num == den)
      return;
  
    for (cgraph_edge *e = callees; e; e = e->next_callee)
--- 263,269 ----
  void
  cgraph_node::apply_scale (profile_count num, profile_count den)
  {
!   if (num == den && !(num == profile_count::zero ()))
      return;
  
    for (cgraph_edge *e = callees; e; e = e->next_callee)
*************** cgraph_node::verify_node (void)
*** 3762,3767 ****
--- 3775,3787 ----
  	  e->count.debug ();
  	  count.debug ();
  	  error_found = true;
+ 	}
+       if (inlined_to && !e->count.compatible_p (inlined_to->count))
+ 	{
+ 	  error ("edge count is not compatible with inlined to function count");
+ 	  e->count.debug ();
+ 	  count.debug ();
+ 	  error_found = true;
  	}
        if (!e->indirect_unknown_callee
  	  || !e->indirect_info)
diff -Nrcpad gcc-16-20250615/gcc/cobol/ChangeLog gcc-16-20250622/gcc/cobol/ChangeLog
*** gcc-16-20250615/gcc/cobol/ChangeLog	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/ChangeLog	Sun Jun 22 22:32:19 2025
***************
*** 1,3 ****
--- 1,366 ----
+ 2025-06-20  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/120621
+ 	* genapi.cc (parser_compile_ecs): Cast argument to unsigned long.
+ 	(parser_compile_dcls): Same.
+ 	(parser_division): RAII.
+ 	(inspect_tally): Cast argument to unsigned long.
+ 	* lexio.cc (cdftext::lex_open): Cast pid_t to long.
+ 	* parse.y: hard-code values for old versions of Bison, and message format.
+ 	* scan_ante.h (wait_for_the_child): Cast pid_t to long.
+ 
+ 2025-06-18  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/120621
+ 	* cbldiag.h (yyerror): Add diagnostic attributes.
+ 	(yywarn): Same.
+ 	(error_msg): Same.
+ 	(yyerrorvl): Same.
+ 	(cbl_unimplementedw): Same.
+ 	(cbl_unimplemented): Same.
+ 	(cbl_unimplemented_at): Same.
+ 	* cdf-copy.cc (copybook_elem_t::open_file): Supply string argument.
+ 	* cdf.y: Use %<%>.
+ 	* cobol-system.h (if): Check GCC_VERSION.
+ 	(ATTRIBUTE_GCOBOL_DIAG): Define.
+ 	* except.cc (cbl_enabled_exception_t::dump): Remove extra %s.
+ 	* genapi.cc (get_class_condition_string): Use acceptable message.
+ 	(get_bytes_needed): Same.
+ 	(move_tree): Same.
+ 	(get_string_from): Same.
+ 	(internal_perform_through): Same.
+ 	(tree_type_from_field_type): Same.
+ 	(is_valuable): Same.
+ 	(parser_logop): Same.
+ 	(parser_relop): Same.
+ 	(parser_relop_long): Same.
+ 	(parser_if): Same.
+ 	(parser_setop): Same.
+ 	(parser_perform_conditional): Same.
+ 	(parser_file_add): Same.
+ 	(parser_file_open): Same.
+ 	(parser_file_close): Same.
+ 	(parser_file_read): Same.
+ 	(parser_file_write): Same.
+ 	(inspect_replacing): Same.
+ 	(parser_sort): Same.
+ 	(parser_file_sort): Same.
+ 	(parser_file_merge): Same.
+ 	(create_and_call): Same.
+ 	(parser_bitop): Same.
+ 	(parser_bitwise_op): Same.
+ 	(hijack_for_development): Same.
+ 	(mh_source_is_literalN): Same.
+ 	(mh_dest_is_float): Same.
+ 	(parser_symbol_add): Same.
+ 	* gengen.cc (show_type): Use acceptable message.
+ 	(gg_find_field_in_struct): Same.
+ 	(gg_declare_variable): Same.
+ 	(gg_printf): Same.
+ 	(gg_fprintf): Same.
+ 	(gg_tack_on_function_parameters): Same.
+ 	(gg_define_function): Same.
+ 	(gg_get_function_decl): Same.
+ 	(gg_finalize_function): Same.
+ 	(gg_call_expr): Same.
+ 	(gg_call): Same.
+ 	(gg_insert_into_assembler): Define new function.
+ 	(gg_insert_into_assemblerf): Use gg_insert_into_assembler().
+ 	* gengen.h (gg_insert_into_assembler): Simpler function declaration.
+ 	(gg_insert_into_assemblerf): Declare new function.
+ 	* genmath.cc (parser_op): Use acceptable message.
+ 	* genutil.cc (get_binary_value): Use acceptable message.
+ 	* lexio.cc (parse_replacing_pair): Correct diagnostic arguments.
+ 	(preprocess_filter_add): Same.
+ 	(cdftext::open_input): Same.
+ 	* parse.y: Use acceptable messages.
+ 	* parse_ante.h (struct evaluate_elem_t): Use %<%>.
+ 	(is_callable): Same.
+ 	* parse_util.h (intrinsic_invalid_parameter): Use %qs.
+ 	* scan.l: Use dialect_error().
+ 	* scan_ante.h (numstr_of): Use %qs.
+ 	(scanner_token): Quote COBOL tokens in messages.
+ 	(scanner_parsing): Correct diagnostic message.
+ 	(scanner_parsing_toggle): Quote COBOL tokens in messages.
+ 	(scanner_parsing_pop): Same.
+ 	(typed_name): Use %qs.
+ 	* scan_post.h (prelex): Quote COBOL tokens in message.
+ 	* show_parse.h (CHECK_FIELD): Use acceptable message format.
+ 	(CHECK_LABEL): Same.
+ 	* symbols.cc (symbol_field_same_as): Remove extra spaces.
+ 	(cbl_alphabet_t::assign): Use %<%>.
+ 	(cbl_field_t::internalize): Quote library name in message.
+ 	* symbols.h (struct os_locale_t): Constify codeset.
+ 	(class temporaries_t): Add copy constructor.
+ 	(struct cbl_alphabet_t): Use acceptable message.
+ 	* util.cc (symbol_type_str): Use cbl_internal_error.
+ 	(cbl_field_type_str): Same.
+ 	(is_elementary): Same.
+ 	(cbl_field_t::report_invalid_initial_value): Use %qs.
+ 	(class unique_stack): Avoid %m.
+ 	(ydferror): Declare function with attributes.
+ 	(error_msg): Same.
+ 	(cobol_fileline_set): Use %<%>.
+ 	(os_locale_t): Remove use of xstrdup.
+ 	(cobol_parse_files): Quote C names in message.
+ 	(dialect_error): Use %<%>.
+ 	* util.h (cbl_message): Add attributes.
+ 	(cbl_internal_error): Same.
+ 	(cbl_err): Same.
+ 	(cbl_errx): Same.
+ 
+ 2025-06-16  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/120621
+ 	* Make-lang.in: Use STRICT_WARN.
+ 	* cbldiag.h (location_dump): suppress shadowVariable.
+ 	* cdf-copy.cc (esc): Fix shadowVariable.
+ 	(copybook_elem_t::open_file): Do not use %m.
+ 	* cdf.y: suppress invalidPrintfArgType for target format.
+ 	* cdfval.h (struct cdfval_t): Suppress noExplicitConstructor.
+ 	* cobol1.cc (cobol_name_mangler): Use C++ cast.
+ 	* copybook.h (class copybook_elem_t): Same.
+ 	* dts.h: Fixes and suppressions due to cppcheck.
+ 	* except.cc (cbl_enabled_exceptions_t::status): Suppress useStlAlgorithm.
+ 	(cbl_enabled_exceptions_t::turn_on_off): Const parameter.
+ 	(class choose_declarative): Removed.
+ 	* genapi.cc (struct called_tree_t): Explicit constructor.
+ 	(parser_compile_ecs): Cast to void * for %p.
+ 	(parser_compile_dcls): Same.
+ 	(parser_statement_begin): Same.
+ 	(initialize_variable_internal): Use std::vector for subscripts.
+ 	(parser_initialize): Constification.
+ 	(get_string_from): Same.
+ 	(combined_name): Same.
+ 	(parser_perform): Same.
+ 	(psa_FldLiteralN): Same.
+ 	(is_figconst): Const parameter.
+ 	(is_figconst_t): Same.
+ 	(parser_exit): Same.
+ 	(parser_division): Const pointer.
+ 	(parser_perform_conditional): Whitespace.
+ 	(parser_set_conditional88): Const parameter.
+ 	(inspect_tally): Use std::vector.
+ 	(inspect_replacing): Same.
+ 	(parser_inspect): Same.
+ 	(parser_intrinsic_subst): Use std::vector (constuct elements).
+ 	(parser_intrinsic_call_1): Use std::vector for subscripts.
+ 	(is_ascending_key): Const pointer.
+ 	(parser_sort): Use std::vector.
+ 	(parser_file_sort): Same.
+ 	(parser_file_merge): Same.
+ 	(parser_unstring): Same.
+ 	(parser_string): Same.
+ 	(parser_call): Const pointer.
+ 	(parser_program_hierarchy): Use std::vector.
+ 	(conditional_abs): Const paraemeter.
+ 	(float_type_of): Same.
+ 	(initial_from_initial): Set value, quoted or not.
+ 	(parser_symbol_add): Remove redundant nested test.
+ 	* genapi.h (parser_add): Const parameters.
+ 	(parser_subtract): Same.
+ 	(parser_multiply): Same.
+ 	(parser_divide): Same.
+ 	(parser_perform): Same.
+ 	(parser_exit): Same.
+ 	(parser_initialize): Same.
+ 	(parser_set_conditional88): Same.
+ 	(parser_sort): Same.
+ 	(parser_file_sort): Same.
+ 	(parser_file_merge): Same.
+ 	(parser_string): Same.
+ 	(is_ascending_key): Same.
+ 	* genmath.cc (arithmetic_operation): Use std::vector.
+ 	(is_somebody_float): Const parameter.
+ 	(all_results_binary): Const parameter.
+ 	(fast_multiply): Remove redundant nested test.
+ 	(parser_add): Const parameter.
+ 	(parser_multiply): Remove redundant nested test.
+ 	(parser_divide): Const parameter.
+ 	(parser_subtract): Same.
+ 	* genutil.cc (get_depending_on_value): Use std::vector.
+ 	(get_data_offset): Same.
+ 	(tree_type_from_field): Const parameter.
+ 	(refer_has_depends): Const pointers.
+ 	(get_literal_string): RAII.
+ 	(refer_is_clean): Use std::vector.
+ 	(get_time_nanoseconds): Newline at EOF.
+ 	* genutil.h (tree_type_from_field): Remove declaration.
+ 	* inspect.h (struct cbx_inspect_qual_t): Use std::vector.
+ 	(struct cbl_inspect_qual_t): Same.
+ 	(struct cbx_inspect_match_t): Same.
+ 	(class cbl_inspect_match_t): Same.
+ 	(struct cbx_inspect_replace_t): Same.
+ 	(struct cbl_inspect_replace_t): Same.
+ 	(struct cbx_inspect_oper_t): Same.
+ 	(struct cbl_inspect_oper_t): Same.
+ 	(struct cbx_inspect_t): Same.
+ 	(struct cbl_inspect_t): Same.
+ 	(parser_inspect): Same.
+ 	* lexio.cc (indicated): Const pointer.
+ 	(remove_inline_comment): Scope reduction.
+ 	(maybe_add_space): Const pointer.
+ 	(recognize_replacements): C++ cast.
+ 	(check_source_format_directive): Same.
+ 	(struct replacing_term_t): Explicit constructor.
+ 	(parse_replace_pairs): Const reference.
+ 	(location_in): Const reference.
+ 	(parse_copy_directive): C++ cast.
+ 	(parse_replace_last_off): Const parameter.
+ 	(parse_replace_text): Const reference.
+ 	(parse_replace_directive): C++ cast.
+ 	(cdftext::lex_open): Const reference.
+ 	(cdftext::open_output): Scope reduction.
+ 	(cdftext::free_form_reference_format): Remove unused variable.
+ 	(cdftext::process_file): Simplify.
+ 	* lexio.h (struct bytespan_t): Use nullptr.
+ 	(struct filespan_t): Initialize icol in constructor.
+ 	(struct span_t): Suppress confused operatorEqRetRefThis.
+ 	(struct replace_t): Eliminate single-value constructor.
+ 	* parse.y: Many const cppcheck reports, and portable bit-shift.
+ 	* parse_ante.h (reject_refmod): Const parameter.
+ 	(require_pointer): Same.
+ 	(require_integer): Same.
+ 	(struct evaluate_elem_t): Explicit constructor.
+ 	(struct arith_t): Use std::vector.
+ 	(class eval_subject_t): Const parameter.
+ 	(dump_inspect_match): Declare.
+ 	(struct perform_t): Explicit constructor.
+ 	(list_add):  Const parameter.
+ 	(class tokenset_t): Avoid negative array index.
+ 	(struct file_list_t): Explicit constructor.
+ 	(struct field_list_t): Same.
+ 	(struct refer_list_t): Same.
+ 	(struct refer_marked_list_t): Const parameter.
+ 	(struct refer_collection_t): Explicit constructor.
+ 	(struct ast_inspect_oper_t): Remove class.
+ 	(ast_inspect_oper_t): Same.
+ 	(struct ast_inspect_t): Same.
+ 	(struct ast_inspect_list_t): Same.
+ 	(ast_inspect): Add location.
+ 	(struct elem_list_t): Explicit constructor.
+ 	(struct unstring_tgt_t): Same.
+ 	(struct unstring_tgt_list_t): Same.
+ 	(struct unstring_into_t): Same.
+ 	(struct ffi_args_t): Same.
+ 	(struct file_sort_io_t): Same.
+ 	(merge_t): Same.
+ 	(struct vargs_t): Same.
+ 	(class prog_descr_t): Eliminate single-value constructor.
+ 	(class program_stack_t): Suppress useStlAlgorithm.
+ 	(struct rel_part_t): Eliminate single-value constructor.
+ 	(class log_expr_t): Explicit constructor.
+ 	(add_debugging_declarative): Rename local variable.
+ 	(intrinsic_call_2): Const parameter.
+ 	(invalid_key): Use std::find_if.
+ 	(parser_add2): Const parameter.
+ 	(parser_subtract2): Same.
+ 	(stringify): Same.
+ 	(unstringify): Same.
+ 	(anybody_redefines): Same.
+ 	(ast_call): Same.
+ 	* parse_util.h (class cname_cmp): Explicit constructor.
+ 	(intrinsic_inconsistent_parameter): Same.
+ 	* scan_ante.h (struct cdf_status_t): Eliminate single-value constructor.
+ 	(class enter_leave_t): Explicit constructor.
+ 	(update_location): Const pointer, explicit constructor.
+ 	(symbol_function_token): Const pointer.
+ 	(typed_name): Same.
+ 	* scan_post.h (datetime_format_of): Scope reduction.
+ 	* show_parse.h (class ANALYZE): Use std::vector, explicit consstructor.
+ 	* symbols.cc (symbol_table_extend): Scope reduction.
+ 	(cbl_ffi_arg_t::cbl_ffi_arg_t): Define default constructor.
+ 	(end_of_group): Const pointer.
+ 	(symbol_find_odo): Const parameter.
+ 	(rename_not_ok): Same.
+ 	(field_str): Use %u instead of %d.
+ 	(struct capacity_of): Const pointer.
+ 	(symbols_update): Same.
+ 	(symbol_field_parent_set): Same.
+ 	(symbol_file_add): Same.
+ 	(symbol_typedef_add): Same.
+ 	(symbol_field_add): Use new operator=().
+ 	(symbol_field): Suppress CastIntegerToAddressAtReturn.
+ 	(symbol_register): Same.
+ 	(symbol_file): Suppress knownConditionTrueFalse.
+ 	(next_program): Const parameter.
+ 	(symbol_file_record): Same.
+ 	(class is_section): Explicit constructor.
+ 	(cbl_file_t::no_key): Remove.
+ 	(cbl_prog_hier_t::cbl_prog_hier_t): Use std::vector.
+ 	(symbol_label_add): Assert pointer is not NULL.
+ 	(symbol_label_section_exists): Const reference in lambda.
+ 	(expand_picture): Use C++ cast.
+ 	(symbol_program_callables): Const pointer.
+ 	(symbol_currency_add): Suppress nullPointerRedundantCheck.
+ 	(cbl_key_t): Use std::vector.
+ 	(cbl_occurs_t::field_add): Const parameter.
+ 	(cbl_occurs_t::index_add): Explicit constructor.
+ 	(class is_field_at): Same.
+ 	(cbl_file_key_t::deforward): Scope reduction.
+ 	(cbl_file_t::keys_str): Use allocated memory only.
+ 	(file_status_status_of): Const pointer.
+ 	(is_register_field): Const parameter.
+ 	* symbols.h (struct cbl_field_data_t): Eliminate single-value constructor.
+ 	(struct cbl_occurs_bounds_t): Same.
+ 	(struct cbl_refer_t): Use std::vector.
+ 	(valid_move): Const parameter.
+ 	(is_register_field): Same.
+ 	(struct cbl_key_t): Use std::vector.
+ 	(struct cbl_substitute_t): Eliminate single-value constructor.
+ 	(refer_of): Return const reference
+ 	(struct cbl_ffi_arg_t): Eliminate single-value constructor.
+ 	(class temporaries_t): Same.
+ 	(struct cbl_file_key_t): Define default constructor.
+ 	(struct cbl_file_lock_t): Define copy constructor and operator=().
+ 	(struct cbl_file_t): Complete default constructor.
+ 	(struct symbol_elem_t): Explicit constructor.
+ 	(symbol_elem_of): Suppress cstyleCast.
+ 	(symbol_redefines): Const parameter.
+ 	(struct cbl_field_t): Same.
+ 	(cbl_section_of): Test for NULL pointer.
+ 	(cbl_field_of): Same.
+ 	(cbl_label_of): Same.
+ 	(cbl_special_name_of): Same.
+ 	(cbl_alphabet_of): Same.
+ 	(cbl_file_of): Same.
+ 	(is_figconst): Delete extra "struct" keyword.
+ 	(is_figconst_low): Same.
+ 	(is_figconst_zero): Same.
+ 	(is_figconst_space): Same.
+ 	(is_figconst_quote): Same.
+ 	(is_figconst_high): Same.
+ 	(is_space_value): Same.
+ 	(is_quoted): Same.
+ 	(symbol_index): Const parameter.
+ 	(struct cbl_prog_hier_t): Suppress noExplicitConstructor.
+ 	(struct cbl_perform_vary_t): Eliminate single-value constructor.
+ 	(is_signable): Const parameter.
+ 	(is_temporary): Same.
+ 	(rename_not_ok): Same.
+ 	(field_at): Test for NULL pointer.
+ 	(class procref_base_t): Eliminate single-value constructor.
+ 	* symfind.cc (is_data_field): Const pointer.
+ 	(finalize_symbol_map2): Same.
+ 	(class in_scope): Same.
+ 	(symbol_match2): Same.
+ 	* token_names.h: Suppress useInitializationList.
+ 	* util.cc (normalize_picture): Whitespace and remove extra "continue".
+ 	(redefine_field): Const pointer.
+ 	(cbl_field_t::report_invalid_initial_value): Same.
+ 	(literal_subscript_oob): Rename shadow variable.
+ 	(cbl_refer_t::subscripts_set): Use std::vector.
+ 	(cbl_refer_t::str): Same.
+ 	(cbl_refer_t::deref_str): Same.
+ 	(locally_unique): Use explicit constructor.
+ 	(ambiguous_reference): Same.
+ 	(class unique_stack): Use const reference.
+ 	(cobol_filename): Const pointer.
+ 	(verify_format): Scope reduction.
+ 	(class temp_loc_t): Do not derive from YYLTYPE.
+ 	(cobol_parse_files): Const pointer.
+ 	* util.h (as_voidp): Define convenient converter.
+ 
  2025-06-10  James K. Lowden  <jklowden@cobolworx.com>
  
  	* Make-lang.in: cobol.clean does not remove libgcobol files.
diff -Nrcpad gcc-16-20250615/gcc/cobol/Make-lang.in gcc-16-20250622/gcc/cobol/Make-lang.in
*** gcc-16-20250615/gcc/cobol/Make-lang.in	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/Make-lang.in	Sun Jun 22 22:32:19 2025
***************
*** 34,39 ****
--- 34,42 ----
  # - the compiler proper (eg: cc1plus)
  # - define the names for selecting the language in LANGUAGES.
  
+ # Use strict warnings for this front end.
+ cobol-warn = $(STRICT_WARN)
+ 
  GCOBOL_INSTALL_NAME := $(shell echo gcobol|sed '$(program_transform_name)')
  GCOBOLIO_INSTALL_NAME := $(shell echo gcobol-io|sed '$(program_transform_name)')
  GCOBOL_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcobol|sed '$(program_transform_name)')
diff -Nrcpad gcc-16-20250615/gcc/cobol/cbldiag.h gcc-16-20250622/gcc/cobol/cbldiag.h
*** gcc-16-20250615/gcc/cobol/cbldiag.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/cbldiag.h	Sun Jun 22 22:32:19 2025
*************** const char * cobol_filename();
*** 45,52 ****
   *  These are user-facing messages.  They go through the gcc
   *  diagnostic framework and use text that can be localized.
   */
! void yyerror( const char fmt[], ... );
! bool yywarn( const char fmt[], ... );
  
  /* Location type.  Borrowed from parse.h as generated by Bison. */
  #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
--- 45,52 ----
   *  These are user-facing messages.  They go through the gcc
   *  diagnostic framework and use text that can be localized.
   */
! void yyerror( const char fmt[], ... ) ATTRIBUTE_GCOBOL_DIAG(1, 2);
! bool yywarn( const char fmt[], ... ) ATTRIBUTE_GCOBOL_DIAG(1, 2);
  
  /* Location type.  Borrowed from parse.h as generated by Bison. */
  #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
*************** struct YDFLTYPE
*** 79,96 ****
  #endif
  
  // an error at a location, called from the parser for semantic errors
! void error_msg( const YYLTYPE& loc, const char gmsgid[], ... );
  
  void dialect_error( const YYLTYPE& loc, const char term[], const char dialect[] );
  
  
  // for CDF and other warnings that refer back to an earlier line
  // (not in diagnostic framework yet)
! void yyerrorvl( int line, const char *filename, const char fmt[], ... );
  
! void cbl_unimplementedw(const char *gmsgid, ...); // warning
! void cbl_unimplemented(const char *gmsgid, ...);  // error
! void cbl_unimplemented_at( const  YYLTYPE& loc, const char *gmsgid, ... );
  
  /*
   * dbgmsg produce messages not intended for the user.  They cannot be localized
--- 79,99 ----
  #endif
  
  // an error at a location, called from the parser for semantic errors
! void error_msg( const YYLTYPE& loc, const char gmsgid[], ... )
!   ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  void dialect_error( const YYLTYPE& loc, const char term[], const char dialect[] );
  
  
  // for CDF and other warnings that refer back to an earlier line
  // (not in diagnostic framework yet)
! void yyerrorvl( int line, const char *filename, const char fmt[], ... )
!   ATTRIBUTE_PRINTF_3;
  
! void cbl_unimplementedw(const char *gmsgid, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2); // warning
! void cbl_unimplemented(const char *gmsgid, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);  // error
! void cbl_unimplemented_at( const  YYLTYPE& loc, const char *gmsgid, ... )
!   ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  /*
   * dbgmsg produce messages not intended for the user.  They cannot be localized
*************** void gcc_location_set( const YYLTYPE& lo
*** 106,112 ****
  template <typename LOC>
  static void
  location_dump( const char func[], int line, const char tag[], const LOC& loc) {
!   extern int yy_flex_debug;
    if( yy_flex_debug && gcobol_getenv("update_location") )
      fprintf(stderr, "%s:%d: %s location (%d,%d) to (%d,%d)\n",
              func, line, tag,
--- 109,115 ----
  template <typename LOC>
  static void
  location_dump( const char func[], int line, const char tag[], const LOC& loc) {
!   extern int yy_flex_debug; // cppcheck-suppress shadowVariable
    if( yy_flex_debug && gcobol_getenv("update_location") )
      fprintf(stderr, "%s:%d: %s location (%d,%d) to (%d,%d)\n",
              func, line, tag,
diff -Nrcpad gcc-16-20250615/gcc/cobol/cdf-copy.cc gcc-16-20250622/gcc/cobol/cdf-copy.cc
*** gcc-16-20250615/gcc/cobol/cdf-copy.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/cdf-copy.cc	Sun Jun 22 22:32:19 2025
*************** verify_bounds( size_t pos, size_t size,
*** 124,136 ****
   */
  const char *
  esc( size_t len, const char input[] ) {
!   static char spaces[] = "([,;]?[[:space:]])+";
!   static char spaceD[] = "(\n {6}D" "|" "[,;]?[[:space:]])+";
    static char buffer[64 * 1024];
    char *p = buffer;
    const char *eoinput = input + len;
  
!   const char *spacex = is_reference_format()? spaceD : spaces;
  
    for( const char *s=input; *s && s < eoinput; s++ ) {
      *p = '\0';
--- 124,136 ----
   */
  const char *
  esc( size_t len, const char input[] ) {
!   static const char space[]  = "([,;]?[[:space:]])+";
!   static const char spaceD[] = "(\n {6}D" "|" "[,;]?[[:space:]])+";
    static char buffer[64 * 1024];
    char *p = buffer;
    const char *eoinput = input + len;
  
!   const char *spacex = is_reference_format()? spaceD : space;
  
    for( const char *s=input; *s && s < eoinput; s++ ) {
      *p = '\0';
*************** copybook_elem_t::open_file( const char d
*** 279,285 ****
      dbgmsg("copybook_elem_t::open_file: trying %s", path);
  
      if( (this->fd = open(path, O_RDONLY)) == -1 ) {
!       dbgmsg("could not open %s: %m", path);
        return fd;
      }
      this->source.name = path;
--- 279,285 ----
      dbgmsg("copybook_elem_t::open_file: trying %s", path);
  
      if( (this->fd = open(path, O_RDONLY)) == -1 ) {
!       dbgmsg("could not open %s: %s", path, xstrerror(errno));
        return fd;
      }
      this->source.name = path;
*************** copybook_elem_t::open_file( const char d
*** 304,310 ****
        dbgmsg("found copybook file %s", filename);
        this->source.name = xstrdup(filename);
        if( ! cobol_filename(this->source.name, inode_of(fd)) ) {
!         error_msg(source.loc, "recursive copybook: '%s' includes itself", this->source);
          (void)! close(fd);
          fd = -1;
        }
--- 304,311 ----
        dbgmsg("found copybook file %s", filename);
        this->source.name = xstrdup(filename);
        if( ! cobol_filename(this->source.name, inode_of(fd)) ) {
!         error_msg(source.loc, "recursive copybook: '%s' includes itself",
!                   this->source.name);
          (void)! close(fd);
          fd = -1;
        }
diff -Nrcpad gcc-16-20250615/gcc/cobol/cdf.y gcc-16-20250622/gcc/cobol/cdf.y
*** gcc-16-20250615/gcc/cobol/cdf.y	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/cdf.y	Sun Jun 22 22:32:19 2025
*************** apply_cdf_turn( const exception_turn_t&
*** 185,190 ****
--- 185,191 ----
  %printer { fprintf(yyo, "%s '%s'",
  		   keyword_str($$.token),
  		   $$.string? $$.string : "<nil>" ); } <cdfarg>
+ /* cppcheck-suppress invalidPrintfArgType_sint */
  %printer { fprintf(yyo, HOST_SIZE_T_PRINT_DEC " '%s'",
  		   (fmt_size_t)$$.number, $$.string? $$.string : "" ); } <cdfval>
  
*************** top:		partials { YYACCEPT; }
*** 262,268 ****
  		  YYACCEPT;
  		}
  	|	copy error {
! 		  error_msg(@error, "COPY directive must end in a '.'");
  		  YYABORT;
  		}
  	|	completes { YYACCEPT; }
--- 263,269 ----
  		  YYACCEPT;
  		}
  	|	copy error {
! 		  error_msg(@error, "COPY directive must end in a %<.%>");
  		  YYABORT;
  		}
  	|	completes { YYACCEPT; }
*************** cdf_define:	CDF_DEFINE cdf_constant NAME
*** 364,376 ****
  	|	CDF_DEFINE FEATURE as ON {
  		  auto feature = cbl_gcobol_feature_t($2);
  		  if( ! cobol_gcobol_feature_set(feature, true) ) {
! 		    error_msg(@FEATURE, ">>DEFINE %EBCDIC-MODE is invalid within program body");
  		  }
  		}
  	|	CDF_DEFINE FEATURE as OFF {
  		  auto feature = cbl_gcobol_feature_t($2);
  		  if( ! cobol_gcobol_feature_set(feature, false) ) {
! 		    error_msg(@FEATURE, ">>DEFINE %EBCDIC-MODE is invalid within program body");
  		  }
  		}
  		;
--- 365,379 ----
  	|	CDF_DEFINE FEATURE as ON {
  		  auto feature = cbl_gcobol_feature_t($2);
  		  if( ! cobol_gcobol_feature_set(feature, true) ) {
! 		    error_msg(@FEATURE,
!                               "%<>>DEFINE %%EBCDIC-MODE%> is invalid within program body");
  		  }
  		}
  	|	CDF_DEFINE FEATURE as OFF {
  		  auto feature = cbl_gcobol_feature_t($2);
  		  if( ! cobol_gcobol_feature_set(feature, false) ) {
! 		    error_msg(@FEATURE,
!                               "%<>>DEFINE %%EBCDIC-MODE%> is invalid within program body");
  		  }
  		}
  		;
*************** filenames:      filename {
*** 429,435 ****
  		  auto inserted = $$->insert(symbol_index(symbol_elem_of($2)));
  		  if( ! inserted.second ) {
  		    error_msg(@2, "%s: No file-name shall be specified more than "
! 			      " once for one exception condition", $filename->name);
  		  }
  		}
                  ;
--- 432,438 ----
  		  auto inserted = $$->insert(symbol_index(symbol_elem_of($2)));
  		  if( ! inserted.second ) {
  		    error_msg(@2, "%s: No file-name shall be specified more than "
! 			      "once for one exception condition", $filename->name);
  		  }
  		}
                  ;
*************** cdf_relexpr:	cdf_relexpr '<' cdf_expr {
*** 516,522 ****
  		    const char *msg = $1.string?
  		      "incommensurate comparison is FALSE: '%s' = %ld" :
  		      "incommensurate comparison is FALSE: %ld = '%s'" ;
! 		    error_msg(@1, msg);
  		  }
  		}
  	|	cdf_relexpr NE cdf_expr
--- 519,525 ----
  		    const char *msg = $1.string?
  		      "incommensurate comparison is FALSE: '%s' = %ld" :
  		      "incommensurate comparison is FALSE: %ld = '%s'" ;
! 		    error_msg(@1, "%s", msg);
  		  }
  		}
  	|	cdf_relexpr NE cdf_expr
*************** cdf_relexpr:	cdf_relexpr '<' cdf_expr {
*** 530,536 ****
  		    const char *msg = $1.string?
  		      "incommensurate comparison is FALSE: '%s' = %ld" :
  		      "incommensurate comparison is FALSE: %ld = '%s'" ;
! 		    error_msg(@1, msg);
  		  }
  		}
  	|	cdf_relexpr GE  cdf_expr { $$ = $1(@1) >= $3(@3); }
--- 533,539 ----
  		    const char *msg = $1.string?
  		      "incommensurate comparison is FALSE: '%s' = %ld" :
  		      "incommensurate comparison is FALSE: %ld = '%s'" ;
! 		    error_msg(@1, "%s", msg);
  		  }
  		}
  	|	cdf_relexpr GE  cdf_expr { $$ = $1(@1) >= $3(@3); }
*************** cdf_factor:     NAME {
*** 566,572 ****
  	| 	NUMSTR {
  		  auto value = integer_literal($NUMSTR);
  		  if( !value.second ) {
! 		    error_msg(@1, "CDF error: parsed %s as %ld",
  		             $NUMSTR, value.first);
  		    YYERROR;
  		  }
--- 569,575 ----
  	| 	NUMSTR {
  		  auto value = integer_literal($NUMSTR);
  		  if( !value.second ) {
! 		    error_msg(@1, "CDF error: parsed %qs as %lld",
  		             $NUMSTR, value.first);
  		    YYERROR;
  		  }
*************** copybook_name: 	COPY name_one[src]
*** 592,598 ****
  		  copybook.library(@lib, $lib.string);
  		  if( -1 == copybook.open(@src, $src.string) ) {
  		    error_msg(@src, "could not open copybook file "
! 		             "for '%s' in '%'s'", $src.string, $lib.string);
  		    YYABORT;
  		  }
  		}
--- 595,601 ----
  		  copybook.library(@lib, $lib.string);
  		  if( -1 == copybook.open(@src, $src.string) ) {
  		    error_msg(@src, "could not open copybook file "
! 		             "for %<%s%> in %<%s%>", $src.string, $lib.string);
  		    YYABORT;
  		  }
  		}
*************** verify_integer( const YDFLTYPE& loc, con
*** 891,899 ****
    return true;
  }
  
- // cppcheck-suppress returnTempReference
  const cdfval_base_t&
  cdfval_base_t::operator()( const YDFLTYPE& loc ) {
    static cdfval_t zero(0);
    return verify_integer(loc, *this) ? *this : zero;
  }
--- 894,902 ----
    return true;
  }
  
  const cdfval_base_t&
  cdfval_base_t::operator()( const YDFLTYPE& loc ) {
    static cdfval_t zero(0);
+   // cppcheck-suppress returnTempReference
    return verify_integer(loc, *this) ? *this : zero;
  }
diff -Nrcpad gcc-16-20250615/gcc/cobol/cdfval.h gcc-16-20250622/gcc/cobol/cdfval.h
*** gcc-16-20250615/gcc/cobol/cdfval.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/cdfval.h	Sun Jun 22 22:32:19 2025
*************** struct cdfval_t : public cdfval_base_t {
*** 73,100 ****
      cdfval_base_t::string = NULL;
      cdfval_base_t::number = 0;
    }
!   cdfval_t( const char value[] )
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
      cdfval_base_t::string = value;
      cdfval_base_t::number = 0;
    }
!   cdfval_t( long long value )
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
      cdfval_base_t::string = NULL;
      cdfval_base_t::number = value;
    }
!   cdfval_t( long value )
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
      cdfval_base_t::string = NULL;
      cdfval_base_t::number = value;
    }
!   cdfval_t( int value )
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
--- 73,100 ----
      cdfval_base_t::string = NULL;
      cdfval_base_t::number = 0;
    }
!   cdfval_t( const char value[] ) // cppcheck-suppress noExplicitConstructor
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
      cdfval_base_t::string = value;
      cdfval_base_t::number = 0;
    }
!   cdfval_t( long long value ) // cppcheck-suppress noExplicitConstructor
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
      cdfval_base_t::string = NULL;
      cdfval_base_t::number = value;
    }
!   cdfval_t( long value ) // cppcheck-suppress noExplicitConstructor
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
      cdfval_base_t::string = NULL;
      cdfval_base_t::number = value;
    }
!   cdfval_t( int value ) // cppcheck-suppress noExplicitConstructor
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t::off  = false;
*************** struct cdfval_t : public cdfval_base_t {
*** 109,115 ****
      HOST_WIDE_INT value = real_to_integer(&r);
      cdfval_base_t::number = value;
    }
!   cdfval_t( const cdfval_base_t& value )
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t *self(this);
--- 109,115 ----
      HOST_WIDE_INT value = real_to_integer(&r);
      cdfval_base_t::number = value;
    }
!   cdfval_t( const cdfval_base_t& value ) // cppcheck-suppress noExplicitConstructor
      : lineno(yylineno), filename(cobol_filename())
    {
      cdfval_base_t *self(this);
diff -Nrcpad gcc-16-20250615/gcc/cobol/cobol-system.h gcc-16-20250622/gcc/cobol/cobol-system.h
*** gcc-16-20250615/gcc/cobol/cobol-system.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/cobol-system.h	Sun Jun 22 22:32:19 2025
***************
*** 60,63 ****
--- 60,69 ----
  // The following "local" #include is part of the GCC core code
  #include "system.h"
  
+ #if (CHECKING_P && GCC_VERSION >= 4001) || GCC_VERSION == BUILDING_GCC_VERSION
+ #define ATTRIBUTE_GCOBOL_DIAG(m, n) __attribute__ ((__format__ (__gcc_tdiag__, m, n))) ATTRIBUTE_NONNULL(m)
+ #else
+ #define ATTRIBUTE_GCOBOL_DIAG(m, n) ATTRIBUTE_NONNULL(m)
+ #endif
+ 
  #endif
diff -Nrcpad gcc-16-20250615/gcc/cobol/cobol1.cc gcc-16-20250622/gcc/cobol/cobol1.cc
*** gcc-16-20250615/gcc/cobol/cobol1.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/cobol1.cc	Sun Jun 22 22:32:19 2025
*************** cobol_name_mangler(const char *cobol_nam
*** 571,577 ****
        }
  
      // Allocate enough space for a prepended underscore and a final '\0'
!     char *cobol_name = (char *)xmalloc(strlen(cobol_name_)+2);
      size_t n = 0;
      if( cobol_name_[0] >= '0' && cobol_name_[0] <= '9' )
        {
--- 571,577 ----
        }
  
      // Allocate enough space for a prepended underscore and a final '\0'
!     char *cobol_name = static_cast<char *>(xmalloc(strlen(cobol_name_)+2));
      size_t n = 0;
      if( cobol_name_[0] >= '0' && cobol_name_[0] <= '9' )
        {
diff -Nrcpad gcc-16-20250615/gcc/cobol/copybook.h gcc-16-20250622/gcc/cobol/copybook.h
*** gcc-16-20250615/gcc/cobol/copybook.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/copybook.h	Sun Jun 22 22:32:19 2025
*************** class copybook_elem_t {
*** 100,106 ****
    }
    static char * dequote( const char orig[] ) {
      gcc_assert(quoted(orig));
!     auto name = (char*)xcalloc(1, strlen(orig));
      gcc_assert(name);
      char *tgt = name;
  
--- 100,106 ----
    }
    static char * dequote( const char orig[] ) {
      gcc_assert(quoted(orig));
!     auto name = static_cast<char*>(xcalloc(1, strlen(orig)));
      gcc_assert(name);
      char *tgt = name;
  
diff -Nrcpad gcc-16-20250615/gcc/cobol/dts.h gcc-16-20250622/gcc/cobol/dts.h
*** gcc-16-20250615/gcc/cobol/dts.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/dts.h	Sun Jun 22 22:32:19 2025
*************** namespace dts {
*** 35,47 ****
      {
        static regmatch_t empty;
        empty.rm_so = empty.rm_eo = -1;
!       regmatch_t& self(*this);
        self = empty;
      }
      csub_match( const char input[], const regmatch_t& m )
        : input(input)
      {
!       regmatch_t& self(*this);
        self = m;
        matched = rm_so != -1;
        first =   rm_so == -1? NULL : input + rm_so;
--- 35,47 ----
      {
        static regmatch_t empty;
        empty.rm_so = empty.rm_eo = -1;
!       regmatch_t& self(*this); // cppcheck-suppress constVariableReference
        self = empty;
      }
      csub_match( const char input[], const regmatch_t& m )
        : input(input)
      {
!       regmatch_t& self(*this); // cppcheck-suppress constVariableReference
        self = m;
        matched = rm_so != -1;
        first =   rm_so == -1? NULL : input + rm_so;
*************** namespace dts {
*** 68,74 ****
  #if __cpp_exceptions
          throw std::logic_error(msg);
  #else
-         pattern = NULL;
          cbl_errx("%s", msg);
  #endif
        }
--- 68,73 ----
*************** namespace dts {
*** 78,84 ****
      size_t size() const { return nsubexpr; }
      bool ready() const { return pattern != NULL; }
    private:
!     regex( const regex& ) {}
    };
  
    inline bool regex_search( const char input[], const char *eoinput,
--- 77,83 ----
      size_t size() const { return nsubexpr; }
      bool ready() const { return pattern != NULL; }
    private:
!     regex( const regex& ) = default;
    };
  
    inline bool regex_search( const char input[], const char *eoinput,
*************** namespace dts {
*** 88,97 ****
        static const char msg[] = "input not NUL-terminated";
        throw std::domain_error( msg );
  #else
!       eoinput = strchr(input, '\0');
  #endif
      }
-     if( eoinput == NULL ) eoinput = strchr(input, '\0');
      auto ncm = re.size();
      cm.resize(ncm);
      std::vector <regmatch_t> cms(ncm);
--- 87,96 ----
        static const char msg[] = "input not NUL-terminated";
        throw std::domain_error( msg );
  #else
!       // eoinput terminates input
!       eoinput = strchr(input, '\0'); // cppcheck-suppress uselessAssignmentPtrArg
  #endif
      }
      auto ncm = re.size();
      cm.resize(ncm);
      std::vector <regmatch_t> cms(ncm);
diff -Nrcpad gcc-16-20250615/gcc/cobol/except.cc gcc-16-20250622/gcc/cobol/except.cc
*** gcc-16-20250615/gcc/cobol/except.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/except.cc	Sun Jun 22 22:32:19 2025
*************** ec_level( ec_type_t ec ) {
*** 77,83 ****
  
  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),
--- 77,83 ----
  
  void
  cbl_enabled_exception_t::dump( int i ) const {
!   cbl_message(2, "cbl_enabled_exception_t: %2d  {%s, %s, %zu}",
                i,
                location? "location" : "    none",
                ec_type_str(ec),
*************** cbl_enabled_exceptions_t::dump() const {
*** 108,121 ****
    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 {
--- 108,123 ----
    std::swap(debug, yydebug);
  }
  
+ // cppcheck-suppress-begin [useStlAlgorithm] because why?
  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;
  }
+ // cppcheck-suppress-end useStlAlgorithm
  
  std::vector<uint64_t>
  cbl_enabled_exceptions_t::encode() const {
*************** void
*** 133,145 ****
  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);
--- 135,147 ----
  cbl_enabled_exceptions_t::turn_on_off( bool enabled,
                                         bool location,
                                         ec_type_t type,
!                                        const 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:
!     explicit 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);
*************** cbl_enabled_exceptions_t::match( ec_type
*** 244,259 ****
    return output != end()? &*output : NULL;
  }
  
- class choose_declarative {
-   size_t program;
-  public:
-   choose_declarative( size_t program ) : program(program) {}
- 
-   bool operator()( const cbl_declarative_t& dcl ) {
-     return dcl.global || program == symbol_at(dcl.section)->program;
-   }
- };
- 
  bool
  sort_supers_last( const cbl_declarative_t& a, const cbl_declarative_t& b ) {
    if( symbol_at(a.section)->program == symbol_at(b.section)->program ) {
--- 246,251 ----
diff -Nrcpad gcc-16-20250615/gcc/cobol/genapi.cc gcc-16-20250622/gcc/cobol/genapi.cc
*** gcc-16-20250615/gcc/cobol/genapi.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/genapi.cc	Sun Jun 22 22:32:19 2025
*************** get_class_condition_string(cbl_field_t *
*** 571,577 ****
        {
        if( strlen(ach) > sizeof(ach) - 1000  )
          {
!         cbl_internal_error("Nice try, but you can't fire me. I quit!");
          }
  
        // We are working with unquoted strings that contain the values 1 through
--- 571,577 ----
        {
        if( strlen(ach) > sizeof(ach) - 1000  )
          {
!         cbl_internal_error("Nice try, but you cannot fire me.");
          }
  
        // We are working with unquoted strings that contain the values 1 through
*************** struct called_tree_t {
*** 694,700 ****
      tree node;
  
     public:
!     match_tree( tree node ) : node(node) {}
      bool operator()( const called_tree_t& that ) const {
        return this->node == that.node;
      }
--- 694,700 ----
      tree node;
  
     public:
!     explicit match_tree( tree node ) : node(node) {}
      bool operator()( const called_tree_t& that ) const {
        return this->node == that.node;
      }
*************** parser_compile_ecs( const std::vector<ui
*** 957,963 ****
      {
      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
      }
--- 957,964 ----
      {
      SHOW_PARSE_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %lu; retval is %p",
!              gb4(ecs.size()), as_voidp(retval));
      SHOW_PARSE_TEXT(ach)
      SHOW_PARSE_END
      }
*************** parser_compile_ecs( const std::vector<ui
*** 965,971 ****
      {
      TRACE1_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", ecs.size(), retval);
      TRACE1_TEXT_ABC("", ach, "");
      TRACE1_END
      }
--- 966,973 ----
      {
      TRACE1_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %lu; retval is %p",
!              gb4(ecs.size()), as_voidp(retval));
      TRACE1_TEXT_ABC("", ach, "");
      TRACE1_END
      }
*************** parser_compile_dcls( const std::vector<u
*** 1004,1010 ****
      {
      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
      }
--- 1006,1013 ----
      {
      SHOW_PARSE_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %lu; retval is %p",
!              gb4(dcls.size()), as_voidp(retval));
      SHOW_PARSE_TEXT(ach);
      SHOW_PARSE_END
      }
*************** parser_compile_dcls( const std::vector<u
*** 1012,1018 ****
      {
      TRACE1_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", dcls.size(), retval);
      TRACE1_TEXT_ABC("", ach, "");
      TRACE1_END
      }
--- 1015,1022 ----
      {
      TRACE1_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " Size is %lu; retval is %p",
!              gb4(dcls.size()), as_voidp(retval));
      TRACE1_TEXT_ABC("", ach, "");
      TRACE1_END
      }
*************** parser_statement_begin( const cbl_name_t
*** 1091,1097 ****
        {
        SHOW_PARSE_INDENT
        snprintf( ach, sizeof(ach),
!                 "Sending ecs/dcls %p / %p", ecs, dcls);
        SHOW_PARSE_TEXT(ach);
        }
      SHOW_PARSE_END
--- 1095,1101 ----
        {
        SHOW_PARSE_INDENT
        snprintf( ach, sizeof(ach),
!                 "Sending ecs/dcls %p / %p", as_voidp(ecs), as_voidp(dcls));
        SHOW_PARSE_TEXT(ach);
        }
      SHOW_PARSE_END
*************** parser_statement_begin( const cbl_name_t
*** 1100,1106 ****
      {
      TRACE1_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " ecs/dcls %p / %p", ecs, dcls);
      TRACE1_TEXT_ABC("", ach, "");
      TRACE1_END
      }
--- 1104,1110 ----
      {
      TRACE1_HEADER
      char ach[64];
!     snprintf(ach, sizeof(ach), " ecs/dcls %p / %p", as_voidp(ecs), as_voidp(dcls));
      TRACE1_TEXT_ABC("", ach, "");
      TRACE1_END
      }
*************** initialize_variable_internal( cbl_refer_
*** 1315,1321 ****
  
    bool is_redefined = false;
  
!   cbl_field_t *family_tree = parsed_var;
    while(family_tree)
      {
      if( symbol_redefines(family_tree) )
--- 1319,1325 ----
  
    bool is_redefined = false;
  
!   const cbl_field_t *family_tree = parsed_var;
    while(family_tree)
      {
      if( symbol_redefines(family_tree) )
*************** initialize_variable_internal( cbl_refer_
*** 1336,1342 ****
    if( parsed_var->data.initial )
      {
      bool a_parent_initialized = false;
!     cbl_field_t *parent = parent_of(parsed_var);
      while( parent )
        {
        if( parent->attr & has_value_e )
--- 1340,1346 ----
    if( parsed_var->data.initial )
      {
      bool a_parent_initialized = false;
!     const cbl_field_t *parent = parent_of(parsed_var);
      while( parent )
        {
        if( parent->attr & has_value_e )
*************** initialize_variable_internal( cbl_refer_
*** 1366,1372 ****
    flag_bits     |=  wsclear()
                      ? DEFAULTBYTE_BIT + (*wsclear() & DEFAULT_BYTE_MASK)
                      : 0;
!   flag_bits     |= (refer.nsubscript << NSUBSCRIPT_SHIFT) & NSUBSCRIPT_MASK;
    flag_bits     |= just_once ? JUST_ONCE_BIT : 0 ;
  
    suppress_dest_depends = false;  // Set this to false so that refer_is_clean is valid
--- 1370,1376 ----
    flag_bits     |=  wsclear()
                      ? DEFAULTBYTE_BIT + (*wsclear() & DEFAULT_BYTE_MASK)
                      : 0;
!   flag_bits     |= (refer.nsubscript() << NSUBSCRIPT_SHIFT) & NSUBSCRIPT_MASK;
    flag_bits     |= just_once ? JUST_ONCE_BIT : 0 ;
  
    suppress_dest_depends = false;  // Set this to false so that refer_is_clean is valid
*************** initialize_variable_internal( cbl_refer_
*** 1531,1537 ****
  //  }
  
  void
! parser_initialize(cbl_refer_t refer, bool like_parser_symbol_add)
    {
    //gg_printf("parser_initialize %s\n", gg_string_literal(refer.field->name), NULL_TREE);
    if( like_parser_symbol_add )
--- 1535,1541 ----
  //  }
  
  void
! parser_initialize(const cbl_refer_t& refer, bool like_parser_symbol_add)
    {
    //gg_printf("parser_initialize %s\n", gg_string_literal(refer.field->name), NULL_TREE);
    if( like_parser_symbol_add )
*************** get_bytes_needed(cbl_field_t *field)
*** 1752,1758 ****
        }
  
      default:
!       cbl_internal_error("%s(): Knows not the variable type %s for %s",
                __func__,
                cbl_field_type_str(field->type),
                field->name );
--- 1756,1762 ----
        }
  
      default:
!       cbl_internal_error("%s: Knows not the variable type %s for %s",
                __func__,
                cbl_field_type_str(field->type),
                field->name );
*************** move_tree(  cbl_field_t  *dest,
*** 2441,2450 ****
  
    if( !moved )
      {
!     dbgmsg("###### %10s in %s:%d\n", __func__, __FILE__, __LINE__ );
!     cbl_internal_error( "I don't know how to MOVE an alphabetical string to %s(%s) \n",
!            cbl_field_type_str(dest->type),
!            dest->name
           );
      return;
      }
--- 2445,2454 ----
  
    if( !moved )
      {
!     dbgmsg("%10s in %s:%d", __func__, __FILE__, __LINE__ );
!     cbl_internal_error( "I don%'t know how to MOVE an alphabetical string to %s(%s)",
!                         cbl_field_type_str(dest->type),
!                         dest->name
           );
      return;
      }
*************** get_string_from(cbl_field_t *field)
*** 2475,2481 ****
                    gg_cast(CHAR_P,
                            gg_malloc(build_int_cst_type(SIZE_T,
                                                       field->data.capacity+1))));
!         char *litstring = get_literal_string(field);
          gg_memcpy(psz,
                    gg_string_literal(litstring),
                    build_int_cst_type(SIZE_T, field->data.capacity+1));
--- 2479,2485 ----
                    gg_cast(CHAR_P,
                            gg_malloc(build_int_cst_type(SIZE_T,
                                                       field->data.capacity+1))));
!         const char *litstring = get_literal_string(field);
          gg_memcpy(psz,
                    gg_string_literal(litstring),
                    build_int_cst_type(SIZE_T, field->data.capacity+1));
*************** get_string_from(cbl_field_t *field)
*** 2510,2516 ****
  
        default:
          cbl_internal_error(
!                 "%s(): field->type %s must be literal or alphanumeric",
                  __func__, cbl_field_type_str(field->type));
        break;
        }
--- 2514,2520 ----
  
        default:
          cbl_internal_error(
!                 "%s: %<field->type%> %s must be literal or alphanumeric",
                  __func__, cbl_field_type_str(field->type));
        break;
        }
*************** combined_name(cbl_label_t *label)
*** 2527,2534 ****
    {
    // This routine returns a pointer to a static, so make sure you use the result
    // before calling the routine again
!   char *para_name     = nullptr;
!   char *sect_name     = nullptr;
    const char *program_name  = current_function->our_unmangled_name;
  
    if( label->type == LblParagraph )
--- 2531,2538 ----
    {
    // This routine returns a pointer to a static, so make sure you use the result
    // before calling the routine again
!   const char *para_name     = nullptr;
!   const char *sect_name     = nullptr;
    const char *program_name  = current_function->our_unmangled_name;
  
    if( label->type == LblParagraph )
*************** combined_name(cbl_label_t *label)
*** 2551,2557 ****
    static char *retval= (char *)xmalloc(retval_size);
  
    char *paragraph             = cobol_name_mangler(para_name);
!   char *section               = cobol_name_mangler(sect_name);
    char *mangled_program_name  = cobol_name_mangler(program_name);
  
    while( retval_size < (paragraph ? strlen(paragraph) : 0 )
--- 2555,2561 ----
    static char *retval= (char *)xmalloc(retval_size);
  
    char *paragraph             = cobol_name_mangler(para_name);
!   char *section         = cobol_name_mangler(sect_name);
    char *mangled_program_name  = cobol_name_mangler(program_name);
  
    while( retval_size < (paragraph ? strlen(paragraph) : 0 )
*************** parser_perform(cbl_label_t *label, bool
*** 3267,3274 ****
    // pairs were created, the locations of the goto instruction and the label
    // were not known.
  
!   char *para_name     = nullptr;
!   char *sect_name     = nullptr;
    const char *program_name  = current_function->our_unmangled_name;
    size_t deconflictor = symbol_label_id(label);
  
--- 3271,3278 ----
    // pairs were created, the locations of the goto instruction and the label
    // were not known.
  
!   const char *para_name     = nullptr;
!   const char *sect_name     = nullptr;
    const char *program_name  = current_function->our_unmangled_name;
    size_t deconflictor = symbol_label_id(label);
  
*************** internal_perform_through( cbl_label_t *p
*** 3445,3451 ****
    pseudo_return_push(proc2, return_addr);
  
    // Create the code that will launch the first procedure
!   gg_insert_into_assembler("%s PERFORM %s THROUGH %s",
                          ASM_COMMENT_START, proc_1->name, proc_2->name);
  
    if( !suppress_nexting )
--- 3449,3455 ----
    pseudo_return_push(proc2, return_addr);
  
    // Create the code that will launch the first procedure
!   gg_insert_into_assemblerf("%s PERFORM %s THROUGH %s",
                          ASM_COMMENT_START, proc_1->name, proc_2->name);
  
    if( !suppress_nexting )
*************** psa_FldLiteralN(struct cbl_field_t *fiel
*** 4095,4101 ****
      int rdigit_delta = 0;
      int exponent = 0;
  
!     char *exp = strchr(p, 'E');
      if( !exp )
        {
        exp = strchr(p, 'e');
--- 4099,4105 ----
      int rdigit_delta = 0;
      int exponent = 0;
  
!     const char *exp = strchr(p, 'E');
      if( !exp )
        {
        exp = strchr(p, 'e');
*************** parser_assign( size_t nC, cbl_num_result
*** 5659,5674 ****
    }
  
  static cbl_figconst_t
! is_figconst(cbl_field_t *field)
    {
    cbl_figconst_t figconst = (cbl_figconst_t)(field->attr & FIGCONST_MASK);
    return figconst;
    }
  
  static cbl_figconst_t
! is_figconst(cbl_refer_t &sourceref)
    {
!   return is_figconst(sourceref.field);
    }
  
  void
--- 5663,5678 ----
    }
  
  static cbl_figconst_t
! is_figconst_t(const cbl_field_t *field)
    {
    cbl_figconst_t figconst = (cbl_figconst_t)(field->attr & FIGCONST_MASK);
    return figconst;
    }
  
  static cbl_figconst_t
! is_figconst(const cbl_refer_t &sourceref)
    {
!   return is_figconst_t(sourceref.field);
    }
  
  void
*************** tree_type_from_field_type(cbl_field_t *f
*** 6022,6028 ****
          break;
  
        default:
!         cbl_internal_error(  "%s(): Invalid field type %s:",
                  __func__,
                  cbl_field_type_str(field->type));
          break;
--- 6026,6032 ----
          break;
  
        default:
!         cbl_internal_error(  "%s: Invalid field type %s:",
                  __func__,
                  cbl_field_type_str(field->type));
          break;
*************** is_valuable( cbl_field_type_t type ) {
*** 6078,6084 ****
    case FldPointer:
      return true;
    }
!   cbl_internal_error( "%s:%d: invalid symbol_type_t %d", __func__, __LINE__, type );
    return false;
  }
  
--- 6082,6088 ----
    case FldPointer:
      return true;
    }
!   cbl_internal_error( "%s:%d: invalid %<symbol_type_t%> %d", __func__, __LINE__, type );
    return false;
  }
  
*************** pe_stuff(cbl_refer_t refer, ec_type_t ec
*** 6213,6219 ****
    }
  
  void
! parser_exit( cbl_refer_t refer, ec_type_t ec )
    {
    Analyze();
    SHOW_PARSE
--- 6217,6223 ----
    }
  
  void
! parser_exit( const cbl_refer_t& refer, ec_type_t ec )
    {
    Analyze();
    SHOW_PARSE
*************** parser_division(cbl_division_t division,
*** 6777,6783 ****
        // gg_printf("Somebody wants to cancel %s\n",
                  // gg_string_literal(current_function->our_unmangled_name),
                  // NULL_TREE);
!       cbl_label_t *prog = cbl_label_of(symbol_at(current_program_index()));
        size_t initializer_index = prog->initial_section;
        cbl_label_t *initializer = cbl_label_of(symbol_at(initializer_index));
        parser_perform(initializer, true);  // true means suppress nexting
--- 6781,6787 ----
        // gg_printf("Somebody wants to cancel %s\n",
                  // gg_string_literal(current_function->our_unmangled_name),
                  // NULL_TREE);
!       const cbl_label_t *prog = cbl_label_of(symbol_at(current_program_index()));
        size_t initializer_index = prog->initial_section;
        cbl_label_t *initializer = cbl_label_of(symbol_at(initializer_index));
        parser_perform(initializer, true);  // true means suppress nexting
*************** parser_division(cbl_division_t division,
*** 6894,6900 ****
  
        // There are 'nusing' elements in the PROCEDURE DIVISION USING list.
  
!       tree parameter;
        tree rt_i = gg_define_int();
        for(size_t i=0; i<nusing; i++)
          {
--- 6898,6904 ----
  
        // There are 'nusing' elements in the PROCEDURE DIVISION USING list.
  
!       tree parameter = NULL_TREE;
        tree rt_i = gg_define_int();
        for(size_t i=0; i<nusing; i++)
          {
*************** parser_logop( struct cbl_field_t *tgt,
*** 7224,7243 ****
  
    if( tgt->type != FldConditional )
      {
!     cbl_internal_error("parser_logop() was called with variable %s on line %d"
!           ", which is not a FldConditional\n",
            tgt->name, cobol_location().first_line);
      }
    if( a && a->type != FldConditional )
      {
!     cbl_internal_error("parser_logop() was called with variable %s on line %d"
!           ", which is not a FldConditional\n",
            a->name, cobol_location().first_line);
      }
    if( b && b->type != FldConditional )
      {
!     cbl_internal_error("parser_logop() was called with variable %s on line %d"
!           ", which is not a FldConditional\n",
            b->name, cobol_location().first_line);
      }
  
--- 7228,7247 ----
  
    if( tgt->type != FldConditional )
      {
!     cbl_internal_error("%<parser_logop()%> was called with variable %s on line %d"
!           ", which is not a FldConditional",
            tgt->name, cobol_location().first_line);
      }
    if( a && a->type != FldConditional )
      {
!     cbl_internal_error("%<parser_logop()%> was called with variable %s on line %d"
!           ", which is not a FldConditional",
            a->name, cobol_location().first_line);
      }
    if( b && b->type != FldConditional )
      {
!     cbl_internal_error("%<parser_logop()%> was called with variable %s on line %d"
!           ", which is not a FldConditional",
            b->name, cobol_location().first_line);
      }
  
*************** parser_relop(   cbl_field_t *tgt,
*** 7343,7351 ****
  
    if( tgt->type != FldConditional )
      {
!     cbl_internal_error("parser_relop() was called with variable %s, "
!           "which is not a FldConditional\n",
!           tgt->name);
      }
  
    static tree comp_res = gg_define_variable(INT, "..pr_comp_res", vs_file_static);
--- 7347,7355 ----
  
    if( tgt->type != FldConditional )
      {
!     cbl_internal_error("%<parser_relop%> was called with variable %qs, "
!                        "which is not a FldConditional",
!                        tgt->name);
      }
  
    static tree comp_res = gg_define_variable(INT, "..pr_comp_res", vs_file_static);
*************** parser_relop_long(cbl_field_t *tgt,
*** 7407,7414 ****
  
    if( tgt->type != FldConditional )
      {
!     cbl_internal_error("parser_relop() was called with variable %s, "
!           "which is not a FldConditional\n",
            tgt->name);
      }
  
--- 7411,7418 ----
  
    if( tgt->type != FldConditional )
      {
!     cbl_internal_error("%<parser_relop()%> was called with variable %s, "
!           "which is not a FldConditional",
            tgt->name);
      }
  
*************** parser_if( struct cbl_field_t *condition
*** 7453,7460 ****
  
    if( conditional->type != FldConditional )
      {
!     cbl_internal_error("parser_if() was called with variable %s, "
!           "which is not a FldConditional\n",
            conditional->name);
      }
  
--- 7457,7464 ----
  
    if( conditional->type != FldConditional )
      {
!     cbl_internal_error("%<parser_if()%> was called with variable %s, "
!           "which is not a FldConditional",
            conditional->name);
      }
  
*************** parser_setop( struct cbl_field_t *tgt,
*** 7704,7723 ****
                        integer_zero_node));
            break;
          default:
!           dbgmsg("###### %10s in %s:%d\n", __func__, __FILE__, __LINE__ );
!           cbl_internal_error(
!                 "###### candidate %s has unimplemented CVT_type %d(%s)\n",
!                 candidate->name,
!                 candidate->type,
!                 cbl_field_type_str(candidate->type));
            gcc_unreachable();
            break;
          }
        break;
  
      default:
!       dbgmsg("###### %10s in %s:%d\n", __func__, __FILE__, __LINE__ );
!       cbl_internal_error("###### unknown setop_t code %d\n", op);
        gcc_unreachable();
        break;
      }
--- 7708,7726 ----
                        integer_zero_node));
            break;
          default:
!           dbgmsg("%10s in %s:%d", __func__, __FILE__, __LINE__ );
!           cbl_internal_error("candidate %s has unimplemented %<CVT_type%> %d(%s)",
!                              candidate->name,
!                              candidate->type,
!                              cbl_field_type_str(candidate->type));
            gcc_unreachable();
            break;
          }
        break;
  
      default:
!       dbgmsg("%10s in %s:%d", __func__, __FILE__, __LINE__ );
!       cbl_internal_error("unknown %<setop_t%> code %d", op);
        gcc_unreachable();
        break;
      }
*************** parser_classify(    cbl_field_t *tgt,
*** 7770,7778 ****
    }
  
  void
! parser_perform(struct cbl_perform_tgt_t *tgt, struct cbl_refer_t how_many)
    {
!   cbl_field_t *N = how_many.field;
    // No SHOW_PARSE here; we want to fall through:
    if( !tgt->to() )
      {
--- 7773,7781 ----
    }
  
  void
! parser_perform(const cbl_perform_tgt_t *tgt, cbl_refer_t how_many)
    {
!   const cbl_field_t *N = how_many.field;
    // No SHOW_PARSE here; we want to fall through:
    if( !tgt->to() )
      {
*************** parser_perform_conditional( struct cbl_p
*** 7913,7921 ****
  
    if( !(i < MAXIMUM_UNTILS) )
      {
!     cbl_internal_error("%s:%d: %u exceeds MAXIMUM_UNTILS of %d, line %d",
! 		       __func__, __LINE__,
! 		       i, MAXIMUM_UNTILS, CURRENT_LINE_NUMBER);
      }
    gcc_assert(i < MAXIMUM_UNTILS);
  
--- 7916,7924 ----
  
    if( !(i < MAXIMUM_UNTILS) )
      {
!     cbl_internal_error("%s:%d: %u exceeds %<MAXIMUM_UNTILS%> of %d, line %d",
!                        __func__, __LINE__,
!                        i, MAXIMUM_UNTILS, CURRENT_LINE_NUMBER);
      }
    gcc_assert(i < MAXIMUM_UNTILS);
  
*************** parser_perform_inline_times(struct cbl_p
*** 9035,9041 ****
    }
  
  void
! parser_set_conditional88( struct cbl_refer_t refer, bool which_way )
    {
    Analyze();
    struct cbl_field_t *tgt = refer.field;
--- 9038,9044 ----
    }
  
  void
! parser_set_conditional88( const cbl_refer_t& refer, bool which_way )
    {
    Analyze();
    struct cbl_field_t *tgt = refer.field;
*************** parser_file_add(struct cbl_file_t *file)
*** 9147,9153 ****
  
    if( !file )
      {
!     cbl_internal_error("%s(): called with NULL *file", __func__);
      gcc_assert(file);
      }
  
--- 9150,9156 ----
  
    if( !file )
      {
!     cbl_internal_error("%s: called with NULL *file", __func__);
      gcc_assert(file);
      }
  
*************** parser_file_add(struct cbl_file_t *file)
*** 9272,9278 ****
    if(file->access == file_inaccessible_e)
      {
      cbl_internal_error(
!           "%s:%d file %s access mode is 'file_inaccessible_e' in %s",
            current_filename.back().c_str(),
            CURRENT_LINE_NUMBER,
            file->name,
--- 9275,9281 ----
    if(file->access == file_inaccessible_e)
      {
      cbl_internal_error(
!           "%s:%d file %s access mode is %<file_inaccessible_e%> in %s",
            current_filename.back().c_str(),
            CURRENT_LINE_NUMBER,
            file->name,
*************** parser_file_open( struct cbl_file_t *fil
*** 9346,9357 ****
  
    if( !file )
      {
!     cbl_internal_error("parser_file_open called with NULL *file");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("parser_file_open for %s called with NULL var_decl_node", file->name);
      }
  
    if( mode_char == 'a' && (file->access != file_access_seq_e) )
--- 9349,9361 ----
  
    if( !file )
      {
!     cbl_internal_error("%<parser_file_open%> called with NULL *file");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("%<parser_file_open%> for %s called with NULL "
!                        "%<var_decl_node%>", file->name);
      }
  
    if( mode_char == 'a' && (file->access != file_access_seq_e) )
*************** parser_file_close( struct cbl_file_t *fi
*** 9425,9436 ****
  
    if( !file )
      {
!     cbl_internal_error("parser_file_close called with NULL *file");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("parser_file_close for %s called with NULL file->var_decl_node", file->name);
      }
  
    TRACE1
--- 9429,9441 ----
  
    if( !file )
      {
!     cbl_internal_error("%<parser_file_close%> called with NULL *file");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("%<parser_file_close%> for %s called with "
!                        "NULL %<file->var_decl_node%>", file->name);
      }
  
    TRACE1
*************** parser_file_read( struct cbl_file_t *fil
*** 9494,9520 ****
  
    if( !file )
      {
!     cbl_internal_error("parser_file_read called with NULL *file");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("parser_file_read for %s called with NULL file->var_decl_node", file->name);
      }
  
    if( !file )
      {
!     cbl_internal_error("parser_file_read called with NULL *field");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("parser_file_read for %s called with NULL field->var_decl_node", file->name);
      }
  
    if( file->access == file_access_seq_e && where >= 0)
      {
!     cbl_internal_error("%s:%d file %s is RELATIVE/SEQUENTIAL, but 'where' >= 0",
            current_filename.back().c_str(),
            CURRENT_LINE_NUMBER,
            file->name);
--- 9499,9527 ----
  
    if( !file )
      {
!     cbl_internal_error("%<parser_file_read%> called with NULL *file");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("%<parser_file_read%> for %s called with "
!                        "NULL %<file->var_decl_node%>", file->name);
      }
  
    if( !file )
      {
!     cbl_internal_error("%<parser_file_read%> called with NULL *field");
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("%<parser_file_read%> for %s called with "
!                        "NULL %<field->var_decl_node%>", file->name);
      }
  
    if( file->access == file_access_seq_e && where >= 0)
      {
!     cbl_internal_error("%s:%d file %s is RELATIVE/SEQUENTIAL, but %<where >= 0%>",
            current_filename.back().c_str(),
            CURRENT_LINE_NUMBER,
            file->name);
*************** parser_file_read( struct cbl_file_t *fil
*** 9523,9529 ****
  
    if( file->access == file_access_rnd_e && where < 0)
      {
!     cbl_internal_error("%s:%d file %s is RELATIVE/RANDOM, but 'where' < 0",
            current_filename.back().c_str(),
            CURRENT_LINE_NUMBER,
            file->name);
--- 9530,9536 ----
  
    if( file->access == file_access_rnd_e && where < 0)
      {
!     cbl_internal_error("%s:%d file %s is RELATIVE/RANDOM, but %<where < 0%>",
            current_filename.back().c_str(),
            CURRENT_LINE_NUMBER,
            file->name);
*************** parser_file_write( cbl_file_t *file,
*** 9611,9633 ****
  
    if( !file )
      {
!     cbl_internal_error("%s(): called with NULL *file", __func__);
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("%s(): for %s called with NULL file->var_decl_node",
                          __func__, file->name);
      }
  
    if( !file )
      {
!     cbl_internal_error("%s(): called with NULL *field", __func__);
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error( "%s(): for %s called with NULL field->var_decl_node",
                          __func__,
                          file->name);
      }
--- 9618,9640 ----
  
    if( !file )
      {
!     cbl_internal_error("%s: called with NULL *file", __func__);
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error("%s: for %s called with NULL %<file->var_decl_node%>",
                          __func__, file->name);
      }
  
    if( !file )
      {
!     cbl_internal_error("%s: called with NULL *field", __func__);
      }
  
    if( !file->var_decl_node )
      {
!     cbl_internal_error( "%s: for %s called with NULL %<field->var_decl_node%>",
                          __func__,
                          file->name);
      }
*************** parser_file_start(struct cbl_file_t *fil
*** 9917,9930 ****
  static void
  inspect_tally(bool backward,
                cbl_refer_t identifier_1,
!               unsigned long n_identifier_2,
!               cbx_inspect_t<cbl_refer_t>* identifier_2)
    {
    Analyze();
    // This is an INSPECT FORMAT 1
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
      SHOW_PARSE_END
      }
  
--- 9924,9975 ----
  static void
  inspect_tally(bool backward,
                cbl_refer_t identifier_1,
!               cbl_inspect_opers_t& identifier_2)
    {
    Analyze();
    // This is an INSPECT FORMAT 1
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
+     char ach[128];
+     sprintf(ach, "There are %lu identifier_2", gb4(identifier_2.size()));
+     SHOW_PARSE_TEXT(ach);
+     for(size_t i=0; i<identifier_2.size(); i++)
+       {
+       SHOW_PARSE_INDENT
+         sprintf(ach, "%lu: bounds: %lu", gb4(i), gb4(identifier_2[i].nbound()));
+       SHOW_PARSE_TEXT(ach);
+       for(size_t j=0; j<identifier_2[i].nbound(); j++)
+         {
+         SHOW_PARSE_INDENT
+           sprintf(ach, "    %lu: matches: %lu",
+                   gb4(j), gb4(identifier_2[i][j].matches.size()));
+         SHOW_PARSE_TEXT(ach);
+ 
+         SHOW_PARSE_INDENT
+         if(  identifier_2[i][j].bound == bound_characters_e )
+           {
+           SHOW_PARSE_TEXT("       bound_characters");
+           }
+         else
+           {
+           SHOW_PARSE_TEXT("       bound_leading/all");
+           }
+ 
+         if( identifier_2[i][j].matches.size() )
+           {
+           SHOW_PARSE_INDENT
+           sprintf(ach, "       before %p",
+                   as_voidp(identifier_2.at(i).at(j).matches.at(0).before.identifier_4.field));
+           SHOW_PARSE_TEXT(ach);
+           SHOW_PARSE_INDENT
+           sprintf(ach, "       after  %p",
+                   as_voidp(identifier_2.at(i).at(j).matches.at(0).after.identifier_4.field));
+           SHOW_PARSE_TEXT(ach);
+           }
+         }
+       }
+ 
      SHOW_PARSE_END
      }
  
*************** inspect_tally(bool backward,
*** 9934,9939 ****
--- 9979,9985 ----
  
    size_t int_index  = 0;
    size_t pcbl_index = 0;
+   unsigned long n_identifier_2 = identifier_2.size();
  
    // The first integer is the all-important controlling count:
    int_index++;
*************** inspect_tally(bool backward,
*** 9947,9958 ****
      pcbl_index++;
      // For each FOR there is a count of the loops after the FOR
      int_index++;
!     for(size_t j=0; j<identifier_2[i].nbound; j++)
        {
- 
        // After each identifier-2, there is a cbl_inspect_bound_t value:
        int_index++;
!       if( identifier_2[i].opers[j].bound == bound_characters_e)
          {
          // This is a FOR CHARACTERS PHRASE1, so we will need before/after
          // for each:
--- 9993,10003 ----
      pcbl_index++;
      // For each FOR there is a count of the loops after the FOR
      int_index++;
!     for(size_t j=0; j<identifier_2[i].nbound(); j++)
        {
        // After each identifier-2, there is a cbl_inspect_bound_t value:
        int_index++;
!       if( identifier_2[i][j].bound == bound_characters_e)
          {
          // This is a FOR CHARACTERS PHRASE1, so we will need before/after
          // for each:
*************** inspect_tally(bool backward,
*** 9963,9969 ****
          {
          // This is ALL or LEADING.  Each has some number of identifier-3
          int_index++;
!         for(size_t k=0; k<identifier_2[i].opers[j].n_identifier_3; k++)
            {
            // Put identifier-3 into the array:
            pcbl_index++;
--- 10008,10014 ----
          {
          // This is ALL or LEADING.  Each has some number of identifier-3
          int_index++;
!         for(size_t k=0; k<identifier_2[i][j].n_identifier_3(); k++)
            {
            // Put identifier-3 into the array:
            pcbl_index++;
*************** inspect_tally(bool backward,
*** 9999,10006 ****
      }
    ENDIF
  
!   size_t n_resolveds = pcbl_index;
!   cbl_refer_t *pcbl_refers = (cbl_refer_t *)xmalloc(n_resolveds * sizeof(cbl_refer_t));
  
    // Now we make a second pass, populating those arrays:
    int_index  = 0;
--- 10044,10051 ----
      }
    ENDIF
  
!   const size_t n_resolveds = pcbl_index;
!   std::vector<cbl_refer_t> pcbl_refers(n_resolveds);
  
    // Now we make a second pass, populating those arrays:
    int_index  = 0;
*************** inspect_tally(bool backward,
*** 10019,10052 ****
      pcbl_refers[pcbl_index++] = identifier_2[i].tally;
      // For each FOR there is a count of the loops after the FOR
      gg_assign(  gg_array_value(integers, int_index++),
!                 build_int_cst_type(SIZE_T, identifier_2[i].nbound) );
!     for(size_t j=0; j<identifier_2[i].nbound; j++)
        {
  
        // After each identifier-2, there is a cbl_inspect_bound_t value:
        gg_assign(  gg_array_value(integers, int_index++),
!                   build_int_cst_type(SIZE_T, identifier_2[i].opers[j].bound));
!       if( identifier_2[i].opers[j].bound == bound_characters_e)
          {
          // This is a FOR CHARACTERS PHRASE1, so we will need before/after
          // for each:
!         pcbl_refers[pcbl_index++] = identifier_2[i].opers[j].matches[0].before.identifier_4;
!         pcbl_refers[pcbl_index++] = identifier_2[i].opers[j].matches[0].after.identifier_4;
          }
        else
          {
          // This is ALL or LEADING.  Each has some number of identifier-3
          gg_assign(  gg_array_value(integers, int_index++),
!                     build_int_cst_type(SIZE_T, identifier_2[i].opers[j].n_identifier_3));
!         for(size_t k=0; k<identifier_2[i].opers[j].n_identifier_3; k++)
            {
            // Put identifier-3 into the array:
!           pcbl_refers[pcbl_index++] = identifier_2[i].opers[j].matches[k].matching;
  
            // We need the PHRASE1 for that identifier-3
!           pcbl_refers[pcbl_index++] = identifier_2[i].opers[j].matches[k].before.identifier_4;
  
!           pcbl_refers[pcbl_index++] = identifier_2[i].opers[j].matches[k].after.identifier_4;
            }
          }
        }
--- 10064,10105 ----
      pcbl_refers[pcbl_index++] = identifier_2[i].tally;
      // For each FOR there is a count of the loops after the FOR
      gg_assign(  gg_array_value(integers, int_index++),
!                 build_int_cst_type(SIZE_T, identifier_2[i].nbound()) );
!     for(size_t j=0; j<identifier_2[i].nbound(); j++)
        {
  
        // After each identifier-2, there is a cbl_inspect_bound_t value:
        gg_assign(  gg_array_value(integers, int_index++),
!                   build_int_cst_type(SIZE_T, identifier_2[i][j].bound));
!       if( identifier_2[i][j].bound == bound_characters_e)
          {
          // This is a FOR CHARACTERS PHRASE1, so we will need before/after
          // for each:
!         const auto& m( identifier_2[i][j].matches );
!         if( m.empty() )
!           {
!             pcbl_index += 2;
!           }
!         else
!           {
!           pcbl_refers[pcbl_index++] = m[0].before.identifier_4;
!           pcbl_refers[pcbl_index++] = m[0].after.identifier_4;
!           }
          }
        else
          {
          // This is ALL or LEADING.  Each has some number of identifier-3
          gg_assign(  gg_array_value(integers, int_index++),
!                     build_int_cst_type(SIZE_T, identifier_2[i][j].n_identifier_3()));
!         for(size_t k=0; k<identifier_2[i][j].n_identifier_3(); k++)
            {
            // Put identifier-3 into the array:
!           pcbl_refers[pcbl_index++] = identifier_2[i][j].matches[k].matching();
  
            // We need the PHRASE1 for that identifier-3
!           pcbl_refers[pcbl_index++] = identifier_2[i][j].matches[k].before.identifier_4;
  
!           pcbl_refers[pcbl_index++] = identifier_2[i][j].matches[k].after.identifier_4;
            }
          }
        }
*************** inspect_tally(bool backward,
*** 10058,10064 ****
    gcc_assert(pcbl_index == n_resolveds);
  
    // We have built up an array of integers, and an array of cbl_refer_t.
!   build_array_of_treeplets(1, pcbl_index, pcbl_refers);
  
    // Do the actual call:
    gg_call(VOID,
--- 10111,10117 ----
    gcc_assert(pcbl_index == n_resolveds);
  
    // We have built up an array of integers, and an array of cbl_refer_t.
!   build_array_of_treeplets(1, pcbl_index, pcbl_refers.data());
  
    // Do the actual call:
    gg_call(VOID,
*************** inspect_tally(bool backward,
*** 10066,10081 ****
            backward ? integer_one_node : integer_zero_node,
            integers,
            NULL_TREE);
- 
-   // And free up the memory we allocated
-   free(pcbl_refers);
    }
  
  static void
  inspect_replacing(int backward,
                    cbl_refer_t identifier_1,
!                   unsigned long n_ops,
!                   cbx_inspect_t<cbl_refer_t>* operations)
    {
    Analyze();
    // This is an INSPECT FORMAT 2
--- 10119,10130 ----
            backward ? integer_one_node : integer_zero_node,
            integers,
            NULL_TREE);
    }
  
  static void
  inspect_replacing(int backward,
                    cbl_refer_t identifier_1,
!                   cbl_inspect_opers_t& operations)
    {
    Analyze();
    // This is an INSPECT FORMAT 2
*************** inspect_replacing(int backward,
*** 10086,10091 ****
--- 10135,10141 ----
      }
  
    // For REPLACING, unlike TALLY, there can be but one operation
+   unsigned long n_ops = operations.size();
    gcc_assert(n_ops == 1);
  
    size_t n_id_3 = 0;
*************** inspect_replacing(int backward,
*** 10096,10104 ****
    // Make one pass through the inputs to count up the sizes of the arrays
    // we will be passing to the library routines:
  
!   for( size_t j=0; j<operations[0].nbound; j++)
      {
!     if( operations[0].opers[j].bound == bound_characters_e)
        {
        // This is a FOR CHARACTERS phrase
  
--- 10146,10154 ----
    // Make one pass through the inputs to count up the sizes of the arrays
    // we will be passing to the library routines:
  
!   for( size_t j=0; j<operations[0].nbound(); j++)
      {
!     if( operations[0][j].bound == bound_characters_e)
        {
        // This is a FOR CHARACTERS phrase
  
*************** inspect_replacing(int backward,
*** 10117,10129 ****
  
        // The n_identifier-3 values will go into the resolved values; we have to
        // leave room for them
!       n_id_3 += operations[0].opers[j].n_identifier_3;
  
        // Likewise identifier-5 values:
!       n_id_5 += operations[0].opers[j].n_identifier_3;
  
        // And each identifier-3 / identifier-5 pair has BEFORE and AFTER phrases:
!       n_id_4 += 2 * operations[0].opers[j].n_identifier_3;
        }
      }
  
--- 10167,10179 ----
  
        // The n_identifier-3 values will go into the resolved values; we have to
        // leave room for them
!       n_id_3 += operations[0][j].n_identifier_3();
  
        // Likewise identifier-5 values:
!       n_id_5 += operations[0][j].n_identifier_3();
  
        // And each identifier-3 / identifier-5 pair has BEFORE and AFTER phrases:
!       n_id_4 += 2 * operations[0][j].n_identifier_3();
        }
      }
  
*************** inspect_replacing(int backward,
*** 10131,10138 ****
    // all the integers and cbl_inspect_bound_t values, in a strict sequence so
    // that the library routine can peel them off.
  
!   size_t n_integers =   1                     // Room for operations[0].nbound
!                         + operations[0].nbound  // Room for all the cbl_inspect_bound_t values
                          + n_all_leading_first;  // Room for all of the n_identifier_3 counts
  
    static tree int_size = gg_define_variable(INT,      "..pir_size", vs_file_static, 0);
--- 10181,10188 ----
    // all the integers and cbl_inspect_bound_t values, in a strict sequence so
    // that the library routine can peel them off.
  
!   size_t n_integers =   1                     // Room for operations[0].nbound()
!                         + operations[0].nbound()  // Room for all the cbl_inspect_bound_t values
                          + n_all_leading_first;  // Room for all of the n_identifier_3 counts
  
    static tree int_size = gg_define_variable(INT,      "..pir_size", vs_file_static, 0);
*************** inspect_replacing(int backward,
*** 10152,10163 ****
      }
    ENDIF
  
!   size_t n_resolveds =      1                 // Room for identifier-1
                              + n_id_3            // Room for the identifier-3 variables
                              + n_id_4            // Room for the identifier-4 variables
                              + n_id_5;           // Room for the identifier-5 variables
  
!   cbl_refer_t *pcbl_refers = (cbl_refer_t *)xmalloc(n_resolveds * sizeof(cbl_refer_t));
  
    // Now we make a second pass, populating those arrays:
    size_t int_index  = 0;
--- 10202,10213 ----
      }
    ENDIF
  
!   const size_t n_resolveds =  1                 // Room for identifier-1
                              + n_id_3            // Room for the identifier-3 variables
                              + n_id_4            // Room for the identifier-4 variables
                              + n_id_5;           // Room for the identifier-5 variables
  
!   std::vector<cbl_refer_t> pcbl_refers(n_resolveds);
  
    // Now we make a second pass, populating those arrays:
    size_t int_index  = 0;
*************** inspect_replacing(int backward,
*** 10165,10192 ****
  
    // The first integer is the all-important controlling count:
    gg_assign(  gg_array_value(integers, int_index++),
!               build_int_cst_type(SIZE_T, operations[0].nbound) );
  
    // The first refer is for identifier-1
    pcbl_refers[pcbl_index++] = identifier_1;
  
!   for( size_t j=0; j<operations[0].nbound; j++)
      {
      // For each FOR there is a count of the loops after the FOR
  
      // For each operation, there is a cbl_inspect_bound_t value:
      gg_assign(  gg_array_value(integers, int_index++),
!                 build_int_cst_type(SIZE_T, operations[0].opers[j].bound));
!     if( operations[0].opers[j].bound == bound_characters_e)
        {
        // This is a FOR CHARACTERS PHRASE1
  
        // Put in the identifier-5 replacement value:
!       pcbl_refers[pcbl_index++] = operations[0].opers[j].replaces[0].replacement;
  
        // Each identifier-5 gets a PHRASE1:
!       pcbl_refers[pcbl_index++] = operations[0].opers[j].replaces[0].before.identifier_4;
!       pcbl_refers[pcbl_index++] = operations[0].opers[j].replaces[0].after.identifier_4;
  
        SHOW_PARSE
          {
--- 10215,10242 ----
  
    // The first integer is the all-important controlling count:
    gg_assign(  gg_array_value(integers, int_index++),
!               build_int_cst_type(SIZE_T, operations[0].nbound()) );
  
    // The first refer is for identifier-1
    pcbl_refers[pcbl_index++] = identifier_1;
  
!   for( size_t j=0; j<operations[0].nbound(); j++)
      {
      // For each FOR there is a count of the loops after the FOR
  
      // For each operation, there is a cbl_inspect_bound_t value:
      gg_assign(  gg_array_value(integers, int_index++),
!                 build_int_cst_type(SIZE_T, operations[0][j].bound));
!     if( operations[0][j].bound == bound_characters_e)
        {
        // This is a FOR CHARACTERS PHRASE1
  
        // Put in the identifier-5 replacement value:
!       pcbl_refers[pcbl_index++] = operations[0][j].replaces[0].replacement;
  
        // Each identifier-5 gets a PHRASE1:
!       pcbl_refers[pcbl_index++] = operations[0][j].replaces[0].before.identifier_4;
!       pcbl_refers[pcbl_index++] = operations[0][j].replaces[0].after.identifier_4;
  
        SHOW_PARSE
          {
*************** inspect_replacing(int backward,
*** 10194,10207 ****
            {
            SHOW_PARSE_INDENT
            }
!         SHOW_PARSE_FIELD("ID-5 ", operations[0].opers[j].replaces[0].replacement.field)
!         if(operations[0].opers[j].replaces[0].before.identifier_4.field)
            {
!           SHOW_PARSE_FIELD(" before ", operations[0].opers[j].replaces[0].before.identifier_4.field)
            }
!         if(operations[0].opers[j].replaces[0].after.identifier_4.field)
            {
!           SHOW_PARSE_FIELD(" after ", operations[0].opers[j].replaces[0].after.identifier_4.field)
            }
          SHOW_PARSE_END
          }
--- 10244,10257 ----
            {
            SHOW_PARSE_INDENT
            }
!         SHOW_PARSE_FIELD("ID-5 ", operations[0][j].replaces[0].replacement.field)
!         if(operations[0][j].replaces[0].before.identifier_4.field)
            {
!           SHOW_PARSE_FIELD(" before ", operations[0][j].replaces[0].before.identifier_4.field)
            }
!         if(operations[0][j].replaces[0].after.identifier_4.field)
            {
!           SHOW_PARSE_FIELD(" after ", operations[0][j].replaces[0].after.identifier_4.field)
            }
          SHOW_PARSE_END
          }
*************** inspect_replacing(int backward,
*** 10210,10228 ****
        {
        // This is ALL or LEADING.  Each has some number of identifier-3/identifier-5 pairs
        gg_assign(  gg_array_value(integers, int_index++),
!                   build_int_cst_type(SIZE_T, operations[0].opers[j].n_identifier_3));
!       for(size_t k=0; k<operations[0].opers[j].n_identifier_3; k++)
          {
          // Put identifier-3 into the array:
!         pcbl_refers[pcbl_index++] = operations[0].opers[j].replaces[k].matching;
  
          // Put in the identifier-5 replacement value:
!         pcbl_refers[pcbl_index++] = operations[0].opers[j].replaces[k].replacement;
  
          // We need the PHRASE1 for that identifier-3/identifier-5 pair:
!         pcbl_refers[pcbl_index++] = operations[0].opers[j].replaces[k].before.identifier_4;
  
!         pcbl_refers[pcbl_index++] = operations[0].opers[j].replaces[k].after.identifier_4;
  
          SHOW_PARSE
            {
--- 10260,10278 ----
        {
        // This is ALL or LEADING.  Each has some number of identifier-3/identifier-5 pairs
        gg_assign(  gg_array_value(integers, int_index++),
!                   build_int_cst_type(SIZE_T, operations[0][j].n_identifier_3()));
!       for(size_t k=0; k<operations[0][j].n_identifier_3(); k++)
          {
          // Put identifier-3 into the array:
!         pcbl_refers[pcbl_index++] = operations[0][j].replaces[k].matching();
  
          // Put in the identifier-5 replacement value:
!         pcbl_refers[pcbl_index++] = operations[0][j].replaces[k].replacement;
  
          // We need the PHRASE1 for that identifier-3/identifier-5 pair:
!         pcbl_refers[pcbl_index++] = operations[0][j].replaces[k].before.identifier_4;
  
!         pcbl_refers[pcbl_index++] = operations[0][j].replaces[k].after.identifier_4;
  
          SHOW_PARSE
            {
*************** inspect_replacing(int backward,
*** 10230,10244 ****
              {
              SHOW_PARSE_INDENT
              }
!           SHOW_PARSE_FIELD("ID-3 ", operations[0].opers[j].replaces[k].matching.field)
!           SHOW_PARSE_FIELD(" ID-5 ", operations[0].opers[j].replaces[k].replacement.field)
!           if( operations[0].opers[j].replaces[k].before.identifier_4.field )
              {
!             SHOW_PARSE_FIELD("before ", operations[0].opers[j].replaces[k].before.identifier_4.field)
              }
!           if(operations[0].opers[j].replaces[k].after.identifier_4.field)
              {
!             SHOW_PARSE_FIELD("after ", operations[0].opers[j].replaces[k].after.identifier_4.field)
              }
            SHOW_PARSE_END
            }
--- 10280,10294 ----
              {
              SHOW_PARSE_INDENT
              }
!           SHOW_PARSE_FIELD("ID-3 ", operations[0][j].replaces[k].matching().field)
!           SHOW_PARSE_FIELD(" ID-5 ", operations[0][j].replaces[k].replacement.field)
!           if( operations[0][j].replaces[k].before.identifier_4.field )
              {
!             SHOW_PARSE_FIELD("before ", operations[0][j].replaces[k].before.identifier_4.field)
              }
!           if(operations[0][j].replaces[k].after.identifier_4.field)
              {
!             SHOW_PARSE_FIELD("after ", operations[0][j].replaces[k].after.identifier_4.field)
              }
            SHOW_PARSE_END
            }
*************** inspect_replacing(int backward,
*** 10246,10254 ****
        }
      }
  
!   //fprintf(stderr, "%s(): %ld %ld\n", __func__, int_index, n_integers);
    gcc_assert(int_index  == n_integers);
!   //fprintf(stderr, "%s(): %ld %ld\n", __func__, pcbl_index, n_resolveds);
    gcc_assert(pcbl_index == n_resolveds);
  
    // We have built up an array of integers, and an array of cbl_refer_t.
--- 10296,10304 ----
        }
      }
  
!   //fprintf(stderr, "%s: %ld %ld\n", __func__, int_index, n_integers);
    gcc_assert(int_index  == n_integers);
!   //fprintf(stderr, "%s: %ld %ld\n", __func__, pcbl_index, n_resolveds);
    gcc_assert(pcbl_index == n_resolveds);
  
    // We have built up an array of integers, and an array of cbl_refer_t.
*************** inspect_replacing(int backward,
*** 10263,10269 ****
        }
      }
  
!   build_array_of_treeplets(1, pcbl_index, pcbl_refers);
  
    // Do the actual call:
    gg_call(VOID,
--- 10313,10319 ----
        }
      }
  
!   build_array_of_treeplets(1, pcbl_index, pcbl_refers.data());
  
    // Do the actual call:
    gg_call(VOID,
*************** inspect_replacing(int backward,
*** 10274,10286 ****
    }
  
  void
! parser_inspect(cbl_refer_t identifier_1,
                 bool backward,
!                size_t n_operations,
!                cbx_inspect_t<cbl_refer_t>* operations)
    {
    Analyze();
!   gcc_assert(n_operations);
  
    /*  Operating philosophy:  We are going to minimize the amount of
        GENERIC tag creation here at compile time, mainly by eliminating
--- 10324,10335 ----
    }
  
  void
! parser_inspect(const cbl_refer_t& identifier_1,
                 bool backward,
!                cbl_inspect_opers_t& operations)
    {
    Analyze();
!   gcc_assert(! operations.empty());
  
    /*  Operating philosophy:  We are going to minimize the amount of
        GENERIC tag creation here at compile time, mainly by eliminating
*************** parser_inspect(cbl_refer_t identifier_1,
*** 10290,10301 ****
    if( operations[0].tally.field )
      {
      // This is a FORMAT 1 "TALLYING"
!     inspect_tally(backward, identifier_1, n_operations, operations);
      }
    else
      {
      // This is a FORMAT 2 "REPLACING"
!     inspect_replacing(backward, identifier_1, n_operations, operations);
      }
    }
  
--- 10339,10350 ----
    if( operations[0].tally.field )
      {
      // This is a FORMAT 1 "TALLYING"
!     inspect_tally(backward, identifier_1, operations);
      }
    else
      {
      // This is a FORMAT 2 "REPLACING"
!     inspect_replacing(backward, identifier_1, operations);
      }
    }
  
*************** parser_intrinsic_subst( cbl_field_t *f,
*** 10441,10448 ****
    sv_is_i_o = true;
    store_location_stuff("SUBSTITUTE");
    unsigned char *control_bytes = (unsigned char *)xmalloc(argc * sizeof(unsigned char));
!   cbl_refer_t *arg1 = (cbl_refer_t *)xmalloc(argc * sizeof(cbl_refer_t));
!   cbl_refer_t *arg2 = (cbl_refer_t *)xmalloc(argc * sizeof(cbl_refer_t));
  
    for(size_t i=0; i<argc; i++)
      {
--- 10490,10497 ----
    sv_is_i_o = true;
    store_location_stuff("SUBSTITUTE");
    unsigned char *control_bytes = (unsigned char *)xmalloc(argc * sizeof(unsigned char));
!   std::vector<cbl_refer_t> arg1(argc);
!   std::vector<cbl_refer_t> arg2(argc);
  
    for(size_t i=0; i<argc; i++)
      {
*************** parser_intrinsic_subst( cbl_field_t *f,
*** 10458,10465 ****
  
    tree control = gg_array_of_bytes(argc, control_bytes);
  
!   build_array_of_treeplets(1, argc, arg1);
!   build_array_of_treeplets(2, argc, arg2);
  
    gg_call(VOID,
            "__gg__substitute",
--- 10507,10514 ----
  
    tree control = gg_array_of_bytes(argc, control_bytes);
  
!   build_array_of_treeplets(1, argc, arg1.data());
!   build_array_of_treeplets(2, argc, arg2.data());
  
    gg_call(VOID,
            "__gg__substitute",
*************** parser_intrinsic_subst( cbl_field_t *f,
*** 10473,10480 ****
  
    gg_free(control);
  
-   free(arg2);
-   free(arg1);
    free(control_bytes);
    }
  
--- 10522,10527 ----
*************** parser_intrinsic_call_1( cbl_field_t *tg
*** 10625,10636 ****
        }
      size_t upper = ref1.field->occurs.bounds.upper
                                      ? ref1.field->occurs.bounds.upper : 1;
!     if( ref1.nsubscript )
        {
        upper = 1;
        }
  
!     if( is_table(ref1.field) && !ref1.nsubscript )
        {
        static tree depending_on = gg_define_variable(LONG, "..pic1_dep");
        depending_on_value(depending_on, ref1.field);
--- 10672,10683 ----
        }
      size_t upper = ref1.field->occurs.bounds.upper
                                      ? ref1.field->occurs.bounds.upper : 1;
!     if( ref1.nsubscript() )
        {
        upper = 1;
        }
  
!     if( is_table(ref1.field) && !ref1.nsubscript() )
        {
        static tree depending_on = gg_define_variable(LONG, "..pic1_dep");
        depending_on_value(depending_on, ref1.field);
*************** parser_bsearch_conditional( cbl_label_t*
*** 11269,11275 ****
    }
  
  bool
! is_ascending_key(cbl_refer_t key)
    {
    bool retval = true;
  
--- 11316,11322 ----
    }
  
  bool
! is_ascending_key(const cbl_refer_t& key)
    {
    bool retval = true;
  
*************** is_ascending_key(cbl_refer_t key)
*** 11290,11296 ****
        {
        size_t index_of_field
          = family_tree->occurs.keys[i].field_list.fields[j];
!       cbl_field_t *key_field = cbl_field_of(symbol_at(index_of_field));
  
        if( strcmp( key_field->name,
                    key.field->name ) == 0 )
--- 11337,11343 ----
        {
        size_t index_of_field
          = family_tree->occurs.keys[i].field_list.fields[j];
!       const cbl_field_t *key_field = cbl_field_of(symbol_at(index_of_field));
  
        if( strcmp( key_field->name,
                    key.field->name ) == 0 )
*************** void
*** 11416,11423 ****
  parser_sort(cbl_refer_t tableref,
              bool duplicates,
              cbl_alphabet_t *alphabet,
!             size_t nkeys,
!             cbl_key_t *keys )
    {
    Analyze();
    SHOW_PARSE
--- 11463,11469 ----
  parser_sort(cbl_refer_t tableref,
              bool duplicates,
              cbl_alphabet_t *alphabet,
!             const std::vector<cbl_key_t>& keys )
    {
    Analyze();
    SHOW_PARSE
*************** parser_sort(cbl_refer_t tableref,
*** 11435,11456 ****
    gcc_assert(table->var_decl_node);
    if( !is_table(table) )
      {
!     cbl_internal_error(  "%s(): asked to sort %s, but it's not a table",
              __func__,
              tableref.field->name);
      }
!   size_t total_keys = 0;
!   for( size_t i=0; i<nkeys; i++ )
!     {
!     total_keys += keys[i].nfield;
!     }
!   cbl_field_t **flattened_fields = (cbl_field_t **)xmalloc(total_keys * sizeof(cbl_field_t *));
    size_t *flattened_ascending       = (size_t *)xmalloc(total_keys * sizeof(size_t));
  
    size_t key_index = 0;
!   for( size_t i=0; i<nkeys; i++ )
      {
!     for( size_t j=0; j<keys[i].nfield; j++ )
        {
        flattened_fields[key_index]    = keys[i].fields[j];
        flattened_ascending[key_index] = keys[i].ascending ? 1 : 0;
--- 11481,11502 ----
    gcc_assert(table->var_decl_node);
    if( !is_table(table) )
      {
!     cbl_internal_error(  "%s: asked to sort %s, which is not a table",
              __func__,
              tableref.field->name);
      }
!   size_t total_keys = std::accumulate( keys.begin(), keys.end(), 0,
!                                        [](size_t n, const cbl_key_t& key ) {
!                                          return n + key.fields.size();
!                                        } );
!   typedef const cbl_field_t * const_field_t;
!   const_field_t *flattened_fields = (const_field_t *)xmalloc(total_keys * sizeof(cbl_field_t *));
    size_t *flattened_ascending       = (size_t *)xmalloc(total_keys * sizeof(size_t));
  
    size_t key_index = 0;
!   for( size_t i=0; i<keys.size(); i++ )
      {
!     for( size_t j=0; j<keys[i].fields.size(); j++ )
        {
        flattened_fields[key_index]    = keys[i].fields[j];
        flattened_ascending[key_index] = keys[i].ascending ? 1 : 0;
*************** parser_sort(cbl_refer_t tableref,
*** 11459,11465 ****
      }
  
    // Create the array of cbl_field_t pointers for the keys
!   tree all_keys = gg_array_of_field_pointers( total_keys, flattened_fields);
  
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t( total_keys, flattened_ascending );
--- 11505,11512 ----
      }
  
    // Create the array of cbl_field_t pointers for the keys
!   tree all_keys = gg_array_of_field_pointers( total_keys,
!                                               const_cast<cbl_field_t**>(flattened_fields));
  
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t( total_keys, flattened_ascending );
*************** void
*** 11498,11505 ****
  parser_file_sort(   cbl_file_t *workfile,
                      bool duplicates,
                      cbl_alphabet_t *alphabet,
!                     size_t nkeys,
!                     cbl_key_t *keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
--- 11545,11551 ----
  parser_file_sort(   cbl_file_t *workfile,
                      bool duplicates,
                      cbl_alphabet_t *alphabet,
!                     const std::vector<cbl_key_t>& keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
*************** parser_file_sort(   cbl_file_t *workfile
*** 11563,11569 ****
    else
      {
      // Having both or neither violates SORT syntax
!     cbl_internal_error("%s(): syntax error -- both (or neither) USING "
            "and input-proc are specified",
            __func__);
      }
--- 11609,11615 ----
    else
      {
      // Having both or neither violates SORT syntax
!     cbl_internal_error("%s: syntax error: both (or neither) USING "
            "and input-proc are specified",
            __func__);
      }
*************** parser_file_sort(   cbl_file_t *workfile
*** 11576,11593 ****
    // clone of the code for handling multiple keys, each of which can have
    // multiple fields.
  
!   size_t total_keys = 0;
!   for( size_t i=0; i<nkeys; i++ )
!     {
!     total_keys += keys[i].nfield;
!     }
!   cbl_field_t **flattened_fields = (cbl_field_t **)xmalloc(total_keys * sizeof(cbl_field_t *));
    size_t *flattened_ascending    = (size_t *)      xmalloc(total_keys * sizeof(size_t));
  
    size_t key_index = 0;
!   for( size_t i=0; i<nkeys; i++ )
      {
!     for( size_t j=0; j<keys[i].nfield; j++ )
        {
        flattened_fields[key_index]    = keys[i].fields[j];
        flattened_ascending[key_index] = keys[i].ascending ? 1 : 0;
--- 11622,11639 ----
    // clone of the code for handling multiple keys, each of which can have
    // multiple fields.
  
!   size_t total_keys = std::accumulate( keys.begin(), keys.end(), 0,
!                                        []( size_t n, const cbl_key_t& key ) {
!                                          return n + key.fields.size();
!                                        } );
!   typedef const cbl_field_t * const_field_t;
!   auto flattened_fields = (const_field_t *)xmalloc(total_keys * sizeof(cbl_field_t *));
    size_t *flattened_ascending    = (size_t *)      xmalloc(total_keys * sizeof(size_t));
  
    size_t key_index = 0;
!   for( size_t i=0; i<keys.size(); i++ )
      {
!     for( size_t j=0; j<keys[i].fields.size(); j++ )
        {
        flattened_fields[key_index]    = keys[i].fields[j];
        flattened_ascending[key_index] = keys[i].ascending ? 1 : 0;
*************** parser_file_sort(   cbl_file_t *workfile
*** 11596,11602 ****
      }
  
    // Create the array of cbl_field_t pointers for the keys
!   tree all_keys = gg_array_of_field_pointers( total_keys, flattened_fields);
  
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t( total_keys, flattened_ascending );
--- 11642,11649 ----
      }
  
    // Create the array of cbl_field_t pointers for the keys
!   tree all_keys = gg_array_of_field_pointers( total_keys,
!                                               const_cast<cbl_field_t**>(flattened_fields));
  
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t( total_keys, flattened_ascending );
*************** parser_file_sort(   cbl_file_t *workfile
*** 11692,11698 ****
      }
    else
      {
!     cbl_internal_error("%s(): syntax error -- both (or neither) GIVING "
            "and output-proc are specified", __func__);
      }
    }
--- 11739,11745 ----
      }
    else
      {
!     cbl_internal_error("%s: syntax error: both (or neither) GIVING "
            "and output-proc are specified", __func__);
      }
    }
*************** gg_array_of_file_pointers(  size_t N,
*** 11898,11905 ****
  void
  parser_file_merge(  cbl_file_t *workfile,
                      cbl_alphabet_t *alphabet,
!                     size_t nkeys,
!                     cbl_key_t *keys,
                      size_t ninputs,
                      cbl_file_t **inputs,
                      size_t noutputs,
--- 11945,11951 ----
  void
  parser_file_merge(  cbl_file_t *workfile,
                      cbl_alphabet_t *alphabet,
!                     const std::vector<cbl_key_t>& keys,
                      size_t ninputs,
                      cbl_file_t **inputs,
                      size_t noutputs,
*************** parser_file_merge(  cbl_file_t *workfile
*** 11922,11941 ****
                  build_int_cst_type(INT, file_sequential_e));
      }
  
!   size_t total_keys = 0;
!   for( size_t i=0; i<nkeys; i++ )
!     {
!     total_keys += keys[i].nfield;
!     }
!   cbl_field_t **flattened_fields
!             = (cbl_field_t **)xmalloc(total_keys * sizeof(cbl_field_t *));
    size_t *flattened_ascending
              = (size_t *)xmalloc(total_keys * sizeof(size_t));
  
    size_t key_index = 0;
!   for( size_t i=0; i<nkeys; i++ )
      {
!     for( size_t j=0; j<keys[i].nfield; j++ )
        {
        flattened_fields[key_index]    = keys[i].fields[j];
        flattened_ascending[key_index] = keys[i].ascending ? 1 : 0;
--- 11968,11986 ----
                  build_int_cst_type(INT, file_sequential_e));
      }
  
!   size_t total_keys = std::accumulate( keys.begin(), keys.end(), 0,
!                                        []( size_t i, const cbl_key_t& key ) {
!                                          return i + key.fields.size();
!                                        } );
!   typedef const cbl_field_t * const_field_t;
!   const_field_t *flattened_fields = (const_field_t *)xmalloc(total_keys * sizeof(cbl_field_t *));
    size_t *flattened_ascending
              = (size_t *)xmalloc(total_keys * sizeof(size_t));
  
    size_t key_index = 0;
!   for( size_t i=0; i<keys.size(); i++ )
      {
!     for( size_t j=0; j<keys[i].fields.size(); j++ )
        {
        flattened_fields[key_index]    = keys[i].fields[j];
        flattened_ascending[key_index] = keys[i].ascending ? 1 : 0;
*************** parser_file_merge(  cbl_file_t *workfile
*** 11944,11950 ****
      }
  
    // Create the array of cbl_field_t pointers for the keys
!   tree all_keys = gg_array_of_field_pointers(total_keys, flattened_fields);
  
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t(total_keys, flattened_ascending);
--- 11989,11996 ----
      }
  
    // Create the array of cbl_field_t pointers for the keys
!   tree all_keys = gg_array_of_field_pointers(total_keys,
!                                              const_cast<cbl_field_t**>(flattened_fields));
  
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t(total_keys, flattened_ascending);
*************** parser_file_merge(  cbl_file_t *workfile
*** 12011,12017 ****
    gg_call(VOID,
            "__gg__merge_files",
            gg_get_address_of(workfile->var_decl_node),
!           build_int_cst_type(SIZE_T, nkeys),
            all_keys,
            ascending,
            build_int_cst_type(SIZE_T, ninputs),
--- 12057,12063 ----
    gg_call(VOID,
            "__gg__merge_files",
            gg_get_address_of(workfile->var_decl_node),
!           build_int_cst_type(SIZE_T, keys.size()),
            all_keys,
            ascending,
            build_int_cst_type(SIZE_T, ninputs),
*************** parser_file_merge(  cbl_file_t *workfile
*** 12105,12111 ****
      }
    else
      {
!     cbl_internal_error("%s(): syntax error -- both (or neither) "
            "files and output-proc are specified", __func__);
      }
    }
--- 12151,12157 ----
      }
    else
      {
!     cbl_internal_error("%s: syntax error: both (or neither) "
            "files and output-proc are specified", __func__);
      }
    }
*************** parser_unstring(cbl_refer_t src,
*** 12183,12189 ****
      gg_append_statement(not_overflow->structs.unstring->over.label);
      }
  
!   cbl_refer_t *delims = (cbl_refer_t *)xmalloc(ndelimited * sizeof(cbl_refer_t));
    char *alls = (char *)xmalloc(ndelimited+1);
  
    for(size_t i=0; i<ndelimited; i++)
--- 12229,12235 ----
      gg_append_statement(not_overflow->structs.unstring->over.label);
      }
  
!   std::vector<cbl_refer_t> delims(ndelimited);
    char *alls = (char *)xmalloc(ndelimited+1);
  
    for(size_t i=0; i<ndelimited; i++)
*************** parser_unstring(cbl_refer_t src,
*** 12195,12201 ****
  
    tree t_alls         = build_string_literal(ndelimited+1, alls);
  
!   build_array_of_treeplets(1, ndelimited, delims);
    build_array_of_treeplets(2, noutputs,   outputs);
    build_array_of_treeplets(3, noutputs,   delimiters);
    build_array_of_treeplets(4, noutputs,   counts);
--- 12241,12247 ----
  
    tree t_alls         = build_string_literal(ndelimited+1, alls);
  
!   build_array_of_treeplets(1, ndelimited, delims.data());
    build_array_of_treeplets(2, noutputs,   outputs);
    build_array_of_treeplets(3, noutputs,   delimiters);
    build_array_of_treeplets(4, noutputs,   counts);
*************** parser_unstring(cbl_refer_t src,
*** 12219,12225 ****
                            NULL_TREE)
                            );
    free(alls);
-   free(delims);
  
    if( overflow )
      {
--- 12265,12270 ----
*************** parser_unstring(cbl_refer_t src,
*** 12255,12266 ****
    }
  
  void
! parser_string(  cbl_refer_t tgt,
!                 cbl_refer_t pointer,
!                 size_t nsource,
!                 cbl_string_src_t *sources,
!                 cbl_label_t *overflow,
!                 cbl_label_t *not_overflow )
    {
    SHOW_PARSE
      {
--- 12300,12311 ----
    }
  
  void
! parser_string(const cbl_refer_t& tgt,
!               const cbl_refer_t& pointer,
!               size_t nsource,
!               cbl_string_src_t *sources,
!               cbl_label_t *overflow,
!               cbl_label_t *not_overflow )
    {
    SHOW_PARSE
      {
*************** parser_string(  cbl_refer_t tgt,
*** 12286,12292 ****
      cblc_count += 1 + sources[i].ninput; // 1 for identifier_2 + ninput identifier_1 values;
      }
  
!   cbl_refer_t *refers = (cbl_refer_t *)xmalloc(cblc_count * sizeof(cbl_refer_t));
  
    size_t index_int = 0;
    size_t index_cblc = 0;
--- 12331,12337 ----
      cblc_count += 1 + sources[i].ninput; // 1 for identifier_2 + ninput identifier_1 values;
      }
  
!   std::vector<cbl_refer_t> refers(cblc_count);
  
    size_t index_int = 0;
    size_t index_cblc = 0;
*************** parser_string(  cbl_refer_t tgt,
*** 12311,12317 ****
  
    tree pintegers = build_array_of_size_t( index_int, integers);
  
!   build_array_of_treeplets(1, index_cblc, refers);
  
    tree t_overflow = gg_define_int();
    gg_assign(t_overflow, gg_call_expr( INT,
--- 12356,12362 ----
  
    tree pintegers = build_array_of_size_t( index_int, integers);
  
!   build_array_of_treeplets(1, index_cblc, refers.data());
  
    tree t_overflow = gg_define_int();
    gg_assign(t_overflow, gg_call_expr( INT,
*************** parser_string(  cbl_refer_t tgt,
*** 12321,12327 ****
    gg_free(pintegers);
  
    free(integers);
-   free(refers);
  
    if( overflow )
      {
--- 12366,12371 ----
*************** create_and_call(size_t narg,
*** 12758,12764 ****
      else
        {
        cbl_internal_error(
!             "%s(): What in the name of Nero's fiddle are we doing here?",
              __func__);
        }
      }
--- 12802,12808 ----
      else
        {
        cbl_internal_error(
!             "%s: What in the name of Nero are we doing here?",
              __func__);
        }
      }
*************** parser_call(   cbl_refer_t name,
*** 12813,12819 ****
      SHOW_PARSE_TEXT(" (")
      for(size_t i=0; i<narg; i++)
        {
!       cbl_field_t *p = args[i].refer.field;
        SHOW_PARSE_FIELD( " ",  p)
        }
      SHOW_PARSE_TEXT(" )")
--- 12857,12863 ----
      SHOW_PARSE_TEXT(" (")
      for(size_t i=0; i<narg; i++)
        {
!       const cbl_field_t *p = args[i].refer.field;
        SHOW_PARSE_FIELD( " ",  p)
        }
      SHOW_PARSE_TEXT(" )")
*************** parser_bitop( struct cbl_field_t *tgt,
*** 12998,13004 ****
    if(tgt && tgt->type != FldConditional)
      {
      fprintf(stderr,
!             "%s(): The target %s has to be a FldConditional, not %s\n",
              __func__,
              tgt->name,
              cbl_field_type_str(tgt->type));
--- 13042,13048 ----
    if(tgt && tgt->type != FldConditional)
      {
      fprintf(stderr,
!             "%s: The target %s has to be a FldConditional, not %s\n",
              __func__,
              tgt->name,
              cbl_field_type_str(tgt->type));
*************** parser_bitop( struct cbl_field_t *tgt,
*** 13035,13041 ****
      case bit_or_op:
      case bit_xor_op:
        fprintf(stderr,
!               "%s(): The %s operation is not valid\n",
                __func__,
                ops[op]);
        gcc_unreachable();
--- 13079,13085 ----
      case bit_or_op:
      case bit_xor_op:
        fprintf(stderr,
!               "%s: The %s operation is not valid\n",
                __func__,
                ops[op]);
        gcc_unreachable();
*************** parser_bitwise_op(struct cbl_field_t *tg
*** 13082,13088 ****
    if( tgt && !is_valuable(tgt->type) && tgt->type != FldLiteralN)
      {
      fprintf(stderr,
!             "%s(): The target %s has to be is_valuable, not %s\n",
              __func__,
              tgt->name,
              cbl_field_type_str(tgt->type));
--- 13126,13132 ----
    if( tgt && !is_valuable(tgt->type) && tgt->type != FldLiteralN)
      {
      fprintf(stderr,
!             "%s: The target %s has to be is_valuable, not %s\n",
              __func__,
              tgt->name,
              cbl_field_type_str(tgt->type));
*************** parser_bitwise_op(struct cbl_field_t *tg
*** 13096,13102 ****
      case bit_on_op:
      case bit_off_op:
        fprintf(stderr,
!               "%s(): The %s operation is not valid\n",
                __func__,
                ops[op]);
        gcc_unreachable();
--- 13140,13146 ----
      case bit_on_op:
      case bit_off_op:
        fprintf(stderr,
!               "%s: The %s operation is not valid\n",
                __func__,
                ops[op]);
        gcc_unreachable();
*************** typedef struct hier_node
*** 13203,13209 ****
    hier_node() :
      our_index(0),
      common(false),
!     parent_node(NULL)
      {}
    } hier_node;
  
--- 13247,13254 ----
    hier_node() :
      our_index(0),
      common(false),
!     parent_node(nullptr),
!     name(nullptr)
      {}
    } hier_node;
  
*************** find_uncles(const hier_node *node, std::
*** 13247,13253 ****
    }
  
  void
! parser_program_hierarchy( const struct cbl_prog_hier_t& hier )
    {
    Analyze();
    /*  This routine gets called near the end of every program-id.  It keeps
--- 13292,13298 ----
    }
  
  void
! parser_program_hierarchy( const cbl_prog_hier_t& hier )
    {
    Analyze();
    /*  This routine gets called near the end of every program-id.  It keeps
*************** parser_program_hierarchy( const struct c
*** 13265,13271 ****
        }
      else
        {
!       for( size_t i=0; i<hier.nlabel; i++ )
          {
          if( i )
            {
--- 13310,13316 ----
        }
      else
        {
!       for( size_t i=0; i<hier.labels.size(); i++ )
          {
          if( i )
            {
*************** parser_program_hierarchy( const struct c
*** 13320,13328 ****
    node_map[0] = nodes.back();
  
    // Pass 1: Create a node for every program:
!   for( size_t i=0; i<hier.nlabel; i++ )
      {
!     hier_node *existing_node = find_hier_node(node_map, hier.labels[i].ordinal);
      gcc_assert( existing_node == NULL );
  
      hier_node *new_node = new hier_node;
--- 13365,13373 ----
    node_map[0] = nodes.back();
  
    // Pass 1: Create a node for every program:
!   for( size_t i=0; i<hier.labels.size(); i++ )
      {
!     const hier_node *existing_node = find_hier_node(node_map, hier.labels[i].ordinal);
      gcc_assert( existing_node == NULL );
  
      hier_node *new_node = new hier_node;
*************** parser_program_hierarchy( const struct c
*** 13334,13340 ****
      }
  
    // Pass 2: populate each node with their parent and children:
!   for( size_t i=0; i<hier.nlabel; i++ )
      {
      hier_node *child_node = find_hier_node(node_map, hier.labels[i].ordinal);
      gcc_assert(child_node);
--- 13379,13385 ----
      }
  
    // Pass 2: populate each node with their parent and children:
!   for( size_t i=0; i<hier.labels.size(); i++ )
      {
      hier_node *child_node = find_hier_node(node_map, hier.labels[i].ordinal);
      gcc_assert(child_node);
*************** hijack_for_development(const char *funcn
*** 13708,13714 ****
    // Assume that funcname is lowercase with no hyphens
    enter_program_common(funcname, funcname);
    parser_display_literal("You have been hijacked by a program named \"dubner\"");
!   gg_insert_into_assembler("%s HIJACKED DUBNER CODE START", ASM_COMMENT_START);
  
    for(int i=0; i<10; i++)
      {
--- 13753,13759 ----
    // Assume that funcname is lowercase with no hyphens
    enter_program_common(funcname, funcname);
    parser_display_literal("You have been hijacked by a program named \"dubner\"");
!   gg_insert_into_assemblerf("%s HIJACKED DUBNER CODE START", ASM_COMMENT_START);
  
    for(int i=0; i<10; i++)
      {
*************** hijack_for_development(const char *funcn
*** 13721,13732 ****
              NULL_TREE);
      }
  
!   gg_insert_into_assembler("%s HIJACKED DUBNER CODE END", ASM_COMMENT_START);
    gg_return(0);
    }
  
  static void
! conditional_abs(tree source, cbl_field_t *field)
    {
    Analyze();
    if( !(field->attr & signable_e) )
--- 13766,13777 ----
              NULL_TREE);
      }
  
!   gg_insert_into_assemblerf("%s HIJACKED DUBNER CODE END", ASM_COMMENT_START);
    gg_return(0);
    }
  
  static void
! conditional_abs(tree source, const cbl_field_t *field)
    {
    Analyze();
    if( !(field->attr & signable_e) )
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 14042,14049 ****
  
        default:
          cbl_internal_error(
!               "In parser_move(%s to %s), the move of FldLiteralN to %s "
!               "hasn't been implemented",
                sourceref.field->name,
                destref.field->name,
                cbl_field_type_str(destref.field->type));
--- 14087,14094 ----
  
        default:
          cbl_internal_error(
!               "In %<parser_move(%s to %s)%>, the move of FldLiteralN to %s "
!               "is unimplemented",
                sourceref.field->name,
                destref.field->name,
                cbl_field_type_str(destref.field->type));
*************** tree float_type_of(int n)
*** 14071,14077 ****
    }
  
  static tree
! float_type_of(cbl_field_t *field)
    {
    gcc_assert(field->type == FldFloat);
    return float_type_of(field->data.capacity);
--- 14116,14122 ----
    }
  
  static tree
! float_type_of(const cbl_field_t *field)
    {
    gcc_assert(field->type == FldFloat);
    return float_type_of(field->data.capacity);
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 14278,14285 ****
          }
  
        default:
!         cbl_internal_error("In mh_dest_is_float(%s to %s), the "
!                            "move of %s to %s hasn't been implemented",
                sourceref.field->name,
                destref.field->name,
                cbl_field_type_str(sourceref.field->type),
--- 14323,14330 ----
          }
  
        default:
!         cbl_internal_error("In %<mh_dest_is_float%>(%s to %s), the "
!                            "move of %s to %s is unimplemented",
                sourceref.field->name,
                destref.field->name,
                cbl_field_type_str(sourceref.field->type),
*************** initial_from_initial(cbl_field_t *field)
*** 15554,15560 ****
  
        digits_from_float128(ach, field, field->data.digits, rdigits, value);
  
!       char *digits = ach;
        if(    (field->attr & signable_e)
            && (field->attr & separate_e)
            && (field->attr & leading_e ) )
--- 15599,15605 ----
  
        digits_from_float128(ach, field, field->data.digits, rdigits, value);
  
!       const char *digits = ach;
        if(    (field->attr & signable_e)
            && (field->attr & separate_e)
            && (field->attr & leading_e ) )
*************** initial_from_initial(cbl_field_t *field)
*** 15643,15649 ****
                         : field->data.capacity * 2 - 1;
        digits_from_float128(ach, field, ndigits, rdigits, value);
  
!       char *digits = ach;
        for(size_t i=0; i<ndigits; i++)
          {
          if( !(i & 0x01) )
--- 15688,15694 ----
                         : field->data.capacity * 2 - 1;
        digits_from_float128(ach, field, ndigits, rdigits, value);
  
!       const char *digits = ach;
        for(size_t i=0; i<ndigits; i++)
          {
          if( !(i & 0x01) )
*************** initial_from_initial(cbl_field_t *field)
*** 15711,15732 ****
        retval = (char *)xmalloc(field->data.capacity+1);
        if( field->data.initial && field->attr & quoted_e )
          {
!         if( field->attr & quoted_e )
            {
!           // What the programmer says the value is, the value becomes, no
!           // matter how wrong it might be.
!           size_t length = std::min( (size_t)field->data.capacity,
!                                     strlen(field->data.initial));
!           for(size_t i=0; i<length; i++)
!             {
!             retval[i] = ascii_to_internal(field->data.initial[i]);
!             }
!           if( length < (size_t)field->data.capacity )
!             {
!             memset( retval+length,
!                     internal_space,
!                     (size_t)field->data.capacity - length);
!             }
            }
          }
        else
--- 15756,15774 ----
        retval = (char *)xmalloc(field->data.capacity+1);
        if( field->data.initial && field->attr & quoted_e )
          {
!         // What the programmer says the value is, the value becomes, no
!         // matter how wrong it might be.
!         size_t length = std::min( (size_t)field->data.capacity,
!                                   strlen(field->data.initial));
!         for(size_t i=0; i<length; i++)
            {
!           retval[i] = ascii_to_internal(field->data.initial[i]);
!           }
!         if( length < (size_t)field->data.capacity )
!           {
!           memset( retval+length,
!                   internal_space,
!                   (size_t)field->data.capacity - length);
            }
          }
        else
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16311,16317 ****
      {
      do
        {
!       fprintf(stderr, "( %d ) %s():", CURRENT_LINE_NUMBER, __func__);
        }
      while(0);
  
--- 16353,16359 ----
      {
      do
        {
!       fprintf(stderr, "( %d ) %s:", CURRENT_LINE_NUMBER, __func__);
        }
      while(0);
  
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16333,16339 ****
        fprintf(stderr," OCCURS:" HOST_SIZE_T_PRINT_DEC,
                (fmt_size_t)new_var->occurs.ntimes());
        }
!     cbl_field_t *parent = parent_of(new_var);
      if( parent )
        {
        fprintf(stderr,
--- 16375,16381 ----
        fprintf(stderr," OCCURS:" HOST_SIZE_T_PRINT_DEC,
                (fmt_size_t)new_var->occurs.ntimes());
        }
!     const cbl_field_t *parent = parent_of(new_var);
      if( parent )
        {
        fprintf(stderr,
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16347,16353 ****
        size_t parent_index = new_var->parent;
        if( parent_index )
          {
!         symbol_elem_t *e = symbol_at(parent_index);
          if( e->type == SymFile )
            {
            fprintf(stderr,
--- 16389,16395 ----
        size_t parent_index = new_var->parent;
        if( parent_index )
          {
!         const symbol_elem_t *e = symbol_at(parent_index);
          if( e->type == SymFile )
            {
            fprintf(stderr,
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16449,16455 ****
      //  Make sure we have a new variable to work with.
      if( !new_var )
        {
!       cbl_internal_error("parser_symbol_add() was called with a NULL new_var\n");
        }
  
      TRACE1
--- 16491,16497 ----
      //  Make sure we have a new variable to work with.
      if( !new_var )
        {
!       cbl_internal_error("%<parser_symbol_add()%> was called with a NULL %<new_var%>");
        }
  
      TRACE1
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16477,16483 ****
      if( is_table(new_var) && new_var->data.capacity == 0)
        {
        cbl_internal_error(
!           "%s(): %2.2d %s is a table, but it improperly has a capacity of zero",
             __func__,
             new_var->level,
             new_var->name);
--- 16519,16525 ----
      if( is_table(new_var) && new_var->data.capacity == 0)
        {
        cbl_internal_error(
!           "%s: %d %s is a table, but it improperly has a capacity of zero",
             __func__,
             new_var->level,
             new_var->name);
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16517,16539 ****
  
      if( ancestor == new_var )
        {
!       cbl_internal_error("parser_symbol_add(): %s is its own ancestor",
!                           new_var->name);
        }
  
      if( !ancestor && (new_var->level > LEVEL01 && new_var->level <= LEVEL49 ) )
        {
!       cbl_internal_error("parser_symbol_add(): %2.2d %s has null ancestor",
!             new_var->level,
!             new_var->name);
        }
  
      //  new_var's var_decl_node should be NULL at this point
      if( new_var->var_decl_node )
        {
!       cbl_internal_error( "parser_symbol_add( %s ) improperly has a non-null "
!              "var_decl_node\n",
!              new_var->name);
        }
  
      switch( new_var->type )
--- 16559,16578 ----
  
      if( ancestor == new_var )
        {
!       cbl_internal_error("%s: %s is its own ancestor", __func__, new_var->name);
        }
  
      if( !ancestor && (new_var->level > LEVEL01 && new_var->level <= LEVEL49 ) )
        {
!       cbl_internal_error("%s: %d %qs has NULL ancestor", __func__, 
!                          new_var->level, new_var->name);
        }
  
      //  new_var's var_decl_node should be NULL at this point
      if( new_var->var_decl_node )
        {
!       cbl_internal_error( "%s(%s) improperly has a non-null "
!                           "%<var_decl_node%>", __func__, new_var->name);
        }
  
      switch( new_var->type )
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16727,16733 ****
          && new_var->type  != FldLiteralN
          && new_var->type  != FldLiteralA )
        {
!       cbl_internal_error(  "%s(): %2.2d %s<%s> improperly has a data.capacity of zero",
                __func__,
                new_var->level,
                new_var->name,
--- 16766,16772 ----
          && new_var->type  != FldLiteralN
          && new_var->type  != FldLiteralA )
        {
!       cbl_internal_error(  "%s: %d %s<%s> improperly has a data.capacity of zero",
                __func__,
                new_var->level,
                new_var->name,
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16747,16756 ****
      if( *external_record_base )
        {
        char achDataName[256];
!       if( *external_record_base )
!         {
!         sprintf(achDataName, "__%s_vardata", external_record_base);
!         }
        tree array_type = build_array_type_nelts(UCHAR, new_var->data.capacity);
        new_var->data_decl_node = gg_define_variable(
                            array_type,
--- 16786,16792 ----
      if( *external_record_base )
        {
        char achDataName[256];
!       sprintf(achDataName, "__%s_vardata", external_record_base);
        tree array_type = build_array_type_nelts(UCHAR, new_var->data.capacity);
        new_var->data_decl_node = gg_define_variable(
                            array_type,
*************** parser_symbol_add(struct cbl_field_t *ne
*** 16797,16808 ****
  
          if( !bytes_to_allocate )
            {
!           fprintf(stderr,
!                   "bytes_to_allocate is zero for %s (symbol number "
!                   HOST_SIZE_T_PRINT_DEC ")\n",
!                   new_var->name,
!                   (fmt_size_t)new_var->our_index);
!           gcc_assert(bytes_to_allocate);
            }
  
          if( new_var->type == FldIndex && new_var->level == 0 )
--- 16833,16842 ----
  
          if( !bytes_to_allocate )
            {
!           cbl_internal_error( "%<bytes_to_allocate%> is zero for %s (symbol number "
!                               HOST_SIZE_T_PRINT_DEC ")",
!                               new_var->name,
!                               (fmt_size_t)new_var->our_index);
            }
  
          if( new_var->type == FldIndex && new_var->level == 0 )
diff -Nrcpad gcc-16-20250615/gcc/cobol/genapi.h gcc-16-20250622/gcc/cobol/genapi.h
*** gcc-16-20250615/gcc/cobol/genapi.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/genapi.h	Sun Jun 22 22:32:19 2025
*************** parser_divide(size_t nC, cbl_num_result_
*** 119,144 ****
                void *compute_error = NULL);  // This has to be cast to a tree pointer to int
  
  void
! parser_add( struct cbl_refer_t tgt,
!             struct cbl_refer_t a, struct cbl_refer_t b,
              enum cbl_round_t = truncation_e );
  
  void
! parser_subtract( struct cbl_refer_t tgt,
!                  struct cbl_refer_t a, struct cbl_refer_t b,
                   enum cbl_round_t = truncation_e );
  
  void
! parser_multiply( struct cbl_refer_t tgt,
!                  struct cbl_refer_t a, struct cbl_refer_t b,
                   enum cbl_round_t = truncation_e );
  
  void
! parser_divide( struct cbl_refer_t quotient,
!                struct cbl_refer_t divisor,
!                struct cbl_refer_t dividend,
                 enum cbl_round_t = truncation_e,
!                struct cbl_refer_t remainder = cbl_refer_t());
  
  // void
  // parser_exponentiation(  cbl_refer_t cref,
--- 119,144 ----
                void *compute_error = NULL);  // This has to be cast to a tree pointer to int
  
  void
! parser_add( const cbl_refer_t& tgt,
!             const cbl_refer_t& a,  const cbl_refer_t& b,
              enum cbl_round_t = truncation_e );
  
  void
! parser_subtract( const cbl_refer_t& tgt,
!                  const cbl_refer_t& a,  const cbl_refer_t& b,
                   enum cbl_round_t = truncation_e );
  
  void
! parser_multiply( const cbl_refer_t& tgt,
!                  const cbl_refer_t& a,  const cbl_refer_t& b,
                   enum cbl_round_t = truncation_e );
  
  void
! parser_divide( const cbl_refer_t& quotient,
!                const cbl_refer_t& divisor,
!                const cbl_refer_t& dividend,
                 enum cbl_round_t = truncation_e,
!                const cbl_refer_t& remainder = cbl_refer_t());
  
  // void
  // parser_exponentiation(  cbl_refer_t cref,
*************** parser_perform_conditional_end( struct c
*** 225,231 ****
   * For an in-line loop body, tgt->from.type == LblLoop, and tgt->to is NULL.
   */
  void
! parser_perform( struct cbl_perform_tgt_t *tgt, struct cbl_refer_t N );
  
  /*
   * A simple UNTIL loop uses 1 varys element.  For VARY loops, the
--- 225,231 ----
   * For an in-line loop body, tgt->from.type == LblLoop, and tgt->to is NULL.
   */
  void
! parser_perform( const cbl_perform_tgt_t *tgt, cbl_refer_t N );
  
  /*
   * A simple UNTIL loop uses 1 varys element.  For VARY loops, the
*************** parser_end_program(const char *name=NULL
*** 255,261 ****
  
  void parser_sleep(cbl_refer_t seconds);
  
! void parser_exit( cbl_refer_t refer, ec_type_t = ec_none_e );
  void parser_exit_section(void);
  void parser_exit_paragraph(void);
  void parser_exit_perform( struct cbl_perform_tgt_t *tgt, bool cycle );
--- 255,261 ----
  
  void parser_sleep(cbl_refer_t seconds);
  
! void parser_exit( const cbl_refer_t& refer, ec_type_t = ec_none_e );
  void parser_exit_section(void);
  void parser_exit_paragraph(void);
  void parser_exit_perform( struct cbl_perform_tgt_t *tgt, bool cycle );
*************** void
*** 297,303 ****
  parser_symbol_add(struct cbl_field_t *field);
  
  void
! parser_initialize(struct cbl_refer_t refer, bool like_parser_symbol_add=false);
  
  void
  parser_initialize_programs(size_t nprog, struct cbl_refer_t *progs);
--- 297,303 ----
  parser_symbol_add(struct cbl_field_t *field);
  
  void
! parser_initialize(const cbl_refer_t& refer, bool like_parser_symbol_add=false);
  
  void
  parser_initialize_programs(size_t nprog, struct cbl_refer_t *progs);
*************** void
*** 315,321 ****
  parser_alter( cbl_perform_tgt_t *tgt );
  
  void
! parser_set_conditional88( struct cbl_refer_t tgt, bool which_way );
  void
  parser_set_numeric(struct cbl_field_t *tgt, ssize_t value);
  
--- 315,321 ----
  parser_alter( cbl_perform_tgt_t *tgt );
  
  void
! parser_set_conditional88( const cbl_refer_t& tgt, bool which_way );
  void
  parser_set_numeric(struct cbl_field_t *tgt, ssize_t value);
  
*************** void
*** 406,419 ****
  parser_sort(cbl_refer_t table,
              bool duplicates,
              cbl_alphabet_t *alphabet,
!             size_t nkey,
!             cbl_key_t *keys );
  void
  parser_file_sort(   cbl_file_t *file,
                      bool duplicates,
                      cbl_alphabet_t *alphabet,
!                     size_t nkey,
!                     cbl_key_t *keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
--- 406,417 ----
  parser_sort(cbl_refer_t table,
              bool duplicates,
              cbl_alphabet_t *alphabet,
!             const std::vector<cbl_key_t>& keys );
  void
  parser_file_sort(   cbl_file_t *file,
                      bool duplicates,
                      cbl_alphabet_t *alphabet,
!                     const std::vector<cbl_key_t>& keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
*************** parser_file_sort(   cbl_file_t *file,
*** 423,430 ****
  void
  parser_file_merge(  cbl_file_t *file,
                      cbl_alphabet_t *alphabet,
!                     size_t nkey,
!                     cbl_key_t *keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
--- 421,427 ----
  void
  parser_file_merge(  cbl_file_t *file,
                      cbl_alphabet_t *alphabet,
!                     const std::vector<cbl_key_t>& keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
*************** void
*** 492,503 ****
  parser_string_overflow_end( cbl_label_t *name );
  
  void
! parser_string(  cbl_refer_t tgt,
!                 cbl_refer_t pointer,
!                 size_t nsource,
!                 cbl_string_src_t *sources,
!                 cbl_label_t *overflow,
!                 cbl_label_t *not_overflow );
  
  void
  parser_unstring( cbl_refer_t src,
--- 489,500 ----
  parser_string_overflow_end( cbl_label_t *name );
  
  void
! parser_string(const cbl_refer_t& tgt,
!               const cbl_refer_t& pointer,
!               size_t nsource,
!               cbl_string_src_t *sources,
!               cbl_label_t *overflow,
!               cbl_label_t *not_overflow );
  
  void
  parser_unstring( cbl_refer_t src,
*************** void parser_entry_activate( size_t iprog
*** 552,558 ****
  void parser_entry( cbl_field_t *name,
                     size_t narg = 0, cbl_ffi_arg_t args[] = NULL);
  
! bool is_ascending_key(cbl_refer_t key);
  
  void register_main_switch(const char *main_string);
  
--- 549,555 ----
  void parser_entry( cbl_field_t *name,
                     size_t narg = 0, cbl_ffi_arg_t args[] = NULL);
  
! bool is_ascending_key(const cbl_refer_t& key);
  
  void register_main_switch(const char *main_string);
  
diff -Nrcpad gcc-16-20250615/gcc/cobol/gengen.cc gcc-16-20250622/gcc/cobol/gengen.cc
*** gcc-16-20250615/gcc/cobol/gengen.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/gengen.cc	Sun Jun 22 22:32:19 2025
*************** show_type(tree type)
*** 360,366 ****
    {
    if( !type )
      {
!     cbl_internal_error("The given type is not NULL, and that's just not fair");
      }
  
    if( DECL_P(type) )
--- 360,366 ----
    {
    if( !type )
      {
!     cbl_internal_error("The given type is not NULL, and that is just not fair");
      }
  
    if( DECL_P(type) )
*************** show_type(tree type)
*** 369,375 ****
      }
    if( !TYPE_P(type) )
      {
!     cbl_internal_error("The given type is not a DECL or a TYPE");
      }
  
    static char ach[1024];
--- 369,375 ----
      }
    if( !TYPE_P(type) )
      {
!     cbl_internal_error("The given type is not a declaration or a TYPE");
      }
  
    static char ach[1024];
*************** gg_find_field_in_struct(const tree base,
*** 520,527 ****
  
    if( !field_decl )
      {
!     yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!     yywarn("###### Somebody asked for the field %s.%s, which doesn't exist",
            IDENTIFIER_POINTER(DECL_NAME(base)),
            field_name);
      gcc_unreachable();
--- 520,526 ----
  
    if( !field_decl )
      {
!     yywarn("Somebody asked for the field %s.%s, which does not exist",
            IDENTIFIER_POINTER(DECL_NAME(base)),
            field_name);
      gcc_unreachable();
*************** gg_declare_variable(tree type_decl,
*** 933,939 ****
    // causes the storage to be allocated.
  
    // It is routine to let the compiler assign names to stack variables.  The
!   // assembly code doesn't use names for variables on the stack; they are
    // referenced by offsets to the base pointer.  But static variables have to
    // have names, and there are places in my code generation -- Lord only knows
    // why -- where I didn't give the variables explicit names.  We remedy that
--- 932,938 ----
    // causes the storage to be allocated.
  
    // It is routine to let the compiler assign names to stack variables.  The
!   // assembly code does not use names for variables on the stack; they are
    // referenced by offsets to the base pointer.  But static variables have to
    // have names, and there are places in my code generation -- Lord only knows
    // why -- where I didn't give the variables explicit names.  We remedy that
*************** gg_printf(const char *format_string, ...
*** 2161,2168 ****
      {
      if(nargs >= ARG_LIMIT)
        {
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!       yywarn("###### You *must* be joking!");
        gcc_unreachable();
        }
  
--- 2160,2166 ----
      {
      if(nargs >= ARG_LIMIT)
        {
!       yywarn("You *must* be joking");
        gcc_unreachable();
        }
  
*************** gg_printf(const char *format_string, ...
*** 2170,2179 ****
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You nitwit!");
!       yywarn("You forgot to put a NULL_TREE at the end of a "
!                   "gg_printf() again!");
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
        gcc_unreachable();
        }
  
--- 2168,2175 ----
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You forgot to put a %<NULL_TREE%> at the end of a "
!                   "%<gg_printf()%> again");
        gcc_unreachable();
        }
  
*************** gg_fprintf(tree fd, int nargs, const cha
*** 2219,2226 ****
      {
      if(argc >= ARG_LIMIT)
        {
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!       yywarn("###### You *must* be joking!");
        gcc_unreachable();
        }
  
--- 2215,2221 ----
      {
      if(argc >= ARG_LIMIT)
        {
!       yywarn("You *must* be joking");
        gcc_unreachable();
        }
  
*************** gg_tack_on_function_parameters(tree func
*** 2601,2610 ****
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You nitwit!");
!       yywarn("You forgot to put a NULL_TREE at the end of a "
!                   "gg_define_function() again!");
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
        gcc_unreachable();
        }
  
--- 2596,2603 ----
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You forgot to put a %<NULL_TREE%> at the end of a "
!                   "%<gg_define_function()%> again");
        gcc_unreachable();
        }
  
*************** gg_tack_on_function_parameters(tree func
*** 2615,2622 ****
      nparams += 1;
      if(nparams > ARG_LIMIT)
        {
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!       yywarn("###### %d parameters?  Really?  Are you insane?",ARG_LIMIT+1);
        gcc_unreachable();
        }
      }
--- 2608,2614 ----
      nparams += 1;
      if(nparams > ARG_LIMIT)
        {
!       yywarn("%d parameters? Really? Are you insane?",ARG_LIMIT+1);
        gcc_unreachable();
        }
      }
*************** gg_define_function(tree return_type, con
*** 2657,2666 ****
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You nitwit!");
!       yywarn("You forgot to put a NULL_TREE at the end of a "
!                   "gg_define_function() again!");
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
        gcc_unreachable();
        }
  
--- 2649,2656 ----
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You forgot to put a %<NULL_TREE%> at the end of a "
!                   "%<gg_define_function()%> again");
        gcc_unreachable();
        }
  
*************** gg_define_function(tree return_type, con
*** 2671,2679 ****
      nparams += 1;
      if(nparams > ARG_LIMIT)
        {
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!       yywarn("###### %d parameters?  Really?  Are you insane?",
!                   ARG_LIMIT+1);
        gcc_unreachable();
        }
      }
--- 2661,2667 ----
      nparams += 1;
      if(nparams > ARG_LIMIT)
        {
!       yywarn("%d parameters? Really? Are you insane?", ARG_LIMIT+1);
        gcc_unreachable();
        }
      }
*************** gg_get_function_decl(tree return_type, c
*** 2785,2794 ****
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You nitwit!");
!       yywarn("You forgot to put a NULL_TREE at the end of a "
!             "gg_define_function() again!");
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
        gcc_unreachable();
        }
  
--- 2773,2780 ----
        {
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
!       yywarn("You forgot to put a %<NULL_TREE%> at the end of a "
!             "%<gg_define_function()%> again");
        gcc_unreachable();
        }
  
*************** gg_get_function_decl(tree return_type, c
*** 2799,2806 ****
      nparams += 1;
      if(nparams > ARG_LIMIT)
        {
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!       yywarn("###### %d parameters?  Really?  Are you insane?",
                    ARG_LIMIT+1);
        gcc_unreachable();
        }
--- 2785,2791 ----
      nparams += 1;
      if(nparams > ARG_LIMIT)
        {
!       yywarn("%d parameters? Really? Are you insane?",
                    ARG_LIMIT+1);
        gcc_unreachable();
        }
*************** gg_finalize_function()
*** 2909,2915 ****
  
      /* Register this function with cgraph just far enough to get it
      added to our parent's nested function list.  Handy, since the
!     C front end doesn't have such a list.  */
  
      static cgraph_node *node = cgraph_node::get_create (current_function->function_decl);
      gcc_assert(node);
--- 2894,2900 ----
  
      /* Register this function with cgraph just far enough to get it
      added to our parent's nested function list.  Handy, since the
!     C front end does not have such a list.  */
  
      static cgraph_node *node = cgraph_node::get_create (current_function->function_decl);
      gcc_assert(node);
*************** gg_finalize_function()
*** 2925,2931 ****
  
    if( gg_trans_unit.function_stack.back().context_count )
      {
!     cbl_internal_error("Residual context count!");
      }
  
    gg_trans_unit.function_stack.pop_back();
--- 2910,2916 ----
  
    if( gg_trans_unit.function_stack.back().context_count )
      {
!     cbl_internal_error("Residual context count");
      }
  
    gg_trans_unit.function_stack.pop_back();
*************** gg_call_expr(tree return_type, const cha
*** 3070,3077 ****
      {
      if(nargs >= ARG_LIMIT)
        {
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!       yywarn("###### You *must* be joking!");
        gcc_unreachable();
        }
  
--- 3055,3061 ----
      {
      if(nargs >= ARG_LIMIT)
        {
!       yywarn("You *must* be joking");
        gcc_unreachable();
        }
  
*************** gg_call(tree return_type, const char *fu
*** 3127,3134 ****
      {
      if(nargs >= ARG_LIMIT)
        {
!       yywarn("###### %10s in %s:%d", __func__, __FILE__,__LINE__ );
!       yywarn("###### You *must* be joking!");
        gcc_unreachable();
        }
  
--- 3111,3117 ----
      {
      if(nargs >= ARG_LIMIT)
        {
!       yywarn("You *must* be joking");
        gcc_unreachable();
        }
  
*************** gg_trans_unit_var_decl(const char *var_n
*** 3425,3431 ****
    }
  
  void
! gg_insert_into_assembler(const char *format, ...)
    {
    // Temporarily defeat all ASM_EXPR for optimized code per PR119214
    // The correct solution using LABEL_DECL is forthcoming
--- 3408,3434 ----
    }
  
  void
! gg_insert_into_assembler(const char ach[])
!   {
!   if( !optimize )
!     {
!     // Create the required generic tag
!     tree asm_expr = build5_loc( location_from_lineno(),
!                             ASM_EXPR,
!                             VOID,
!                             build_string(strlen(ach), ach),
!                             NULL_TREE,
!                             NULL_TREE,
!                             NULL_TREE,
!                             NULL_TREE);
! 
!     // And insert it as a statement
!     gg_append_statement(asm_expr);
!     }
!   }
! 
! void
! gg_insert_into_assemblerf(const char *format, ...)
    {
    // Temporarily defeat all ASM_EXPR for optimized code per PR119214
    // The correct solution using LABEL_DECL is forthcoming
*************** gg_insert_into_assembler(const char *for
*** 3444,3461 ****
      vsnprintf(ach, sizeof(ach), format, ap);
      va_end(ap);
  
!     // Create the required generic tag
!     tree asm_expr = build5_loc( location_from_lineno(),
!                             ASM_EXPR,
!                             VOID,
!                             build_string(strlen(ach), ach),
!                             NULL_TREE,
!                             NULL_TREE,
!                             NULL_TREE,
!                             NULL_TREE);
!     //SET_EXPR_LOCATION (asm_expr, UNKNOWN_LOCATION);
! 
!     // And insert it as a statement
!     gg_append_statement(asm_expr);
      }
    }
--- 3447,3452 ----
      vsnprintf(ach, sizeof(ach), format, ap);
      va_end(ap);
  
!     gg_insert_into_assembler(ach);
      }
    }
diff -Nrcpad gcc-16-20250615/gcc/cobol/gengen.h gcc-16-20250622/gcc/cobol/gengen.h
*** gcc-16-20250615/gcc/cobol/gengen.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/gengen.h	Sun Jun 22 22:32:19 2025
*************** extern tree gg_trans_unit_var_decl(const
*** 539,544 ****
  tree gg_open(tree char_star_A, tree int_B);
  tree gg_close(tree int_A);
  tree gg_get_indirect_reference(tree pointer, tree offset);
! void gg_insert_into_assembler(const char *format, ...);
  void gg_modify_function_type(tree function_decl, tree return_type);
  #endif
--- 539,547 ----
  tree gg_open(tree char_star_A, tree int_B);
  tree gg_close(tree int_A);
  tree gg_get_indirect_reference(tree pointer, tree offset);
! 
! void gg_insert_into_assembler(const char ach[]);
! void gg_insert_into_assemblerf(const char *format, ...) ATTRIBUTE_PRINTF_1;
! 
  void gg_modify_function_type(tree function_decl, tree return_type);
  #endif
diff -Nrcpad gcc-16-20250615/gcc/cobol/genmath.cc gcc-16-20250622/gcc/cobol/genmath.cc
*** gcc-16-20250615/gcc/cobol/genmath.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/genmath.cc	Sun Jun 22 22:32:19 2025
*************** arithmetic_operation(size_t nC, cbl_num_
*** 95,102 ****
                        size_t nA, cbl_refer_t *A,
                        size_t nB, cbl_refer_t *B,
                        cbl_arith_format_t format,
!                       cbl_label_t *error,
!                       cbl_label_t *not_error,
                        tree compute_error, // Pointer to int
                        const char *operation,
                        cbl_refer_t *remainder = NULL)
--- 95,102 ----
                        size_t nA, cbl_refer_t *A,
                        size_t nB, cbl_refer_t *B,
                        cbl_arith_format_t format,
!                       const cbl_label_t *error,
!                       const cbl_label_t *not_error,
                        tree compute_error, // Pointer to int
                        const char *operation,
                        cbl_refer_t *remainder = NULL)
*************** arithmetic_operation(size_t nC, cbl_num_
*** 137,143 ****
  
    // Allocate nC+1 in case this is a divide with a REMAINDER
  
!   cbl_refer_t *results = (cbl_refer_t *)xmalloc((nC+1) * sizeof( cbl_refer_t ));
    int ncount = 0;
  
    if( nC+1 <= MIN_FIELD_BLOCK_SIZE )
--- 137,143 ----
  
    // Allocate nC+1 in case this is a divide with a REMAINDER
  
!   std::vector<cbl_refer_t> results(nC + 1);
    int ncount = 0;
  
    if( nC+1 <= MIN_FIELD_BLOCK_SIZE )
*************** arithmetic_operation(size_t nC, cbl_num_
*** 207,213 ****
  
    build_array_of_treeplets(1, nA, A);
    build_array_of_treeplets(2, nB, B);
!   build_array_of_treeplets(3, ncount, results);
  
    gg_call(VOID,
            operation,
--- 207,213 ----
  
    build_array_of_treeplets(1, nA, A);
    build_array_of_treeplets(2, nB, B);
!   build_array_of_treeplets(3, ncount, results.data());
  
    gg_call(VOID,
            operation,
*************** arithmetic_operation(size_t nC, cbl_num_
*** 253,261 ****
      {
      SHOW_PARSE_END
      }
- 
-   // We need to release all of the refers we allocated:
-   free(results);
    }
  
  static void
--- 253,258 ----
*************** arithmetic_error_handler( cbl_label_t *e
*** 307,313 ****
    }
  
  static bool
! is_somebody_float(size_t nA, cbl_refer_t *A)
    {
    bool retval = false;
    for(size_t i=0; i<nA; i++)
--- 304,310 ----
    }
  
  static bool
! is_somebody_float(size_t nA, const cbl_refer_t *A)
    {
    bool retval = false;
    for(size_t i=0; i<nA; i++)
*************** is_somebody_float(size_t nA, cbl_refer_t
*** 322,328 ****
    }
  
  static bool
! is_somebody_float(size_t nC, cbl_num_result_t *C)
    {
    bool retval = false;
    for(size_t i=0; i<nC; i++)
--- 319,325 ----
    }
  
  static bool
! is_somebody_float(size_t nC, const cbl_num_result_t *C)
    {
    bool retval = false;
    for(size_t i=0; i<nC; i++)
*************** is_somebody_float(size_t nC, cbl_num_res
*** 337,343 ****
    }
  
  static bool
! all_results_binary(size_t nC, cbl_num_result_t *C)
    {
    bool retval = true;
  
--- 334,340 ----
    }
  
  static bool
! all_results_binary(size_t nC, const cbl_num_result_t *C)
    {
    bool retval = true;
  
*************** fast_multiply(size_t nC, cbl_num_result_
*** 581,590 ****
          {
          // This is a MULTIPLY Format 2
          get_binary_value(valB, NULL, B[0].field, refer_offset(B[0]));
-         }
- 
-       if(nB)
-         {
          gg_assign(valA, gg_multiply(valA, valB));
          }
  
--- 578,583 ----
*************** parser_add( size_t nC, cbl_num_result_t
*** 993,1001 ****
    }
  
  void
! parser_add( cbl_refer_t cref,
!             cbl_refer_t aref,
!             cbl_refer_t bref,
              cbl_round_t rounded)
    {
    // This is the simple and innocent C = A + B
--- 986,994 ----
    }
  
  void
! parser_add( const cbl_refer_t& cref,
!             const cbl_refer_t& aref,
!             const cbl_refer_t& bref,
              cbl_round_t rounded)
    {
    // This is the simple and innocent C = A + B
*************** parser_divide(  size_t nC, cbl_num_resul
*** 1215,1223 ****
    }
  
  void
! parser_multiply(cbl_refer_t cref,
!                 cbl_refer_t aref,
!                 cbl_refer_t bref,
                  cbl_round_t rounded )
    {
    cbl_num_result_t C[1];
--- 1208,1216 ----
    }
  
  void
! parser_multiply(const cbl_refer_t& cref,
!                 const cbl_refer_t& aref,
!                 const cbl_refer_t& bref,
                  cbl_round_t rounded )
    {
    cbl_num_result_t C[1];
*************** parser_multiply(cbl_refer_t cref,
*** 1238,1248 ****
    }
  
  void
! parser_divide(  cbl_refer_t cref,
!                 cbl_refer_t aref,
!                 cbl_refer_t bref,
                  cbl_round_t rounded,
!                 cbl_refer_t remainder_ref )
    {
    cbl_num_result_t C[1];
    C[0].rounded = rounded;
--- 1231,1241 ----
    }
  
  void
! parser_divide(  const cbl_refer_t& cref,
!                 const cbl_refer_t& aref,
!                 const cbl_refer_t& bref,
                  cbl_round_t rounded,
!                 const cbl_refer_t& remainder_ref )
    {
    cbl_num_result_t C[1];
    C[0].rounded = rounded;
*************** parser_op( struct cbl_refer_t cref,
*** 1390,1401 ****
        break;
        }
      default:
!       cbl_internal_error( "parser_op() doesn't know how to "
!              "evaluate \"%s = %s %c %s\"\n",
!              cref.field->name,
!              aref.field->name,
!              op,
!              bref.field->name);
        break;
      }
    }
--- 1383,1394 ----
        break;
        }
      default:
!       cbl_internal_error( "%<parser_op()%> doesn%'t know how to "
!                           "evaluate %<%s = %s %c %s%>",
!                           cref.field->name,
!                           aref.field->name,
!                           op,
!                           bref.field->name);
        break;
      }
    }
*************** parser_subtract(size_t nC, cbl_num_resul
*** 1704,1712 ****
    }
  
  void
! parser_subtract(cbl_refer_t cref, // cref = aref - bref
!                 cbl_refer_t aref,
!                 cbl_refer_t bref,
                  cbl_round_t rounded )
    {
    cbl_num_result_t C[1];
--- 1697,1705 ----
    }
  
  void
! parser_subtract(const cbl_refer_t& cref, // cref = aref - bref
!                 const cbl_refer_t& aref,
!                 const cbl_refer_t& bref,
                  cbl_round_t rounded )
    {
    cbl_num_result_t C[1];
diff -Nrcpad gcc-16-20250615/gcc/cobol/genutil.cc gcc-16-20250622/gcc/cobol/genutil.cc
*** gcc-16-20250615/gcc/cobol/genutil.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/genutil.cc	Sun Jun 22 22:32:19 2025
*************** get_depending_on_value_from_odo(tree ret
*** 515,521 ****
  
  static
  void
! get_depending_on_value(tree retval, cbl_refer_t &refer)
    {
    /*  This routine, called only when we know there is an OCCURS DEPENDING ON
        clause, returns the current value of the DEPENDING ON variable.  When
--- 515,521 ----
  
  static
  void
! get_depending_on_value(tree retval, const cbl_refer_t &refer)
    {
    /*  This routine, called only when we know there is an OCCURS DEPENDING ON
        clause, returns the current value of the DEPENDING ON variable.  When
*************** get_data_offset(cbl_refer_t &refer,
*** 550,556 ****
    int all_flags = 0;
    int all_flag_bit = 1;
  
!   if( refer.nsubscript )
      {
      REFER("subscript");
      // We have at least one subscript:
--- 550,556 ----
    int all_flags = 0;
    int all_flag_bit = 1;
  
!   if( refer.nsubscript() )
      {
      REFER("subscript");
      // We have at least one subscript:
*************** get_data_offset(cbl_refer_t &refer,
*** 569,575 ****
      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)
--- 569,575 ----
      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)
*************** get_data_offset(cbl_refer_t &refer,
*** 698,703 ****
--- 698,705 ----
    return retval;
    }
  
+ static tree tree_type_from_field(const cbl_field_t *field);
+ 
  void
  get_binary_value( tree value,
                    tree rdigits,
*************** get_binary_value( tree value,
*** 735,741 ****
        {
        if( SCALAR_FLOAT_TYPE_P(value) )
          {
!         cbl_internal_error("Can't get float value from %s", field->name);
          }
        else
          {
--- 737,743 ----
        {
        if( SCALAR_FLOAT_TYPE_P(value) )
          {
!         cbl_internal_error("cannot get %<float%> value from %s", field->name);
          }
        else
          {
*************** get_binary_value( tree value,
*** 1265,1272 ****
      }
    }
  
! tree
! tree_type_from_field(cbl_field_t *field)
    {
    gcc_assert(field);
    return tree_type_from_size(field->data.capacity, field->attr & signable_e);
--- 1267,1274 ----
      }
    }
  
! static tree
! tree_type_from_field(const cbl_field_t *field)
    {
    gcc_assert(field);
    return tree_type_from_size(field->data.capacity, field->attr & signable_e);
*************** tree_type_from_size(size_t bytes, int si
*** 1559,1565 ****
  
  static
  bool
! refer_has_depends(cbl_refer_t &refer, refer_type_t refer_type)
    {
    if( suppress_dest_depends )
      {
--- 1561,1567 ----
  
  static
  bool
! refer_has_depends(const cbl_refer_t &refer, refer_type_t refer_type)
    {
    if( suppress_dest_depends )
      {
*************** refer_has_depends(cbl_refer_t &refer, re
*** 1577,1583 ****
  
    // Check if there there is an occurs with a depending_on in the hierarchy
    bool proceed = false;
!   cbl_field_t *odo = symbol_find_odo(refer.field);
    cbl_field_t *depending_on;
    if( odo && odo != refer.field )
      {
--- 1579,1585 ----
  
    // Check if there there is an occurs with a depending_on in the hierarchy
    bool proceed = false;
!   const cbl_field_t *odo = symbol_find_odo(refer.field);
    cbl_field_t *depending_on;
    if( odo && odo != refer.field )
      {
*************** refer_has_depends(cbl_refer_t &refer, re
*** 1603,1609 ****
            {
            parent1 = p;
            }
!         cbl_field_t *parent2 = depending_on;
          while( (p = parent_of(parent2)) )
            {
            parent2 = p;
--- 1605,1611 ----
            {
            parent1 = p;
            }
!         const cbl_field_t *parent2 = depending_on;
          while( (p = parent_of(parent2)) )
            {
            parent2 = p;
*************** char *
*** 1912,1929 ****
  get_literal_string(cbl_field_t *field)
    {
    assert(field->type == FldLiteralA);
!   char *buffer = NULL;
!   size_t buffer_length = 0;
!   if( buffer_length < field->data.capacity+1 )
!     {
!     buffer_length = field->data.capacity+1;
!     buffer = (char *)xrealloc(buffer, buffer_length);
!     }
    for(size_t i=0; i<field->data.capacity; i++)
      {
      buffer[i] = ascii_to_internal(field->data.initial[i]);
      }
!   buffer[field->data.capacity] = '\0';
    return buffer;
    }
  
--- 1914,1927 ----
  get_literal_string(cbl_field_t *field)
    {
    assert(field->type == FldLiteralA);
!   size_t buffer_length = field->data.capacity+1;
!   char *buffer = static_cast<char *>(xcalloc(1, buffer_length));
! 
    for(size_t i=0; i<field->data.capacity; i++)
      {
      buffer[i] = ascii_to_internal(field->data.initial[i]);
      }
! 
    return buffer;
    }
  
*************** refer_is_clean(cbl_refer_t &refer)
*** 1943,1949 ****
  
    return     !refer.all
            && !refer.addr_of
!           && !refer.nsubscript
            && !refer.refmod.from
            && !refer.refmod.len
            && !refer_has_depends(refer, refer_source)
--- 1941,1947 ----
  
    return     !refer.all
            && !refer.addr_of
!           && !refer.nsubscript()
            && !refer.refmod.from
            && !refer.refmod.len
            && !refer_has_depends(refer, refer_source)
*************** get_time_nanoseconds()
*** 2141,2144 ****
    return retval;
  #endif
    return retval;
! }
\ No newline at end of file
--- 2139,2142 ----
    return retval;
  #endif
    return retval;
! }
diff -Nrcpad gcc-16-20250615/gcc/cobol/genutil.h gcc-16-20250622/gcc/cobol/genutil.h
*** gcc-16-20250615/gcc/cobol/genutil.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/genutil.h	Sun Jun 22 22:32:19 2025
*************** int       get_scaled_rdigits(cbl_field_t
*** 92,98 ****
  int       get_scaled_digits(cbl_field_t *field);
  tree      tree_type_from_digits(size_t digits, int signable);
  tree      tree_type_from_size(size_t bytes, int signable);
! tree      tree_type_from_field(cbl_field_t *field);
  void      get_binary_value( tree value,
                              tree rdigits,
                              cbl_field_t *field,
--- 92,98 ----
  int       get_scaled_digits(cbl_field_t *field);
  tree      tree_type_from_digits(size_t digits, int signable);
  tree      tree_type_from_size(size_t bytes, int signable);
! 
  void      get_binary_value( tree value,
                              tree rdigits,
                              cbl_field_t *field,
diff -Nrcpad gcc-16-20250615/gcc/cobol/inspect.h gcc-16-20250622/gcc/cobol/inspect.h
*** gcc-16-20250615/gcc/cobol/inspect.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/inspect.h	Sun Jun 22 22:32:19 2025
***************
*** 53,233 ****
  static inline bool
  is_active( const cbl_refer_t& refer ) { return NULL != refer.field; }
  
! template <typename DATA>
! struct cbx_inspect_qual_t {
    bool initial;
!   DATA identifier_4;
  
!   cbx_inspect_qual_t() : initial(false), identifier_4(DATA()) {}
!   cbx_inspect_qual_t( bool initial, const DATA& identifier_4 )
      : initial(initial), identifier_4(identifier_4)
!     {
!       //if( identifier_4.field ) yywarn("%s:qualifying field is '%s'", __func__, identifier_4.field->name);
!     }
!   cbx_inspect_qual_t( const cbx_inspect_qual_t& that )
      : initial(that.initial)
      , identifier_4(that.identifier_4)
!     {
!       //if( identifier_4.field ) yywarn("%s:qualifying field is '%s'", __func__, identifier_4.field->name);
!     }
  
!   cbx_inspect_qual_t& operator=( const cbx_inspect_qual_t& that ) {
      initial = that.initial;
      identifier_4 = that.identifier_4;
-     //if( identifier_4.field ) yywarn("%s:qualifying field is '%s'", __func__, identifier_4.field->name);
      return *this;
    }
  
    bool active() const { return is_active(identifier_4); }
- 
-   void clear() {
-     initial = false;
-     identifier_4.clear();
-   }
  };
  
- typedef cbx_inspect_qual_t<cbl_refer_t> cbl_inspect_qual_t;
- 
  /*
   * Data for INSPECT X TALLYING Y FOR.  Captures information for operands of
   * CHARACTERS/ALL/LEADING.  The CHARACTERS/ALL/LEADING control is kept at the
   * next higher level, and may be repeated for each tally.
   *
!  * cbx_inspect_match_t::matching is not used with CHARACTERS
   */
- template <typename DATA>
- struct cbx_inspect_match_t {
-   DATA matching;                          // identifier-3/5 or literal-1/3
-   cbx_inspect_qual_t<DATA> before, after; // phrase 1
  
!   cbx_inspect_match_t(
!     const DATA& matching = DATA(),
!     const cbx_inspect_qual_t<DATA>& before = cbx_inspect_qual_t<DATA>(),
!     const cbx_inspect_qual_t<DATA>& after  = cbx_inspect_qual_t<DATA>()
!     )
!     : matching(matching)
      , before(before)
      , after(after)
    {}
    // match all characters
    bool match_any() const { return !(before.active() || after.active()); }
- };
  
! typedef cbx_inspect_match_t<cbl_refer_t> cbl_inspect_match_t;
  
  /*
   * Data for INSPECT X REPLACING.  The CHARACTERS/ALL/LEADING/FIRST control is
   * kept at the next higher level, and may be repeated.
   */
! template <typename DATA>
! struct cbx_inspect_replace_t : public cbx_inspect_match_t<DATA> {
!   DATA replacement;
  
!   cbx_inspect_replace_t( const DATA& matching = DATA(),
!                          const DATA& replacement = DATA() )
!     : cbx_inspect_match_t<DATA>(matching)
!     , replacement(replacement)
!   {}
!   cbx_inspect_replace_t( const DATA& matching,
!                          const DATA& replacement,
!                          const cbx_inspect_qual_t<DATA>& before,
!                          const cbx_inspect_qual_t<DATA>& after )
!     : cbx_inspect_match_t<DATA>(matching, before, after)
      , replacement(replacement)
    {}
  };
  
- typedef cbx_inspect_replace_t<cbl_refer_t> cbl_inspect_replace_t;
- 
  // One partial tally or substitution.
! template <typename DATA>
! struct cbx_inspect_oper_t {
    cbl_inspect_bound_t bound;  // CHARACTERS/ALL/LEADING/FIRST
!   size_t n_identifier_3;      // N matches/replaces
!   // either tallies or replaces is NULL
!   cbx_inspect_match_t<DATA> *matches;
!   cbx_inspect_replace_t<DATA> *replaces;
  
!   cbx_inspect_oper_t( cbl_inspect_bound_t bound,
!                       std::list<cbx_inspect_match_t<DATA>> matches )
      : bound(bound)
!     , n_identifier_3( matches.size())
!     , matches(NULL)
!     , replaces(NULL)
!     {
!       this->matches = new cbx_inspect_match_t<DATA>[n_identifier_3];
!       std::copy( matches.begin(), matches.end(), this->matches );
!     }
  
!   cbx_inspect_oper_t( cbl_inspect_bound_t bound,
!                       std::list<cbx_inspect_replace_t<DATA>> replaces )
      : bound(bound)
!     , n_identifier_3( replaces.size() )
!     , matches(NULL)
!     , replaces(NULL)
!     {
!       this->replaces = new cbx_inspect_replace_t<DATA>[n_identifier_3];
!       std::copy( replaces.begin(), replaces.end(), this->replaces );
!     }
  
!   cbx_inspect_oper_t()
!     : bound(bound_characters_e)
!     , n_identifier_3(0)
!     , matches(NULL)
!     , replaces(NULL)
!     {
!       assert( is_valid() );
!     }
  
!   bool is_valid() const {
!     if( matches && replaces ) return false;
!     if( matches || replaces ) return n_identifier_3 > 0;
!     return n_identifier_3 == 0;
    }
  };
  
- typedef cbx_inspect_oper_t<cbl_refer_t> cbl_inspect_oper_t;
- 
  // One whole tally or substitution.  For REPLACING, nbound == 1
! template <typename DATA>
! struct cbx_inspect_t {
!   DATA tally;                 // identifier-2: NULL without a tally
!   size_t nbound;              // FOR and REPLACING start with a cbl_inspect_bound_t
!   cbx_inspect_oper_t<DATA> *opers;
! 
!   cbx_inspect_t( const DATA& tally = DATA() )
!     : tally(tally)
!     , nbound(0)
!     , opers(NULL)
      {}
-   cbx_inspect_t( const DATA& tally, const cbx_inspect_oper_t<DATA>& oper )
-     : tally(tally)
-     , nbound(1)
-     , opers(NULL)
-     {
-       this->opers = new cbx_inspect_oper_t<DATA>[1];
-       this->opers[0] = oper;
-     }
-   cbx_inspect_t( const DATA& tally,
-                  const std::list<cbx_inspect_oper_t<DATA>>& opers )
-     : tally(tally)
-     , nbound( opers.size() )
-     , opers(NULL)
-     {
-       this->opers = new cbx_inspect_oper_t<DATA>[nbound];
-       std::copy( opers.begin(), opers.end(), this->opers );
-     }
- };
  
! typedef cbx_inspect_t<cbl_refer_t> cbl_inspect_t;
  
  
  /*
   * Runtime
   */
  
! void parser_inspect( cbl_refer_t input, bool backward,
!                      size_t ninspect, cbl_inspect_t *inspects );
  void parser_inspect_conv( cbl_refer_t input, bool backward,
                            cbl_refer_t original,
                            cbl_refer_t replacement,
--- 53,214 ----
  static inline bool
  is_active( const cbl_refer_t& refer ) { return NULL != refer.field; }
  
! struct cbl_inspect_qual_t {
    bool initial;
!   cbl_refer_t identifier_4;
  
!   cbl_inspect_qual_t() : initial(false), identifier_4(cbl_refer_t()) {}
!   cbl_inspect_qual_t( bool initial, const cbl_refer_t& identifier_4 )
      : initial(initial), identifier_4(identifier_4)
!     {}
!   cbl_inspect_qual_t( const cbl_inspect_qual_t& that )
      : initial(that.initial)
      , identifier_4(that.identifier_4)
!     {}
  
!   cbl_inspect_qual_t& operator=( const cbl_inspect_qual_t& that ) {
      initial = that.initial;
      identifier_4 = that.identifier_4;
      return *this;
    }
  
    bool active() const { return is_active(identifier_4); }
  };
  
  /*
   * Data for INSPECT X TALLYING Y FOR.  Captures information for operands of
   * CHARACTERS/ALL/LEADING.  The CHARACTERS/ALL/LEADING control is kept at the
   * next higher level, and may be repeated for each tally.
   *
!  * cbl_inspect_match_t::matching is not used with CHARACTERS
   */
  
! class cbl_inspect_match_t {
!   friend void dump_inspect_match( const cbl_inspect_match_t& M );
!   cbl_refer_t match;  // identifier-3/5 or literal-1/3
!   cbl_refer_t tally;  // collected too soon, belongs to next phrase 
!  public:
!   cbl_inspect_qual_t before, after; // phrase 1
! 
!   cbl_inspect_match_t() {}
!   explicit 
!   cbl_inspect_match_t( const cbl_refer_t& matching,
!                        const cbl_inspect_qual_t& before = cbl_inspect_qual_t(),
!                        const cbl_inspect_qual_t& after  = cbl_inspect_qual_t() )
!     : match(matching)
      , before(before)
      , after(after)
    {}
    // match all characters
    bool match_any() const { return !(before.active() || after.active()); }
  
!   void save_premature_tally( const cbl_refer_t& tally ) {
!     this->tally = tally; // put it here temporarily
!   }
!   cbl_refer_t premature_tally() {
!     if( !tally.field ) { std::swap(match, tally); }
!     return tally;
!   }
!   
!   const cbl_refer_t& matching( const cbl_refer_t& match ) {
!     return this->match = match;
!   }
!   const cbl_refer_t& matching() const { return match; }
! 
!   bool empty() const {
!     return !is_active(match) && !before.active() && !after.active();
!   }
! };
  
  /*
   * Data for INSPECT X REPLACING.  The CHARACTERS/ALL/LEADING/FIRST control is
   * kept at the next higher level, and may be repeated.
   */
! struct cbl_inspect_replace_t : public cbl_inspect_match_t {
!   cbl_refer_t replacement;
  
!   cbl_inspect_replace_t() {}
!   cbl_inspect_replace_t( const cbl_refer_t& matching,
!                          const cbl_refer_t& replacement,
!                          const cbl_inspect_qual_t& before,
!                          const cbl_inspect_qual_t& after )
!     : cbl_inspect_match_t(matching, before, after)
      , replacement(replacement)
    {}
  };
  
  // One partial tally or substitution.
! struct cbl_inspect_oper_t {
    cbl_inspect_bound_t bound;  // CHARACTERS/ALL/LEADING/FIRST
!   // either tallies or replaces is empty
!   std::vector<cbl_inspect_match_t> matches;
!   std::vector<cbl_inspect_replace_t> replaces;
  
!   cbl_inspect_oper_t() : bound(bound_characters_e) {}
! 
!   explicit cbl_inspect_oper_t( const cbl_inspect_match_t& match,
!                                cbl_inspect_bound_t bound = bound_characters_e )
      : bound(bound)
!   {
!     matches.push_back(match);
!   }
!   explicit cbl_inspect_oper_t( const cbl_inspect_replace_t& replace,
!                                cbl_inspect_bound_t bound = bound_characters_e )
!     : bound(bound)
!   {
!     replaces.push_back(replace);
!   }
  
!   cbl_inspect_oper_t( cbl_inspect_bound_t bound,
!                       const std::vector<cbl_inspect_match_t>& matches )
      : bound(bound)
!     , matches(matches)
!     {}
  
!   cbl_inspect_oper_t( cbl_inspect_bound_t bound,
!                       const std::vector<cbl_inspect_replace_t>& replaces )
!     : bound(bound)
!     , replaces(replaces)
!     {}
  
!   // N matches/replaces
!   size_t n_identifier_3() const {
!     return std::max( matches.size(), replaces.size() );
!   } 
! 
!   bool is_valid() const { // only one or the other, never both
!     bool invalid = !matches.empty() && !replaces.empty();
!     return ! invalid;
    }
  };
  
  // One whole tally or substitution.  For REPLACING, nbound == 1
! // FOR and REPLACING start with a cbl_inspect_bound_t
! struct cbl_inspect_t : public std::vector<cbl_inspect_oper_t> {
!   cbl_refer_t tally; // field is NULL for REPLACING
!   cbl_inspect_t() {}
!   cbl_inspect_t( size_t n, const cbl_inspect_oper_t& oper )
!     : std::vector<cbl_inspect_oper_t>(n, oper)
!   {}
!   cbl_inspect_t( const cbl_refer_t& tally,
!                  const std::vector<cbl_inspect_oper_t>& opers )
!     : std::vector<cbl_inspect_oper_t>(opers)
!     , tally(tally)
      {}
  
!   size_t nbound() const { return size(); }
! };
  
+ typedef std::vector<cbl_inspect_t> cbl_inspect_opers_t;
  
  /*
   * Runtime
   */
  
! void parser_inspect( const cbl_refer_t& input,
!                      bool backward,
!                      cbl_inspect_opers_t& inspects );
! 
  void parser_inspect_conv( cbl_refer_t input, bool backward,
                            cbl_refer_t original,
                            cbl_refer_t replacement,
diff -Nrcpad gcc-16-20250615/gcc/cobol/lexio.cc gcc-16-20250622/gcc/cobol/lexio.cc
*** gcc-16-20250615/gcc/cobol/lexio.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/lexio.cc	Sun Jun 22 22:32:19 2025
*************** continues_at( char *bol, char *eol ) {
*** 123,129 ****
  // Return pointer to indicator column. Test ch if provided.
  // NULL means no indicator column or tested value not present.
  static inline char *
! indicated( char *bol, char *eol, char ch = '\0' ) {
    if( indicator.column == 0 && *bol != '*' ) {
      return NULL;  // no indicator column in free format, except for comments
    }
--- 123,129 ----
  // Return pointer to indicator column. Test ch if provided.
  // NULL means no indicator column or tested value not present.
  static inline char *
! indicated( char *bol, const char *eol, char ch = '\0' ) {
    if( indicator.column == 0 && *bol != '*' ) {
      return NULL;  // no indicator column in free format, except for comments
    }
*************** indicated( char *bol, char *eol, char ch
*** 140,149 ****
  
  static char *
  remove_inline_comment( char *bol, char *eol ) {
-   static char ends = '\0';
    char *nl = std::find(bol, eol, '\n');
  
    if( bol < nl ) {
      std::swap(*nl, ends);
      char *comment = strstr(bol, "*>");
      if( comment ) {
--- 140,149 ----
  
  static char *
  remove_inline_comment( char *bol, char *eol ) {
    char *nl = std::find(bol, eol, '\n');
  
    if( bol < nl ) {
+     static char ends = '\0';
      std::swap(*nl, ends);
      char *comment = strstr(bol, "*>");
      if( comment ) {
*************** maybe_add_space(const span_t& pattern, r
*** 208,217 ****
    }
  
    if( befter[0] == blank || befter[1] == blank ) {
!     char *s = xasprintf( "%s%.*s%s",
!                          befter[0],
!                          recognized.after.size(), recognized.after.p,
!                          befter[1] );
      recognized.after = span_t(s, s + strlen(s));
    }
  }
--- 208,217 ----
    }
  
    if( befter[0] == blank || befter[1] == blank ) {
!     const char *s = xasprintf( "%s%.*s%s",
!                                befter[0],
!                                recognized.after.size(), recognized.after.p,
!                                befter[1] );
      recognized.after = span_t(s, s + strlen(s));
    }
  }
*************** recognize_replacements( filespan_t mfile
*** 266,272 ****
  
        span_t found(mfile.eodata, mfile.eodata);
  
!       if( regex_search( mfile.ccur(), (const char *)mfile.eodata, cm, re) ) {
          gcc_assert(cm[1].matched);
          found = span_t( cm[1].first, cm[1].second );
          if( yy_flex_debug ) {
--- 266,274 ----
  
        span_t found(mfile.eodata, mfile.eodata);
  
!       if( regex_search( mfile.ccur(),
!                         const_cast<const char *>(mfile.eodata),
!                         cm, re) ) {
          gcc_assert(cm[1].matched);
          found = span_t( cm[1].first, cm[1].second );
          if( yy_flex_debug ) {
*************** recognize_replacements( filespan_t mfile
*** 301,307 ****
      bol = next.found.pend;
  
      if( yy_flex_debug ) {
!       size_t n = std::count((const char *)mfile.data, recognized.before.p, '\n');
        dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED
                " @ " HOST_SIZE_T_PRINT_UNSIGNED ": '%s'\n/%.*s/%.*s/",
                __func__, __LINE__,
--- 303,310 ----
      bol = next.found.pend;
  
      if( yy_flex_debug ) {
!       size_t n = std::count(const_cast<const char *>(mfile.data),
!                             recognized.before.p, '\n');
        dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED
                " @ " HOST_SIZE_T_PRINT_UNSIGNED ": '%s'\n/%.*s/%.*s/",
                __func__, __LINE__,
*************** recognize_replacements( filespan_t mfile
*** 317,326 ****
      next.found = span_t(mfile.eodata, mfile.eodata);
  
      regex re(next.directive.before.p, extended_icase);
!     if( regex_search(bol, (const char *)mfile.eodata, cm, re) ) {
        gcc_assert(cm[1].matched);
        next.found = span_t( cm[1].first, cm[1].second );
!       size_t n = std::count((const char *)mfile.data, next.found.p, '\n');
        if( false )
          dbgmsg("%s:%d next '%.*s' will be on line " HOST_SIZE_T_PRINT_UNSIGNED
                 " (offset " HOST_SIZE_T_PRINT_UNSIGNED ")", __func__, __LINE__,
--- 320,330 ----
      next.found = span_t(mfile.eodata, mfile.eodata);
  
      regex re(next.directive.before.p, extended_icase);
!     if( regex_search(bol, const_cast<const char *>(mfile.eodata), cm, re) ) {
        gcc_assert(cm[1].matched);
        next.found = span_t( cm[1].first, cm[1].second );
!       size_t n = std::count(const_cast<const char *>(mfile.data),
!                             next.found.p, '\n');
        if( false )
          dbgmsg("%s:%d next '%.*s' will be on line " HOST_SIZE_T_PRINT_UNSIGNED
                 " (offset " HOST_SIZE_T_PRINT_UNSIGNED ")", __func__, __LINE__,
*************** check_source_format_directive( filespan_
*** 345,351 ****
  
    // show contents of marked subexpressions within each match
    cmatch cm;
!   if( regex_search(p, (const char *)mfile.eol, cm, re) ) {
      gcc_assert(cm.size() > 1);
      switch( cm[3].length() ) {
      case 4:
--- 349,355 ----
  
    // show contents of marked subexpressions within each match
    cmatch cm;
!   if( regex_search(p, const_cast<const char *>(mfile.eol), cm, re) ) {
      gcc_assert(cm.size() > 1);
      switch( cm[3].length() ) {
      case 4:
*************** struct replacing_term_t {
*** 459,467 ****
    bool matched, done;
    span_t leading_trailing, term, stmt;
  
!   replacing_term_t(const char input[]) : matched(false), done(false) {
!     stmt = span_t(input, input);
!   }
  };
  
  extern YYLTYPE yylloc;
--- 463,471 ----
    bool matched, done;
    span_t leading_trailing, term, stmt;
  
!   explicit replacing_term_t(const char input[])
!     : matched(false), done(false), stmt(span_t(input, input))
!     {}
  };
  
  extern YYLTYPE yylloc;
*************** parse_replacing_pair( const char *stmt,
*** 741,747 ****
        }
      }
      if( pair.stmt.p ) {
!       yywarn("CDF syntax error '%*s'", (int)pair.stmt.size(), pair.stmt.p);
      }
      else {
        // This eliminated a compiler warning about "format-overflow"
--- 745,751 ----
        }
      }
      if( pair.stmt.p ) {
!       yywarn("CDF syntax error '%.*s'", (int)pair.stmt.size(), pair.stmt.p);
      }
      else {
        // This eliminated a compiler warning about "format-overflow"
*************** parse_replace_pairs( const char *stmt, c
*** 809,815 ****
      }
  
      span_t& before(parsed.replace.before);
!     span_t& after(parsed.replace.after);
  
      const char *befter[2] = { nonword_ch, nonword_ch };
      gcc_assert(before.p < before.pend);
--- 813,819 ----
      }
  
      span_t& before(parsed.replace.before);
!     const span_t& after(parsed.replace.after);
  
      const char *befter[2] = { nonword_ch, nonword_ch };
      gcc_assert(before.p < before.pend);
*************** struct copy_descr_t {
*** 877,883 ****
  };
  
  static YYLTYPE
! location_in( const filespan_t& mfile, const csub_match cm ) {
    YYLTYPE loc {
      int(mfile.lineno() + 1), int(mfile.colno() + 1),
      int(mfile.lineno() + 1), int(mfile.colno() + 1)
--- 881,887 ----
  };
  
  static YYLTYPE
! location_in( const filespan_t& mfile, const csub_match& cm ) {
    YYLTYPE loc {
      int(mfile.lineno() + 1), int(mfile.colno() + 1),
      int(mfile.lineno() + 1), int(mfile.colno() + 1)
*************** parse_copy_directive( filespan_t& mfile
*** 928,934 ****
      copy_stmt.p = mfile.eodata;
  
      if( regex_search(mfile.ccur(),
!                           (const char *)mfile.eodata, cm, re) ) {
        copy_stmt = span_t( cm[0].first, cm[0].second );
        if( yy_flex_debug ) {
          size_t nnl = 1 + count_newlines(mfile.data, copy_stmt.p);
--- 932,938 ----
      copy_stmt.p = mfile.eodata;
  
      if( regex_search(mfile.ccur(),
!                      const_cast<const char *>(mfile.eodata), cm, re) ) {
        copy_stmt = span_t( cm[0].first, cm[0].second );
        if( yy_flex_debug ) {
          size_t nnl = 1 + count_newlines(mfile.data, copy_stmt.p);
*************** parse_copy_directive( filespan_t& mfile
*** 981,987 ****
        std::pair<std::list<replace_t>, char*>
          result = parse_replace_pairs( cm[0].second, mfile.eodata, true );
  
!       std::list<replace_t>& replacements(result.first);
        outcome.parsed = (outcome.nreplace = replacements.size()) > 0;
        if( outcome.parsed ) {
          replace_directives.push(replacements);
--- 985,991 ----
        std::pair<std::list<replace_t>, char*>
          result = parse_replace_pairs( cm[0].second, mfile.eodata, true );
  
!       const std::list<replace_t>& replacements(result.first);
        outcome.parsed = (outcome.nreplace = replacements.size()) > 0;
        if( outcome.parsed ) {
          replace_directives.push(replacements);
*************** parse_copy_directive( filespan_t& mfile
*** 1008,1014 ****
  }
  
  static char *
! parse_replace_last_off( filespan_t& mfile ) {
    static const char pattern[] =
      "REPLACE" "[[:space:]]+"
      "(LAST[[:space:]]+)?OFF[[:space:]]*[.]"
--- 1012,1018 ----
  }
  
  static char *
! parse_replace_last_off( const filespan_t& mfile ) {
    static const char pattern[] =
      "REPLACE" "[[:space:]]+"
      "(LAST[[:space:]]+)?OFF[[:space:]]*[.]"
*************** parse_replace_last_off( filespan_t& mfil
*** 1018,1024 ****
  
    // REPLACE [LAST] OFF?
    bool found = regex_search(mfile.ccur(),
!                                  (const char *)mfile.eodata, cm, re);
    gcc_assert(found); // caller ensures
  
    gcc_assert(cm.size() == 2);
--- 1022,1028 ----
  
    // REPLACE [LAST] OFF?
    bool found = regex_search(mfile.ccur(),
!                             const_cast<const char *>(mfile.eodata), cm, re);
    gcc_assert(found); // caller ensures
  
    gcc_assert(cm.size() == 2);
*************** parse_replace_text( filespan_t& mfile )
*** 1073,1079 ****
             (fmt_size_t)current_lineno, len, mfile.cur);
    }
  
!   if( ! regex_search(mfile.ccur(), (const char *)mfile.eodata, cm, re) ) {
      dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED
              ": not a REPLACE statement:\n'%.*s'",
              __func__, __LINE__, (fmt_size_t)current_lineno,
--- 1077,1083 ----
             (fmt_size_t)current_lineno, len, mfile.cur);
    }
  
!   if( ! regex_search(mfile.ccur(), mfile.eodata, cm, re) ) {
      dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED
              ": not a REPLACE statement:\n'%.*s'",
              __func__, __LINE__, (fmt_size_t)current_lineno,
*************** parse_replace_text( filespan_t& mfile )
*** 1109,1115 ****
  
    std::pair<std::list<replace_t>, char*>
          result = parse_replace_pairs(replace_stmt.p, replace_stmt.pend, false);
!   std::list<replace_t>& replacements(result.first);
    replace_directives.push( replacements );
  
    if( yy_flex_debug ) {
--- 1113,1119 ----
  
    std::pair<std::list<replace_t>, char*>
          result = parse_replace_pairs(replace_stmt.p, replace_stmt.pend, false);
!   const std::list<replace_t>& replacements(result.first);
    replace_directives.push( replacements );
  
    if( yy_flex_debug ) {
*************** parse_replace_directive( filespan_t& mfi
*** 1147,1153 ****
      next_directive = mfile.eodata;
  
      if( regex_search(mfile.ccur(),
!                           (const char *)mfile.eodata, cm, re) ) {
        gcc_assert(cm[1].matched);
        next_directive = cm[0].first;
  
--- 1151,1157 ----
      next_directive = mfile.eodata;
  
      if( regex_search(mfile.ccur(),
!                      const_cast<const char *>(mfile.eodata), cm, re) ) {
        gcc_assert(cm[1].matched);
        next_directive = cm[0].first;
  
*************** preprocess_filter_add( const char input[
*** 1409,1415 ****
  
    auto filename = find_filter(filter.c_str());
    if( !filename ) {
!     yywarn("preprocessor '%s/%s' not found", getcwd(NULL, 0), filter);
      return false;
    }
    preprocessor_filters.push_back( std::make_pair(xstrdup(filename), options) );
--- 1413,1419 ----
  
    auto filename = find_filter(filter.c_str());
    if( !filename ) {
!     yywarn("preprocessor '%s/%s' not found", getcwd(NULL, 0), filter.c_str());
      return false;
    }
    preprocessor_filters.push_back( std::make_pair(xstrdup(filename), options) );
*************** cdftext::lex_open( const char filename[]
*** 1491,1497 ****
      argv[0] = filter;
  
      auto last_argv = std::transform( options.begin(), options.end(), argv.begin() + 1,
!                                      []( std::string& opt ) {
                                         return xstrdup(opt.c_str());
                                       } );
      *last_argv = NULL;
--- 1495,1501 ----
      argv[0] = filter;
  
      auto last_argv = std::transform( options.begin(), options.end(), argv.begin() + 1,
!                                      []( const std::string& opt ) {
                                         return xstrdup(opt.c_str());
                                       } );
      *last_argv = NULL;
*************** cdftext::lex_open( const char filename[]
*** 1520,1530 ****
      int status;
      auto kid = wait(&status);
      gcc_assert(pid == kid);
!     if( kid == -1 ) cbl_err( "failed waiting for pid %d", pid);
  
      if( WIFSIGNALED(status) ) {
!       cbl_errx( "%s pid %d terminated by %s",
!            filter, kid, strsignal(WTERMSIG(status)) );
      }
      if( WIFEXITED(status) ) {
        if( (status = WEXITSTATUS(status)) != 0 ) {
--- 1524,1534 ----
      int status;
      auto kid = wait(&status);
      gcc_assert(pid == kid);
!     if( kid == -1 ) cbl_err( "failed waiting for pid %ld", static_cast<long>(pid));
  
      if( WIFSIGNALED(status) ) {
!       cbl_errx( "%s pid %ld terminated by %s",
!                 filter, static_cast<long>(kid), strsignal(WTERMSIG(status)) );
      }
      if( WIFEXITED(status) ) {
        if( (status = WEXITSTATUS(status)) != 0 ) {
*************** int
*** 1542,1548 ****
  cdftext::open_input( const char filename[] ) {
    int fd = open(filename, O_RDONLY);
    if( fd == -1 ) {
!     dbgmsg( "could not open '%s': %m", filename );
    }
  
    verbose_file_reader = NULL != getenv("GCOBOL_TEMPDIR");
--- 1546,1552 ----
  cdftext::open_input( const char filename[] ) {
    int fd = open(filename, O_RDONLY);
    if( fd == -1 ) {
!     dbgmsg( "could not open '%s': %s", filename, xstrerror(errno) );
    }
  
    verbose_file_reader = NULL != getenv("GCOBOL_TEMPDIR");
*************** cdftext::open_input( const char filename
*** 1556,1564 ****
  int
  cdftext::open_output() {
    char *name = getenv("GCOBOL_TEMPDIR");
-   int fd;
  
    if( name && 0 != strcmp(name, "/") ) {
      char * stem = xasprintf("%sXXXXXX", name);
      if( -1 == (fd = mkstemp(stem)) ) {
        cbl_err( "could not open temporary file '%s' (%s)",
--- 1560,1568 ----
  int
  cdftext::open_output() {
    char *name = getenv("GCOBOL_TEMPDIR");
  
    if( name && 0 != strcmp(name, "/") ) {
+     int fd;
      char * stem = xasprintf("%sXXXXXX", name);
      if( -1 == (fd = mkstemp(stem)) ) {
        cbl_err( "could not open temporary file '%s' (%s)",
*************** cdftext::free_form_reference_format( int
*** 1685,1691 ****
      size_t lineno;
      bytespan_t line;
      // construct with length zero
!     current_line_t( char data[] ) : lineno(0), line(data, data) {}
    } current( mfile.data );
  
    /*
--- 1689,1695 ----
      size_t lineno;
      bytespan_t line;
      // construct with length zero
!     explicit current_line_t( char data[] ) : lineno(0), line(data, data) {}
    } current( mfile.data );
  
    /*
*************** cdftext::free_form_reference_format( int
*** 1825,1831 ****
  void
  cdftext::process_file( filespan_t mfile, int output, bool second_pass ) {
    static size_t nfiles = 0;
-   std::list<replace_t> replacements;
  
    __gnu_cxx::stdio_filebuf<char> outbuf(fdopen(output, "w"), std::ios::out);
    std::ostream out(&outbuf);
--- 1829,1834 ----
*************** cdftext::process_file( filespan_t mfile,
*** 1890,1923 ****
        continue; // No active REPLACE directive.
      }
  
!     std::list<span_t> segments = segment_line(mfile); // no replace yields
!     //                                                // 1 segment
  
      for( const auto& segment : segments ) {
        std::copy(segment.p, segment.pend, ofs);
      }
- 
-     if( segments.size() == 2 ) {
-       struct {
-         size_t before, after;
-         int delta() const { return before - after; } } nlines;
-       nlines.before = std::count(segments.front().p,
-                                  segments.front().pend, '\n');
-       nlines.after  = std::count(segments.back().p, segments.back().pend, '\n');
-       if( nlines.delta() < 0 ) {
-         yywarn("line %lu: REPLACED %lu lines with %lu lines, "
- 	       "line count off by %d",
- 	       gb4(mfile.lineno()),
- 	       gb4(nlines.before),
- 	       gb4(nlines.after),
- 	       nlines.delta());
-       }
-       int nnl = nlines.delta();
-       while( nnl-- > 0 ) {
-         static const char nl[] = "\n";
-         std::copy(nl, nl + 1, ofs);
-       }
-     }
      out.flush();
    }
    // end of file
--- 1893,1904 ----
        continue; // No active REPLACE directive.
      }
  
!     // 1 segment for COPY, 2 for REPLACE
!     std::list<span_t> segments = segment_line(mfile);
  
      for( const auto& segment : segments ) {
        std::copy(segment.p, segment.pend, ofs);
      }
      out.flush();
    }
    // end of file
diff -Nrcpad gcc-16-20250615/gcc/cobol/lexio.h gcc-16-20250622/gcc/cobol/lexio.h
*** gcc-16-20250615/gcc/cobol/lexio.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/lexio.h	Sun Jun 22 22:32:19 2025
*************** erase_source( char *src, char *esrc ) {
*** 69,75 ****
  struct bytespan_t {
    char *data, *eodata;
  
!   bytespan_t( char *data = NULL, char *eodata = NULL )
      : data(data), eodata(eodata)
    {
      if( eodata < data ) {
--- 69,77 ----
  struct bytespan_t {
    char *data, *eodata;
  
!   bytespan_t() : data( nullptr), eodata(nullptr) {}
!   
!   bytespan_t( char *data, char *eodata )
      : data(data), eodata(eodata)
    {
      if( eodata < data ) {
*************** struct filespan_t : public bytespan_t {
*** 124,130 ****
    {}
    filespan_t(void *p, size_t len)
      : bytespan_t( static_cast<char*>(p), static_cast<char*>(p) + len )
!     , cur(data), eol(data), quote(NULL), iline(0), line_quote72(0)
    {}
  
    size_t lineno() const { return iline; }
--- 126,132 ----
    {}
    filespan_t(void *p, size_t len)
      : bytespan_t( static_cast<char*>(p), static_cast<char*>(p) + len )
!     , cur(data), eol(data), quote(NULL), iline(0), icol(0), line_quote72(0)
    {}
  
    size_t lineno() const { return iline; }
*************** struct span_t {
*** 224,229 ****
--- 226,232 ----
    span_t( const char *data, const char *eodata ) : p(data), pend(eodata) {
      verify();
    }
+   // cppcheck-suppress operatorEqRetRefThis
    span_t& operator=( const csub_match& cm ) {
      p = cm.first;
      pend = cm.second;
*************** struct span_t {
*** 246,253 ****
  
  struct replace_t {
    struct span_t before, after;
!   replace_t( span_t before = span_t(),
!              span_t after  = span_t() )
      : before(before), after(after)
    {}
    replace_t& reset() {
--- 249,256 ----
  
  struct replace_t {
    struct span_t before, after;
!   replace_t() : before(span_t()), after(span_t()) {}
!   replace_t( span_t before, span_t after )
      : before(before), after(after)
    {}
    replace_t& reset() {
diff -Nrcpad gcc-16-20250615/gcc/cobol/parse.y gcc-16-20250622/gcc/cobol/parse.y
*** gcc-16-20250615/gcc/cobol/parse.y	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/parse.y	Sun Jun 22 22:32:19 2025
***************
*** 188,201 ****
      data_category_t category;
      category_map_t replacement;
  
!     init_statement_t( category_map_t replacement )
        : to_value(false)
        , category(data_category_none)
        , replacement(replacement)
  
      {}
  
!     init_statement_t( bool to_value = false )
        : to_value(to_value)
        , category(data_category_none)
        , replacement(category_map_t())
--- 188,201 ----
      data_category_t category;
      category_map_t replacement;
  
!     explicit init_statement_t( const category_map_t& replacement )
        : to_value(false)
        , category(data_category_none)
        , replacement(replacement)
  
      {}
  
!     explicit init_statement_t( bool to_value = false )
        : to_value(to_value)
        , category(data_category_none)
        , replacement(category_map_t())
***************
*** 242,248 ****
    struct Elem_list_t {
      std::list<E> elems;
      Elem_list_t() {}
!     Elem_list_t( E elem ) {
        elems.push_back(elem);
      }
      Elem_list_t * push_back( E elem ) {
--- 242,248 ----
    struct Elem_list_t {
      std::list<E> elems;
      Elem_list_t() {}
!     explicit Elem_list_t( E elem ) {
        elems.push_back(elem);
      }
      Elem_list_t * push_back( E elem ) {
***************
*** 732,738 ****
  
  %type   <refer>         inspected
  %type   <insp_qual>     insp_qual
! %type   <insp_match>    insp_quals insp_mtquals tally_match
  %type   <insp_replace>  x_by_y
  %type   <insp_oper>     replace_oper x_by_ys
  %type   <insp_oper>     tally_forth tally_matches
--- 732,738 ----
  
  %type   <refer>         inspected
  %type   <insp_qual>     insp_qual
! %type   <insp_match>    insp_quals insp_mtqual tally_match
  %type   <insp_replace>  x_by_y
  %type   <insp_oper>     replace_oper x_by_ys
  %type   <insp_oper>     tally_forth tally_matches
***************
*** 880,888 ****
      struct arith_t *arith;
      struct { size_t ntgt; cbl_num_result_t *tgts;
               cbl_refer_t *expr; } compute_body_t;
!     struct ast_inspect_t *insp_one;
!     struct ast_inspect_list_t *insp_all;
!     struct ast_inspect_oper_t *insp_oper;
      struct { bool before; cbl_inspect_qual_t *qual; } insp_qual;
             cbl_inspect_t *inspect;
             cbl_inspect_match_t *insp_match;
--- 880,888 ----
      struct arith_t *arith;
      struct { size_t ntgt; cbl_num_result_t *tgts;
               cbl_refer_t *expr; } compute_body_t;
!     struct cbl_inspect_t *insp_one;
!            cbl_inspect_opers_t *insp_all;
!     struct cbl_inspect_oper_t *insp_oper;
      struct { bool before; cbl_inspect_qual_t *qual; } insp_qual;
             cbl_inspect_t *inspect;
             cbl_inspect_match_t *insp_match;
***************
*** 1320,1326 ****
      return ok;
    }
  
!   static void initialize_allocated( cbl_refer_t input );
    static void
    initialize_statement( std::list<cbl_num_result_t>& tgts,
                          bool with_filler,
--- 1320,1326 ----
      return ok;
    }
  
!   static void initialize_allocated( const cbl_refer_t& input );
    static void
    initialize_statement( std::list<cbl_num_result_t>& tgts,
                          bool with_filler,
*************** program_id:     PROGRAM_ID dot namestr[n
*** 1482,1488 ****
                    const char *name = string_of($name);
                    parser_enter_program( name, false, &main_error );
                    if( main_error ) {
!                     error_msg(@name, "PROGRAM-ID 'main' is invalid with -main option");
                      YYERROR;
                    }
  
--- 1482,1488 ----
                    const char *name = string_of($name);
                    parser_enter_program( name, false, &main_error );
                    if( main_error ) {
!                     error_msg(@name, "PROGRAM-ID 'main' is invalid with %<-main%> option");
                      YYERROR;
                    }
  
*************** function_id:    FUNCTION '.' NAME progra
*** 1518,1524 ****
                    int main_error = 0;
                    parser_enter_program( $NAME, true, &main_error );
                    if( main_error ) {
!                     error_msg(@NAME, "FUNCTION-ID 'main' is invalid with -main option");
                      YYERROR;
                    }
                    if( symbols_begin() == symbols_end() ) {
--- 1518,1525 ----
                    int main_error = 0;
                    parser_enter_program( $NAME, true, &main_error );
                    if( main_error ) {
!                     error_msg(@NAME, "FUNCTION-ID %<main%> is invalid "
!                               "with %<-main%> option");
                      YYERROR;
                    }
                    if( symbols_begin() == symbols_end() ) {
*************** opt_binary:     FLOAT_BINARY default_kw
*** 1589,1595 ****
  		{
  		  cbl_unimplementedw("HIGH-ORDER-LEFT was ignored");
  		  if( ! current.option_binary(cbl_options_t::high_order_left_e) ) {
! 		    error_msg(@3, "unable to set HIGH_ORDER_LEFT");
  		  }
  		}
          |       FLOAT_BINARY default_kw is HIGH_ORDER_RIGHT[opt]
--- 1590,1596 ----
  		{
  		  cbl_unimplementedw("HIGH-ORDER-LEFT was ignored");
  		  if( ! current.option_binary(cbl_options_t::high_order_left_e) ) {
! 		    error_msg(@3, "unable to set %<HIGH_ORDER_LEFT%>");
  		  }
  		}
          |       FLOAT_BINARY default_kw is HIGH_ORDER_RIGHT[opt]
*************** select_clauses: select_clause { $$.claus
*** 1949,1955 ****
                      if( $$.file->nkey++ == 0 ) {
                        // If no key yet exists, create room for it and the
                        // present alternate.
!                       assert($$.file->keys == &cbl_file_t::no_key);
                        $$.file->keys = new cbl_file_key_t[++$$.file->nkey];
                      }
                      {
--- 1950,1956 ----
                      if( $$.file->nkey++ == 0 ) {
                        // If no key yet exists, create room for it and the
                        // present alternate.
!                       assert($$.file->keys == nullptr);
                        $$.file->keys = new cbl_file_key_t[++$$.file->nkey];
                      }
                      {
*************** select_clauses: select_clause { $$.claus
*** 1961,1968 ****
                        // Assign the alternate key to the last element,
                        // and update the pointer.
                        *alt = $part.file->keys[0];
!                       delete[] $$.file->keys;
!                       $$.file->keys = keys;
                      }
                      break;
                    case assign_clause_e:
--- 1962,1968 ----
                        // Assign the alternate key to the last element,
                        // and update the pointer.
                        *alt = $part.file->keys[0];
!                       $$.file->keys_update(keys);
                      }
                      break;
                    case assign_clause_e:
*************** select_clauses: select_clause { $$.claus
*** 2031,2041 ****
                        YYERROR;
                      }
                      if( $$.file->nkey == 0 ) {
                        $$.file->nkey = $part.file->nkey;
!                       $$.file->keys = $part.file->keys;
!                     } else {
!                       $$.file->keys[0] = $part.file->keys[0];
!                     }
                      break;
                    /* case password_clause_e: */
                    case file_status_clause_e:
--- 2031,2041 ----
                        YYERROR;
                      }
                      if( $$.file->nkey == 0 ) {
+                       assert( 1 == $part.file->nkey );
                        $$.file->nkey = $part.file->nkey;
!                       $$.file->keys = new cbl_file_key_t[1];
!                     } 
!                     $$.file->keys[0] = $part.file->keys[0];
                      break;
                    /* case password_clause_e: */
                    case file_status_clause_e:
*************** repo_program:   PROGRAM_kw NAME repo_as
*** 2391,2397 ****
                      assert(program);
                      prog.data.initial = program->name;
                    }
!                   auto e = symbol_field_add(PROGRAM, &prog);
                    symbol_field_location(symbol_index(e), @NAME);
                  }
                  ;
--- 2391,2397 ----
                      assert(program);
                      prog.data.initial = program->name;
                    }
!                   const auto e = symbol_field_add(PROGRAM, &prog);
                    symbol_field_location(symbol_index(e), @NAME);
                  }
                  ;
*************** dev_mnemonic:	device_name is NAME
*** 2521,2527 ****
  		{
  		  auto p = cmd_or_env_special_of($device);
  		  if( !p ) {
! 		    error_msg(@device, "%s is not a device name");
  		    YYERROR;
  		  }
  
--- 2521,2527 ----
  		{
  		  auto p = cmd_or_env_special_of($device);
  		  if( !p ) {
! 		    error_msg(@device, "%s is not a device name", $device);
  		    YYERROR;
  		  }
  
*************** alphabet_seqs:  alphabet_seq[seq]
*** 2593,2599 ****
                      YYERROR;
                    }
                    $$->add_sequence(@seq, $seq.low);
!                   size_t len = $seq.low == nul_string()? 1 : strlen((const char*)$seq.low);
                    assert(len > 0);
                    $$->add_interval(@seq, $seq.low[--len], $seq.high[0]);
                    $$->add_sequence(@seq, $seq.high);
--- 2593,2600 ----
                      YYERROR;
                    }
                    $$->add_sequence(@seq, $seq.low);
!                   size_t len = $seq.low == nul_string()?
!                     1 : strlen((const char*)$seq.low);
                    assert(len > 0);
                    $$->add_interval(@seq, $seq.low[--len], $seq.high[0]);
                    $$->add_sequence(@seq, $seq.high);
*************** alphabet_seq:   alphabet_lit[low]
*** 2646,2662 ****
  alphabet_etc:   alphabet_lit
                  {
                    if( $1.len > 1 ) {
!                     error_msg(@1, "'%c' can be only a single letter", $1.data);
                      YYERROR;
                    }
                    $$ = (unsigned char)$1.data[0];
                  }
          |       spaces_etc {
!                   // For figurative constants, pass the synmbol table index,
                    // marked with the high bit.
                    static const auto bits = sizeof($$) * 8 - 1;
!                   $$ = 1;
!                   $$ = $$ << bits;
                    $$ |= constant_index($1);
                  }
                  ;
--- 2647,2665 ----
  alphabet_etc:   alphabet_lit
                  {
                    if( $1.len > 1 ) {
!                     error_msg(@1, "%qs can be only a single letter", $1.data);
                      YYERROR;
                    }
                    $$ = (unsigned char)$1.data[0];
                  }
          |       spaces_etc {
!                   // For figurative constants, pass the symbol table index,
                    // marked with the high bit.
                    static const auto bits = sizeof($$) * 8 - 1;
!                   unsigned int high_bit = 1L << bits;
!                   static_assert(sizeof($$) == sizeof(high_bit),
!                                 "adjust high_bit to match size of nonterminal target");
!                   memcpy(&$$, &high_bit, sizeof($$));
                    $$ |= constant_index($1);
                  }
                  ;
*************** domain:         all LITERAL[a]
*** 2830,2836 ****
                    if( ! string_of($value) ) {
                      yywarn("'%s' has embedded NUL", $value.data);
                    }
!                   char *dom = $value.data;
                    $$ = new cbl_domain_t(@value, false, $value.len, dom);
                  }
          |       when_set_to FALSE_kw is reserved_value
--- 2833,2839 ----
                    if( ! string_of($value) ) {
                      yywarn("'%s' has embedded NUL", $value.data);
                    }
!                   const char *dom = $value.data;
                    $$ = new cbl_domain_t(@value, false, $value.len, dom);
                  }
          |       when_set_to FALSE_kw is reserved_value
*************** fd_clause:      record_desc
*** 2910,2916 ****
                    f->varying_size.explicitly = f->varies();
                    if( f->varying_size.max != 0 ) {
                      if( !(f->varying_size.min <= f->varying_size.max) ) {
!                       error_msg(@1, "%zu must be <= %zu",
                                  f->varying_size.min, f->varying_size.max);
                        YYERROR;
                      }
--- 2913,2919 ----
                    f->varying_size.explicitly = f->varies();
                    if( f->varying_size.max != 0 ) {
                      if( !(f->varying_size.min <= f->varying_size.max) ) {
!                       error_msg(@1, "%zu must be less than or equal to %zu",
                                  f->varying_size.min, f->varying_size.max);
                        YYERROR;
                      }
*************** rec_contains:   NUMSTR[min] {
*** 2986,2992 ****
                    }
                    $$.max = n;
                    if( !($$.min < $$.max) ) {
!                     error_msg(@max, "FROM (%xz) must be less than TO (%zu)",
                                $$.min, $$.max);
                      YYERROR;
                    }
--- 2989,2995 ----
                    }
                    $$.max = n;
                    if( !($$.min < $$.max) ) {
!                     error_msg(@max, "FROM (%zu) must be less than TO (%zu)",
                                $$.min, $$.max);
                      YYERROR;
                    }
*************** field:          cdf
*** 3182,3188 ****
                        }
                        initial = string_of(field.data.value_of());
                        if( !initial ) {
!                         error_msg(@1, xstrerror(errno));
                          YYERROR;
                        }
                        char decimal = symbol_decimal_point();
--- 3185,3191 ----
                        }
                        initial = string_of(field.data.value_of());
                        if( !initial ) {
!                         error_msg(@1, "could not convert value to string");
                          YYERROR;
                        }
                        char decimal = symbol_decimal_point();
*************** index_field1:   ctx_name[name]
*** 3290,3298 ****
  
                    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",
!                               field->name, field->line );
                      YYERROR;
                    }
  
--- 3293,3301 ----
  
                    auto symbol = symbol_field(PROGRAM, field.parent, $name);
                    if( symbol ) {
!                     auto f( cbl_field_of(symbol) );
                      error_msg(@name,  "'%s' already defined on line %d",
!                               f->name, f->line );
                      YYERROR;
                    }
  
*************** value78:        literalism
*** 3385,3391 ****
                  }
          |       reserved_value[value]
                  {
! 		  auto field = constant_of(constant_index($value));
                    $$ = new cbl_field_data_t(field->data);
                  }
  
--- 3388,3394 ----
                  }
          |       reserved_value[value]
                  {
! 		  const auto field = constant_of(constant_index($value));
                    $$ = new cbl_field_data_t(field->data);
                  }
  
*************** data_descr1:    level_name
*** 3636,3642 ****
                    }
                    if( field_index($thru) <= field_index($orig) ) {
                      error_msg(@orig, "cannot RENAME %s %s THRU %s %s "
!                              "because they're in the wrong order",
  			      $orig->level_str(), name_of($orig),
  			      $thru->level_str(), name_of($thru));
                      YYERROR;
--- 3639,3645 ----
                    }
                    if( field_index($thru) <= field_index($orig) ) {
                      error_msg(@orig, "cannot RENAME %s %s THRU %s %s "
!                              "because they are in the wrong order",
  			      $orig->level_str(), name_of($orig),
  			      $thru->level_str(), name_of($thru));
                      YYERROR;
*************** data_descr1:    level_name
*** 3678,3684 ****
                      case FldNumericEdited:
                        if( $field->has_attr(signable_e) ) {
                          error_msg(@2,  "%s has 'S' in PICTURE, cannot be BLANK WHEN ZERO",
!                                   $field->name, cbl_field_type_str($field->type) );
                        }
                        break;
                      default:
--- 3681,3687 ----
                      case FldNumericEdited:
                        if( $field->has_attr(signable_e) ) {
                          error_msg(@2,  "%s has 'S' in PICTURE, cannot be BLANK WHEN ZERO",
!                                   $field->name );
                        }
                        break;
                      default:
*************** data_descr1:    level_name
*** 3756,3762 ****
                    $field->report_invalid_initial_value(@data_clauses);
  
                    // verify REDEFINES
!                   auto parent = parent_of($field);
                    if( parent && $field->level == parent->level ) {
                      valid_redefine(@field, $field, parent); // calls yyerror
                    }
--- 3759,3765 ----
                    $field->report_invalid_initial_value(@data_clauses);
  
                    // verify REDEFINES
!                   const auto parent = parent_of($field);
                    if( parent && $field->level == parent->level ) {
                      valid_redefine(@field, $field, parent); // calls yyerror
                    }
*************** data_clauses:   data_clause
*** 3889,3897 ****
                        auto redefined = symbol_redefines(field);
                        if( redefined && redefined->type == FldPointer ) {
                          if( yydebug ) {
!                           yywarn("expanding %s size from %u bytes to "
! 				 HOST_WIDE_INT_PRINT " "
! 				 "because it redefines %s with USAGE POINTER",
                                  field->name, field->size(),
                                  int_size_in_bytes(ptr_type_node),
                                  redefined->name);
--- 3892,3899 ----
                        auto redefined = symbol_redefines(field);
                        if( redefined && redefined->type == FldPointer ) {
                          if( yydebug ) {
!                           yywarn("expanding %s size from %u bytes to %wd "
! 				 "because it redefines %s with %<USAGE POINTER%>",
                                  field->name, field->size(),
                                  int_size_in_bytes(ptr_type_node),
                                  redefined->name);
*************** picture_clause: PIC signed nps[fore] nin
*** 3984,3990 ****
                    field->data.capacity = type_capacity(field->type, $4);
                    field->data.digits = $4;
                    if( long(field->data.digits) != $4 ) {
!                     error_msg(@2, "indicated size would be %ld bytes, "
                               "maximum data item size is %u",
                               $4, UINT32_MAX);
                    }
--- 3986,3992 ----
                    field->data.capacity = type_capacity(field->type, $4);
                    field->data.digits = $4;
                    if( long(field->data.digits) != $4 ) {
!                     error_msg(@2, "indicated size would be %d bytes, "
                               "maximum data item size is %u",
                               $4, UINT32_MAX);
                    }
*************** picture_clause: PIC signed nps[fore] nin
*** 4054,4060 ****
  		      (dialect_gnu() || dialect_mf()) )
  		  { // PIC X COMP-X or COMP-9
  		    if( ! field->has_attr(all_x_e) ) {
! 		      error_msg(@2, "COMP PICTURE requires all X's or all 9's");
                        YYERROR;
  		    }
  		  } else {
--- 4056,4062 ----
  		      (dialect_gnu() || dialect_mf()) )
  		  { // PIC X COMP-X or COMP-9
  		    if( ! field->has_attr(all_x_e) ) {
! 		      error_msg(@2, "COMP PICTURE requires all X%'s or all 9%'s");
                        YYERROR;
  		    }
  		  } else {
*************** picture_clause: PIC signed nps[fore] nin
*** 4089,4095 ****
                    }
                    ERROR_IF_CAPACITY(@PIC, field);
                    if( !is_numeric_edited($picture) ) {
!                     error_msg(@picture, numed_message);
                      YYERROR;
                    }
                    field->data.picture = $picture;
--- 4091,4097 ----
                    }
                    ERROR_IF_CAPACITY(@PIC, field);
                    if( !is_numeric_edited($picture) ) {
!                     error_msg(@picture, "%s", numed_message);
                      YYERROR;
                    }
                    field->data.picture = $picture;
*************** alphanum_part:  ALNUM[picture] count
*** 4168,4174 ****
                      $$.nbyte += count; // AX9(3) has count 5
                    }
  		  if( count < 0 ) {
! 		    error_msg(@2, "PICTURE count '(%d)' is negative", count );
  		    YYERROR;
  		  }
                  }
--- 4170,4176 ----
                      $$.nbyte += count; // AX9(3) has count 5
                    }
  		  if( count < 0 ) {
! 		    error_msg(@2, "PICTURE count %<(%d)%> is negative", count );
  		    YYERROR;
  		  }
                  }
*************** nine:           %empty           { $$ =
*** 4187,4193 ****
                  {
                    $$ = $1;
  		  if( $$ == 0 ) {
! 		    error_msg(@1, "'(0)' invalid in PICTURE (ISO 2023 13.18.40.3)");
  		  }
                  }
                  ;
--- 4189,4195 ----
                  {
                    $$ = $1;
  		  if( $$ == 0 ) {
! 		    error_msg(@1, "%<(0)%> invalid in PICTURE (ISO 2023 13.18.40.3)");
  		  }
                  }
                  ;
*************** count:          %empty           { $$ =
*** 4201,4214 ****
                    REAL_VALUE_TYPE rn = numstr2i($NUMSTR.string, $NUMSTR.radix);
                    $$ = real_to_integer (&rn);
  		  if( $$ == 0 ) {
! 		    error_msg(@2, "'(0)' invalid in PICTURE (ISO 2023 13.18.40.3)");
  		  }
                  }
  	|	'(' NAME ')'
                  {
  		  auto value = cdf_value($NAME);
  		  if( ! (value && value->is_numeric()) ) {
! 		    error_msg(@NAME, "PICTURE '(%s)' requires a CONSTANT value", $NAME );
  		    YYERROR;
  		  }
  		  int nmsg = 0;
--- 4203,4216 ----
                    REAL_VALUE_TYPE rn = numstr2i($NUMSTR.string, $NUMSTR.radix);
                    $$ = real_to_integer (&rn);
  		  if( $$ == 0 ) {
! 		    error_msg(@2, "%<0%> invalid in PICTURE (ISO 2023 13.18.40.3)");
  		  }
                  }
  	|	'(' NAME ')'
                  {
  		  auto value = cdf_value($NAME);
  		  if( ! (value && value->is_numeric()) ) {
! 		    error_msg(@NAME, "PICTURE %qs requires a CONSTANT value", $NAME );
  		    YYERROR;
  		  }
  		  int nmsg = 0;
*************** count:          %empty           { $$ =
*** 4221,4233 ****
  		    if( !real_identical (TREE_REAL_CST_PTR (field->data.value_of()),
  				         &vi) ) {
  		      nmsg++;
! 		      error_msg(@NAME, "invalid PICTURE count '(%s)'",
  				field->data.initial );
  		    }
  		  }
  		  $$ = value->as_number();
  		  if( $$ <= 0 && !nmsg) {
! 		    error_msg(@NAME, "invalid PICTURE count '(%s)'", $NAME );
  		  }
                  }
                  ;
--- 4223,4235 ----
  		    if( !real_identical (TREE_REAL_CST_PTR (field->data.value_of()),
  				         &vi) ) {
  		      nmsg++;
! 		      error_msg(@NAME, "invalid PICTURE count %<(%s)%>",
  				field->data.initial );
  		    }
  		  }
  		  $$ = value->as_number();
  		  if( $$ <= 0 && !nmsg) {
! 		    error_msg(@NAME, "invalid PICTURE count %<(%s)%>", $NAME );
  		  }
                  }
                  ;
*************** same_clause:    SAME AS name
*** 4698,4704 ****
                      YYERROR;
                    }
  
!                   auto e = symbol_field_same_as( field, other );
                    symbol_field_location( symbol_index(e), @name );
                  }
                  ;
--- 4700,4706 ----
                      YYERROR;
                    }
  
!                   const auto e = symbol_field_same_as( field, other );
                    symbol_field_location( symbol_index(e), @name );
                  }
                  ;
*************** type_clause: TYPE to typename
*** 4747,4753 ****
                  {
                    cbl_field_t *field = current_field();
                    if( $typename ) {
!                     auto e = symbol_field_same_as(field, $typename);
  		    symbol_field_location( symbol_index(e), @typename );
                    }
                  }
--- 4749,4755 ----
                  {
                    cbl_field_t *field = current_field();
                    if( $typename ) {
!                     const auto e = symbol_field_same_as(field, $typename);
  		    symbol_field_location( symbol_index(e), @typename );
                    }
                  }
*************** type_clause: TYPE to typename
*** 4759,4765 ****
                    }
                    cbl_field_t *field = current_field();
                    if( $typename ) {
!                     auto e = symbol_field_same_as(field, $typename);
  		    symbol_field_location( symbol_index(e), @typename );
                    }
                  }
--- 4761,4767 ----
                    }
                    cbl_field_t *field = current_field();
                    if( $typename ) {
!                     const auto e = symbol_field_same_as(field, $typename);
  		    symbol_field_location( symbol_index(e), @typename );
                    }
                  }
*************** statements:                statement { $
*** 4972,4983 ****
  
  statement:      error {
                    if( current.declarative_section_name() ) {
! 		    error_msg(@1, "missing END DECLARATIVES or SECTION name",
! 			      nparse_error);
                      YYABORT;
                    }
                    if( max_errors_exceeded(nparse_error) ) {
!                     error_msg(@1, "max errors %d reached", nparse_error);
                      YYABORT;
                    }
                  }
--- 4974,4984 ----
  
  statement:      error {
                    if( current.declarative_section_name() ) {
! 		    error_msg(@1, "missing END DECLARATIVES or SECTION name");
                      YYABORT;
                    }
                    if( max_errors_exceeded(nparse_error) ) {
!                     error_msg(@1, "max errors %zu reached", nparse_error);
                      YYABORT;
                    }
                  }
*************** name88:		NAME88 {
*** 5401,5416 ****
  
  scalar88:	name88 subscripts[subs] refmod[ref]
                  {
-                   size_t n = $subs->size();
-                   auto subscripts = new cbl_refer_t[n];
-                   $subs->use_list(subscripts);
                    if( $ref.from->is_reference() || $ref.len->is_reference() ) {
                      error_msg(@subs, "subscripts on start:len refmod "
                              "parameters are unsupported");
                      YYERROR;
                    }
                    cbl_span_t span( $ref.from, $ref.len );
!                   $$ = new cbl_refer_t($1, n, subscripts, span);
                  }
          |       name88 refmod[ref]
                  {
--- 5402,5414 ----
  
  scalar88:	name88 subscripts[subs] refmod[ref]
                  {
                    if( $ref.from->is_reference() || $ref.len->is_reference() ) {
                      error_msg(@subs, "subscripts on start:len refmod "
                              "parameters are unsupported");
                      YYERROR;
                    }
                    cbl_span_t span( $ref.from, $ref.len );
!                   $$ = new cbl_refer_t($1, $subs->vectorize(), span);
                  }
          |       name88 refmod[ref]
                  {
*************** allocate:       ALLOCATE expr[size] CHAR
*** 5439,5445 ****
                  {
                    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;
--- 5437,5443 ----
                  {
                    statement_begin(@1, ALLOCATE);
                    if( $size->field->type == FldLiteralN ) {
! 		    const 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;
*************** display:        disp_body end_display
*** 5526,5532 ****
  		    if( $1.vargs->args.size() != 1 ) {
  		      error_msg(@1, "ARGUMENT-NUMBER can be set to only one value");
  		    }
! 		    cbl_refer_t& src( $1.vargs->args.front() );
  		    cbl_field_t *dst = register_find("_ARGI");
  		    parser_move( dst, src );
  		  } else {
--- 5524,5530 ----
  		    if( $1.vargs->args.size() != 1 ) {
  		      error_msg(@1, "ARGUMENT-NUMBER can be set to only one value");
  		    }
! 		   const  cbl_refer_t& src( $1.vargs->args.front() );
  		    cbl_field_t *dst = register_find("_ARGI");
  		    parser_move( dst, src );
  		  } else {
*************** display:        disp_body end_display
*** 5545,5551 ****
  		    if( $1.vargs->args.size() != 1 ) {
  		      error_msg(@1, "ARGUMENT-NUMBER can be set to only one value");
  		    }
! 		    cbl_refer_t& src( $1.vargs->args.front() );
  		    cbl_field_t *dst = register_find("_ARGI");
  		    parser_move( dst, src );
  		  } else {
--- 5543,5549 ----
  		    if( $1.vargs->args.size() != 1 ) {
  		      error_msg(@1, "ARGUMENT-NUMBER can be set to only one value");
  		    }
! 		   const cbl_refer_t& src( $1.vargs->args.front() );
  		    cbl_field_t *dst = register_find("_ARGI");
  		    parser_move( dst, src );
  		  } else {
*************** end_program:    end_program1[end] '.'
*** 5693,5699 ****
                      gcc_unreachable();
                    }
                    if( !matches ) {
!                     error_msg(@end, "END %s %s' does not match IDENTIFICATION DIVISION '%s'",
                                token_name, name, prog->name);
                      YYERROR;
                    }
--- 5691,5698 ----
                      gcc_unreachable();
                    }
                    if( !matches ) {
!                     error_msg(@end, "END %s %s does not match "
!                                     "%<IDENTIFICATION DIVISION %s%>",
                                token_name, name, prog->name);
                      YYERROR;
                    }
*************** end_program:    end_program1[end] '.'
*** 5705,5711 ****
                    }
                    std::set<std::string> externals = current.end_program();
                    if( !externals.empty() ) {
! 		    for( auto name : externals ) {
  		      yywarn("%s calls external symbol '%s'", prog->name, name.c_str());
  		    }
                      YYERROR;
--- 5704,5710 ----
                    }
                    std::set<std::string> externals = current.end_program();
                    if( !externals.empty() ) {
! 		    for( const auto& name : externals ) {
  		      yywarn("%s calls external symbol '%s'", prog->name, name.c_str());
  		    }
                      YYERROR;
*************** end_program:    end_program1[end] '.'
*** 5724,5732 ****
  		    token_name = "FUNCTION";
                      break;
                    default:
!                     cbl_internal_error( "END token invalid");
                    }
! 		  error_msg(@end, "END %s requires NAME before '.'", token_name);
  		  YYERROR;
  		}
                  ;
--- 5723,5731 ----
  		    token_name = "FUNCTION";
                      break;
                    default:
!                     cbl_internal_error( "%<END%> token invalid");
                    }
! 		  error_msg(@end, "%<END%> %s requires %<NAME%> before %<.%>", token_name);
  		  YYERROR;
  		}
                  ;
*************** exit_with:      %empty
*** 5800,5806 ****
  		    static cbl_refer_t status(rt);
  		    $$ = &status;
  		  }
! 		  auto prog = cbl_label_of(symbol_at(current_program_index()));
  		  if( prog->returning ) {
  		    $$ = new cbl_refer_t( cbl_field_of(symbol_at(prog->returning)) );
  		  }
--- 5799,5805 ----
  		    static cbl_refer_t status(rt);
  		    $$ = &status;
  		  }
! 		  const auto prog = cbl_label_of(symbol_at(current_program_index()));
  		  if( prog->returning ) {
  		    $$ = new cbl_refer_t( cbl_field_of(symbol_at(prog->returning)) );
  		  }
*************** true_false:     TRUE_kw  { $$ = TRUE_kw;
*** 6489,6495 ****
  
  scalar:         tableref {
  		  // Check for missing subscript; others already checked.
!                   if( $1->nsubscript == 0 && 0 < dimensions($1->field) ) {
                      subscript_dimension_error(@1, 0, $$);
                    }
  		}
--- 6488,6494 ----
  
  scalar:         tableref {
  		  // Check for missing subscript; others already checked.
!                   if( $1->nsubscript() == 0 && 0 < dimensions($1->field) ) {
                      subscript_dimension_error(@1, 0, $$);
                    }
  		}
*************** tableref:	tableish {
*** 6500,6507 ****
  		  $$ = $1;
  		  $$->loc = @1;
  		  if( $$->is_table_reference() ) {
!                     if( $$->nsubscript != dimensions($$->field) ) {
!                       subscript_dimension_error(@1, $$->nsubscript, $$);
  		      YYERROR;
  		    }
  		  }
--- 6499,6506 ----
  		  $$ = $1;
  		  $$->loc = @1;
  		  if( $$->is_table_reference() ) {
!                     if( $$->nsubscript() != dimensions($$->field) ) {
!                       subscript_dimension_error(@1, $$->nsubscript(), $$);
  		      YYERROR;
  		    }
  		  }
*************** move:           MOVE scalar TO move_tgts
*** 6777,6783 ****
                  {
                    statement_begin(@1, MOVE);
                    if( $scalar->field->type == FldIndex ) {
!                     error_msg(@1, "'%s' cannot be MOVEd because it's an INDEX",
  			     name_of($scalar->field) );
                      YYERROR;
                    }
--- 6776,6782 ----
                  {
                    statement_begin(@1, MOVE);
                    if( $scalar->field->type == FldIndex ) {
!                     error_msg(@1, "%qs cannot be MOVEd because it is an %<INDEX%>",
  			     name_of($scalar->field) );
                      YYERROR;
                    }
*************** section_kw:     SECTION
*** 7169,7188 ****
                  {
                    if( $1 ) {
  		    if( *$1 == '-' ) {
! 		      error_msg(@1, "SECTION segment %<%s%> is negative", $1);
                      } else {
  		      if( dialect_ibm() ) {
  			int sectno;
! 			sscanf($1, "%u", &sectno);
  			if( ! (0 <= sectno && sectno <= 99) ) {
! 			  error_msg(@1, "SECTION segment %<%s%> must be 0-99", $1);
  			} else {
  			  if(false) { // stand-in for warning, someday.
! 			    yywarn("SECTION segment %<%s%> was ignored", $1);
  			  }
  			}
  		      } else {
! 			cbl_unimplemented("SECTION segment %<%s%> is not ISO syntax", $1);
  		      }
                      }
  		  }
--- 7168,7187 ----
                  {
                    if( $1 ) {
  		    if( *$1 == '-' ) {
! 		      error_msg(@1, "SECTION segment %qs is negative", $1);
                      } else {
  		      if( dialect_ibm() ) {
  			int sectno;
! 			sscanf($1, "%d", &sectno);
  			if( ! (0 <= sectno && sectno <= 99) ) {
! 			  error_msg(@1, "SECTION segment %qs must be 0-99", $1);
  			} else {
  			  if(false) { // stand-in for warning, someday.
! 			    yywarn("SECTION segment %qs was ignored", $1);
  			  }
  			}
  		      } else {
! 			cbl_unimplemented("SECTION segment %qs is not ISO syntax", $1);
  		      }
                      }
  		  }
*************** perform_when1:	WHEN perform_ec {
*** 7593,7599 ****
  		  std::transform( $perform_ec->elems.begin(),
  				  $perform_ec->elems.end(),
  				  std::back_inserter(perf->dcls),
! 				  []( cbl_declarative_t *p ) {
  				    return *p;
  				  } );
  		  ast_enter_paragraph(when);
--- 7592,7598 ----
  		  std::transform( $perform_ec->elems.begin(),
  				  $perform_ec->elems.end(),
  				  std::back_inserter(perf->dcls),
! 				  []( const cbl_declarative_t *p ) {
  				    return *p;
  				  } );
  		  ast_enter_paragraph(when);
*************** except_files:	except_name[ec] FILE_KW fi
*** 7683,7694 ****
  
  perform_ec_other:
  		%empty %prec WHEN {
! 		  auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.other);
  		  parser_exit_paragraph();
  		}
  	|	WHEN OTHER {
! 		  auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.other);
  		}
  		exception statements %prec WHEN {
--- 7682,7693 ----
  
  perform_ec_other:
  		%empty %prec WHEN {
!                   const auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.other);
  		  parser_exit_paragraph();
  		}
  	|	WHEN OTHER {
!                   const auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.other);
  		}
  		exception statements %prec WHEN {
*************** perform_ec_other:
*** 7697,7708 ****
  		;
  perform_ec_common:
  		%empty {
! 		  auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.common);
  		  parser_exit_paragraph();
  		}
  	|	WHEN COMMON {
! 		  auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.common);
  		}
  		exception statements {
--- 7696,7707 ----
  		;
  perform_ec_common:
  		%empty {
! 		  const auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.common);
  		  parser_exit_paragraph();
  		}
  	|	WHEN COMMON {
! 		  const auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.common);
  		}
  		exception statements {
*************** perform_ec_common:
*** 7711,7728 ****
  		;
  perform_ec_finally:
  		%empty {
! 		  auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.finally);
  		  parser_exit_paragraph();
  		  parser_label_goto(ec_labels.fini);
  		}
  	|	FINALLY {
! 		  auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.finally);
  		}
  		exception statements {
  		  parser_exit_paragraph();
! 		  auto& ec_labels( perform_current()->ec_labels );
  		  parser_label_goto(ec_labels.fini);
  		}
  		;
--- 7710,7727 ----
  		;
  perform_ec_finally:
  		%empty {
! 		  const auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.finally);
  		  parser_exit_paragraph();
  		  parser_label_goto(ec_labels.fini);
  		}
  	|	FINALLY {
! 		  const auto& ec_labels( perform_current()->ec_labels );
  		  ast_enter_paragraph(ec_labels.finally);
  		}
  		exception statements {
  		  parser_exit_paragraph();
! 		  const auto& ec_labels( perform_current()->ec_labels );
  		  parser_label_goto(ec_labels.fini);
  		}
  		;
*************** raise:          RAISE EXCEPTION NAME
*** 7933,7939 ****
  			    "EXCEPTION CONDITION: %s", $NAME);
                      YYERROR;
                    }
!                   cbl_unimplemented("RAISE <EXCEPTION OBJECT>");
                    YYERROR;
                  }
                  ;
--- 7932,7938 ----
  			    "EXCEPTION CONDITION: %s", $NAME);
                      YYERROR;
                    }
!                   cbl_unimplemented("RAISE %<EXCEPTION OBJECT%>");
                    YYERROR;
                  }
                  ;
*************** read_body:      NAME read_next read_into
*** 8000,8009 ****
                      error_msg(@1, "syntax error? invalid file record name");
                      YYERROR;
                    }
-                   if( 0 && $$->access == file_access_dyn_e && $read_next >= 0 ) {
-                     error_msg(@1, "sequential DYNAMIC access requires NEXT RECORD");
-                     YYERROR;
-                   }
                    if( $read_key->field && is_sequential($$) ) {
                      error_msg(@1, "SEQUENTIAL file %s has no KEY", $$->name);
                      YYERROR;
--- 7999,8004 ----
*************** read_body:      NAME read_next read_into
*** 8014,8020 ****
                      YYERROR;
                    }
                    if( $read_key->field && $read_next < 0 ) {
!                     error_msg(@1, "cannot read NEXT with KEY", $$->name);
                      YYERROR;
                    }
  
--- 8009,8015 ----
                      YYERROR;
                    }
                    if( $read_key->field && $read_next < 0 ) {
!                     error_msg(@1, "cannot read NEXT with KEY %qs", $$->name);
                      YYERROR;
                    }
  
*************** merge:          MERGE { statement_begin(
*** 8451,8458 ****
                    USING filenames[inputs] sort_output
                  {
                    std::vector <cbl_key_t> keys($sort_keys->key_list.size());
! 		  std::copy( $sort_keys->key_list.begin(),
! 			     $sort_keys->key_list.end(), keys.begin() );
  
                    size_t ninput = $inputs->files.size();
                    size_t noutput = $sort_output->nfile();
--- 8446,8453 ----
                    USING filenames[inputs] sort_output
                  {
                    std::vector <cbl_key_t> keys($sort_keys->key_list.size());
!                   std::copy( $sort_keys->key_list.begin(),
!                              $sort_keys->key_list.end(), keys.begin() );
  
                    size_t ninput = $inputs->files.size();
                    size_t noutput = $sort_output->nfile();
*************** merge:          MERGE { statement_begin(
*** 8471,8478 ****
                      out_proc = &$sort_output->tgt;
                    }
  
!                   parser_file_merge( $file, $sort_seq,
!                                      keys.size(), keys.empty()? NULL : keys.data(),
                                       ninput, inputs,
                                       noutput, outputs,
                                       out_proc );
--- 8466,8472 ----
                      out_proc = &$sort_output->tgt;
                    }
  
!                   parser_file_merge( $file, $sort_seq, keys, 
                                       ninput, inputs,
                                       noutput, outputs,
                                       out_proc );
*************** set:            SET set_tgts[tgts] TO se
*** 8638,8644 ****
                    class set_conditional {
                      bool tf;
                     public:
!                     set_conditional( int token ) : tf(token == TRUE_kw) {}
                      void operator()(cbl_refer_t& refer) {
                        if( refer.field->data.false_value_of() == NULL && !tf ) {
  			auto loc = symbol_field_location(field_index(refer.field));
--- 8632,8638 ----
                    class set_conditional {
                      bool tf;
                     public:
!                     explicit set_conditional( int token ) : tf(token == TRUE_kw) {}
                      void operator()(cbl_refer_t& refer) {
                        if( refer.field->data.false_value_of() == NULL && !tf ) {
  			auto loc = symbol_field_location(field_index(refer.field));
*************** set_switches:   switches TO on_off
*** 8663,8669 ****
                  {
                    struct switcheroo {
                      bitop_t op;
!                     switcheroo( bool tf ) : op( tf? bit_set_op : bit_clear_op ) {}
                      switcheroo& operator()(cbl_field_t* sw) {
                        assert(sw->type == FldSwitch);
                        assert(sw->data.initial); // not a switch condition
--- 8657,8663 ----
                  {
                    struct switcheroo {
                      bitop_t op;
!                     explicit switcheroo( bool tf ) : op( tf? bit_set_op : bit_clear_op ) {}
                      switcheroo& operator()(cbl_field_t* sw) {
                        assert(sw->type == FldSwitch);
                        assert(sw->data.initial); // not a switch condition
*************** search_terms:   search_term
*** 8803,8816 ****
                  ;
  search_term:    scalar[key] '=' search_expr[sarg]
                  {
!                   if( $key->nsubscript == 0 ) {
                      error_msg(@1, "no index for key");
                      YYERROR;
                    }
!                   if( dimensions($key->field) < $key->nsubscript ) {
                      error_msg(@1, "too many subscripts: "
!                               "%zu for table of %zu dimensions",
!                               $key->nsubscript, dimensions($key->field) );
                      YYERROR;
                    }
  
--- 8797,8810 ----
                  ;
  search_term:    scalar[key] '=' search_expr[sarg]
                  {
!                   if( $key->nsubscript() == 0 ) {
                      error_msg(@1, "no index for key");
                      YYERROR;
                    }
!                   if( dimensions($key->field) < $key->nsubscript() ) {
                      error_msg(@1, "too many subscripts: "
!                               "%u for table of %zu dimensions",
!                               $key->nsubscript(), dimensions($key->field) );
                      YYERROR;
                    }
  
*************** sort_table:     SORT tableref[table] sor
*** 8849,8856 ****
                      keys.at(i++) = cbl_key_t(k);
                    }
  
!                   parser_sort( *$table, $sort_dup, $sort_seq,
! 			       keys.size(), keys.empty()? NULL : keys.data() );
                  }
          |       SORT tableref[table] sort_dup sort_seq {
                    statement_begin(@1, SORT);
--- 8843,8849 ----
                      keys.at(i++) = cbl_key_t(k);
                    }
  
!                   parser_sort( *$table, $sort_dup, $sort_seq, keys );
                  }
          |       SORT tableref[table] sort_dup sort_seq {
                    statement_begin(@1, SORT);
*************** sort_table:     SORT tableref[table] sor
*** 8860,8868 ****
                    cbl_key_t
                      key = cbl_key_t($table->field->occurs.keys[0]),
                      guess(1, &$table->field);
!                   ;
!                   if( key.nfield == 0 ) key = guess;
!                   parser_sort( *$table, $sort_dup, $sort_seq, 1, &key );
                  }
                  ;
  
--- 8853,8862 ----
                    cbl_key_t
                      key = cbl_key_t($table->field->occurs.keys[0]),
                      guess(1, &$table->field);
!                   
!                   if( key.fields.empty() ) key = guess;
!                   std::vector<cbl_key_t> keys(1, key);
!                   parser_sort( *$table, $sort_dup, $sort_seq, keys );
                  }
                  ;
  
*************** sort_file:      SORT FILENAME[file] sort
*** 8903,8909 ****
                    parser_file_sort( file,
                                      $sort_dup,
                                      $sort_seq,
!                                     keys.size(), keys.empty()? NULL : keys.data(),
                                      ninput, inputs,
                                      noutput, outputs,
                                      in_proc, out_proc );
--- 8897,8903 ----
                    parser_file_sort( file,
                                      $sort_dup,
                                      $sort_seq,
!                                     keys, 
                                      ninput, inputs,
                                      noutput, outputs,
                                      in_proc, out_proc );
*************** backward:	%empty   { $$ = false; }
*** 9095,9101 ****
  inspect:        INSPECT backward inspected TALLYING tallies
                  {
                    statement_begin(@1, INSPECT);
!                   ast_inspect( *$inspected, $backward, *$tallies );
                  }
          |       INSPECT backward inspected TALLYING tallies REPLACING replacements
                  {
--- 9089,9095 ----
  inspect:        INSPECT backward inspected TALLYING tallies
                  {
                    statement_begin(@1, INSPECT);
!                   ast_inspect( @$, *$inspected, $backward, *$tallies );
                  }
          |       INSPECT backward inspected TALLYING tallies REPLACING replacements
                  {
*************** inspect:        INSPECT backward inspect
*** 9107,9114 ****
                    }
                    statement_begin(@1, INSPECT);
                    // All tallying is done before any replacing
!                   ast_inspect( *$inspected, $backward, *$tallies );
!                   ast_inspect( *$inspected, $backward, *$replacements );
                  }
          |       INSPECT backward inspected                  REPLACING replacements
                  {
--- 9101,9108 ----
                    }
                    statement_begin(@1, INSPECT);
                    // All tallying is done before any replacing
!                   ast_inspect( @$, *$inspected, $backward, *$tallies );
!                   ast_inspect( @$, *$inspected, $backward, *$replacements );
                  }
          |       INSPECT backward inspected                  REPLACING replacements
                  {
*************** inspect:        INSPECT backward inspect
*** 9119,9129 ****
                      YYERROR;
                    }
                    statement_begin(@1, INSPECT);
!                   ast_inspect( *$inspected, $backward, *$replacements );
                  }
          |       INSPECT backward inspected CONVERTING alpha_val[match]
                                    TO  all    alpha_val[replace_oper]
!                                              insp_mtquals[qual]
                  {
  		  if( $all ) {
  		    $replace_oper->all = true;
--- 9113,9123 ----
                      YYERROR;
                    }
                    statement_begin(@1, INSPECT);
!                   ast_inspect( @$, *$inspected, $backward, *$replacements );
                  }
          |       INSPECT backward inspected CONVERTING alpha_val[match]
                                    TO  all    alpha_val[replace_oper]
!                                              insp_mtqual[qual]
                  {
  		  if( $all ) {
  		    $replace_oper->all = true;
*************** inspect:        INSPECT backward inspect
*** 9143,9149 ****
  		    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;
--- 9137,9143 ----
  		    if( is_literal(match) && is_literal(replace) ) {
  		      if( !$match->all && !$replace_oper->all) {
  			if( match->data.capacity != replace->data.capacity ) {
! 			  error_msg(@match, "%qs, size %u NOT EQUAL %qs, size %u",
  				    nice_name_of(match), match->data.capacity, 
  				    nice_name_of(replace), replace->data.capacity);
  			  YYERROR;
*************** inspect:        INSPECT backward inspect
*** 9169,9175 ****
  
  tallies:        { need_nume_set(); } tally
                  {
!                   $$ = new ast_inspect_list_t( *$tally );
                  }
          |       tallies { need_nume_set(); } tally
                  {
--- 9163,9169 ----
  
  tallies:        { need_nume_set(); } tally
                  {
!                   $$ = new cbl_inspect_opers_t( 1, *$tally );
                  }
          |       tallies { need_nume_set(); } tally
                  {
*************** tallies:        { need_nume_set(); } tal
*** 9179,9190 ****
                    if( !next.tally.field ) {
                      // prior tally swallowed one too many
                      cbl_inspect_t& prior = $$->back();
!                     assert(prior.nbound > 0);
!                     assert(prior.opers);
!                     cbl_inspect_oper_t& prior_op = prior.opers[prior.nbound - 1];
! 
!                     assert(prior_op.n_identifier_3 > 0 );
!                     next.tally = prior_op.matches[--prior_op.n_identifier_3].matching;
                    }
                    if( !next.tally.field ) {
                      error_msg(@$, "missing summation field before FOR");
--- 9173,9189 ----
                    if( !next.tally.field ) {
                      // prior tally swallowed one too many
                      cbl_inspect_t& prior = $$->back();
!                     assert(prior.nbound() > 0);
!                     cbl_inspect_oper_t& prior_op = prior.back();
!                     assert(! prior_op.matches.empty() );
!                     assert(prior_op.n_identifier_3() > 0 );
!                     cbl_inspect_match_t wrong_match = prior_op.matches.back();
!                     dbgmsg("moving overeager tally to next clause");
!                     dump_inspect_match(wrong_match);
!                     next.tally = wrong_match.premature_tally();
!                     if( wrong_match.empty() ) {
!                       prior_op.matches.pop_back();
!                     }
                    }
                    if( !next.tally.field ) {
                      error_msg(@$, "missing summation field before FOR");
*************** tallies:        { need_nume_set(); } tal
*** 9196,9239 ****
  
                  /*
                   * numref might be "empty" only because it was consumed by a
!                  * prior insp_mtquals, which can end in a scalar. If that
                   * happens, the tallies target, above, takes back the borrowed
                   * scalar and assigns it to be the tally total, as the user
                   * intended.
                   */
  tally:          numeref[total] FOR tally_fors[fors]
!                 { // reduce ast_inspect_t to cbl_inspect_t
                    if( yydebug && !$total ) {
!                     error_msg(@FOR, "caution: missing summation field before FOR");
                    }
!                   cbl_refer_t total( $total? *$total : cbl_refer_t() );
!                   $$ = new cbl_inspect_t( total, $fors->opers() );
                  }
                  ;
  
! tally_fors:     tally_forth
!                 { // reduce ast_inspect_oper_t to cbl_inspect_oper_t
!                   cbl_inspect_oper_t oper( $1->bound, $1->matches );
!                   $$ = new ast_inspect_t;
!                   $$ ->push_back(oper);
!                 }
!         |       tally_fors tally_forth
!                 {
!                   cbl_inspect_oper_t oper( $2->bound, $2->matches );
!                   $1 ->push_back(oper);
!                 }
                  ;
  
! tally_forth:    CHARACTERS insp_mtquals[q] scalar[next_tally]
                  {
                    // Add ensuing scalar as if it were an argument to CHARACTERS.
                    // It will be moved to the succeeding FOR as its tally.
!                   $q->matching = *$next_tally;
!                   $$ = new ast_inspect_oper_t(*$q);
                  }
!         |       CHARACTERS insp_mtquals[q]
                  {
!                   $$ = new ast_inspect_oper_t(*$q);
                  }
          |       ALL tally_matches[q]
                  { $q->bound = bound_all_e;
--- 9195,9231 ----
  
                  /*
                   * numref might be "empty" only because it was consumed by a
!                  * prior insp_mtqual, which can end in a scalar. If that
                   * happens, the tallies target, above, takes back the borrowed
                   * scalar and assigns it to be the tally total, as the user
                   * intended.
                   */
  tally:          numeref[total] FOR tally_fors[fors]
!                 { 
                    if( yydebug && !$total ) {
!                     dbgmsg("tally: caution: missing summation field before FOR");
                    }
!                   $$ = $fors;
!                   if( $total ) $$->tally = *$total;
                  }
                  ;
  
! tally_fors:     tally_forth { $$ = new cbl_inspect_t(1, *$1); }
!         |       tally_fors tally_forth { $$->push_back(*$2); $$ = $1; }
                  ;
  
! tally_forth:    CHARACTERS insp_mtqual[q] scalar[next_tally]
                  {
                    // Add ensuing scalar as if it were an argument to CHARACTERS.
                    // It will be moved to the succeeding FOR as its tally.
!                   dbgmsg("saving overeager tally for next clause");
!                   $q->save_premature_tally(*$next_tally);
!                   $$ = new cbl_inspect_oper_t(*$q);
!                   dump_inspect_match($$->matches.back());
                  }
!         |       CHARACTERS insp_mtqual[q]
                  {
!                   $$ = new cbl_inspect_oper_t(*$q);
                  }
          |       ALL tally_matches[q]
                  { $q->bound = bound_all_e;
*************** tally_forth:    CHARACTERS insp_mtquals[
*** 9252,9277 ****
                  }
                  ;
  
! tally_matches:  tally_match { $$ = new ast_inspect_oper_t(*$1); }
          |       tally_matches tally_match
                  { // add to the list of matches for an operand
                    $1->matches.push_back(*$2);
                  }
                  ;
! tally_match:    alpha_val[matching] insp_mtquals[q]
                  { // include the matching field with the qualifiers
                    $$ = $q;
!                   $$->matching = *$matching;
                  }
                  ;
  
  numeref:        %empty { $$ = NULL; need_nume_set(false); }
          |       nume[name] subscripts[subs]
                  {
!                   size_t n = $subs->size();
!                   auto offsets = new cbl_refer_t[n];
!                   std::copy( $subs->begin(), $subs->end(), offsets );
!                   $$ = new cbl_refer_t($name, n, offsets);
                  }
          |       nume { $$ = new cbl_refer_t($nume); }
                  ;
--- 9244,9266 ----
                  }
                  ;
  
! tally_matches:  tally_match { $$ = new cbl_inspect_oper_t(*$1); }
          |       tally_matches tally_match
                  { // add to the list of matches for an operand
                    $1->matches.push_back(*$2);
                  }
                  ;
! tally_match:    alpha_val[matching] insp_mtqual[q]
                  { // include the matching field with the qualifiers
                    $$ = $q;
!                   $$->matching(*$matching);
                  }
                  ;
  
  numeref:        %empty { $$ = NULL; need_nume_set(false); }
          |       nume[name] subscripts[subs]
                  {
!                   $$ = new cbl_refer_t($name, $subs->vectorize());
                  }
          |       nume { $$ = new cbl_refer_t($nume); }
                  ;
*************** qnume:          NUME            { name_q
*** 9301,9313 ****
  
  replacements:   replacement
                  {
!                   cbl_inspect_t inspect( cbl_refer_t(), $1->opers() );
!                   $$ = new ast_inspect_list_t(inspect);
                  }
                  ;
  replacement:    replace_oper
                  {
!                   $$ = new ast_inspect_t;
                    $$->push_back( cbl_inspect_oper_t($1->bound, $1->replaces) );
                  }
          |       replacement replace_oper
--- 9290,9302 ----
  
  replacements:   replacement
                  {
!                   cbl_inspect_t inspect( cbl_refer_t(), *$1 );
!                   $$ = new cbl_inspect_opers_t(1, inspect);
                  }
                  ;
  replacement:    replace_oper
                  {
!                   $$ = new cbl_inspect_t;
                    $$->push_back( cbl_inspect_oper_t($1->bound, $1->replaces) );
                  }
          |       replacement replace_oper
*************** replacement:    replace_oper
*** 9315,9323 ****
                    $$->push_back( cbl_inspect_oper_t($2->bound, $2->replaces)  );
                  }
                  ;
! replace_oper:   CHARACTERS BY alpha_val[replace] insp_mtquals[q]
                  {
!                   $$ = new ast_inspect_oper_t( cbl_inspect_replace_t(NULL,
                                                                       *$replace,
                                                                       $q->before,
                                                                       $q->after) );
--- 9304,9312 ----
                    $$->push_back( cbl_inspect_oper_t($2->bound, $2->replaces)  );
                  }
                  ;
! replace_oper:   CHARACTERS BY alpha_val[replace] insp_mtqual[q]
                  {
!                   $$ = new cbl_inspect_oper_t( cbl_inspect_replace_t(NULL,
                                                                       *$replace,
                                                                       $q->before,
                                                                       $q->after) );
*************** replace_oper:   CHARACTERS BY alpha_val[
*** 9331,9351 ****
  
  x_by_ys:        x_by_y
                  {
!                   $$ = new ast_inspect_oper_t(*$1);
                  }
          |       x_by_ys x_by_y
                  {
                    $$->replaces.push_back(*$2);
                  }
                  ;
! x_by_y:         alpha_val[matching] BY alpha_val[replace] insp_mtquals[q]
                  {
                    $$ = new cbl_inspect_replace_t(*$matching, *$replace,
                                                     $q->before, $q->after);
                  }
                  ;
  
! insp_mtquals:   %empty     { $$ = new cbl_inspect_match_t; }
          |       insp_quals
                  ;
  insp_quals:     insp_qual  {
--- 9320,9341 ----
  
  x_by_ys:        x_by_y
                  {
!                   $$ = new cbl_inspect_oper_t(*$1);
                  }
          |       x_by_ys x_by_y
                  {
                    $$->replaces.push_back(*$2);
                  }
                  ;
! x_by_y:         alpha_val[matching] BY alpha_val[replace] insp_mtqual[q]
                  {
                    $$ = new cbl_inspect_replace_t(*$matching, *$replace,
                                                     $q->before, $q->after);
                  }
                  ;
  
! 		/* mt may be "empty": match may have no qualifiers */
! insp_mtqual:	%empty { $$ = new cbl_inspect_match_t; }
          |       insp_quals
                  ;
  insp_quals:     insp_qual  {
*************** insp_quals:     insp_qual  {
*** 9355,9360 ****
--- 9345,9351 ----
                    } else {
                      $$->after = *$insp_qual.qual;
                    }
+                   dump_inspect_match(*$$);
                  }
          |       insp_quals insp_qual
                  {
*************** alter_tgt:      label_1[old] alter_to la
*** 9774,9780 ****
                    cbl_perform_tgt_t tgt( $old, $new );
                    parser_alter(&tgt);
  
!                   auto prog = cbl_label_of( symbol_at(symbol_elem_of($old)->program));
                    if( prog->initial ) {
                      cbl_unimplemented("ALTER %s", $old->name);
                    }
--- 9765,9771 ----
                    cbl_perform_tgt_t tgt( $old, $new );
                    parser_alter(&tgt);
  
!                   const auto prog = cbl_label_of( symbol_at(symbol_elem_of($old)->program));
                    if( prog->initial ) {
                      cbl_unimplemented("ALTER %s", $old->name);
                    }
*************** function_udf:   FUNCTION_UDF '(' arg_lis
*** 10172,10178 ****
  		  size_t i = 0;
  		  // Pass parameters as defined by the function.
                    std::transform( $args->refers.begin(), $args->refers.end(), args.begin(),
! 				  [params, &i]( cbl_refer_t& arg ) {
  				    function_descr_arg_t param = params.at(i++);
  				    auto ar = new cbl_refer_t(arg);
  				    cbl_ffi_arg_t actual(param.crv, ar);
--- 10163,10169 ----
  		  size_t i = 0;
  		  // Pass parameters as defined by the function.
                    std::transform( $args->refers.begin(), $args->refers.end(), args.begin(),
! 				  [params, &i]( const cbl_refer_t& arg ) {
  				    function_descr_arg_t param = params.at(i++);
  				    auto ar = new cbl_refer_t(arg);
  				    cbl_ffi_arg_t actual(param.crv, ar);
*************** intrinsic:      function_udf
*** 10221,10228 ****
  								    args.data());
                    if( p != NULL ) {
  		    auto loc = symbol_field_location(field_index(p->field));
!                     error_msg(loc, "FUNCTION %s has "
!                               "inconsistent parameter type %zu ('%s')",
                                keyword_str($1), p - args.data(), name_of(p->field) );
                      YYERROR;
                    }
--- 10212,10219 ----
  								    args.data());
                    if( p != NULL ) {
  		    auto loc = symbol_field_location(field_index(p->field));
!                     error_msg(loc, "FUNCTION %qs has "
!                               "inconsistent parameter type %zu (%qs)",
                                keyword_str($1), p - args.data(), name_of(p->field) );
                      YYERROR;
                    }
*************** intrinsic:      function_udf
*** 10299,10305 ****
                    location_set(@1);
                    $$ = new_alphanumeric("FIND-STRING");
                    /* auto r1 = new_reference(new_literal(strlen($r1), $r1, quoted_e)); */
! 		  cbl_unimplemented("FIND_STRING");
                    /* if( ! intrinsic_call_4($$, FIND_STRING, r1, $r2) ) YYERROR; */
                  }
  
--- 10290,10296 ----
                    location_set(@1);
                    $$ = new_alphanumeric("FIND-STRING");
                    /* auto r1 = new_reference(new_literal(strlen($r1), $r1, quoted_e)); */
! 		  cbl_unimplemented("%<FIND_STRING%>");
                    /* if( ! intrinsic_call_4($$, FIND_STRING, r1, $r2) ) YYERROR; */
                  }
  
*************** numval_locale:  %empty {
*** 10766,10772 ****
                    $$.arg2 = cbl_refer_t::empty();
                  }
          |       LOCALE NAME  { $$.is_locale = true;  $$.arg2 = NULL;
!                   cbl_unimplemented("NUMVAL_C LOCALE"); YYERROR;
                  }
          |       varg         { $$.is_locale = false; $$.arg2 = $1; }
                  ;
--- 10757,10763 ----
                    $$.arg2 = cbl_refer_t::empty();
                  }
          |       LOCALE NAME  { $$.is_locale = true;  $$.arg2 = NULL;
!                   cbl_unimplemented("%<NUMVAL_C LOCALE%>"); YYERROR;
                  }
          |       varg         { $$.is_locale = false; $$.arg2 = $1; }
                  ;
*************** first_line_of( YYLTYPE loc ) {
*** 11315,11321 ****
      return loc;
  }
  
! void ast_call( const YYLTYPE& loc, cbl_refer_t name, cbl_refer_t returning,
                    size_t narg, cbl_ffi_arg_t args[],
                    cbl_label_t *except,
                    cbl_label_t *not_except,
--- 11306,11312 ----
      return loc;
  }
  
! void ast_call( const YYLTYPE& loc, cbl_refer_t name, const cbl_refer_t& returning,
                    size_t narg, cbl_ffi_arg_t args[],
                    cbl_label_t *except,
                    cbl_label_t *not_except,
*************** statement_begin( const YYLTYPE& loc, int
*** 11407,11413 ****
  
  struct string_match {
    const char *name;
!   string_match( const char name[] ) : name(name) {}
    bool operator()( const char input[] ) const {
      return strlen(name) == strlen(input) && 0 == strcasecmp(name, input);
    }
--- 11398,11404 ----
  
  struct string_match {
    const char *name;
!   explicit string_match( const char name[] ) : name(name) {}
    bool operator()( const char input[] ) const {
      return strlen(name) == strlen(input) && 0 == strcasecmp(name, input);
    }
*************** struct string_match {
*** 11415,11423 ****
  
  const char *
  keyword_str( int token ) {
!   if( token == YYEOF )   return "YYEOF";
!   if( token == YYEMPTY ) return "YYEMPTY";
! 
    if( token < 256 ) {
      static char ascii[2];
      ascii[0] = token;
--- 11406,11418 ----
  
  const char *
  keyword_str( int token ) {
!   switch( token ) {
!   case YYEOF:   return "YYEOF";
!   case YYEMPTY: return "YYEMPTY";
!   case 256:     return "YYerror";
!   case 257:     return "invalid token"; // YYUNDEF
!   }
!   
    if( token < 256 ) {
      static char ascii[2];
      ascii[0] = token;
*************** tokenset_t::find( const cbl_name_t name,
*** 11461,11469 ****
    if( dialect_ibm() ) {
        static const cbl_name_t ibm_non_names[] = {
  	  "RESUME",
!       }, * const eonames = ibm_non_names + COUNT_OF(ibm_non_names);
  
!       if( std::any_of(ibm_non_names, eonames,
  		      [candidate=name](const cbl_name_t non_name) {
  			  return 0 == strcasecmp(non_name, candidate)
  			      && strlen(non_name) == strlen(candidate);
--- 11456,11464 ----
    if( dialect_ibm() ) {
        static const cbl_name_t ibm_non_names[] = {
  	  "RESUME",
!       }, * const eoibm = ibm_non_names + COUNT_OF(ibm_non_names);
  
!       if( std::any_of(ibm_non_names, eoibm,
  		      [candidate=name](const cbl_name_t non_name) {
  			  return 0 == strcasecmp(non_name, candidate)
  			      && strlen(non_name) == strlen(candidate);
*************** keyword_tok( const char * text, bool inc
*** 11500,11506 ****
  
  static inline size_t
  verify_figconst( enum cbl_figconst_t figconst , size_t pos ) {
!   cbl_field_t *f = cbl_field_of(symbol_at(pos));
    assert((f->attr & FIGCONST_MASK) == figconst);
    return pos;
  }
--- 11495,11501 ----
  
  static inline size_t
  verify_figconst( enum cbl_figconst_t figconst , size_t pos ) {
!   const cbl_field_t *f = cbl_field_of(symbol_at(pos));
    assert((f->attr & FIGCONST_MASK) == figconst);
    return pos;
  }
*************** relop_invert(relop_t op) {
*** 11546,11552 ****
    case ge_op: return lt_op;
    case gt_op: return le_op;
    }
!   cbl_errx( "%s:%d: invalid relop_t %d", __func__, __LINE__, op);
  
    return relop_t(0); // not reached
  }
--- 11541,11547 ----
    case ge_op: return lt_op;
    case gt_op: return le_op;
    }
!   cbl_internal_error("%s:%d: invalid %<relop_t%> %d", __func__, __LINE__, op);
  
    return relop_t(0); // not reached
  }
*************** current_t::udf_update( const ffi_args_t
*** 11792,11798 ****
    if( ! ffi_args ) return;
    assert(ffi_args->elems.size() < sizeof(function_descr_t::types));
  
!   auto returning = cbl_field_of(symbol_at(L->returning));
    auto key = function_descr_t::init(L->name);
    auto func = udfs.find(key);
    assert(func != udfs.end());
--- 11787,11793 ----
    if( ! ffi_args ) return;
    assert(ffi_args->elems.size() < sizeof(function_descr_t::types));
  
!   const auto returning = cbl_field_of(symbol_at(L->returning));
    auto key = function_descr_t::init(L->name);
    auto func = udfs.find(key);
    assert(func != udfs.end());
*************** current_t::udf_args_valid( const cbl_lab
*** 11834,11845 ****
    }
  
    size_t i = 0;
!   for( cbl_refer_t arg : args ) {
      if( arg.field ) { // else omitted
        auto tgt = cbl_field_of(symbol_at(udf.linkage_fields.at(i).isym));
        if( ! valid_move(tgt, arg.field) ) {
  	auto loc = symbol_field_location(field_index(arg.field));
! 	error_msg(loc, "FUNCTION %s arg %zu, '%s' cannot be passed to %s, type %s",
  		  L->name, i, arg.field->pretty_name(),
  		  tgt->pretty_name(), 3 + cbl_field_type_str(tgt->type) );
  	return false;
--- 11829,11840 ----
    }
  
    size_t i = 0;
!   for( const cbl_refer_t& arg : args ) {
      if( arg.field ) { // else omitted
        auto tgt = cbl_field_of(symbol_at(udf.linkage_fields.at(i).isym));
        if( ! valid_move(tgt, arg.field) ) {
  	auto loc = symbol_field_location(field_index(arg.field));
! 	error_msg(loc, "FUNCTION %s argument %zu, '%s' cannot be passed to %s, type %s",
  		  L->name, i, arg.field->pretty_name(),
  		  tgt->pretty_name(), 3 + cbl_field_type_str(tgt->type) );
  	return false;
*************** function_descr_t
*** 11891,11897 ****
  function_descr_t::init( int isym ) {
    function_descr_t descr = { FUNCTION_UDF_0 };
    descr.ret_type = FldInvalid;
!   auto L = cbl_label_of(symbol_at(isym));
    bool ok = namcpy(YYLTYPE(), descr.name, L->name);
    gcc_assert(ok);
    return descr;
--- 11886,11892 ----
  function_descr_t::init( int isym ) {
    function_descr_t descr = { FUNCTION_UDF_0 };
    descr.ret_type = FldInvalid;
!   const auto L = cbl_label_of(symbol_at(isym));
    bool ok = namcpy(YYLTYPE(), descr.name, L->name);
    gcc_assert(ok);
    return descr;
*************** arith_t::arith_t( cbl_arith_format_t for
*** 11905,11920 ****
    delete refers;
  }
  
! 
! cbl_key_t::cbl_key_t( const sort_key_t& that )
    : ascending(that.ascending)
!   , nfield(that.fields.size())
!   , fields(NULL)
! {
!   if( nfield > 0 ) {
!     fields = new cbl_field_t* [nfield];
!     std::copy(that.fields.begin(), that.fields.end(), fields);
!   }
  }
  
  static cbl_refer_t *
--- 11900,11915 ----
    delete refers;
  }
  
! cbl_key_t::cbl_key_t( sort_key_t that )
    : ascending(that.ascending)
!   , fields( that.fields.begin(), that.fields.end() )
! {}
! 
! cbl_key_t&
! cbl_key_t::operator=( const sort_key_t& that ) {
!   ascending = that.ascending;
!   fields = that.as_vector();
!   return *this;
  }
  
  static cbl_refer_t *
*************** ast_divide( arith_t *arith ) {
*** 12020,12029 ****
   * the convenience of the parser.
  */
  struct stringify_src_t : public cbl_string_src_t {
!  stringify_src_t( const refer_marked_list_t& marked = refer_marked_list_t() )
!    : cbl_string_src_t( marked.marker? *marked.marker : null_reference,
!                        marked.refers.size(),
!                        new cbl_refer_t[marked.refers.size()] )
    {
      std::copy( marked.refers.begin(), marked.refers.end(), inputs );
    }
--- 12015,12024 ----
   * the convenience of the parser.
  */
  struct stringify_src_t : public cbl_string_src_t {
!   stringify_src_t( const refer_marked_list_t& marked = refer_marked_list_t() )
!     : cbl_string_src_t( marked.marker? *marked.marker : null_reference,
!                         marked.refers.size(),
!                         new cbl_refer_t[marked.refers.size()] )
    {
      std::copy( marked.refers.begin(), marked.refers.end(), inputs );
    }
*************** struct stringify_src_t : public cbl_stri
*** 12037,12049 ****
  
   protected:
    static void dump_input( const cbl_refer_t& refer ) {
!     yywarn( "%s:\t%s", __func__, field_str(refer.field) );
    }
  };
  
  void
  stringify( refer_collection_t *inputs,
!            cbl_refer_t into, cbl_refer_t pointer,
             cbl_label_t  *on_error,
             cbl_label_t *not_error )
  {
--- 12032,12044 ----
  
   protected:
    static void dump_input( const cbl_refer_t& refer ) {
!     yywarn( "%s: %s", __func__, field_str(refer.field) );
    }
  };
  
  void
  stringify( refer_collection_t *inputs,
!            const cbl_refer_t& into, const cbl_refer_t& pointer,
             cbl_label_t  *on_error,
             cbl_label_t *not_error )
  {
*************** stringify( refer_collection_t *inputs,
*** 12058,12064 ****
  }
  
  void
! unstringify( cbl_refer_t& src,
               refer_list_t *delimited,
               unstring_into_t * into,
               cbl_label_t  *on_error,
--- 12053,12059 ----
  }
  
  void
! unstringify( const cbl_refer_t& src,
               refer_list_t *delimited,
               unstring_into_t * into,
               cbl_label_t  *on_error,
*************** unstringify( cbl_refer_t& src,
*** 12066,12071 ****
--- 12061,12067 ----
  {
    size_t ndelimited = delimited? delimited->size() : 0;
    cbl_refer_t *pdelimited = NULL;
+   // cppcheck-suppress [variableScope] pdelimited points to delimiteds.data()
    std::vector <cbl_refer_t> delimiteds(ndelimited);
    if( ndelimited > 0 ) {
      pdelimited = use_any( delimited->refers, delimiteds );
*************** lang_check_failed (const char* file, int
*** 12177,12191 ****
  
  #pragma GCC diagnostic pop
  
! void ast_inspect( cbl_refer_t& input, bool backward, ast_inspect_list_t& inspects ) {
    if( yydebug ) {
!     dbgmsg("%s:%d: INSPECT " HOST_SIZE_T_PRINT_UNSIGNED " operations on %s, line %d",
!           __func__, __LINE__, (fmt_size_t)inspects.size(), input.field->name, yylineno);
    }
    std::for_each(inspects.begin(), inspects.end(), dump_inspect);
!   auto array = inspects.as_array();
!   parser_inspect( input, backward, inspects.size(), array );
!   delete[] array;
  }
  
  static const char *
--- 12173,12191 ----
  
  #pragma GCC diagnostic pop
  
! void
! ast_inspect( YYLTYPE loc, cbl_refer_t& input, bool backward,
!              cbl_inspect_opers_t& inspects )
! {
    if( yydebug ) {
!     dbgmsg("%s:%d: INSPECT " HOST_SIZE_T_PRINT_UNSIGNED " operations on %s, "
!            "lines %d:%d - %d:%d",
!            __func__, __LINE__,
!            (fmt_size_t)inspects.size(), input.field->name,
!            loc.first_line, loc.first_column, loc.last_line, loc.last_column );
    }
    std::for_each(inspects.begin(), inspects.end(), dump_inspect);
!   parser_inspect( input, backward, inspects );
  }
  
  static const char *
*************** cbl_refer_str( char output[], const cbl_
*** 12197,12224 ****
    return output;
  }
  
! static void
  dump_inspect_match( const cbl_inspect_match_t& M ) {
!   static char fields[3][4 * 64];
!   cbl_refer_str(fields[0], M.matching);
!   cbl_refer_str(fields[1], M.before.identifier_4);
!   cbl_refer_str(fields[2], M.after.identifier_4);
  
!   yywarn( "matching %s \n\t\tbefore %s%s \n\t\tafter  %s%s",
!          fields[0],
!          M.before.initial? "initial " : "", fields[1],
!          M.after.initial?  "initial " : "", fields[2] );
  }
  
  static void
  dump_inspect_replace( const cbl_inspect_replace_t& R ) {
    static char fields[4][4 * 64];
!   cbl_refer_str(fields[0], R.matching);
    cbl_refer_str(fields[1], R.before.identifier_4);
    cbl_refer_str(fields[2], R.after.identifier_4);
    cbl_refer_str(fields[3], R.replacement);
  
!   yywarn( "matching    %s \n\treplacement %s\n\t\tbefore %s%s \n\t\tafter  %s%s",
           fields[0], fields[3],
           R.before.initial? "initial " : "", fields[1],
           R.after.initial?  "initial " : "", fields[2] );
--- 12197,12225 ----
    return output;
  }
  
! void
  dump_inspect_match( const cbl_inspect_match_t& M ) {
!   static char fields[4][4 * 64];
!   cbl_refer_str(fields[0], M.match);
!   cbl_refer_str(fields[1], M.tally);
!   cbl_refer_str(fields[2], M.before.identifier_4);
!   cbl_refer_str(fields[3], M.after.identifier_4);
  
!   dbgmsg( "matching %s [tally %s]\n\t\tbefore %s%s \n\t\tafter  %s%s",
!          fields[0], fields[1],
!          M.before.initial? "initial " : "", fields[2],
!          M.after.initial?  "initial " : "", fields[3] );
  }
  
  static void
  dump_inspect_replace( const cbl_inspect_replace_t& R ) {
    static char fields[4][4 * 64];
!   cbl_refer_str(fields[0], R.matching());
    cbl_refer_str(fields[1], R.before.identifier_4);
    cbl_refer_str(fields[2], R.after.identifier_4);
    cbl_refer_str(fields[3], R.replacement);
  
!   dbgmsg( "matching    %s \n\treplacement %s\n\t\tbefore %s%s \n\t\tafter  %s%s",
           fields[0], fields[3],
           R.before.initial? "initial " : "", fields[1],
           R.after.initial?  "initial " : "", fields[2] );
*************** numstr2i( const char input[], radix_t ra
*** 12334,12346 ****
      break;
    case hexadecimal_e:
      erc = sscanf(input, "%" GCC_PRISZ "x", &integerf);
!     integer = integer;
      real_from_integer (&output, VOIDmode, integer, UNSIGNED);
      break;
    case boolean_e:
      for( const char *p = input; *p != '\0'; p++ ) {
        if( ssize_t(8 * sizeof(integer) - 1) < p - input ) {
!         yywarn("'%s' was accepted as %d", input, integer);
          break;
        }
        switch(*p) {
--- 12335,12347 ----
      break;
    case hexadecimal_e:
      erc = sscanf(input, "%" GCC_PRISZ "x", &integerf);
!     integer = integerf;
      real_from_integer (&output, VOIDmode, integer, UNSIGNED);
      break;
    case boolean_e:
      for( const char *p = input; *p != '\0'; p++ ) {
        if( ssize_t(8 * sizeof(integer) - 1) < p - input ) {
!         yywarn("'%s' was accepted as %zu", input, integer);
          break;
        }
        switch(*p) {
*************** numstr2i( const char input[], radix_t ra
*** 12350,12356 ****
            integer |= ((*p) == '0' ? 0 : 1);
            break;
        default:
!         yywarn("'%s' was accepted as %d", input, integer);
  	break;
        }
      }
--- 12351,12357 ----
            integer |= ((*p) == '0' ? 0 : 1);
            break;
        default:
!         yywarn("'%s' was accepted as %zu", input, integer);
  	break;
        }
      }
*************** numstr2i( const char input[], radix_t ra
*** 12358,12364 ****
      return output;
    }
    if( erc == -1 ) {
!     yywarn("'%s' was accepted as %lld", input, output);
    }
    return output;
  }
--- 12359,12365 ----
      return output;
    }
    if( erc == -1 ) {
!     yywarn("'%s' was accepted as %zu", input, integer);
    }
    return output;
  }
*************** new_literal( const char initial[], enum
*** 12384,12390 ****
  class is_elementary_type { // for INITIALIZE purposes
    bool with_filler;
  public:
!   is_elementary_type( bool with_filler ) : with_filler(with_filler) {}
  
    bool operator()( const symbol_elem_t& elem ) const {
      if( elem.type != SymField ) return false;
--- 12385,12391 ----
  class is_elementary_type { // for INITIALIZE purposes
    bool with_filler;
  public:
!   explicit is_elementary_type( bool with_filler ) : with_filler(with_filler) {}
  
    bool operator()( const symbol_elem_t& elem ) const {
      if( elem.type != SymField ) return false;
*************** public:
*** 12398,12404 ****
  size_t end_of_group( size_t igroup );
  
  static std::list<cbl_refer_t>
! symbol_group_data_members( cbl_refer_t refer, bool with_filler ) {
    std::list<cbl_refer_t> refers;
    refers.push_front( refer );
  
--- 12399,12405 ----
  size_t end_of_group( size_t igroup );
  
  static std::list<cbl_refer_t>
! symbol_group_data_members( const cbl_refer_t& refer, bool with_filler ) {
    std::list<cbl_refer_t> refers;
    refers.push_front( refer );
  
*************** symbol_group_data_members( cbl_refer_t r
*** 12406,12412 ****
  
    class refer_of : public cbl_refer_t {
     public:
!     refer_of( const cbl_refer_t& refer ) : cbl_refer_t(refer) {}
      cbl_refer_t operator()( symbol_elem_t& elem ) {
        this->field = cbl_field_of(&elem); // preserve subscript/refmod
        return *this;
--- 12407,12413 ----
  
    class refer_of : public cbl_refer_t {
     public:
!     explicit refer_of( const cbl_refer_t& refer ) : cbl_refer_t(refer) {}
      cbl_refer_t operator()( symbol_elem_t& elem ) {
        this->field = cbl_field_of(&elem); // preserve subscript/refmod
        return *this;
*************** struct expand_group : public std::list<c
*** 12430,12436 ****
      return cbl_refer_t(field);
    }
    bool with_filler;
!   expand_group( bool with_filler ) : with_filler(with_filler) {}
  
    void operator()( const cbl_refer_t& refer ) {
      assert(refer.field);
--- 12431,12437 ----
      return cbl_refer_t(field);
    }
    bool with_filler;
!   explicit expand_group( bool with_filler ) : with_filler(with_filler) {}
  
    void operator()( const cbl_refer_t& refer ) {
      assert(refer.field);
*************** wsclear( char ch ) {
*** 12456,12462 ****
  }
  
  static void
! initialize_allocated( cbl_refer_t input ) {
    cbl_num_result_t result = { truncation_e, input };
    std::list<cbl_num_result_t> results;
    results.push_back(result);
--- 12457,12463 ----
  }
  
  static void
! initialize_allocated( const cbl_refer_t& input ) {
    cbl_num_result_t result = { truncation_e, input };
    std::list<cbl_num_result_t> results;
    results.push_back(result);
*************** initialize_allocated( cbl_refer_t input
*** 12465,12477 ****
  }
  
  static int
! initialize_with( cbl_refer_t tgt ) {
    if( tgt.field->type == FldPointer ) return ZERO;
    if( tgt.is_refmod_reference() ) return SPACES;
    return is_numeric(tgt.field)? ZERO : SPACES;
  }
  
  static bool
  initialize_one( cbl_num_result_t target, bool with_filler,
                  data_category_t value_category,
                  const category_map_t& replacements,
--- 12466,12479 ----
  }
  
  static int
! initialize_with( const cbl_refer_t& tgt ) {
    if( tgt.field->type == FldPointer ) return ZERO;
    if( tgt.is_refmod_reference() ) return SPACES;
    return is_numeric(tgt.field)? ZERO : SPACES;
  }
  
  static bool
+ // cppcheck-suppress [passedByValue] target.refer.field is modified
  initialize_one( cbl_num_result_t target, bool with_filler,
                  data_category_t value_category,
                  const category_map_t& replacements,
*************** typedef std::pair<size_t, size_t>  cbl_b
*** 12541,12551 ****
   * After the 1st record is initialized, copy it to the others.
   */
  static bool
! initialize_table( cbl_num_result_t target,
  		  size_t nspan, const cbl_bytespan_t spans[],
  		  const std::list<cbl_subtable_t>& subtables )
  {
!   assert( target.refer.nsubscript == dimensions(target.refer.field) );
    const cbl_refer_t& src( target.refer );
    size_t n( src.field->occurs.ntimes());
    assert( 0 < n );
--- 12543,12553 ----
   * After the 1st record is initialized, copy it to the others.
   */
  static bool
! initialize_table( const cbl_num_result_t& target,
  		  size_t nspan, const cbl_bytespan_t spans[],
  		  const std::list<cbl_subtable_t>& subtables )
  {
!   assert( target.refer.nsubscript() == dimensions(target.refer.field) );
    const cbl_refer_t& src( target.refer );
    size_t n( src.field->occurs.ntimes());
    assert( 0 < n );
*************** static cbl_refer_t
*** 12561,12577 ****
  synthesize_table_refer( cbl_refer_t tgt ) {
    // For a table, use supplied subscripts or start with 1.
    auto ndim( dimensions(tgt.field) );
!   if( tgt.nsubscript < ndim ) { // it's an incomplete table
      std::vector <cbl_refer_t> subscripts(ndim);
      for( size_t i=0; i < ndim; i++ ) {
!       if( i < tgt.nsubscript ) {
  	subscripts[i] = tgt.subscripts[i];
  	continue;
        }
        subscripts[i].field = new_tempnumeric();
        parser_set_numeric(subscripts[i].field, 1);
      }
!     return cbl_refer_t( tgt.field, subscripts.size(), subscripts.data() );
    }
    return tgt;
  }
--- 12563,12579 ----
  synthesize_table_refer( cbl_refer_t tgt ) {
    // For a table, use supplied subscripts or start with 1.
    auto ndim( dimensions(tgt.field) );
!   if( tgt.nsubscript() < ndim ) { // it's an incomplete table
      std::vector <cbl_refer_t> subscripts(ndim);
      for( size_t i=0; i < ndim; i++ ) {
!       if( i < tgt.nsubscript() ) {
  	subscripts[i] = tgt.subscripts[i];
  	continue;
        }
        subscripts[i].field = new_tempnumeric();
        parser_set_numeric(subscripts[i].field, 1);
      }
!     return cbl_refer_t( tgt.field, subscripts );
    }
    return tgt;
  }
*************** group_offset( const cbl_field_t *field )
*** 12581,12587 ****
    if( field->parent ) {
      auto e = symbol_at(field->parent);
      if( e->type == SymField ) {
!       auto parent = cbl_field_of(e);
        return field->offset - parent->offset;
      }
    }
--- 12583,12589 ----
    if( field->parent ) {
      auto e = symbol_at(field->parent);
      if( e->type == SymField ) {
!       const auto parent = cbl_field_of(e);
        return field->offset - parent->offset;
      }
    }
*************** initialize_statement( const cbl_num_resu
*** 12595,12601 ****
                        size_t depth = 0 )
  {
    const cbl_refer_t& tgt( target.refer );
!   assert(dimensions(tgt.field) == tgt.nsubscript || 0 < depth);
    assert(!is_literal(tgt.field));
  
    if( tgt.field->type == FldGroup ) {
--- 12597,12603 ----
                        size_t depth = 0 )
  {
    const cbl_refer_t& tgt( target.refer );
!   assert(dimensions(tgt.field) == tgt.nsubscript() || 0 < depth);
    assert(!is_literal(tgt.field));
  
    if( tgt.field->type == FldGroup ) {
*************** initialize_statement( const cbl_num_resu
*** 12632,12638 ****
  
      if( fOK && is_table(tgt.field) ) {
        cbl_num_result_t output = { target.rounded, synthesize_table_refer(tgt) };
!       if( tgt.nsubscript < output.refer.nsubscript ) { // tgt is whole table
  	std::list<field_span_t> field_spans;
  	static const field_span_t empty_span = { NULL, NULL };
  	field_span_t span = empty_span;
--- 12634,12640 ----
  
      if( fOK && is_table(tgt.field) ) {
        cbl_num_result_t output = { target.rounded, synthesize_table_refer(tgt) };
!       if( tgt.nsubscript() < output.refer.nsubscript() ) { // tgt is whole table
  	std::list<field_span_t> field_spans;
  	static const field_span_t empty_span = { NULL, NULL };
  	field_span_t span = empty_span;
*************** static void
*** 12743,12759 ****
  initialize_statement( std::list<cbl_num_result_t>& tgts, bool with_filler,
                       data_category_t value_category,
                       const category_map_t& replacements) {
! 
!   bool is_refmod = std::any_of( tgts.begin(), tgts.end(),
! 				[]( const auto& tgt ) {
! 				  return tgt.refer.is_refmod_reference();
! 				} );
!   if( false && is_refmod ) { // refmod seems valid per ISO
!     dbgmsg("INITIALIZE cannot initialize a refmod");
!     return;
!   }
! 
!   for( auto tgt : tgts ) {
      initialize_statement( tgt, with_filler, value_category,
                           replacements );
    }
--- 12745,12751 ----
  initialize_statement( std::list<cbl_num_result_t>& tgts, bool with_filler,
                       data_category_t value_category,
                       const category_map_t& replacements) {
!   for( const auto& tgt : tgts ) {
      initialize_statement( tgt, with_filler, value_category,
                           replacements );
    }
*************** static void
*** 12764,12776 ****
  dump_inspect_oper( const cbl_inspect_oper_t& op ) {
    dbgmsg("\t%s: " HOST_SIZE_T_PRINT_UNSIGNED
           " \"matches\", " HOST_SIZE_T_PRINT_UNSIGNED " \"replaces\"",
!         bound_str(op.bound),
!         op.matches? (fmt_size_t)op.n_identifier_3 : 0,
!         op.replaces? (fmt_size_t)op.n_identifier_3 : 0);
!   if( op.matches )
!     std::for_each(op.matches, op.matches + op.n_identifier_3, dump_inspect_match);
!   if( op.replaces )
!     std::for_each(op.replaces, op.replaces + op.n_identifier_3, dump_inspect_replace);
  }
  
  #pragma GCC diagnostic push
--- 12756,12766 ----
  dump_inspect_oper( const cbl_inspect_oper_t& op ) {
    dbgmsg("\t%s: " HOST_SIZE_T_PRINT_UNSIGNED
           " \"matches\", " HOST_SIZE_T_PRINT_UNSIGNED " \"replaces\"",
!          bound_str(op.bound),
!          (fmt_size_t)op.matches.size(), 
!          (fmt_size_t)op.replaces.size());
!   std::for_each(op.matches.begin(), op.matches.end(), dump_inspect_match);
!   std::for_each(op.replaces.begin(), op.replaces.end(), dump_inspect_replace);
  }
  
  #pragma GCC diagnostic push
*************** dump_inspect( const cbl_inspect_t& I ) {
*** 12787,12800 ****
    } else {
      fprintf( stderr, "\tREPLACING:\n" );
    }
!   std::for_each( I.opers, I.opers + I.nbound, dump_inspect_oper );
  }
  #pragma GCC diagnostic pop
  
  #include <iterator>
  
  struct declarative_file_list_t : protected cbl_declarative_t {
!   declarative_file_list_t( const cbl_declarative_t& d )
      : cbl_declarative_t(d)
      {
        if( nfile > 0 )
--- 12777,12790 ----
    } else {
      fprintf( stderr, "\tREPLACING:\n" );
    }
!   std::for_each( I.begin(), I.end(), dump_inspect_oper );
  }
  #pragma GCC diagnostic pop
  
  #include <iterator>
  
  struct declarative_file_list_t : protected cbl_declarative_t {
!   explicit declarative_file_list_t( const cbl_declarative_t& d )
      : cbl_declarative_t(d)
      {
        if( nfile > 0 )
*************** operator<<( std::ostream& os, const decl
*** 12819,12825 ****
  
  static declarative_file_list_t
  file_list_of( const cbl_declarative_t& dcl ) {
!   return dcl;
  }
  
  std::ostream&
--- 12809,12815 ----
  
  static declarative_file_list_t
  file_list_of( const cbl_declarative_t& dcl ) {
!   return declarative_file_list_t(dcl);
  }
  
  std::ostream&
*************** cbl_file_t::validate_key( const cbl_file
*** 12891,12897 ****
  
  bool
  cbl_file_t::validate() const {
!   size_t members[] = { user_status, vsam_status, record_length };
    bool tf = true;
  
    for( auto isym : members ) {
--- 12881,12887 ----
  
  bool
  cbl_file_t::validate() const {
!   const size_t members[] = { user_status, vsam_status, record_length };
    bool tf = true;
  
    for( auto isym : members ) {
*************** literal_attr( const char prefix[] ) {
*** 12992,12998 ****
    }
  
    // must be [BN]X
!   cbl_internal_error("'%s': invalid literal prefix", prefix);
    gcc_unreachable();
    return none_e;
  }
--- 12982,12988 ----
    }
  
    // must be [BN]X
!   cbl_internal_error("invalid literal prefix: %qs", prefix);
    gcc_unreachable();
    return none_e;
  }
*************** literal_refmod_valid( YYLTYPE loc, const
*** 13102,13108 ****
  	if( --edge < r.field->data.capacity ) return true;
        }
        // len < 0 or not: 0 < from + len <= capacity
!       auto loc = symbol_field_location(field_index(r.field));
        error_msg(loc, "%s(%zu:%zu) out of bounds, "
  		"size is %u",
  		r.field->name,
--- 13092,13098 ----
  	if( --edge < r.field->data.capacity ) return true;
        }
        // len < 0 or not: 0 < from + len <= capacity
!       loc = symbol_field_location(field_index(r.field));
        error_msg(loc, "%s(%zu:%zu) out of bounds, "
  		"size is %u",
  		r.field->name,
*************** literal_subscript_oob( const cbl_refer_t
*** 13125,13143 ****
  
  static bool
  literal_subscripts_valid( YYLTYPE loc, const cbl_refer_t& name ) {
-   static char subs[ 7 * 32 ], *esub = subs + sizeof(subs);
-   char *p = subs;
    size_t isub;
  
!   // Find subscript in the supplied refer
    const cbl_field_t *oob = literal_subscript_oob(name, isub);
    if( oob ) {
!     const char *sep = "";
!     for( auto r = name.subscripts; r < name.subscripts + name.nsubscript; r++ ) {
!       snprintf( p, esub - p, "%s%s", sep, nice_name_of(r->field) );
!       sep = " ";
!     }
! 
      const char *upper_phrase = "";
      if( ! oob->occurs.bounds.fixed_size() ) {
        static char ub[32] = "boo";
--- 13115,13136 ----
  
  static bool
  literal_subscripts_valid( YYLTYPE loc, const cbl_refer_t& name ) {
    size_t isub;
  
!   // Report any out-of-bound subscript. 
    const cbl_field_t *oob = literal_subscript_oob(name, isub);
    if( oob ) {
!     std::string sep("");
!     std::string subscript_names = 
!       std::accumulate( name.subscripts.begin(),
!                        name.subscripts.end(),
!                        std::string(),
!                        [&sep]( std::string acc, const auto& sub ) {
!                          acc += sep;
!                          sep = " ";
!                          return acc + nice_name_of(sub.field);
!                        } );
!     
      const char *upper_phrase = "";
      if( ! oob->occurs.bounds.fixed_size() ) {
        static char ub[32] = "boo";
*************** literal_subscripts_valid( YYLTYPE loc, c
*** 13148,13155 ****
  
      // X(0): subscript 1 of for out of range for 02 X OCCURS 4 to 6
      error_msg(loc, "%s(%s): subscript %zu out of range "
!                    "for %s %s OCCURS %lu%s",
! 	      oob->name, subs, 1 + isub,
  	      oob->level_str(), oob->name,
  	      oob->occurs.bounds.lower, upper_phrase );
      return false;
--- 13141,13148 ----
  
      // X(0): subscript 1 of for out of range for 02 X OCCURS 4 to 6
      error_msg(loc, "%s(%s): subscript %zu out of range "
!                    "for %s %s OCCURS %zu%s",
! 	      oob->name, subscript_names.c_str(), 1 + isub,
  	      oob->level_str(), oob->name,
  	      oob->occurs.bounds.lower, upper_phrase );
      return false;
*************** subscript_dimension_error( YYLTYPE loc,
*** 13171,13184 ****
  }
  
  static void
! reject_refmod( YYLTYPE loc, cbl_refer_t scalar ) {
    if( scalar.is_refmod_reference() ) {
      error_msg(loc, "%s cannot be reference-modified here", scalar.name());
    }
  }
  
  static bool
! require_pointer( YYLTYPE loc, cbl_refer_t scalar ) {
    if( scalar.field->type != FldPointer ) {
      error_msg(loc, "%s must have USAGE POINTER", scalar.name());
      return false;
--- 13164,13177 ----
  }
  
  static void
! reject_refmod( YYLTYPE loc, const cbl_refer_t& scalar ) {
    if( scalar.is_refmod_reference() ) {
      error_msg(loc, "%s cannot be reference-modified here", scalar.name());
    }
  }
  
  static bool
! require_pointer( YYLTYPE loc, const cbl_refer_t& scalar ) {
    if( scalar.field->type != FldPointer ) {
      error_msg(loc, "%s must have USAGE POINTER", scalar.name());
      return false;
*************** require_pointer( YYLTYPE loc, cbl_refer_
*** 13187,13193 ****
  }
  
  static bool
! require_numeric( YYLTYPE loc, cbl_refer_t scalar ) {
    if( ! is_numeric(scalar.field) ) {
      error_msg(loc, "%s must have numeric USAGE", scalar.name());
      return false;
--- 13180,13186 ----
  }
  
  static bool
! require_numeric( YYLTYPE loc, const cbl_refer_t& scalar ) {
    if( ! is_numeric(scalar.field) ) {
      error_msg(loc, "%s must have numeric USAGE", scalar.name());
      return false;
*************** require_numeric( YYLTYPE loc, cbl_refer_
*** 13196,13202 ****
  }
  
  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",
--- 13189,13195 ----
  }
  
  static bool
! require_integer( YYLTYPE loc, const 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",
diff -Nrcpad gcc-16-20250615/gcc/cobol/parse_ante.h gcc-16-20250622/gcc/cobol/parse_ante.h
*** gcc-16-20250615/gcc/cobol/parse_ante.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/parse_ante.h	Sun Jun 22 22:32:19 2025
*************** new_reference_like( const cbl_field_t& s
*** 244,252 ****
    return new cbl_refer_t( new_temporary_like(skel) );
  }
  
! 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 );
  
--- 244,252 ----
    return new cbl_refer_t( new_temporary_like(skel) );
  }
  
! static void reject_refmod( YYLTYPE loc, const cbl_refer_t& );
! static bool require_pointer( YYLTYPE loc, const cbl_refer_t& );
! static bool require_integer( YYLTYPE loc, const cbl_refer_t& );
  
  struct cbl_field_t * constant_of( size_t isym );
  
*************** struct evaluate_elem_t {
*** 289,295 ****
      relop_t oper;
     public:
      cbl_field_t *subject, *object, *cond;
!     case_t( cbl_field_t * subject )
        : oper(eq_op)
        , subject(subject)
        , object(NULL)
--- 289,295 ----
      relop_t oper;
     public:
      cbl_field_t *subject, *object, *cond;
!     explicit case_t( cbl_field_t * subject )
        : oper(eq_op)
        , subject(subject)
        , object(NULL)
*************** struct evaluate_elem_t {
*** 328,342 ****
  
    explicit evaluate_elem_t( const char skel[] )
      : nother(0)
      , result( keep_temporary(FldConditional) )
      , pcase( cases.end() )
    {
-     static const cbl_label_t protolabel = { LblEvaluate };
-     label = protolabel;
      label.line = yylineno;
      if( -1 == snprintf(label.name, sizeof(label.name),
                         "%.*s_%d", (int)sizeof(label.name)-6, skel, yylineno) ) {
!       yyerror("could not create unique label '%s_%d' because it is too long",
                skel, yylineno);
      }
    }
--- 328,341 ----
  
    explicit evaluate_elem_t( const char skel[] )
      : nother(0)
+     , label{LblEvaluate}
      , result( keep_temporary(FldConditional) )
      , pcase( cases.end() )
    {
      label.line = yylineno;
      if( -1 == snprintf(label.name, sizeof(label.name),
                         "%.*s_%d", (int)sizeof(label.name)-6, skel, yylineno) ) {
!       yyerror("could not create unique label %<%s_%d%> because it is too long",
                skel, yylineno);
      }
    }
*************** struct evaluate_elem_t {
*** 367,379 ****
  static class file_delete_args_t {
    cbl_file_t *file;
  public:
    void init( cbl_file_t *file ) {
      this->file = file;
    }
!   bool ready() const { return file != NULL; }
    void call_parser_file_delete( bool sequentially ) {
      parser_file_delete(file, sequentially);
!     file = NULL;
    }
  } file_delete_args;
  
--- 366,379 ----
  static class file_delete_args_t {
    cbl_file_t *file;
  public:
+   file_delete_args_t() : file(nullptr) {}
    void init( cbl_file_t *file ) {
      this->file = file;
    }
!   bool ready() const { return file != nullptr; }
    void call_parser_file_delete( bool sequentially ) {
      parser_file_delete(file, sequentially);
!     file = nullptr;
    }
  } file_delete_args;
  
*************** static struct file_read_args_t {
*** 389,395 ****
  
    void
    init( struct cbl_file_t *file,
!         cbl_refer_t record,
          cbl_refer_t *read_into,
          int where ) {
      this->file = file;
--- 389,395 ----
  
    void
    init( struct cbl_file_t *file,
!         const cbl_refer_t& record,
          cbl_refer_t *read_into,
          int where ) {
      this->file = file;
*************** public:
*** 438,444 ****
      this->file = file;
    }
    bool ready() const { return file != NULL; }
!   void call_parser_return_start(cbl_refer_t into = cbl_refer_t() ) {
      parser_return_start(file, into);
      file = NULL;
    }
--- 438,444 ----
      this->file = file;
    }
    bool ready() const { return file != NULL; }
!   void call_parser_return_start(const cbl_refer_t& into = cbl_refer_t() ) {
      parser_return_start(file, into);
      file = NULL;
    }
*************** static class file_rewrite_args_t {
*** 448,464 ****
    cbl_file_t *file;
    cbl_field_t *record;
  public:
    void init( cbl_file_t *file, cbl_field_t *record ) {
      this->file = file;
      this->record = record;
    }
!   bool ready() const { return file != NULL; }
    void call_parser_file_rewrite( bool sequentially ) {
      sequentially = sequentially || file->access == file_access_seq_e;
      if( file->access == file_access_rnd_e ) sequentially = false;
      parser_file_rewrite(file, record, sequentially);
!     file = NULL;
!     record = NULL;
    }
  } file_rewrite_args;
  
--- 448,465 ----
    cbl_file_t *file;
    cbl_field_t *record;
  public:
+   file_rewrite_args_t() :  file(nullptr), record(nullptr) {}
    void init( cbl_file_t *file, cbl_field_t *record ) {
      this->file = file;
      this->record = record;
    }
!   bool ready() const { return file != nullptr; }
    void call_parser_file_rewrite( bool sequentially ) {
      sequentially = sequentially || file->access == file_access_seq_e;
      if( file->access == file_access_rnd_e ) sequentially = false;
      parser_file_rewrite(file, record, sequentially);
!     file = nullptr;
!     record = nullptr;
    }
  } file_rewrite_args;
  
*************** static class file_write_args_t {
*** 487,507 ****
    cbl_refer_t *advance;
  public:
    file_write_args_t()
!     : file(NULL)
      , after(false)
!     , advance(NULL)
    {}
    cbl_file_t * init( cbl_file_t *file,
                       cbl_field_t *data_source,
                       bool after,
!                      cbl_refer_t *advance ) {
      this->file = file;
      this->data_source = data_source;
      this->after = after;
      this->advance = new cbl_refer_t(*advance);
      return this->file;
    }
!   bool ready() const { return file != NULL; }
    void call_parser_file_write( bool sequentially ) {
      sequentially = sequentially || file->access == file_access_seq_e;
      parser_file_write(file, data_source, after, *advance, sequentially);
--- 488,509 ----
    cbl_refer_t *advance;
  public:
    file_write_args_t()
!     : file(nullptr)
!     , data_source(nullptr)
      , after(false)
!     , advance(nullptr)
    {}
    cbl_file_t * init( cbl_file_t *file,
                       cbl_field_t *data_source,
                       bool after,
!                      const cbl_refer_t *advance ) {
      this->file = file;
      this->data_source = data_source;
      this->after = after;
      this->advance = new cbl_refer_t(*advance);
      return this->file;
    }
!   bool ready() const { return file != nullptr; }
    void call_parser_file_write( bool sequentially ) {
      sequentially = sequentially || file->access == file_access_seq_e;
      parser_file_write(file, data_source, after, *advance, sequentially);
*************** struct arith_t {
*** 535,541 ****
    cbl_refer_t remainder;
    cbl_label_t *on_error, *not_error;
  
!   arith_t( cbl_arith_format_t format )
      : format(format), on_error(NULL), not_error(NULL)
    {}
    arith_t( cbl_arith_format_t format, refer_list_t * refers );
--- 537,543 ----
    cbl_refer_t remainder;
    cbl_label_t *on_error, *not_error;
  
!   explicit arith_t( cbl_arith_format_t format )
      : format(format), on_error(NULL), not_error(NULL)
    {}
    arith_t( cbl_arith_format_t format, refer_list_t * refers );
*************** class eval_subject_t {
*** 619,625 ****
    void new_object_labels();
   public:
    eval_subject_t();
!   void append( cbl_refer_t field ) {
      columns.push_back(field);
      pcol = columns.begin();
    }
--- 621,627 ----
    void new_object_labels();
   public:
    eval_subject_t();
!   void append( const cbl_refer_t& field ) {
      columns.push_back(field);
      pcol = columns.begin();
    }
*************** public:
*** 750,755 ****
--- 752,758 ----
  
  
  static void dump_inspect( const cbl_inspect_t& i );
+ void dump_inspect_match( const cbl_inspect_match_t& M );
  
  struct perform_t {
    struct cbl_perform_tgt_t tgt;
*************** struct perform_t {
*** 789,799 ****
      cbl_refer_t table;
    } search;
  
!   perform_t( cbl_label_t *from, cbl_label_t *to = NULL )
      : tgt( from, to ), before(true)
!   {
!     search = {};
!   }
    ~perform_t() { varys.clear(); }
    cbl_field_t * until() {
      assert(!varys.empty());
--- 792,801 ----
      cbl_refer_t table;
    } search;
  
!   explicit perform_t( cbl_label_t *from, cbl_label_t *to = NULL )
      : tgt( from, to ), before(true)
!     , search()
!   {}
    ~perform_t() { varys.clear(); }
    cbl_field_t * until() {
      assert(!varys.empty());
*************** static struct cbl_label_t *
*** 892,898 ****
  paragraph_reference( const char name[], size_t section );
  
  static inline void
! list_add( list<cbl_num_result_t>& list, cbl_refer_t refer, int round ) {
    struct cbl_num_result_t arg = { static_cast<cbl_round_t>(round), refer };
    list.push_back(arg);
  }
--- 894,900 ----
  paragraph_reference( const char name[], size_t section );
  
  static inline void
! list_add( list<cbl_num_result_t>& list, const cbl_refer_t& refer, int round ) {
    struct cbl_num_result_t arg = { static_cast<cbl_round_t>(round), refer };
    list.push_back(arg);
  }
*************** class tokenset_t {
*** 1027,1033 ****
    const char * name_of( int tok ) const {
      tok -= (255 + 3);
      gcc_assert(0 <= tok && size_t(tok) < token_names.size());
!     return token_names[tok];
    }
  };
  
--- 1029,1035 ----
    const char * name_of( int tok ) const {
      tok -= (255 + 3);
      gcc_assert(0 <= tok && size_t(tok) < token_names.size());
!     return tok < 0? "???" : token_names[tok];
    }
  };
  
*************** redefined_token( const cbl_name_t name )
*** 1094,1100 ****
  struct file_list_t {
    list<cbl_file_t*> files;
    file_list_t() {}
!   file_list_t( cbl_file_t* file ) {
      files.push_back(file);
    }
    file_list_t( file_list_t& that ) : files(that.files.size()) {
--- 1096,1102 ----
  struct file_list_t {
    list<cbl_file_t*> files;
    file_list_t() {}
!   explicit file_list_t( cbl_file_t* file ) {
      files.push_back(file);
    }
    file_list_t( file_list_t& that ) : files(that.files.size()) {
*************** struct file_list_t {
*** 1108,1117 ****
  
  struct field_list_t {
    list<cbl_field_t*> fields;
!   field_list_t( cbl_field_t *field ) {
      fields.push_back(field);
    }
!   explicit field_list_t() {}
  };
  
  cbl_field_t **
--- 1110,1124 ----
  
  struct field_list_t {
    list<cbl_field_t*> fields;
!   field_list_t() {}
!   explicit field_list_t( cbl_field_t *field ) {
      fields.push_back(field);
    }
!   std::vector<const cbl_field_t*>
!   as_vector() const {
!     std::vector<const cbl_field_t*> output( fields.begin(), fields.end() );
!     return output;
!   }
  };
  
  cbl_field_t **
*************** cbl_file_t **
*** 1138,1144 ****
  
  struct refer_list_t {
    list<cbl_refer_t> refers;
!   refer_list_t( cbl_refer_t *refer ) {
      if( refer ) {
        refers.push_back(*refer);
        delete refer;
--- 1145,1151 ----
  
  struct refer_list_t {
    list<cbl_refer_t> refers;
!   explicit refer_list_t( cbl_refer_t *refer ) {
      if( refer ) {
        refers.push_back(*refer);
        delete refer;
*************** struct refer_list_t {
*** 1160,1172 ****
      refers.clear();
      return tgt;
    }
  };
  
  struct refer_marked_list_t : public refer_list_t {
    cbl_refer_t *marker;
  
    refer_marked_list_t()  : refer_list_t(NULL),  marker(NULL) {}
!   refer_marked_list_t( cbl_refer_t *marker, refer_list_t *refers )
      : refer_list_t(*refers), marker(marker) {}
    refer_marked_list_t( cbl_refer_t *marker, cbl_refer_t *input )
      : refer_list_t(input)
--- 1167,1186 ----
      refers.clear();
      return tgt;
    }
+   std::vector<cbl_refer_t>
+   vectorize() {
+     std::vector<cbl_refer_t> tgt(refers.size());
+     std::copy(refers.begin(), refers.end(), tgt.begin());
+     refers.clear();
+     return tgt;
+   }
  };
  
  struct refer_marked_list_t : public refer_list_t {
    cbl_refer_t *marker;
  
    refer_marked_list_t()  : refer_list_t(NULL),  marker(NULL) {}
!   refer_marked_list_t( cbl_refer_t *marker, const refer_list_t *refers )
      : refer_list_t(*refers), marker(marker) {}
    refer_marked_list_t( cbl_refer_t *marker, cbl_refer_t *input )
      : refer_list_t(input)
*************** struct refer_marked_list_t : public refe
*** 1186,1192 ****
  struct refer_collection_t {
    list<refer_marked_list_t> lists;
  
!   refer_collection_t( const refer_marked_list_t& marked_list )
    {
      lists.push_back( marked_list );
    }
--- 1200,1206 ----
  struct refer_collection_t {
    list<refer_marked_list_t> lists;
  
!   explicit refer_collection_t( const refer_marked_list_t& marked_list )
    {
      lists.push_back( marked_list );
    }
*************** struct refer_collection_t {
*** 1212,1259 ****
    }
  };
  
! struct ast_inspect_oper_t {
!   cbl_inspect_bound_t bound;  // CHARACTERS/ALL/LEADING/FIRST
!   std::list<cbl_inspect_match_t>    matches;
!   std::list<cbl_inspect_replace_t> replaces;
! 
! ast_inspect_oper_t( const cbl_inspect_match_t& match,
!                     cbl_inspect_bound_t bound = bound_characters_e )
!     : bound(bound)
!   {
!     matches.push_back(match);
!   }
!   ast_inspect_oper_t( const cbl_inspect_replace_t& replace,
!                     cbl_inspect_bound_t bound = bound_characters_e )
!     : bound(bound)
!   {
!     replaces.push_back(replace);
!   }
! };
! 
! struct ast_inspect_t : public std::list<cbl_inspect_oper_t> {
!   cbl_refer_t tally; // field is NULL for REPLACING
!   const std::list<cbl_inspect_oper_t>& opers() const { return *this; }
! };
! 
! struct ast_inspect_list_t : public std::list<cbl_inspect_t> {
!   ast_inspect_list_t( const cbl_inspect_t& insp ) {
!     push_back(insp);
!   }
! 
!   cbl_inspect_t * as_array() {
!     cbl_inspect_t *output = new cbl_inspect_t[ size() ];
!     std::copy( begin(), end(), output );
!     return output;
!   }
! };
! 
! void ast_inspect( cbl_refer_t& input, bool backward, ast_inspect_list_t& inspects );
  
  template <typename E>
  struct elem_list_t {
    list<E*> elems;
!   elem_list_t( E *elem ) {
      elems.push_back(elem);
    }
    void clear() {
--- 1226,1238 ----
    }
  };
  
! void ast_inspect( YYLTYPE loc, cbl_refer_t& input, bool backward,
!                   cbl_inspect_opers_t& inspects );
  
  template <typename E>
  struct elem_list_t {
    list<E*> elems;
!   explicit elem_list_t( E *elem ) {
      elems.push_back(elem);
    }
    void clear() {
*************** template <typename L, typename E>
*** 1278,1284 ****
  
  struct unstring_tgt_t {
    cbl_refer_t *tgt, *delimiter, *count;
!   unstring_tgt_t( cbl_refer_t *tgt,
                    cbl_refer_t *delimiter = NULL,
                    cbl_refer_t *count = NULL )
      : tgt(tgt), delimiter(delimiter), count(count)
--- 1257,1263 ----
  
  struct unstring_tgt_t {
    cbl_refer_t *tgt, *delimiter, *count;
!   explicit unstring_tgt_t( cbl_refer_t *tgt,
                    cbl_refer_t *delimiter = NULL,
                    cbl_refer_t *count = NULL )
      : tgt(tgt), delimiter(delimiter), count(count)
*************** private:
*** 1302,1308 ****
  struct unstring_tgt_list_t {
    list<unstring_tgt_t> unstring_tgts;
  
!   unstring_tgt_list_t( unstring_tgt_t *unstring_tgt ) {
      unstring_tgts.push_back(*unstring_tgt);
      delete unstring_tgt;
    }
--- 1281,1287 ----
  struct unstring_tgt_list_t {
    list<unstring_tgt_t> unstring_tgts;
  
!   explicit unstring_tgt_list_t( unstring_tgt_t *unstring_tgt ) {
      unstring_tgts.push_back(*unstring_tgt);
      delete unstring_tgt;
    }
*************** struct unstring_tgt_list_t {
*** 1324,1330 ****
  
  struct unstring_into_t : public unstring_tgt_list_t {
    cbl_refer_t pointer, tally;
!   unstring_into_t( unstring_tgt_list_t *tgt_list,
                     cbl_refer_t *pointer = NULL,
                     cbl_refer_t *tally = NULL )
      : unstring_tgt_list_t(*tgt_list)
--- 1303,1309 ----
  
  struct unstring_into_t : public unstring_tgt_list_t {
    cbl_refer_t pointer, tally;
!   explicit unstring_into_t( unstring_tgt_list_t *tgt_list,
                     cbl_refer_t *pointer = NULL,
                     cbl_refer_t *tally = NULL )
      : unstring_tgt_list_t(*tgt_list)
*************** struct unstring_into_t : public unstring
*** 1340,1346 ****
  struct ffi_args_t {
    list<cbl_ffi_arg_t> elems;
  
!   ffi_args_t( cbl_ffi_arg_t *arg ) {
      this->push_back(arg);
    }
  
--- 1319,1325 ----
  struct ffi_args_t {
    list<cbl_ffi_arg_t> elems;
  
!   explicit ffi_args_t( cbl_ffi_arg_t *arg ) {
      this->push_back(arg);
    }
  
*************** struct file_sort_io_t {
*** 1416,1423 ****
    file_list_t file_list;
    cbl_perform_tgt_t tgt;
  
!   file_sort_io_t( file_list_t& files ) : file_list(files) {}
!   file_sort_io_t( cbl_perform_tgt_t& tgt ) : tgt(tgt.from(), tgt.to()) {}
    size_t nfile() const { return file_list.files.size(); }
  };
  
--- 1395,1402 ----
    file_list_t file_list;
    cbl_perform_tgt_t tgt;
  
!   explicit file_sort_io_t( file_list_t& files ) : file_list(files) {}
!   explicit file_sort_io_t( cbl_perform_tgt_t& tgt ) : tgt(tgt.from(), tgt.to()) {}
    size_t nfile() const { return file_list.files.size(); }
  };
  
*************** struct merge_t {
*** 1432,1445 ****
    cbl_perform_tgt_t tgt;
    list<cbl_file_t*> outputs;
  
!   merge_t( cbl_file_t *input ) : master(input), type(output_unknown_e) {}
  };
  
  static list<merge_t> merges;
  
  static inline merge_t&
  merge_alloc( cbl_file_t *file ) {
!   merges.push_back(file);
    return merges.back();
  }
  
--- 1411,1424 ----
    cbl_perform_tgt_t tgt;
    list<cbl_file_t*> outputs;
  
!   explicit merge_t( cbl_file_t *input ) : master(input), type(output_unknown_e) {}
  };
  
  static list<merge_t> merges;
  
  static inline merge_t&
  merge_alloc( cbl_file_t *file ) {
!   merges.push_back(merge_t(file));
    return merges.back();
  }
  
*************** static  list<cbl_refer_t> lhs;
*** 1460,1466 ****
  struct vargs_t {
    std::list<cbl_refer_t> args;
      vargs_t() {}
!     vargs_t( struct cbl_refer_t *p ) { args.push_back(*p); delete p; }
      void push_back( cbl_refer_t *p ) { args.push_back(*p); delete p; }
  };
  
--- 1439,1445 ----
  struct vargs_t {
    std::list<cbl_refer_t> args;
      vargs_t() {}
!     explicit vargs_t( struct cbl_refer_t *p ) { args.push_back(*p); delete p; }
      void push_back( cbl_refer_t *p ) { args.push_back(*p); delete p; }
  };
  
*************** class prog_descr_t {
*** 1484,1490 ****
    const char *collating_sequence;
    struct locale_t {
      cbl_name_t name; const char *os_name;
!     locale_t(const cbl_name_t name = NULL, const char *os_name = NULL)
        : name(""), os_name(os_name) {
        if( name ) {
          bool ok = namcpy(YYLTYPE(), this->name, name);
--- 1463,1470 ----
    const char *collating_sequence;
    struct locale_t {
      cbl_name_t name; const char *os_name;
!     locale_t() : name(""), os_name(nullptr) {}
!     locale_t(const cbl_name_t name, const char *os_name)
        : name(""), os_name(os_name) {
        if( name ) {
          bool ok = namcpy(YYLTYPE(), this->name, name);
*************** class prog_descr_t {
*** 1495,1501 ****
    cbl_call_convention_t call_convention;
    cbl_options_t options;
  
!   prog_descr_t( size_t isymbol )
      : program_index(isymbol)
      , declaratives_eval(NULL)
      , paragraph(NULL)
--- 1475,1481 ----
    cbl_call_convention_t call_convention;
    cbl_options_t options;
  
!   explicit prog_descr_t( size_t isymbol )
      : program_index(isymbol)
      , declaratives_eval(NULL)
      , paragraph(NULL)
*************** class program_stack_t : protected  std::
*** 1607,1615 ****
    bool pending_initial() { return pending.initial = true; }
  
    void push( prog_descr_t descr ) {
!     cbl_call_convention_t current_call_convention = cbl_call_cobol_e;
!     if( !empty() ) current_call_convention = top().call_convention;
!     descr.call_convention = current_call_convention;
      std::stack<prog_descr_t>& me(*this);
      me.push(descr);
    }
--- 1587,1595 ----
    bool pending_initial() { return pending.initial = true; }
  
    void push( prog_descr_t descr ) {
!     cbl_call_convention_t call_convention = cbl_call_cobol_e;
!     if( !empty() ) call_convention = top().call_convention;
!     descr.call_convention = call_convention;
      std::stack<prog_descr_t>& me(*this);
      me.push(descr);
    }
*************** class program_stack_t : protected  std::
*** 1645,1655 ****
      }
    }
  
    cbl_label_t *first_declarative() {
      auto eval = top().declaratives_eval;
      if( eval ) return eval;
      // scan stack container for declaratives
!     for( auto& prog : c ) {
        if( prog.declaratives_eval ) {
          eval = prog.declaratives_eval;
          break;
--- 1625,1636 ----
      }
    }
  
+   // cppcheck-suppress-begin useStlAlgorithm
    cbl_label_t *first_declarative() {
      auto eval = top().declaratives_eval;
      if( eval ) return eval;
      // scan stack container for declaratives
!     for( const auto& prog : c ) {
        if( prog.declaratives_eval ) {
          eval = prog.declaratives_eval;
          break;
*************** class program_stack_t : protected  std::
*** 1657,1662 ****
--- 1638,1644 ----
      }
      return eval;
    }
+   // cppcheck-suppress-end useStlAlgorithm
  };
  
  struct rel_part_t {
*************** struct rel_part_t {
*** 1664,1672 ****
    bool has_relop, invert;
    relop_t relop;
  
!   rel_part_t( cbl_refer_t *operand = NULL,
!               relop_t relop = relop_t(-1),
!               bool invert = false )
      : operand(operand),
        has_relop(relop != -1),
        invert(invert),
--- 1646,1658 ----
    bool has_relop, invert;
    relop_t relop;
  
!   rel_part_t()
!     : operand(nullptr),
!       has_relop(false),
!       invert(false),
!       relop(relop_t(-1))
!   {}
!   rel_part_t( cbl_refer_t *operand, relop_t relop, bool invert )
      : operand(operand),
        has_relop(relop != -1),
        invert(invert),
*************** struct rel_part_t {
*** 1700,1706 ****
  class log_expr_t {
    cbl_field_t *orable, *andable;
   public:
!   log_expr_t( cbl_field_t *init ) : orable(NULL), andable(init) {
      if( ! is_conditional(init) ) {
        dbgmsg("%s:%d: logic error: %s is not a truth value",
                 __func__, __LINE__, name_of(init));
--- 1686,1692 ----
  class log_expr_t {
    cbl_field_t *orable, *andable;
   public:
!   explicit log_expr_t( cbl_field_t *init ) : orable(NULL), andable(init) {
      if( ! is_conditional(init) ) {
        dbgmsg("%s:%d: logic error: %s is not a truth value",
                 __func__, __LINE__, name_of(init));
*************** static class current_t {
*** 1859,1864 ****
--- 1845,1854 ----
    class declaratives_t : protected declaratives_list_t {
      struct file_exception_t {
        ec_type_t type; uint32_t file;
+       file_exception_t() : type(ec_none_e), file(0) {}
+       file_exception_t(ec_type_t type, uint32_t file)
+         : type(type), file(file)
+       {}
        bool operator<( const file_exception_t& that ) const {
          if( type == that.type ) return file < that.file;
          return type < that.type;
*************** static class current_t {
*** 1866,1874 ****
--- 1856,1866 ----
      };
      std::set<file_exception_t> file_exceptions;
     public:
+     declaratives_t() {}
      // current compiled data for enabled ECs and Declaratives, used by library.
      struct runtime_t {
        tree ena, dcl;
+       runtime_t() : ena(nullptr), dcl(nullptr) {}
      } runtime;
      
      bool empty() const {
*************** static class current_t {
*** 1888,1894 ****
        }
        for( auto f = declarative.files;
             f && f < declarative.files + declarative.nfile; f++ ) {
!         file_exception_t ex = { declarative.type, *f };
          auto result = file_exceptions.insert(ex);
          if( ! result.second ) {
            yyerror("%s defined twice for %s",
--- 1880,1886 ----
        }
        for( auto f = declarative.files;
             f && f < declarative.files + declarative.nfile; f++ ) {
!         file_exception_t ex( declarative.type, *f );
          auto result = file_exceptions.insert(ex);
          if( ! result.second ) {
            yyerror("%s defined twice for %s",
*************** static class current_t {
*** 1901,1906 ****
--- 1893,1899 ----
        return true;
      }
  
+     // cppcheck-suppress-begin useStlAlgorithm
      uint32_t status() const {
        uint32_t status_word = 0;
        for( auto dcl : *this ) {
*************** static class current_t {
*** 1908,1913 ****
--- 1901,1907 ----
        }
        return status_word;
      }
+     // cppcheck-suppress-end useStlAlgorithm
  
      bool has_format_1() const {
        return std::any_of( begin(), end(),
*************** static class current_t {
*** 1947,1953 ****
    const cbl_field_t * has_typedef( const cbl_field_t *field ) {
      auto found = typedefs.find(field);
      return found == typedefs.end()? NULL : *found;
-     return found == typedefs.end()? NULL : *found;
    }
  
    void udf_add( size_t isym ) {
--- 1941,1946 ----
*************** static class current_t {
*** 2003,2014 ****
  
    std::list<std::string>& debugging_declaratives(bool all) const {
      const char *para = programs.top().paragraph->name;
!     auto declaratives = debugging_clients.find(all? ":all:" : para);
!     if( declaratives == debugging_clients.end() ) {
        static std::list<std::string> empty;
        return empty;
      }
!     return declaratives->second;
    }
  
    bool
--- 1996,2007 ----
  
    std::list<std::string>& debugging_declaratives(bool all) const {
      const char *para = programs.top().paragraph->name;
!     auto client = debugging_clients.find(all? ":all:" : para);
!     if( client == debugging_clients.end() ) {
        static std::list<std::string> empty;
        return empty;
      }
!     return client->second;
    }
  
    bool
*************** static class current_t {
*** 2079,2085 ****
  
      const cbl_label_t *L;
      if( (L = symbol_program_add(parent, &label)) == NULL ) return false;
!     programs.push( symbol_index(symbol_elem_of(L)));
      programs.apply_pending();
  
      bool fOK = symbol_at(programs.top().program_index) + 1 == symbols_end();
--- 2072,2078 ----
  
      const cbl_label_t *L;
      if( (L = symbol_program_add(parent, &label)) == NULL ) return false;
!     programs.push( prog_descr_t(symbol_index(symbol_elem_of(L))) );
      programs.apply_pending();
  
      bool fOK = symbol_at(programs.top().program_index) + 1 == symbols_end();
*************** static class current_t {
*** 2123,2129 ****
  	  if( ! dialect_ibm() ) {
  	    error_msg(loc,
  		      "Per ISO a program with DECLARATIVES must begin with a SECTION, "
! 		      "requires -dialect ibm");
  	  }
  	}
        }
--- 2116,2122 ----
  	  if( ! dialect_ibm() ) {
  	    error_msg(loc,
  		      "Per ISO a program with DECLARATIVES must begin with a SECTION, "
! 		      "requires %<-dialect ibm%>");
  	  }
  	}
        }
*************** static class current_t {
*** 2147,2153 ****
  
      assert(!programs.empty());
  
!     procref_t *ref = ambiguous_reference(program_index());
      std::set<std::string> externals = programs.top().external_targets();
  
      /*
--- 2140,2146 ----
  
      assert(!programs.empty());
  
!     const procref_t *ref = ambiguous_reference(program_index());
      std::set<std::string> externals = programs.top().external_targets();
  
      /*
*************** void current_enabled_ecs( tree ena ) {
*** 2371,2381 ****
  
  static void
  add_debugging_declarative( const cbl_label_t * label ) {
    const char *section = current.declarative_section_name();
    if( section ) {
      debugging_clients[label->name].push_back(section);
    }
! };
  
  cbl_options_t current_options() {
    return current.options_paragraph;
--- 2364,2375 ----
  
  static void
  add_debugging_declarative( const cbl_label_t * label ) {
+   // cppcheck-suppress [unreadVariable] obviously not true
    const char *section = current.declarative_section_name();
    if( section ) {
      debugging_clients[label->name].push_back(section);
    }
! }
  
  cbl_options_t current_options() {
    return current.options_paragraph;
*************** is_callable( const cbl_field_t *field )
*** 2564,2570 ****
    case FldPointer:
      return true;
    }
!   cbl_internal_error( "%s:%d: invalid symbol_type_t %d", __func__, __LINE__, field->type );
    return false;
  }
  
--- 2558,2565 ----
    case FldPointer:
      return true;
    }
!   cbl_internal_error( "%s:%d: invalid %<symbol_type_t%> %d",
!                       __func__, __LINE__, field->type );
    return false;
  }
  
*************** intrinsic_call_1( cbl_field_t *output, i
*** 2611,2617 ****
  }
  
  static bool
! intrinsic_call_2( cbl_field_t *tgt, int token, cbl_refer_t *r1, cbl_refer_t *r2 ) {
    std::vector<cbl_refer_t> args { *r1, r2? *r2 : cbl_refer_t() };
    size_t n = intrinsic_invalid_parameter(token, args);
    if( n < args.size() ) {
--- 2606,2612 ----
  }
  
  static bool
! intrinsic_call_2( cbl_field_t *tgt, int token, const cbl_refer_t *r1, cbl_refer_t *r2 ) {
    std::vector<cbl_refer_t> args { *r1, r2? *r2 : cbl_refer_t() };
    size_t n = intrinsic_invalid_parameter(token, args);
    if( n < args.size() ) {
*************** table_primary_index( cbl_field_t *table
*** 2689,2706 ****
      NULL : cbl_field_of(symbol_at(table->occurs.indexes.fields[0]));
  }
  
! static inline const cbl_refer_t  // & // Removed the '&' to stop a weird compiler error
  invalid_key( const cbl_refer_t& ref ) {
    assert(ref.field);
! 
!   if( ref.nsubscript == 0 ) return ref;
! 
!   for( size_t i=0; i < ref.nsubscript; i++ ) {
!     if( ref.subscripts[i].field->parent != ref.field->parent ) {
!       return ref.subscripts[i];
!     }
!   }
!   return NULL;
  }
  
  static inline symbol_elem_t *
--- 2684,2697 ----
      NULL : cbl_field_of(symbol_at(table->occurs.indexes.fields[0]));
  }
  
! static inline const cbl_refer_t  // return copy, not element reference
  invalid_key( const cbl_refer_t& ref ) {
    assert(ref.field);
!   auto p = std::find_if( ref.subscripts.begin(), ref.subscripts.end(),
!                          [parent = ref.field->parent]( const auto &sub ) {
!                            return sub.field->parent == parent;
!                          } );
!   return p != ref.subscripts.end() ? *p : nullptr;
  }
  
  static inline symbol_elem_t *
*************** cmd_or_env_special_of( std::string name
*** 3186,3199 ****
  }
  
  static inline void
! parser_add2( struct cbl_num_result_t& to,
!              struct cbl_refer_t from ) {
    parser_add(to.refer, to.refer, from, to.rounded);
  }
  
  static inline void
! parser_subtract2( struct cbl_num_result_t to,
!                   struct cbl_refer_t from ) {
    parser_subtract(to.refer, to.refer, from, to.rounded);
  }
  
--- 3177,3190 ----
  }
  
  static inline void
! parser_add2( const cbl_num_result_t& to,
!              const cbl_refer_t& from ) {
    parser_add(to.refer, to.refer, from, to.rounded);
  }
  
  static inline void
! parser_subtract2(  const cbl_num_result_t& to,
!                    const cbl_refer_t& from ) {
    parser_subtract(to.refer, to.refer, from, to.rounded);
  }
  
*************** ast_set_pointers( const list<cbl_num_res
*** 3277,3287 ****
  
  void
  stringify( refer_collection_t *inputs,
!            cbl_refer_t into, cbl_refer_t pointer,
             cbl_label_t  *on_error = NULL,
             cbl_label_t *not_error = NULL);
  
! void unstringify( cbl_refer_t& src, refer_list_t *delimited,
                    unstring_into_t * into,
                    cbl_label_t  *on_error = NULL,
                    cbl_label_t *not_error = NULL );
--- 3268,3278 ----
  
  void
  stringify( refer_collection_t *inputs,
!            const cbl_refer_t& into, const cbl_refer_t& pointer,
             cbl_label_t  *on_error = NULL,
             cbl_label_t *not_error = NULL);
  
! void unstringify( const cbl_refer_t& src, refer_list_t *delimited,
                    unstring_into_t * into,
                    cbl_label_t  *on_error = NULL,
                    cbl_label_t *not_error = NULL );
*************** implicit_section()
*** 3306,3311 ****
--- 3297,3303 ----
  }
  
  static void
+ // cppcheck-suppress constParameterPointer
  ast_enter_exit_section( cbl_label_t * section ) {
    auto implicit = section?  implicit_paragraph() : NULL;
  
*************** data_division_ready() {
*** 3385,3391 ****
  
  static
  bool
! anybody_redefines(cbl_field_t *tree)
    {
    bool retval = false;
    while(tree)
--- 3377,3383 ----
  
  static
  bool
! anybody_redefines( const cbl_field_t *tree )
    {
    bool retval = false;
    while(tree)
*************** anybody_redefines(cbl_field_t *tree)
*** 3395,3401 ****
        retval = true;
        break;
        }
!     tree = parent_of(tree);
      }
    return retval;
    }
--- 3387,3394 ----
        retval = true;
        break;
        }
!     // cppcheck-suppress [unreadVariable] obviously not true
!     tree = parent_of(tree);   
      }
    return retval;
    }
*************** file_section_parent_set( cbl_field_t *fi
*** 3615,3628 ****
                                                  field->data.capacity);
  
      field->file = file_section_fd;
!     auto redefined = symbol_redefines(record_area);
      field->parent = redefined? record_area->parent : file->default_record;
    }
    return file_section_fd > 0;
  }
  
  void ast_call(const YYLTYPE& loc, cbl_refer_t name,
!                   cbl_refer_t returning,
                    size_t narg, cbl_ffi_arg_t args[],
                    cbl_label_t *except,
                    cbl_label_t *not_except,
--- 3608,3621 ----
                                                  field->data.capacity);
  
      field->file = file_section_fd;
!     const auto redefined = symbol_redefines(record_area);
      field->parent = redefined? record_area->parent : file->default_record;
    }
    return file_section_fd > 0;
  }
  
  void ast_call(const YYLTYPE& loc, cbl_refer_t name,
!                   const cbl_refer_t& returning,
                    size_t narg, cbl_ffi_arg_t args[],
                    cbl_label_t *except,
                    cbl_label_t *not_except,
diff -Nrcpad gcc-16-20250615/gcc/cobol/parse_util.h gcc-16-20250622/gcc/cobol/parse_util.h
*** gcc-16-20250615/gcc/cobol/parse_util.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/parse_util.h	Sun Jun 22 22:32:19 2025
*************** function_descr_t *function_descrs_end =
*** 271,277 ****
  class cname_cmp {
    const char *cname;
   public:
!   cname_cmp( const char *cname ) : cname(cname) {}
  
    bool operator()( const function_descr_t& descr ) {
      return strlen(cname) == strlen(descr.cname) &&
--- 271,277 ----
  class cname_cmp {
    const char *cname;
   public:
!   explicit cname_cmp( const char *cname ) : cname(cname) {}
  
    bool operator()( const function_descr_t& descr ) {
      return strlen(cname) == strlen(descr.cname) &&
*************** intrinsic_inconsistent_parameter( size_t
*** 293,300 ****
    class commensurate_type {
      cbl_refer_t first;
     public:
!     commensurate_type( const cbl_refer_t& first ) : first(first) {}
!     bool operator()( cbl_refer_t& arg )  const {
        return is_numeric(first.field) == is_numeric(arg.field);
      }
    };
--- 293,300 ----
    class commensurate_type {
      cbl_refer_t first;
     public:
!     explicit commensurate_type( const cbl_refer_t& first ) : first(first) {}
!     bool operator()( const cbl_refer_t& arg )  const {
        return is_numeric(first.field) == is_numeric(arg.field);
      }
    };
*************** intrinsic_invalid_parameter( int token,
*** 348,354 ****
                             return token == descr.token;
                           } );
    if( p == function_descrs_end ) {
!     cbl_internal_error( "%s: intrinsic function  %s not found",
                          __func__, keyword_str(token) );
    }
  
--- 348,354 ----
                             return token == descr.token;
                           } );
    if( p == function_descrs_end ) {
!     cbl_internal_error( "%s: intrinsic function %qs not found",
                          __func__, keyword_str(token) );
    }
  
diff -Nrcpad gcc-16-20250615/gcc/cobol/scan.l gcc-16-20250622/gcc/cobol/scan.l
*** gcc-16-20250615/gcc/cobol/scan.l	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/scan.l	Sun Jun 22 22:32:19 2025
*************** USE({SPC}FOR)?		{ return USE; }
*** 982,988 ****
    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);
  				}
--- 982,988 ----
    BINARY-LONG	   		{ return bcomputable(FldNumericBin5, 4); }
    BINARY-DOUBLE			{ return bcomputable(FldNumericBin5, 8); }
    BINARY-LONG-LONG		{ if( ! dialect_mf() ) {
! 				    dialect_error(yylloc, yytext, "mf");
  				  }
  				  return bcomputable(FldNumericBin5, 8);
  				}
*************** USE({SPC}FOR)?		{ return USE; }
*** 993,999 ****
    FLOAT-BINARY-32		{ return ucomputable(FldFloat, 4); }
    FLOAT-BINARY-64		{ return ucomputable(FldFloat, 8); }
    FLOAT-BINARY-128		{ return ucomputable(FldFloat, 16); }
!   FLOAT-DECIMAL-(16|34)		{ not_implemented("USAGE type: FLOAT_DECIMAL");
  				  return FLOAT_DECIMAL; // causes syntax error
  				}
    /* 21) The representation and length of a data item described with USAGE
--- 993,999 ----
    FLOAT-BINARY-32		{ return ucomputable(FldFloat, 4); }
    FLOAT-BINARY-64		{ return ucomputable(FldFloat, 8); }
    FLOAT-BINARY-128		{ return ucomputable(FldFloat, 16); }
!   FLOAT-DECIMAL-(16|34)		{ not_implemented("USAGE type: %<FLOAT_DECIMAL%>");
  				  return FLOAT_DECIMAL; // causes syntax error
  				}
    /* 21) The representation and length of a data item described with USAGE
*************** USE({SPC}FOR)?		{ return USE; }
*** 1019,1025 ****
    POINTER           	{ yylval.field_attr = none_e;     return POINTER; }
  
    PROCEDURE-POINTER    	{ if( dialect_gcc() ) {
! 			    error_msg(yylloc, "%s requires -dialect ibm or mf", yytext);
  			  }
  			  yylval.field_attr = prog_ptr_e;
  			  return POINTER;  // return it anyway
--- 1019,1025 ----
    POINTER           	{ yylval.field_attr = none_e;     return POINTER; }
  
    PROCEDURE-POINTER    	{ if( dialect_gcc() ) {
! 			    dialect_error(yylloc, yytext, "ibm or mf");
  			  }
  			  yylval.field_attr = prog_ptr_e;
  			  return POINTER;  // return it anyway
*************** BASIS		{ yy_push_state(basis); return BA
*** 2482,2491 ****
  <<EOF>>         {
  
                    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();
  
--- 2482,2490 ----
  <<EOF>>         {
  
                    if( YY_START == quoted1 || YY_START == quoted2 ) {
! 		    error_msg(yylloc, "syntax error: unterminated string %<%s%>",
  			     tmpstring);
  		    return NO_CONDITION;
                    }
                    yypop_buffer_state();
  
diff -Nrcpad gcc-16-20250615/gcc/cobol/scan_ante.h gcc-16-20250622/gcc/cobol/scan_ante.h
*** gcc-16-20250615/gcc/cobol/scan_ante.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/scan_ante.h	Sun Jun 22 22:32:19 2025
*************** numstr_of( const char string[], radix_t
*** 159,169 ****
      //  exponent is implementor-defined." (We allow 9999.)
      nx = std::count_if(p, eoinput, fisdigit);
      if( 4 < nx ) {
!       error_msg(yylloc, "exponent %s more than 4 digits", ++p);
        return NO_CONDITION;
      }
      if( eoinput != std::find(p, eoinput, symbol_decimal_point()) ) {
!       error_msg(yylloc, "exponent includes decimal point", ++p);
        return NO_CONDITION;
      }
  
--- 159,169 ----
      //  exponent is implementor-defined." (We allow 9999.)
      nx = std::count_if(p, eoinput, fisdigit);
      if( 4 < nx ) {
!       error_msg(yylloc, "exponent %qs more than 4 digits", ++p);
        return NO_CONDITION;
      }
      if( eoinput != std::find(p, eoinput, symbol_decimal_point()) ) {
!       error_msg(yylloc, "exponent %qs includes decimal point", ++p);
        return NO_CONDITION;
      }
  
*************** numstr_of( const char string[], radix_t
*** 187,193 ****
      }
    }
    if( 1 < std::count(input, eoinput, symbol_decimal_point()) ) {
!     error_msg(yylloc, "invalid numeric literal", ++p);
      return NO_CONDITION;
    }
  
--- 187,193 ----
      }
    }
    if( 1 < std::count(input, eoinput, symbol_decimal_point()) ) {
!     error_msg(yylloc, "invalid numeric literal %qs", ++p);
      return NO_CONDITION;
    }
  
*************** struct cdf_status_t {
*** 214,220 ****
    const char *filename;
    int  token;
    bool parsing;
!   cdf_status_t( int token = 0, bool parsing = true )
      : lineno(yylineno), filename(cobol_filename())
      , token(token), parsing(parsing)
    {}
--- 214,224 ----
    const char *filename;
    int  token;
    bool parsing;
!   cdf_status_t()
!     : lineno(yylineno), filename(cobol_filename())
!     , token(0), parsing(true)
!   {}
!   cdf_status_t( int token, bool parsing )
      : lineno(yylineno), filename(cobol_filename())
      , token(token), parsing(parsing)
    {}
*************** static class parsing_status_t : public s
*** 291,297 ****
    void splat() const {
      int i=0;
      for( const auto& status : c ) {
!       yywarn( "%4d\t%s", ++i, status.str() );
      }
    }
  } parsing;
--- 295,301 ----
    void splat() const {
      int i=0;
      for( const auto& status : c ) {
!       yywarn( "%d %s", ++i, status.str() );
      }
    }
  } parsing;
*************** void field_done() { orig_picture[0] = '\
*** 301,307 ****
  
  static int scanner_token() {
    if( parsing.empty() ) {
!     error_msg(yylloc, ">>ELSE or >>END-IF without >>IF");
      return NO_CONDITION;
    }
    return parsing.top().token;
--- 305,311 ----
  
  static int scanner_token() {
    if( parsing.empty() ) {
!     error_msg(yylloc, "%<>>ELSE%> or %<>>END-IF%> without %<>>IF%>");
      return NO_CONDITION;
    }
    return parsing.top().token;
*************** bool scanner_normal()  { return parsing.
*** 313,345 ****
  void scanner_parsing( int token, bool tf ) {
    parsing.push( cdf_status_t(token, tf) );
    if( yydebug ) {
!     yywarn("%10s: parsing now %5s, depth %lu",
!             keyword_str(token), boolalpha(parsing.on()),
! 	   gb4(parsing.size()));
      parsing.splat();
    }
  }
  void scanner_parsing_toggle() {
    if( parsing.empty() ) {
!     error_msg(yylloc, ">>ELSE without >>IF");
      return;
    }
    parsing.top().toggle();
    if( yydebug ) {
!     yywarn("%10s: parsing now %5s",
              keyword_str(CDF_ELSE), boolalpha(parsing.on()));
    }
  }
  void scanner_parsing_pop() {
    if( parsing.empty() ) {
!     error_msg(yylloc, ">>END-IF without >>IF");
      return;
    }
    parsing.pop();
    if( yydebug ) {
!     yywarn("%10s: parsing now %5s, depth %lu",
              keyword_str(CDF_END_IF), boolalpha(parsing.on()),
! 	   gb4(parsing.size()));
      parsing.splat();
    }
  }
--- 317,348 ----
  void scanner_parsing( int token, bool tf ) {
    parsing.push( cdf_status_t(token, tf) );
    if( yydebug ) {
!     yywarn("%s: parsing now %s, depth %zu",
!             keyword_str(token), boolalpha(parsing.on()), parsing.size());
      parsing.splat();
    }
  }
  void scanner_parsing_toggle() {
    if( parsing.empty() ) {
!     error_msg(yylloc, "%<>>ELSE%> without %<>>IF%>");
      return;
    }
    parsing.top().toggle();
    if( yydebug ) {
!     yywarn("%s: parsing now %s",
              keyword_str(CDF_ELSE), boolalpha(parsing.on()));
    }
  }
  void scanner_parsing_pop() {
    if( parsing.empty() ) {
!     error_msg(yylloc, "%<>>END-IF%> without %<>>IF%>");
      return;
    }
    parsing.pop();
    if( yydebug ) {
!     yywarn("%s: parsing now %s, depth %zu",
              keyword_str(CDF_END_IF), boolalpha(parsing.on()),
! 	   parsing.size());
      parsing.splat();
    }
  }
*************** class enter_leave_t {
*** 371,377 ****
    enter_leave_t() : entering(NULL), leaving(NULL), filename(NULL) {}
    enter_leave_t(  parser_enter_file_f *entering, const char *filename )
      : entering(entering), leaving(NULL), filename(filename) {}
!   enter_leave_t(parser_leave_file_f *leaving)
      : entering(NULL), leaving(leaving), filename(NULL) {}
  
    void notify( unsigned int newlines = 0 ) {
--- 374,380 ----
    enter_leave_t() : entering(NULL), leaving(NULL), filename(NULL) {}
    enter_leave_t(  parser_enter_file_f *entering, const char *filename )
      : entering(entering), leaving(NULL), filename(filename) {}
!   explicit enter_leave_t(parser_leave_file_f *leaving)
      : entering(NULL), leaving(leaving), filename(NULL) {}
  
    void notify( unsigned int newlines = 0 ) {
*************** static class input_file_status_t {
*** 405,411 ****
      trailing_newlines = std::count(yytext, yytext + yyleng, '\n');
      if( trailing_newlines && yy_flex_debug )
        dbgmsg("adding %u lines after POP", trailing_newlines);
!     inputs.push( parser_leave_file );
    }
    void notify() {
      while( ! inputs.empty() ) {
--- 408,414 ----
      trailing_newlines = std::count(yytext, yytext + yyleng, '\n');
      if( trailing_newlines && yy_flex_debug )
        dbgmsg("adding %u lines after POP", trailing_newlines);
!     inputs.push( enter_leave_t(parser_leave_file) );
    }
    void notify() {
      while( ! inputs.empty() ) {
*************** update_location() {
*** 429,435 ****
  
    auto nline = std::count(yytext, yytext + yyleng, '\n');
    if( nline ) {
!     char *p = static_cast<char*>(memrchr(yytext, '\n', yyleng));
      loc.last_column = (yytext + yyleng) - p;
    }
  
--- 432,438 ----
  
    auto nline = std::count(yytext, yytext + yyleng, '\n');
    if( nline ) {
!     const char *p = static_cast<char*>(memrchr(yytext, '\n', yyleng));
      loc.last_column = (yytext + yyleng) - p;
    }
  
*************** bool need_nume_set( bool tf ) {
*** 666,672 ****
  static int datetime_format_of( const char input[] );
  
  static int symbol_function_token( const char name[] ) {
!   auto e = symbol_function( 0, name );
    return e ? symbol_index(e) : 0;
  }
  
--- 669,675 ----
  static int datetime_format_of( const char input[] );
  
  static int symbol_function_token( const char name[] ) {
!   const auto e = symbol_function( 0, name );
    return e ? symbol_index(e) : 0;
  }
  
*************** typed_name( const char name[] ) {
*** 754,760 ****
      __attribute__((fallthrough));
    case FldLiteralN:
      {
!       auto f = cbl_field_of(e);
        if( type == FldLiteralN ) {
          yylval.numstr.radix =
            f->has_attr(hex_encoded_e)? hexadecimal_e : decimal_e;
--- 757,763 ----
      __attribute__((fallthrough));
    case FldLiteralN:
      {
!       const auto f = cbl_field_of(e);
        if( type == FldLiteralN ) {
          yylval.numstr.radix =
            f->has_attr(hex_encoded_e)? hexadecimal_e : decimal_e;
*************** typed_name( const char name[] ) {
*** 788,794 ****
      return cbl_field_of(e)->level == 88? NAME88 : CLASS_NAME;
      break;
    default:
!     yywarn("%s:%d: invalid symbol type %s for symbol \"%s\"",
            __func__, __LINE__, cbl_field_type_str(type), name);
      return NAME;
    }
--- 791,797 ----
      return cbl_field_of(e)->level == 88? NAME88 : CLASS_NAME;
      break;
    default:
!     yywarn("%s:%d: invalid symbol type %s for symbol %qs",
            __func__, __LINE__, cbl_field_type_str(type), name);
      return NAME;
    }
*************** wait_for_the_child(void) {
*** 821,837 ****
    }
  
    if( WIFSIGNALED(status) ) {
!     yywarn( "process %d terminated by %s", pid, strsignal(WTERMSIG(status)) );
      return false;
    }
    if( WIFEXITED(status) ) {
      if( WEXITSTATUS(status) != 0 ) {
!       yywarn("process %d exited with status %d", pid, status);
        return false;
      }
    }
    if( yy_flex_debug ) {
!     yywarn("process %d exited with status %d", pid, status);
    }
    return true;
  }
--- 824,843 ----
    }
  
    if( WIFSIGNALED(status) ) {
!     yywarn( "process %ld terminated by %s", 
! 	    static_cast<long>(pid), strsignal(WTERMSIG(status)) );
      return false;
    }
    if( WIFEXITED(status) ) {
      if( WEXITSTATUS(status) != 0 ) {
!       yywarn("process %ld exited with status %d",
!              static_cast<long>(pid), status);
        return false;
      }
    }
    if( yy_flex_debug ) {
!     yywarn("process %ld exited with status %d",
!            static_cast<long>(pid), status);
    }
    return true;
  }
diff -Nrcpad gcc-16-20250615/gcc/cobol/scan_post.h gcc-16-20250622/gcc/cobol/scan_post.h
*** gcc-16-20250615/gcc/cobol/scan_post.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/scan_post.h	Sun Jun 22 22:32:19 2025
*************** datetime_format_of( const char input[] )
*** 116,125 ****
  
      for( auto p = patterns; p < eopatterns; p++ ) {
        static const int cflags = REG_EXTENDED | REG_ICASE;
-       static char msg[80];
        int erc;
  
        if( 0 != (erc = regcomp(&p->re, p->regex, cflags)) ) {
          regerror(erc, &p->re, msg, sizeof(msg));
          yywarn("%s:%d: %s: %s", __func__, __LINE__, keyword_str(p->token), msg);
        }
--- 116,125 ----
  
      for( auto p = patterns; p < eopatterns; p++ ) {
        static const int cflags = REG_EXTENDED | REG_ICASE;
        int erc;
  
        if( 0 != (erc = regcomp(&p->re, p->regex, cflags)) ) {
+         static char msg[80];
          regerror(erc, &p->re, msg, sizeof(msg));
          yywarn("%s:%d: %s: %s", __func__, __LINE__, keyword_str(p->token), msg);
        }
*************** prelex() {
*** 297,303 ****
        token = LEVEL;
        break;
      case YDF_NUMBER:
!       if( yy_flex_debug ) yywarn("final token is YDF_NUMBER");
        yylval.number = ydflval.number;
        token = LEVEL;
        break;
--- 297,303 ----
        token = LEVEL;
        break;
      case YDF_NUMBER:
!       if( yy_flex_debug ) yywarn("final token is %<YDF_NUMBER%>");
        yylval.number = ydflval.number;
        token = LEVEL;
        break;
diff -Nrcpad gcc-16-20250615/gcc/cobol/show_parse.h gcc-16-20250622/gcc/cobol/show_parse.h
*** gcc-16-20250615/gcc/cobol/show_parse.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/show_parse.h	Sun Jun 22 22:32:19 2025
*************** extern bool cursor_at_sol;
*** 147,156 ****
                      fprintf(stderr, "<%s>", cbl_field_type_str((b).field->type)); \
                      } \
                  } \
!             if( (b).nsubscript) \
                  { \
                  fprintf(stderr,"("); \
!                 for(size_t jjj=0; jjj<(b).nsubscript; jjj++) \
                      { \
                      if(jjj) \
                        { \
--- 147,156 ----
                      fprintf(stderr, "<%s>", cbl_field_type_str((b).field->type)); \
                      } \
                  } \
!             if( (b).nsubscript()) \
                  { \
                  fprintf(stderr,"("); \
!                 for(size_t jjj=0; jjj<(b).nsubscript(); jjj++) \
                      { \
                      if(jjj) \
                        { \
*************** extern bool cursor_at_sol;
*** 337,349 ****
      else \
        { \
        gg_fprintf(trace_handle, 1, "%s", gg_string_literal( (b).field->name ? (b).field->name:"")); \
!       if( b.nsubscript ) \
          { \
          gg_fprintf(trace_handle, 0, "("); \
!         for(unsigned int i=0; i<b.nsubscript; i++) \
            { \
            gg_fprintf(trace_handle, 1, "%s", gg_string_literal(    b.subscripts[i].field->name ? b.subscripts[i].field->name : ""  )); \
!           if( i<b.nsubscript-1 ) \
              { \
              gg_fprintf(trace_handle, 0, " "); \
              } \
--- 337,349 ----
      else \
        { \
        gg_fprintf(trace_handle, 1, "%s", gg_string_literal( (b).field->name ? (b).field->name:"")); \
!       if( b.nsubscript() ) \
          { \
          gg_fprintf(trace_handle, 0, "("); \
!         for(unsigned int i=0; i<b.nsubscript(); i++) \
            { \
            gg_fprintf(trace_handle, 1, "%s", gg_string_literal(    b.subscripts[i].field->name ? b.subscripts[i].field->name : ""  )); \
!           if( i<b.nsubscript()-1 ) \
              { \
              gg_fprintf(trace_handle, 0, " "); \
              } \
*************** extern bool cursor_at_sol;
*** 424,453 ****
  
  // Use CHECK_FIELD when a should be non-null, and a->var_decl_node also should
  // by non-null:
! #define CHECK_FIELD(a)          \
!         do{                     \
!         if(!a)                  \
!             {                   \
!             yywarn("%s(): parameter " #a " is NULL", __func__); \
!             gcc_unreachable();  \
!             }                   \
!         if( !a->var_decl_node && a->type != FldConditional && a->type != FldLiteralA)  \
!             {                   \
!             yywarn("%s() parameter " #a " is variable %s<%s> with NULL var_decl_node", \
!                 __func__,       \
!                 a->name,        \
!                 cbl_field_type_str(a->type) ); \
!             gcc_unreachable();  \
!             }                   \
!         }while(0);
  
! #define CHECK_LABEL(a)            \
!         do{                     \
!         if(!a)                  \
!             {                   \
!             yywarn("%s(): parameter " #a " is NULL", __func__); \
!             gcc_unreachable();  \
!             }                   \
          }while(0);
  
  #ifdef INCORPORATE_ANALYZER
--- 424,454 ----
  
  // Use CHECK_FIELD when a should be non-null, and a->var_decl_node also should
  // by non-null:
! #define CHECK_FIELD(a)                                                  \
!         do {                                                                  \
!         if(!a)                                                          \
!             {                                                           \
!             yywarn("%s: parameter %<" #a "%> is NULL", __func__);        \
!             gcc_unreachable();                                          \
!             }                                                           \
!         if( !a->var_decl_node && a->type != FldConditional && a->type != FldLiteralA) \
!             {                                                           \
!             yywarn("%s: parameter %<" #a "%> is variable "               \
!                    "%s<%s> with NULL %<var_decl_node%>",                \
!                 __func__,                                               \
!                 a->name,                                                \
!                 cbl_field_type_str(a->type) );                          \
!             gcc_unreachable();                                          \
!             }                                                           \
!         } while(0);
  
! #define CHECK_LABEL(a)                                                  \
!         do{                                                             \
!         if(!a)                                                          \
!             {                                                           \
!             yywarn("%s: parameter %<" #a "%> is NULL", __func__);       \
!             gcc_unreachable();                                          \
!             }                                                           \
          }while(0);
  
  #ifdef INCORPORATE_ANALYZER
*************** class ANALYZE
*** 506,512 ****
  class ANALYZE
    {
    public:
!     ANALYZE(const char *)
        {
        }
      ~ANALYZE()
--- 507,513 ----
  class ANALYZE
    {
    public:
!     explicit ANALYZE(const char *)
        {
        }
      ~ANALYZE()
diff -Nrcpad gcc-16-20250615/gcc/cobol/symbols.cc gcc-16-20250622/gcc/cobol/symbols.cc
*** gcc-16-20250615/gcc/cobol/symbols.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/symbols.cc	Sun Jun 22 22:32:19 2025
*************** static struct symbol_table_t {
*** 136,146 ****
  
  static symbol_table_t&
  symbol_table_extend() {
-   static FILE *mapped;
  
    if( symbols.nelem == 0 ) {  // first time: create file & set initial capacity
!     assert(mapped == NULL && symbols.fd == -1);
! 
      if( (mapped = tmpfile()) == NULL ) {
        cbl_err( "could not create temporary file for symbol table");
      }
--- 136,144 ----
  
  static symbol_table_t&
  symbol_table_extend() {
  
    if( symbols.nelem == 0 ) {  // first time: create file & set initial capacity
!     FILE *mapped;
      if( (mapped = tmpfile()) == NULL ) {
        cbl_err( "could not create temporary file for symbol table");
      }
*************** cbl_span_t::from_field() { assert(from);
*** 229,234 ****
--- 227,238 ----
  cbl_field_t *
  cbl_span_t::len_field()  { assert(len); return len->field; }
  
+ cbl_ffi_arg_t::cbl_ffi_arg_t()
+   : optional(false)
+   , crv(by_reference_e)
+   , attr(none_of_e)
+ {}
+ 
  cbl_ffi_arg_t::
  cbl_ffi_arg_t( cbl_refer_t* refer, cbl_ffi_arg_attr_t attr )
    : optional(false)
*************** end_of_group( size_t igroup ) {
*** 927,933 ****
        if( e->program != group->program ) return isym;
        if( e->type == SymLabel ) return isym; // end of data division
        if( e->type == SymField ) {
!         auto f = cbl_field_of(e);
          if( f->level == LEVEL77 || f->level == 66 ) return isym;
          if( f->level == 1 && f->parent != igroup ) {
            return isym;
--- 931,937 ----
        if( e->program != group->program ) return isym;
        if( e->type == SymLabel ) return isym; // end of data division
        if( e->type == SymField ) {
!         const auto f = cbl_field_of(e);
          if( f->level == LEVEL77 || f->level == 66 ) return isym;
          if( f->level == 1 && f->parent != igroup ) {
            return isym;
*************** end_of_group( size_t igroup ) {
*** 938,944 ****
    }
  
    eog_t eog(symbol_at(igroup));
!   symbol_elem_t *e = std::find_if( symbols_begin(++igroup), symbols_end(), eog );
    return e - symbols_begin();
  }
  
--- 942,948 ----
    }
  
    eog_t eog(symbol_at(igroup));
!   const symbol_elem_t *e = std::find_if( symbols_begin(++igroup), symbols_end(), eog );
    return e - symbols_begin();
  }
  
*************** symbol_find_odo_debug( cbl_field_t * fie
*** 993,999 ****
  
  // Return OCCURS DEPENDING ON table subordinate to field, if any.
  struct cbl_field_t *
! symbol_find_odo( cbl_field_t * field ) {
    size_t bog = field_index(field), eog = end_of_group(bog);
    auto e = std::find_if( symbol_at(bog), symbol_at_impl(eog, true), has_odo );
    return e == symbol_at_impl(eog, true)? NULL : cbl_field_of(e);
--- 997,1003 ----
  
  // Return OCCURS DEPENDING ON table subordinate to field, if any.
  struct cbl_field_t *
! symbol_find_odo( const cbl_field_t * field ) {
    size_t bog = field_index(field), eog = end_of_group(bog);
    auto e = std::find_if( symbol_at(bog), symbol_at_impl(eog, true), has_odo );
    return e == symbol_at_impl(eog, true)? NULL : cbl_field_of(e);
*************** static struct symbol_elem_t *
*** 1170,1176 ****
          // If an 01 record exists for the FD/SD, use its capacity as the
          // default_record capacity.
          if( p != symbols_end() ) {
!           auto record = cbl_field_of(p);
            assert(record->level == 1);
            e = calculate_capacity(p);
            auto record_size = std::max(record->data.memsize,
--- 1174,1180 ----
          // If an 01 record exists for the FD/SD, use its capacity as the
          // default_record capacity.
          if( p != symbols_end() ) {
!           const auto record = cbl_field_of(p);
            assert(record->level == 1);
            e = calculate_capacity(p);
            auto record_size = std::max(record->data.memsize,
*************** is_variable_length( const cbl_field_t *f
*** 1362,1368 ****
   *  occurs-depending table."
  */
  cbl_field_t *
! rename_not_ok( cbl_field_t *first, cbl_field_t *last) {
    symbol_elem_t
      *beg = symbol_at(field_index(first)),
      *end = symbol_at(field_index(last));
--- 1366,1372 ----
   *  occurs-depending table."
  */
  cbl_field_t *
! rename_not_ok( const cbl_field_t *first, const cbl_field_t *last) {
    symbol_elem_t
      *beg = symbol_at(field_index(first)),
      *end = symbol_at(field_index(last));
*************** field_str( const cbl_field_t *field ) {
*** 1463,1469 ****
    }
  
    pend += snprintf(pend, string + sizeof(string) - pend,
!                    "%02d %-20s ", field->level, name);
  
    char offset[32] = "";
    if( field->level > 1 ) {
--- 1467,1473 ----
    }
  
    pend += snprintf(pend, string + sizeof(string) - pend,
!                    "%02u %-20s ", field->level, name);
  
    char offset[32] = "";
    if( field->level > 1 ) {
*************** struct capacity_of {
*** 1574,1580 ****
  
    capacity_of operator()( symbol_elem_t& elem ) {
      if( elem.type == SymField ) {
!       cbl_field_t *f = cbl_field_of(&elem);
        if( is_elementary(f->type) ) {
          capacity += field_size(f);
        }
--- 1578,1584 ----
  
    capacity_of operator()( symbol_elem_t& elem ) {
      if( elem.type == SymField ) {
!       const cbl_field_t *f = cbl_field_of(&elem);
        if( is_elementary(f->type) ) {
          capacity += field_size(f);
        }
*************** symbols_update( size_t first, bool parse
*** 1741,1747 ****
  
      bool size_invalid = field->data.memsize > 0 && symbol_redefines(field);
      if( size_invalid ) { // redefine of record area is ok
!       auto redefined = symbol_redefines(field);
        size_invalid = ! is_record_area(redefined);
      }
      if( !field->is_valid() || size_invalid )
--- 1745,1751 ----
  
      bool size_invalid = field->data.memsize > 0 && symbol_redefines(field);
      if( size_invalid ) { // redefine of record area is ok
!       const auto redefined = symbol_redefines(field);
        size_invalid = ! is_record_area(redefined);
      }
      if( !field->is_valid() || size_invalid )
*************** symbols_update( size_t first, bool parse
*** 1824,1830 ****
      }
  
      // Verify REDEFINing field has no ODO components
!     auto parent = symbol_redefines(field);
      if( parent && !is_record_area(parent) && is_variable_length(field) ) {
        ERROR_FIELD(field, "line %d: REDEFINES field %s cannot be variable length",
                 field->line, field->name);
--- 1828,1834 ----
      }
  
      // Verify REDEFINing field has no ODO components
!     const auto parent = symbol_redefines(field);
      if( parent && !is_record_area(parent) && is_variable_length(field) ) {
        ERROR_FIELD(field, "line %d: REDEFINES field %s cannot be variable length",
                 field->line, field->name);
*************** symbol_in_file( symbol_elem_t *e ) {
*** 2014,2028 ****
  }
  #endif
  
! static struct cbl_field_t *
! symbol_field_parent_set( struct cbl_field_t *field )
  {
    if( field->level == 01 ) return NULL;
    if( field->level == 77 ) return NULL;
    if( field->level == 78 ) return NULL;
  
    struct symbol_elem_t *e = symbols.elems + symbols.nelem - 1;
!   struct symbol_elem_t *first = symbols.elems + symbols.first_program;
  
    for( ; field->parent == 0 && e >= first; e-- ) {
      if( ! (e->type == SymField && cbl_field_of(e)->level > 0) ) {
--- 2018,2032 ----
  }
  #endif
  
! static cbl_field_t *
! symbol_field_parent_set( cbl_field_t *field )
  {
    if( field->level == 01 ) return NULL;
    if( field->level == 77 ) return NULL;
    if( field->level == 78 ) return NULL;
  
    struct symbol_elem_t *e = symbols.elems + symbols.nelem - 1;
!   const struct symbol_elem_t *first = symbols.elems + symbols.first_program;
  
    for( ; field->parent == 0 && e >= first; e-- ) {
      if( ! (e->type == SymField && cbl_field_of(e)->level > 0) ) {
*************** symbol_file_add( size_t program, cbl_fil
*** 2404,2410 ****
      return NULL;
    }
  
!   struct symbol_elem_t sym = { SymFile, program };
    sym.elem.file = *file;
  
    e = symbol_add(&sym);
--- 2408,2414 ----
      return NULL;
    }
  
!   symbol_elem_t sym{ SymFile, program };
    sym.elem.file = *file;
  
    e = symbol_add(&sym);
*************** symbol_typedef_add( size_t program, stru
*** 2462,2468 ****
    auto e = symbols_end() - 1;
    assert( symbols_begin() < e );
    if( e->type == SymField ) {
!     auto f = cbl_field_of(e);
      if( f == field ) return e;
    }
  
--- 2466,2472 ----
    auto e = symbols_end() - 1;
    assert( symbols_begin() < e );
    if( e->type == SymField ) {
!     const auto f = cbl_field_of(e);
      if( f == field ) return e;
    }
  
*************** struct symbol_elem_t *
*** 2500,2506 ****
  symbol_field_add( size_t program, struct cbl_field_t *field )
  {
    field->our_index = symbols.nelem;
!   cbl_field_t *parent = symbol_field_parent_set( field );
    if( parent && parent->type == FldGroup) {
      // Inherit effects of parent's USAGE, as though it appeared 1st in the
      // member's definition.
--- 2504,2510 ----
  symbol_field_add( size_t program, struct cbl_field_t *field )
  {
    field->our_index = symbols.nelem;
!   const cbl_field_t *parent = symbol_field_parent_set( field );
    if( parent && parent->type == FldGroup) {
      // Inherit effects of parent's USAGE, as though it appeared 1st in the
      // member's definition.
*************** symbol_field_add( size_t program, struct
*** 2512,2518 ****
      if( is_numeric(parent->usage) && parent->data.capacity > 0 ) {
        field->type = parent->usage;
        field->data = parent->data;
!       field->data = 0.0;
        field->data.initial = NULL;
      }
    }
--- 2516,2522 ----
      if( is_numeric(parent->usage) && parent->data.capacity > 0 ) {
        field->type = parent->usage;
        field->data = parent->data;
!       field->data = 0;
        field->data.initial = NULL;
      }
    }
*************** symbol_field( size_t program, size_t par
*** 2631,2636 ****
--- 2635,2641 ----
    return p != end? &*p : NULL;
  }
  
+ // cppcheck-suppress-begin [CastIntegerToAddressAtReturn] obviously not true
  symbol_elem_t *
  symbol_register( const char name[] )
  {
*************** symbol_register( const char name[] )
*** 2646,2651 ****
--- 2651,2657 ----
  
    return p;
  }
+ // cppcheck-suppress-end [CastIntegerToAddressAtReturn]
  
  // Find current 01 record during Level 66 construction.
  const symbol_elem_t *
*************** symbol_literalA( size_t program, const c
*** 2708,2718 ****
  struct symbol_elem_t *
  symbol_file( size_t program, const char name[] ) {
    size_t nelem = symbols.nelem;
!   struct symbol_elem_t key = { SymFile, program }, *e = &key;
  
    assert(strlen(name) < sizeof(key.elem.file.name));
    strcpy(key.elem.file.name, name);
  
    do {
      e = static_cast<struct symbol_elem_t *>(lfind( &key, symbols.elems,
                                                     &nelem, sizeof(*e),
--- 2714,2725 ----
  struct symbol_elem_t *
  symbol_file( size_t program, const char name[] ) {
    size_t nelem = symbols.nelem;
!   symbol_elem_t key{ SymFile, program }, *e = &key;
  
    assert(strlen(name) < sizeof(key.elem.file.name));
    strcpy(key.elem.file.name, name);
  
+   // cppcheck-suppress-begin [knownConditionTrueFalse]
    do {
      e = static_cast<struct symbol_elem_t *>(lfind( &key, symbols.elems,
                                                     &nelem, sizeof(*e),
*************** symbol_file( size_t program, const char
*** 2721,2726 ****
--- 2728,2734 ----
      key.program = cbl_label_of(symbol_at(key.program))->parent;
      if( key.program == 0 ) break; // no file without a program
    } while( !e );
+   // cppcheck-suppress-end [knownConditionTrueFalse]
  
    if( e ) {
      assert(e->type == SymFile);
*************** seek_parent( const symbol_elem_t *e, siz
*** 2828,2834 ****
  struct symbol_elem_t *
  symbol_field_same_as( cbl_field_t *tgt, const cbl_field_t *src ) {
    if( target_in_src(tgt, src) ) {
!     ERROR_FIELD(tgt, "%s %s  may not reference itself as part of %s %s",
              tgt->level_str(), tgt->name, src->level_str(), src->name);
      return NULL;
    }
--- 2836,2842 ----
  struct symbol_elem_t *
  symbol_field_same_as( cbl_field_t *tgt, const cbl_field_t *src ) {
    if( target_in_src(tgt, src) ) {
!     ERROR_FIELD(tgt, "%s %s may not reference itself as part of %s %s",
              tgt->level_str(), tgt->name, src->level_str(), src->name);
      return NULL;
    }
*************** symbol_file_same_record_area( std::list<
*** 2914,2920 ****
  }
  
  static symbol_elem_t *
! next_program( symbol_elem_t *elem ) {
    size_t start = elem? symbol_index(elem) : 0;
    symbol_elem_t * e =
      std::find_if( symbols_begin(start), symbols_end(), is_program );
--- 2922,2928 ----
  }
  
  static symbol_elem_t *
! next_program( const symbol_elem_t *elem ) {
    size_t start = elem? symbol_index(elem) : 0;
    symbol_elem_t * e =
      std::find_if( symbols_begin(start), symbols_end(), is_program );
*************** is_numeric_constant( const char name[] )
*** 2952,2965 ****
  
  // get default record layout for a file
  struct cbl_field_t *
! symbol_file_record( struct cbl_file_t *file ) {
    return cbl_field_of(symbol_at(file->default_record));
  }
  
  class is_section {
    cbl_section_type_t section_type;
   public:
!   is_section( cbl_section_type_t sect ) : section_type(sect) {}
    bool operator()( symbol_elem_t& e ) const {
      return e.type == SymDataSection && cbl_section_of(&e)->type == section_type;
    }
--- 2960,2973 ----
  
  // get default record layout for a file
  struct cbl_field_t *
! symbol_file_record( const cbl_file_t *file ) {
    return cbl_field_of(symbol_at(file->default_record));
  }
  
  class is_section {
    cbl_section_type_t section_type;
   public:
!   explicit is_section( cbl_section_type_t sect ) : section_type(sect) {}
    bool operator()( symbol_elem_t& e ) const {
      return e.type == SymDataSection && cbl_section_of(&e)->type == section_type;
    }
*************** static bool fd_record_size_cmp( const sy
*** 2970,2977 ****
    return cbl_field_of(&a)->data.capacity < cbl_field_of(&b)->data.capacity;
  }
  
- cbl_file_key_t cbl_file_t::no_key;
- 
  /*
   * Find largest and smallest record defined for a file.  The rule is:
   * cbl_file_t::varies() returns true if the record size varies,
--- 2978,2983 ----
*************** cbl_alphabet_t::assign( const YYLTYPE& l
*** 3082,3088 ****
      return true;
    }
    auto taken = alphabet[ch];
!   error_msg(loc, "ALPHABET %s, character '%c' (X'%x') "
             "in position %d already defined at position %d",
             name,
             ISPRINT(ch)? ch : '?', ch,
--- 3088,3094 ----
      return true;
    }
    auto taken = alphabet[ch];
!   error_msg(loc, "ALPHABET %s, character %<%c%> (X%'%x%') "
             "in position %d already defined at position %d",
             name,
             ISPRINT(ch)? ch : '?', ch,
*************** cbl_field_t::internalize() {
*** 3487,3493 ****
    static const size_t noconv = size_t(-1);
  
    if (cd == (iconv_t)-1) {
!     yywarn("failed iconv_open tocode = '%s' fromcode = %s", tocode, fromcode);
    }
  
    bool using_assumed = fromcode == os_locale.assumed;
--- 3493,3499 ----
    static const size_t noconv = size_t(-1);
  
    if (cd == (iconv_t)-1) {
!     yywarn("failed %<iconv_open%> tocode = %<%s%> fromcode = %s", tocode, fromcode);
    }
  
    bool using_assumed = fromcode == os_locale.assumed;
*************** cbl_label_t::explicit_parent() const {
*** 3604,3615 ****
  }
  
  cbl_prog_hier_t::cbl_prog_hier_t() {
-   nlabel = std::count_if( symbols_begin(), symbols_end(), is_program );
-   assert(nlabel >0);
-   labels = new cbl_prog_hier_t::program_label_t[nlabel];
- 
    std::copy_if( symbols_begin(), symbols_end(),
!                 labels, is_program );
  }
  
  /*
--- 3610,3618 ----
  }
  
  cbl_prog_hier_t::cbl_prog_hier_t() {
    std::copy_if( symbols_begin(), symbols_end(),
!                 std::back_inserter(labels), is_program );
!   assert(! labels.empty());
  }
  
  /*
*************** symbol_label_add( size_t program, cbl_la
*** 3702,3708 ****
    if( (e = symbol_add(&elem)) == NULL ) {
      cbl_errx("%s:%d: could not add '%s'", __func__, __LINE__, label->name);
    }
! 
    common_callables_update( symbol_index(e) );
  
    // restore munged line number unless symbol_add returned an existing label
--- 3705,3712 ----
    if( (e = symbol_add(&elem)) == NULL ) {
      cbl_errx("%s:%d: could not add '%s'", __func__, __LINE__, label->name);
    }
!   assert(e);
!   
    common_callables_update( symbol_index(e) );
  
    // restore munged line number unless symbol_add returned an existing label
*************** symbol_label_section_exists( size_t eval
*** 3723,3729 ****
    bool has_section = std::any_of( ++eval, symbols_end(),
                                 [program = eval->program]( const auto& sym ) {
                                   if( program == sym.program && sym.type == SymLabel ) {
!                                    auto& L(sym.elem.label);
  				   // true if the symbol is an explicit label.
                                     return L.type == LblSection &&  L.name[0] != '_'; 
                                   }
--- 3727,3733 ----
    bool has_section = std::any_of( ++eval, symbols_end(),
                                 [program = eval->program]( const auto& sym ) {
                                   if( program == sym.program && sym.type == SymLabel ) {
!                                    const auto& L(sym.elem.label);
  				   // true if the symbol is an explicit label.
                                     return L.type == LblSection &&  L.name[0] != '_'; 
                                   }
*************** expand_picture(const char *picture)
*** 3875,3881 ****
      {
      assert(strlen(picture) < PICTURE_MAX); // guaranteed by picset() in scanner
      size_t retval_length = PICTURE_MAX;
!     char *retval = (char *)xmalloc(retval_length);
      size_t index = 0;
  
      int ch;
--- 3879,3885 ----
      {
      assert(strlen(picture) < PICTURE_MAX); // guaranteed by picset() in scanner
      size_t retval_length = PICTURE_MAX;
!     char *retval = static_cast<char *>(xmalloc(retval_length));
      size_t index = 0;
  
      int ch;
*************** expand_picture(const char *picture)
*** 3904,3910 ****
              if( index + repeat >= retval_length )
                  {
                  retval_length <<= 1;
!                 retval = (char *)xrealloc(retval, retval_length);
                  }
  
              while(repeat--)
--- 3908,3914 ----
              if( index + repeat >= retval_length )
                  {
                  retval_length <<= 1;
!                 retval = static_cast<char *>(xrealloc(retval, retval_length));
                  }
  
              while(repeat--)
*************** expand_picture(const char *picture)
*** 3917,3923 ****
              if( index >= retval_length )
                  {
                  retval_length <<= 1;
!                 retval = (char *)xrealloc(retval, retval_length);
                  }
              retval[index++] = ch;
              }
--- 3921,3927 ----
              if( index >= retval_length )
                  {
                  retval_length <<= 1;
!                 retval = static_cast<char *>(xrealloc(retval, retval_length));
                  }
              retval[index++] = ch;
              }
*************** expand_picture(const char *picture)
*** 3926,3932 ****
      if( index >= retval_length )
          {
          retval_length <<= 1;
!         retval = (char *)xrealloc(retval, retval_length);
          }
      retval[index++] = '\0';
  
--- 3930,3936 ----
      if( index >= retval_length )
          {
          retval_length <<= 1;
!         retval = static_cast<char *>(xrealloc(retval, retval_length));
          }
      retval[index++] = '\0';
  
*************** expand_picture(const char *picture)
*** 3949,3955 ****
                  {
                  pcurrency[i] = 'B';
                  }
-             dest_length += sign_length;
              }
          }
  
--- 3953,3958 ----
*************** symbol_program_callables( size_t program
*** 4180,4186 ****
      if( e->type != SymLabel ) continue;
      if( e->elem.label.type != LblProgram ) continue;
  
!     auto prog = cbl_label_of(e);
      if( program == symbol_index(e) && !prog->recursive ) continue;
  
      if( (self->parent == prog->parent && prog->common) ||
--- 4183,4189 ----
      if( e->type != SymLabel ) continue;
      if( e->elem.label.type != LblProgram ) continue;
  
!     const auto prog = cbl_label_of(e);
      if( program == symbol_index(e) && !prog->recursive ) continue;
  
      if( (self->parent == prog->parent && prog->common) ||
*************** symbol_program_local( const char tgt_nam
*** 4214,4219 ****
--- 4217,4223 ----
   */
  std::map<char, const char *> currencies;
  
+ // cppcheck-suppress-begin [nullPointerRedundantCheck]
  bool
  symbol_currency_add( const char symbol[], const char sign[] ) {
    // In service of CURRENCY sign PICTURE SYMBOL symbol
*************** symbol_currency_add( const char symbol[]
*** 4225,4230 ****
--- 4229,4235 ----
    currencies[*symbol] = sign;
    return true;
  }
+ // cppcheck-suppress-end [nullPointerRedundantCheck]
  
  const char *
  symbol_currency( char sign ) {
*************** bool decimal_is_comma() { return decimal
*** 4247,4270 ****
  /*
   * A cbl_occurs_key_t is part of a field definition, and comprises
   * size_t symbol indexes.  A cbl_key_t is a list of field pointers,
!  * and can be created ad hoc to describe a sort. We can construct a
   * cbl_key_t from cbl_occurs_key_t.
   */
  cbl_key_t::
  cbl_key_t( const cbl_occurs_key_t& that )
    : ascending(that.ascending)
  {
!   if( that.field_list.nfield == 0 ) {
!     *this = cbl_key_t();
!     return;
!   }
! 
!   nfield = that.field_list.nfield;
!   fields = static_cast<cbl_field_t**>( xcalloc(nfield,
!                                                    sizeof(*fields)) );
!   for( size_t i=0; i < that.field_list.nfield; i++ ) {
!     fields[i] = cbl_field_of(symbol_at(that.field_list.fields[i]));
!   }
  }
  
  void
--- 4252,4270 ----
  /*
   * A cbl_occurs_key_t is part of a field definition, and comprises
   * size_t symbol indexes.  A cbl_key_t is a list of field pointers,
!  * and can be created ad hoc to describe a sort. We construct a
   * cbl_key_t from cbl_occurs_key_t.
   */
  cbl_key_t::
  cbl_key_t( const cbl_occurs_key_t& that )
    : ascending(that.ascending)
  {
!   std::transform( that.field_list.fields,
!                   that.field_list.fields + that.field_list.nfield,
!                   std::back_inserter(fields),
!                   []( size_t isym ) {
!                     return cbl_field_of(symbol_at(isym));
!                   } );
  }
  
  void
*************** cbl_occurs_t::key_alloc( bool ascending
*** 4277,4283 ****
  }
  
  void
! cbl_occurs_t::field_add( cbl_field_list_t& field_list, cbl_field_t *field ) {
    cbl_field_list_t list = field_list;
    size_t ifield = field_index(field);
    auto nbytes = sizeof(list.fields[0]) * (list.nfield + 1);
--- 4277,4283 ----
  }
  
  void
! cbl_occurs_t::field_add( cbl_field_list_t& field_list, const cbl_field_t *field ) {
    cbl_field_list_t list = field_list;
    size_t ifield = field_index(field);
    auto nbytes = sizeof(list.fields[0]) * (list.nfield + 1);
*************** cbl_occurs_t::key_field_add( cbl_field_t
*** 4295,4308 ****
  }
  
  void
! cbl_occurs_t::index_add( cbl_field_t *field ) {
    field_add(indexes, field);
  }
  
  class is_field_at {
    cbl_field_t *field;
   public:
!  is_field_at( cbl_field_t *field ) : field(field) {}
    bool operator()( size_t isym ) const  {
      return field == field_at(isym);
    }
--- 4295,4308 ----
  }
  
  void
! cbl_occurs_t::index_add( const cbl_field_t *field ) {
    field_add(indexes, field);
  }
  
  class is_field_at {
    cbl_field_t *field;
   public:
!  explicit is_field_at( cbl_field_t *field ) : field(field) {}
    bool operator()( size_t isym ) const  {
      return field == field_at(isym);
    }
*************** cbl_file_key_t::deforward( size_t ifile
*** 4470,4480 ****
    const auto file = cbl_file_of(symbol_at(ifile));
    std::transform( fields, fields + nfield, fields,
                    [ifile, file]( size_t fwd ) {
-                     static std::map<size_t, int> keys;
                      auto ifield = symbol_forward_to(fwd);
                      const auto field = cbl_field_of(symbol_at(ifield));
  
                      if( is_forward(field) && yydebug ) {
                        dbgmsg("%s:%d: key %d: #" HOST_SIZE_T_PRINT_UNSIGNED " %s of %s is %s",
                              "deforward", __LINE__,
                              keys[ifile]++, (fmt_size_t)ifield, field->name, file->name,
--- 4470,4480 ----
    const auto file = cbl_file_of(symbol_at(ifile));
    std::transform( fields, fields + nfield, fields,
                    [ifile, file]( size_t fwd ) {
                      auto ifield = symbol_forward_to(fwd);
                      const auto field = cbl_field_of(symbol_at(ifield));
  
                      if( is_forward(field) && yydebug ) {
+                       static std::map<size_t, int> keys;
                        dbgmsg("%s:%d: key %d: #" HOST_SIZE_T_PRINT_UNSIGNED " %s of %s is %s",
                              "deforward", __LINE__,
                              keys[ifile]++, (fmt_size_t)ifield, field->name, file->name,
*************** cbl_file_t::deforward() {
*** 4561,4587 ****
  
  char *
  cbl_file_t::keys_str() const {
!   std::vector <char *> ks(nkey);
!   std::transform(keys, keys + nkey, ks.begin(),
!                  []( const cbl_file_key_t& key ) {
!                    return key.str();
!                  } );
!   size_t n = 4 * nkey + std::accumulate(ks.begin(), ks.end(), 0,
!                                         []( int n, const char *s ) {
!                                           return n +  strlen(s);
!                                         } );
!   char *output = static_cast<char*>( xcalloc(1, n) ), *p = output;
!   const char *sep = "";
! 
!   *p++ = '[';
!   for( auto k : ks ) {
!     p = stpcpy(p, sep);
!     p = stpcpy(p, k);
!     sep = ", ";
!     free(k);
    }
!   *p++ = ']';
!   return output;
  }
  
  /*
--- 4561,4572 ----
  
  char *
  cbl_file_t::keys_str() const {
!   std::string names = "[";
!   for( cbl_file_key_t *p = keys;  p < keys + nkey; p++ ) {
!     names += p->str();
!     names += p + 1 < keys + nkey ? "," : "]";
    }
!   return xasprintf("%s", names.c_str());
  }
  
  /*
*************** cbl_file_status_cmp( const void *K, cons
*** 4643,4649 ****
  static long
  file_status_status_of( file_status_t status ) {
    size_t n = COUNT_OF(file_status_fields);
!   file_status_field_t *fs, key { status };
  
    fs = (file_status_field_t*)lfind( &key, file_status_fields,
                                      &n, sizeof(*fs), cbl_file_status_cmp );
--- 4628,4634 ----
  static long
  file_status_status_of( file_status_t status ) {
    size_t n = COUNT_OF(file_status_fields);
!   const file_status_field_t *fs, key { status };
  
    fs = (file_status_field_t*)lfind( &key, file_status_fields,
                                      &n, sizeof(*fs), cbl_file_status_cmp );
*************** ast_file_status_between( file_status_t l
*** 4673,4679 ****
  }
  
  bool
! is_register_field(cbl_field_t *field)
    {
    // TRUE when the field is an executable-level global variable of the type we
    // are calling a "register", like RETURN-CODE or UPSI or the like:
--- 4658,4664 ----
  }
  
  bool
! is_register_field(const cbl_field_t *field)
    {
    // TRUE when the field is an executable-level global variable of the type we
    // are calling a "register", like RETURN-CODE or UPSI or the like:
diff -Nrcpad gcc-16-20250615/gcc/cobol/symbols.h gcc-16-20250622/gcc/cobol/symbols.h
*** gcc-16-20250615/gcc/cobol/symbols.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/symbols.h	Sun Jun 22 22:32:19 2025
*************** is_numeric( cbl_field_type_t type ) {
*** 131,143 ****
    case FldIndex:
      return true;
    }
!   yywarn( "%s:%d: invalid symbol_type_t %d", __func__, __LINE__, type );
    return false;
  }
  
  struct os_locale_t {
    char assumed[16];
!   char *codeset;
  };
  
  const char * cbl_field_attr_str( cbl_field_attr_t attr );
--- 131,143 ----
    case FldIndex:
      return true;
    }
!   cbl_internal_error( "%s:%d: invalid %<symbol_type_t%> %d", __func__, __LINE__, type );
    return false;
  }
  
  struct os_locale_t {
    char assumed[16];
!   const char *codeset;
  };
  
  const char * cbl_field_attr_str( cbl_field_attr_t attr );
*************** struct cbl_field_data_t {
*** 264,270 ****
      explicit etc_t( tree v = build_zero_cst (float128_type_node)) : value(v) {}
    } etc;
  
!   cbl_field_data_t( uint32_t memsize=0,  uint32_t capacity=0 )
      : memsize(memsize)
      , capacity(capacity)
      , digits(0)
--- 264,281 ----
      explicit etc_t( tree v = build_zero_cst (float128_type_node)) : value(v) {}
    } etc;
  
!   cbl_field_data_t()
!     : memsize(0)
!     , capacity(0)
!     , digits(0)
!     , rdigits(0)
!     , initial(0)
!     , picture(0)
!     , etc_type(value_e)
!     , etc()
!   {}
! 
!   cbl_field_data_t( uint32_t memsize,  uint32_t capacity )
      : memsize(memsize)
      , capacity(capacity)
      , digits(0)
*************** struct cbl_field_data_t {
*** 327,332 ****
--- 338,347 ----
      etc_type = value_e;
      return etc.value = v;
    } 
+   tree& operator=(int i) {
+     etc_type = value_e;
+     return etc.value = build_int_cst_type(integer_type_node, i);
+   } 
  
    void set_real_from_capacity( REAL_VALUE_TYPE *r ) const {
      real_from_integer (r, VOIDmode, capacity, SIGNED);
*************** struct cbl_occurs_bounds_t {
*** 412,419 ****
    // variable size table.  lower can be zero.
    size_t lower, upper;
  
!   cbl_occurs_bounds_t(size_t lower=0, size_t upper=0)
      : lower(lower), upper(upper) {}
    size_t ntimes() const {
      return upper;
    }
--- 427,437 ----
    // variable size table.  lower can be zero.
    size_t lower, upper;
  
!   cbl_occurs_bounds_t()
!     : lower(0), upper(0) {}
!   explicit cbl_occurs_bounds_t(size_t lower, size_t upper=0)
      : lower(lower), upper(upper) {}
+ 
    size_t ntimes() const {
      return upper;
    }
*************** struct cbl_occurs_t {
*** 446,457 ****
  
    void key_alloc( bool ascending );
    void key_field_add( cbl_field_t *field );
!   void index_add( cbl_field_t *field );
    cbl_occurs_key_t * key_of( cbl_field_t *field );
    bool subscript_ok( const cbl_field_t *subscript ) const;
  
  protected:
!   void field_add( cbl_field_list_t& fields, cbl_field_t *field );
  };
  
  /*
--- 464,475 ----
  
    void key_alloc( bool ascending );
    void key_field_add( cbl_field_t *field );
!   void index_add( const cbl_field_t *field );
    cbl_occurs_key_t * key_of( cbl_field_t *field );
    bool subscript_ok( const cbl_field_t *subscript ) const;
  
  protected:
!   void field_add( cbl_field_list_t& fields, const cbl_field_t *field );
  };
  
  /*
*************** struct cbl_refer_t {
*** 655,704 ****
    cbl_field_t *field;
    cbl_label_t *prog_func;
    bool all, addr_of;
!   uint32_t nsubscript;
!   cbl_refer_t *subscripts;  // indices
    cbl_span_t refmod;        // substring bounds
  
    cbl_refer_t()
      : loc(), field(NULL), prog_func(NULL)
      , all(NULL), addr_of(false)
!     , nsubscript(0), subscripts(NULL), refmod(NULL)
    {}
    cbl_refer_t( cbl_field_t *field, bool all = false )
      : loc(), field(field), prog_func(NULL)
      , all(all), addr_of(false)
!     , nsubscript(0), subscripts(NULL), refmod(NULL)
    {}
    cbl_refer_t( const YYLTYPE& loc, cbl_field_t *field, bool all = false )
      : loc(loc), field(field), prog_func(NULL)
      , all(all), addr_of(false)
!     , nsubscript(0), subscripts(NULL), refmod(NULL)
    {}
    cbl_refer_t( cbl_field_t *field, cbl_span_t& refmod )
      : loc(), field(field), prog_func(NULL)
      , all(false), addr_of(false)
!     , nsubscript(0), subscripts(NULL), refmod(refmod)
    {}
    cbl_refer_t( cbl_field_t *field,
!                size_t nsubscript, cbl_refer_t *subscripts,
                 cbl_span_t refmod = cbl_span_t(NULL) )
      : loc(), field(field), prog_func(NULL)
      , all(false), addr_of(false)
!     , nsubscript(nsubscript) , subscripts( new cbl_refer_t[nsubscript] )
      , refmod(refmod)
!   {
!     std::copy(subscripts, subscripts + nsubscript, this->subscripts);
!   }
    explicit cbl_refer_t( cbl_label_t *prog_func, bool addr_of = true )
      : loc(), field(NULL), prog_func(prog_func)
      , all(false), addr_of(addr_of)
!     , nsubscript(0), subscripts(NULL), refmod(cbl_span_t(NULL))
    {}
  
    cbl_refer_t duplicate() const {
!     return cbl_refer_t( field, nsubscript, subscripts, refmod );
    }
  
    static cbl_refer_t *empty();
  
    cbl_refer_t * name( const char name[] ) {
--- 673,736 ----
    cbl_field_t *field;
    cbl_label_t *prog_func;
    bool all, addr_of;
!   std::vector<cbl_refer_t> subscripts;  // indices
    cbl_span_t refmod;        // substring bounds
  
    cbl_refer_t()
      : loc(), field(NULL), prog_func(NULL)
      , all(NULL), addr_of(false)
!     , refmod(NULL)
    {}
+   // cppcheck-suppress noExplicitConstructor
    cbl_refer_t( cbl_field_t *field, bool all = false )
      : loc(), field(field), prog_func(NULL)
      , all(all), addr_of(false)
!     , refmod(NULL)
    {}
    cbl_refer_t( const YYLTYPE& loc, cbl_field_t *field, bool all = false )
      : loc(loc), field(field), prog_func(NULL)
      , all(all), addr_of(false)
!     , refmod(NULL)
    {}
    cbl_refer_t( cbl_field_t *field, cbl_span_t& refmod )
      : loc(), field(field), prog_func(NULL)
      , all(false), addr_of(false)
!     , refmod(refmod)
    {}
    cbl_refer_t( cbl_field_t *field,
!                const std::vector<cbl_refer_t>& subscripts,
                 cbl_span_t refmod = cbl_span_t(NULL) )
      : loc(), field(field), prog_func(NULL)
      , all(false), addr_of(false)
!     , subscripts(subscripts)
      , refmod(refmod)
!   {}
    explicit cbl_refer_t( cbl_label_t *prog_func, bool addr_of = true )
      : loc(), field(NULL), prog_func(prog_func)
      , all(false), addr_of(addr_of)
!     , refmod(cbl_span_t(NULL))
    {}
  
+   cbl_refer_t( const cbl_refer_t& that ) = default;
+ 
+   cbl_refer_t& operator=( const cbl_refer_t& that ) {
+     loc = that.loc;
+     field = that.field;
+     prog_func = that.prog_func;
+     all = that.all;
+     addr_of = that.addr_of;
+     subscripts = that.subscripts;
+     refmod = that.refmod;
+     return *this;
+   }
+     
+   
    cbl_refer_t duplicate() const {
!     return cbl_refer_t( field, subscripts, refmod );
    }
  
+   uint32_t nsubscript() const { return subscripts.size(); }
+ 
    static cbl_refer_t *empty();
  
    cbl_refer_t * name( const char name[] ) {
*************** struct cbl_refer_t {
*** 709,716 ****
    }
  
    bool is_pointer() const { return addr_of || field->type == FldPointer; }
!   bool is_reference() const { return nsubscript > 0 || refmod.is_active(); }
!   bool is_table_reference() const  { return nsubscript > 0; }
    bool is_refmod_reference() const  { return refmod.is_active(); }
  
    size_t subscripts_set( const std::list<cbl_refer_t>& subs );
--- 741,748 ----
    }
  
    bool is_pointer() const { return addr_of || field->type == FldPointer; }
!   bool is_reference() const { return nsubscript() > 0 || refmod.is_active(); }
!   bool is_table_reference() const  { return nsubscript() > 0; }
    bool is_refmod_reference() const  { return refmod.is_active(); }
  
    size_t subscripts_set( const std::list<cbl_refer_t>& subs );
*************** struct field_key_t {
*** 775,781 ****
    }
  };
  
! bool valid_move( const struct cbl_field_t *tgt, const struct cbl_field_t *src );
  
  #define record_area_name_stem "_ra_"
  
--- 807,813 ----
    }
  };
  
! bool valid_move( const cbl_field_t *tgt, const cbl_field_t *src );
  
  #define record_area_name_stem "_ra_"
  
*************** is_record_area( const cbl_field_t *field
*** 785,792 ****
    return 0 == memcmp(field->name, stem, sizeof(stem)-1);
  }
  
! bool
! is_register_field(cbl_field_t *field);
  
  static inline bool
  is_constant( const cbl_field_t *field ) {
--- 817,823 ----
    return 0 == memcmp(field->name, stem, sizeof(stem)-1);
  }
  
! bool is_register_field( const cbl_field_t *field );
  
  static inline bool
  is_constant( const cbl_field_t *field ) {
*************** symbol_field_type_update( cbl_field_t *f
*** 804,820 ****
                            cbl_field_type_t type, bool is_usage );
  
  struct sort_key_t;
  
  struct cbl_key_t {
    bool ascending;
!   size_t nfield;
!   cbl_field_t **fields;
  
!   cbl_key_t() : ascending(false), nfield(0), fields(0) {}
!   cbl_key_t( size_t nfield, cbl_field_t **fields, bool ascending = true )
!     : ascending(ascending), nfield(nfield), fields(fields) {}
!   cbl_key_t( const sort_key_t& src );
    explicit cbl_key_t( const cbl_occurs_key_t& that );
  };
  
  enum cbl_label_type_t {
--- 835,854 ----
                            cbl_field_type_t type, bool is_usage );
  
  struct sort_key_t;
+ struct sort_key_t;
  
  struct cbl_key_t {
    bool ascending;
!   std::vector<const cbl_field_t*> fields;
  
!   cbl_key_t() : ascending(true) {}
!   explicit cbl_key_t( sort_key_t src );
    explicit cbl_key_t( const cbl_occurs_key_t& that );
+   cbl_key_t( size_t nfield, cbl_field_t **fields, bool ascending = true )
+     : ascending(ascending)
+     , fields(fields, fields + nfield)
+   {}
+   cbl_key_t& operator=( const sort_key_t& that );
  };
  
  enum cbl_label_type_t {
*************** struct cbl_substitute_t {
*** 911,918 ****
    subst_fl_t first_last;
    cbl_refer_t orig, replacement;
  
!   cbl_substitute_t( bool anycase = false, char first_last = 0,
!                     cbl_refer_t *orig = NULL, cbl_refer_t *replacement = NULL )
      : anycase(anycase)
      , first_last(subst_fl_t(first_last))
      , orig( orig? *orig : cbl_refer_t() )
--- 945,956 ----
    subst_fl_t first_last;
    cbl_refer_t orig, replacement;
  
!   cbl_substitute_t()
!     : anycase(false)
!     , first_last(subst_all_e)
!   {}
!   cbl_substitute_t( bool anycase, char first_last,
!                     cbl_refer_t *orig, cbl_refer_t *replacement )
      : anycase(anycase)
      , first_last(subst_fl_t(first_last))
      , orig( orig? *orig : cbl_refer_t() )
*************** struct cbl_num_result_t {
*** 945,951 ****
    enum cbl_round_t rounded;
    struct cbl_refer_t refer;
  
!   static cbl_refer_t refer_of( const cbl_num_result_t& res ) { return res.refer; }
  };
  
  void parser_symbol_add( struct cbl_field_t *new_var );
--- 983,992 ----
    enum cbl_round_t rounded;
    struct cbl_refer_t refer;
  
!   static const cbl_refer_t&
!   refer_of( const cbl_num_result_t& res ) {
!     return res.refer;
!   }
  };
  
  void parser_symbol_add( struct cbl_field_t *new_var );
*************** struct cbl_ffi_arg_t {
*** 957,964 ****
    cbl_ffi_arg_attr_t attr;
    cbl_refer_t refer; // refer::field == NULL is OMITTED
  
!   cbl_ffi_arg_t( cbl_refer_t* refer = NULL,
!                  cbl_ffi_arg_attr_t attr = none_of_e );
    cbl_ffi_arg_t( cbl_ffi_crv_t crv,
                   cbl_refer_t* refer,
                   cbl_ffi_arg_attr_t attr = none_of_e );
--- 998,1006 ----
    cbl_ffi_arg_attr_t attr;
    cbl_refer_t refer; // refer::field == NULL is OMITTED
  
!   cbl_ffi_arg_t();
!   cbl_ffi_arg_t( cbl_refer_t* refer,
!                  cbl_ffi_arg_attr_t attr );
    cbl_ffi_arg_t( cbl_ffi_crv_t crv,
                   cbl_refer_t* refer,
                   cbl_ffi_arg_attr_t attr = none_of_e );
*************** class temporaries_t {
*** 1171,1178 ****
    struct literal_an {
      bool is_quoted;
      std::string value;
!     literal_an( const char value[] = "???", bool is_quoted = false )
        : is_quoted(is_quoted), value(value) {}
      literal_an& operator=( const literal_an& that ) {
        is_quoted = that.is_quoted;
        value = that.value;
--- 1213,1223 ----
    struct literal_an {
      bool is_quoted;
      std::string value;
!     literal_an() : is_quoted(false), value("???") {}
!     literal_an( const char value[], bool is_quoted )
        : is_quoted(is_quoted), value(value) {}
+     literal_an( const literal_an& that )
+       : is_quoted(that.is_quoted), value(that.value) {}
      literal_an& operator=( const literal_an& that ) {
        is_quoted = that.is_quoted;
        value = that.value;
*************** struct cbl_alphabet_t {
*** 1452,1458 ****
    }
  
    void dump() const {
!     yywarn("'%s': %s, '%c' to '%c' (low 0x%02x, high 0x%02x)",
            name, encoding_str(encoding),
            low_index, last_index, low_index, high_index);
      if( encoding == custom_encoding_e ) {
--- 1497,1503 ----
    }
  
    void dump() const {
!     yywarn("%qs: %s, %<%c%> to %<%c%> (low 0x%x, high 0x%x)",
            name, encoding_str(encoding),
            low_index, last_index, low_index, high_index);
      if( encoding == custom_encoding_e ) {
*************** struct cbl_file_key_t {
*** 1513,1521 ****
    cbl_name_t name;
    size_t leftmost; // START or READ named leftmost field in key
    size_t nfield;
!   size_t *fields;
  
!   cbl_file_key_t( size_t field = 0, bool unique = true )
      : unique(unique)
      , leftmost(0)
      , nfield(1)
--- 1558,1576 ----
    cbl_name_t name;
    size_t leftmost; // START or READ named leftmost field in key
    size_t nfield;
!   size_t *fields; // cppcheck-suppress unsafeClassCanLeak
  
!   cbl_file_key_t()
!     : unique(true)
!     , leftmost(0)
!     , nfield(0)
!     , fields(nullptr)
!   {
!     memset(name, '\0', sizeof(name));
!   }
! 
!   // Construct a key of length 1 having a single field. 
!   explicit cbl_file_key_t( size_t field, bool unique = true )
      : unique(unique)
      , leftmost(0)
      , nfield(1)
*************** struct cbl_file_key_t {
*** 1529,1534 ****
--- 1584,1612 ----
                    const std::list<cbl_field_t *>& fields,
                    bool is_unique );
  
+   // The copy constructor and assignment operator exist to quell reports from
+   // cppcheck. When these objects are copied, the copy still points to the
+   // original data.
+   cbl_file_key_t( const cbl_file_key_t& that )
+     : unique(that.unique)
+     , leftmost(that.leftmost)
+     , nfield(that.nfield)
+       // cppcheck-suppress copyCtorPointerCopying
+     , fields(that.fields)
+   {
+     strcpy(name, that.name);
+   }
+   ~cbl_file_key_t() {}
+   cbl_file_key_t& operator=( const cbl_file_key_t& that ) {
+     unique = that.unique;
+     leftmost = that.leftmost;
+     nfield = that.nfield;
+     // cppcheck-suppress copyCtorPointerCopying
+     fields = that.fields;
+     strcpy(name, that.name);
+     return *this;
+   }
+ 
    uint32_t size();
    void deforward( size_t ifile );
    char * str() const;
*************** struct cbl_file_key_t {
*** 1542,1553 ****
  struct cbl_file_lock_t {
    bool multiple;
    enum lock_mode_t { unlocked_e, manual_e, record_e, automatic_e } mode;
    bool mode_set( int token );
    bool locked() const { return mode != unlocked_e; }
  };
  
  struct cbl_file_t {
-   static cbl_file_key_t no_key;
    enum cbl_file_org_t org;
    enum file_entry_type_t entry_type;
    uint32_t attr;
--- 1620,1631 ----
  struct cbl_file_lock_t {
    bool multiple;
    enum lock_mode_t { unlocked_e, manual_e, record_e, automatic_e } mode;
+   cbl_file_lock_t() : multiple(false), mode(unlocked_e) {}
    bool mode_set( int token );
    bool locked() const { return mode != unlocked_e; }
  };
  
  struct cbl_file_t {
    enum cbl_file_org_t org;
    enum file_entry_type_t entry_type;
    uint32_t attr;
*************** struct cbl_file_t {
*** 1574,1588 ****
    tree var_decl_node;           // GENERIC tag for the run-time FIELD structure
  
    cbl_file_t()
!     : org(file_disorganized_e),
!       access(file_access_seq_e)
    {
!     keys = &no_key;
    }
    
    bool varies() const { return varying_size.min != varying_size.max; }
    bool validate() const;
    void deforward();
    char * keys_str() const;
    int  key_one( cbl_field_t *field ) const {
      auto ekey = keys + nkey, p = ekey;
--- 1652,1683 ----
    tree var_decl_node;           // GENERIC tag for the run-time FIELD structure
  
    cbl_file_t()
!     : org(file_disorganized_e)
!     , entry_type(fd_e)
!     , attr(0), reserve(0), same_record_as(0)
!     , padding('\0')
!     , optional(false)
!     , varying_size{ false, 0, 0 }
!     , access(file_access_seq_e)
!     , filename(0)
!     , default_record(0)
!     , nkey(0)
!     , keys(nullptr)
!     , password(0), user_status(0), vsam_status(0), record_length(0)
!     , line(0)
!     , addresses(nullptr)
!     , var_decl_node(nullptr)
    {
!     memset(name, '\0', sizeof(name));
    }
    
    bool varies() const { return varying_size.min != varying_size.max; }
    bool validate() const;
    void deforward();
+   cbl_file_key_t * keys_update( cbl_file_key_t * keys ) {
+     if( this->keys ) delete[] this->keys;
+     return this->keys = keys;
+   }
    char * keys_str() const;
    int  key_one( cbl_field_t *field ) const {
      auto ekey = keys + nkey, p = ekey;
*************** struct symbol_elem_t {
*** 1630,1636 ****
      symbol_elem_u() : field() {}
    } elem;
    
!   symbol_elem_t( symbol_type_t type = SymField, size_t program = 0 )
      : type(type), program(program)
    {}
  
--- 1725,1732 ----
      symbol_elem_u() : field() {}
    } elem;
    
!   symbol_elem_t() : type(SymField), program(0) {}
!   explicit symbol_elem_t( symbol_type_t type, size_t program = 0 )
      : type(type), program(program)
    {}
  
*************** static inline symbol_elem_t *
*** 1700,1705 ****
--- 1796,1802 ----
  symbol_elem_of( cbl_label_t *label ) {
    size_t n = offsetof(struct symbol_elem_t, elem.label);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<struct symbol_elem_t *>((char*)label - n);
  }
  
*************** static inline const symbol_elem_t *
*** 1707,1712 ****
--- 1804,1810 ----
  symbol_elem_of( const cbl_label_t *label ) {
    size_t n = offsetof(symbol_elem_t, elem.label);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<const symbol_elem_t *>((const char*)label - n);
  }
  
*************** static inline symbol_elem_t *
*** 1714,1719 ****
--- 1812,1818 ----
  symbol_elem_of( cbl_special_name_t *special ) {
    size_t n = offsetof(symbol_elem_t, elem.special);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<symbol_elem_t *>((char*)special - n);
  }
  
*************** static inline symbol_elem_t *
*** 1721,1726 ****
--- 1820,1826 ----
  symbol_elem_of( cbl_alphabet_t *alphabet ) {
    size_t n = offsetof(symbol_elem_t, elem.alphabet);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<symbol_elem_t *>((char*)alphabet - n);
  }
  
*************** static inline symbol_elem_t *
*** 1728,1739 ****
--- 1828,1841 ----
  symbol_elem_of( cbl_file_t *file ) {
    size_t n = offsetof(struct symbol_elem_t, elem.file);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<struct symbol_elem_t *>((char*)file - n);
  }
  static inline const symbol_elem_t *
  symbol_elem_of( const cbl_file_t *file ) {
    size_t n = offsetof(symbol_elem_t, elem.file);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<const symbol_elem_t *>((const char*)file - n);
  }
  
*************** static inline symbol_elem_t *
*** 1741,1758 ****
  symbol_elem_of( cbl_field_t *field ) {
    size_t n = offsetof(struct symbol_elem_t, elem.field);
    return
      reinterpret_cast<struct symbol_elem_t *>((char*)field - n);
  }
  static inline const symbol_elem_t *
  symbol_elem_of( const cbl_field_t *field ) {
    size_t n = offsetof(symbol_elem_t, elem.field);
    return
      reinterpret_cast<const symbol_elem_t *>((const char*)field - n);
  }
  
  symbol_elem_t * symbols_begin( size_t first = 0 );
  symbol_elem_t * symbols_end(void);
! cbl_field_t   * symbol_redefines( const struct cbl_field_t *field );
  
  void build_symbol_map();
  bool update_symbol_map( symbol_elem_t *e );
--- 1843,1862 ----
  symbol_elem_of( cbl_field_t *field ) {
    size_t n = offsetof(struct symbol_elem_t, elem.field);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<struct symbol_elem_t *>((char*)field - n);
  }
  static inline const symbol_elem_t *
  symbol_elem_of( const cbl_field_t *field ) {
    size_t n = offsetof(symbol_elem_t, elem.field);
    return
+     // cppcheck-suppress cstyleCast
      reinterpret_cast<const symbol_elem_t *>((const char*)field - n);
  }
  
  symbol_elem_t * symbols_begin( size_t first = 0 );
  symbol_elem_t * symbols_end(void);
! cbl_field_t   * symbol_redefines( const cbl_field_t *field );
  
  void build_symbol_map();
  bool update_symbol_map( symbol_elem_t *e );
*************** symbol_find( size_t program, std::list<c
*** 1768,1774 ****
  symbol_elem_t * symbol_find_of( size_t program,
                                  std::list<const char *> names, size_t group );
  
! struct cbl_field_t *symbol_find_odo( cbl_field_t * field );
  size_t dimensions( const cbl_field_t *field );
  
  const symbol_elem_t * symbol_field_current_record();
--- 1872,1878 ----
  symbol_elem_t * symbol_find_of( size_t program,
                                  std::list<const char *> names, size_t group );
  
! struct cbl_field_t *symbol_find_odo( const cbl_field_t * field );
  size_t dimensions( const cbl_field_t *field );
  
  const symbol_elem_t * symbol_field_current_record();
*************** bool redefine_field( cbl_field_t *field
*** 1792,1845 ****
  
  static inline struct cbl_section_t *
  cbl_section_of( struct symbol_elem_t *e ) {
!   assert(e->type == SymDataSection);
    return &e->elem.section;
  }
  
  static inline struct cbl_field_t *
  cbl_field_of( struct symbol_elem_t *e ) {
!   assert(e->type == SymField);
    return &e->elem.field;
  }
! static inline const struct cbl_field_t *
! cbl_field_of( const struct symbol_elem_t *e ) {
!   assert(e->type == SymField);
    return &e->elem.field;
  }
  
  static inline struct cbl_label_t *
  cbl_label_of( struct symbol_elem_t *e ) {
!   assert(e->type == SymLabel);
    return &e->elem.label;
  }
  
! static inline const struct cbl_label_t *
! cbl_label_of( const struct symbol_elem_t *e ) {
!   assert(e->type == SymLabel);
    return &e->elem.label;
  }
  
  static inline struct cbl_special_name_t *
  cbl_special_name_of( struct symbol_elem_t *e ) {
!   assert(e->type == SymSpecial);
    return &e->elem.special;
  }
  
  static inline struct cbl_alphabet_t *
  cbl_alphabet_of( struct symbol_elem_t *e ) {
!   assert(e->type == SymAlphabet);
    return &e->elem.alphabet;
  }
  
  static inline struct cbl_file_t *
  cbl_file_of( struct symbol_elem_t *e ) {
!   assert(e->type == SymFile);
    return &e->elem.file;
  }
  
! static inline const struct cbl_file_t *
! cbl_file_of( const struct symbol_elem_t *e ) {
!   assert(e->type == SymFile);
    return &e->elem.file;
  }
  
--- 1896,1949 ----
  
  static inline struct cbl_section_t *
  cbl_section_of( struct symbol_elem_t *e ) {
!   assert(e && e->type == SymDataSection);
    return &e->elem.section;
  }
  
  static inline struct cbl_field_t *
  cbl_field_of( struct symbol_elem_t *e ) {
!   assert(e && e->type == SymField);
    return &e->elem.field;
  }
! static inline const cbl_field_t *
! cbl_field_of( const symbol_elem_t *e ) {
!   assert(e && e->type == SymField);
    return &e->elem.field;
  }
  
  static inline struct cbl_label_t *
  cbl_label_of( struct symbol_elem_t *e ) {
!   assert(e && e->type == SymLabel);
    return &e->elem.label;
  }
  
! static inline const cbl_label_t *
! cbl_label_of( const symbol_elem_t *e ) {
!   assert(e && e->type == SymLabel);
    return &e->elem.label;
  }
  
  static inline struct cbl_special_name_t *
  cbl_special_name_of( struct symbol_elem_t *e ) {
!   assert(e && e->type == SymSpecial);
    return &e->elem.special;
  }
  
  static inline struct cbl_alphabet_t *
  cbl_alphabet_of( struct symbol_elem_t *e ) {
!   assert(e && e->type == SymAlphabet);
    return &e->elem.alphabet;
  }
  
  static inline struct cbl_file_t *
  cbl_file_of( struct symbol_elem_t *e ) {
!   assert(e && e->type == SymFile);
    return &e->elem.file;
  }
  
! static inline const cbl_file_t *
! cbl_file_of( const symbol_elem_t *e ) {
!   assert(e && e->type == SymFile);
    return &e->elem.file;
  }
  
*************** is_procedure( const symbol_elem_t& e ) {
*** 1858,1900 ****
  }
  
  static inline bool
! is_figconst(const struct cbl_field_t *field ) {
!     return ((field->attr & FIGCONST_MASK) != 0 );
  }
  
  static inline bool
! is_figconst_low( const struct cbl_field_t *field ) {
!   return ((field->attr & FIGCONST_MASK) == low_value_e );
  }
  
  static inline bool
! is_figconst_zero( const struct cbl_field_t *field ) {
!   return ((field->attr & FIGCONST_MASK) == zero_value_e );
  }
  
  static inline bool
! is_figconst_space( const struct cbl_field_t *field ) {
!   return ((field->attr & FIGCONST_MASK) == space_value_e );
  }
  
  static inline bool
! is_figconst_quote( const struct cbl_field_t *field ) {
!   return ((field->attr & FIGCONST_MASK) == quote_value_e );
  }
  
  static inline bool
! is_figconst_high( const struct cbl_field_t *field ) {
!   return ((field->attr & FIGCONST_MASK) == high_value_e );
  }
  
  static inline bool
! is_space_value( const struct cbl_field_t *field ) {
!   return( (strcmp(field->name, "SPACE") == 0)
!             || (strcmp(field->name, "SPACES") == 0) );
  }
  
  static inline bool
! is_quoted( const struct cbl_field_t *field ) {
    return field->has_attr(quoted_e);
  }
  
--- 1962,2004 ----
  }
  
  static inline bool
! is_figconst(const cbl_field_t *field ) {
!     return (field->attr & FIGCONST_MASK) != 0;
  }
  
  static inline bool
! is_figconst_low( const cbl_field_t *field ) {
!   return (field->attr & FIGCONST_MASK) == low_value_e;
  }
  
  static inline bool
! is_figconst_zero( const cbl_field_t *field ) {
!   return (field->attr & FIGCONST_MASK) == zero_value_e;
  }
  
  static inline bool
! is_figconst_space( const cbl_field_t *field ) {
!   return (field->attr & FIGCONST_MASK) == space_value_e;
  }
  
  static inline bool
! is_figconst_quote( const cbl_field_t *field ) {
!   return (field->attr & FIGCONST_MASK) == quote_value_e;
  }
  
  static inline bool
! is_figconst_high( const cbl_field_t *field ) {
!   return (field->attr & FIGCONST_MASK) == high_value_e;
  }
  
  static inline bool
! is_space_value( const cbl_field_t *field ) {
!   return (strcmp(field->name, "SPACE") == 0)
!       || (strcmp(field->name, "SPACES") == 0);
  }
  
  static inline bool
! is_quoted( const cbl_field_t *field ) {
    return field->has_attr(quoted_e);
  }
  
*************** struct cbl_until_addresses_t {
*** 1922,1928 ****
  };
  
  size_t symbol_index(); // nth after first program symbol
! size_t symbol_index( const struct symbol_elem_t *e );
  struct symbol_elem_t * symbol_at( size_t index );
  
  struct cbl_options_t {
--- 2026,2032 ----
  };
  
  size_t symbol_index(); // nth after first program symbol
! size_t symbol_index( const symbol_elem_t *e );
  struct symbol_elem_t * symbol_at( size_t index );
  
  struct cbl_options_t {
*************** symbol_field_forward_add( size_t program
*** 1974,1990 ****
  struct cbl_field_t * symbol_field_forward( size_t index );
  
  struct cbl_prog_hier_t {
-   size_t nlabel;
    struct program_label_t {
      size_t ordinal;
      cbl_label_t label;
      program_label_t() : ordinal(0), label() {}
!     program_label_t( const symbol_elem_t& e ) {
        ordinal = symbol_index(&e);
        label = e.elem.label;
      }
!   } *labels;
! 
    cbl_prog_hier_t();
  };
  
--- 2078,2097 ----
  struct cbl_field_t * symbol_field_forward( size_t index );
  
  struct cbl_prog_hier_t {
    struct program_label_t {
      size_t ordinal;
      cbl_label_t label;
      program_label_t() : ordinal(0), label() {}
!     // because std::copy_if:
!     // cppcheck-suppress noExplicitConstructor 
!     program_label_t( const symbol_elem_t& e ) { 
!       assert(is_program(e));
        ordinal = symbol_index(&e);
        label = e.elem.label;
      }
!   };
!   std::vector<program_label_t> labels;
!   
    cbl_prog_hier_t();
  };
  
*************** struct cbl_perform_vary_t {
*** 2038,2047 ****
    struct cbl_refer_t  by;       // numeric
    struct cbl_field_t *until;    // FldConditional
  
!   cbl_perform_vary_t( const cbl_refer_t& varying = cbl_refer_t(),
!                       const cbl_refer_t& from = cbl_refer_t(),
!                       const cbl_refer_t& by = cbl_refer_t(),
!                       cbl_field_t *until = NULL )
      : varying(varying)
      , from(from)
      , by(by)
--- 2145,2155 ----
    struct cbl_refer_t  by;       // numeric
    struct cbl_field_t *until;    // FldConditional
  
!   cbl_perform_vary_t() : until(nullptr) {}
!   cbl_perform_vary_t( const cbl_refer_t& varying,
!                       const cbl_refer_t& from,
!                       const cbl_refer_t& by,
!                       cbl_field_t *until )
      : varying(varying)
      , from(from)
      , by(by)
*************** is_literal( const cbl_field_t *field ) {
*** 2063,2074 ****
  }
  
  static inline bool
! is_signable( const struct cbl_field_t *field ) {
    return field->attr & signable_e;
  }
  
  static inline bool
! is_temporary( const struct cbl_field_t *field ) {
    return field->attr & intermediate_e;
  }
  
--- 2171,2182 ----
  }
  
  static inline bool
! is_signable( const cbl_field_t *field ) {
    return field->attr & signable_e;
  }
  
  static inline bool
! is_temporary( const cbl_field_t *field ) {
    return field->attr & intermediate_e;
  }
  
*************** struct symbol_elem_t * symbol_special( s
*** 2203,2209 ****
  struct symbol_elem_t * symbol_alphabet( size_t program, const char name[] );
  
  struct symbol_elem_t * symbol_file( size_t program, const char name[] );
! struct cbl_field_t   * symbol_file_record( struct cbl_file_t *file );
  cbl_file_t::varying_t symbol_file_record_sizes( struct cbl_file_t *file );
  struct cbl_section_t * symbol_section( size_t program,
                                         struct cbl_section_t *section );
--- 2311,2317 ----
  struct symbol_elem_t * symbol_alphabet( size_t program, const char name[] );
  
  struct symbol_elem_t * symbol_file( size_t program, const char name[] );
! struct cbl_field_t   * symbol_file_record( const cbl_file_t *file );
  cbl_file_t::varying_t symbol_file_record_sizes( struct cbl_file_t *file );
  struct cbl_section_t * symbol_section( size_t program,
                                         struct cbl_section_t *section );
*************** size_t symbol_label_id( const cbl_label_
*** 2213,2219 ****
  struct cbl_field_t * parent_of( const cbl_field_t *f );
   const cbl_field_t * occurs_in( const cbl_field_t *f );
  
! cbl_field_t *rename_not_ok( cbl_field_t *first, cbl_field_t *last);
  bool immediately_follows( const cbl_field_t *first );
  bool is_variable_length( const cbl_field_t *field );
  
--- 2321,2327 ----
  struct cbl_field_t * parent_of( const cbl_field_t *f );
   const cbl_field_t * occurs_in( const cbl_field_t *f );
  
! cbl_field_t *rename_not_ok( const cbl_field_t *first, const cbl_field_t *last);
  bool immediately_follows( const cbl_field_t *first );
  bool is_variable_length( const cbl_field_t *field );
  
*************** uint64_t numeric_group_attrs( const cbl_
*** 2226,2232 ****
  static inline struct cbl_field_t *
  field_at( size_t index ) {
    struct symbol_elem_t *e = symbol_at(index);
!   assert(e->type == SymField);
  
    return &e->elem.field;
  }
--- 2334,2340 ----
  static inline struct cbl_field_t *
  field_at( size_t index ) {
    struct symbol_elem_t *e = symbol_at(index);
!   assert(e && e->type == SymField);
  
    return &e->elem.field;
  }
*************** class procref_base_t {
*** 2288,2295 ****
  private:
    const char *section_name, *paragraph_name;
  public:
!   procref_base_t( const char *section_name = NULL,
!                   const char *paragraph_name = NULL )
      : section_name(section_name)
      , paragraph_name(paragraph_name)
    {}
--- 2396,2404 ----
  private:
    const char *section_name, *paragraph_name;
  public:
!   procref_base_t() : section_name(nullptr) , paragraph_name(nullptr) {}
!   procref_base_t( const char *section_name,
!                   const char *paragraph_name )
      : section_name(section_name)
      , paragraph_name(paragraph_name)
    {}
*************** refer_type_str( const cbl_refer_t *r ) {
*** 2356,2362 ****
  
  enum cbl_field_type_t symbol_field_type( size_t program, const char name[] );
  
! struct symbol_elem_t * symbol_parent( const struct symbol_elem_t *e );
  
  int length_of_picture(const char *picture);
  int rdigits_of_picture(const char *picture);
--- 2465,2471 ----
  
  enum cbl_field_type_t symbol_field_type( size_t program, const char name[] );
  
! struct symbol_elem_t * symbol_parent( const symbol_elem_t *e );
  
  int length_of_picture(const char *picture);
  int rdigits_of_picture(const char *picture);
diff -Nrcpad gcc-16-20250615/gcc/cobol/symfind.cc gcc-16-20250622/gcc/cobol/symfind.cc
*** gcc-16-20250615/gcc/cobol/symfind.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/symfind.cc	Sun Jun 22 22:32:19 2025
*************** extern int yydebug;
*** 48,54 ****
  static bool
  is_data_field( symbol_elem_t& e ) {
    if( e.type != SymField ) return false;
!   auto f = cbl_field_of(&e);
    if( f->name[0] == '\0' ) return false;
    if( is_filler(f) ) return false;
  
--- 48,54 ----
  static bool
  is_data_field( symbol_elem_t& e ) {
    if( e.type != SymField ) return false;
!   const auto f = cbl_field_of(&e);
    if( f->name[0] == '\0' ) return false;
    if( is_filler(f) ) return false;
  
*************** finalize_symbol_map2() {
*** 129,135 ****
    for( auto& elem : symbol_map2 ) {
      auto& fields( elem.second );
      fields.remove_if( []( auto isym ) {
! 			auto f = cbl_field_of(symbol_at(isym));
  			return f->type == FldInvalid;
  		      } );
      if( fields.empty() ) empties.insert(elem.first);
--- 129,135 ----
    for( auto& elem : symbol_map2 ) {
      auto& fields( elem.second );
      fields.remove_if( []( auto isym ) {
! 			const auto f = cbl_field_of(symbol_at(isym));
  			return f->type == FldInvalid;
  		      } );
      if( fields.empty() ) empties.insert(elem.first);
*************** class in_scope {
*** 341,347 ****
    size_t program;
  
    static size_t prog_of( size_t program ) {
!     auto L = cbl_label_of(symbol_at(program));
      return L->parent;
    }
  
--- 341,347 ----
    size_t program;
  
    static size_t prog_of( size_t program ) {
!     const auto L = cbl_label_of(symbol_at(program));
      return L->parent;
    }
  
*************** public:
*** 350,356 ****
  
    // A symbol is in scope if it's defined by this program or by an ancestor.
    bool operator()( const symbol_map_t::value_type& item ) const {
!     symbol_elem_t *e = symbol_at(item.second.front());
      for( size_t prog = this->program; prog != 0; prog = prog_of(prog) ) {
        if( e->program == prog ) return true;
      }
--- 350,356 ----
  
    // A symbol is in scope if it's defined by this program or by an ancestor.
    bool operator()( const symbol_map_t::value_type& item ) const {
!     const symbol_elem_t *e = symbol_at(item.second.front());
      for( size_t prog = this->program; prog != 0; prog = prog_of(prog) ) {
        if( e->program == prog ) return true;
      }
*************** symbol_match2( size_t program,
*** 430,436 ****
    auto plist = symbol_map2.find(key);
    if( plist != symbol_map2.end() ) {
      for( auto candidate : plist->second ) {
!       auto e = symbol_at(candidate);
        if( name_has_names( e, names, local ) ) {
          fields.push_back( symbol_index(e) );
        }
--- 430,436 ----
    auto plist = symbol_map2.find(key);
    if( plist != symbol_map2.end() ) {
      for( auto candidate : plist->second ) {
!       const auto e = symbol_at(candidate);
        if( name_has_names( e, names, local ) ) {
          fields.push_back( symbol_index(e) );
        }
diff -Nrcpad gcc-16-20250615/gcc/cobol/token_names.h gcc-16-20250622/gcc/cobol/token_names.h
*** gcc-16-20250615/gcc/cobol/token_names.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/token_names.h	Sun Jun 22 22:32:19 2025
*************** tokens = {
*** 691,696 ****
--- 691,697 ----
  	{ "neg", NEG }, // 939
  };
  
+ // cppcheck-suppress useInitializationList
  token_names = {
  	"IDENTIFICATION", // 0 (258)
  	"ENVIRONMENT", // 1 (259)
diff -Nrcpad gcc-16-20250615/gcc/cobol/util.cc gcc-16-20250622/gcc/cobol/util.cc
*** gcc-16-20250615/gcc/cobol/util.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/util.cc	Sun Jun 22 22:32:19 2025
*************** symbol_type_str( enum symbol_type_t type
*** 130,136 ****
      case SymDataSection:
          return "SymDataSection";
      }
!     dbgmsg("%s:%d: invalid symbol_type_t %d", __func__, __LINE__, type);
      return "???";
  }
  
--- 130,136 ----
      case SymDataSection:
          return "SymDataSection";
      }
!     cbl_internal_error("%s:%d: invalid %<symbol_type_t%> %d", __func__, __LINE__, type);
      return "???";
  }
  
*************** cbl_field_type_str( enum cbl_field_type_
*** 179,185 ****
    case FldBlob:
      return "FldBlob";
   }
!   dbgmsg("%s:%d: invalid symbol_type_t %d", __func__, __LINE__, type);
    return "???";
  }
  
--- 179,185 ----
    case FldBlob:
      return "FldBlob";
   }
!   cbl_internal_error("%s:%d: invalid %<symbol_type_t%> %d", __func__, __LINE__, type);
    return "???";
  }
  
*************** normalize_picture( char picture[] )
*** 365,415 ****
      regmatch_t pmatch[4];
  
      if( (erc = regcomp(preg, regex, cflags)) != 0 ) {
!         regerror(erc, preg, regexmsg, sizeof(regexmsg));
!         dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
!         return picture;
      }
  
      while( (erc = regexec(preg, picture, COUNT_OF(pmatch), pmatch, 0)) == 0 ) {
!         assert(pmatch[1].rm_so != -1 && pmatch[1].rm_so < pmatch[1].rm_eo);
!         size_t len = pmatch[1].rm_eo - pmatch[1].rm_so;
!         assert(len == 1);
!         const char *start = picture + pmatch[1].rm_so;
  
!         assert(pmatch[2].rm_so != -2 && pmatch[2].rm_so < pmatch[2].rm_eo);
!         len = pmatch[2].rm_eo - pmatch[2].rm_so;
!         assert(len > 0);
  
!         /*
!          * Overwrite e.g. A(4) with AAAA.
!          */
!         assert(pmatch[2].rm_so == pmatch[1].rm_eo + 1); // character paren number
!         p = picture + pmatch[2].rm_so;
!         len = 0;
!         fmt_size_t lenf = 0;
!         if( 1 != sscanf(p, "%" GCC_PRISZ "u", &lenf) ) {
!             dbgmsg("%s:%d: no number found in '%s'", __func__, __LINE__, p);
!             goto irregular;
!         }
!         len = lenf;
!         if( len == 0 ) {
!             dbgmsg("%s:%d: ZERO length found in '%s'", __func__, __LINE__, p);
!             goto irregular;
!         }
  
! 	std::vector <char> pic(len + 1, '\0');
!         memset(pic.data(), *start, len);
!         const char *finish = picture + pmatch[2].rm_eo,
!                     *eopicture = picture + strlen(picture);
  
!         p = xasprintf( "%*s%s%*s",
! 		       (int)(start - picture), picture,
! 		       pic.data(),
! 		       (int)(eopicture - finish), finish );
  
!         free(picture);
!         picture = p;
!         continue;
      }
      assert(erc == REG_NOMATCH);
  
--- 365,414 ----
      regmatch_t pmatch[4];
  
      if( (erc = regcomp(preg, regex, cflags)) != 0 ) {
!       regerror(erc, preg, regexmsg, sizeof(regexmsg));
!       dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
!       return picture;
      }
  
      while( (erc = regexec(preg, picture, COUNT_OF(pmatch), pmatch, 0)) == 0 ) {
!       assert(pmatch[1].rm_so != -1 && pmatch[1].rm_so < pmatch[1].rm_eo);
!       size_t len = pmatch[1].rm_eo - pmatch[1].rm_so;
!       assert(len == 1);
!       const char *start = picture + pmatch[1].rm_so;
  
!       assert(pmatch[2].rm_so != -2 && pmatch[2].rm_so < pmatch[2].rm_eo);
!       len = pmatch[2].rm_eo - pmatch[2].rm_so;
!       assert(len > 0);
  
!       /*
!        * Overwrite e.g. A(4) with AAAA.
!        */
!       assert(pmatch[2].rm_so == pmatch[1].rm_eo + 1); // character paren number
!       p = picture + pmatch[2].rm_so;
!       len = 0;
!       fmt_size_t lenf = 0;
!       if( 1 != sscanf(p, "%" GCC_PRISZ "u", &lenf) ) {
!         dbgmsg("%s:%d: no number found in '%s'", __func__, __LINE__, p);
!         goto irregular;
!       }
!       len = lenf;
!       if( len == 0 ) {
!         dbgmsg("%s:%d: ZERO length found in '%s'", __func__, __LINE__, p);
!         goto irregular;
!       }
  
!       std::vector <char> pic(len + 1, '\0');
!       memset(pic.data(), *start, len);
!       const char *finish = picture + pmatch[2].rm_eo,
!         *eopicture = picture + strlen(picture);
  
!       p = xasprintf( "%*s%s%*s",
!                      (int)(start - picture), picture,
!                      pic.data(),
!                      (int)(eopicture - finish), finish );
  
!       free(picture);
!       picture = p;
      }
      assert(erc == REG_NOMATCH);
  
*************** is_elementary( enum cbl_field_type_t typ
*** 480,486 ****
      case FldFloat:
        return true; // takes up space
      }
!     dbgmsg("%s:%d: invalid symbol_type_t %d", __func__, __LINE__, type);
      return false;
  }
  
--- 479,485 ----
      case FldFloat:
        return true; // takes up space
      }
!     cbl_internal_error("%s:%d: invalid %<symbol_type_t%> %d", __func__, __LINE__, type);
      return false;
  }
  
*************** symbol_field_type_update( cbl_field_t *f
*** 792,798 ****
  
  bool
  redefine_field( cbl_field_t *field ) {
!   cbl_field_t *primary = symbol_redefines(field);
    bool fOK = true;
  
    if( !primary ) return false;
--- 791,797 ----
  
  bool
  redefine_field( cbl_field_t *field ) {
!   const cbl_field_t *primary = symbol_redefines(field);
    bool fOK = true;
  
    if( !primary ) return false;
*************** cbl_field_t::report_invalid_initial_valu
*** 840,846 ****
          // 8 or more, we need do no further testing because we assume
          // everything fits.
          if( data.capacity < 8 ) {
!           auto p = strchr(data.initial, symbol_decimal_point());
            if( p && atoll(p+1) != 0 ) {
              error_msg(loc, "integer type %s VALUE '%s' "
                       "requires integer VALUE",
--- 839,845 ----
          // 8 or more, we need do no further testing because we assume
          // everything fits.
          if( data.capacity < 8 ) {
!           const auto p = strchr(data.initial, symbol_decimal_point());
            if( p && atoll(p+1) != 0 ) {
              error_msg(loc, "integer type %s VALUE '%s' "
                       "requires integer VALUE",
*************** cbl_field_t::report_invalid_initial_valu
*** 903,910 ****
                                                   return TOUPPER(ch) == 'E';
                                                 } );
                if( !has_exponent && data.precision() < pend - p ) {
!                 error_msg(loc, "%s cannot represent  VALUE '%s' exactly (max .%zu)",
!                          name, data.initial, pend - p);
                }
              }
            }
--- 902,909 ----
                                                   return TOUPPER(ch) == 'E';
                                                 } );
                if( !has_exponent && data.precision() < pend - p ) {
!                 error_msg(loc, "%s cannot represent VALUE %qs exactly (max %c%zu)",
!                           name, data.initial, '.', pend - p);
                }
              }
            }
*************** const cbl_field_t *
*** 962,969 ****
  literal_subscript_oob( const cbl_refer_t& r, size_t& isub /* output */)  {
    // Verify literal subscripts if dimensions are correct.
    size_t ndim(dimensions(r.field));
!   if( ndim == 0 || ndim != r.nsubscript ) return NULL;
!   cbl_refer_t *esub = r.subscripts + r.nsubscript;
    std::vector<cbl_field_t *> dims( ndim, NULL );
    auto pdim = dims.end();
  
--- 961,967 ----
  literal_subscript_oob( const cbl_refer_t& r, size_t& isub /* output */)  {
    // Verify literal subscripts if dimensions are correct.
    size_t ndim(dimensions(r.field));
!   if( ndim == 0 || ndim != r.nsubscript() ) return NULL;
    std::vector<cbl_field_t *> dims( ndim, NULL );
    auto pdim = dims.end();
  
*************** literal_subscript_oob( const cbl_refer_t
*** 981,1002 ****
     * for the corresponding dimension.  Return the first subscript not
     * meeting those criteria, if any.
     */
!   auto p = std::find_if( r.subscripts, esub,
!                          [&pdim]( const cbl_refer_t& r ) {
                             const auto& occurs((*pdim)->occurs);
                             pdim++;
                             return ! occurs.subscript_ok(r.field);
                           } );
!   isub = p - r.subscripts;
!   return p == esub? NULL : dims[isub];
  }
  
  size_t
  cbl_refer_t::subscripts_set( const std::list<cbl_refer_t>& subs ) {
!   nsubscript = subs.size();
!   subscripts = new cbl_refer_t[nsubscript];
!   std::copy( subs.begin(), subs.end(), subscripts );
! 
    return dimensions(field);
  }
  
--- 979,998 ----
     * for the corresponding dimension.  Return the first subscript not
     * meeting those criteria, if any.
     */
!   auto psub = std::find_if( r.subscripts.begin(), r.subscripts.end(),
!                          [pdim]( const cbl_refer_t& r ) mutable {
                             const auto& occurs((*pdim)->occurs);
                             pdim++;
                             return ! occurs.subscript_ok(r.field);
                           } );
!   isub = psub - r.subscripts.begin(); 
!   return psub == r.subscripts.end()? NULL : dims[isub];
  }
  
  size_t
  cbl_refer_t::subscripts_set( const std::list<cbl_refer_t>& subs ) {
!   subscripts.clear();
!   std::copy( subs.begin(), subs.end(), std::back_inserter(subscripts) );
    return dimensions(field);
  }
  
*************** const char *
*** 1004,1010 ****
  cbl_refer_t::str() const {
    static char subscripts[64];
    sprintf(subscripts, "(%u of " HOST_SIZE_T_PRINT_UNSIGNED " dimensions)",
!           nsubscript, (fmt_size_t)dimensions(field));
    char *output = xasprintf("%s %s %s",
                             field? field_str(field) : "(none)",
                             0 < dimensions(field)? subscripts : "",
--- 1000,1006 ----
  cbl_refer_t::str() const {
    static char subscripts[64];
    sprintf(subscripts, "(%u of " HOST_SIZE_T_PRINT_UNSIGNED " dimensions)",
!           nsubscript(), (fmt_size_t)dimensions(field));
    char *output = xasprintf("%s %s %s",
                             field? field_str(field) : "(none)",
                             0 < dimensions(field)? subscripts : "",
*************** cbl_refer_t::name() const {
*** 1020,1037 ****
  
  const char *
  cbl_refer_t::deref_str() const {
!   std::vector<char> dimstr(nsubscript * 16, '\0');
    dimstr.at(0) = '(';
    auto p = dimstr.begin() + 1;
  
    if( !field ) return name();
  
!   for( auto sub = subscripts; sub <  subscripts + nsubscript; sub++ ) {
!     auto initial = sub->field->data.initial ? sub->field->data.initial : "?";
      size_t len = dimstr.end() - p;
      p += snprintf( &*p, len, "%s ", initial );
    }
!   if( 0 < nsubscript ) {
      *--p = ')';
    }
    char *output = xasprintf("%s%s", field->name, dimstr.data());
--- 1016,1033 ----
  
  const char *
  cbl_refer_t::deref_str() const {
!   std::vector<char> dimstr(nsubscript() * 16, '\0');
    dimstr.at(0) = '(';
    auto p = dimstr.begin() + 1;
  
    if( !field ) return name();
  
!   for( const auto& sub : subscripts ) {
!     auto initial = sub.field->data.initial ? sub.field->data.initial : "?";
      size_t len = dimstr.end() - p;
      p += snprintf( &*p, len, "%s ", initial );
    }
!   if( ! subscripts.empty() ) {
      *--p = ')';
    }
    char *output = xasprintf("%s%s", field->name, dimstr.data());
*************** public:
*** 1383,1389 ****
    {
      assert(isym);
    }
!   procdef_t( const procref_base_t& ref )
      : procref_base_t(ref)
      , isym(0)
    {}
--- 1379,1385 ----
    {
      assert(isym);
    }
!   explicit procdef_t( const procref_base_t& ref )
      : procref_base_t(ref)
      , isym(0)
    {}
*************** public:
*** 1392,1404 ****
      return procref_base_t(*this) < procref_base_t(that);
    }
  
-   bool operator<( const procref_base_t& that ) const {
-     if( that.has_section() ) {
-       return procref_base_t(*this) < that;
-     }
-     return strcasecmp(paragraph(), that.paragraph()) < 0;
-   }
- 
    cbl_label_t * label_of() const {
      return isym == 0? NULL : cbl_label_of(symbol_at(isym));
    }
--- 1388,1393 ----
*************** static procedures_t::iterator current_pr
*** 1429,1435 ****
  class procedure_match {
    const procref_base_t& ref;
  public:
!   procedure_match( const procref_base_t& ref ) : ref(ref) {}
    // Match a 2-name reference to section & paragraph, else to one or the other.
    bool operator()( procedures_t::const_reference elem ) {
      const procdef_t& key = elem.first;
--- 1418,1424 ----
  class procedure_match {
    const procref_base_t& ref;
  public:
!   explicit procedure_match( const procref_base_t& ref ) : ref(ref) {}
    // Match a 2-name reference to section & paragraph, else to one or the other.
    bool operator()( procedures_t::const_reference elem ) {
      const procdef_t& key = elem.first;
*************** locally_unique( size_t program, const pr
*** 1457,1463 ****
    const char *section_name = ref.has_section()? ref.section() : key.section();
    procref_base_t full_ref(section_name, ref.paragraph());
  
!   return 1 == procedures.count(full_ref);
  }
  
  // Add each section and paragraph to the map as it occurs in the Cobol text.
--- 1446,1452 ----
    const char *section_name = ref.has_section()? ref.section() : key.section();
    procref_base_t full_ref(section_name, ref.paragraph());
  
!   return 1 == procedures.count(procdef_t(full_ref));
  }
  
  // Add each section and paragraph to the map as it occurs in the Cobol text.
*************** ambiguous_reference( size_t program ) {
*** 1519,1527 ****
      if( proc.second.end() != ambiguous ) {
        if( yydebug ) {
          dbgmsg("%s: %s of '%s' has " HOST_SIZE_T_PRINT_UNSIGNED
!               "potential matches", __func__,
!               ambiguous->paragraph(), ambiguous->section(),
!               (fmt_size_t)procedures.count(*ambiguous));
        }
        return new procref_t(*ambiguous);
      }
--- 1508,1516 ----
      if( proc.second.end() != ambiguous ) {
        if( yydebug ) {
          dbgmsg("%s: %s of '%s' has " HOST_SIZE_T_PRINT_UNSIGNED
!                "potential matches", __func__,
!                ambiguous->paragraph(), ambiguous->section(),
!                (fmt_size_t)procedures.count(procdef_t(*ambiguous)));
        }
        return new procref_t(*ambiguous);
      }
*************** intradeclarative_reference() {
*** 1548,1554 ****
  class next_group {
    size_t isym;
  public:
!   next_group( symbol_elem_t *group ) : isym(symbol_index(group)) {}
  
    // return true if elem is not a member of the group
    bool operator()( const symbol_elem_t& elem ) {
--- 1537,1543 ----
  class next_group {
    size_t isym;
  public:
!  explicit next_group( const symbol_elem_t *group ) : isym(symbol_index(group)) {}
  
    // return true if elem is not a member of the group
    bool operator()( const symbol_elem_t& elem ) {
*************** public:
*** 1595,1601 ****
    static bool
    any_redefines( const cbl_field_t& field, const symbol_elem_t *group ) {
      for( const cbl_field_t *f = &field; f && f->parent > 0; f = parent_of(f) ) {
!       symbol_elem_t *e = symbol_at(f->parent);
        if( e == group || e->type != SymField ) break;
        if( symbol_redefines(f) ) return true;
      }
--- 1584,1590 ----
    static bool
    any_redefines( const cbl_field_t& field, const symbol_elem_t *group ) {
      for( const cbl_field_t *f = &field; f && f->parent > 0; f = parent_of(f) ) {
!       const symbol_elem_t *e = symbol_at(f->parent);
        if( e == group || e->type != SymField ) break;
        if( symbol_redefines(f) ) return true;
      }
*************** class unique_stack : public std::stack<i
*** 1796,1802 ****
    
    bool push( const value_type& value ) {
      auto ok = std::none_of( c.cbegin(), c.cend(),
!                             [value]( auto& that ) {
                                return value == that;
                                  } );
      if( ok ) {
--- 1785,1791 ----
    
    bool push( const value_type& value ) {
      auto ok = std::none_of( c.cbegin(), c.cend(),
!                             [value]( const auto& that ) {
                                return value == that;
                                  } );
      if( ok ) {
*************** class unique_stack : public std::stack<i
*** 1816,1822 ****
                    (fmt_size_t)(c.size() - --n), v.lineno, no_wd(wd, v.name) );
          }
        } else {
!         dbgmsg("unable to get current working directory: %m");
        }
        free(wd);
      }
--- 1805,1811 ----
                    (fmt_size_t)(c.size() - --n), v.lineno, no_wd(wd, v.name) );
          }
        } else {
!         dbgmsg("unable to get current working directory: %s", xstrerror(errno));
        }
        free(wd);
      }
*************** class unique_stack : public std::stack<i
*** 1834,1840 ****
    void print() const {
      std::string input( top().name );
      printf( "%s: ", input.c_str() );
!     for( auto name : all_names ) {
        if( name != input ) 
  	printf( "\\\n\t%s ", name.c_str() );
      }
--- 1823,1829 ----
    void print() const {
      std::string input( top().name );
      printf( "%s: ", input.c_str() );
!     for( const auto& name : all_names ) {
        if( name != input ) 
  	printf( "\\\n\t%s ", name.c_str() );
      }
*************** void cobol_set_pp_option(int opt) {
*** 1863,1869 ****
   * to enforce uniqueness, and the scanner to maintain line numbers.
   */
  bool cobol_filename( const char *name, ino_t inode ) {
!   line_map *lines = NULL;
    if( inode == 0 ) {
      auto p = old_filenames.find(name);
      if( p == old_filenames.end() ) {
--- 1852,1858 ----
   * to enforce uniqueness, and the scanner to maintain line numbers.
   */
  bool cobol_filename( const char *name, ino_t inode ) {
!   const line_map *lines = NULL;
    if( inode == 0 ) {
      auto p = old_filenames.find(name);
      if( p == old_filenames.end() ) {
*************** verify_format( const char gmsgid[] ) {
*** 1943,1953 ****
    static regex_t re;
    static int cflags = REG_EXTENDED;
    static int status = regcomp( &re, pattern, cflags );
-   static char errbuf[80];
- 
- 
  
    if( status != 0 ) {
      int n = regerror(status, &re, errbuf, sizeof(errbuf));
      gcc_assert(size_t(n) < sizeof(errbuf));
      fprintf(stderr, "%s:%d: %s", __func__, __LINE__, errbuf);
--- 1932,1940 ----
    static regex_t re;
    static int cflags = REG_EXTENDED;
    static int status = regcomp( &re, pattern, cflags );
  
    if( status != 0 ) {
+     static char errbuf[80];
      int n = regerror(status, &re, errbuf, sizeof(errbuf));
      gcc_assert(size_t(n) < sizeof(errbuf));
      fprintf(stderr, "%s:%d: %s", __func__, __LINE__, errbuf);
*************** verify_format( const char gmsgid[] ) {
*** 1966,1971 ****
--- 1953,1960 ----
  static const diagnostic_option_id option_zero;
  size_t parse_error_inc();
  
+ void ydferror( const char gmsgid[], ... ) ATTRIBUTE_GCOBOL_DIAG(1, 2);
+ 
  void
  ydferror( const char gmsgid[], ... ) {
    verify_format(gmsgid);
*************** extern YYLTYPE yylloc;
*** 1988,1994 ****
   * the global token_location, which is passed to the diagnostic framework. The
   * original value is restored when the instantiated variable goes out of scope.
   */
! class temp_loc_t : protected YYLTYPE {
    location_t orig;
   public:
    temp_loc_t() : orig(token_location) {
--- 1977,1983 ----
   * the global token_location, which is passed to the diagnostic framework. The
   * original value is restored when the instantiated variable goes out of scope.
   */
! class temp_loc_t {
    location_t orig;
   public:
    temp_loc_t() : orig(token_location) {
*************** class temp_loc_t : protected YYLTYPE {
*** 1996,2005 ****
  
      gcc_location_set(yylloc); // use lookahead location
    }
!   temp_loc_t( const YYLTYPE& loc) : orig(token_location) {
      gcc_location_set(loc);
    }
!   temp_loc_t( const YDFLTYPE& loc) : orig(token_location) {
      YYLTYPE lloc = {
        loc.first_line, loc.first_column,
        loc.last_line,  loc.last_column };
--- 1985,1994 ----
  
      gcc_location_set(yylloc); // use lookahead location
    }
!   explicit temp_loc_t( const YYLTYPE& loc) : orig(token_location) {
      gcc_location_set(loc);
    }
!   explicit temp_loc_t( const YDFLTYPE& loc) : orig(token_location) {
      YYLTYPE lloc = {
        loc.first_line, loc.first_column,
        loc.last_line,  loc.last_column };
*************** void error_msg( const YYLTYPE& loc, cons
*** 2042,2047 ****
--- 2031,2039 ----
    ERROR_MSG_BODY
  }
  
+ void error_msg( const YDFLTYPE& loc, const char gmsgid[], ... )
+   ATTRIBUTE_GCOBOL_DIAG(2, 3);
+ 
  void error_msg( const YDFLTYPE& loc, const char gmsgid[], ... ) {
    ERROR_MSG_BODY
  }
*************** cobol_fileline_set( const char line[] )
*** 2132,2138 ****
        dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
        return line;
      }
!     error_msg(yylloc, "invalid #line directive: %s", line );
      return line;
    }
  
--- 2124,2130 ----
        dbgmsg( "%s:%d: could not compile regex: %s", __func__, __LINE__, regexmsg );
        return line;
      }
!     error_msg(yylloc, "invalid %<#line%> directive: %s", line );
      return line;
    }
  
*************** cobol_fileline_set( const char line[] )
*** 2142,2148 ****
    int fileline;
  
    if( 1 != sscanf(line_str, "%d", &fileline) )
!     yywarn("could not parse line number %s from #line directive", line_str);
  
    input_file_t input_file( filename, ino_t(0), fileline ); // constructor sets inode
  
--- 2134,2140 ----
    int fileline;
  
    if( 1 != sscanf(line_str, "%d", &fileline) )
!     yywarn("could not parse line number %s from %<#line%> directive", line_str);
  
    input_file_t input_file( filename, ino_t(0), fileline ); // constructor sets inode
  
*************** cobol_set_debugging( bool flex, bool yac
*** 2229,2258 ****
    yy_flex_debug = flex? 1 : 0;
    ydfdebug = yydebug = yacc? 1 : 0;
    f_trace_debug = parser? 1 : 0;
- 
-   char *ind = getenv("INDICATOR_COLUMN");
-   if( ind ) {
-     int col;
-     if( 1 != sscanf(ind, "%d", &col) ) {
-       yywarn("ignored non-integer value for INDICATOR_COLUMN=%s", ind);
-     }
-     cobol_set_indicator_column(col);
-   }
  }
  
! os_locale_t os_locale = { "UTF-8", xstrdup("C.UTF-8") };
! 
  
  void
  cobol_parse_files (int nfile, const char **files)
  {
!   char * opaque = setlocale(LC_CTYPE, "");
    if( ! opaque ) {
      yywarn("setlocale: unable to initialize LOCALE");
    } else {
      char *codeset = nl_langinfo(CODESET);
      if( ! codeset ) {
!       yywarn("nl_langinfo failed after setlocale succeeded");
      } else {
        os_locale.codeset = codeset;
      }
--- 2221,2240 ----
    yy_flex_debug = flex? 1 : 0;
    ydfdebug = yydebug = yacc? 1 : 0;
    f_trace_debug = parser? 1 : 0;
  }
  
! os_locale_t os_locale = { "UTF-8", "C.UTF-8" };
  
  void
  cobol_parse_files (int nfile, const char **files)
  {
!   const char * opaque = setlocale(LC_CTYPE, "");
    if( ! opaque ) {
      yywarn("setlocale: unable to initialize LOCALE");
    } else {
      char *codeset = nl_langinfo(CODESET);
      if( ! codeset ) {
!       yywarn("%<nl_langinfo%> failed after %<setlocale()%> succeeded");
      } else {
        os_locale.codeset = codeset;
      }
*************** dbgmsg(const char *msg, ...) {
*** 2364,2370 ****
  
  void
  dialect_error( const YYLTYPE& loc, const char term[], const char dialect[] ) {
!   error_msg(loc, "%s is not ISO syntax, requires -dialect %s",
             term, dialect);
  }
  
--- 2346,2352 ----
  
  void
  dialect_error( const YYLTYPE& loc, const char term[], const char dialect[] ) {
!   error_msg(loc, "%s is not ISO syntax, requires %<-dialect %s%>",
             term, dialect);
  }
  
diff -Nrcpad gcc-16-20250615/gcc/cobol/util.h gcc-16-20250622/gcc/cobol/util.h
*** gcc-16-20250615/gcc/cobol/util.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/cobol/util.h	Sun Jun 22 22:32:19 2025
***************
*** 31,41 ****
  #ifndef _UTIL_H_
  #define _UTIL_H_
  
! void cbl_message(int fd, const char *format_string, ...);
! void cbl_internal_error(const char *format_string, ...);
  
! void cbl_err(const char *format_string, ...);
! void cbl_errx(const char *format_string, ...);
  
  bool fisdigit(int c);
  bool fisspace(int c);
--- 31,43 ----
  #ifndef _UTIL_H_
  #define _UTIL_H_
  
! void cbl_message(int fd, const char *format_string, ...)
!   ATTRIBUTE_PRINTF_2;
! void cbl_internal_error(const char *format_string, ...)
!   ATTRIBUTE_GCOBOL_DIAG(1, 2);
  
! void cbl_err(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
! void cbl_errx(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
  
  bool fisdigit(int c);
  bool fisspace(int c);
*************** const char * cobol_lineno_save();
*** 50,53 ****
--- 52,62 ----
  
  unsigned long gb4( size_t input );
  
+ template <typename P>
+ static inline const void *
+ as_voidp( P p ) {
+   return static_cast<const void *>(p);
+ }
+ 
+ 
  #endif
diff -Nrcpad gcc-16-20250615/gcc/common/config/riscv/riscv-common.cc gcc-16-20250622/gcc/common/config/riscv/riscv-common.cc
*** gcc-16-20250615/gcc/common/config/riscv/riscv-common.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/common/config/riscv/riscv-common.cc	Sun Jun 22 22:32:19 2025
*************** static const riscv_profiles riscv_profil
*** 290,304 ****
    /* 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"},
--- 290,304 ----
    /* 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", "rv64imafdcbv_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_supm"},
  
    /* RVB23 contains all mandatory base ISA for RVA22U64 and the new extension
       'zihintntl,zicond,zimop,zcmop,zfa,zawrs' as mandatory
       extensions.  */
!   {"rvb23u64", "rv64imafdcb_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"},
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/aarch64-elf-metadata.cc gcc-16-20250622/gcc/config/aarch64/aarch64-elf-metadata.cc
*** gcc-16-20250615/gcc/config/aarch64/aarch64-elf-metadata.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/config/aarch64/aarch64-elf-metadata.cc	Sun Jun 22 22:32:19 2025
***************
*** 0 ****
--- 1,145 ----
+ /* ELF metadata for AArch64 architecture.
+    Copyright (C) 2024-2025 Free Software Foundation, Inc.
+    Contributed by ARM Ltd.
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3, or (at your option)
+    any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #define INCLUDE_STRING
+ #define INCLUDE_ALGORITHM
+ #define INCLUDE_MEMORY
+ #define INCLUDE_VECTOR
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "target.h"
+ #include "rtl.h"
+ #include "output.h"
+ 
+ #include "aarch64-elf-metadata.h"
+ 
+ /* Defined for convenience.  */
+ #define POINTER_BYTES (POINTER_SIZE / BITS_PER_UNIT)
+ 
+ namespace aarch64 {
+ 
+ constexpr unsigned GNU_PROPERTY_AARCH64_FEATURE_1_AND = 0xc0000000;
+ constexpr unsigned GNU_PROPERTY_AARCH64_FEATURE_1_BTI = (1U << 0);
+ constexpr unsigned GNU_PROPERTY_AARCH64_FEATURE_1_PAC = (1U << 1);
+ constexpr unsigned GNU_PROPERTY_AARCH64_FEATURE_1_GCS = (1U << 2);
+ 
+ namespace {
+ 
+ std::string
+ gnu_property_features_to_string (unsigned feature_1_and)
+ {
+   struct flag_name
+   {
+     unsigned int mask;
+     const char *name;
+   };
+ 
+   static const flag_name flags[] = {
+     {GNU_PROPERTY_AARCH64_FEATURE_1_BTI, "BTI"},
+     {GNU_PROPERTY_AARCH64_FEATURE_1_PAC, "PAC"},
+     {GNU_PROPERTY_AARCH64_FEATURE_1_GCS, "GCS"},
+   };
+ 
+   const char *separator = "";
+   std::string s_features;
+   for (auto &flag : flags)
+     if (feature_1_and & flag.mask)
+       {
+ 	s_features.append (separator).append (flag.name);
+ 	separator = ", ";
+       }
+   return s_features;
+ };
+ 
+ } // namespace anonymous
+ 
+ section_note_gnu_property::section_note_gnu_property ()
+   : m_feature_1_and (0) {}
+ 
+ void
+ section_note_gnu_property::bti_enabled ()
+ {
+   m_feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_BTI;
+ }
+ 
+ void
+ section_note_gnu_property::pac_enabled ()
+ {
+   m_feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_PAC;
+ }
+ 
+ void
+ section_note_gnu_property::gcs_enabled ()
+ {
+   m_feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+ }
+ 
+ void
+ section_note_gnu_property::write () const
+ {
+   if (m_feature_1_and)
+     {
+       /* Generate .note.gnu.property section.  */
+       switch_to_section (
+ 	get_section (".note.gnu.property", SECTION_NOTYPE, NULL));
+ 
+       /* PT_NOTE header: namesz, descsz, type.
+ 	 namesz = 4 ("GNU\0")
+ 	 descsz = 16 (Size of the program property array)
+ 		  [(12 + padding) * Number of array elements]
+ 	 type   = 5 (NT_GNU_PROPERTY_TYPE_0).  */
+       assemble_align (POINTER_SIZE);
+       assemble_integer (GEN_INT (4), 4, 32, 1);
+       assemble_integer (GEN_INT (ROUND_UP (12, POINTER_BYTES)), 4, 32, 1);
+       assemble_integer (GEN_INT (5), 4, 32, 1);
+ 
+       /* PT_NOTE name.  */
+       assemble_string ("GNU", 4);
+ 
+       /* PT_NOTE contents for NT_GNU_PROPERTY_TYPE_0:
+ 	 type   = GNU_PROPERTY_AARCH64_FEATURE_1_AND
+ 	 datasz = 4
+ 	 data   = feature_1_and.  */
+       fputs (integer_asm_op (4, true), asm_out_file);
+       fprint_whex (asm_out_file, GNU_PROPERTY_AARCH64_FEATURE_1_AND);
+       putc ('\n', asm_out_file);
+       assemble_integer (GEN_INT (4), 4, 32, 1);
+ 
+       fputs (integer_asm_op (4, true), asm_out_file);
+       fprint_whex (asm_out_file, m_feature_1_and);
+       if (flag_debug_asm)
+ 	{
+ 	  auto const &s_features
+ 	    = gnu_property_features_to_string (m_feature_1_and);
+ 	  asm_fprintf (asm_out_file,
+ 		       "\t%s GNU_PROPERTY_AARCH64_FEATURE_1_AND (%s)\n",
+ 		       ASM_COMMENT_START, s_features.c_str ());
+ 	}
+       else
+ 	putc ('\n', asm_out_file);
+ 
+       /* Pad the size of the note to the required alignment.  */
+       assemble_align (POINTER_SIZE);
+     }
+ }
+ 
+ } // namespace aarch64
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/aarch64-elf-metadata.h gcc-16-20250622/gcc/config/aarch64/aarch64-elf-metadata.h
*** gcc-16-20250615/gcc/config/aarch64/aarch64-elf-metadata.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/config/aarch64/aarch64-elf-metadata.h	Sun Jun 22 22:32:19 2025
***************
*** 0 ****
--- 1,253 ----
+ /* ELF metadata for AArch64 architecture.
+    Copyright (C) 2024-2025 Free Software Foundation, Inc.
+    Contributed by ARM Ltd.
+ 
+    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_AARCH64_ELF_METADATA_H
+ #define GCC_AARCH64_ELF_METADATA_H
+ 
+ #include "vec.h"
+ 
+ namespace aarch64 {
+ 
+ class section_note_gnu_property
+ {
+  public:
+   section_note_gnu_property ();
+ 
+   /* Add BTI flag to GNU properties.  */
+   void bti_enabled ();
+   /* Add GCS flag to GNU properties.  */
+   void gcs_enabled ();
+   /* Add PAC flag to GNU properties.  */
+   void pac_enabled ();
+ 
+   /* Write the data to the assembly file.  */
+   void write () const;
+ 
+  private:
+   unsigned m_feature_1_and;
+ };
+ 
+ enum subsection_optionality : uint8_t
+ {
+   required = 0x0,
+   optional = 0x1,
+ };
+ 
+ enum subsection_val_type : uint8_t
+ {
+   uleb128 = 0x0,
+   ntbs = 0x1,
+ };
+ 
+ enum BA_TagFeature_t : uint8_t
+ {
+   Tag_Feature_BTI = 0,
+   Tag_Feature_PAC = 1,
+   Tag_Feature_GCS = 2,
+ };
+ 
+ template <typename T_tag, typename T_val>
+ struct aeabi_attribute
+ {
+   T_tag tag;
+   T_val value;
+ };
+ 
+ template <typename T_tag, typename T_val>
+ aeabi_attribute<T_tag, T_val>
+ make_aeabi_attribute (T_tag tag, T_val val)
+ {
+   return aeabi_attribute<T_tag, T_val>{tag, val};
+ }
+ 
+ namespace details {
+ 
+ constexpr const char *
+ to_c_str (bool b)
+ {
+   return b ? "true" : "false";
+ }
+ 
+ constexpr const char *
+ to_c_str (const char *s)
+ {
+   return s;
+ }
+ 
+ constexpr const char *
+ to_c_str (subsection_optionality v)
+ {
+   return (v == optional ? "optional"
+ 	  : v == required ? "required"
+ 	  : nullptr);
+ }
+ 
+ constexpr const char *
+ to_c_str (subsection_val_type v)
+ {
+   return (v == uleb128 ? "ULEB128"
+ 	  : v == ntbs ? "NTBS"
+ 	  : nullptr);
+ }
+ 
+ constexpr const char *
+ to_c_str (BA_TagFeature_t feature)
+ {
+   return (feature == Tag_Feature_BTI ? "Tag_Feature_BTI"
+ 	  : feature == Tag_Feature_PAC ? "Tag_Feature_PAC"
+ 	  : feature == Tag_Feature_GCS ? "Tag_Feature_GCS"
+ 	  : nullptr);
+ }
+ 
+ template <
+   typename T,
+   typename = typename std::enable_if<std::is_unsigned<T>::value, T>::type
+ >
+ constexpr const char *
+ aeabi_attr_str_fmt (T)
+ {
+   return "\t.aeabi_attribute %s, %u";
+ }
+ 
+ constexpr const char *
+ aeabi_attr_str_fmt (const char *)
+ {
+   return "\t.aeabi_attribute %s, \"%s\"";
+ }
+ 
+ template <
+   typename T,
+   typename = typename std::enable_if<std::is_unsigned<T>::value, T>::type
+ >
+ constexpr uint8_t
+ aeabi_attr_val_for_fmt (T value)
+ {
+   return static_cast<uint8_t>(value);
+ }
+ 
+ constexpr const char *
+ aeabi_attr_val_for_fmt (const char *s)
+ {
+   return s;
+ }
+ 
+ template <typename T_tag, typename T_val>
+ void
+ write (FILE *out_file, aeabi_attribute<T_tag, T_val> const &attr)
+ {
+   asm_fprintf (out_file, aeabi_attr_str_fmt (T_val{}),
+ 	       to_c_str (attr.tag), aeabi_attr_val_for_fmt (attr.value));
+   if (flag_debug_asm)
+     asm_fprintf (out_file, "\t%s %s: %s", ASM_COMMENT_START,
+ 		 to_c_str (attr.tag), to_c_str (attr.value));
+   asm_fprintf (out_file, "\n");
+ }
+ 
+ template <
+   typename T,
+   typename = typename std::enable_if<std::is_unsigned<T>::value, T>::type
+ >
+ constexpr subsection_val_type
+ deduce_attr_av_type (T)
+ {
+   return subsection_val_type::uleb128;
+ }
+ 
+ constexpr subsection_val_type
+ deduce_attr_av_type (const char *)
+ {
+   return subsection_val_type::ntbs;
+ }
+ 
+ } // namespace details
+ 
+ /* AEABI subsections can be public or private.  A subsection is public if it is
+    prefixed with "aeabi", private otherwise.  The header of an AEABI subsection
+    is composed of a name (usually a vendor name), an optionality status (optional
+    or required), and the expected type of its associated attributes (ULEB128 or
+    NTBS).  Note: The attributes in the same subsection have all the same type.
+    An attribute is composed of a tag identifier (ULEB128), and its value (ULEB128
+    or NTBS).
+ 
+    Syntax:
+      .aeabi_subsection NameOfTheSubsection: string (=NTBS),
+ 		       Optional: boolean (=ULEB128),
+ 		       AttributeValueType: enum{ULEB128, NTBS} (=ULEB128)
+      [
+        .aeabi_attribute  TagIdentifier: ULEB128,
+ 			 TagValue: Variant[ULEB128|NTBS]
+      ]*
+ 
+    Example:
+      .aeabi_subsection .aeabi-feature-and-bits, optional, ULEB128
+      .aeabi_attribute Tag_Feature_GCS, 1 // Tag_Feature_GCS: true
+ 
+    Note: The textual representations of the tag and its value are emitted as a
+    comment along their numerical representations to annotate the assembler
+    output when the developer flag '-dA' is provided.  */
+ template <
+   typename T_tag, /* The type of a tag.  */
+   typename T_val, /* The type of a value.  */
+   size_t N = 0    /* The number of expected attributes if we know it.  */
+ >
+ class aeabi_subsection
+ {
+  public:
+   aeabi_subsection (const char *name, bool optional)
+     : m_name (name),
+       m_optionality (optional
+ 		     ? subsection_optionality::optional
+ 		     : subsection_optionality::required),
+       m_avtype (details::deduce_attr_av_type (T_val{}))
+   {}
+ 
+   /* Append an attribute to the subsection.  */
+   void append (aeabi_attribute<T_tag, T_val> &&attr)
+   {
+     m_attributes.quick_push (std::move (attr));
+   }
+ 
+   /* Write the data to the assembly file.  */
+   void write (FILE *out_file) const
+   {
+     asm_fprintf (out_file, "\n\t.aeabi_subsection %s, %s, %s\n",
+ 		 m_name, details::to_c_str (m_optionality),
+ 		 details::to_c_str (m_avtype));
+ 
+     for (auto const &attr : m_attributes)
+       details::write (out_file, attr);
+   }
+ 
+   /* Indicate if the subsection is empty.  */
+   bool empty () const
+   {
+     return m_attributes.is_empty ();
+   }
+ 
+  private:
+   const char *m_name;
+   subsection_optionality m_optionality;
+   subsection_val_type m_avtype;
+   auto_vec<aeabi_attribute<T_tag, T_val>, N> m_attributes;
+ };
+ 
+ } // namespace aarch64
+ 
+ #endif /* GCC_AARCH64_ELF_METADATA_H */
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/aarch64-protos.h gcc-16-20250622/gcc/config/aarch64/aarch64-protos.h
*** gcc-16-20250615/gcc/config/aarch64/aarch64-protos.h	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config/aarch64/aarch64-protos.h	Sun Jun 22 22:32:19 2025
*************** bool aarch64_parallel_select_half_p (mac
*** 947,952 ****
--- 947,953 ----
  bool aarch64_pars_overlap_p (rtx, rtx);
  bool aarch64_simd_scalar_immediate_valid_for_move (rtx, scalar_int_mode);
  bool aarch64_simd_shift_imm_p (rtx, machine_mode, bool);
+ bool aarch64_sve_valid_pred_p (rtx, machine_mode);
  bool aarch64_sve_ptrue_svpattern_p (rtx, struct simd_immediate_info *);
  bool aarch64_simd_valid_and_imm (rtx);
  bool aarch64_simd_valid_and_imm_fmov (rtx, unsigned int * = NULL);
*************** rtx aarch64_ptrue_reg (machine_mode, uns
*** 1028,1033 ****
--- 1029,1036 ----
  rtx aarch64_ptrue_reg (machine_mode, machine_mode);
  rtx aarch64_pfalse_reg (machine_mode);
  bool aarch64_sve_same_pred_for_ptest_p (rtx *, rtx *);
+ rtx aarch64_sve_packed_pred (machine_mode);
+ rtx aarch64_sve_fp_pred (machine_mode, 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);
*************** bool aarch64_maybe_expand_sve_subreg_mov
*** 1036,1041 ****
--- 1039,1045 ----
  rtx aarch64_replace_reg_mode (rtx, machine_mode);
  void aarch64_split_sve_subreg_move (rtx, rtx, rtx);
  void aarch64_expand_prologue (void);
+ void aarch64_decompose_vec_struct_index (machine_mode, rtx *, rtx *, bool);
  void aarch64_expand_vector_init (rtx, rtx);
  void aarch64_sve_expand_vector_init_subvector (rtx, rtx);
  void aarch64_sve_expand_vector_init (rtx, rtx);
*************** void aarch64_expand_reversed_crc_using_p
*** 1267,1272 ****
--- 1271,1277 ----
  
  void aarch64_expand_fp_spaceship (rtx, rtx, rtx, rtx);
  
+ extern bool aarch64_pacret_enabled ();
  extern bool aarch64_gcs_enabled ();
  
  extern unsigned aarch64_data_alignment (const_tree exp, unsigned align);
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/aarch64-simd.md gcc-16-20250622/gcc/config/aarch64/aarch64-simd.md
*** gcc-16-20250615/gcc/config/aarch64/aarch64-simd.md	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config/aarch64/aarch64-simd.md	Sun Jun 22 22:32:19 2025
***************
*** 1628,1633 ****
--- 1628,1651 ----
    }
  )
  
+ (define_expand "vec_set<mode>"
+   [(match_operand:VSTRUCT_QD 0 "register_operand")
+    (match_operand:<VEL> 1 "aarch64_simd_nonimmediate_operand")
+    (match_operand:SI 2 "immediate_operand")]
+   "TARGET_SIMD"
+ {
+   aarch64_decompose_vec_struct_index (<VSTRUCT_ELT>mode, &operands[0],
+ 				      &operands[2], true);
+   /* For tuples of 64-bit modes, <vstruct_elt> is the 64-bit scalar mode.
+      Allow gen_vec_set<vstruct_elt> to cope with those cases too.  */
+   auto gen_vec_setdi ATTRIBUTE_UNUSED = [](rtx x0, rtx x1, rtx)
+     {
+       return gen_move_insn (x0, x1);
+     };
+   auto gen_vec_setdf ATTRIBUTE_UNUSED = gen_vec_setdi;
+   emit_insn (gen_vec_set<vstruct_elt> (operands[0], operands[1], operands[2]));
+   DONE;
+ })
  
  (define_insn "aarch64_mla<mode><vczle><vczbe>"
   [(set (match_operand:VDQ_BHSI 0 "register_operand" "=w")
***************
*** 8883,8888 ****
--- 8901,8926 ----
      DONE;
  })
  
+ (define_expand "vec_extract<mode><Vel>"
+   [(match_operand:<VEL> 0 "aarch64_simd_nonimmediate_operand")
+    (match_operand:VSTRUCT_QD 1 "register_operand")
+    (match_operand:SI 2 "immediate_operand")]
+   "TARGET_SIMD"
+ {
+   aarch64_decompose_vec_struct_index (<VSTRUCT_ELT>mode, &operands[1],
+ 				      &operands[2], false);
+   /* For tuples of 64-bit modes, <vstruct_elt> is the 64-bit scalar mode.
+      Allow gen_vec_extract<vstruct_elt><Vel> to cope with those cases too.  */
+   auto gen_vec_extractdidi ATTRIBUTE_UNUSED = [](rtx x0, rtx x1, rtx)
+     {
+       return gen_move_insn (x0, x1);
+     };
+   auto gen_vec_extractdfdf ATTRIBUTE_UNUSED = gen_vec_extractdidi;
+   emit_insn (gen_vec_extract<vstruct_elt><Vel> (operands[0], operands[1],
+ 						operands[2]));
+   DONE;
+ })
+ 
  ;; Extract a 64-bit vector from one half of a 128-bit vector.
  (define_expand "vec_extract<mode><Vhalf>"
    [(match_operand:<VHALF> 0 "register_operand")
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/aarch64-sve.md gcc-16-20250622/gcc/config/aarch64/aarch64-sve.md
*** gcc-16-20250615/gcc/config/aarch64/aarch64-sve.md	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config/aarch64/aarch64-sve.md	Sun Jun 22 22:32:19 2025
***************
*** 154,161 ****
--- 154,163 ----
  ;; ---- [FP<-INT] Packs
  ;; ---- [FP<-INT] Unpacks
  ;; ---- [FP<-FP] Packs
+ ;; ---- [FP<-FP] Truncating conversions
  ;; ---- [FP<-FP] Packs (bfloat16)
  ;; ---- [FP<-FP] Unpacks
+ ;; ---- [FP<-FP] Extending conversions
  ;; ---- [PRED<-PRED] Packs
  ;; ---- [PRED<-PRED] Unpacks
  ;;
***************
*** 5493,5519 ****
  ;; Split a predicated instruction whose predicate is unused into an
  ;; unpredicated instruction.
  (define_split
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
  	   (match_operand:SI 4 "aarch64_sve_gp_strictness")
! 	   (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	   (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	  <SVE_COND_FP>))]
    "TARGET_SVE
     && reload_completed
     && INTVAL (operands[4]) == SVE_RELAXED_GP"
    [(set (match_dup 0)
! 	(SVE_UNPRED_FP_BINARY:SVE_FULL_F_BF (match_dup 2) (match_dup 3)))]
  )
  
  ;; Unpredicated floating-point binary operations (post-RA only).
  ;; These are generated by the split above.
  (define_insn "*post_ra_<sve_fp_op><mode>3"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand" "=w")
! 	(SVE_UNPRED_FP_BINARY:SVE_FULL_F_BF
! 	  (match_operand:SVE_FULL_F_BF 1 "register_operand" "w")
! 	  (match_operand:SVE_FULL_F_BF 2 "register_operand" "w")))]
    "TARGET_SVE && reload_completed"
    "<b><sve_fp_op>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>")
  
--- 5495,5521 ----
  ;; Split a predicated instruction whose predicate is unused into an
  ;; unpredicated instruction.
  (define_split
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
  	   (match_operand:SI 4 "aarch64_sve_gp_strictness")
! 	   (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	   (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	  <SVE_COND_FP>))]
    "TARGET_SVE
     && reload_completed
     && INTVAL (operands[4]) == SVE_RELAXED_GP"
    [(set (match_dup 0)
! 	(SVE_UNPRED_FP_BINARY:SVE_FULL_F_B16B16 (match_dup 2) (match_dup 3)))]
  )
  
  ;; Unpredicated floating-point binary operations (post-RA only).
  ;; These are generated by the split above.
  (define_insn "*post_ra_<sve_fp_op><mode>3"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand" "=w")
! 	(SVE_UNPRED_FP_BINARY:SVE_FULL_F_B16B16
! 	  (match_operand:SVE_FULL_F_B16B16 1 "register_operand" "w")
! 	  (match_operand:SVE_FULL_F_B16B16 2 "register_operand" "w")))]
    "TARGET_SVE && reload_completed"
    "<b><sve_fp_op>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>")
  
***************
*** 5557,5568 ****
  ;; Unpredicated floating-point binary operations that need to be predicated
  ;; for SVE.
  (define_expand "<optab><mode>3"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_dup 3)
  	   (const_int SVE_RELAXED_GP)
! 	   (match_operand:SVE_FULL_F_BF 1 "<sve_pred_fp_rhs1_operand>")
! 	   (match_operand:SVE_FULL_F_BF 2 "<sve_pred_fp_rhs2_operand>")]
  	  SVE_COND_FP_BINARY_OPTAB))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
    {
--- 5559,5570 ----
  ;; Unpredicated floating-point binary operations that need to be predicated
  ;; for SVE.
  (define_expand "<optab><mode>3"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_dup 3)
  	   (const_int SVE_RELAXED_GP)
! 	   (match_operand:SVE_FULL_F_B16B16 1 "<sve_pred_fp_rhs1_operand>")
! 	   (match_operand:SVE_FULL_F_B16B16 2 "<sve_pred_fp_rhs2_operand>")]
  	  SVE_COND_FP_BINARY_OPTAB))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
    {
***************
*** 5589,5618 ****
  
  ;; Predicated floating-point operations with merging.
  (define_expand "@cond_<optab><mode>"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "<sve_pred_fp_rhs1_operand>")
! 	      (match_operand:SVE_FULL_F_BF 3 "<sve_pred_fp_rhs2_operand>")]
  	     SVE_COND_FP_BINARY)
! 	   (match_operand:SVE_FULL_F_BF 4 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
  )
  
  ;; Predicated floating-point operations, merging with the first input.
  (define_insn_and_rewrite "*cond_<optab><mode>_2_relaxed"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_operand 4)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 2)]
  	  UNSPEC_SEL))]
--- 5591,5620 ----
  
  ;; Predicated floating-point operations with merging.
  (define_expand "@cond_<optab><mode>"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "<sve_pred_fp_rhs1_operand>")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "<sve_pred_fp_rhs2_operand>")]
  	     SVE_COND_FP_BINARY)
! 	   (match_operand:SVE_FULL_F_B16B16 4 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
  )
  
  ;; Predicated floating-point operations, merging with the first input.
  (define_insn_and_rewrite "*cond_<optab><mode>_2_relaxed"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_operand 4)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 2)]
  	  UNSPEC_SEL))]
***************
*** 5628,5641 ****
  )
  
  (define_insn "*cond_<optab><mode>_2_strict"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 2)]
  	  UNSPEC_SEL))]
--- 5630,5643 ----
  )
  
  (define_insn "*cond_<optab><mode>_2_strict"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 2)]
  	  UNSPEC_SEL))]
***************
*** 5691,5704 ****
  
  ;; Predicated floating-point operations, merging with the second input.
  (define_insn_and_rewrite "*cond_<optab><mode>_3_relaxed"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_operand 4)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 3)]
  	  UNSPEC_SEL))]
--- 5693,5706 ----
  
  ;; Predicated floating-point operations, merging with the second input.
  (define_insn_and_rewrite "*cond_<optab><mode>_3_relaxed"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_operand 4)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 3)]
  	  UNSPEC_SEL))]
***************
*** 5714,5727 ****
  )
  
  (define_insn "*cond_<optab><mode>_3_strict"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 3)]
  	  UNSPEC_SEL))]
--- 5716,5729 ----
  )
  
  (define_insn "*cond_<optab><mode>_3_strict"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
  	   (match_dup 3)]
  	  UNSPEC_SEL))]
***************
*** 5734,5749 ****
  
  ;; Predicated floating-point operations, merging with an independent value.
  (define_insn_and_rewrite "*cond_<optab><mode>_any_relaxed"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_operand 5)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
! 	   (match_operand:SVE_FULL_F_BF 4 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
--- 5736,5751 ----
  
  ;; Predicated floating-point operations, merging with an independent value.
  (define_insn_and_rewrite "*cond_<optab><mode>_any_relaxed"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_operand 5)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
! 	   (match_operand:SVE_FULL_F_B16B16 4 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
***************
*** 5778,5793 ****
  )
  
  (define_insn_and_rewrite "*cond_<optab><mode>_any_strict"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
! 	   (match_operand:SVE_FULL_F_BF 4 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
--- 5780,5795 ----
  )
  
  (define_insn_and_rewrite "*cond_<optab><mode>_any_strict"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	     SVE_COND_FP_BINARY)
! 	   (match_operand:SVE_FULL_F_B16B16 4 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
***************
*** 6651,6663 ****
  
  ;; Unpredicated multiplication by selected lanes.
  (define_insn "@aarch64_mul_lane_<mode>"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand" "=w")
! 	(mult:SVE_FULL_F_BF
! 	  (unspec:SVE_FULL_F_BF
! 	    [(match_operand:SVE_FULL_F_BF 2 "register_operand" "<sve_lane_con>")
  	     (match_operand:SI 3 "const_int_operand")]
  	    UNSPEC_SVE_LANE_SELECT)
! 	  (match_operand:SVE_FULL_F_BF 1 "register_operand" "w")))]
    "TARGET_SVE"
    "<b>fmul\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>[%3]"
  )
--- 6653,6665 ----
  
  ;; Unpredicated multiplication by selected lanes.
  (define_insn "@aarch64_mul_lane_<mode>"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand" "=w")
! 	(mult:SVE_FULL_F_B16B16
! 	  (unspec:SVE_FULL_F_B16B16
! 	    [(match_operand:SVE_FULL_F_B16B16 2 "register_operand" "<sve_lane_con>")
  	     (match_operand:SI 3 "const_int_operand")]
  	    UNSPEC_SVE_LANE_SELECT)
! 	  (match_operand:SVE_FULL_F_B16B16 1 "register_operand" "w")))]
    "TARGET_SVE"
    "<b>fmul\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>[%3]"
  )
***************
*** 6716,6725 ****
  ;; by providing this, but we need to use UNSPECs since rtx logical ops
  ;; aren't defined for floating-point modes.
  (define_insn "*<optab><mode>3"
!   [(set (match_operand:SVE_F 0 "register_operand" "=w")
! 	(unspec:SVE_F
! 	  [(match_operand:SVE_F 1 "register_operand" "w")
! 	   (match_operand:SVE_F 2 "register_operand" "w")]
  	  LOGICALF))]
    "TARGET_SVE"
    "<logicalf_op>\t%0.d, %1.d, %2.d"
--- 6718,6727 ----
  ;; by providing this, but we need to use UNSPECs since rtx logical ops
  ;; aren't defined for floating-point modes.
  (define_insn "*<optab><mode>3"
!   [(set (match_operand:SVE_F_BF 0 "register_operand" "=w")
! 	(unspec:SVE_F_BF
! 	  [(match_operand:SVE_F_BF 1 "register_operand" "w")
! 	   (match_operand:SVE_F_BF 2 "register_operand" "w")]
  	  LOGICALF))]
    "TARGET_SVE"
    "<logicalf_op>\t%0.d, %1.d, %2.d"
***************
*** 7579,7591 ****
  
  ;; Unpredicated floating-point ternary operations.
  (define_expand "<optab><mode>4"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_dup 4)
  	   (const_int SVE_RELAXED_GP)
! 	   (match_operand:SVE_FULL_F_BF 1 "register_operand")
! 	   (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	   (match_operand:SVE_FULL_F_BF 3 "register_operand")]
  	  SVE_COND_FP_TERNARY))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
    {
--- 7581,7593 ----
  
  ;; Unpredicated floating-point ternary operations.
  (define_expand "<optab><mode>4"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_dup 4)
  	   (const_int SVE_RELAXED_GP)
! 	   (match_operand:SVE_FULL_F_B16B16 1 "register_operand")
! 	   (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	   (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
  	  SVE_COND_FP_TERNARY))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
    {
***************
*** 7595,7607 ****
  
  ;; Predicated floating-point ternary operations.
  (define_insn "@aarch64_pred_<optab><mode>"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
  	   (match_operand:SI 5 "aarch64_sve_gp_strictness")
! 	   (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	   (match_operand:SVE_FULL_F_BF 3 "register_operand")
! 	   (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 ]
--- 7597,7609 ----
  
  ;; Predicated floating-point ternary operations.
  (define_insn "@aarch64_pred_<optab><mode>"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
  	   (match_operand:SI 5 "aarch64_sve_gp_strictness")
! 	   (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	   (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
! 	   (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
  	  SVE_COND_FP_TERNARY))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
    {@ [ cons: =0 , 1   , %2  , 3 , 4 ; attrs: movprfx , is_rev ]
***************
*** 7615,7631 ****
  
  ;; Predicated floating-point ternary operations with merging.
  (define_expand "@cond_<optab><mode>"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
! 	   (match_operand:SVE_FULL_F_BF 5 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
  {
--- 7617,7633 ----
  
  ;; Predicated floating-point ternary operations with merging.
  (define_expand "@cond_<optab><mode>"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
! 	   (match_operand:SVE_FULL_F_B16B16 5 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
  {
***************
*** 7684,7698 ****
  ;; Predicated floating-point ternary operations, merging with the
  ;; third input.
  (define_insn_and_rewrite "*cond_<optab><mode>_4_relaxed"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_operand 5)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
  	   (match_dup 4)]
  	  UNSPEC_SEL))]
--- 7686,7700 ----
  ;; Predicated floating-point ternary operations, merging with the
  ;; third input.
  (define_insn_and_rewrite "*cond_<optab><mode>_4_relaxed"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_operand 5)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
  	   (match_dup 4)]
  	  UNSPEC_SEL))]
***************
*** 7708,7722 ****
  )
  
  (define_insn "*cond_<optab><mode>_4_strict"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
  	   (match_dup 4)]
  	  UNSPEC_SEL))]
--- 7710,7724 ----
  )
  
  (define_insn "*cond_<optab><mode>_4_strict"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
  	   (match_dup 4)]
  	  UNSPEC_SEL))]
***************
*** 7730,7746 ****
  ;; Predicated floating-point ternary operations, merging with an
  ;; independent value.
  (define_insn_and_rewrite "*cond_<optab><mode>_any_relaxed"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_operand 6)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
! 	   (match_operand:SVE_FULL_F_BF 5 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
--- 7732,7748 ----
  ;; Predicated floating-point ternary operations, merging with an
  ;; independent value.
  (define_insn_and_rewrite "*cond_<optab><mode>_any_relaxed"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_operand 6)
  	      (const_int SVE_RELAXED_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
! 	   (match_operand:SVE_FULL_F_B16B16 5 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
***************
*** 7776,7792 ****
  )
  
  (define_insn_and_rewrite "*cond_<optab><mode>_any_strict"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_BF 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
! 	   (match_operand:SVE_FULL_F_BF 5 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
--- 7778,7794 ----
  )
  
  (define_insn_and_rewrite "*cond_<optab><mode>_any_strict"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
  	  [(match_operand:<VPRED> 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
  	     [(match_dup 1)
  	      (const_int SVE_STRICT_GP)
! 	      (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
! 	      (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
  	     SVE_COND_FP_TERNARY)
! 	   (match_operand:SVE_FULL_F_B16B16 5 "aarch64_simd_reg_or_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE
     && (<supports_bf16> || !<is_bf16>)
***************
*** 7817,7830 ****
  ;; Unpredicated FMLA and FMLS by selected lanes.  It doesn't seem worth using
  ;; (fma ...) since target-independent code won't understand the indexing.
  (define_insn "@aarch64_<optab>_lane_<mode>"
!   [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
! 	(unspec:SVE_FULL_F_BF
! 	  [(match_operand:SVE_FULL_F_BF 1 "register_operand")
! 	   (unspec:SVE_FULL_F_BF
! 	     [(match_operand:SVE_FULL_F_BF 2 "register_operand")
  	      (match_operand:SI 3 "const_int_operand")]
  	     UNSPEC_SVE_LANE_SELECT)
! 	   (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	  SVE_FP_TERNARY_LANE))]
    "TARGET_SVE"
    {@ [ cons: =0 , 1 , 2              , 4 ; attrs: movprfx ]
--- 7819,7832 ----
  ;; Unpredicated FMLA and FMLS by selected lanes.  It doesn't seem worth using
  ;; (fma ...) since target-independent code won't understand the indexing.
  (define_insn "@aarch64_<optab>_lane_<mode>"
!   [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
! 	(unspec:SVE_FULL_F_B16B16
! 	  [(match_operand:SVE_FULL_F_B16B16 1 "register_operand")
! 	   (unspec:SVE_FULL_F_B16B16
! 	     [(match_operand:SVE_FULL_F_B16B16 2 "register_operand")
  	      (match_operand:SI 3 "const_int_operand")]
  	     UNSPEC_SVE_LANE_SELECT)
! 	   (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
  	  SVE_FP_TERNARY_LANE))]
    "TARGET_SVE"
    {@ [ cons: =0 , 1 , 2              , 4 ; attrs: movprfx ]
***************
*** 9524,9541 ****
  ;; - FCVTZU
  ;; -------------------------------------------------------------------------
  
! ;; Unpredicated conversion of floats to integers of the same size (HF to HI,
! ;; SF to SI or DF to DI).
! (define_expand "<optab><mode><v_int_equiv>2"
!   [(set (match_operand:<V_INT_EQUIV> 0 "register_operand")
! 	(unspec:<V_INT_EQUIV>
  	  [(match_dup 2)
  	   (const_int SVE_RELAXED_GP)
! 	   (match_operand:SVE_FULL_F 1 "register_operand")]
  	  SVE_COND_FCVTI))]
    "TARGET_SVE"
    {
!     operands[2] = aarch64_ptrue_reg (<VPRED>mode);
    }
  )
  
--- 9526,9562 ----
  ;; - FCVTZU
  ;; -------------------------------------------------------------------------
  
! ;; Unpredicated conversion of floats to integers of the same size or wider,
! ;; excluding conversions from DF (see below).
! (define_expand "<optab><SVE_HSF:mode><SVE_HSDI:mode>2"
!   [(set (match_operand:SVE_HSDI 0 "register_operand")
! 	(unspec:SVE_HSDI
! 	  [(match_dup 2)
! 	   (match_dup 3)
! 	   (match_operand:SVE_HSF 1 "register_operand")]
! 	  SVE_COND_FCVTI))]
!   "TARGET_SVE
!    && (~(<SVE_HSDI:self_mask> | <SVE_HSDI:narrower_mask>) & <SVE_HSF:self_mask>) == 0"
!   {
!     operands[2] = aarch64_sve_fp_pred (<SVE_HSDI:MODE>mode, &operands[3]);
!   }
! )
! 
! ;; SI <- DF can't use SI <- trunc (DI <- DF) without -ffast-math, so this
! ;; truncating variant of FCVTZ{S,U} is useful for auto-vectorization.
! ;;
! ;; DF is the only source mode for which the mask used above doesn't apply,
! ;; we define a separate pattern for it here.
! (define_expand "<optab><VNx2DF_ONLY:mode><SVE_2SDI:mode>2"
!   [(set (match_operand:SVE_2SDI 0 "register_operand")
! 	(unspec:SVE_2SDI
  	  [(match_dup 2)
  	   (const_int SVE_RELAXED_GP)
! 	   (match_operand:VNx2DF_ONLY 1 "register_operand")]
  	  SVE_COND_FCVTI))]
    "TARGET_SVE"
    {
!     operands[2] = aarch64_ptrue_reg (VNx2BImode);
    }
  )
  
***************
*** 9554,9571 ****
    }
  )
  
! ;; Predicated narrowing float-to-integer conversion.
! (define_insn "@aarch64_sve_<optab>_trunc<VNx2DF_ONLY:mode><VNx4SI_ONLY:mode>"
!   [(set (match_operand:VNx4SI_ONLY 0 "register_operand")
! 	(unspec:VNx4SI_ONLY
  	  [(match_operand:VNx2BI 1 "register_operand")
  	   (match_operand:SI 3 "aarch64_sve_gp_strictness")
  	   (match_operand:VNx2DF_ONLY 2 "register_operand")]
  	  SVE_COND_FCVTI))]
    "TARGET_SVE"
    {@ [ cons: =0 , 1   , 2 ; attrs: movprfx ]
!      [ w        , Upl , 0 ; *              ] fcvtz<su>\t%0.<VNx4SI_ONLY:Vetype>, %1/m, %2.<VNx2DF_ONLY:Vetype>
!      [ ?&w      , Upl , w ; yes            ] movprfx\t%0, %2\;fcvtz<su>\t%0.<VNx4SI_ONLY:Vetype>, %1/m, %2.<VNx2DF_ONLY:Vetype>
    }
  )
  
--- 9575,9611 ----
    }
  )
  
! ;; As above, for pairs used by the auto-vectorizer only.
! (define_insn "*aarch64_sve_<optab>_nontrunc<SVE_PARTIAL_F:mode><SVE_HSDI:mode>"
!   [(set (match_operand:SVE_HSDI 0 "register_operand")
! 	(unspec:SVE_HSDI
! 	  [(match_operand:<SVE_HSDI:VPRED> 1 "aarch64_predicate_operand")
! 	   (match_operand:SI 3 "aarch64_sve_gp_strictness")
! 	   (match_operand:SVE_PARTIAL_F 2 "register_operand")]
! 	  SVE_COND_FCVTI))]
!    "TARGET_SVE
!    && (~(<SVE_HSDI:self_mask> | <SVE_HSDI:narrower_mask>) & <SVE_PARTIAL_F:self_mask>) == 0"
!   {@ [ cons: =0 , 1   , 2 ; attrs: movprfx ]
!      [ w        , Upl , 0 ; *              ] fcvtz<su>\t%0.<SVE_HSDI:Vetype>, %1/m, %2.<SVE_PARTIAL_F:Vetype>
!      [ ?&w      , Upl , w ; yes            ] movprfx\t%0, %2\;fcvtz<su>\t%0.<SVE_HSDI:Vetype>, %1/m, %2.<SVE_PARTIAL_F:Vetype>
!   }
! )
! 
! ;; Predicated narrowing float-to-integer conversion.  The VNx2DF->VNx4SI
! ;; variant is provided for the ACLE, where the zeroed odd-indexed lanes are
! ;; significant.  The VNx2DF->VNx2SI variant is provided for auto-vectorization,
! ;; where the upper 32 bits of each container are ignored.
! (define_insn "@aarch64_sve_<optab>_trunc<VNx2DF_ONLY:mode><SVE_SI:mode>"
!   [(set (match_operand:SVE_SI 0 "register_operand")
! 	(unspec:SVE_SI
  	  [(match_operand:VNx2BI 1 "register_operand")
  	   (match_operand:SI 3 "aarch64_sve_gp_strictness")
  	   (match_operand:VNx2DF_ONLY 2 "register_operand")]
  	  SVE_COND_FCVTI))]
    "TARGET_SVE"
    {@ [ cons: =0 , 1   , 2 ; attrs: movprfx ]
!      [ w        , Upl , 0 ; *              ] fcvtz<su>\t%0.<SVE_SI:Vetype>, %1/m, %2.<VNx2DF_ONLY:Vetype>
!      [ ?&w      , Upl , w ; yes            ] movprfx\t%0, %2\;fcvtz<su>\t%0.<SVE_SI:Vetype>, %1/m, %2.<VNx2DF_ONLY:Vetype>
    }
  )
  
***************
*** 9710,9727 ****
  ;; - UCVTF
  ;; -------------------------------------------------------------------------
  
! ;; Unpredicated conversion of integers to floats of the same size
! ;; (HI to HF, SI to SF or DI to DF).
! (define_expand "<optab><v_int_equiv><mode>2"
!   [(set (match_operand:SVE_FULL_F 0 "register_operand")
! 	(unspec:SVE_FULL_F
  	  [(match_dup 2)
! 	   (const_int SVE_RELAXED_GP)
! 	   (match_operand:<V_INT_EQUIV> 1 "register_operand")]
  	  SVE_COND_ICVTF))]
!   "TARGET_SVE"
    {
!     operands[2] = aarch64_ptrue_reg (<VPRED>mode);
    }
  )
  
--- 9750,9768 ----
  ;; - UCVTF
  ;; -------------------------------------------------------------------------
  
! ;; Unpredicated conversion of integers to floats of the same size or
! ;; narrower.
! (define_expand "<optab><SVE_HSDI:mode><SVE_F:mode>2"
!   [(set (match_operand:SVE_F 0 "register_operand")
! 	(unspec:SVE_F
  	  [(match_dup 2)
! 	   (match_dup 3)
! 	   (match_operand:SVE_HSDI 1 "register_operand")]
  	  SVE_COND_ICVTF))]
!   "TARGET_SVE
!    && (~(<SVE_HSDI:self_mask> | <SVE_HSDI:narrower_mask>) & <SVE_F:self_mask>) == 0"
    {
!     operands[2] = aarch64_sve_fp_pred (<SVE_HSDI:MODE>mode, &operands[3]);
    }
  )
  
***************
*** 9741,9746 ****
--- 9782,9803 ----
    }
  )
  
+ ;; As above, for pairs that are used by the auto-vectorizer only.
+ (define_insn "*aarch64_sve_<optab>_nonextend<SVE_HSDI:mode><SVE_PARTIAL_F:mode>"
+   [(set (match_operand:SVE_PARTIAL_F 0 "register_operand")
+ 	(unspec:SVE_PARTIAL_F
+ 	  [(match_operand:<SVE_HSDI:VPRED> 1 "aarch64_predicate_operand")
+ 	   (match_operand:SI 3 "aarch64_sve_gp_strictness")
+ 	   (match_operand:SVE_HSDI 2 "register_operand")]
+ 	  SVE_COND_ICVTF))]
+   "TARGET_SVE
+    && (~(<SVE_HSDI:self_mask> | <SVE_HSDI:narrower_mask>) & <SVE_PARTIAL_F:self_mask>) == 0"
+   {@ [ cons: =0 , 1   , 2 ; attrs: movprfx ]
+      [ w        , Upl , 0 ; *              ] <su>cvtf\t%0.<SVE_PARTIAL_F:Vetype>, %1/m, %2.<SVE_HSDI:Vetype>
+      [ ?&w      , Upl , w ; yes            ] movprfx\t%0, %2\;<su>cvtf\t%0.<SVE_PARTIAL_F:Vetype>, %1/m, %2.<SVE_HSDI:Vetype>
+   }
+ )
+ 
  ;; Predicated widening integer-to-float conversion.
  (define_insn "@aarch64_sve_<optab>_extend<VNx4SI_ONLY:mode><VNx2DF_ONLY:mode>"
    [(set (match_operand:VNx2DF_ONLY 0 "register_operand")
***************
*** 9924,9929 ****
--- 9981,10007 ----
    }
  )
  
+ ;; -------------------------------------------------------------------------
+ ;; ---- [FP<-FP] Truncating conversions
+ ;; -------------------------------------------------------------------------
+ ;; Includes:
+ ;; - FCVT
+ ;; -------------------------------------------------------------------------
+ 
+ ;; Unpredicated float-to-float truncation.
+ (define_expand "trunc<SVE_SDF:mode><SVE_PARTIAL_HSF:mode>2"
+   [(set (match_operand:SVE_PARTIAL_HSF 0 "register_operand")
+        (unspec:SVE_PARTIAL_HSF
+          [(match_dup 2)
+           (match_dup 3)
+           (match_operand:SVE_SDF 1 "register_operand")]
+          SVE_COND_FCVT))]
+   "TARGET_SVE && (~<SVE_SDF:narrower_mask> & <SVE_PARTIAL_HSF:self_mask>) == 0"
+   {
+     operands[2] = aarch64_sve_fp_pred (<SVE_SDF:MODE>mode, &operands[3]);
+   }
+ )
+ 
  ;; Predicated float-to-float truncation.
  (define_insn "@aarch64_sve_<optab>_trunc<SVE_FULL_SDF:mode><SVE_FULL_HSF:mode>"
    [(set (match_operand:SVE_FULL_HSF 0 "register_operand")
***************
*** 9939,9944 ****
--- 10017,10037 ----
    }
  )
  
+ ;; As above, for pairs that are used by the auto-vectorizer only.
+ (define_insn "*aarch64_sve_<optab>_trunc<SVE_SDF:mode><SVE_PARTIAL_HSF:mode>"
+   [(set (match_operand:SVE_PARTIAL_HSF 0 "register_operand")
+        (unspec:SVE_PARTIAL_HSF
+          [(match_operand:<SVE_SDF:VPRED> 1 "aarch64_predicate_operand")
+           (match_operand:SI 3 "aarch64_sve_gp_strictness")
+           (match_operand:SVE_SDF 2 "register_operand")]
+          SVE_COND_FCVT))]
+   "TARGET_SVE && (~<SVE_SDF:narrower_mask> & <SVE_PARTIAL_HSF:self_mask>) == 0"
+   {@ [ cons: =0 , 1   , 2 ; attrs: movprfx ]
+      [ w        , Upl , 0 ; *              ] fcvt\t%0.<SVE_PARTIAL_HSF:Vetype>, %1/m, %2.<SVE_SDF:Vetype>
+      [ ?&w      , Upl , w ; yes            ] movprfx\t%0, %2\;fcvt\t%0.<SVE_PARTIAL_HSF:Vetype>, %1/m, %2.<SVE_SDF:Vetype>
+   }
+ )
+ 
  ;; Predicated float-to-float truncation with merging.
  (define_expand "@cond_<optab>_trunc<SVE_FULL_SDF:mode><SVE_FULL_HSF:mode>"
    [(set (match_operand:SVE_FULL_HSF 0 "register_operand")
***************
*** 10081,10086 ****
--- 10174,10200 ----
    }
  )
  
+ ;; -------------------------------------------------------------------------
+ ;; ---- [FP<-FP] Extending conversions
+ ;; -------------------------------------------------------------------------
+ ;; Includes:
+ ;; - FCVT
+ ;; -------------------------------------------------------------------------
+ 
+ ;; Unpredicated float-to-float extension.
+ (define_expand "extend<SVE_PARTIAL_HSF:mode><SVE_SDF:mode>2"
+   [(set (match_operand:SVE_SDF 0 "register_operand")
+        (unspec:SVE_SDF
+          [(match_dup 2)
+           (match_dup 3)
+           (match_operand:SVE_PARTIAL_HSF 1 "register_operand")]
+          SVE_COND_FCVT))]
+   "TARGET_SVE && (~<SVE_SDF:narrower_mask> & <SVE_PARTIAL_HSF:self_mask>) == 0"
+   {
+     operands[2] = aarch64_sve_fp_pred (<SVE_SDF:MODE>mode, &operands[3]);
+   }
+ )
+ 
  ;; Predicated float-to-float extension.
  (define_insn "@aarch64_sve_<optab>_nontrunc<SVE_FULL_HSF:mode><SVE_FULL_SDF:mode>"
    [(set (match_operand:SVE_FULL_SDF 0 "register_operand")
***************
*** 10096,10101 ****
--- 10210,10230 ----
    }
  )
  
+ ;; As above, for pairs that are used by the auto-vectorizer only.
+ (define_insn "*aarch64_sve_<optab>_nontrunc<SVE_PARTIAL_HSF:mode><SVE_SDF:mode>"
+   [(set (match_operand:SVE_SDF 0 "register_operand")
+ 	(unspec:SVE_SDF
+ 	  [(match_operand:<SVE_SDF:VPRED> 1 "aarch64_predicate_operand")
+ 	   (match_operand:SI 3 "aarch64_sve_gp_strictness")
+ 	   (match_operand:SVE_PARTIAL_HSF 2 "register_operand")]
+ 	  SVE_COND_FCVT))]
+   "TARGET_SVE && (~<SVE_SDF:narrower_mask> & <SVE_PARTIAL_HSF:self_mask>) == 0"
+   {@ [ cons: =0 , 1   , 2 ; attrs: movprfx ]
+      [ w        , Upl , 0 ; *              ] fcvt\t%0.<SVE_SDF:Vetype>, %1/m, %2.<SVE_PARTIAL_HSF:Vetype>
+      [ ?&w      , Upl , w ; yes            ] movprfx\t%0, %2\;fcvt\t%0.<SVE_SDF:Vetype>, %1/m, %2.<SVE_PARTIAL_HSF:Vetype>
+   }
+ )
+ 
  ;; Predicated float-to-float extension with merging.
  (define_expand "@cond_<optab>_nontrunc<SVE_FULL_HSF:mode><SVE_FULL_SDF:mode>"
    [(set (match_operand:SVE_FULL_SDF 0 "register_operand")
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/aarch64.cc gcc-16-20250622/gcc/config/aarch64/aarch64.cc
*** gcc-16-20250615/gcc/config/aarch64/aarch64.cc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config/aarch64/aarch64.cc	Sun Jun 22 22:32:19 2025
***************
*** 83,88 ****
--- 83,89 ----
  #include "rtlanal.h"
  #include "tree-dfa.h"
  #include "asan.h"
+ #include "aarch64-elf-metadata.h"
  #include "aarch64-feature-deps.h"
  #include "config/arm/aarch-common.h"
  #include "config/arm/aarch-common-protos.h"
***************
*** 108,113 ****
--- 109,118 ----
     and 1 MOVI/DUP (same size as a call).  */
  #define MAX_SET_SIZE(speed) (speed ? 256 : 96)
  
+ #ifndef HAVE_AS_AEABI_BUILD_ATTRIBUTES
+ #define HAVE_AS_AEABI_BUILD_ATTRIBUTES 0
+ #endif
+ 
  /* Flags that describe how a function shares certain architectural state
     with its callers.
  
*************** aarch64_sve_same_pred_for_ptest_p (rtx *
*** 3855,3860 ****
--- 3860,3903 ----
    return (ptrue1_p && ptrue2_p) || rtx_equal_p (pred1[0], pred2[0]);
  }
  
+ 
+ /* Generate a predicate to control partial SVE mode DATA_MODE as if it
+    were fully packed, enabling the defined elements only.  */
+ rtx
+ aarch64_sve_packed_pred (machine_mode data_mode)
+ {
+   unsigned int container_bytes
+     = aarch64_sve_container_bits (data_mode) / BITS_PER_UNIT;
+   /* Enable the significand of each container only.  */
+   rtx ptrue = force_reg (VNx16BImode, aarch64_ptrue_all (container_bytes));
+   /* Predicate at the element size.  */
+   machine_mode pmode
+     = aarch64_sve_pred_mode (GET_MODE_UNIT_SIZE (data_mode)).require ();
+   return gen_lowpart (pmode, ptrue);
+ }
+ 
+ /* Generate a predicate and strictness value to govern a floating-point
+    operation with SVE mode DATA_MODE.
+ 
+    If DATA_MODE is a partial vector mode, this pair prevents the operation
+    from interpreting undefined elements - unless we don't need to suppress
+    their trapping behavior.  */
+ rtx
+ aarch64_sve_fp_pred (machine_mode data_mode, rtx *strictness)
+ {
+    unsigned int vec_flags = aarch64_classify_vector_mode (data_mode);
+    if (flag_trapping_math && (vec_flags & VEC_PARTIAL))
+      {
+        if (strictness)
+ 	 *strictness = gen_int_mode (SVE_STRICT_GP, SImode);
+        return aarch64_sve_packed_pred (data_mode);
+      }
+    if (strictness)
+      *strictness = gen_int_mode (SVE_RELAXED_GP, SImode);
+    /* Use the VPRED mode.  */
+    return aarch64_ptrue_reg (aarch64_sve_pred_mode (data_mode));
+ }
+ 
  /* Emit a comparison CMP between OP0 and OP1, both of which have mode
     DATA_MODE, and return the result in a predicate of mode PRED_MODE.
     Use TARGET as the target register if nonnull and convenient.  */
*************** aarch_bti_j_insn_p (rtx_insn *insn)
*** 8756,8761 ****
--- 8799,8811 ----
    return GET_CODE (pat) == UNSPEC_VOLATILE && XINT (pat, 1) == UNSPECV_BTI_J;
  }
  
+ /* Return TRUE if Pointer Authentication for the return address is enabled.  */
+ bool
+ aarch64_pacret_enabled (void)
+ {
+   return (aarch_ra_sign_scope != AARCH_FUNCTION_NONE);
+ }
+ 
  /* Return TRUE if Guarded Control Stack is enabled.  */
  bool
  aarch64_gcs_enabled (void)
*************** aarch64_simd_shift_imm_p (rtx x, machine
*** 23685,23690 ****
--- 23735,23753 ----
      return IN_RANGE (INTVAL (x), 1, bit_width);
  }
  
+ 
+ /* Check whether X can control SVE mode MODE.  */
+ bool
+ aarch64_sve_valid_pred_p (rtx x, machine_mode mode)
+ {
+   machine_mode pred_mode = GET_MODE (x);
+   if (!aarch64_sve_pred_mode_p (pred_mode))
+     return false;
+ 
+   return known_ge (GET_MODE_NUNITS (pred_mode),
+ 		   GET_MODE_NUNITS (mode));
+ }
+ 
  /* Return the bitmask CONST_INT to select the bits required by a zero extract
     operation of width WIDTH at bit position POS.  */
  
*************** seq_cost_ignoring_scalar_moves (const rt
*** 24658,24663 ****
--- 24721,24748 ----
    return cost;
  }
  
+ /* *VECTOR is an Advanced SIMD structure mode and *INDEX is a constant index
+    into it.  Narrow *VECTOR and *INDEX so that they reference a single vector
+    of mode SUBVEC_MODE.  IS_DEST is true if *VECTOR is a destination operand,
+    false if it is a source operand.  */
+ 
+ void
+ aarch64_decompose_vec_struct_index (machine_mode subvec_mode,
+ 				    rtx *vector, rtx *index, bool is_dest)
+ {
+   auto elts_per_vector = GET_MODE_NUNITS (subvec_mode).to_constant ();
+   auto subvec = UINTVAL (*index) / elts_per_vector;
+   auto subelt = UINTVAL (*index) % elts_per_vector;
+   auto subvec_byte = subvec * GET_MODE_SIZE (subvec_mode);
+   if (is_dest)
+     *vector = simplify_gen_subreg (subvec_mode, *vector, GET_MODE (*vector),
+ 				   subvec_byte);
+   else
+     *vector = force_subreg (subvec_mode, *vector, GET_MODE (*vector),
+ 			    subvec_byte);
+   *index = gen_int_mode (subelt, SImode);
+ }
+ 
  /* Expand a vector initialization sequence, such that TARGET is
     initialized to contain VALS.  */
  
*************** aarch64_start_file (void)
*** 25333,25339 ****
  }
  
  /* Emit load exclusive.  */
- 
  static void
  aarch64_emit_load_exclusive (machine_mode mode, rtx rval,
  			     rtx mem, rtx model_rtx)
--- 25418,25423 ----
*************** aarch64_can_tag_addresses ()
*** 29964,30023 ****
  
  /* Implement TARGET_ASM_FILE_END for AArch64.  This adds the AArch64 GNU NOTE
     section at the end if needed.  */
- #define GNU_PROPERTY_AARCH64_FEATURE_1_AND	0xc0000000
- #define GNU_PROPERTY_AARCH64_FEATURE_1_BTI	(1U << 0)
- #define GNU_PROPERTY_AARCH64_FEATURE_1_PAC	(1U << 1)
- #define GNU_PROPERTY_AARCH64_FEATURE_1_GCS	(1U << 2)
  void
  aarch64_file_end_indicate_exec_stack ()
  {
    file_end_indicate_exec_stack ();
  
!   unsigned feature_1_and = 0;
!   if (aarch_bti_enabled ())
!     feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_BTI;
! 
!   if (aarch_ra_sign_scope != AARCH_FUNCTION_NONE)
!     feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_PAC;
! 
!   if (aarch64_gcs_enabled ())
!     feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
! 
!   if (feature_1_and)
      {
!       /* Generate .note.gnu.property section.  */
!       switch_to_section (get_section (".note.gnu.property",
! 				      SECTION_NOTYPE, NULL));
  
!       /* PT_NOTE header: namesz, descsz, type.
! 	 namesz = 4 ("GNU\0")
! 	 descsz = 16 (Size of the program property array)
! 		  [(12 + padding) * Number of array elements]
! 	 type   = 5 (NT_GNU_PROPERTY_TYPE_0).  */
!       assemble_align (POINTER_SIZE);
!       assemble_integer (GEN_INT (4), 4, 32, 1);
!       assemble_integer (GEN_INT (ROUND_UP (12, POINTER_BYTES)), 4, 32, 1);
!       assemble_integer (GEN_INT (5), 4, 32, 1);
  
!       /* PT_NOTE name.  */
!       assemble_string ("GNU", 4);
  
!       /* PT_NOTE contents for NT_GNU_PROPERTY_TYPE_0:
! 	 type   = GNU_PROPERTY_AARCH64_FEATURE_1_AND
! 	 datasz = 4
! 	 data   = feature_1_and.  */
!       assemble_integer (GEN_INT (GNU_PROPERTY_AARCH64_FEATURE_1_AND), 4, 32, 1);
!       assemble_integer (GEN_INT (4), 4, 32, 1);
!       assemble_integer (GEN_INT (feature_1_and), 4, 32, 1);
  
!       /* Pad the size of the note to the required alignment.  */
!       assemble_align (POINTER_SIZE);
      }
  }
- #undef GNU_PROPERTY_AARCH64_FEATURE_1_GCS
- #undef GNU_PROPERTY_AARCH64_FEATURE_1_PAC
- #undef GNU_PROPERTY_AARCH64_FEATURE_1_BTI
- #undef GNU_PROPERTY_AARCH64_FEATURE_1_AND
  
  /* Helper function for straight line speculation.
     Return what barrier should be emitted for straight line speculation
--- 30048,30090 ----
  
  /* Implement TARGET_ASM_FILE_END for AArch64.  This adds the AArch64 GNU NOTE
     section at the end if needed.  */
  void
  aarch64_file_end_indicate_exec_stack ()
  {
    file_end_indicate_exec_stack ();
  
!   /* Check whether the current assembler supports AEABI build attributes, if
!      not fallback to .note.gnu.property section.  */
!   if (HAVE_AS_AEABI_BUILD_ATTRIBUTES)
      {
!       using namespace aarch64;
!       aeabi_subsection<BA_TagFeature_t, bool, 3>
! 	aeabi_subsec ("aeabi_feature_and_bits", true);
  
!       aeabi_subsec.append (
! 	make_aeabi_attribute (Tag_Feature_BTI, aarch_bti_enabled ()));
!       aeabi_subsec.append (
! 	make_aeabi_attribute (Tag_Feature_PAC, aarch64_pacret_enabled ()));
!       aeabi_subsec.append (
! 	make_aeabi_attribute (Tag_Feature_GCS, aarch64_gcs_enabled ()));
  
!       if (!aeabi_subsec.empty ())
! 	aeabi_subsec.write (asm_out_file);
!     }
!   else
!     {
!       aarch64::section_note_gnu_property gnu_properties;
  
!       if (aarch_bti_enabled ())
! 	gnu_properties.bti_enabled ();
!       if (aarch64_pacret_enabled ())
! 	gnu_properties.pac_enabled ();
!       if (aarch64_gcs_enabled ())
! 	gnu_properties.gcs_enabled ();
  
!       gnu_properties.write ();
      }
  }
  
  /* Helper function for straight line speculation.
     Return what barrier should be emitted for straight line speculation
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/iterators.md gcc-16-20250622/gcc/config/aarch64/iterators.md
*** gcc-16-20250615/gcc/config/aarch64/iterators.md	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config/aarch64/iterators.md	Sun Jun 22 22:32:19 2025
***************
*** 479,491 ****
  ;; All fully-packed SVE integer and Advanced SIMD integer modes.
  (define_mode_iterator SVE_ASIMD_FULL_I [SVE_FULL_I VDQ_I])
  
! ;; All fully-packed SVE floating-point vector modes.
  (define_mode_iterator SVE_FULL_F [VNx8HF VNx4SF VNx2DF])
  
  ;; Fully-packed SVE floating-point vector modes and their scalar equivalents.
  (define_mode_iterator SVE_FULL_F_SCALAR [SVE_FULL_F GPF_HF])
  
! (define_mode_iterator SVE_FULL_F_BF [(VNx8BF "TARGET_SSVE_B16B16") SVE_FULL_F])
  
  ;; Modes for which (B)FCLAMP is supported.
  (define_mode_iterator SVE_CLAMP_F [(VNx8BF "TARGET_SSVE_B16B16")
--- 479,503 ----
  ;; All fully-packed SVE integer and Advanced SIMD integer modes.
  (define_mode_iterator SVE_ASIMD_FULL_I [SVE_FULL_I VDQ_I])
  
! ;; Fully-packed SVE floating-point vector modes, excluding BF16.
  (define_mode_iterator SVE_FULL_F [VNx8HF VNx4SF VNx2DF])
  
+ ;; Partial SVE floating-point vector modes, excluding BF16.
+ (define_mode_iterator SVE_PARTIAL_F [VNx2HF VNx4HF VNx2SF])
+ 
+ ;; SVE floating-point vector modes, excluding BF16.
+ (define_mode_iterator SVE_F [SVE_PARTIAL_F SVE_FULL_F])
+ 
  ;; Fully-packed SVE floating-point vector modes and their scalar equivalents.
  (define_mode_iterator SVE_FULL_F_SCALAR [SVE_FULL_F GPF_HF])
  
! (define_mode_iterator SVE_FULL_F_B16B16 [(VNx8BF "TARGET_SSVE_B16B16") SVE_FULL_F])
! 
! (define_mode_iterator SVE_PARTIAL_F_B16B16 [(VNx2BF "TARGET_SSVE_B16B16")
! 					    (VNx4BF "TARGET_SSVE_B16B16")
! 					    SVE_PARTIAL_F])
! 
! (define_mode_iterator SVE_F_B16B16 [SVE_PARTIAL_F_B16B16 SVE_FULL_F_B16B16])
  
  ;; Modes for which (B)FCLAMP is supported.
  (define_mode_iterator SVE_CLAMP_F [(VNx8BF "TARGET_SSVE_B16B16")
***************
*** 529,534 ****
--- 541,553 ----
  ;; elements.
  (define_mode_iterator SVE_FULL_HSF [VNx8HF VNx4SF])
  
+ ;; Partial SVE floating-point vector modes that have 16-bit or 32-bit
+ ;; elements.
+ (define_mode_iterator SVE_PARTIAL_HSF [VNx2HF VNx4HF VNx2SF])
+ 
+ ;; SVE floating-point vector modes that have 16-bit or 32-bit elements.
+ (define_mode_iterator SVE_HSF [SVE_PARTIAL_HSF SVE_FULL_HSF])
+ 
  ;; Fully-packed SVE integer vector modes that have 16-bit or 64-bit elements.
  (define_mode_iterator SVE_FULL_HDI [VNx8HI VNx2DI])
  
***************
*** 553,558 ****
--- 572,580 ----
  (define_mode_iterator SVE_MATMULF [(VNx4SF "TARGET_SVE_F32MM")
  				   (VNx2DF "TARGET_SVE_F64MM")])
  
+ ;; SVE floating-point vector modes that have 32-bit or 64-bit elements.
+ (define_mode_iterator SVE_SDF [VNx2SF SVE_FULL_SDF])
+ 
  ;; Fully-packed SVE vector modes that have 32-bit or smaller elements.
  (define_mode_iterator SVE_FULL_BHS [VNx16QI VNx8HI VNx4SI
  				    VNx8BF VNx8HF VNx4SF])
***************
*** 580,593 ****
  			     VNx4SI VNx2SI
  			     VNx2DI])
  
  ;; All SVE floating-point vector modes.
! (define_mode_iterator SVE_F [VNx8HF VNx4HF VNx2HF
! 			     VNx8BF VNx4BF VNx2BF
! 			     VNx4SF VNx2SF
! 			     VNx2DF])
  
  ;; All SVE vector modes.
! (define_mode_iterator SVE_ALL [SVE_I SVE_F])
  
  ;; All SVE 2-vector modes.
  (define_mode_iterator SVE_FULLx2 [VNx32QI VNx16HI VNx8SI VNx4DI
--- 602,614 ----
  			     VNx4SI VNx2SI
  			     VNx2DI])
  
+ (define_mode_iterator SVE_BF [VNx2BF VNx4BF VNx8BF])
+ 
  ;; All SVE floating-point vector modes.
! (define_mode_iterator SVE_F_BF [SVE_F SVE_BF])
  
  ;; All SVE vector modes.
! (define_mode_iterator SVE_ALL [SVE_I SVE_F_BF])
  
  ;; All SVE 2-vector modes.
  (define_mode_iterator SVE_FULLx2 [VNx32QI VNx16HI VNx8SI VNx4DI
***************
*** 623,628 ****
--- 644,652 ----
  				VNx4SI VNx2SI
  				VNx2DI])
  
+ ;; SVE integer vector modes with 32-bit elements.
+ (define_mode_iterator SVE_SI [VNx2SI VNx4SI])
+ 
  (define_mode_iterator SVE_DIx24 [VNx4DI VNx8DI])
  
  ;; SVE modes with 2 or 4 elements.
***************
*** 638,643 ****
--- 662,670 ----
  (define_mode_iterator SVE_2 [VNx2QI VNx2HI VNx2HF VNx2BF
  			     VNx2SI VNx2SF VNx2DI VNx2DF])
  
+ ;; SVE SI and DI modes with 2 elements.
+ (define_mode_iterator SVE_2SDI [VNx2SI VNx2DI])
+ 
  ;; SVE integer modes with 2 elements, excluding the widest element.
  (define_mode_iterator SVE_2BHSI [VNx2QI VNx2HI VNx2SI])
  
***************
*** 1678,1683 ****
--- 1705,1734 ----
  		       (SI   "SI") (HI    "HI")
  		       (QI   "QI")
  		       (V4BF "BF") (V8BF "BF")
+ 		       (V2x8QI "QI") (V2x4HI "HI")
+ 		       (V2x2SI "SI") (V2x1DI "DI")
+ 		       (V2x4HF "HF") (V2x2SF "SF")
+ 		       (V2x1DF "DF") (V2x4BF "BF")
+ 		       (V3x8QI "QI") (V3x4HI "HI")
+ 		       (V3x2SI "SI") (V3x1DI "DI")
+ 		       (V3x4HF "HF") (V3x2SF "SF")
+ 		       (V3x1DF "DF") (V3x4BF "BF")
+ 		       (V4x8QI "QI") (V4x4HI "HI")
+ 		       (V4x2SI "SI") (V4x1DI "DI")
+ 		       (V4x4HF "HF") (V4x2SF "SF")
+ 		       (V4x1DF "DF") (V4x4BF "BF")
+ 		       (V2x16QI "QI") (V2x8HI "HI")
+ 		       (V2x4SI "SI") (V2x2DI "DI")
+ 		       (V2x8HF "HF") (V2x4SF "SF")
+ 		       (V2x2DF "DF") (V2x8BF "BF")
+ 		       (V3x16QI "QI") (V3x8HI "HI")
+ 		       (V3x4SI "SI") (V3x2DI "DI")
+ 		       (V3x8HF "HF") (V3x4SF "SF")
+ 		       (V3x2DF "DF") (V3x8BF "BF")
+ 		       (V4x16QI "QI") (V4x8HI "HI")
+ 		       (V4x4SI "SI") (V4x2DI "DI")
+ 		       (V4x8HF "HF") (V4x4SF "SF")
+ 		       (V4x2DF "DF") (V4x8BF "BF")
  		       (VNx16QI "QI") (VNx8QI "QI") (VNx4QI "QI") (VNx2QI "QI")
  		       (VNx8HI "HI") (VNx4HI "HI") (VNx2HI "HI")
  		       (VNx8HF "HF") (VNx4HF "HF") (VNx2HF "HF")
***************
*** 1699,1704 ****
--- 1750,1779 ----
  		       (DF   "df") (SI   "si")
  		       (HI   "hi") (QI   "qi")
  		       (V4BF "bf") (V8BF "bf")
+ 		       (V2x8QI "qi") (V2x4HI "hi")
+ 		       (V2x2SI "si") (V2x1DI "di")
+ 		       (V2x4HF "hf") (V2x2SF "sf")
+ 		       (V2x1DF "df") (V2x4BF "bf")
+ 		       (V3x8QI "qi") (V3x4HI "hi")
+ 		       (V3x2SI "si") (V3x1DI "di")
+ 		       (V3x4HF "hf") (V3x2SF "sf")
+ 		       (V3x1DF "df") (V3x4BF "bf")
+ 		       (V4x8QI "qi") (V4x4HI "hi")
+ 		       (V4x2SI "si") (V4x1DI "di")
+ 		       (V4x4HF "hf") (V4x2SF "sf")
+ 		       (V4x1DF "df") (V4x4BF "bf")
+ 		       (V2x16QI "qi") (V2x8HI "hi")
+ 		       (V2x4SI "si") (V2x2DI "di")
+ 		       (V2x8HF "hf") (V2x4SF "sf")
+ 		       (V2x2DF "df") (V2x8BF "bf")
+ 		       (V3x16QI "qi") (V3x8HI "hi")
+ 		       (V3x4SI "si") (V3x2DI "di")
+ 		       (V3x8HF "hf") (V3x4SF "sf")
+ 		       (V3x2DF "df") (V3x8BF "bf")
+ 		       (V4x16QI "qi") (V4x8HI "hi")
+ 		       (V4x4SI "si") (V4x2DI "di")
+ 		       (V4x8HF "hf") (V4x4SF "sf")
+ 		       (V4x2DF "df") (V4x8BF "bf")
  		       (VNx16QI "qi") (VNx8QI "qi") (VNx4QI "qi") (VNx2QI "qi")
  		       (VNx8HI "hi") (VNx4HI "hi") (VNx2HI "hi")
  		       (VNx8HF "hf") (VNx4HF "hf") (VNx2HF "hf")
***************
*** 2445,2451 ****
  			   (VNx8DI "vnx2di") (VNx8DF "vnx2df")])
  
  ;; The predicate mode associated with an SVE data mode.  For structure modes
! ;; this is equivalent to the <VPRED> of the subvector mode.
  (define_mode_attr VPRED [(VNx16QI "VNx16BI") (VNx8QI "VNx8BI")
  			 (VNx4QI "VNx4BI") (VNx2QI "VNx2BI")
  			 (VNx8HI "VNx8BI") (VNx4HI "VNx4BI") (VNx2HI "VNx2BI")
--- 2520,2528 ----
  			   (VNx8DI "vnx2di") (VNx8DF "vnx2df")])
  
  ;; The predicate mode associated with an SVE data mode.  For structure modes
! ;; this is equivalent to the <VPRED> of the subvector mode.  For partial
! ;; vector modes, this is equivalent to the <VPRED> of a full SVE mode with
! ;; the same number of elements.
  (define_mode_attr VPRED [(VNx16QI "VNx16BI") (VNx8QI "VNx8BI")
  			 (VNx4QI "VNx4BI") (VNx2QI "VNx2BI")
  			 (VNx8HI "VNx8BI") (VNx4HI "VNx4BI") (VNx2HI "VNx2BI")
***************
*** 2583,2601 ****
  (define_mode_attr data_bytes [(VNx16BI "1") (VNx8BI "2")
  			      (VNx4BI "4") (VNx2BI "8")])
  
! ;; Two-nybble mask for partial vector modes: nunits, byte size.
! (define_mode_attr self_mask [(VNx8QI "0x81")
! 			     (VNx4QI "0x41")
! 			     (VNx2QI "0x21")
! 			     (VNx4HI "0x42")
! 			     (VNx2HI "0x22")
! 			     (VNx2SI "0x24")])
  
! ;; For SVE_HSDI vector modes, the mask of narrower modes, encoded as above.
! (define_mode_attr narrower_mask [(VNx8HI "0x81") (VNx4HI "0x41")
! 				 (VNx2HI "0x21")
! 				 (VNx4SI "0x43") (VNx2SI "0x23")
! 				 (VNx2DI "0x27")])
  
  ;; The constraint to use for an SVE [SU]DOT, FMUL, FMLA or FMLS lane index.
  (define_mode_attr sve_lane_con [(VNx8HI "y") (VNx4SI "y") (VNx2DI "x")
--- 2660,2681 ----
  (define_mode_attr data_bytes [(VNx16BI "1") (VNx8BI "2")
  			      (VNx4BI "4") (VNx2BI "8")])
  
! ;; Two-nybble mask for vector modes: nunits, byte size.
! (define_mode_attr self_mask [(VNx2HI "0x22") (VNx2HF "0x22")
! 			     (VNx4HI "0x42") (VNx4HF "0x42")
! 			     (VNx8HI "0x82") (VNx8HF "0x82")
! 			     (VNx2SI "0x24") (VNx2SF "0x24")
! 			     (VNx4SI "0x44") (VNx4SF "0x44")
! 			     (VNx2DI "0x28") (VNx2DF "0x28")
! 			     (VNx8QI "0x81") (VNx4QI "0x41") (VNx2QI "0x21")])
  
! ;; The mask of narrower vector modes, encoded as above.
! (define_mode_attr narrower_mask [(VNx8HI "0x81") (VNx8HF "0x81")
! 				 (VNx4HI "0x41") (VNx4HF "0x41")
! 				 (VNx2HI "0x21") (VNx2HF "0x21")
! 				 (VNx4SI "0x43") (VNx4SF "0x43")
! 				 (VNx2SI "0x23") (VNx2SF "0x23")
! 				 (VNx2DI "0x27") (VNx2DF "0x27")])
  
  ;; The constraint to use for an SVE [SU]DOT, FMUL, FMLA or FMLS lane index.
  (define_mode_attr sve_lane_con [(VNx8HI "y") (VNx4SI "y") (VNx2DI "x")
***************
*** 2611,2623 ****
  				 (V2DI "vec") (DI "offset")])
  
  (define_mode_attr b [(V4BF "b") (V4HF "") (V8BF "b") (V8HF "")
! 		     (VNx8BF "b") (VNx8HF "") (VNx4SF "") (VNx2DF "")
  		     (VNx16BF "b") (VNx16HF "") (VNx8SF "") (VNx4DF "")
  		     (VNx32BF "b") (VNx32HF "") (VNx16SF "") (VNx8DF "")])
  
! (define_mode_attr is_bf16 [(VNx8BF "true")
! 			   (VNx8HF "false")
! 			   (VNx4SF "false")
  			   (VNx2DF "false")])
  
  (define_mode_attr aligned_operand [(VNx16QI "register_operand")
--- 2691,2705 ----
  				 (V2DI "vec") (DI "offset")])
  
  (define_mode_attr b [(V4BF "b") (V4HF "") (V8BF "b") (V8HF "")
! 		     (VNx2BF "b") (VNx2HF "") (VNx2SF "")
! 		     (VNx4BF "b") (VNx4HF "") (VNx4SF "")
! 		     (VNx8BF "b") (VNx8HF "") (VNx2DF "")
  		     (VNx16BF "b") (VNx16HF "") (VNx8SF "") (VNx4DF "")
  		     (VNx32BF "b") (VNx32HF "") (VNx16SF "") (VNx8DF "")])
  
! (define_mode_attr is_bf16 [(VNx2BF "true") (VNx4BF "true") (VNx8BF "true")
! 			   (VNx2HF "false") (VNx4HF "false") (VNx8HF "false")
! 			   (VNx2SF "false") (VNx4SF "false")
  			   (VNx2DF "false")])
  
  (define_mode_attr aligned_operand [(VNx16QI "register_operand")
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/predicates.md gcc-16-20250622/gcc/config/aarch64/predicates.md
*** gcc-16-20250615/gcc/config/aarch64/predicates.md	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config/aarch64/predicates.md	Sun Jun 22 22:32:19 2025
***************
*** 587,592 ****
--- 587,597 ----
    return aarch64_simd_shift_imm_p (op, mode, false);
  })
  
+ (define_special_predicate "aarch64_predicate_operand"
+   (and (match_code "reg,subreg")
+        (match_test "register_operand (op, GET_MODE (op))")
+        (match_test "aarch64_sve_valid_pred_p (op, mode)")))
+ 
  (define_predicate "aarch64_simd_imm_zero"
    (and (match_code "const,const_vector")
         (match_test "op == CONST0_RTX (GET_MODE (op))")))
diff -Nrcpad gcc-16-20250615/gcc/config/aarch64/t-aarch64 gcc-16-20250622/gcc/config/aarch64/t-aarch64
*** gcc-16-20250615/gcc/config/aarch64/t-aarch64	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config/aarch64/t-aarch64	Sun Jun 22 22:32:19 2025
*************** aarch-common.o: $(srcdir)/config/arm/aar
*** 140,145 ****
--- 140,156 ----
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(srcdir)/config/arm/aarch-common.cc
  
+ aarch64-elf-metadata.o: $(srcdir)/config/aarch64/aarch64-elf-metadata.cc \
+     $(CONFIG_H) \
+     $(BACKEND_H) \
+     $(RTL_H) \
+     $(SYSTEM_H) \
+     $(TARGET_H) \
+     $(srcdir)/config/aarch64/aarch64-elf-metadata.h \
+     output.h
+ 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_SPPFLAGS) $(INCLUDES) \
+ 	  $(srcdir)/config/aarch64/aarch64-elf-metadata.cc
+ 
  aarch64-c.o: $(srcdir)/config/aarch64/aarch64-c.cc $(CONFIG_H) $(SYSTEM_H) \
      coretypes.h $(TM_H) $(TREE_H) output.h $(C_COMMON_H) $(TARGET_H)
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
diff -Nrcpad gcc-16-20250615/gcc/config/gcn/gcn.cc gcc-16-20250622/gcc/config/gcn/gcn.cc
*** gcc-16-20250615/gcc/config/gcn/gcn.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/gcn/gcn.cc	Sun Jun 22 22:32:19 2025
*************** gcn_hard_regno_mode_ok (unsigned int reg
*** 585,593 ****
      case XNACK_MASK_HI_REG:
      case TBA_HI_REG:
      case TMA_HI_REG:
-       return mode == SImode;
      case VCC_HI_REG:
!       return false;
      case EXEC_HI_REG:
        return mode == SImode /*|| mode == V32BImode */ ;
      case SCC_REG:
--- 585,592 ----
      case XNACK_MASK_HI_REG:
      case TBA_HI_REG:
      case TMA_HI_REG:
      case VCC_HI_REG:
!       return mode == SImode;
      case EXEC_HI_REG:
        return mode == SImode /*|| mode == V32BImode */ ;
      case SCC_REG:
diff -Nrcpad gcc-16-20250615/gcc/config/i386/i386-expand.cc gcc-16-20250622/gcc/config/i386/i386-expand.cc
*** gcc-16-20250615/gcc/config/i386/i386-expand.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/i386/i386-expand.cc	Sun Jun 22 22:32:19 2025
*************** ix86_expand_set_or_cpymem (rtx dst, rtx
*** 9351,9357 ****
    bool need_zero_guard = false;
    bool noalign;
    machine_mode move_mode = VOIDmode;
-   machine_mode wider_mode;
    int unroll_factor = 1;
    /* TODO: Once value ranges are available, fill in proper data.  */
    unsigned HOST_WIDE_INT min_size = 0;
--- 9351,9356 ----
*************** ix86_expand_set_or_cpymem (rtx dst, rtx
*** 9427,9432 ****
--- 9426,9432 ----
  
    unroll_factor = 1;
    move_mode = word_mode;
+   int nunits;
    switch (alg)
      {
      case libcall:
*************** ix86_expand_set_or_cpymem (rtx dst, rtx
*** 9447,9473 ****
      case vector_loop:
        need_zero_guard = true;
        unroll_factor = 4;
!       /* Find the widest supported mode.  */
!       move_mode = word_mode;
!       while (GET_MODE_WIDER_MODE (move_mode).exists (&wider_mode)
! 	     && optab_handler (mov_optab, wider_mode) != CODE_FOR_nothing)
! 	move_mode = wider_mode;
! 
!       if (TARGET_AVX256_SPLIT_REGS && GET_MODE_BITSIZE (move_mode) > 128)
! 	move_mode = TImode;
!       if (TARGET_AVX512_SPLIT_REGS && GET_MODE_BITSIZE (move_mode) > 256)
! 	move_mode = OImode;
! 
!       /* Find the corresponding vector mode with the same size as MOVE_MODE.
! 	 MOVE_MODE is an integer mode at the moment (SI, DI, TI, etc.).  */
!       if (GET_MODE_SIZE (move_mode) > GET_MODE_SIZE (word_mode))
  	{
! 	  int nunits = GET_MODE_SIZE (move_mode) / GET_MODE_SIZE (word_mode);
! 	  if (!mode_for_vector (word_mode, nunits).exists (&move_mode)
! 	      || optab_handler (mov_optab, move_mode) == CODE_FOR_nothing)
! 	    move_mode = word_mode;
  	}
-       gcc_assert (optab_handler (mov_optab, move_mode) != CODE_FOR_nothing);
        break;
      case rep_prefix_8_byte:
        move_mode = DImode;
--- 9447,9460 ----
      case vector_loop:
        need_zero_guard = true;
        unroll_factor = 4;
!       /* Get the vector mode to move MOVE_MAX bytes.  */
!       nunits = MOVE_MAX / GET_MODE_SIZE (word_mode);
!       if (nunits > 1)
  	{
! 	  move_mode = mode_for_vector (word_mode, nunits).require ();
! 	  gcc_assert (optab_handler (mov_optab, move_mode)
! 		      != CODE_FOR_nothing);
  	}
        break;
      case rep_prefix_8_byte:
        move_mode = DImode;
diff -Nrcpad gcc-16-20250615/gcc/config/i386/i386-protos.h gcc-16-20250622/gcc/config/i386/i386-protos.h
*** gcc-16-20250615/gcc/config/i386/i386-protos.h	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/i386/i386-protos.h	Sun Jun 22 22:32:19 2025
*************** extern rtl_opt_pass *make_pass_align_tig
*** 437,442 ****
--- 437,449 ----
  extern bool ix86_has_no_direct_extern_access;
  extern bool ix86_rpad_gate ();
  
+ extern sbitmap ix86_get_separate_components (void);
+ extern sbitmap ix86_components_for_bb (basic_block);
+ extern void ix86_disqualify_components (sbitmap, edge, sbitmap, bool);
+ extern void ix86_emit_prologue_components (sbitmap);
+ extern void ix86_emit_epilogue_components (sbitmap);
+ extern void ix86_set_handled_components (sbitmap);
+ 
  /* In i386-expand.cc.  */
  bool ix86_check_builtin_isa_match (unsigned int, HOST_WIDE_INT*,
  				   HOST_WIDE_INT*);
diff -Nrcpad gcc-16-20250615/gcc/config/i386/i386.cc gcc-16-20250622/gcc/config/i386/i386.cc
*** gcc-16-20250615/gcc/config/i386/i386.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/i386/i386.cc	Sun Jun 22 22:32:19 2025
*************** ix86_pro_and_epilogue_can_use_push2pop2
*** 6905,6910 ****
--- 6905,6930 ----
  	 && (nregs + aligned) >= 3;
  }
  
+ /* Check if push/pop should be used to save/restore registers.  */
+ static bool
+ save_regs_using_push_pop (HOST_WIDE_INT to_allocate)
+ {
+   return ((!to_allocate && cfun->machine->frame.nregs <= 1)
+ 	  || (TARGET_64BIT && to_allocate >= HOST_WIDE_INT_C (0x80000000))
+ 	  /* If static stack checking is enabled and done with probes,
+ 	     the registers need to be saved before allocating the frame.  */
+ 	  || flag_stack_check == STATIC_BUILTIN_STACK_CHECK
+ 	  /* If stack clash probing needs a loop, then it needs a
+ 	     scratch register.  But the returned register is only guaranteed
+ 	     to be safe to use after register saves are complete.  So if
+ 	     stack clash protections are enabled and the allocated frame is
+ 	     larger than the probe interval, then use pushes to save
+ 	     callee saved registers.  */
+ 	  || (flag_stack_clash_protection
+ 	      && !ix86_target_stack_probe ()
+ 	      && to_allocate > get_probe_interval ()));
+ }
+ 
  /* Fill structure ix86_frame about frame of currently computed function.  */
  
  static void
*************** ix86_compute_frame_layout (void)
*** 7189,7208 ****
    /* Size prologue needs to allocate.  */
    to_allocate = offset - frame->sse_reg_save_offset;
  
!   if ((!to_allocate && frame->nregs <= 1)
!       || (TARGET_64BIT && to_allocate >= HOST_WIDE_INT_C (0x80000000))
!        /* If static stack checking is enabled and done with probes,
! 	  the registers need to be saved before allocating the frame.  */
!       || flag_stack_check == STATIC_BUILTIN_STACK_CHECK
!       /* If stack clash probing needs a loop, then it needs a
! 	 scratch register.  But the returned register is only guaranteed
! 	 to be safe to use after register saves are complete.  So if
! 	 stack clash protections are enabled and the allocated frame is
! 	 larger than the probe interval, then use pushes to save
! 	 callee saved registers.  */
!       || (flag_stack_clash_protection
! 	  && !ix86_target_stack_probe ()
! 	  && to_allocate > get_probe_interval ()))
      frame->save_regs_using_mov = false;
  
    if (ix86_using_red_zone ()
--- 7209,7215 ----
    /* Size prologue needs to allocate.  */
    to_allocate = offset - frame->sse_reg_save_offset;
  
!   if (save_regs_using_push_pop (to_allocate))
      frame->save_regs_using_mov = false;
  
    if (ix86_using_red_zone ()
*************** ix86_emit_save_regs_using_mov (HOST_WIDE
*** 7660,7666 ****
    for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
      if (GENERAL_REGNO_P (regno) && ix86_save_reg (regno, true, true))
        {
!         ix86_emit_save_reg_using_mov (word_mode, regno, cfa_offset);
  	cfa_offset -= UNITS_PER_WORD;
        }
  }
--- 7667,7675 ----
    for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
      if (GENERAL_REGNO_P (regno) && ix86_save_reg (regno, true, true))
        {
! 	/* Skip registers, already processed by shrink wrap separate.  */
! 	if (!cfun->machine->reg_is_wrapped_separately[regno])
! 	  ix86_emit_save_reg_using_mov (word_mode, regno, cfa_offset);
  	cfa_offset -= UNITS_PER_WORD;
        }
  }
*************** pro_epilogue_adjust_stack (rtx dest, rtx
*** 7753,7760 ****
  	add_frame_related_expr = true;
      }
  
!   insn = emit_insn (gen_pro_epilogue_adjust_stack_add
! 		    (Pmode, dest, src, addend));
    if (style >= 0)
      ix86_add_queued_cfa_restore_notes (insn);
  
--- 7762,7776 ----
  	add_frame_related_expr = true;
      }
  
!   /*  Shrink wrap separate may insert prologue between TEST and JMP.  In order
!       not to affect EFlags, emit add without reg clobbering.  */
!   if (crtl->shrink_wrapped_separate)
!     insn = emit_insn (gen_pro_epilogue_adjust_stack_add_nocc
! 		      (Pmode, dest, src, addend));
!   else
!     insn = emit_insn (gen_pro_epilogue_adjust_stack_add
! 		      (Pmode, dest, src, addend));
! 
    if (style >= 0)
      ix86_add_queued_cfa_restore_notes (insn);
  
*************** ix86_expand_prologue (void)
*** 9219,9229 ****
  	 doing this if we have to probe the stack; at least on x86_64 the
  	 stack probe can turn into a call that clobbers a red zone location. */
        else if (ix86_using_red_zone ()
! 	       && (! TARGET_STACK_PROBE
! 		   || frame.stack_pointer_offset < CHECK_STACK_LIMIT))
  	{
  	  ix86_emit_save_regs_using_mov (frame.reg_save_offset);
- 	  cfun->machine->red_zone_used = true;
  	  int_registers_saved = true;
  	}
      }
--- 9235,9256 ----
  	 doing this if we have to probe the stack; at least on x86_64 the
  	 stack probe can turn into a call that clobbers a red zone location. */
        else if (ix86_using_red_zone ()
! 		&& (! TARGET_STACK_PROBE
! 		    || frame.stack_pointer_offset < CHECK_STACK_LIMIT))
  	{
+ 	  HOST_WIDE_INT allocate_offset;
+ 	  if (crtl->shrink_wrapped_separate)
+ 	    {
+ 	      allocate_offset = m->fs.sp_offset - frame.stack_pointer_offset;
+ 
+ 	      /* Adjust the total offset at the beginning of the function.  */
+ 	      pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx,
+ 					 GEN_INT (allocate_offset), -1,
+ 					 m->fs.cfa_reg == stack_pointer_rtx);
+ 	      m->fs.sp_offset = cfun->machine->frame.stack_pointer_offset;
+ 	    }
+ 
  	  ix86_emit_save_regs_using_mov (frame.reg_save_offset);
  	  int_registers_saved = true;
  	}
      }
*************** ix86_expand_prologue (void)
*** 9416,9421 ****
--- 9443,9450 ----
      }
    else
      {
+       gcc_assert (!crtl->shrink_wrapped_separate);
+ 
        rtx eax = gen_rtx_REG (Pmode, AX_REG);
        rtx r10 = NULL;
        const bool sp_is_cfa_reg = (m->fs.cfa_reg == stack_pointer_rtx);
*************** ix86_emit_restore_regs_using_mov (HOST_W
*** 9801,9830 ****
    for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
      if (GENERAL_REGNO_P (regno) && ix86_save_reg (regno, maybe_eh_return, true))
        {
- 	rtx reg = gen_rtx_REG (word_mode, regno);
- 	rtx mem;
- 	rtx_insn *insn;
- 
- 	mem = choose_baseaddr (cfa_offset, NULL);
- 	mem = gen_frame_mem (word_mode, mem);
- 	insn = emit_move_insn (reg, mem);
  
!         if (m->fs.cfa_reg == crtl->drap_reg && regno == REGNO (crtl->drap_reg))
  	  {
! 	    /* Previously we'd represented the CFA as an expression
! 	       like *(%ebp - 8).  We've just popped that value from
! 	       the stack, which means we need to reset the CFA to
! 	       the drap register.  This will remain until we restore
! 	       the stack pointer.  */
! 	    add_reg_note (insn, REG_CFA_DEF_CFA, reg);
! 	    RTX_FRAME_RELATED_P (insn) = 1;
  
! 	    /* This means that the DRAP register is valid for addressing.  */
! 	    m->fs.drap_valid = true;
! 	  }
! 	else
! 	  ix86_add_cfa_restore_note (NULL, reg, cfa_offset);
  
  	cfa_offset -= UNITS_PER_WORD;
        }
  }
--- 9830,9864 ----
    for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
      if (GENERAL_REGNO_P (regno) && ix86_save_reg (regno, maybe_eh_return, true))
        {
  
! 	/* Skip registers, already processed by shrink wrap separate.  */
! 	if (!cfun->machine->reg_is_wrapped_separately[regno])
  	  {
! 	    rtx reg = gen_rtx_REG (word_mode, regno);
! 	    rtx mem;
! 	    rtx_insn *insn;
  
! 	    mem = choose_baseaddr (cfa_offset, NULL);
! 	    mem = gen_frame_mem (word_mode, mem);
! 	    insn = emit_move_insn (reg, mem);
! 
! 	    if (m->fs.cfa_reg == crtl->drap_reg
! 		&& regno == REGNO (crtl->drap_reg))
! 	      {
! 		/* Previously we'd represented the CFA as an expression
! 		   like *(%ebp - 8).  We've just popped that value from
! 		   the stack, which means we need to reset the CFA to
! 		   the drap register.  This will remain until we restore
! 		   the stack pointer.  */
! 		add_reg_note (insn, REG_CFA_DEF_CFA, reg);
! 		RTX_FRAME_RELATED_P (insn) = 1;
  
+ 		/* DRAP register is valid for addressing.  */
+ 		m->fs.drap_valid = true;
+ 	      }
+ 	    else
+ 	      ix86_add_cfa_restore_note (NULL, reg, cfa_offset);
+ 	  }
  	cfa_offset -= UNITS_PER_WORD;
        }
  }
*************** ix86_expand_epilogue (int style)
*** 10103,10112 ****
       less work than reloading sp and popping the register.  */
    else if (!sp_valid_at (frame.hfp_save_offset) && frame.nregs <= 1)
      restore_regs_via_mov = true;
!   else if (TARGET_EPILOGUE_USING_MOVE
! 	   && cfun->machine->use_fast_prologue_epilogue
! 	   && (frame.nregs > 1
! 	       || m->fs.sp_offset != reg_save_offset))
      restore_regs_via_mov = true;
    else if (frame_pointer_needed
  	   && !frame.nregs
--- 10137,10147 ----
       less work than reloading sp and popping the register.  */
    else if (!sp_valid_at (frame.hfp_save_offset) && frame.nregs <= 1)
      restore_regs_via_mov = true;
!   else if (crtl->shrink_wrapped_separate
! 	   || (TARGET_EPILOGUE_USING_MOVE
! 	       && cfun->machine->use_fast_prologue_epilogue
! 	       && (frame.nregs > 1
! 		   || m->fs.sp_offset != reg_save_offset)))
      restore_regs_via_mov = true;
    else if (frame_pointer_needed
  	   && !frame.nregs
*************** ix86_expand_epilogue (int style)
*** 10120,10125 ****
--- 10155,10163 ----
    else
      restore_regs_via_mov = false;
  
+   if (crtl->shrink_wrapped_separate)
+     gcc_assert (restore_regs_via_mov);
+ 
    if (restore_regs_via_mov || frame.nsseregs)
      {
        /* Ensure that the entire register save area is addressable via
*************** ix86_expand_epilogue (int style)
*** 10172,10177 ****
--- 10210,10216 ----
        gcc_assert (m->fs.sp_offset == UNITS_PER_WORD);
        gcc_assert (!crtl->drap_reg);
        gcc_assert (!frame.nregs);
+       gcc_assert (!crtl->shrink_wrapped_separate);
      }
    else if (restore_regs_via_mov)
      {
*************** ix86_expand_epilogue (int style)
*** 10186,10191 ****
--- 10225,10232 ----
  	  rtx sa = EH_RETURN_STACKADJ_RTX;
  	  rtx_insn *insn;
  
+ 	  gcc_assert (!crtl->shrink_wrapped_separate);
+ 
  	  /* Stack realignment doesn't work with eh_return.  */
  	  if (crtl->stack_realign_needed)
  	    sorry ("Stack realignment not supported with "
*************** ix86_cannot_copy_insn_p (rtx_insn *insn)
*** 28076,28081 ****
--- 28117,28311 ----
  #undef TARGET_DOCUMENTATION_NAME
  #define TARGET_DOCUMENTATION_NAME "x86"
  
+ /* Implement TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS.  */
+ sbitmap
+ ix86_get_separate_components (void)
+ {
+   HOST_WIDE_INT offset, to_allocate;
+   sbitmap components = sbitmap_alloc (FIRST_PSEUDO_REGISTER);
+   bitmap_clear (components);
+   struct machine_function *m = cfun->machine;
+ 
+   offset = m->frame.stack_pointer_offset;
+   to_allocate = offset - m->frame.sse_reg_save_offset;
+ 
+   /* Shrink wrap separate uses MOV, which means APX PPX cannot be used.
+      Experiments show that APX PPX can speed up the prologue.  If the function
+      does not exit early during actual execution, then using APX PPX is faster.
+      If the function always exits early during actual execution, then shrink
+      wrap separate reduces the number of MOV (PUSH/POP) instructions actually
+      executed, thus speeding up execution.
+      foo:
+ 	  movl    $1, %eax
+ 	  testq   %rdi, %rdi
+ 	  jne.L60
+ 	  ret	---> early return.
+     .L60:
+ 	  subq    $88, %rsp	---> belong to prologue.
+ 	  xorl    %eax, %eax
+ 	  movq    %rbx, 40 (%rsp) ---> belong to prologue.
+ 	  movq    8 (%rdi), %rbx
+ 	  movq    %rbp, 48 (%rsp) ---> belong to prologue.
+ 	  movq    %rdi, %rbp
+ 	  testq   %rbx, %rbx
+ 	  jne.L61
+ 	  movq    40 (%rsp), %rbx
+ 	  movq    48 (%rsp), %rbp
+ 	  addq    $88, %rsp
+ 	  ret
+      .L61:
+ 	  movq    %r12, 56 (%rsp) ---> belong to prologue.
+ 	  movq    %r13, 64 (%rsp) ---> belong to prologue.
+ 	  movq    %r14, 72 (%rsp) ---> belong to prologue.
+      ... ...
+ 
+      Disable shrink wrap separate when PPX is enabled.  */
+   if ((TARGET_APX_PPX && !crtl->calls_eh_return)
+       || cfun->machine->func_type != TYPE_NORMAL
+       || TARGET_SEH
+       || crtl->stack_realign_needed
+       || m->call_ms2sysv)
+     return components;
+ 
+   /* Since shrink wrapping separate uses MOV instead of PUSH/POP.
+      Disable shrink wrap separate when MOV is prohibited.  */
+   if (save_regs_using_push_pop (to_allocate))
+     return components;
+ 
+   for (unsigned int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if (GENERAL_REGNO_P (regno) && ix86_save_reg (regno, true, true))
+       {
+ 	/* Skip registers with large offsets, where a pseudo may be needed.  */
+ 	if (IN_RANGE (offset, -0x8000, 0x7fff))
+ 	  bitmap_set_bit (components, regno);
+ 	offset += UNITS_PER_WORD;
+       }
+ 
+   /* Don't mess with the following registers.  */
+   if (frame_pointer_needed)
+     bitmap_clear_bit (components, HARD_FRAME_POINTER_REGNUM);
+ 
+   if (crtl->drap_reg)
+     bitmap_clear_bit (components, REGNO (crtl->drap_reg));
+ 
+   if (pic_offset_table_rtx)
+     bitmap_clear_bit (components, REAL_PIC_OFFSET_TABLE_REGNUM);
+ 
+   return components;
+ }
+ 
+ /* Implement TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB.  */
+ sbitmap
+ ix86_components_for_bb (basic_block bb)
+ {
+   bitmap in = DF_LIVE_IN (bb);
+   bitmap gen = &DF_LIVE_BB_INFO (bb)->gen;
+   bitmap kill = &DF_LIVE_BB_INFO (bb)->kill;
+ 
+   sbitmap components = sbitmap_alloc (FIRST_PSEUDO_REGISTER);
+   bitmap_clear (components);
+ 
+   function_abi_aggregator callee_abis;
+   rtx_insn *insn;
+   FOR_BB_INSNS (bb, insn)
+     if (CALL_P (insn))
+       callee_abis.note_callee_abi (insn_callee_abi (insn));
+   HARD_REG_SET extra_caller_saves = callee_abis.caller_save_regs (*crtl->abi);
+ 
+   /* GPRs are used in a bb if they are in the IN, GEN, or KILL sets.  */
+   for (unsigned int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if (!fixed_regs[regno]
+ 	&& (TEST_HARD_REG_BIT (extra_caller_saves, regno)
+ 	    || bitmap_bit_p (in, regno)
+ 	    || bitmap_bit_p (gen, regno)
+ 	    || bitmap_bit_p (kill, regno)))
+       bitmap_set_bit (components, regno);
+ 
+   return components;
+ }
+ 
+ /* Implement TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS.  */
+ void
+ ix86_disqualify_components (sbitmap, edge, sbitmap, bool)
+ {
+   /* Nothing to do for x86.  */
+ }
+ 
+ /* Implement TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS.  */
+ void
+ ix86_emit_prologue_components (sbitmap components)
+ {
+   HOST_WIDE_INT cfa_offset;
+   struct machine_function *m = cfun->machine;
+ 
+   cfa_offset = m->frame.reg_save_offset + m->fs.sp_offset
+ 	       - m->frame.stack_pointer_offset;
+   for (unsigned int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if (GENERAL_REGNO_P (regno) && ix86_save_reg (regno, true, true))
+       {
+ 	if (bitmap_bit_p (components, regno))
+ 	  ix86_emit_save_reg_using_mov (word_mode, regno, cfa_offset);
+ 	cfa_offset -= UNITS_PER_WORD;
+       }
+ }
+ 
+ /* Implement TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS.  */
+ void
+ ix86_emit_epilogue_components (sbitmap components)
+ {
+   HOST_WIDE_INT cfa_offset;
+   struct machine_function *m = cfun->machine;
+   cfa_offset = m->frame.reg_save_offset + m->fs.sp_offset
+ 	       - m->frame.stack_pointer_offset;
+ 
+   for (unsigned int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if (GENERAL_REGNO_P (regno) && ix86_save_reg (regno, true, true))
+       {
+ 	if (bitmap_bit_p (components, regno))
+ 	  {
+ 	    rtx reg = gen_rtx_REG (word_mode, regno);
+ 	    rtx mem;
+ 	    rtx_insn *insn;
+ 
+ 	    mem = choose_baseaddr (cfa_offset, NULL);
+ 	    mem = gen_frame_mem (word_mode, mem);
+ 	    insn = emit_move_insn (reg, mem);
+ 
+ 	    RTX_FRAME_RELATED_P (insn) = 1;
+ 	    add_reg_note (insn, REG_CFA_RESTORE, reg);
+ 	  }
+ 	cfa_offset -= UNITS_PER_WORD;
+       }
+ }
+ 
+ /* Implement TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS.  */
+ void
+ ix86_set_handled_components (sbitmap components)
+ {
+   for (unsigned int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if (bitmap_bit_p (components, regno))
+       {
+ 	cfun->machine->reg_is_wrapped_separately[regno] = true;
+ 	cfun->machine->use_fast_prologue_epilogue = true;
+ 	cfun->machine->frame.save_regs_using_mov = true;
+       }
+ }
+ 
+ #undef TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
+ #define TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS ix86_get_separate_components
+ #undef TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
+ #define TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB ix86_components_for_bb
+ #undef TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS
+ #define TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS ix86_disqualify_components
+ #undef TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS
+ #define TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS \
+   ix86_emit_prologue_components
+ #undef TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS
+ #define TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS \
+   ix86_emit_epilogue_components
+ #undef TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS
+ #define TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS ix86_set_handled_components
+ 
  struct gcc_target targetm = TARGET_INITIALIZER;
  
  #include "gt-i386.h"
diff -Nrcpad gcc-16-20250615/gcc/config/i386/i386.h gcc-16-20250622/gcc/config/i386/i386.h
*** gcc-16-20250615/gcc/config/i386/i386.h	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/i386/i386.h	Sun Jun 22 22:32:19 2025
*************** struct GTY(()) machine_function {
*** 2821,2826 ****
--- 2821,2830 ----
    /* Cached initial frame layout for the current function.  */
    struct ix86_frame frame;
  
+   /* The components already handled by separate shrink-wrapping, which should
+      not be considered by the prologue and epilogue.  */
+   bool reg_is_wrapped_separately[FIRST_PSEUDO_REGISTER];
+ 
    /* For -fsplit-stack support: A stack local which holds a pointer to
       the stack arguments for a function with a variable number of
       arguments.  This is set at the start of the function and is used
diff -Nrcpad gcc-16-20250615/gcc/config/i386/i386.md gcc-16-20250622/gcc/config/i386/i386.md
*** gcc-16-20250615/gcc/config/i386/i386.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/i386/i386.md	Sun Jun 22 22:32:19 2025
***************
*** 2438,2459 ****
     (set_attr "mode" "SI")
     (set_attr "length_immediate" "0")])
  
! (define_insn "*mov<mode>_and"
    [(set (match_operand:SWI248 0 "memory_operand" "=m")
  	(match_operand:SWI248 1 "const0_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "and{<imodesuffix>}\t{%1, %0|%0, %1}"
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
  
! (define_insn "*mov<mode>_or"
    [(set (match_operand:SWI248 0 "nonimmediate_operand" "=rm")
  	(match_operand:SWI248 1 "constm1_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "or{<imodesuffix>}\t{%1, %0|%0, %1}"
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
--- 2438,2469 ----
     (set_attr "mode" "SI")
     (set_attr "length_immediate" "0")])
  
! ;; Generate shorter "and $0,mem" for -Oz.  Split it to "mov $0,mem"
! ;; otherwise.
! (define_insn_and_split "*mov<mode>_and"
    [(set (match_operand:SWI248 0 "memory_operand" "=m")
  	(match_operand:SWI248 1 "const0_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "and{<imodesuffix>}\t{%1, %0|%0, %1}"
+   "&& !(optimize_insn_for_size_p () && optimize_size > 1)"
+   [(set (match_dup 0) (match_dup 1))]
+   ""
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
  
! ;; Generate shorter "or $-1,mem" for -Oz.  Split it to "mov $-1,mem"
! ;; otherwise.
! (define_insn_and_split "*mov<mode>_or"
    [(set (match_operand:SWI248 0 "nonimmediate_operand" "=rm")
  	(match_operand:SWI248 1 "constm1_operand"))
     (clobber (reg:CC FLAGS_REG))]
    "reload_completed"
    "or{<imodesuffix>}\t{%1, %0|%0, %1}"
+   "&& !(optimize_insn_for_size_p () && optimize_size > 1)"
+   [(set (match_dup 0) (match_dup 1))]
+   ""
    [(set_attr "type" "alu1")
     (set_attr "mode" "<MODE>")
     (set_attr "length_immediate" "1")])
***************
*** 2958,2963 ****
--- 2968,2974 ----
  	(match_operand:SWI248 1 "const_int_operand"))]
    "optimize_insn_for_size_p () && optimize_size > 1
     && operands[1] != const0_rtx
+    && operands[1] != constm1_rtx
     && IN_RANGE (INTVAL (operands[1]), -128, 127)
     && !ix86_red_zone_used
     && REGNO (operands[0]) != SP_REG"
***************
*** 27451,27456 ****
--- 27462,27489 ----
  	      ]
  	      (const_string "*")))
     (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "@pro_epilogue_adjust_stack_add_nocc<mode>"
+   [(set (match_operand:P 0 "register_operand" "=r")
+ 	(plus:P (match_operand:P 1 "register_operand" "r")
+ 		(match_operand:P 2 "<nonmemory_operand>" "l<i>")))
+    (clobber (mem:BLK (scratch)))]
+   ""
+ {
+   if (operands[2] == CONST0_RTX (<MODE>mode))
+     return "mov{<imodesuffix>}\t{%1, %0|%0, %1}";
+   else
+     {
+       operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
+       return "lea{<imodesuffix>}\t{%E2, %0|%0, %E2}";
+     }
+ }
+   [(set (attr "length_immediate")
+ 	(cond [(eq_attr "type" "imov")
+ 		 (const_string "0")
+ 	      ]
+ 	      (const_string "*")))
+    (set_attr "mode" "<MODE>")])
  
  (define_insn "@pro_epilogue_adjust_stack_sub_<mode>"
    [(set (match_operand:P 0 "register_operand" "=r")
diff -Nrcpad gcc-16-20250615/gcc/config/or1k/or1k.cc gcc-16-20250622/gcc/config/or1k/or1k.cc
*** gcc-16-20250615/gcc/config/or1k/or1k.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/or1k/or1k.cc	Sun Jun 22 22:32:19 2025
*************** or1k_rtx_costs (rtx x, machine_mode mode
*** 1654,1659 ****
--- 1654,1716 ----
  #undef TARGET_RTX_COSTS
  #define TARGET_RTX_COSTS or1k_rtx_costs
  
+ static bool
+ or1k_is_cmov_insn (rtx_insn *seq)
+ {
+   rtx_insn *curr_insn = seq;
+   rtx set = NULL_RTX;
+ 
+   /* The pattern may start with a simple set with register operands.  Skip
+      through any of those.  */
+   while (curr_insn)
+     {
+       set = single_set (curr_insn);
+       if (!set
+ 	  || !REG_P (SET_DEST (set)))
+ 	return false;
+ 
+       /* If it's not a simple reg or immediate break.  */
+       if (REG_P (SET_SRC (set)) || CONST_INT_P (SET_SRC (set)))
+ 	curr_insn = NEXT_INSN (curr_insn);
+       else
+ 	break;
+     }
+ 
+   if (!curr_insn)
+     return false;
+ 
+   /* The next instruction should be a compare.  OpenRISC has many operators used
+      for comparison so skip and confirm the next is IF_THEN_ELSE.  */
+   curr_insn = NEXT_INSN (curr_insn);
+   if (!curr_insn)
+     return false;
+ 
+   /* And the last instruction should be an IF_THEN_ELSE.  */
+   set = single_set (curr_insn);
+   if (!set
+       || !REG_P (SET_DEST (set))
+       || GET_CODE (SET_SRC (set)) != IF_THEN_ELSE)
+     return false;
+ 
+   return !NEXT_INSN (curr_insn);
+ }
+ 
+ /* Implement TARGET_NOCE_CONVERSION_PROFITABLE_P.  We detect if the conversion
+    resulted in a l.cmov instruction and if so we consider it more profitable than
+    branch instructions.  */
+ 
+ static bool
+ or1k_noce_conversion_profitable_p (rtx_insn *seq,
+ 				    struct noce_if_info *if_info)
+ {
+   if (TARGET_CMOV)
+     return or1k_is_cmov_insn (seq);
+ 
+   return default_noce_conversion_profitable_p (seq, if_info);
+ }
+ 
+ #undef TARGET_NOCE_CONVERSION_PROFITABLE_P
+ #define TARGET_NOCE_CONVERSION_PROFITABLE_P or1k_noce_conversion_profitable_p
  
  /* A subroutine of the atomic operation splitters.  Jump to LABEL if
     COND is true.  Mark the jump as unlikely to be taken.  */
diff -Nrcpad gcc-16-20250615/gcc/config/or1k/or1k.md gcc-16-20250622/gcc/config/or1k/or1k.md
*** gcc-16-20250615/gcc/config/or1k/or1k.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/or1k/or1k.md	Sun Jun 22 22:32:19 2025
***************
*** 515,520 ****
--- 515,545 ----
  	(ne:SI (reg:BI SR_F_REGNUM) (const_int 0)))]
    "")
  
+ ;; Allowing "extending" the BImode SR_F to a general register
+ ;; avoids 'convert_mode_scalar' from trying to do subregging
+ ;; which we don't have support for.
+ ;; We require signed and unsigned extend instructions because
+ ;; signed comparisons require signed extention, but for SR_F
+ ;; it doesn't matter.
+ 
+ (define_expand "zero_extendbisi2_sr_f"
+   [(set (match_operand:SI 0 "register_operand" "")
+ 	(zero_extend:SI (match_operand:BI 1 "sr_f_reg_operand" "")))]
+   ""
+ {
+   emit_insn(gen_sne_sr_f (operands[0]));
+   DONE;
+ })
+ 
+ (define_expand "extendbisi2_sr_f"
+   [(set (match_operand:SI 0 "register_operand" "")
+ 	(sign_extend:SI (match_operand:BI 1 "sr_f_reg_operand" "")))]
+   ""
+ {
+   emit_insn(gen_sne_sr_f (operands[0]));
+   DONE;
+ })
+ 
  (define_insn_and_split "*scc"
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(match_operator:SI 1 "equality_comparison_operator"
***************
*** 584,590 ****
  ;; Branch instructions
  ;; -------------------------------------------------------------------------
  
! (define_expand "cbranchsi4"
    [(set (pc)
  	(if_then_else
  	  (match_operator 0 "comparison_operator"
--- 609,615 ----
  ;; Branch instructions
  ;; -------------------------------------------------------------------------
  
! (define_insn_and_split "cbranchsi4"
    [(set (pc)
  	(if_then_else
  	  (match_operator 0 "comparison_operator"
***************
*** 593,605 ****
  	  (label_ref (match_operand 3 "" ""))
  	  (pc)))]
    ""
  {
    or1k_expand_compare (operands);
  })
  
  ;; Support FP branching
  
! (define_expand "cbranch<F:mode>4"
    [(set (pc)
  	(if_then_else
  	  (match_operator 0 "fp_comparison_operator"
--- 618,644 ----
  	  (label_ref (match_operand 3 "" ""))
  	  (pc)))]
    ""
+   "#"
+   "&& 1"
+   [(const_int 0)]
  {
+   rtx label;
+ 
+   /* Generate *scc */
    or1k_expand_compare (operands);
+   /* Generate *cbranch */
+   label = gen_rtx_LABEL_REF (VOIDmode, operands[3]);
+   emit_jump_insn (gen_rtx_SET (pc_rtx,
+ 			       gen_rtx_IF_THEN_ELSE (VOIDmode,
+ 						     operands[0],
+ 						     label,
+ 						     pc_rtx)));
+   DONE;
  })
  
  ;; Support FP branching
  
! (define_insn_and_split "cbranch<F:mode>4"
    [(set (pc)
  	(if_then_else
  	  (match_operator 0 "fp_comparison_operator"
***************
*** 608,615 ****
--- 647,668 ----
  	  (label_ref (match_operand 3 "" ""))
  	  (pc)))]
    "TARGET_HARD_FLOAT"
+   "#"
+   "&& 1"
+   [(const_int 0)]
  {
+   rtx label;
+ 
+   /* Generate *scc */
    or1k_expand_compare (operands);
+   /* Generate *cbranch */
+   label = gen_rtx_LABEL_REF (VOIDmode, operands[3]);
+   emit_jump_insn (gen_rtx_SET (pc_rtx,
+ 			       gen_rtx_IF_THEN_ELSE (VOIDmode,
+ 						     operands[0],
+ 						     label,
+ 						     pc_rtx)));
+   DONE;
  })
  
  (define_insn "*cbranch"
diff -Nrcpad gcc-16-20250615/gcc/config/or1k/predicates.md gcc-16-20250622/gcc/config/or1k/predicates.md
*** gcc-16-20250615/gcc/config/or1k/predicates.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/or1k/predicates.md	Sun Jun 22 22:32:19 2025
***************
*** 60,65 ****
--- 60,69 ----
      (and (match_operand 0 "register_operand")
  	 (match_test "TARGET_ROR"))))
  
+ (define_predicate "sr_f_reg_operand"
+   (and (match_operand 0 "register_operand")
+        (match_test "REGNO (op) == SR_F_REGNUM")))
+ 
  (define_predicate "call_insn_operand"
    (ior (and (match_code "symbol_ref")
  	    (match_test "!TARGET_CMODEL_LARGE"))
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/autovec.md gcc-16-20250622/gcc/config/riscv/autovec.md
*** gcc-16-20250615/gcc/config/riscv/autovec.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/autovec.md	Sun Jun 22 22:32:19 2025
***************
*** 1338,1344 ****
  (define_expand "select_vl<mode>"
    [(match_operand:P 0 "register_operand")
     (match_operand:P 1 "vector_length_operand")
!    (match_operand:P 2 "")]
    "TARGET_VECTOR"
  {
    riscv_vector::expand_select_vl (operands);
--- 1338,1344 ----
  (define_expand "select_vl<mode>"
    [(match_operand:P 0 "register_operand")
     (match_operand:P 1 "vector_length_operand")
!    (match_operand:P 2 "immediate_operand")]
    "TARGET_VECTOR"
  {
    riscv_vector::expand_select_vl (operands);
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/constraints.md gcc-16-20250622/gcc/config/riscv/constraints.md
*** gcc-16-20250615/gcc/config/riscv/constraints.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/constraints.md	Sun Jun 22 22:32:19 2025
***************
*** 325,327 ****
--- 325,331 ----
    "A 2-bit unsigned immediate."
    (and (match_code "const_int")
         (match_test "IN_RANGE (ival, 0, 3)")))
+ 
+ (define_constraint "Q"
+   "An address operand that is valid for a prefetch instruction"
+   (match_operand 0 "prefetch_operand"))
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/predicates.md gcc-16-20250622/gcc/config/riscv/predicates.md
*** gcc-16-20250615/gcc/config/riscv/predicates.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/predicates.md	Sun Jun 22 22:32:19 2025
***************
*** 27,32 ****
--- 27,44 ----
    (ior (match_operand 0 "const_arith_operand")
         (match_operand 0 "register_operand")))
  
+ ;; REG or REG+D where D fits in a simm12 and has the low 4 bits
+ ;; off.  The REG+D form can be reloaded into a temporary if needed
+ ;; after FP elimination if that exposes an invalid offset.
+ (define_predicate "prefetch_operand"
+   (ior (match_operand 0 "register_operand")
+        (and (match_test "const_arith_operand (op, VOIDmode)")
+ 	    (match_test "(INTVAL (op) & 0xf) == 0"))
+        (and (match_code "plus")
+ 	    (match_test "register_operand (XEXP (op, 0), word_mode)")
+ 	    (match_test "const_arith_operand (XEXP (op, 1), VOIDmode)")
+ 	    (match_test "(INTVAL (XEXP (op, 1)) & 0xf) == 0"))))
+ 
  (define_predicate "lui_operand"
    (and (match_code "const_int")
         (match_test "LUI_OPERAND (INTVAL (op))")))
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/riscv-cores.def gcc-16-20250622/gcc/config/riscv/riscv-cores.def
*** gcc-16-20250615/gcc/config/riscv/riscv-cores.def	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/riscv-cores.def	Sun Jun 22 22:32:19 2025
***************
*** 33,38 ****
--- 33,39 ----
  #define RISCV_TUNE(TUNE_NAME, PIPELINE_MODEL, TUNE_INFO)
  #endif
  
+ RISCV_TUNE("generic", generic, generic_tune_info)
  RISCV_TUNE("rocket", generic, rocket_tune_info)
  RISCV_TUNE("sifive-3-series", generic, rocket_tune_info)
  RISCV_TUNE("sifive-5-series", generic, rocket_tune_info)
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/riscv-v.cc gcc-16-20250622/gcc/config/riscv/riscv-v.cc
*** gcc-16-20250615/gcc/config/riscv/riscv-v.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/riscv-v.cc	Sun Jun 22 22:32:19 2025
*************** expand_vx_binary_vec_dup_vec (rtx op_0,
*** 5539,5544 ****
--- 5539,5546 ----
      case MULT:
      case SMAX:
      case UMAX:
+     case SMIN:
+     case UMIN:
        icode = code_for_pred_scalar (code, mode);
        break;
      case MINUS:
*************** expand_vx_binary_vec_vec_dup (rtx op_0,
*** 5575,5580 ****
--- 5577,5584 ----
      case UMOD:
      case SMAX:
      case UMAX:
+     case SMIN:
+     case UMIN:
        icode = code_for_pred_scalar (code, mode);
        break;
      default:
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/riscv.cc gcc-16-20250622/gcc/config/riscv/riscv.cc
*** gcc-16-20250615/gcc/config/riscv/riscv.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/riscv.cc	Sun Jun 22 22:32:19 2025
*************** static const struct cpu_vector_cost gene
*** 450,455 ****
--- 450,478 ----
    &rvv_regmove_vector_cost, /* regmove  */
  };
  
+ /* Costs to use when optimizing for generic.  */
+ static const struct riscv_tune_param generic_tune_info = {
+   {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},	/* fp_add */
+   {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},	/* fp_mul */
+   {COSTS_N_INSNS (20), COSTS_N_INSNS (20)},	/* fp_div */
+   {COSTS_N_INSNS (4), COSTS_N_INSNS (4)},	/* int_mul */
+   {COSTS_N_INSNS (33), COSTS_N_INSNS (65)},	/* int_div */
+   1,						/* issue_rate */
+   4,						/* branch_cost */
+   5,						/* memory_cost */
+   8,						/* fmv_cost */
+   true,						/* slow_unaligned_access */
+   false,					/* vector_unaligned_access */
+   false,					/* use_divmod_expansion */
+   false,					/* overlap_op_by_pieces */
+   false,					/* speculative_sched_vsetvl */
+   RISCV_FUSE_NOTHING,                           /* fusible_ops */
+   NULL,						/* vector cost */
+   NULL,						/* function_align */
+   NULL,						/* jump_align */
+   NULL,						/* loop_align */
+ };
+ 
  /* Costs to use when optimizing for rocket.  */
  static const struct riscv_tune_param rocket_tune_info = {
    {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},	/* fp_add */
*************** void riscv_frame_info::reset(void)
*** 814,819 ****
--- 837,852 ----
    arg_pointer_offset = 0;
  }
  
+ /* Check if the mode is twice the size of the XLEN mode.  */
+ 
+ static bool
+ riscv_2x_xlen_mode_p (machine_mode mode)
+ {
+   poly_int64 mode_size = GET_MODE_SIZE (mode);
+   return mode_size.is_constant ()
+ 	 && (mode_size.to_constant () == UNITS_PER_WORD * 2);
+ }
+ 
  /* Implement TARGET_MIN_ARITHMETIC_PRECISION.  */
  
  static unsigned int
*************** riscv_build_integer_1 (struct riscv_inte
*** 1045,1060 ****
  	  /* Now iterate over the bits we want to clear until the cost is
  	     too high or we're done.  */
  	  nval = value ^ HOST_WIDE_INT_C (-1);
! 	  nval &= HOST_WIDE_INT_C (~0x7fffffff);
  	  while (nval && alt_cost < cost)
  	    {
  	      HOST_WIDE_INT bit = ctz_hwi (nval);
  	      alt_codes[alt_cost].code = AND;
! 	      alt_codes[alt_cost].value = ~(1UL << bit);
  	      alt_codes[alt_cost].use_uw = false;
  	      alt_codes[alt_cost].save_temporary = false;
  	      alt_cost++;
! 	      nval &= ~(1UL << bit);
  	    }
  
  	  if (nval == 0 && alt_cost <= cost)
--- 1078,1093 ----
  	  /* Now iterate over the bits we want to clear until the cost is
  	     too high or we're done.  */
  	  nval = value ^ HOST_WIDE_INT_C (-1);
! 	  nval &= ~HOST_WIDE_INT_C (0x7fffffff);
  	  while (nval && alt_cost < cost)
  	    {
  	      HOST_WIDE_INT bit = ctz_hwi (nval);
  	      alt_codes[alt_cost].code = AND;
! 	      alt_codes[alt_cost].value = ~(HOST_WIDE_INT_UC (1) << bit);
  	      alt_codes[alt_cost].use_uw = false;
  	      alt_codes[alt_cost].save_temporary = false;
  	      alt_cost++;
! 	      nval &= ~(HOST_WIDE_INT_UC (1) << bit);
  	    }
  
  	  if (nval == 0 && alt_cost <= cost)
*************** riscv_legitimize_move (machine_mode mode
*** 3778,3787 ****
        return true;
      }
  
!   if (TARGET_ZILSD
!       && (GET_MODE_UNIT_SIZE (mode) == (UNITS_PER_WORD * 2))
!       && ((REG_P (dest) && MEM_P (src))
! 	  || (MEM_P (dest) && REG_P (src)))
        && can_create_pseudo_p ())
      {
        rtx reg = REG_P (dest) ? dest : src;
--- 3811,3818 ----
        return true;
      }
  
!   if (TARGET_ZILSD && riscv_2x_xlen_mode_p (mode)
!       && ((REG_P (dest) && MEM_P (src)) || (MEM_P (dest) && REG_P (src)))
        && can_create_pseudo_p ())
      {
        rtx reg = REG_P (dest) ? dest : src;
*************** static int
*** 3868,3874 ****
  riscv_binary_cost (rtx x, int single_insns, int double_insns)
  {
    if (!riscv_v_ext_mode_p (GET_MODE (x))
!       && GET_MODE_SIZE (GET_MODE (x)).to_constant () == UNITS_PER_WORD * 2)
      return COSTS_N_INSNS (double_insns);
    return COSTS_N_INSNS (single_insns);
  }
--- 3899,3905 ----
  riscv_binary_cost (rtx x, int single_insns, int double_insns)
  {
    if (!riscv_v_ext_mode_p (GET_MODE (x))
!       && riscv_2x_xlen_mode_p (GET_MODE (x)))
      return COSTS_N_INSNS (double_insns);
    return COSTS_N_INSNS (single_insns);
  }
*************** riscv_rtx_costs (rtx x, machine_mode mod
*** 3980,3985 ****
--- 4011,4018 ----
  	      case MULT:
  	      case SMAX:
  	      case UMAX:
+ 	      case SMIN:
+ 	      case UMIN:
  		{
  		  rtx op;
  		  rtx op_0 = XEXP (x, 0);
*************** riscv_rtx_costs (rtx x, machine_mode mod
*** 4022,4031 ****
--- 4055,4095 ----
  	      *total = COSTS_N_INSNS (1);
  	      return true;
  	    }
+ 
+ 	  /* Register move for XLEN * 2.  */
+ 	  if (TARGET_ZILSD
+ 	      && register_operand (SET_SRC (x), GET_MODE (SET_SRC (x)))
+ 	      && riscv_2x_xlen_mode_p (mode))
+ 	    {
+ 	      /* We still need two instruction for move with ZILSD,
+ 		 but let minus one cost to let subreg split don't.
+ 		 TODO: Add riscv_tune_param for this.  */
+ 	      *total = COSTS_N_INSNS (2) - 1;
+ 	      return true;
+ 	    }
+ 
+ 	  /* Load for XLEN * 2.  */
+ 	  if (TARGET_ZILSD && MEM_P (SET_SRC (x))
+ 	      && riscv_2x_xlen_mode_p (mode))
+ 	    {
+ 	      /* TODO: Add riscv_tune_param for this.  */
+ 	      *total = COSTS_N_INSNS (1);
+ 	      return true;
+ 	    }
+ 
  	  riscv_rtx_costs (SET_SRC (x), mode, SET, opno, total, speed);
  	  return true;
  	}
  
+       /* Store for XLEN * 2.  */
+       if (TARGET_ZILSD && MEM_P (SET_DEST (x)) && REG_P (SET_SRC (x))
+ 	  && riscv_2x_xlen_mode_p (mode))
+ 	{
+ 	  /* TODO: Add riscv_tune_param for this.  */
+ 	  *total = COSTS_N_INSNS (1);
+ 	  return true;
+ 	}
+ 
        /* Otherwise return FALSE indicating we should recurse into both the
  	 SET_DEST and SET_SRC combining the cost of both.  */
        return false;
*************** riscv_hard_regno_mode_ok (unsigned int r
*** 9973,9981 ****
  	return false;
  
        /* Zilsd require load/store with even-odd reg pair.  */
!       if (TARGET_ZILSD
! 	  && (GET_MODE_UNIT_SIZE (mode) == (UNITS_PER_WORD * 2))
! 	  && ((regno % 2) != 0))
  	return false;
  
        if (!GP_REG_P (regno + nregs - 1))
--- 10037,10043 ----
  	return false;
  
        /* Zilsd require load/store with even-odd reg pair.  */
!       if (TARGET_ZILSD && riscv_2x_xlen_mode_p (mode) && ((regno % 2) != 0))
  	return false;
  
        if (!GP_REG_P (regno + nregs - 1))
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/riscv.h gcc-16-20250622/gcc/config/riscv/riscv.h
*** gcc-16-20250615/gcc/config/riscv/riscv.h	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/riscv.h	Sun Jun 22 22:32:19 2025
*************** along with GCC; see the file COPYING3.
*** 43,49 ****
  #endif
  
  #ifndef RISCV_TUNE_STRING_DEFAULT
! #define RISCV_TUNE_STRING_DEFAULT "rocket"
  #endif
  
  extern const char *riscv_expand_arch (int argc, const char **argv);
--- 43,49 ----
  #endif
  
  #ifndef RISCV_TUNE_STRING_DEFAULT
! #define RISCV_TUNE_STRING_DEFAULT "generic"
  #endif
  
  extern const char *riscv_expand_arch (int argc, const char **argv);
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/riscv.md gcc-16-20250622/gcc/config/riscv/riscv.md
*** gcc-16-20250615/gcc/config/riscv/riscv.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/riscv.md	Sun Jun 22 22:32:19 2025
***************
*** 4402,4408 ****
  )
  
  (define_insn "prefetch"
!   [(prefetch (match_operand 0 "address_operand" "r")
               (match_operand 1 "imm5_operand" "i")
               (match_operand 2 "const_int_operand" "n"))]
    "TARGET_ZICBOP"
--- 4402,4408 ----
  )
  
  (define_insn "prefetch"
!   [(prefetch (match_operand 0 "prefetch_operand" "Q")
               (match_operand 1 "imm5_operand" "i")
               (match_operand 2 "const_int_operand" "n"))]
    "TARGET_ZICBOP"
***************
*** 4422,4428 ****
  				      (const_string "4")))])
  
  (define_insn "riscv_prefetchi_<mode>"
!   [(unspec_volatile:X [(match_operand:X 0 "address_operand" "r")
                (match_operand:X 1 "imm5_operand" "i")]
                UNSPECV_PREI)]
    "TARGET_ZICBOP"
--- 4422,4428 ----
  				      (const_string "4")))])
  
  (define_insn "riscv_prefetchi_<mode>"
!   [(unspec_volatile:X [(match_operand:X 0 "prefetch_operand" "Q")
                (match_operand:X 1 "imm5_operand" "i")]
                UNSPECV_PREI)]
    "TARGET_ZICBOP"
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/sync.md gcc-16-20250622/gcc/config/riscv/sync.md
*** gcc-16-20250615/gcc/config/riscv/sync.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/sync.md	Sun Jun 22 22:32:19 2025
***************
*** 405,422 ****
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	  UNSPEC_SYNC_EXCHANGE))
     (set (match_dup 1)
! 	(match_operand:GPR 2 "register_operand" "0"))
     (clobber (match_scratch:GPR 4 "=&r"))]	  ;; tmp_1
    "!TARGET_ZAAMO && TARGET_ZALRSC"
    {
      return "1:\;"
! 	   "lr.<amo>%I3\t%4, %1\;"
! 	   "sc.<amo>%J3\t%0, %0, %1\;"
! 	   "bnez\t%0, 1b\;"
! 	   "mv\t%0, %4";
    }
    [(set_attr "type" "atomic")
!    (set (attr "length") (const_int 16))])
  
  (define_expand "atomic_exchange<mode>"
    [(match_operand:SHORT 0 "register_operand") ;; old value at mem
--- 405,421 ----
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	  UNSPEC_SYNC_EXCHANGE))
     (set (match_dup 1)
! 	(match_operand:GPR 2 "reg_or_0_operand" "rJ"))
     (clobber (match_scratch:GPR 4 "=&r"))]	  ;; tmp_1
    "!TARGET_ZAAMO && TARGET_ZALRSC"
    {
      return "1:\;"
! 	   "lr.<amo>%I3\t%0, %1\;"
! 	   "sc.<amo>%J3\t%4, %z2, %1\;"
! 	   "bnez\t%4, 1b\";
    }
    [(set_attr "type" "atomic")
!    (set (attr "length") (const_int 12))])
  
  (define_expand "atomic_exchange<mode>"
    [(match_operand:SHORT 0 "register_operand") ;; old value at mem
diff -Nrcpad gcc-16-20250615/gcc/config/riscv/vector-iterators.md gcc-16-20250622/gcc/config/riscv/vector-iterators.md
*** gcc-16-20250615/gcc/config/riscv/vector-iterators.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/riscv/vector-iterators.md	Sun Jun 22 22:32:19 2025
***************
*** 4042,4052 ****
  ])
  
  (define_code_iterator any_int_binop_no_shift_v_vdup [
!   plus minus and ior xor mult div udiv mod umod smax umax
  ])
  
  (define_code_iterator any_int_binop_no_shift_vdup_v [
!   plus minus and ior xor mult smax umax
  ])
  
  (define_code_iterator any_int_unop [neg not])
--- 4042,4052 ----
  ])
  
  (define_code_iterator any_int_binop_no_shift_v_vdup [
!   plus minus and ior xor mult div udiv mod umod smax umax smin umin
  ])
  
  (define_code_iterator any_int_binop_no_shift_vdup_v [
!   plus minus and ior xor mult smax umax smin umin
  ])
  
  (define_code_iterator any_int_unop [neg not])
diff -Nrcpad gcc-16-20250615/gcc/config/xtensa/predicates.md gcc-16-20250622/gcc/config/xtensa/predicates.md
*** gcc-16-20250615/gcc/config/xtensa/predicates.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/xtensa/predicates.md	Sun Jun 22 22:32:19 2025
***************
*** 183,201 ****
    (and (match_code "const_int")
         (match_test "xtensa_mem_offset (INTVAL (op), SFmode)")))
  
- (define_predicate "reload_operand"
-   (match_code "mem")
- {
-   const_rtx addr = XEXP (op, 0);
-   if (REG_P (addr))
-     return REGNO (addr) == A1_REG;
-   if (GET_CODE (addr) == PLUS)
-     return REG_P (XEXP (addr, 0))
- 	   && REGNO (XEXP (addr, 0)) == A1_REG
- 	   && CONST_INT_P (XEXP (addr, 1));
-   return false;
- })
- 
  (define_predicate "branch_operator"
    (match_code "eq,ne,lt,ge"))
  
--- 183,188 ----
diff -Nrcpad gcc-16-20250615/gcc/config/xtensa/xtensa.cc gcc-16-20250622/gcc/config/xtensa/xtensa.cc
*** gcc-16-20250615/gcc/config/xtensa/xtensa.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/xtensa/xtensa.cc	Sun Jun 22 22:32:19 2025
*************** static void xtensa_output_mi_thunk (FILE
*** 198,203 ****
--- 198,204 ----
  static rtx xtensa_delegitimize_address (rtx);
  static reg_class_t xtensa_ira_change_pseudo_allocno_class (int, reg_class_t,
  							   reg_class_t);
+ static HARD_REG_SET xtensa_zero_call_used_regs (HARD_REG_SET);
  
  
  
*************** static reg_class_t xtensa_ira_change_pse
*** 370,375 ****
--- 371,379 ----
  #undef TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS
  #define TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS xtensa_ira_change_pseudo_allocno_class
  
+ #undef TARGET_ZERO_CALL_USED_REGS
+ #define TARGET_ZERO_CALL_USED_REGS xtensa_zero_call_used_regs
+ 
  struct gcc_target targetm = TARGET_INITIALIZER;
  
  
*************** xtensa_ira_change_pseudo_allocno_class (
*** 5467,5470 ****
--- 5471,5526 ----
    return FLOAT_MODE_P (PSEUDO_REGNO_MODE (regno)) ? FP_REGS : AR_REGS;
  }
  
+ /* Implement TARGET_ZERO_CALL_USED_REGS.  */
+ 
+ static HARD_REG_SET
+ xtensa_zero_call_used_regs (HARD_REG_SET selected_regs)
+ {
+   unsigned int regno;
+   int zeroed_regno = -1;
+   hard_reg_set_iterator hrsi;
+   rtvec argvec, convec;
+ 
+   EXECUTE_IF_SET_IN_HARD_REG_SET (selected_regs, 1, regno, hrsi)
+     {
+       if (GP_REG_P (regno))
+ 	{
+ 	  emit_move_insn (gen_rtx_REG (SImode, regno), const0_rtx);
+ 	  if (zeroed_regno < 0)
+ 	    zeroed_regno = regno;
+ 	  continue;
+ 	}
+       if (TARGET_BOOLEANS && BR_REG_P (regno))
+ 	{
+ 	  gcc_assert (zeroed_regno >= 0);
+ 	  argvec = rtvec_alloc (1);
+ 	  RTVEC_ELT (argvec, 0) = gen_rtx_REG (SImode, zeroed_regno);
+ 	  convec = rtvec_alloc (1);
+ 	  RTVEC_ELT (convec, 0) = gen_rtx_ASM_INPUT (SImode, "r");
+ 	  emit_insn (gen_rtx_ASM_OPERANDS (VOIDmode, "wsr\t%0, BR",
+ 					   "", 0, argvec, convec,
+ 					   rtvec_alloc (0),
+ 					   UNKNOWN_LOCATION));
+ 	  continue;
+ 	}
+       if (TARGET_HARD_FLOAT && FP_REG_P (regno))
+ 	{
+ 	  gcc_assert (zeroed_regno >= 0);
+ 	  emit_move_insn (gen_rtx_REG (SFmode, regno),
+ 			  gen_rtx_REG (SFmode, zeroed_regno));
+ 	  continue;
+ 	}
+       if (TARGET_MAC16 && ACC_REG_P (regno))
+ 	{
+ 	  gcc_assert (zeroed_regno >= 0);
+ 	  emit_move_insn (gen_rtx_REG (SImode, regno),
+ 			  gen_rtx_REG (SImode, zeroed_regno));
+ 	  continue;
+ 	}
+       CLEAR_HARD_REG_BIT (selected_regs, regno);
+     }
+ 
+   return selected_regs;
+ }
+ 
  #include "gt-xtensa.h"
diff -Nrcpad gcc-16-20250615/gcc/config/xtensa/xtensa.h gcc-16-20250622/gcc/config/xtensa/xtensa.h
*** gcc-16-20250615/gcc/config/xtensa/xtensa.h	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/xtensa/xtensa.h	Sun Jun 22 22:32:19 2025
*************** along with GCC; see the file COPYING3.
*** 36,41 ****
--- 36,42 ----
  #define TARGET_MINMAX		XCHAL_HAVE_MINMAX
  #define TARGET_SEXT		XCHAL_HAVE_SEXT
  #define TARGET_CLAMPS		XCHAL_HAVE_CLAMPS
+ #define TARGET_DEPBITS		XCHAL_HAVE_DEPBITS
  #define TARGET_BOOLEANS		XCHAL_HAVE_BOOLEANS
  #define TARGET_HARD_FLOAT	XCHAL_HAVE_FP
  #define TARGET_HARD_FLOAT_DIV	XCHAL_HAVE_FP_DIV
diff -Nrcpad gcc-16-20250615/gcc/config/xtensa/xtensa.md gcc-16-20250622/gcc/config/xtensa/xtensa.md
*** gcc-16-20250615/gcc/config/xtensa/xtensa.md	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/config/xtensa/xtensa.md	Sun Jun 22 22:32:19 2025
***************
*** 1014,1020 ****
     (set_attr "length"	"3")])
  
  
! ;; Field extract instructions.
  
  (define_expand "extvsi"
    [(set (match_operand:SI 0 "register_operand" "")
--- 1014,1020 ----
     (set_attr "length"	"3")])
  
  
! ;; Field extract and insert instructions.
  
  (define_expand "extvsi"
    [(set (match_operand:SI 0 "register_operand" "")
***************
*** 1148,1153 ****
--- 1148,1172 ----
     (set_attr "mode"	"SI")
     (set_attr "length"	"6")])
  
+ (define_insn "insvsi"
+   [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+a")
+ 			 (match_operand:SI 1 "extui_fldsz_operand" "i")
+ 			 (match_operand:SI 2 "const_int_operand" "i"))
+ 	(match_operand:SI 3 "register_operand" "r"))]
+   "TARGET_DEPBITS"
+ {
+   int shift;
+   if (BITS_BIG_ENDIAN)
+     shift = (32 - (INTVAL (operands[1]) + INTVAL (operands[2]))) & 0x1f;
+   else
+     shift = INTVAL (operands[2]) & 0x1f;
+   operands[2] = GEN_INT (shift);
+   return "depbits\t%0, %3, %2, %1";
+ }
+   [(set_attr "type"	"arith")
+    (set_attr "mode"	"SI")
+    (set_attr "length"	"3")])
+ 
  
  ;; Conversions.
  
***************
*** 3345,3380 ****
  				    (const_int 8)
  				    (const_int 9))))])
  
- (define_peephole2
-   [(set (match_operand:SI 0 "register_operand")
- 	(match_operand:SI 6 "reload_operand"))
-    (set (match_operand:SI 1 "register_operand")
- 	(match_operand:SI 7 "reload_operand"))
-    (set (match_operand:SF 2 "register_operand")
- 	(match_operand:SF 4 "register_operand"))
-    (set (match_operand:SF 3 "register_operand")
- 	(match_operand:SF 5 "register_operand"))]
-   "REGNO (operands[0]) == REGNO (operands[4])
-    && REGNO (operands[1]) == REGNO (operands[5])
-    && peep2_reg_dead_p (4, operands[0])
-    && peep2_reg_dead_p (4, operands[1])"
-   [(set (match_dup 2)
- 	(match_dup 6))
-    (set (match_dup 3)
- 	(match_dup 7))]
- {
-   HARD_REG_SET regs;
-   int i;
-   CLEAR_HARD_REG_SET (regs);
-   for (i = 0; i <= 3; ++i)
-     if (TEST_HARD_REG_BIT (regs, REGNO (operands[i])))
-       FAIL;
-     else
-       SET_HARD_REG_BIT (regs, REGNO (operands[i]));
-   operands[6] = gen_rtx_MEM (SFmode, XEXP (operands[6], 0));
-   operands[7] = gen_rtx_MEM (SFmode, XEXP (operands[7], 0));
- })
- 
  (define_split
    [(clobber (match_operand 0 "register_operand"))]
    "HARD_REGISTER_P (operands[0])
--- 3364,3369 ----
*************** FALLTHRU:;
*** 3460,3508 ****
    operands[1] = GEN_INT (imm0);
    operands[2] = GEN_INT (imm1);
  })
- 
- (define_peephole2
-   [(set (match_operand 0 "register_operand")
- 	(match_operand 1 "register_operand"))]
-   "REG_NREGS (operands[0]) == 1 && GP_REG_P (REGNO (operands[0]))
-    && REG_NREGS (operands[1]) == 1 && GP_REG_P (REGNO (operands[1]))
-    && peep2_reg_dead_p (1, operands[1])"
-   [(const_int 0)]
- {
-   basic_block bb = BLOCK_FOR_INSN (curr_insn);
-   rtx_insn *head = BB_HEAD (bb), *insn;
-   rtx dest = operands[0], src = operands[1], pattern, t_dest, dest_orig;
-   for (insn = PREV_INSN (curr_insn);
-        insn && insn != head;
-        insn = PREV_INSN (insn))
-     if (CALL_P (insn))
-       break;
-     else if (INSN_P (insn))
-       {
- 	if (GET_CODE (pattern = PATTERN (insn)) == SET
- 	    && REG_P (t_dest = SET_DEST (pattern))
- 	    && REG_NREGS (t_dest) == 1
- 	    && REGNO (t_dest) == REGNO (src))
- 	{
- 	  dest_orig = SET_DEST (pattern);
- 	  SET_DEST (pattern) = gen_rtx_REG (GET_MODE (t_dest),
- 					    REGNO (dest));
- 	  extract_insn (insn);
- 	  if (!constrain_operands (true, get_enabled_alternatives (insn)))
- 	    {
- 	      SET_DEST (pattern) = dest_orig;
- 	      goto ABORT;
- 	    }
- 	  df_insn_rescan (insn);
- 	  goto FALLTHRU;
- 	}
- 	if (reg_overlap_mentioned_p (dest, pattern)
- 	    || reg_overlap_mentioned_p (src, pattern)
- 	    || set_of (dest, insn)
- 	    || set_of (src, insn))
- 	  break;
-       }
- ABORT:
-   FAIL;
- FALLTHRU:;
- })
--- 3449,3451 ----
diff -Nrcpad gcc-16-20250615/gcc/config.gcc gcc-16-20250622/gcc/config.gcc
*** gcc-16-20250615/gcc/config.gcc	Sun Jun 15 22:32:23 2025
--- gcc-16-20250622/gcc/config.gcc	Sun Jun 22 22:32:19 2025
*************** aarch64*-*-*)
*** 351,357 ****
  	c_target_objs="aarch64-c.o"
  	cxx_target_objs="aarch64-c.o"
  	d_target_objs="aarch64-d.o"
! 	extra_objs="aarch64-builtins.o aarch-common.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o aarch64-sve-builtins-sme.o cortex-a57-fma-steering.o aarch64-speculation.o aarch-bti-insert.o aarch64-cc-fusion.o aarch64-early-ra.o aarch64-ldp-fusion.o"
  	target_gtfiles="\$(srcdir)/config/aarch64/aarch64-protos.h \$(srcdir)/config/aarch64/aarch64-builtins.h \$(srcdir)/config/aarch64/aarch64-builtins.cc \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc"
  	target_has_targetm_common=yes
  	;;
--- 351,357 ----
  	c_target_objs="aarch64-c.o"
  	cxx_target_objs="aarch64-c.o"
  	d_target_objs="aarch64-d.o"
! 	extra_objs="aarch64-builtins.o aarch-common.o aarch64-elf-metadata.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o aarch64-sve-builtins-sme.o cortex-a57-fma-steering.o aarch64-speculation.o aarch-bti-insert.o aarch64-cc-fusion.o aarch64-early-ra.o aarch64-ldp-fusion.o"
  	target_gtfiles="\$(srcdir)/config/aarch64/aarch64-protos.h \$(srcdir)/config/aarch64/aarch64-builtins.h \$(srcdir)/config/aarch64/aarch64-builtins.cc \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc"
  	target_has_targetm_common=yes
  	;;
diff -Nrcpad gcc-16-20250615/gcc/config.in gcc-16-20250622/gcc/config.in
*** gcc-16-20250615/gcc/config.in	Sun Jun 15 22:34:31 2025
--- gcc-16-20250622/gcc/config.in	Sun Jun 22 22:34:27 2025
***************
*** 355,360 ****
--- 355,366 ----
  #endif
  
  
+ /* Define if your assembler supports AEABI build attributes. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_AS_AEABI_BUILD_ATTRIBUTES
+ #endif
+ 
+ 
  /* Define if your assembler supports architecture modifiers. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_AS_ARCHITECTURE_MODIFIERS
diff -Nrcpad gcc-16-20250615/gcc/configure gcc-16-20250622/gcc/configure
*** gcc-16-20250615/gcc/configure	Sun Jun 15 22:34:31 2025
--- gcc-16-20250622/gcc/configure	Sun Jun 22 22:34:27 2025
*************** $as_echo "#define HAVE_AS_SMALL_PIC_RELO
*** 28249,28254 ****
--- 28249,28291 ----
  
  fi
  
+     # Check if we have binutils support for AEABI build attributes.
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for support of AEABI build attributes" >&5
+ $as_echo_n "checking assembler for support of AEABI build attributes... " >&6; }
+ if ${gcc_cv_as_aarch64_aeabi_build_attributes+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   gcc_cv_as_aarch64_aeabi_build_attributes=no
+   if test x$gcc_cv_as != x; then
+     $as_echo '
+ 	.aeabi_subsection aeabi_feature_and_bits, optional, ULEB128
+ 	.aeabi_attribute Tag_Feature_BTI, 1
+ 	.aeabi_attribute Tag_Feature_PAC, 1
+ 	.aeabi_attribute Tag_Feature_GCS, 1
+     ' > conftest.s
+     if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
+   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; }
+     then
+ 	gcc_cv_as_aarch64_aeabi_build_attributes=yes
+     else
+       echo "configure: failed program was" >&5
+       cat conftest.s >&5
+     fi
+     rm -f conftest.o conftest.s
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_aarch64_aeabi_build_attributes" >&5
+ $as_echo "$gcc_cv_as_aarch64_aeabi_build_attributes" >&6; }
+ if test $gcc_cv_as_aarch64_aeabi_build_attributes = yes; then
+ 
+ $as_echo "#define HAVE_AS_AEABI_BUILD_ATTRIBUTES 1" >>confdefs.h
+ 
+ fi
+ 
      # Enable Branch Target Identification Mechanism and Return Address
      # Signing by default.
      # Check whether --enable-standard-branch-protection was given.
diff -Nrcpad gcc-16-20250615/gcc/configure.ac gcc-16-20250622/gcc/configure.ac
*** gcc-16-20250615/gcc/configure.ac	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/configure.ac	Sun Jun 22 22:32:19 2025
*************** case "$target" in
*** 4467,4472 ****
--- 4467,4481 ----
  	ldr     x0, [[x2, #:gotpage_lo15:globalsym]]
      ],,[AC_DEFINE(HAVE_AS_SMALL_PIC_RELOCS, 1,
  	[Define if your assembler supports relocs needed by -fpic.])])
+     # Check if we have binutils support for AEABI build attributes.
+     gcc_GAS_CHECK_FEATURE([support of AEABI build attributes], gcc_cv_as_aarch64_aeabi_build_attributes,,
+     [
+ 	.aeabi_subsection aeabi_feature_and_bits, optional, ULEB128
+ 	.aeabi_attribute Tag_Feature_BTI, 1
+ 	.aeabi_attribute Tag_Feature_PAC, 1
+ 	.aeabi_attribute Tag_Feature_GCS, 1
+     ],,[AC_DEFINE(HAVE_AS_AEABI_BUILD_ATTRIBUTES, 1,
+ 	[Define if your assembler supports AEABI build attributes.])])
      # Enable Branch Target Identification Mechanism and Return Address
      # Signing by default.
      AC_ARG_ENABLE(standard-branch-protection,
diff -Nrcpad gcc-16-20250615/gcc/cp/ChangeLog gcc-16-20250622/gcc/cp/ChangeLog
*** gcc-16-20250615/gcc/cp/ChangeLog	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/ChangeLog	Sun Jun 22 22:32:19 2025
***************
*** 1,3 ****
--- 1,89 ----
+ 2025-06-18  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR c++/115908
+ 	PR c++/118074
+ 	PR c++/95615
+ 	* coroutines.cc (coro_frame_refcount_id): New.
+ 	(coro_init_identifiers): Initialise coro_frame_refcount_id.
+ 	(build_actor_fn): Set up initial_await_resume_called.  Handle
+ 	decrementing of the frame reference count.  Return directly to
+ 	the caller if that is non-zero.
+ 	(cp_coroutine_transform::wrap_original_function_body): Use a
+ 	conditional eh-only cleanup around the initial await expression
+ 	to release the body use on exception before initial await
+ 	resume.
+ 	(cp_coroutine_transform::build_ramp_function): Wrap the called
+ 	body in a cleanup that releases a use of the frame when we
+ 	return to the ramp.  Implement frame, promise and argument copy
+ 	destruction via conditional cleanups when the frame use count
+ 	is zero.
+ 
+ 2025-06-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* coroutines.cc (struct coroutine_info): Update comments.
+ 	(struct coro_aw_data): Remove self_handle and add in
+ 	information to create the handle in lowering.
+ 	(expand_one_await_expression): Build a temporary coroutine
+ 	handle.
+ 	(build_actor_fn): Remove reference to the frame copy of the
+ 	coroutine handle.
+ 	(cp_coroutine_transform::wrap_original_function_body): Remove
+ 	reference to the frame copy of the coroutine handle.
+ 
+ 2025-06-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* coroutines.cc (analyze_expression_awaits): Elide assume
+ 	attributes containing await expressions, since these have
+ 	side effects.  Emit a diagnostic that this has been done.
+ 
+ 2025-06-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120678
+ 	* cp-trait.def (IS_TRIVIALLY_DESTRUCTIBLE): Fix nargs.
+ 
+ 2025-06-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	* module.cc (module_state::write_diagnostic_classification): New.
+ 	(module_state::write_begin): Call it.
+ 	(module_state::read_diagnostic_classification): New.
+ 	(module_state::read_initial): Call it.
+ 	(dk_string, dump_dc_change): New.
+ 
+ 2025-06-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* coroutines.cc (finish_co_await_expr): Do not allow in an
+ 	unevaluated context.
+ 	(finish_co_yield_expr): Likewise.
+ 
+ 2025-06-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR c++/120273
+ 	* coroutines.cc
+ 	(cp_coroutine_transform::wrap_original_function_body): Use
+ 	function start and end locations when synthesizing code.
+ 	(cp_coroutine_transform::cp_coroutine_transform): Set the
+ 	function end location.
+ 
+ 2025-06-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* constraint.cc (failed_completions_map): New.
+ 	(note_failed_type_completion): Rename from
+ 	note_failed_type_completion_for_satisfaction.  Add
+ 	-Wsfinae-incomplete handling.
+ 	(failed_completion_location): New.
+ 	* class.cc (finish_struct_1): Add -Wsfinae-incomplete warning.
+ 	* decl.cc (require_deduced_type): Adjust.
+ 	(finish_function): Add -Wsfinae-incomplete warning.
+ 	* typeck.cc (complete_type_or_maybe_complain): Adjust.
+ 	(cxx_sizeof_or_alignof_type): Call note_failed_type_completion.
+ 	* pt.cc (dependent_template_arg_p): No longer static.
+ 	* cp-tree.h: Adjust.
+ 
+ 2025-06-16  yxj-github-437  <2457369732@qq.com>
+ 
+ 	* parser.cc (cp_parser_asm_operand_list): Check for unexpanded
+ 	parameter packs.
+ 
  2025-06-14  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* coroutines.cc (build_co_await): Identify diagnostics
diff -Nrcpad gcc-16-20250615/gcc/cp/class.cc gcc-16-20250622/gcc/cp/class.cc
*** gcc-16-20250615/gcc/cp/class.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/class.cc	Sun Jun 22 22:32:19 2025
*************** finish_struct_1 (tree t)
*** 7920,7925 ****
--- 7920,7936 ----
        return;
      }
  
+   if (location_t fcloc = failed_completion_location (t))
+     {
+       auto_diagnostic_group adg;
+       if (warning (OPT_Wsfinae_incomplete_,
+ 		   "defining %qT, which previously failed to be complete "
+ 		   "in a SFINAE context", t)
+ 	  && warn_sfinae_incomplete == 1)
+ 	inform (fcloc, "here.  Use %qs for a diagnostic at that point",
+ 		"-Wsfinae-incomplete=2");
+     }
+ 
    /* If this type was previously laid out as a forward reference,
       make sure we lay it out again.  */
    TYPE_SIZE (t) = NULL_TREE;
diff -Nrcpad gcc-16-20250615/gcc/cp/constraint.cc gcc-16-20250622/gcc/cp/constraint.cc
*** gcc-16-20250615/gcc/cp/constraint.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/constraint.cc	Sun Jun 22 22:32:19 2025
*************** tsubst_parameter_mapping (tree map, tree
*** 1836,1842 ****
  static bool satisfying_constraint;
  
  /* A vector of incomplete types (and of declarations with undeduced return type),
!    appended to by note_failed_type_completion_for_satisfaction.  The
     satisfaction caches use this in order to keep track of "potentially unstable"
     satisfaction results.
  
--- 1836,1842 ----
  static bool satisfying_constraint;
  
  /* A vector of incomplete types (and of declarations with undeduced return type),
!    appended to by note_failed_type_completion.  The
     satisfaction caches use this in order to keep track of "potentially unstable"
     satisfaction results.
  
*************** static bool satisfying_constraint;
*** 1845,1865 ****
  
  static GTY((deletable)) vec<tree, va_gc> *failed_type_completions;
  
  /* Called whenever a type completion (or return type deduction) failure occurs
     that definitely affects the meaning of the program, by e.g. inducing
     substitution failure.  */
  
  void
! note_failed_type_completion_for_satisfaction (tree t)
  {
    if (satisfying_constraint)
      {
!       gcc_checking_assert ((TYPE_P (t) && !COMPLETE_TYPE_P (t))
! 			   || (DECL_P (t) && undeduced_auto_decl (t)));
!       vec_safe_push (failed_type_completions, t);
      }
  }
  
  /* Returns true if the range [BEGIN, END) of elements within the
     failed_type_completions vector contains a complete type (or a
     declaration with a non-placeholder return type).  */
--- 1845,1913 ----
  
  static GTY((deletable)) vec<tree, va_gc> *failed_type_completions;
  
+ /* A map of where types were found to be incomplete in SFINAE context, for
+    warning if they are later completed.  */
+ 
+ static GTY((cache)) hash_map<tree, location_t, decl_location_traits> *failed_completions_map;
+ 
  /* Called whenever a type completion (or return type deduction) failure occurs
     that definitely affects the meaning of the program, by e.g. inducing
     substitution failure.  */
  
  void
! note_failed_type_completion (tree t, tsubst_flags_t complain)
  {
+   if (dependent_template_arg_p (t))
+     return;
+ 
+   gcc_checking_assert ((TYPE_P (t) && !COMPLETE_TYPE_P (t))
+ 		       || (DECL_P (t) && undeduced_auto_decl (t)));
+ 
    if (satisfying_constraint)
+     vec_safe_push (failed_type_completions, t);
+ 
+   if (TYPE_P (t))
      {
!       if (!CLASS_TYPE_P (t))
! 	return;
!       t = TYPE_MAIN_DECL (t);
!     }
!   if (!(complain & tf_error)
!       && warning_enabled_at (DECL_SOURCE_LOCATION (t),
! 			     OPT_Wsfinae_incomplete_))
!     {
!       if (warn_sfinae_incomplete > 1)
! 	{
! 	  if (TREE_CODE (t) == TYPE_DECL)
! 	    warning (OPT_Wsfinae_incomplete_,
! 		     "failed to complete %qT in SFINAE context", TREE_TYPE (t));
! 	  else
! 	    warning (OPT_Wsfinae_incomplete_,
! 		     "failed to deduce %qD in SFINAE context", t);
! 	}
!       if (!failed_completions_map)
! 	failed_completions_map
! 	  = hash_map<tree, location_t, decl_location_traits>::create_ggc ();
!       failed_completions_map->put (t, input_location);
      }
  }
  
+ /* If T was previously found to be incomplete in SFINAE context, return the
+    location where that happened, otherwise UNKNOWN_LOCATION.  */
+ 
+ location_t
+ failed_completion_location (tree t)
+ {
+   if (failed_completions_map)
+     {
+       if (TYPE_P (t))
+ 	t = TYPE_MAIN_DECL (t);
+       if (location_t *p = failed_completions_map->get (t))
+ 	return *p;
+     }
+   return UNKNOWN_LOCATION;
+ }
+ 
  /* Returns true if the range [BEGIN, END) of elements within the
     failed_type_completions vector contains a complete type (or a
     declaration with a non-placeholder return type).  */
diff -Nrcpad gcc-16-20250615/gcc/cp/coroutines.cc gcc-16-20250622/gcc/cp/coroutines.cc
*** gcc-16-20250615/gcc/cp/coroutines.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/coroutines.cc	Sun Jun 22 22:32:19 2025
*************** static bool coro_promise_type_found_p (t
*** 191,198 ****
    just syntactic sugar for a co_await).
  
    We defer the analysis and transformation until template expansion is
!   complete so that we have complete types at that time.  */
  
  
  /* The state that we collect during parsing (and template expansion) for
     a coroutine.  */
--- 191,277 ----
    just syntactic sugar for a co_await).
  
    We defer the analysis and transformation until template expansion is
!   complete so that we have complete types at that time.
! 
!   ---------------------------------------------------------------------------
! 
!   Coroutine state, and responsibility for its release.
! 
!   As noted above, a coroutine has some state that persists across suspensions.
! 
!   The state has two components:
!     * State that is specified by the standard and persists for the entire
!       life of the coroutine.
!     * Local state that is constructed/destructed as scopes in the original
!       function body are entered/exited.  The destruction of local state is
!       always the responsibility of the body code.
! 
!   The persistent state (and the overall storage for the state) must be
!   managed in two places:
!     * The ramp function (which allocates and builds this - and can, in some
!       cases, be responsible for destroying it)
!     * The re-written function body which can destroy it when that body
!       completes its final suspend - or when the handle.destroy () is called.
! 
!   In all cases the ramp holds responsibility for constructing the standard-
!   mandated persistent state.
! 
!   There are four ways in which the ramp might be re-entered after starting
!   the function body:
!     A The body could suspend (one might expect that to be the 'normal' case
!       for most coroutines).
!     B The body might complete either synchronously or via continuations.
!     C An exception might be thrown during the setup of the initial await
!       expression, before the initial awaiter resumes.
!     D An exception might be processed by promise.unhandled_exception () and
!       that, in turn, might re-throw it (or throw something else).  In this
!       case, the coroutine is considered suspended at the final suspension
!       point.
! 
!   Until the ramp return value has been constructed, the ramp is considered
!   to have a use of the state.
! 
!   To manage these interacting conditions we allocate a reference counter
!   for the frame state.  This is initialised to 1 by the ramp as part of its
!   startup (note that failures/exceptions in the startup code are handled
!   locally to the ramp).
  
+   When the body returns (either normally, or by exception) the ramp releases
+   its use.
+ 
+   Once the rewritten coroutine body is started, the body is considered to
+   have a use of the frame.  This use (potentially) needs to be released if
+   an exception is thrown from the body.  We implement this using an eh-only
+   cleanup around the initial await and function body.  If we have the case
+   D above, then we do not release the use.
+ 
+   In case:
+ 
+     A, typically the ramp would be re-entered with the body holding a use,
+     and therefore the ramp should not destroy the state.
+ 
+     B, both the body and ramp will have released their uses, and the ramp
+     should destroy the state.
+ 
+     C, we must arrange for the body to release its use, because we require
+     the ramp to cleanup in this circumstance.
+ 
+     D is an outlier, since the responsibility for destruction of the state
+     now rests with the user's code (via a handle.destroy() call).
+ 
+     NOTE: In the case that the body has never suspended before such an
+     exception occurs, the only reasonable way for the user code to obtain the
+     necessary handle is if unhandled_exception() throws the handle or some
+     object that contains the handle.  That is outside of the designs here -
+     if the user code might need this corner-case, then such provision will
+     have to be made.
+ 
+   In the ramp, we implement destruction for the persistent frame state by
+   means of cleanups.  These are run conditionally when the reference count
+   is 0 signalling that both the body and the ramp have completed.
+ 
+   In the body, once we pass the final suspend, then we test the use and
+   delete the state if the use is 0.  */
  
  /* The state that we collect during parsing (and template expansion) for
     a coroutine.  */
*************** struct GTY((for_user)) coroutine_info
*** 206,216 ****
    tree traits_type;   /* The cached traits type for this function.  */
    tree handle_type;   /* The cached coroutine handle for this function.  */
    tree self_h_proxy;  /* A handle instance that is used as the proxy for the
! 			 one that will eventually be allocated in the coroutine
! 			 frame.  */
    tree promise_proxy; /* Likewise, a proxy promise instance.  */
!   tree from_address;  /* handle_type from_address function.  */
!   tree return_void;   /* The expression for p.return_void() if it exists.  */
    location_t first_coro_keyword; /* The location of the keyword that made this
  				    function into a coroutine.  */
  
--- 285,294 ----
    tree traits_type;   /* The cached traits type for this function.  */
    tree handle_type;   /* The cached coroutine handle for this function.  */
    tree self_h_proxy;  /* A handle instance that is used as the proxy for the
! 			 one that will eventually be built in lowering.  */
    tree promise_proxy; /* Likewise, a proxy promise instance.  */
!   tree from_address;  /* handle_type from_address() function.  */
!   tree return_void;   /* The expression for p.return_void(), if it exists.  */
    location_t first_coro_keyword; /* The location of the keyword that made this
  				    function into a coroutine.  */
  
*************** static GTY(()) tree coro_resume_index_id
*** 348,353 ****
--- 426,432 ----
  static GTY(()) tree coro_self_handle_id;
  static GTY(()) tree coro_actor_continue_id;
  static GTY(()) tree coro_frame_i_a_r_c_id;
+ static GTY(()) tree coro_frame_refcount_id;
  
  /* Create the identifiers used by the coroutines library interfaces and
     the implementation frame state.  */
*************** coro_init_identifiers ()
*** 385,390 ****
--- 464,470 ----
    coro_resume_index_id = get_identifier ("_Coro_resume_index");
    coro_self_handle_id = get_identifier ("_Coro_self_handle");
    coro_actor_continue_id = get_identifier ("_Coro_actor_continue");
+   coro_frame_refcount_id = get_identifier ("_Coro_frame_refcount");
  }
  
  /* Trees we only need to set up once.  */
*************** finish_co_await_expr (location_t kw, tre
*** 1467,1472 ****
--- 1547,1558 ----
    if (!expr || error_operand_p (expr))
      return error_mark_node;
  
+   if (cp_unevaluated_operand)
+     {
+       error_at (kw, "%qs cannot be used in an unevaluated context","co_await");
+       return error_mark_node;
+     }
+ 
    if (!coro_common_keyword_context_valid_p (current_function_decl, kw,
  					    "co_await"))
      return error_mark_node;
*************** finish_co_yield_expr (location_t kw, tre
*** 1547,1552 ****
--- 1633,1644 ----
    if (!expr || error_operand_p (expr))
      return error_mark_node;
  
+   if (cp_unevaluated_operand)
+     {
+       error_at (kw, "%qs cannot be used in an unevaluated context","co_yield");
+       return error_mark_node;
+     }
+ 
    /* Check the general requirements and simple syntax errors.  */
    if (!coro_common_keyword_context_valid_p (current_function_decl, kw,
  					    "co_yield"))
*************** struct coro_aw_data
*** 1970,1981 ****
    tree coro_fp;    /* Frame pointer var.  */
    tree resume_idx; /* This is the index var in the frame.  */
    tree i_a_r_c;    /* initial suspend await_resume() was called if true.  */
-   tree self_h;     /* This is a handle to the current coro (frame var).  */
    tree cleanup;    /* This is where to go once we complete local destroy.  */
    tree cororet;    /* This is where to go if we suspend.  */
    tree corocont;   /* This is where to go if we continue.  */
    tree dispatch;   /* This is where we go if we restart the dispatch.  */
    tree conthand;   /* This is the handle for a continuation.  */
    unsigned index;  /* This is our current resume index.  */
  };
  
--- 2062,2074 ----
    tree coro_fp;    /* Frame pointer var.  */
    tree resume_idx; /* This is the index var in the frame.  */
    tree i_a_r_c;    /* initial suspend await_resume() was called if true.  */
    tree cleanup;    /* This is where to go once we complete local destroy.  */
    tree cororet;    /* This is where to go if we suspend.  */
    tree corocont;   /* This is where to go if we continue.  */
    tree dispatch;   /* This is where we go if we restart the dispatch.  */
    tree conthand;   /* This is the handle for a continuation.  */
+   tree handle_type; /* Handle type for this coroutine...  */
+   tree hfa_m;       /* ... and handle.from_address() for this.  */
    unsigned index;  /* This is our current resume index.  */
  };
  
*************** expand_one_await_expression (tree *expr,
*** 2093,2098 ****
--- 2186,2203 ----
  
    tree suspend = TREE_VEC_ELT (awaiter_calls, 1); /* await_suspend().  */
    tree susp_type = TREE_TYPE (suspend);
+   tree susp_call = suspend;
+   if (TREE_CODE (suspend) == TARGET_EXPR)
+     susp_call = TARGET_EXPR_INITIAL (suspend);
+   gcc_checking_assert (TREE_CODE (susp_call) == CALL_EXPR);
+   tree dummy_ch = build_dummy_object (data->handle_type);
+   r = fold_convert (build_pointer_type (void_type_node), data->coro_fp);
+   vec<tree, va_gc> *args = make_tree_vector_single (r);
+   tree hfa = cp_fold_rvalue (
+     build_new_method_call (dummy_ch, data->hfa_m, &args, NULL_TREE,
+ 			   LOOKUP_NORMAL, NULL, tf_warning_or_error));
+   release_tree_vector (args);
+   CALL_EXPR_ARG (susp_call, call_expr_nargs (susp_call) - 1) = hfa;
  
    bool is_cont = false;
    /* NOTE: final suspend can't resume; the "resume" label in that case
*************** build_actor_fn (location_t loc, tree cor
*** 2574,2594 ****
    /* Now we start building the rewritten function body.  */
    add_stmt (build_stmt (loc, LABEL_EXPR, actor_begin_label));
  
!   /* actor's coroutine 'self handle'.  */
!   tree ash = coro_build_frame_access_expr (actor_frame, coro_self_handle_id,
! 					   false, tf_warning_or_error);
!   /* So construct the self-handle from the frame address.  */
!   tree hfa_m = get_coroutine_from_address (orig);
!   /* Should have been set earlier by coro_promise_type_found_p.  */
!   gcc_assert (hfa_m);
! 
!   tree r = build1 (CONVERT_EXPR, build_pointer_type (void_type_node), actor_fp);
!   vec<tree, va_gc> *args = make_tree_vector_single (r);
!   tree hfa = build_new_method_call (ash, hfa_m, &args, NULL_TREE, LOOKUP_NORMAL,
! 				    NULL, tf_warning_or_error);
!   r = cp_build_init_expr (ash, hfa);
!   finish_expr_stmt (r);
!   release_tree_vector (args);
  
    /* Now we know the real promise, and enough about the frame layout to
       decide where to put things.  */
--- 2679,2694 ----
    /* Now we start building the rewritten function body.  */
    add_stmt (build_stmt (loc, LABEL_EXPR, actor_begin_label));
  
!   tree i_a_r_c = NULL_TREE;
!   if (flag_exceptions)
!     {
!       i_a_r_c
! 	= coro_build_frame_access_expr (actor_frame, coro_frame_i_a_r_c_id,
! 					false, tf_warning_or_error);
!       tree m = cp_build_modify_expr (loc, i_a_r_c, NOP_EXPR,
! 				     boolean_false_node, tf_warning_or_error);
!       finish_expr_stmt (m);
!     }
  
    /* Now we know the real promise, and enough about the frame layout to
       decide where to put things.  */
*************** build_actor_fn (location_t loc, tree cor
*** 2603,2609 ****
    /* Add in our function body with the co_returns rewritten to final form.  */
    add_stmt (fnbody);
  
!   /* Now do the tail of the function; first cleanups.  */
    r = build_stmt (loc, LABEL_EXPR, del_promise_label);
    add_stmt (r);
  
--- 2703,2730 ----
    /* Add in our function body with the co_returns rewritten to final form.  */
    add_stmt (fnbody);
  
!   /* We are done with the frame, but if the ramp still has a hold on it
!      we should not cleanup.  So decrement the refcount and then return to
!      the ramp if it is > 0.  */
!   tree coro_frame_refcount
!     = coro_build_frame_access_expr (actor_frame, coro_frame_refcount_id,
! 				    false, tf_warning_or_error);
!   tree released = build2_loc (loc, MINUS_EXPR, short_unsigned_type_node,
! 			      coro_frame_refcount,
! 			      build_int_cst (short_unsigned_type_node, 1));
!   tree r = cp_build_modify_expr (loc, coro_frame_refcount, NOP_EXPR, released,
! 				 tf_warning_or_error);
!   finish_expr_stmt (r);
!   tree cond = build2_loc (loc, NE_EXPR, short_unsigned_type_node,
! 			  coro_frame_refcount,
! 			  build_int_cst (short_unsigned_type_node, 0));
!   tree ramp_cu_if = begin_if_stmt ();
!   finish_if_stmt_cond (cond, ramp_cu_if);
!   finish_return_stmt (NULL_TREE);
!   finish_then_clause (ramp_cu_if);
!   finish_if_stmt (ramp_cu_if);
! 
!   /* Otherwise, do the tail of the function; first cleanups.  */
    r = build_stmt (loc, LABEL_EXPR, del_promise_label);
    add_stmt (r);
  
*************** build_actor_fn (location_t loc, tree cor
*** 2672,2687 ****
    gcc_checking_assert (maybe_cleanup_point_expr_void (r) == r);
    add_stmt (r);
  
    /* We've now rewritten the tree and added the initial and final
       co_awaits.  Now pass over the tree and expand the co_awaits.  */
-   tree i_a_r_c = NULL_TREE;
-   if (flag_exceptions)
-     i_a_r_c = coro_build_frame_access_expr (actor_frame, coro_frame_i_a_r_c_id,
- 					   false, tf_warning_or_error);
  
    coro_aw_data data = {actor, actor_fp, resume_idx_var, i_a_r_c,
! 		       ash, del_promise_label, ret_label,
! 		       continue_label, restart_dispatch_label, continuation, 2};
    cp_walk_tree (&actor_body, await_statement_expander, &data, NULL);
  
    BIND_EXPR_BODY (actor_bind) = pop_stmt_list (actor_body);
--- 2793,2811 ----
    gcc_checking_assert (maybe_cleanup_point_expr_void (r) == r);
    add_stmt (r);
  
+   /* How to construct the handle for this coroutine from the frame address.  */
+   tree hfa_m = get_coroutine_from_address (orig);
+   /* Should have been set earlier by coro_promise_type_found_p.  */
+   gcc_assert (hfa_m);
+   tree handle_type = TREE_TYPE (get_coroutine_self_handle_proxy (orig));
+ 
    /* We've now rewritten the tree and added the initial and final
       co_awaits.  Now pass over the tree and expand the co_awaits.  */
  
    coro_aw_data data = {actor, actor_fp, resume_idx_var, i_a_r_c,
! 		       del_promise_label, ret_label,
! 		       continue_label, restart_dispatch_label, continuation,
! 		       handle_type, hfa_m, 2};
    cp_walk_tree (&actor_body, await_statement_expander, &data, NULL);
  
    BIND_EXPR_BODY (actor_bind) = pop_stmt_list (actor_body);
*************** analyze_expression_awaits (tree *stmt, i
*** 3467,3472 ****
--- 3591,3609 ----
  		}
  	      *do_subtree = 0;
  	    }
+ 	  else if (!fn && CALL_EXPR_IFN (*stmt) == IFN_ASSUME)
+ 	    {
+ 	      tree expr = CALL_EXPR_ARG (*stmt, 0);
+ 	      if (TREE_SIDE_EFFECTS (expr))
+ 		{
+ 		  location_t loc_e = cp_expr_location (expr);
+ 		  location_t loc_s = cp_expr_location (*stmt);
+ 		  location_t loc_n = make_location (loc_e, loc_s, loc_s);
+ 		  warning_at (loc_n, OPT_Wattributes,"assumption ignored"
+ 			      " because it contains an await-expression");
+ 		  *stmt = build_empty_stmt (loc_n);
+ 		}
+ 	    }
  	}
  	break;
        case CO_YIELD_EXPR:
*************** cp_coroutine_transform::wrap_original_fu
*** 4313,4320 ****
  {
    /* Avoid the code here attaching a location that makes the debugger jump.  */
    iloc_sentinel stable_input_loc (fn_start);
!   location_t loc = UNKNOWN_LOCATION;
!   input_location = loc;
  
    /* This will be our new outer scope.  */
    tree update_body
--- 4450,4456 ----
  {
    /* Avoid the code here attaching a location that makes the debugger jump.  */
    iloc_sentinel stable_input_loc (fn_start);
!   location_t loc = fn_start;
  
    /* This will be our new outer scope.  */
    tree update_body
*************** cp_coroutine_transform::wrap_original_fu
*** 4400,4415 ****
    var_list = promise;
    add_decl_expr (promise);
  
-   /* We need a handle to this coroutine, which is passed to every
-      await_suspend().  This was created on demand when parsing we now link it
-      into our scope.  */
-   var = get_coroutine_self_handle_proxy (orig_fn_decl);
-   DECL_CONTEXT (var) = orig_fn_decl;
-   DECL_SOURCE_LOCATION (var) = loc;
-   DECL_CHAIN (var) = var_list;
-   var_list = var;
-   add_decl_expr (var);
- 
    /* If we have function parms, then these will be copied to the coroutine
       frame as per [dcl.fct.def.coroutine] / 13.
       Here, we create a local (proxy) variable for each parm, since the original
--- 4536,4541 ----
*************** cp_coroutine_transform::wrap_original_fu
*** 4453,4473 ****
    var_list = resume_idx_var;
    add_decl_expr (resume_idx_var);
  
    /* If the coroutine has a frame that needs to be freed, this will be set by
       the ramp.  */
!   var = coro_build_artificial_var (fn_start, coro_frame_needs_free_id,
  				   boolean_type_node, orig_fn_decl, NULL_TREE);
    DECL_CHAIN (var) = var_list;
    var_list = var;
    add_decl_expr (var);
  
    if (flag_exceptions)
      {
        /* Build promise.unhandled_exception();  */
        tree ueh
  	= coro_build_promise_expression (orig_fn_decl, promise,
  					 coro_unhandled_exception_identifier,
! 					 fn_start, NULL, /*musthave=*/true);
        /* Create and initialize the initial-await-resume-called variable per
  	 [dcl.fct.def.coroutine] / 5.3.  */
        tree i_a_r_c
--- 4579,4616 ----
    var_list = resume_idx_var;
    add_decl_expr (resume_idx_var);
  
+   tree coro_frame_refcount
+     = coro_build_artificial_var (loc, coro_frame_refcount_id,
+ 				 short_unsigned_type_node, orig_fn_decl,
+ 				 NULL_TREE);
+   DECL_CHAIN (coro_frame_refcount) = var_list;
+   var_list = coro_frame_refcount;
+   add_decl_expr (coro_frame_refcount);
+ 
    /* If the coroutine has a frame that needs to be freed, this will be set by
       the ramp.  */
!   var = coro_build_artificial_var (loc, coro_frame_needs_free_id,
  				   boolean_type_node, orig_fn_decl, NULL_TREE);
    DECL_CHAIN (var) = var_list;
    var_list = var;
    add_decl_expr (var);
  
+   /* We consider that the body has a use of the frame once we start to process
+      the initial suspend expression. (the use might be relinquished if we
+      encounter an exception before the body is finished).  */
+   tree body_use
+     = build2_loc (loc, PLUS_EXPR, short_unsigned_type_node, coro_frame_refcount,
+ 		  build_int_cst (short_unsigned_type_node, 1));
+   body_use = cp_build_modify_expr (loc, coro_frame_refcount, NOP_EXPR, body_use,
+ 				   tf_warning_or_error);
+   finish_expr_stmt (body_use);
    if (flag_exceptions)
      {
        /* Build promise.unhandled_exception();  */
        tree ueh
  	= coro_build_promise_expression (orig_fn_decl, promise,
  					 coro_unhandled_exception_identifier,
! 					 loc, NULL, /*musthave=*/true);
        /* Create and initialize the initial-await-resume-called variable per
  	 [dcl.fct.def.coroutine] / 5.3.  */
        tree i_a_r_c
*************** cp_coroutine_transform::wrap_original_fu
*** 4481,4490 ****
--- 4624,4651 ----
        tree tcb = build_stmt (loc, TRY_BLOCK, NULL_TREE, NULL_TREE);
        add_stmt (tcb);
        TRY_STMTS (tcb) = push_stmt_list ();
+       /* We need a new scope to handle the cleanup for the ramp use that is
+ 	 needed for exceptions.  */
+       tree except_scope = begin_compound_stmt (0);
+       current_binding_level->artificial = 1;
+       tree release
+ 	= build2_loc (loc, MINUS_EXPR, short_unsigned_type_node,
+ 		      coro_frame_refcount, build_int_cst (short_unsigned_type_node, 1));
+        release = cp_build_modify_expr (loc, coro_frame_refcount, NOP_EXPR,
+ 				       release, tf_warning_or_error);
+       /* Once we pass the initial await resume, the cleanup rules on exception
+ 	 change so that the responsibility lies with the caller.  */
+       release = build3 (COND_EXPR, void_type_node, i_a_r_c,
+ 			build_empty_stmt (loc), release);
+       push_cleanup (NULL_TREE, release, /*ehonly*/true);
        /* Add the initial await to the start of the user-authored function.  */
        finish_expr_stmt (initial_await);
+       /* End the scope that handles the remove of frame-use on exception.  */
+       finish_compound_stmt (except_scope);
+ 
        /* Append the original function body.  */
        add_stmt (coroutine_body);
+ 
        if (return_void)
  	add_stmt (return_void);
        TRY_STMTS (tcb) = pop_stmt_list (TRY_STMTS (tcb));
*************** cp_coroutine_transform::wrap_original_fu
*** 4529,4537 ****
  	  tree ueh_meth
  	    = lookup_promise_method (orig_fn_decl,
  				     coro_unhandled_exception_identifier,
! 				     fn_start, /*musthave=*/false);
  	  if (!ueh_meth || ueh_meth == error_mark_node)
! 	    warning_at (fn_start, 0, "no member named %qE in %qT",
  			coro_unhandled_exception_identifier,
  			get_coroutine_promise_type (orig_fn_decl));
  	}
--- 4690,4698 ----
  	  tree ueh_meth
  	    = lookup_promise_method (orig_fn_decl,
  				     coro_unhandled_exception_identifier,
! 				     loc, /*musthave=*/false);
  	  if (!ueh_meth || ueh_meth == error_mark_node)
! 	    warning_at (loc, 0, "no member named %qE in %qT",
  			coro_unhandled_exception_identifier,
  			get_coroutine_promise_type (orig_fn_decl));
  	}
*************** cp_coroutine_transform::wrap_original_fu
*** 4544,4549 ****
--- 4705,4714 ----
  	add_stmt (return_void);
      }
  
+   /* We are now doing actions associated with the end of the function, so
+      point to the closing brace.  */
+   input_location = loc = fn_end;
+ 
    /* co_return branches to the final_suspend label, so declare that now.  */
    fs_label
      = create_named_label_with_ctx (loc, "final.suspend", NULL_TREE);
*************** cp_coroutine_transform::build_ramp_funct
*** 4925,4955 ****
       just set it true.  */
    TREE_USED (frame_needs_free) = true;
  
!   tree iarc_x = NULL_TREE;
!   tree coro_before_return = NULL_TREE;
!   if (flag_exceptions)
!     {
!       coro_before_return
! 	= coro_build_and_push_artificial_var (loc, "_Coro_before_return",
! 					      boolean_type_node, orig_fn_decl,
! 					      boolean_true_node);
!       iarc_x
! 	= coro_build_and_push_artificial_var_with_dve (loc,
! 						       coro_frame_i_a_r_c_id,
! 						       boolean_type_node,
! 						       orig_fn_decl,
! 						       boolean_false_node,
! 						       deref_fp);
!       tree frame_cleanup = push_stmt_list ();
!       tree do_fr_cleanup
! 	= build1_loc (loc, TRUTH_NOT_EXPR, boolean_type_node, iarc_x);
!       do_fr_cleanup = build2_loc (loc, TRUTH_ANDIF_EXPR, boolean_type_node,
! 				  coro_before_return, do_fr_cleanup);
!       r = build3 (COND_EXPR, void_type_node, do_fr_cleanup,
! 			     delete_frame_call, void_node);
!       finish_expr_stmt (r);
!       push_cleanup (coro_fp, pop_stmt_list (frame_cleanup), /*eh_only*/true);
!     }
  
    /* Put the resumer and destroyer functions in.  */
  
--- 5090,5107 ----
       just set it true.  */
    TREE_USED (frame_needs_free) = true;
  
!   tree coro_frame_refcount
!     = coro_build_and_push_artificial_var_with_dve (loc, coro_frame_refcount_id,
! 						   short_unsigned_type_node,
! 						   orig_fn_decl, NULL_TREE,
! 						   deref_fp);
!   /* Cleanup if both the ramp and the body have finished.  */
!   tree cond
!     = build2_loc (loc, EQ_EXPR, short_unsigned_type_node, coro_frame_refcount,
! 		  build_int_cst (short_unsigned_type_node, 0));
!   r = build3 (COND_EXPR, void_type_node, cond, delete_frame_call,
! 	      build_empty_stmt (loc));
!   push_cleanup (coro_fp, r, /*eh_only*/false);
  
    /* Put the resumer and destroyer functions in.  */
  
*************** cp_coroutine_transform::build_ramp_funct
*** 5024,5047 ****
  
  	  /* Arrange for parm copies to be cleaned up when an exception is
  	     thrown before initial await resume.  */
! 	  if (flag_exceptions && !parm.trivial_dtor)
  	    {
  	      parm.fr_copy_dtor
  		= cxx_maybe_build_cleanup (fld_idx, tf_warning_or_error);
  	      if (parm.fr_copy_dtor && parm.fr_copy_dtor != error_mark_node)
  		{
  		  param_dtor_list.safe_push (parm.field_id);
! 		  tree param_cleanup = push_stmt_list ();
! 		  tree do_cleanup
! 		    = build1_loc (loc, TRUTH_NOT_EXPR, boolean_type_node, iarc_x);
! 		  do_cleanup
! 		    = build2_loc (loc, TRUTH_ANDIF_EXPR, boolean_type_node,
! 				  coro_before_return, do_cleanup);
! 		  r = build3_loc (loc, COND_EXPR, void_type_node, do_cleanup,
! 				  parm.fr_copy_dtor, void_node);
! 		  finish_expr_stmt (r);
! 		  push_cleanup (fld_idx, pop_stmt_list (param_cleanup),
! 				/*eh_only*/true);
  		}
  	    }
  	}
--- 5176,5195 ----
  
  	  /* Arrange for parm copies to be cleaned up when an exception is
  	     thrown before initial await resume.  */
! 	  if (!parm.trivial_dtor)
  	    {
  	      parm.fr_copy_dtor
  		= cxx_maybe_build_cleanup (fld_idx, tf_warning_or_error);
  	      if (parm.fr_copy_dtor && parm.fr_copy_dtor != error_mark_node)
  		{
  		  param_dtor_list.safe_push (parm.field_id);
! 		  cond
! 		    = build2_loc (loc, EQ_EXPR, short_unsigned_type_node,
! 				  coro_frame_refcount,
! 				  build_int_cst (short_unsigned_type_node, 0));
! 		  r = build3_loc (loc, COND_EXPR, void_type_node, cond,
! 				  parm.fr_copy_dtor, build_empty_stmt (loc));
! 		  push_cleanup (fld_idx, r, /*eh_only*/false);
  		}
  	    }
  	}
*************** cp_coroutine_transform::build_ramp_funct
*** 5086,5107 ****
  	finish_expr_stmt (r);
      }
  
!   if (flag_exceptions)
      {
!       tree promise_dtor = cxx_maybe_build_cleanup (p, tf_warning_or_error);
!       /* If the promise is live, then run its dtor if that's available.  */
!       if (promise_dtor && promise_dtor != error_mark_node)
! 	{
! 	  tree promise_cleanup = push_stmt_list ();
! 	  tree do_cleanup
! 	    = build1_loc (loc, TRUTH_NOT_EXPR, boolean_type_node, iarc_x);
! 	  do_cleanup = build2_loc (loc, TRUTH_ANDIF_EXPR, boolean_type_node,
! 				   coro_before_return, do_cleanup);
! 	  r = build3 (COND_EXPR, void_type_node, do_cleanup,
! 		      promise_dtor, void_node);
! 	  finish_expr_stmt (r);
! 	  push_cleanup (p, pop_stmt_list (promise_cleanup), /*eh_only*/true);
! 	}
      }
  
    tree get_ro
--- 5234,5249 ----
  	finish_expr_stmt (r);
      }
  
!   tree promise_dtor = cxx_maybe_build_cleanup (p, tf_warning_or_error);
!   /* If the promise is live, then run its dtor if that's available.  */
!   if (promise_dtor && promise_dtor != error_mark_node)
      {
!       cond = build2_loc (loc, EQ_EXPR, short_unsigned_type_node,
! 			 coro_frame_refcount,
! 			 build_int_cst (short_unsigned_type_node, 0));
!       r = build3 (COND_EXPR, void_type_node, cond, promise_dtor,
! 		  build_empty_stmt (loc));
!       push_cleanup (p, r, /*eh_only*/false);
      }
  
    tree get_ro
*************** cp_coroutine_transform::build_ramp_funct
*** 5166,5181 ****
  	push_cleanup (coro_gro, coro_gro_cleanup, /*eh_only*/false);
      }
  
!   /* Start the coroutine body.  */
!   r = build_call_expr_loc (fn_start, resumer, 1, coro_fp);
    finish_expr_stmt (r);
  
!   if (flag_exceptions)
!     {
!       r = cp_build_modify_expr (input_location, coro_before_return, NOP_EXPR,
! 				boolean_false_node, tf_warning_or_error);
!       finish_expr_stmt (r);
!     }
  
    /* The ramp is done, we just need the return statement, which we build from
       the return object we constructed before we called the actor.  */
--- 5308,5329 ----
  	push_cleanup (coro_gro, coro_gro_cleanup, /*eh_only*/false);
      }
  
!   /* Start the coroutine body, we now have a use of the frame...  */
!   r = cp_build_modify_expr (loc, coro_frame_refcount, NOP_EXPR,
! 			    build_int_cst (short_unsigned_type_node, 1),
! 			    tf_warning_or_error);
    finish_expr_stmt (r);
+   /* ... but when we finish we want to release that, and we want to do that
+      before any of the other cleanups run.  */
+   tree released
+     = build2_loc (loc, MINUS_EXPR, short_unsigned_type_node, coro_frame_refcount,
+ 		  build_int_cst (short_unsigned_type_node, 1));
+   released = cp_build_modify_expr (loc, coro_frame_refcount, NOP_EXPR, released,
+ 				 tf_warning_or_error);
+   push_cleanup (NULL_TREE, released, /*eh_only*/false);
  
!   r = build_call_expr_loc (fn_start, resumer, 1, coro_fp);
!   finish_expr_stmt (r);
  
    /* The ramp is done, we just need the return statement, which we build from
       the return object we constructed before we called the actor.  */
*************** cp_coroutine_transform::~cp_coroutine_tr
*** 5257,5263 ****
    bool _Coro_frame_needs_free; free the coro frame mem if set.
    bool _Coro_i_a_r_c; [dcl.fct.def.coroutine] / 5.3
    short _Coro_resume_index;
-   handle_type _Coro_self_handle;
    parameter copies (were required).
    local variables saved (including awaitables)
    (maybe) trailing space.
--- 5405,5410 ----
diff -Nrcpad gcc-16-20250615/gcc/cp/cp-trait.def gcc-16-20250622/gcc/cp/cp-trait.def
*** gcc-16-20250615/gcc/cp/cp-trait.def	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/cp-trait.def	Sun Jun 22 22:32:19 2025
*************** DEFTRAIT_EXPR (IS_TRIVIAL, "__is_trivial
*** 100,106 ****
  DEFTRAIT_EXPR (IS_TRIVIALLY_ASSIGNABLE, "__is_trivially_assignable", 2)
  DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE, "__is_trivially_constructible", -1)
  DEFTRAIT_EXPR (IS_TRIVIALLY_COPYABLE, "__is_trivially_copyable", 1)
! DEFTRAIT_EXPR (IS_TRIVIALLY_DESTRUCTIBLE, "__is_trivially_destructible", -1)
  DEFTRAIT_EXPR (IS_UNBOUNDED_ARRAY, "__is_unbounded_array", 1)
  DEFTRAIT_EXPR (IS_UNION, "__is_union", 1)
  DEFTRAIT_EXPR (IS_VIRTUAL_BASE_OF, "__builtin_is_virtual_base_of", 2)
--- 100,106 ----
  DEFTRAIT_EXPR (IS_TRIVIALLY_ASSIGNABLE, "__is_trivially_assignable", 2)
  DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE, "__is_trivially_constructible", -1)
  DEFTRAIT_EXPR (IS_TRIVIALLY_COPYABLE, "__is_trivially_copyable", 1)
! DEFTRAIT_EXPR (IS_TRIVIALLY_DESTRUCTIBLE, "__is_trivially_destructible", 1)
  DEFTRAIT_EXPR (IS_UNBOUNDED_ARRAY, "__is_unbounded_array", 1)
  DEFTRAIT_EXPR (IS_UNION, "__is_union", 1)
  DEFTRAIT_EXPR (IS_VIRTUAL_BASE_OF, "__builtin_is_virtual_base_of", 2)
diff -Nrcpad gcc-16-20250615/gcc/cp/cp-tree.h gcc-16-20250622/gcc/cp/cp-tree.h
*** gcc-16-20250615/gcc/cp/cp-tree.h	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/cp-tree.h	Sun Jun 22 22:32:19 2025
*************** extern bool type_dependent_expression_p_
*** 7813,7818 ****
--- 7813,7819 ----
  extern bool value_dependent_expression_p	(tree);
  extern bool instantiation_dependent_uneval_expression_p (tree);
  extern bool any_value_dependent_elements_p      (const_tree);
+ extern bool dependent_template_arg_p		(tree);
  extern bool dependent_omp_for_p			(tree, tree, tree, tree, tree);
  extern tree resolve_typename_type		(tree, bool);
  extern tree template_for_substitution		(tree);
*************** extern hashval_t iterative_hash_constrai
*** 8842,8848 ****
  extern hashval_t hash_atomic_constraint         (tree);
  extern void diagnose_constraints                (location_t, tree, tree);
  
! extern void note_failed_type_completion_for_satisfaction (tree);
  
  /* in logic.cc */
  extern bool subsumes                            (tree, tree);
--- 8843,8850 ----
  extern hashval_t hash_atomic_constraint         (tree);
  extern void diagnose_constraints                (location_t, tree, tree);
  
! extern void note_failed_type_completion		(tree, tsubst_flags_t);
! extern location_t failed_completion_location	(tree);
  
  /* in logic.cc */
  extern bool subsumes                            (tree, tree);
diff -Nrcpad gcc-16-20250615/gcc/cp/decl.cc gcc-16-20250622/gcc/cp/decl.cc
*** gcc-16-20250615/gcc/cp/decl.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/decl.cc	Sun Jun 22 22:32:19 2025
*************** finish_function (bool inline_p)
*** 19336,19341 ****
--- 19336,19354 ----
  	}
      }
  
+   if (FNDECL_USED_AUTO (fndecl)
+       && TREE_TYPE (fntype) != DECL_SAVED_AUTO_RETURN_TYPE (fndecl))
+     if (location_t fcloc = failed_completion_location (fndecl))
+       {
+ 	auto_diagnostic_group adg;
+ 	if (warning (OPT_Wsfinae_incomplete_,
+ 		     "defining %qD, which previously failed to be deduced "
+ 		     "in a SFINAE context", fndecl)
+ 	    && warn_sfinae_incomplete == 1)
+ 	  inform (fcloc, "here.  Use %qs for a diagnostic at that point",
+ 		  "-Wsfinae-incomplete=2");
+       }
+ 
    /* Remember that we were in class scope.  */
    if (current_class_name)
      ctype = current_class_type;
*************** require_deduced_type (tree decl, tsubst_
*** 19989,19995 ****
  	/* We probably already complained about deduction failure.  */;
        else if (complain & tf_error)
  	error ("use of %qD before deduction of %<auto%>", decl);
!       note_failed_type_completion_for_satisfaction (decl);
        return false;
      }
    return true;
--- 20002,20008 ----
  	/* We probably already complained about deduction failure.  */;
        else if (complain & tf_error)
  	error ("use of %qD before deduction of %<auto%>", decl);
!       note_failed_type_completion (decl, complain);
        return false;
      }
    return true;
diff -Nrcpad gcc-16-20250615/gcc/cp/module.cc gcc-16-20250622/gcc/cp/module.cc
*** gcc-16-20250615/gcc/cp/module.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/module.cc	Sun Jun 22 22:32:19 2025
*************** class GTY((chain_next ("%h.parent"), for
*** 3879,3884 ****
--- 3879,3888 ----
    void write_macro_maps (elf_out *to, range_t &, unsigned *crc_ptr);
    bool read_macro_maps (line_map_uint_t);
  
+   void write_diagnostic_classification (elf_out *, diagnostic_context *,
+ 					unsigned *);
+   bool read_diagnostic_classification (diagnostic_context *);
+ 
   private:
    void write_define (bytes_out &, const cpp_macro *);
    cpp_macro *read_define (bytes_in &, cpp_reader *) const;
*************** module_state::write_ordinary_maps (elf_o
*** 18167,18172 ****
--- 18171,18338 ----
    dump.outdent ();
  }
  
+ /* Return the prefix to use for dumping a #pragma diagnostic change to DK.  */
+ 
+ static const char *
+ dk_string (diagnostic_t dk)
+ {
+   gcc_assert (dk > DK_UNSPECIFIED && dk < DK_LAST_DIAGNOSTIC_KIND);
+   if (dk == DK_IGNORED)
+     /* diagnostic.def has an empty string for ignored.  */
+     return "ignored: ";
+   else
+     return get_diagnostic_kind_text (dk);
+ }
+ 
+ /* Dump one #pragma GCC diagnostic entry.  */
+ 
+ static bool
+ dump_dc_change (unsigned index, unsigned opt, diagnostic_t dk)
+ {
+   if (dk == DK_POP)
+     return dump (" Index %u: pop from %d", index, opt);
+   else
+     return dump (" Index %u: %s%s", index, dk_string (dk),
+ 		 cl_options[opt].opt_text);
+ }
+ 
+ /* Write out any #pragma GCC diagnostic info to the .dgc section.  */
+ 
+ void
+ module_state::write_diagnostic_classification (elf_out *to,
+ 					       diagnostic_context *dc,
+ 					       unsigned *crc_p)
+ {
+   auto &changes = dc->get_classification_history ();
+ 
+   bytes_out sec (to);
+   if (sec.streaming_p ())
+     {
+       sec.begin ();
+       dump () && dump ("Writing diagnostic change locations");
+       dump.indent ();
+     }
+ 
+   unsigned len = changes.length ();
+ 
+   /* We don't want to write out any entries that came from one of our imports.
+      But then we need to adjust the total, and change DK_POP targets to match
+      the index in our actual output.  So remember how many lines we had skipped
+      at each step, where -1 means this line itself is skipped.  */
+   int skips = 0;
+   auto_vec<int> skips_at (len);
+   skips_at.safe_grow (len);
+ 
+   for (unsigned i = 0; i < len; ++i)
+     {
+       const auto &c = changes[i];
+       skips_at[i] = skips;
+       if (linemap_location_from_module_p (line_table, c.location))
+ 	{
+ 	  ++skips;
+ 	  skips_at[i] = -1;
+ 	  continue;
+ 	}
+     }
+ 
+   if (sec.streaming_p ())
+     {
+       sec.u (len - skips);
+       dump () && dump ("Diagnostic changes: %u", len - skips);
+     }
+ 
+   for (unsigned i = 0; i < len; ++i)
+     {
+       if (skips_at[i] == -1)
+ 	continue;
+ 
+       const auto &c = changes[i];
+       write_location (sec, c.location);
+       if (sec.streaming_p ())
+ 	{
+ 	  unsigned opt = c.option;
+ 	  if (c.kind == DK_POP)
+ 	    opt -= skips_at[opt];
+ 	  sec.u (opt);
+ 	  sec.u (c.kind);
+ 	  dump () && dump_dc_change (i - skips_at[i], opt, c.kind);
+ 	}
+     }
+ 
+   if (sec.streaming_p ())
+     {
+       sec.end (to, to->name (MOD_SNAME_PFX ".dgc"), crc_p);
+       dump.outdent ();
+     }
+ }
+ 
+ /* Read any #pragma GCC diagnostic info from the .dgc section.  */
+ 
+ bool
+ module_state::read_diagnostic_classification (diagnostic_context *dc)
+ {
+   bytes_in sec;
+ 
+   if (!sec.begin (loc, from (), MOD_SNAME_PFX ".dgc"))
+     return false;
+ 
+   dump () && dump ("Reading diagnostic change locations");
+   dump.indent ();
+ 
+   unsigned len = sec.u ();
+   dump () && dump ("Diagnostic changes: %u", len);
+ 
+   auto &changes = dc->get_classification_history ();
+   int offset = changes.length ();
+   changes.reserve (len + 1);
+   for (unsigned i = 0; i < len; ++i)
+     {
+       location_t loc = read_location (sec);
+       int opt = sec.u ();
+       diagnostic_t kind = (diagnostic_t) sec.u ();
+       if (kind == DK_POP)
+ 	/* For a pop, opt is the 'changes' index to return to.  */
+ 	opt += offset;
+       changes.quick_push ({ loc, opt, kind });
+       dump () && dump_dc_change (changes.length () - 1, opt, kind);
+     }
+ 
+   /* Did the import pop all its diagnostic changes?  */
+   bool last_was_reset = (len == 0);
+   if (len)
+     for (int i = changes.length () - 1; ; --i)
+       {
+ 	gcc_checking_assert (i >= offset);
+ 
+ 	const auto &c = changes[i];
+ 	if (c.kind != DK_POP)
+ 	  break;
+ 	else if (c.option == offset)
+ 	  {
+ 	    last_was_reset = true;
+ 	    break;
+ 	  }
+ 	else
+ 	  /* As in update_effective_level_from_pragmas, the loop will decrement
+ 	     i so we actually jump to c.option - 1.  */
+ 	  i = c.option;
+       }
+   if (!last_was_reset)
+     {
+       /* It didn't, so add a pop at its last location to avoid affecting later
+ 	 imports.  */
+       location_t last_loc = ordinary_locs.first + ordinary_locs.second - 1;
+       changes.quick_push ({ last_loc, offset, DK_POP });
+       dump () && dump (" Adding final pop from index %d", offset);
+     }
+ 
+   dump.outdent ();
+   if (!sec.end (from ()))
+     return false;
+ 
+   return true;
+ }
+ 
  void
  module_state::write_macro_maps (elf_out *to, range_t &info, unsigned *crc_p)
  {
*************** module_state::write_begin (elf_out *to,
*** 19853,19858 ****
--- 20019,20026 ----
      }
    ool->qsort (ool_cmp);
  
+   write_diagnostic_classification (nullptr, global_dc, nullptr);
+ 
    vec<cpp_hashnode *> *macros = nullptr;
    if (is_header ())
      macros = prepare_macros (reader);
*************** module_state::write_begin (elf_out *to,
*** 19998,20004 ****
  
    /* Write the line maps.  */
    if (config.ordinary_locs)
!     write_ordinary_maps (to, map_info, bool (config.num_partitions), &crc);
    if (config.macro_locs)
      write_macro_maps (to, map_info, &crc);
  
--- 20166,20175 ----
  
    /* Write the line maps.  */
    if (config.ordinary_locs)
!     {
!       write_ordinary_maps (to, map_info, bool (config.num_partitions), &crc);
!       write_diagnostic_classification (to, global_dc, &crc);
!     }
    if (config.macro_locs)
      write_macro_maps (to, map_info, &crc);
  
*************** module_state::read_initial (cpp_reader *
*** 20071,20076 ****
--- 20242,20251 ----
    else if (!read_ordinary_maps (config.ordinary_locs, config.loc_range_bits))
      ok = false;
  
+   if (ok && have_locs && config.ordinary_locs
+       && !read_diagnostic_classification (global_dc))
+     ok = false;
+ 
    /* Allocate the REMAP vector.  */
    slurp->alloc_remap (config.num_imports);
  
diff -Nrcpad gcc-16-20250615/gcc/cp/parser.cc gcc-16-20250622/gcc/cp/parser.cc
*** gcc-16-20250615/gcc/cp/parser.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/parser.cc	Sun Jun 22 22:32:19 2025
*************** cp_parser_asm_operand_list (cp_parser* p
*** 30421,30426 ****
--- 30421,30429 ----
        parens.require_open (parser);
        /* Parse the expression.  */
        tree expression = cp_parser_expression (parser);
+       if (check_for_bare_parameter_packs (expression))
+ 	expression = error_mark_node;
+ 
        /* Look for the `)'.  */
        parens.require_close (parser);
  
diff -Nrcpad gcc-16-20250615/gcc/cp/pt.cc gcc-16-20250622/gcc/cp/pt.cc
*** gcc-16-20250615/gcc/cp/pt.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/pt.cc	Sun Jun 22 22:32:19 2025
*************** static tree for_each_template_parm_r (tr
*** 202,208 ****
  static tree copy_default_args_to_explicit_spec_1 (tree, tree);
  static void copy_default_args_to_explicit_spec (tree);
  static bool invalid_nontype_parm_type_p (tree, tsubst_flags_t);
- static bool dependent_template_arg_p (tree);
  static bool dependent_type_p_r (tree);
  static tree tsubst_stmt (tree, tree, tsubst_flags_t, tree);
  static tree tsubst_decl (tree, tree, tsubst_flags_t, bool = true);
--- 202,207 ----
diff -Nrcpad gcc-16-20250615/gcc/cp/typeck.cc gcc-16-20250622/gcc/cp/typeck.cc
*** gcc-16-20250615/gcc/cp/typeck.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/cp/typeck.cc	Sun Jun 22 22:32:19 2025
*************** complete_type_or_maybe_complain (tree ty
*** 156,162 ****
      {
        if (complain & tf_error)
  	cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
!       note_failed_type_completion_for_satisfaction (type);
        return NULL_TREE;
      }
    else
--- 156,162 ----
      {
        if (complain & tf_error)
  	cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
!       note_failed_type_completion (type, complain);
        return NULL_TREE;
      }
    else
*************** cxx_sizeof_or_alignof_type (location_t l
*** 2084,2090 ****
  
    bool dependent_p = dependent_type_p (type);
    if (!dependent_p)
!     complete_type (type);
    if (dependent_p
        /* VLA types will have a non-constant size.  In the body of an
  	 uninstantiated template, we don't need to try to compute the
--- 2084,2097 ----
  
    bool dependent_p = dependent_type_p (type);
    if (!dependent_p)
!     {
!       complete_type (type);
!       if (!COMPLETE_TYPE_P (type))
! 	/* Call this here because the incompleteness diagnostic comes from
! 	   c_sizeof_or_alignof_type instead of
! 	   complete_type_or_maybe_complain.  */
! 	note_failed_type_completion (type, complain);
!     }
    if (dependent_p
        /* VLA types will have a non-constant size.  In the body of an
  	 uninstantiated template, we don't need to try to compute the
*************** cxx_sizeof_or_alignof_type (location_t l
*** 2106,2112 ****
  
    return c_sizeof_or_alignof_type (loc, complete_type (type),
  				   op == SIZEOF_EXPR, std_alignof,
! 				   complain);
  }
  
  /* Return the size of the type, without producing any warnings for
--- 2113,2119 ----
  
    return c_sizeof_or_alignof_type (loc, complete_type (type),
  				   op == SIZEOF_EXPR, std_alignof,
! 				   complain & (tf_warning_or_error));
  }
  
  /* Return the size of the type, without producing any warnings for
diff -Nrcpad gcc-16-20250615/gcc/dfp.cc gcc-16-20250622/gcc/dfp.cc
*** gcc-16-20250615/gcc/dfp.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/dfp.cc	Sun Jun 22 22:32:19 2025
*************** decimal_real_to_integer (const REAL_VALU
*** 619,629 ****
--- 619,639 ----
    decNumber dn, dn2, dn3;
    REAL_VALUE_TYPE to;
    char string[256];
+   int scale = 0;
  
    decContextDefault (&set, DEC_INIT_DECIMAL128);
    set.traps = 0;
    set.round = DEC_ROUND_DOWN;
    decimal128ToNumber ((const decimal128 *) r->sig, &dn);
+   if (precision > 64 && decNumberIsFinite (&dn) && dn.exponent > 0)
+     {
+       /* libdecNumber doesn't really handle too large integers.
+ 	 So when precision is large and exponent as well, trim the
+ 	 exponent and adjust the resulting wide_int by multiplying
+ 	 it multiple times with powers of ten.  */
+       scale = dn.exponent;
+       dn.exponent = 0;
+     }
  
    decNumberToIntegralValue (&dn2, &dn, &set);
    decNumberZero (&dn3);
*************** decimal_real_to_integer (const REAL_VALU
*** 633,639 ****
       function.  */
    decNumberToString (&dn, string);
    real_from_string (&to, string);
!   return real_to_integer (&to, fail, precision);
  }
  
  /* Perform the decimal floating point operation described by CODE.
--- 643,716 ----
       function.  */
    decNumberToString (&dn, string);
    real_from_string (&to, string);
!   bool failp = false;
!   wide_int w = real_to_integer (&to, &failp, precision);
!   if (failp)
!     *fail = true;
!   if (scale && !failp)
!     {
!       bool isneg = wi::neg_p (w);
!       if (isneg)
! 	w = -w;
!       enum wi::overflow_type ovf = wi::OVF_NONE;
!       unsigned HOST_WIDE_INT pow10s[] = {
! 	HOST_WIDE_INT_UC (10),
! 	HOST_WIDE_INT_UC (100),
! 	HOST_WIDE_INT_UC (1000),
! 	HOST_WIDE_INT_UC (10000),
! 	HOST_WIDE_INT_UC (100000),
! 	HOST_WIDE_INT_UC (1000000),
! 	HOST_WIDE_INT_UC (10000000),
! 	HOST_WIDE_INT_UC (100000000),
! 	HOST_WIDE_INT_UC (1000000000),
! 	HOST_WIDE_INT_UC (10000000000),
! 	HOST_WIDE_INT_UC (100000000000),
! 	HOST_WIDE_INT_UC (1000000000000),
! 	HOST_WIDE_INT_UC (10000000000000),
! 	HOST_WIDE_INT_UC (100000000000000),
! 	HOST_WIDE_INT_UC (1000000000000000),
! 	HOST_WIDE_INT_UC (10000000000000000),
! 	HOST_WIDE_INT_UC (100000000000000000),
! 	HOST_WIDE_INT_UC (1000000000000000000),
! 	HOST_WIDE_INT_UC (10000000000000000000),
!       };
!       int s = scale % 19;
!       if (s)
! 	{
! 	  wide_int wm = wi::uhwi (pow10s[s - 1], w.get_precision ());
! 	  w = wi::umul (w, wm, &ovf);
! 	  if (ovf)
! 	    scale = 0;
! 	}
!       scale /= 19;
!       wide_int wm = wi::uhwi (pow10s[18], w.get_precision ());
!       while (scale)
! 	{
! 	  if (scale & 1)
! 	    {
! 	      w = wi::umul (w, wm, &ovf);
! 	      if (ovf)
! 		break;
! 	    }
! 	  scale >>= 1;
! 	  if (!scale)
! 	    break;
! 	  wm = wi::umul (wm, wm, &ovf);
! 	  if (ovf)
! 	    break;
! 	}
!       if (ovf)
! 	{
! 	  *fail = true;
! 	  if (isneg)
! 	    return wi::set_bit_in_zero (precision - 1, precision);
! 	  else
! 	    return ~wi::set_bit_in_zero (precision - 1, precision);
! 	}
!       if (isneg)
! 	w = -w;
!     }
!   return w;
  }
  
  /* Perform the decimal floating point operation described by CODE.
diff -Nrcpad gcc-16-20250615/gcc/diagnostic.h gcc-16-20250622/gcc/diagnostic.h
*** gcc-16-20250615/gcc/diagnostic.h	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/diagnostic.h	Sun Jun 22 22:32:19 2025
*************** private:
*** 307,312 ****
--- 307,315 ----
       diagnostic.  */
    vec<diagnostic_classification_change_t> m_classification_history;
  
+   /* For diagnostic_context::get_classification_history, declared later.  */
+   friend class diagnostic_context;
+ 
    /* For pragma push/pop.  */
    vec<int> m_push_list;
  };
*************** public:
*** 830,835 ****
--- 833,845 ----
      m_abort_on_error = val;
    }
  
+   /* Accessor for use in serialization, e.g. by C++ modules.  */
+   auto &
+   get_classification_history ()
+   {
+     return m_option_classifier.m_classification_history;
+   }
+ 
  private:
    void error_recursion () ATTRIBUTE_NORETURN;
  
diff -Nrcpad gcc-16-20250615/gcc/doc/extend.texi gcc-16-20250622/gcc/doc/extend.texi
*** gcc-16-20250615/gcc/doc/extend.texi	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/doc/extend.texi	Sun Jun 22 22:32:19 2025
*************** and @samp{[[omp::sequence(...)]]} in C a
*** 10668,10674 ****
  GCC needs to be invoked with the @option{-fopenmp} option.
  This option also arranges for automatic linking of the OpenMP
  runtime library.
! @xref{,,,libgomp,GNU Offloading and Multi Processing Runtime Library}.
  
  @xref{OpenMP and OpenACC Options}, for additional options useful with
  @option{-fopenmp}.
--- 10668,10674 ----
  GCC needs to be invoked with the @option{-fopenmp} option.
  This option also arranges for automatic linking of the OpenMP
  runtime library.
! @xref{Top,,,libgomp,GNU Offloading and Multi Processing Runtime Library}.
  
  @xref{OpenMP and OpenACC Options}, for additional options useful with
  @option{-fopenmp}.
*************** To enable the processing of OpenACC dire
*** 10690,10696 ****
  in C and C++, GCC needs to be invoked with the @option{-fopenacc} option.
  This option also arranges for automatic linking of the OpenACC runtime
  library.
! @xref{,,,libgomp,GNU Offloading and Multi Processing Runtime Library}.
  
  @xref{OpenMP and OpenACC Options}, for additional options useful with
  @option{-fopenacc}.
--- 10690,10696 ----
  in C and C++, GCC needs to be invoked with the @option{-fopenacc} option.
  This option also arranges for automatic linking of the OpenACC runtime
  library.
! @xref{Top,,,libgomp,GNU Offloading and Multi Processing Runtime Library}.
  
  @xref{OpenMP and OpenACC Options}, for additional options useful with
  @option{-fopenacc}.
diff -Nrcpad gcc-16-20250615/gcc/doc/gcov.texi gcc-16-20250622/gcc/doc/gcov.texi
*** gcc-16-20250615/gcc/doc/gcov.texi	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/doc/gcov.texi	Sun Jun 22 22:32:19 2025
*************** condition  1 not covered (true)
*** 1077,1083 ****
          -:   12:@}
  @end smallexample
  
! @anchor {gcov prime paths example}
  When you compile with @option{--coverage -fpath-coverage} and use the
  option @option{-e} your output looks like this:
  
--- 1077,1083 ----
          -:   12:@}
  @end smallexample
  
! @anchor{gcov prime paths example}
  When you compile with @option{--coverage -fpath-coverage} and use the
  option @option{-e} your output looks like this:
  
diff -Nrcpad gcc-16-20250615/gcc/doc/install.texi gcc-16-20250622/gcc/doc/install.texi
*** gcc-16-20250615/gcc/doc/install.texi	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/doc/install.texi	Sun Jun 22 22:32:20 2025
*************** building the documentation without error
*** 631,636 ****
--- 631,639 ----
  install a newer release to get the best appearance and usability of
  the generated manuals.
  
+ Also note that Texinfo older than version 7.1 may throw incorrect build
+ warnings, though the generated documentation is correct.
+ 
  @item @TeX{} (any working version)
  
  Necessary for running @command{texi2dvi} and @command{texi2pdf}, which
diff -Nrcpad gcc-16-20250615/gcc/doc/invoke.texi gcc-16-20250622/gcc/doc/invoke.texi
*** gcc-16-20250615/gcc/doc/invoke.texi	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/doc/invoke.texi	Sun Jun 22 22:32:20 2025
*************** in the following sections.
*** 266,272 ****
  -Wnoexcept  -Wnoexcept-type  -Wnon-virtual-dtor
  -Wpessimizing-move  -Wno-placement-new  -Wplacement-new=@var{n}
  -Wrange-loop-construct -Wredundant-move -Wredundant-tags
! -Wreorder  -Wregister
  -Wstrict-null-sentinel  -Wno-subobject-linkage  -Wtemplates
  -Wno-non-template-friend  -Wold-style-cast
  -Woverloaded-virtual  -Wno-pmf-conversions -Wself-move -Wsign-promo
--- 266,272 ----
  -Wnoexcept  -Wnoexcept-type  -Wnon-virtual-dtor
  -Wpessimizing-move  -Wno-placement-new  -Wplacement-new=@var{n}
  -Wrange-loop-construct -Wredundant-move -Wredundant-tags
! -Wreorder  -Wregister -Wno-sfinae-incomplete
  -Wstrict-null-sentinel  -Wno-subobject-linkage  -Wtemplates
  -Wno-non-template-friend  -Wold-style-cast
  -Woverloaded-virtual  -Wno-pmf-conversions -Wself-move -Wsign-promo
*************** to filter out those warnings.
*** 4448,4453 ****
--- 4448,4467 ----
  Disable the warning about the case when an exception handler is shadowed by
  another handler, which can point out a wrong ordering of exception handlers.
  
+ @opindex Wsfinae-incomplete
+ @opindex Wno-sfinae-incomplete
+ Warn about a class that is found to be incomplete, or a function with
+ auto return type that has not yet been deduced, in a context where
+ that causes substitution failure rather than an error, and then the
+ class or function is defined later in the translation unit.  This is
+ problematic because template instantiations or concept checks could
+ have different results if they first occur either before or after the
+ definition.
+ 
+ This warning is enabled by default.  @option{-Wsfinae-incomplete=2}
+ adds a warning at the point of substitution failure, to make it easier
+ to track down problems flagged by the default mode.
+ 
  @opindex Wstrict-null-sentinel
  @opindex Wno-strict-null-sentinel
  @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
diff -Nrcpad gcc-16-20250615/gcc/emit-rtl.cc gcc-16-20250622/gcc/emit-rtl.cc
*** gcc-16-20250615/gcc/emit-rtl.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/emit-rtl.cc	Sun Jun 22 22:32:20 2025
*************** validate_subreg (machine_mode omode, mac
*** 975,982 ****
  
    /* Verify that the offset is representable.  */
  
!   /* For hard registers, we already have most of these rules collected in
!      subreg_offset_representable_p.  */
    if (reg && REG_P (reg) && HARD_REGISTER_P (reg))
      {
        unsigned int regno = REGNO (reg);
--- 975,983 ----
  
    /* Verify that the offset is representable.  */
  
!   /* Ensure that subregs of hard registers can be folded.  In other words,
!      the hardware register must be valid in the subreg's outer mode,
!      and consequently the subreg can be replaced with a hardware register.  */
    if (reg && REG_P (reg) && HARD_REGISTER_P (reg))
      {
        unsigned int regno = REGNO (reg);
*************** validate_subreg (machine_mode omode, mac
*** 987,993 ****
        else if (!REG_CAN_CHANGE_MODE_P (regno, imode, omode))
  	return false;
  
!       return subreg_offset_representable_p (regno, imode, offset, omode);
      }
    /* Do not allow normal SUBREG with stricter alignment than the inner MEM.
  
--- 988,996 ----
        else if (!REG_CAN_CHANGE_MODE_P (regno, imode, omode))
  	return false;
  
!       /* Pass true to allow_stack_regs because targets like x86
! 	 expect to be able to take subregs of the stack pointer.  */
!       return simplify_subreg_regno (regno, imode, offset, omode, true) >= 0;
      }
    /* Do not allow normal SUBREG with stricter alignment than the inner MEM.
  
diff -Nrcpad gcc-16-20250615/gcc/ext-dce.cc gcc-16-20250622/gcc/ext-dce.cc
*** gcc-16-20250615/gcc/ext-dce.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/ext-dce.cc	Sun Jun 22 22:32:20 2025
*************** ext_dce_try_optimize_insn (rtx_insn *ins
*** 442,447 ****
--- 442,452 ----
  	  print_rtl_single (dump_file, new_pattern);
  	  fprintf (dump_file, "\n");
  	}
+ 
+       /* INSN may have a REG_EQUAL note indicating that the value was
+ 	 sign or zero extended.  That note is no longer valid since we've
+ 	 just removed the extension.  Just wipe the notes.  */
+       remove_reg_equal_equiv_notes (insn, true);
      }
    else
      {
diff -Nrcpad gcc-16-20250615/gcc/fortran/ChangeLog gcc-16-20250622/gcc/fortran/ChangeLog
*** gcc-16-20250615/gcc/fortran/ChangeLog	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/fortran/ChangeLog	Sun Jun 22 22:32:20 2025
***************
*** 1,3 ****
--- 1,24 ----
+ 2025-06-19  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/120713
+ 	* trans-array.cc (gfc_trans_deferred_array): Statically
+ 	initialize deferred length variable for SAVEd character arrays.
+ 
+ 2025-06-18  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/82480
+ 	* check.cc (gfc_check_fstat): Extend checks to INTENT(OUT) arguments.
+ 	(gfc_check_fstat_sub): Likewise.
+ 	(gfc_check_stat): Likewise.
+ 	(gfc_check_stat_sub): Likewise.
+ 	* intrinsic.texi: Adjust documentation.
+ 
+ 2025-06-16  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/51961
+ 	* resolve.cc (conformable_arrays): Use modified rank check when
+ 	MOLD= expression is given.
+ 
  2025-06-12  Yuao Ma  <c8ef@outlook.com>
  	    Steven G. Kargl  <kargl@gcc.gnu.org>
  
diff -Nrcpad gcc-16-20250615/gcc/fortran/check.cc gcc-16-20250622/gcc/fortran/check.cc
*** gcc-16-20250615/gcc/fortran/check.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/fortran/check.cc	Sun Jun 22 22:32:20 2025
*************** gfc_check_fseek_sub (gfc_expr *unit, gfc
*** 6507,6513 ****
  
  
  bool
! gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
  {
    if (!type_check (unit, 0, BT_INTEGER))
      return false;
--- 6507,6513 ----
  
  
  bool
! gfc_check_fstat (gfc_expr *unit, gfc_expr *values)
  {
    if (!type_check (unit, 0, BT_INTEGER))
      return false;
*************** gfc_check_fstat (gfc_expr *unit, gfc_exp
*** 6515,6525 ****
    if (!scalar_check (unit, 0))
      return false;
  
!   if (!type_check (array, 1, BT_INTEGER)
        || !kind_value_check (unit, 0, gfc_default_integer_kind))
      return false;
  
!   if (!array_check (array, 1))
      return false;
  
    return true;
--- 6515,6531 ----
    if (!scalar_check (unit, 0))
      return false;
  
!   if (!type_check (values, 1, BT_INTEGER)
        || !kind_value_check (unit, 0, gfc_default_integer_kind))
      return false;
  
!   if (!array_check (values, 1))
!     return false;
! 
!   if (!variable_check (values, 1, false))
!     return false;
! 
!   if (!array_size_check (values, 1, 13))
      return false;
  
    return true;
*************** gfc_check_fstat (gfc_expr *unit, gfc_exp
*** 6527,6545 ****
  
  
  bool
! gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
  {
!   if (!type_check (unit, 0, BT_INTEGER))
!     return false;
! 
!   if (!scalar_check (unit, 0))
!     return false;
! 
!   if (!type_check (array, 1, BT_INTEGER)
!       || !kind_value_check (array, 1, gfc_default_integer_kind))
!     return false;
! 
!   if (!array_check (array, 1))
      return false;
  
    if (status == NULL)
--- 6533,6541 ----
  
  
  bool
! gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *values, gfc_expr *status)
  {
!   if (!gfc_check_fstat (unit, values))
      return false;
  
    if (status == NULL)
*************** gfc_check_fstat_sub (gfc_expr *unit, gfc
*** 6552,6557 ****
--- 6548,6556 ----
    if (!scalar_check (status, 2))
      return false;
  
+   if (!variable_check (status, 2, false))
+     return false;
+ 
    return true;
  }
  
*************** gfc_check_ftell_sub (gfc_expr *unit, gfc
*** 6589,6606 ****
  
  
  bool
! gfc_check_stat (gfc_expr *name, gfc_expr *array)
  {
    if (!type_check (name, 0, BT_CHARACTER))
      return false;
    if (!kind_value_check (name, 0, gfc_default_character_kind))
      return false;
  
!   if (!type_check (array, 1, BT_INTEGER)
!       || !kind_value_check (array, 1, gfc_default_integer_kind))
      return false;
  
!   if (!array_check (array, 1))
      return false;
  
    return true;
--- 6588,6611 ----
  
  
  bool
! gfc_check_stat (gfc_expr *name, gfc_expr *values)
  {
    if (!type_check (name, 0, BT_CHARACTER))
      return false;
    if (!kind_value_check (name, 0, gfc_default_character_kind))
      return false;
  
!   if (!type_check (values, 1, BT_INTEGER)
!       || !kind_value_check (values, 1, gfc_default_integer_kind))
      return false;
  
!   if (!array_check (values, 1))
!     return false;
! 
!   if (!variable_check (values, 1, false))
!     return false;
! 
!   if (!array_size_check (values, 1, 13))
      return false;
  
    return true;
*************** gfc_check_stat (gfc_expr *name, gfc_expr
*** 6608,6637 ****
  
  
  bool
! gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
  {
!   if (!type_check (name, 0, BT_CHARACTER))
!     return false;
!   if (!kind_value_check (name, 0, gfc_default_character_kind))
!     return false;
! 
!   if (!type_check (array, 1, BT_INTEGER)
!       || !kind_value_check (array, 1, gfc_default_integer_kind))
!     return false;
! 
!   if (!array_check (array, 1))
      return false;
  
    if (status == NULL)
      return true;
  
    if (!type_check (status, 2, BT_INTEGER)
!       || !kind_value_check (array, 1, gfc_default_integer_kind))
      return false;
  
    if (!scalar_check (status, 2))
      return false;
  
    return true;
  }
  
--- 6613,6636 ----
  
  
  bool
! gfc_check_stat_sub (gfc_expr *name, gfc_expr *values, gfc_expr *status)
  {
!   if (!gfc_check_stat (name, values))
      return false;
  
    if (status == NULL)
      return true;
  
    if (!type_check (status, 2, BT_INTEGER)
!       || !kind_value_check (status, 2, gfc_default_integer_kind))
      return false;
  
    if (!scalar_check (status, 2))
      return false;
  
+   if (!variable_check (status, 2, false))
+     return false;
+ 
    return true;
  }
  
diff -Nrcpad gcc-16-20250615/gcc/fortran/intrinsic.texi gcc-16-20250622/gcc/fortran/intrinsic.texi
*** gcc-16-20250615/gcc/fortran/intrinsic.texi	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/fortran/intrinsic.texi	Sun Jun 22 22:32:20 2025
*************** Subroutine, function
*** 7001,7009 ****
  @item @emph{Arguments}:
  @multitable @columnfractions .15 .70
  @item @var{UNIT}   @tab An open I/O unit number of type @code{INTEGER}.
! @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
! @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
! on success and a system specific error code otherwise.
  @end multitable
  
  @item @emph{Example}:
--- 7001,7011 ----
  @item @emph{Arguments}:
  @multitable @columnfractions .15 .70
  @item @var{UNIT}   @tab An open I/O unit number of type @code{INTEGER}.
! @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(13)}
! of the default kind.
! @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}
! of the default kind.
! Returns 0 on success and a system specific error code otherwise.
  @end multitable
  
  @item @emph{Example}:
*************** Subroutine, function
*** 10306,10313 ****
  @multitable @columnfractions .15 .70
  @item @var{NAME}   @tab The type shall be @code{CHARACTER} of the default
  kind, a valid path within the file system.
! @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
! @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}.
  Returns 0 on success and a system specific error code otherwise.
  @end multitable
  
--- 10308,10317 ----
  @multitable @columnfractions .15 .70
  @item @var{NAME}   @tab The type shall be @code{CHARACTER} of the default
  kind, a valid path within the file system.
! @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(13)}
! of the default kind.
! @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}
! of the default kind.
  Returns 0 on success and a system specific error code otherwise.
  @end multitable
  
*************** The elements that are obtained and store
*** 14391,14396 ****
--- 14395,14402 ----
  
  Not all these elements are relevant on all systems. 
  If an element is not relevant, it is returned as 0.
+ If the value of an element would overflow the range of default integer,
+ a -1 is returned instead.
  
  This intrinsic is provided in both subroutine and function forms; however,
  only one form can be used in any given program unit.
*************** Subroutine, function
*** 14402,14410 ****
  @multitable @columnfractions .15 .70
  @item @var{NAME}   @tab The type shall be @code{CHARACTER}, of the
  default kind and a valid path within the file system.
! @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
! @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
! on success and a system specific error code otherwise.
  @end multitable
  
  @item @emph{Example}:
--- 14408,14418 ----
  @multitable @columnfractions .15 .70
  @item @var{NAME}   @tab The type shall be @code{CHARACTER}, of the
  default kind and a valid path within the file system.
! @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(13)}
! of the default kind.
! @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}
! of the default kind.
! Returns 0 on success and a system specific error code otherwise.
  @end multitable
  
  @item @emph{Example}:
diff -Nrcpad gcc-16-20250615/gcc/fortran/resolve.cc gcc-16-20250622/gcc/fortran/resolve.cc
*** gcc-16-20250615/gcc/fortran/resolve.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/fortran/resolve.cc	Sun Jun 22 22:32:20 2025
*************** static bool
*** 8740,8747 ****
--- 8740,8764 ----
  conformable_arrays (gfc_expr *e1, gfc_expr *e2)
  {
    gfc_ref *tail;
+   bool scalar;
+ 
    for (tail = e2->ref; tail && tail->next; tail = tail->next);
  
+   /* If MOLD= is present and is not scalar, and the allocate-object has an
+      explicit-shape-spec, the ranks need not agree.  This may be unintended,
+      so let's emit a warning if -Wsurprising is given.  */
+   scalar = !tail || tail->type == REF_COMPONENT;
+   if (e1->mold && e1->rank > 0
+       && (scalar || (tail->type == REF_ARRAY && tail->u.ar.type != AR_FULL)))
+     {
+       if (scalar || (tail->u.ar.as && e1->rank != tail->u.ar.as->rank))
+ 	gfc_warning (OPT_Wsurprising, "Allocate-object at %L has rank %d "
+ 		     "but MOLD= expression at %L has rank %d",
+ 		     &e2->where, scalar ? 0 : tail->u.ar.as->rank,
+ 		     &e1->where, e1->rank);
+       return true;
+     }
+ 
    /* First compare rank.  */
    if ((tail && (!tail->u.ar.as || e1->rank != tail->u.ar.as->rank))
        || (!tail && e1->rank != e2->rank))
diff -Nrcpad gcc-16-20250615/gcc/fortran/trans-array.cc gcc-16-20250622/gcc/fortran/trans-array.cc
*** gcc-16-20250615/gcc/fortran/trans-array.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/fortran/trans-array.cc	Sun Jun 22 22:32:20 2025
*************** gfc_trans_deferred_array (gfc_symbol * s
*** 12067,12074 ****
        && !INTEGER_CST_P (sym->ts.u.cl->backend_decl))
      {
        if (sym->ts.deferred && !sym->ts.u.cl->length && !sym->attr.dummy)
! 	gfc_add_modify (&init, sym->ts.u.cl->backend_decl,
! 			build_zero_cst (TREE_TYPE (sym->ts.u.cl->backend_decl)));
        gfc_conv_string_length (sym->ts.u.cl, NULL, &init);
        gfc_trans_vla_type_sizes (sym, &init);
  
--- 12067,12082 ----
        && !INTEGER_CST_P (sym->ts.u.cl->backend_decl))
      {
        if (sym->ts.deferred && !sym->ts.u.cl->length && !sym->attr.dummy)
! 	{
! 	  tree len_expr = sym->ts.u.cl->backend_decl;
! 	  tree init_val = build_zero_cst (TREE_TYPE (len_expr));
! 	  if (VAR_P (len_expr)
! 	      && sym->attr.save
! 	      && !DECL_INITIAL (len_expr))
! 	    DECL_INITIAL (len_expr) = init_val;
! 	  else
! 	    gfc_add_modify (&init, len_expr, init_val);
! 	}
        gfc_conv_string_length (sym->ts.u.cl, NULL, &init);
        gfc_trans_vla_type_sizes (sym, &init);
  
diff -Nrcpad gcc-16-20250615/gcc/function.cc gcc-16-20250622/gcc/function.cc
*** gcc-16-20250615/gcc/function.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/function.cc	Sun Jun 22 22:32:20 2025
*************** assign_parm_setup_block (struct assign_p
*** 2937,2943 ****
    if (stack_parm == 0)
      {
        HOST_WIDE_INT parm_align
! 	= (STRICT_ALIGNMENT
  	   ? MAX (DECL_ALIGN (parm), BITS_PER_WORD) : DECL_ALIGN (parm));
  
        SET_DECL_ALIGN (parm, parm_align);
--- 2937,2943 ----
    if (stack_parm == 0)
      {
        HOST_WIDE_INT parm_align
! 	= ((STRICT_ALIGNMENT || BITS_PER_WORD <= MAX_SUPPORTED_STACK_ALIGNMENT)
  	   ? MAX (DECL_ALIGN (parm), BITS_PER_WORD) : DECL_ALIGN (parm));
  
        SET_DECL_ALIGN (parm, parm_align);
diff -Nrcpad gcc-16-20250615/gcc/gimple-crc-optimization.cc gcc-16-20250622/gcc/gimple-crc-optimization.cc
*** gcc-16-20250615/gcc/gimple-crc-optimization.cc	Sun Jun 15 22:32:24 2025
--- gcc-16-20250622/gcc/gimple-crc-optimization.cc	Sun Jun 22 22:32:20 2025
*************** crc_optimization::optimize_crc_loop (gph
*** 1261,1275 ****
    loc = EXPR_LOCATION (phi_result);
  
    /* Add IFN call and write the return value in the phi_result.  */
!   gcall *call
!       = gimple_build_call_internal (ifn, 3,
! 				    m_crc_arg,
! 				    m_data_arg,
! 				    polynomial_arg);
  
    gimple_call_set_lhs (call, phi_result);
    gimple_set_location (call, loc);
!   gimple_stmt_iterator si = gsi_start_bb (output_crc->bb);
    gsi_insert_before (&si, call, GSI_SAME_STMT);
  
    /* Remove phi statement, which was holding CRC result.  */
--- 1261,1272 ----
    loc = EXPR_LOCATION (phi_result);
  
    /* Add IFN call and write the return value in the phi_result.  */
!   gcall *call = gimple_build_call_internal (ifn, 3, m_crc_arg, m_data_arg,
! 					    polynomial_arg);
  
    gimple_call_set_lhs (call, phi_result);
    gimple_set_location (call, loc);
!   gimple_stmt_iterator si = gsi_after_labels (gimple_bb (output_crc));
    gsi_insert_before (&si, call, GSI_SAME_STMT);
  
    /* Remove phi statement, which was holding CRC result.  */
diff -Nrcpad gcc-16-20250615/gcc/ipa-cp.cc gcc-16-20250622/gcc/ipa-cp.cc
*** gcc-16-20250615/gcc/ipa-cp.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/ipa-cp.cc	Sun Jun 22 22:32:20 2025
*************** update_profiling_info (struct cgraph_nod
*** 4773,4778 ****
--- 4773,4780 ----
  	 to global0adjusted or to local if we have partial training.  */
        if (opt_for_fn (orig_node->decl, flag_profile_partial_training))
  	orig_node->make_profile_local ();
+       if (new_sum.quality () == AFDO)
+ 	orig_node->make_profile_global0 (GUESSED_GLOBAL0_AFDO);
        else
  	orig_node->make_profile_global0 (GUESSED_GLOBAL0_ADJUSTED);
        orig_edges_processed = true;
*************** update_profiling_info (struct cgraph_nod
*** 4802,4807 ****
--- 4804,4811 ----
  		 the latter and bail out.  */
                if (opt_for_fn (orig_node->decl, flag_profile_partial_training))
  		orig_node->make_profile_local ();
+ 	      else if (orig_nonrec_call_count.quality () == AFDO)
+ 		orig_node->make_profile_global0 (GUESSED_GLOBAL0_AFDO);
  	      else
  		orig_node->make_profile_global0 (GUESSED_GLOBAL0_ADJUSTED);
  	      return;
diff -Nrcpad gcc-16-20250615/gcc/ipa-inline.cc gcc-16-20250622/gcc/ipa-inline.cc
*** gcc-16-20250615/gcc/ipa-inline.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/ipa-inline.cc	Sun Jun 22 22:32:20 2025
*************** want_early_inline_function_p (struct cgr
*** 782,795 ****
  
    if (DECL_DISREGARD_INLINE_LIMITS (callee->decl))
      ;
-   /* For AutoFDO, we need to make sure that before profile summary, all
-      hot paths' IR look exactly the same as profiled binary. As a result,
-      in einliner, we will disregard size limit and inline those callsites
-      that are:
-        * inlined in the profiled binary, and
-        * the cloned callee has enough samples to be considered "hot".  */
-   else if (flag_auto_profile && afdo_callsite_hot_enough_for_early_inline (e))
-     ;
    else if (!DECL_DECLARED_INLINE_P (callee->decl)
  	   && !opt_for_fn (e->caller->decl, flag_inline_small_functions))
      {
--- 782,787 ----
*************** early_inline_small_functions (struct cgr
*** 3117,3122 ****
--- 3109,3207 ----
    return inlined;
  }
  
+ /* With auto-fdo inline all functions that was inlined in the train run
+    and inlining seems useful.  That is there are enough samples in the callee
+    function.
+ 
+    Unlike early inlining, we inline recursively.  Profile data is also used
+    to produce speculative calls which we then inline.  In the case some
+    speculatin was introduced, set SPECULATIVE_CALLS.  */
+ 
+ static bool
+ inline_functions_by_afdo (struct cgraph_node *node, bool *speculative_calls)
+ {
+   if (!flag_auto_profile)
+     return false;
+   struct cgraph_edge *e;
+   bool inlined = false;
+ 
+   *speculative_calls |= afdo_vpt_for_early_inline (node);
+ 
+   cgraph_edge *next;
+   for (e = node->callees; e; e = next)
+     {
+       next = e->next_callee;
+ 
+       if (!e->inline_failed)
+ 	{
+ 	  inlined |= inline_functions_by_afdo (e->callee, speculative_calls);
+ 	  continue;
+ 	}
+       if (!afdo_callsite_hot_enough_for_early_inline (e))
+ 	{
+ 	  /* If we do not want to inline, remove the speculation.  */
+ 	  if (e->speculative)
+ 	    cgraph_edge::resolve_speculation (e);
+ 	  continue;
+ 	}
+ 
+       struct cgraph_node *callee = e->callee->ultimate_alias_target ();
+       if (callee->definition
+ 	  && !ipa_fn_summaries->get (callee))
+ 	compute_fn_summary (callee, true);
+ 
+       if (!can_early_inline_edge_p (e))
+ 	{
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt,
+ 			     "Not inlining %C -> %C using auto-profile, %s.",
+ 			     e->caller, e->callee,
+ 			     cgraph_inline_failed_string (e->inline_failed));
+ 	  /* If we do not want to inline, remove the speculation.  */
+ 	  if (e->speculative)
+ 	    cgraph_edge::resolve_speculation (e);
+ 	  continue;
+ 	}
+       /* We can handle recursive inlining by first producing
+ 	 inline clone.  */
+       if (e->recursive_p ())
+ 	{
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt,
+ 			     "Not inlining %C recursively"
+ 			     " using auto-profile.\n",
+ 			     e->callee);
+ 	  /* If we do not want to inline, remove the speculation.  */
+ 	  if (e->speculative)
+ 	    cgraph_edge::resolve_speculation (e);
+ 	  continue;
+ 	}
+ 
+       if (dump_enabled_p ())
+ 	{
+ 	  if (e->caller->inlined_to)
+ 	    dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt,
+ 			     "Inlining using auto-profile %C into %C "
+ 			     "which is transitively inlined to %C.\n",
+ 			     callee, e->caller, e->caller->inlined_to);
+ 	  else
+ 	    dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt,
+ 			     "Inlining using auto-profile %C into %C.\n",
+ 			     callee, e->caller);
+ 	}
+       if (e->speculative)
+ 	remove_afdo_speculative_target (e);
+       inline_call (e, true, NULL, NULL, false);
+       inlined |= inline_functions_by_afdo (e->callee, speculative_calls);
+       inlined = true;
+     }
+ 
+   if (inlined && !node->inlined_to)
+     ipa_update_overall_fn_summary (node);
+ 
+   return inlined;
+ }
+ 
  unsigned int
  early_inliner (function *fun)
  {
*************** early_inliner (function *fun)
*** 3192,3201 ****
        /* We iterate incremental inlining to get trivial cases of indirect
  	 inlining.  */
        while (iterations < opt_for_fn (node->decl,
! 				      param_early_inliner_max_iterations)
! 	     && early_inline_small_functions (node))
  	{
  	  timevar_push (TV_INTEGRATION);
  	  todo |= optimize_inline_calls (current_function_decl);
  
  	  /* Technically we ought to recompute inline parameters so the new
--- 3277,3299 ----
        /* We iterate incremental inlining to get trivial cases of indirect
  	 inlining.  */
        while (iterations < opt_for_fn (node->decl,
! 				      param_early_inliner_max_iterations))
  	{
+ 	  bool inlined = early_inline_small_functions (node);
+ 	  bool speculative_calls = false;
+ 	  inlined |= inline_functions_by_afdo (node, &speculative_calls);
+ 	  if (!inlined)
+ 	    break;
  	  timevar_push (TV_INTEGRATION);
+ 	  if (speculative_calls)
+ 	    {
+ 	      cgraph_edge *next;
+ 	      for (cgraph_edge *e = node->callees; e; e = next)
+ 		{
+ 		  next = e->next_callee;
+ 		  cgraph_edge::redirect_call_stmt_to_callee (e);
+ 		}
+ 	    }
  	  todo |= optimize_inline_calls (current_function_decl);
  
  	  /* Technically we ought to recompute inline parameters so the new
diff -Nrcpad gcc-16-20250615/gcc/ipa-profile.cc gcc-16-20250622/gcc/ipa-profile.cc
*** gcc-16-20250615/gcc/ipa-profile.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/ipa-profile.cc	Sun Jun 22 22:32:20 2025
*************** ipa_profile (void)
*** 764,770 ****
    int order_pos;
    bool something_changed = false;
    int i;
!   gcov_type overall_time = 0, cutoff = 0, cumulated = 0, overall_size = 0;
    struct cgraph_node *n,*n2;
    int nindirect = 0, ncommon = 0, nunknown = 0, nuseless = 0, nconverted = 0;
    int nmismatch = 0, nimpossible = 0;
--- 764,771 ----
    int order_pos;
    bool something_changed = false;
    int i;
!   widest_int overall_time = 0, cumulated = 0;
!   gcov_type overall_size = 0;
    struct cgraph_node *n,*n2;
    int nindirect = 0, ncommon = 0, nunknown = 0, nuseless = 0, nconverted = 0;
    int nmismatch = 0, nimpossible = 0;
*************** ipa_profile (void)
*** 775,811 ****
      dump_histogram (dump_file, histogram);
    for (i = 0; i < (int)histogram.length (); i++)
      {
!       overall_time += histogram[i]->count * histogram[i]->time;
        overall_size += histogram[i]->size;
      }
    threshold = 0;
!   if (overall_time)
      {
        gcc_assert (overall_size);
  
!       cutoff = (overall_time * param_hot_bb_count_ws_permille + 500) / 1000;
        for (i = 0; cumulated < cutoff; i++)
  	{
! 	  cumulated += histogram[i]->count * histogram[i]->time;
            threshold = histogram[i]->count;
  	}
        if (!threshold)
  	threshold = 1;
        if (dump_file)
  	{
! 	  gcov_type cumulated_time = 0, cumulated_size = 0;
  
            for (i = 0;
  	       i < (int)histogram.length () && histogram[i]->count >= threshold;
  	       i++)
  	    {
! 	      cumulated_time += histogram[i]->count * histogram[i]->time;
  	      cumulated_size += histogram[i]->size;
  	    }
  	  fprintf (dump_file, "Determined min count: %" PRId64
  		   " Time:%3.2f%% Size:%3.2f%%\n",
  		   (int64_t)threshold,
! 		   cumulated_time * 100.0 / overall_time,
  		   cumulated_size * 100.0 / overall_size);
  	}
  
--- 776,819 ----
      dump_histogram (dump_file, histogram);
    for (i = 0; i < (int)histogram.length (); i++)
      {
!       overall_time += ((widest_int)histogram[i]->count) * histogram[i]->time;
!       /* Watch for overflow.  */
!       gcc_assert (overall_time >= 0);
        overall_size += histogram[i]->size;
      }
    threshold = 0;
!   if (overall_time != 0)
      {
        gcc_assert (overall_size);
  
!       widest_int cutoff = ((overall_time * param_hot_bb_count_ws_permille
! 			   + 500) / 1000);
!       /* Watch for overflow.  */
!       gcc_assert (cutoff >= 0);
        for (i = 0; cumulated < cutoff; i++)
  	{
! 	  cumulated += ((widest_int)histogram[i]->count) * histogram[i]->time;
            threshold = histogram[i]->count;
  	}
        if (!threshold)
  	threshold = 1;
        if (dump_file)
  	{
! 	  widest_int cumulated_time = 0;
! 	  gcov_type cumulated_size = 0;
  
            for (i = 0;
  	       i < (int)histogram.length () && histogram[i]->count >= threshold;
  	       i++)
  	    {
! 	      cumulated_time += ((widest_int)histogram[i]->count)
! 				 * histogram[i]->time;
  	      cumulated_size += histogram[i]->size;
  	    }
  	  fprintf (dump_file, "Determined min count: %" PRId64
  		   " Time:%3.2f%% Size:%3.2f%%\n",
  		   (int64_t)threshold,
! 		   (cumulated_time * 10000 / overall_time).to_shwi () / 100.0,
  		   cumulated_size * 100.0 / overall_size);
  	}
  
diff -Nrcpad gcc-16-20250615/gcc/m2/ChangeLog gcc-16-20250622/gcc/m2/ChangeLog
*** gcc-16-20250615/gcc/m2/ChangeLog	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/m2/ChangeLog	Sun Jun 22 22:32:20 2025
***************
*** 1,3 ****
--- 1,31 ----
+ 2025-06-21  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	* gm2-compiler/M2GCCDeclare.mod (StartDeclareModuleScopeSeparate):
+ 	Reformat statement comments.
+ 	(StartDeclareModuleScopeWholeProgram): Ditto.
+ 
+ 2025-06-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120673
+ 	* gm2-compiler/M2GCCDeclare.mod (ErrorDepList): New
+ 	global variable set containing every errant dependency symbol.
+ 	(mystop): Remove.
+ 	(EmitCircularDependancyError): Replace with ...
+ 	(EmitCircularDependencyError): ... this.
+ 	(AssertAllTypesDeclared): Rewrite.
+ 	(DoVariableDeclaration): Ditto.
+ 	(TypeDependentsDeclared): New procedure function.
+ 	(PrepareGCCVarDeclaration): Ditto.
+ 	(DeclareVariable): Remove assert.
+ 	(DeclareLocalVariable): Ditto.
+ 	(Constructor): Initialize ErrorDepList.
+ 	* gm2-compiler/M2MetaError.mod (doErrorScopeProc): Rewrite
+ 	and ensure that a symbol with a module scope does not lookup
+ 	from a definition module.
+ 	* gm2-compiler/P2SymBuild.mod (BuildType): Rewrite so that
+ 	a synonym type is created using the token refering to the name
+ 	on the lhs.
+ 
  2025-06-12  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/119650
diff -Nrcpad gcc-16-20250615/gcc/m2/gm2-compiler/M2GCCDeclare.mod gcc-16-20250622/gcc/m2/gm2-compiler/M2GCCDeclare.mod
*** gcc-16-20250615/gcc/m2/gm2-compiler/M2GCCDeclare.mod	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/m2/gm2-compiler/M2GCCDeclare.mod	Sun Jun 22 22:32:20 2025
*************** TYPE
*** 251,256 ****
--- 251,257 ----
  VAR
     FreeGroup,
     GlobalGroup         : Group ;    (* The global group of all sets.  *)
+    ErrorDepList,       (* The set of symbols with dependency errors.  *)
     VisitedList,
     ChainedList         : Set ;
     HaveInitDefaultTypes: BOOLEAN ;  (* Have we initialized them yet?  *)
*************** VAR
*** 261,269 ****
     enumDeps            : BOOLEAN ;
  
  
- PROCEDURE mystop ; BEGIN END mystop ;
- 
- 
  (* *************************************************** *)
  (*
     PrintNum -
--- 262,267 ----
*************** END CanBeDeclaredPartiallyViaPartialDepe
*** 1315,1328 ****
  
  
  (*
!    EmitCircularDependancyError - issue a dependancy error.
  *)
  
! PROCEDURE EmitCircularDependancyError (sym: CARDINAL) ;
  BEGIN
!    MetaError1('circular dependancy error found when trying to resolve {%1Uad}',
!               sym)
! END EmitCircularDependancyError ;
  
  
  TYPE
--- 1313,1338 ----
  
  
  (*
!    EmitCircularDependencyError - issue a dependency error.
  *)
  
! PROCEDURE EmitCircularDependencyError (sym: CARDINAL) ;
  BEGIN
!    (* Ensure we only issue one dependency message per symbol for this
!       error classification.  *)
!    IF NOT IsElementInSet (ErrorDepList, sym)
!    THEN
!       IncludeElementIntoSet (ErrorDepList, sym) ;
!       IF IsVar (sym) OR IsParameter (sym)
!       THEN
!          MetaError1 ('circular dependency error found when trying to resolve {%1Had}',
!                      sym)
!       ELSE
!          MetaError1 ('circular dependency error found when trying to resolve {%1Dad}',
!                      sym)
!       END
!    END
! END EmitCircularDependencyError ;
  
  
  TYPE
*************** BEGIN
*** 1529,1545 ****
        IF ForeachTryDeclare (todolist,
                              circulartodo,
                              NotAllDependantsFullyDeclared,
!                             EmitCircularDependancyError)
        THEN
        ELSIF ForeachTryDeclare (partiallydeclared,
                                 circularpartial,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependancyError)
        THEN
        ELSIF ForeachTryDeclare (niltypedarrays,
                                 circularniltyped,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependancyError)
        THEN
        END
     END ;
--- 1539,1555 ----
        IF ForeachTryDeclare (todolist,
                              circulartodo,
                              NotAllDependantsFullyDeclared,
!                             EmitCircularDependencyError)
        THEN
        ELSIF ForeachTryDeclare (partiallydeclared,
                                 circularpartial,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependencyError)
        THEN
        ELSIF ForeachTryDeclare (niltypedarrays,
                                 circularniltyped,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependencyError)
        THEN
        END
     END ;
*************** BEGIN
*** 2855,2867 ****
     n := 1 ;
     Var := GetNth(scope, n) ;
     WHILE Var#NulSym DO
!       IF NOT AllDependantsFullyDeclared(GetSType(Var))
!       THEN
!          mystop
!       END ;
!       IF NOT AllDependantsFullyDeclared(GetSType(Var))
        THEN
-          EmitCircularDependancyError(GetSType(Var)) ;
           failed := TRUE
        END ;
        INC(n) ;
--- 2865,2872 ----
     n := 1 ;
     Var := GetNth(scope, n) ;
     WHILE Var#NulSym DO
!       IF NOT TypeDependentsDeclared (Var, TRUE)
        THEN
           failed := TRUE
        END ;
        INC(n) ;
*************** BEGIN
*** 2922,2935 ****
        DeclareTypesConstantsProcedures(scope) ; (* will resolved TYPEs and CONSTs on the ToDo  *)
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
!       (*
!          now that all types have been resolved it is safe to declare
!          variables
!       *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariables(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariables) ;
!       (* now it is safe to declare all procedures *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
--- 2927,2938 ----
        DeclareTypesConstantsProcedures(scope) ; (* will resolved TYPEs and CONSTs on the ToDo  *)
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
!       (* Now that all types have been resolved it is safe to declare
!          variables.  *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariables(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariables) ;
!       (* Now it is safe to declare all procedures.  *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
*************** BEGIN
*** 2958,2971 ****
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
        ForeachModuleDo(DeclareModuleInit) ;
!       (*
!          now that all types have been resolved it is safe to declare
!          variables
!       *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariablesWholeProgram(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariablesWholeProgram) ;
!       (* now it is safe to declare all procedures *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
--- 2961,2972 ----
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
        ForeachModuleDo(DeclareModuleInit) ;
!       (* Now that all types have been resolved it is safe to declare
!          variables.  *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariablesWholeProgram(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariablesWholeProgram) ;
!       (* Now it is safe to declare all procedures.  *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
*************** PROCEDURE DoVariableDeclaration (var: CA
*** 3411,3425 ****
                                   isImported, isExported,
                                   isTemporary, isGlobal: BOOLEAN;
                                   scope: tree) ;
  VAR
     type    : tree ;
     varType : CARDINAL ;
     location: location_t ;
  BEGIN
-    IF IsComponent (var) OR IsVarHeap (var)
-    THEN
-       RETURN
-    END ;
     IF GetMode (var) = LeftValue
     THEN
        (*
--- 3412,3466 ----
                                   isImported, isExported,
                                   isTemporary, isGlobal: BOOLEAN;
                                   scope: tree) ;
+ BEGIN
+    IF NOT (IsComponent (var) OR IsVarHeap (var))
+    THEN
+       IF TypeDependentsDeclared (var, TRUE)
+       THEN
+          PrepareGCCVarDeclaration (var, name, isImported, isExported,
+                                    isTemporary, isGlobal, scope)
+       END
+    END
+ END DoVariableDeclaration ;
+ 
+ 
+ (*
+    TypeDependentsDeclared - return TRUE if all type dependents of variable
+                             have been declared.
+ *)
+ 
+ PROCEDURE TypeDependentsDeclared (variable: CARDINAL; errorMessage: BOOLEAN) : BOOLEAN ;
+ VAR
+    type: CARDINAL ;
+ BEGIN
+    type := GetSType (variable) ;
+    IF AllDependantsFullyDeclared (type)
+    THEN
+       RETURN TRUE
+    ELSE
+       IF errorMessage
+       THEN
+          EmitCircularDependencyError (variable) ;
+          ForeachElementInSetDo (GlobalGroup^.ToDoList, EmitCircularDependencyError)
+       END
+    END ;
+    RETURN FALSE
+ END TypeDependentsDeclared ;
+ 
+ 
+ (*
+    PrepareGCCVarDeclaration -
+ *)
+ 
+ PROCEDURE PrepareGCCVarDeclaration (var: CARDINAL; name: ADDRESS;
+                                     isImported, isExported,
+                                     isTemporary, isGlobal: BOOLEAN;
+                                     scope: tree) ;
  VAR
     type    : tree ;
     varType : CARDINAL ;
     location: location_t ;
  BEGIN
     IF GetMode (var) = LeftValue
     THEN
        (*
*************** BEGIN
*** 3457,3463 ****
                                              isGlobal, scope, NIL)) ;
     WatchRemoveList (var, todolist) ;
     WatchIncludeList (var, fullydeclared)
! END DoVariableDeclaration ;
  
  
  (*
--- 3498,3504 ----
                                              isGlobal, scope, NIL)) ;
     WatchRemoveList (var, todolist) ;
     WatchIncludeList (var, fullydeclared)
! END PrepareGCCVarDeclaration ;
  
  
  (*
*************** BEGIN
*** 3493,3499 ****
     THEN
        scope := FindContext (ModSym) ;
        decl := FindOuterModule (variable) ;
-       Assert (AllDependantsFullyDeclared (GetSType (variable))) ;
        PushBinding (ModSym) ;
        DoVariableDeclaration (variable,
                               KeyToCharStar (GetFullSymName (variable)),
--- 3534,3539 ----
*************** BEGIN
*** 3521,3527 ****
     THEN
        scope := FindContext (mainModule) ;
        decl := FindOuterModule (variable) ;
-       Assert (AllDependantsFullyDeclared (GetSType (variable))) ;
        PushBinding (mainModule) ;
        DoVariableDeclaration (variable,
                               KeyToCharStar (GetFullSymName (variable)),
--- 3561,3566 ----
*************** END DeclareImportedVariablesWholeProgram
*** 3618,3624 ****
  
  PROCEDURE DeclareLocalVariable (var: CARDINAL) ;
  BEGIN
-    Assert (AllDependantsFullyDeclared (var)) ;
     DoVariableDeclaration (var,
                            KeyToCharStar (GetFullSymName (var)),
                            FALSE,  (* local variables cannot be imported *)
--- 3657,3662 ----
*************** BEGIN
*** 3662,3668 ****
     scope := Mod2Gcc (GetProcedureScope (sym)) ;
     Var := GetNth (sym, i) ;
     WHILE Var # NulSym DO
-       Assert (AllDependantsFullyDeclared (GetSType (Var))) ;
        DoVariableDeclaration (Var,
                               KeyToCharStar (GetFullSymName (Var)),
                               FALSE,   (* inner module variables cannot be imported *)
--- 3700,3705 ----
*************** END InitDeclarations ;
*** 6658,6663 ****
--- 6695,6701 ----
  BEGIN
     FreeGroup := NIL ;
     GlobalGroup := InitGroup () ;
+    ErrorDepList := InitSet (1) ;
     ChainedList := InitSet(1) ;
     WatchList := InitSet(1) ;
     VisitedList := NIL ;
diff -Nrcpad gcc-16-20250615/gcc/m2/gm2-compiler/M2MetaError.mod gcc-16-20250622/gcc/m2/gm2-compiler/M2MetaError.mod
*** gcc-16-20250615/gcc/m2/gm2-compiler/M2MetaError.mod	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/m2/gm2-compiler/M2MetaError.mod	Sun Jun 22 22:32:20 2025
*************** BEGIN
*** 1437,1471 ****
        doError (eb, GetDeclaredDef (sym))
     ELSE
        M2Error.EnterErrorScope (GetErrorScope (scope)) ;
!       IF IsProcedure (scope)
        THEN
!          IF IsVar (sym) OR IsParameter (sym)
!          THEN
!             doError (eb, GetVarParamTok (sym))
!          ELSE
!             doError (eb, GetDeclaredDef (sym))
!          END
        ELSE
!          IF IsModule (scope)
           THEN
!             IF IsInnerModule (scope)
!             THEN
!                doError (eb, GetDeclaredDef (sym))
!             ELSE
!                doError (eb, GetDeclaredDef (sym))
!             END
           ELSE
!             Assert (IsDefImp (scope)) ;
!             (* if this fails then we need to skip to the outer scope.
!             REPEAT
!              OuterModule := GetScope(OuterModule)
!             UNTIL GetScope(OuterModule)=NulSym ;  *)
!             IF GetDeclaredDefinition (sym) = UnknownTokenNo
!             THEN
!                doError (eb, GetDeclaredMod (sym))
!             ELSE
!                doError (eb, GetDeclaredDef (sym))
!             END
           END
        END
     END ;
--- 1437,1458 ----
        doError (eb, GetDeclaredDef (sym))
     ELSE
        M2Error.EnterErrorScope (GetErrorScope (scope)) ;
!       IF IsVar (sym) OR IsParameter (sym)
        THEN
!          doError (eb, GetVarParamTok (sym))
!       ELSIF IsProcedure (scope)
!       THEN
!          doError (eb, GetDeclaredDef (sym))
!       ELSIF IsModule (scope)
!       THEN
!          doError (eb, GetDeclaredMod (sym))
        ELSE
!          Assert (IsDefImp (scope)) ;
!          IF GetDeclaredDefinition (sym) = UnknownTokenNo
           THEN
!             doError (eb, GetDeclaredMod (sym))
           ELSE
!             doError (eb, GetDeclaredDef (sym))
           END
        END
     END ;
diff -Nrcpad gcc-16-20250615/gcc/m2/gm2-compiler/P2SymBuild.mod gcc-16-20250622/gcc/m2/gm2-compiler/P2SymBuild.mod
*** gcc-16-20250615/gcc/m2/gm2-compiler/P2SymBuild.mod	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/m2/gm2-compiler/P2SymBuild.mod	Sun Jun 22 22:32:20 2025
*************** VAR
*** 1225,1231 ****
     Sym,
     Type     : CARDINAL ;
     name     : Name ;
!    tokno    : CARDINAL ;
  BEGIN
     (*
        Two cases
--- 1225,1232 ----
     Sym,
     Type     : CARDINAL ;
     name     : Name ;
!    nametokno,
!    typetokno: CARDINAL ;
  BEGIN
     (*
        Two cases
*************** BEGIN
*** 1234,1241 ****
        - when type with a name that is different to Name. In which case
          we create a new type.
     *)
!    PopTtok(Type, tokno) ;
!    PopT(name) ;
     IF Debugging
     THEN
        n1 := GetSymName(GetCurrentModule()) ;
--- 1235,1242 ----
        - when type with a name that is different to Name. In which case
          we create a new type.
     *)
!    PopTtok (Type, typetokno) ;
!    PopTtok (name, nametokno) ;
     IF Debugging
     THEN
        n1 := GetSymName(GetCurrentModule()) ;
*************** BEGIN
*** 1264,1274 ****
  
        *)
        (* WriteString('Blank name type') ; WriteLn ; *)
!       PushTFtok(Type, name, tokno) ;
        Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
     ELSIF IsError(Type)
     THEN
!       PushTFtok(Type, name, tokno) ;
        Annotate("%1s(%1d)|%2n|%3d||error type|error type name|token no")
     ELSIF GetSymName(Type)=name
     THEN
--- 1265,1275 ----
  
        *)
        (* WriteString('Blank name type') ; WriteLn ; *)
!       PushTFtok(Type, name, typetokno) ;
        Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
     ELSIF IsError(Type)
     THEN
!       PushTFtok(Type, name, typetokno) ;
        Annotate("%1s(%1d)|%2n|%3d||error type|error type name|token no")
     ELSIF GetSymName(Type)=name
     THEN
*************** BEGIN
*** 1276,1282 ****
        IF isunknown OR
           (NOT IsDeclaredIn(GetCurrentScope(), Type))
        THEN
!          Sym := MakeType(tokno, name) ;
           IF NOT IsError(Sym)
           THEN
              IF Sym=Type
--- 1277,1283 ----
        IF isunknown OR
           (NOT IsDeclaredIn(GetCurrentScope(), Type))
        THEN
!          Sym := MakeType (typetokno, name) ;
           IF NOT IsError(Sym)
           THEN
              IF Sym=Type
*************** BEGIN
*** 1295,1313 ****
                 CheckForEnumerationInCurrentModule(Type)
              END
           END ;
!          PushTFtok(Sym, name, tokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        ELSE
!          PushTFtok(Type, name, tokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        END
     ELSE
        (* example   TYPE a = CARDINAL *)
!       Sym := MakeType(tokno, name) ;
!       PutType(Sym, Type) ;
!       CheckForExportedImplementation(Sym) ;   (* May be an exported hidden type *)
!       PushTFtok(Sym, name, tokno) ;
!       Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
     END
  END BuildType ;
  
--- 1296,1318 ----
                 CheckForEnumerationInCurrentModule(Type)
              END
           END ;
!          PushTFtok(Sym, name, typetokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        ELSE
!          PushTFtok(Type, name, typetokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        END
     ELSE
        (* example   TYPE a = CARDINAL *)
!       Sym := MakeType (nametokno, name) ;
!       PutType (Sym, Type) ;
!       CheckForExportedImplementation (Sym) ;   (* May be an exported hidden type *)
!       PushTFtok (Sym, name, nametokno) ;
!       Annotate ("%1s(%1d)|%2n|%3d||type|type name|token no") ;
!       IF Debugging
!       THEN
!          MetaErrorT1 (nametokno, 'type pos {%1Wa}', Sym)
!       END
     END
  END BuildType ;
  
diff -Nrcpad gcc-16-20250615/gcc/m2/gm2-libs-log/Strings.def gcc-16-20250622/gcc/m2/gm2-libs-log/Strings.def
*** gcc-16-20250615/gcc/m2/gm2-libs-log/Strings.def	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/m2/gm2-libs-log/Strings.def	Sun Jun 22 22:32:20 2025
*************** PROCEDURE Delete (VAR str: ARRAY OF CHAR
*** 53,59 ****
  
  
  (*
!    Pos - return the first position of, substr, in, str.
  *)
  
  PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
--- 53,61 ----
  
  
  (*
!    Pos - return the first position of substr in str.
!          If substr is not found in str then it returns
!          HIGH (str) + 1.
  *)
  
  PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
diff -Nrcpad gcc-16-20250615/gcc/m2/gm2-libs-log/Strings.mod gcc-16-20250622/gcc/m2/gm2-libs-log/Strings.mod
*** gcc-16-20250615/gcc/m2/gm2-libs-log/Strings.mod	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/m2/gm2-libs-log/Strings.mod	Sun Jun 22 22:32:20 2025
*************** END Delete ;
*** 83,121 ****
  
  
  (*
!    Pos - return the first position of, substr, in, str.
  *)
  
! PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
  VAR
!    i, k, l   : INTEGER ;
!    s1, s2, s3: DynamicStrings.String ;
  BEGIN
!    s1 := DynamicStrings.InitString(str) ;
!    s2 := DynamicStrings.InitString(substr) ;
!    k := DynamicStrings.Length(s1) ;
!    l := DynamicStrings.Length(s2) ;
     i := 0 ;
     REPEAT
!       i := DynamicStrings.Index(s1, DynamicStrings.char(s2, 0), i) ;
!       IF i>=0
        THEN
!          s3 := DynamicStrings.Slice(s1, i, l) ;
!          IF DynamicStrings.Equal(s3, s2)
           THEN
!             s1 := DynamicStrings.KillString(s1) ;
!             s2 := DynamicStrings.KillString(s2) ;
!             s3 := DynamicStrings.KillString(s3) ;
              RETURN( i )
           END ;
!          s3 := DynamicStrings.KillString(s3)
        END ;
!       INC(i)
!    UNTIL i>=k ;
!    s1 := DynamicStrings.KillString(s1) ;
!    s2 := DynamicStrings.KillString(s2) ;
!    s3 := DynamicStrings.KillString(s3) ;
!    RETURN( HIGH(str)+1 )
  END Pos ;
  
  
--- 83,144 ----
  
  
  (*
!    PosLower - return the first position of substr in str.
  *)
  
! PROCEDURE PosLower (substr, str: ARRAY OF CHAR) : CARDINAL ;
  VAR
!    i, strLen, substrLen   : INTEGER ;
!    strS, substrS, scratchS: DynamicStrings.String ;
  BEGIN
!    strS := DynamicStrings.InitString (str) ;
!    substrS := DynamicStrings.InitString (substr) ;
!    strLen := DynamicStrings.Length (strS) ;
!    substrLen := DynamicStrings.Length (substrS) ;
     i := 0 ;
     REPEAT
!       i := DynamicStrings.Index (strS, DynamicStrings.char (substrS, 0), i) ;
!       IF i < 0
        THEN
!          (* No match on first character therefore return now.  *)
!          strS := DynamicStrings.KillString (strS) ;
!          substrS := DynamicStrings.KillString (substrS) ;
!          scratchS := DynamicStrings.KillString (scratchS) ;
!          RETURN( HIGH (str) + 1 )
!       ELSIF i + substrLen <= strLen
!       THEN
!          scratchS := DynamicStrings.Slice (strS, i, i + substrLen) ;
!          IF DynamicStrings.Equal (scratchS, substrS)
           THEN
!             strS := DynamicStrings.KillString (strS) ;
!             substrS := DynamicStrings.KillString (substrS) ;
!             scratchS := DynamicStrings.KillString (scratchS) ;
              RETURN( i )
           END ;
!          scratchS := DynamicStrings.KillString (scratchS)
        END ;
!       INC (i)
!    UNTIL i >= strLen ;
!    strS := DynamicStrings.KillString (strS) ;
!    substrS := DynamicStrings.KillString (substrS) ;
!    scratchS := DynamicStrings.KillString (scratchS) ;
!    RETURN( HIGH (str) + 1 )
! END PosLower ;
! 
! 
! (*
!    Pos - return the first position of substr in str.
!          If substr is not found in str then it returns
!          HIGH (str) + 1.
! *)
! 
! PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
! BEGIN
!    IF Length (substr) <= Length (str)
!    THEN
!       RETURN PosLower (substr, str)
!    END ;
!    RETURN( HIGH (str) + 1 )
  END Pos ;
  
  
*************** PROCEDURE Copy (str: ARRAY OF CHAR;
*** 129,139 ****
  VAR
     s1, s2: DynamicStrings.String ;
  BEGIN
!    s1 := DynamicStrings.InitString(str) ;
!    s2 := DynamicStrings.Slice(s1, index, index+length) ;
!    DynamicStrings.CopyOut(result, s2) ;
!    s1 := DynamicStrings.KillString(s1) ;
!    s2 := DynamicStrings.KillString(s2)
  END Copy ;
  
  
--- 152,162 ----
  VAR
     s1, s2: DynamicStrings.String ;
  BEGIN
!    s1 := DynamicStrings.InitString (str) ;
!    s2 := DynamicStrings.Slice (s1, index, index+length) ;
!    DynamicStrings.CopyOut (result, s2) ;
!    s1 := DynamicStrings.KillString (s1) ;
!    s2 := DynamicStrings.KillString (s2)
  END Copy ;
  
  
diff -Nrcpad gcc-16-20250615/gcc/omp-offload.cc gcc-16-20250622/gcc/omp-offload.cc
*** gcc-16-20250615/gcc/omp-offload.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/omp-offload.cc	Sun Jun 22 22:32:20 2025
*************** omp_discover_declare_target_tgt_fn_r (tr
*** 261,267 ****
  			       DECL_ATTRIBUTES (decl)))
  	return NULL_TREE;
  
!       if (!DECL_EXTERNAL (decl) && DECL_SAVED_TREE (decl))
  	((vec<tree> *) data)->safe_push (decl);
        DECL_ATTRIBUTES (decl) = tree_cons (id, NULL_TREE,
  					  DECL_ATTRIBUTES (decl));
--- 261,268 ----
  			       DECL_ATTRIBUTES (decl)))
  	return NULL_TREE;
  
!       if (DECL_SAVED_TREE (decl)
! 	  && (!DECL_EXTERNAL (decl) || DECL_DECLARED_INLINE_P (decl)))
  	((vec<tree> *) data)->safe_push (decl);
        DECL_ATTRIBUTES (decl) = tree_cons (id, NULL_TREE,
  					  DECL_ATTRIBUTES (decl));
diff -Nrcpad gcc-16-20250615/gcc/prime-paths.cc gcc-16-20250622/gcc/prime-paths.cc
*** gcc-16-20250615/gcc/prime-paths.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/prime-paths.cc	Sun Jun 22 22:32:21 2025
*************** struct auto_sbitmap_vector
*** 91,96 ****
--- 91,98 ----
  /* A silly RAII wrpaper for automatically releasing a vec<vec<int>>.  */
  struct auto_vec_vec : vec<vec<int>>
  {
+   auto_vec_vec () = default;
+   auto_vec_vec (vec<vec<int>> v) : vec<vec<int>>(v) {}
    ~auto_vec_vec () { release_vec_vec (*this); }
  };
  
*************** trie::insert_with_suffix (array_slice<co
*** 635,641 ****
  vec<vec<int>>
  trie::paths () const
  {
!   vec<int> path {};
    vec<vec<int>> all {};
    auto iter = paths (path);
    while (iter.next ())
--- 637,643 ----
  vec<vec<int>>
  trie::paths () const
  {
!   auto_vec<int> path {};
    vec<vec<int>> all {};
    auto iter = paths (path);
    while (iter.next ())
*************** test_split_components ()
*** 1658,1665 ****
    int nscc = graphds_scc (cfg, NULL);
    auto_graph ccfg (disconnect_sccs (cfg));
  
!   vec<vec<int>> entries {};
!   vec<vec<int>> exits {};
    entries.safe_grow_cleared (nscc);
    exits.safe_grow_cleared (nscc);
  
--- 1660,1667 ----
    int nscc = graphds_scc (cfg, NULL);
    auto_graph ccfg (disconnect_sccs (cfg));
  
!   auto_vec_vec entries {};
!   auto_vec_vec exits {};
    entries.safe_grow_cleared (nscc);
    exits.safe_grow_cleared (nscc);
  
*************** test_split_components ()
*** 1707,1713 ****
       because other graph inconsistencies are easier to detect.  */
  
    /* Count and check singleton components.  */
!   vec<int> scc_size {};
    scc_size.safe_grow_cleared (nscc);
    for (int i = 0; i != cfg->n_vertices; ++i)
      scc_size[cfg->vertices[i].component]++;
--- 1709,1715 ----
       because other graph inconsistencies are easier to detect.  */
  
    /* Count and check singleton components.  */
!   auto_vec<int> scc_size {};
    scc_size.safe_grow_cleared (nscc);
    for (int i = 0; i != cfg->n_vertices; ++i)
      scc_size[cfg->vertices[i].component]++;
*************** test_split_components ()
*** 1722,1735 ****
    /* Manually unroll the loop finding the simple paths starting at the
       vertices in the SCCs.  In this case there is only the one SCC.  */
    trie ccfg_paths;
!   simple_paths (ccfg, ccfg_paths, 2);
!   simple_paths (ccfg, ccfg_paths, 4);
!   simple_paths (ccfg, ccfg_paths, 5);
!   simple_paths (ccfg, ccfg_paths, 6);
!   simple_paths (ccfg, ccfg_paths, 7);
!   simple_paths (ccfg, ccfg_paths, 9);
    /* Then in+out of trie.  */
!   vec<vec<int>> xscc_internal_pp = ccfg_paths.paths ();
    trie scc_internal_pp;
    for (auto &p : xscc_internal_pp)
      scc_internal_pp.insert_with_suffix (p);
--- 1724,1737 ----
    /* Manually unroll the loop finding the simple paths starting at the
       vertices in the SCCs.  In this case there is only the one SCC.  */
    trie ccfg_paths;
!   auto_vec_vec (simple_paths (ccfg, ccfg_paths, 2));
!   auto_vec_vec (simple_paths (ccfg, ccfg_paths, 4));
!   auto_vec_vec (simple_paths (ccfg, ccfg_paths, 5));
!   auto_vec_vec (simple_paths (ccfg, ccfg_paths, 6));
!   auto_vec_vec (simple_paths (ccfg, ccfg_paths, 7));
!   auto_vec_vec (simple_paths (ccfg, ccfg_paths, 9));
    /* Then in+out of trie.  */
!   auto_vec_vec xscc_internal_pp = ccfg_paths.paths ();
    trie scc_internal_pp;
    for (auto &p : xscc_internal_pp)
      scc_internal_pp.insert_with_suffix (p);
*************** test_scc_internal_prime_paths ()
*** 1782,1788 ****
    add_edge (scc, 9, 7);
    add_edge (scc, 7, 2);
  
!   vec<vec<int>> paths = prime_paths (scc, 100);
    const int p01[] = { 5, 7, 2, 4, 6, 9 };
    const int p02[] = { 4, 6, 9, 7, 2, 4 };
    const int p03[] = { 2, 4, 6, 9, 7, 2 };
--- 1784,1790 ----
    add_edge (scc, 9, 7);
    add_edge (scc, 7, 2);
  
!   auto_vec_vec paths = prime_paths (scc, 100);
    const int p01[] = { 5, 7, 2, 4, 6, 9 };
    const int p02[] = { 4, 6, 9, 7, 2, 4 };
    const int p03[] = { 2, 4, 6, 9, 7, 2 };
*************** test_scc_internal_prime_paths ()
*** 1806,1812 ****
    ASSERT_TRUE (any_equal_p (p09, paths));
    ASSERT_TRUE (any_equal_p (p10, paths));
    ASSERT_TRUE (any_equal_p (p11, paths));
-   release_vec_vec (paths);
  }
  
  /* Test the entry/exit path helpers for the strongly connected component in
--- 1808,1813 ----
*************** test_scc_entry_exit_paths ()
*** 1825,1837 ****
    add_edge (scc, 7, 2);
  
    trie scc_internal_trie;
!   simple_paths (scc, scc_internal_trie, 2);
!   simple_paths (scc, scc_internal_trie, 4);
!   simple_paths (scc, scc_internal_trie, 5);
!   simple_paths (scc, scc_internal_trie, 6);
!   simple_paths (scc, scc_internal_trie, 7);
!   simple_paths (scc, scc_internal_trie, 9);
!   vec<vec<int>> scc_prime_paths = scc_internal_trie.paths ();
  
    trie entry_exits {};
    scc_entry_exit_paths (scc_prime_paths, 2, 2, entry_exits);
--- 1826,1838 ----
    add_edge (scc, 7, 2);
  
    trie scc_internal_trie;
!   auto_vec_vec (simple_paths (scc, scc_internal_trie, 2));
!   auto_vec_vec (simple_paths (scc, scc_internal_trie, 4));
!   auto_vec_vec (simple_paths (scc, scc_internal_trie, 5));
!   auto_vec_vec (simple_paths (scc, scc_internal_trie, 6));
!   auto_vec_vec (simple_paths (scc, scc_internal_trie, 7));
!   auto_vec_vec (simple_paths (scc, scc_internal_trie, 9));
!   auto_vec_vec scc_prime_paths = scc_internal_trie.paths ();
  
    trie entry_exits {};
    scc_entry_exit_paths (scc_prime_paths, 2, 2, entry_exits);
*************** test_scc_entry_exit_paths ()
*** 1867,1874 ****
    ASSERT_EQ (count (entries), 2);
    ASSERT_TRUE (contains (entries, p07));
    ASSERT_TRUE (contains (entries, p08));
- 
-   release_vec_vec (scc_prime_paths);
  }
  
  static void
--- 1868,1873 ----
*************** test_complete_prime_paths ()
*** 1893,1899 ****
      for (graph_edge *e = cfg->vertices[i].succ; e; e = e->succ_next)
        bitmap_set_bit (edges[e->src], e->dest);
  
!   vec<trie> ccfg_paths {};
    ccfg_paths.safe_grow_cleared (6);
    ccfg_paths[0].insert (array_slice <const int> (ccfg_single + 0, 1));
    ccfg_paths[1].insert (array_slice <const int> (ccfg_single + 1, 1));
--- 1892,1898 ----
      for (graph_edge *e = cfg->vertices[i].succ; e; e = e->succ_next)
        bitmap_set_bit (edges[e->src], e->dest);
  
!   auto_vec<trie> ccfg_paths {};
    ccfg_paths.safe_grow_cleared (6);
    ccfg_paths[0].insert (array_slice <const int> (ccfg_single + 0, 1));
    ccfg_paths[1].insert (array_slice <const int> (ccfg_single + 1, 1));
*************** test_entry_prime_paths ()
*** 1997,2003 ****
    exit_prime_paths.insert (ep03);
    exit_prime_paths.insert (ep04);
  
!   vec<int> sccs = binary_search_scc_map ();
  
    trie epp = scc_entry_prime_paths (cfg, scc_entry_paths,
  				    complete_prime_paths,
--- 1996,2002 ----
    exit_prime_paths.insert (ep03);
    exit_prime_paths.insert (ep04);
  
!   auto_vec<int> sccs = binary_search_scc_map ();
  
    trie epp = scc_entry_prime_paths (cfg, scc_entry_paths,
  				    complete_prime_paths,
*************** test_singleton_path ()
*** 2022,2035 ****
    auto_graph cfg (new_graph (3));
    add_edge (cfg, 0, 2);
    add_edge (cfg, 2, 1);
!   vec<vec<int>> paths = prime_paths (cfg, 100);
  
    ASSERT_EQ (paths.length (), 1);
    ASSERT_EQ (paths[0].length (), 3);
    ASSERT_EQ (paths[0][0], 0);
    ASSERT_EQ (paths[0][1], 2);
    ASSERT_EQ (paths[0][2], 1);
-   release_vec_vec (paths);
  }
  
  void
--- 2021,2033 ----
    auto_graph cfg (new_graph (3));
    add_edge (cfg, 0, 2);
    add_edge (cfg, 2, 1);
!   auto_vec_vec paths = prime_paths (cfg, 100);
  
    ASSERT_EQ (paths.length (), 1);
    ASSERT_EQ (paths[0].length (), 3);
    ASSERT_EQ (paths[0][0], 0);
    ASSERT_EQ (paths[0][1], 2);
    ASSERT_EQ (paths[0][2], 1);
  }
  
  void
diff -Nrcpad gcc-16-20250615/gcc/profile-count.cc gcc-16-20250622/gcc/profile-count.cc
*** gcc-16-20250615/gcc/profile-count.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/profile-count.cc	Sun Jun 22 22:32:21 2025
*************** const char *profile_quality_names[] =
*** 39,46 ****
  {
    "uninitialized",
    "guessed_local",
!   "guessed_global0",
    "guessed_global0adjusted",
    "guessed",
    "afdo",
    "adjusted",
--- 39,47 ----
  {
    "uninitialized",
    "guessed_local",
!   "guessed_global0afdo",
    "guessed_global0adjusted",
+   "guessed_global0",
    "guessed",
    "afdo",
    "adjusted",
*************** const char *profile_quality_display_name
*** 76,83 ****
  {
    NULL,
    "estimated locally",
!   "estimated locally, globally 0",
    "estimated locally, globally 0 adjusted",
    "guessed",
    "auto FDO",
    "adjusted",
--- 77,85 ----
  {
    NULL,
    "estimated locally",
!   "estimated locally, globally 0 auto FDO",
    "estimated locally, globally 0 adjusted",
+   "estimated locally, globally 0",
    "guessed",
    "auto FDO",
    "adjusted",
*************** profile_probability::dump (char *buffer)
*** 184,194 ****
        else
  	buffer += sprintf (buffer, "%3.1f%%", (double)m_val * 100 / max_probability);
  
!       if (m_quality == ADJUSTED)
  	sprintf (buffer, " (adjusted)");
!       else if (m_quality == AFDO)
  	sprintf (buffer, " (auto FDO)");
!       else if (m_quality == GUESSED)
  	sprintf (buffer, " (guessed)");
      }
  }
--- 186,196 ----
        else
  	buffer += sprintf (buffer, "%3.1f%%", (double)m_val * 100 / max_probability);
  
!       if (quality () == ADJUSTED)
  	sprintf (buffer, " (adjusted)");
!       else if (quality () == AFDO)
  	sprintf (buffer, " (auto FDO)");
!       else if (quality () == GUESSED)
  	sprintf (buffer, " (guessed)");
      }
  }
*************** profile_probability::stream_in (class lt
*** 246,252 ****
  {
    profile_probability ret;
    ret.m_val = streamer_read_uhwi (ib);
!   ret.m_quality = (profile_quality) streamer_read_uhwi (ib);
    return ret;
  }
  
--- 248,254 ----
  {
    profile_probability ret;
    ret.m_val = streamer_read_uhwi (ib);
!   ret.m_adjusted_quality = streamer_read_uhwi (ib);
    return ret;
  }
  
*************** void
*** 256,262 ****
  profile_probability::stream_out (struct output_block *ob)
  {
    streamer_write_uhwi (ob, m_val);
!   streamer_write_uhwi (ob, m_quality);
  }
  
  /* Stream THIS to OB.  */
--- 258,264 ----
  profile_probability::stream_out (struct output_block *ob)
  {
    streamer_write_uhwi (ob, m_val);
!   streamer_write_uhwi (ob, m_adjusted_quality);
  }
  
  /* Stream THIS to OB.  */
*************** void
*** 265,271 ****
  profile_probability::stream_out (struct lto_output_stream *ob)
  {
    streamer_write_uhwi_stream (ob, m_val);
!   streamer_write_uhwi_stream (ob, m_quality);
  }
  
  /* Compute RES=(a*b + c/2)/c capping and return false if overflow happened.  */
--- 267,273 ----
  profile_probability::stream_out (struct lto_output_stream *ob)
  {
    streamer_write_uhwi_stream (ob, m_val);
!   streamer_write_uhwi_stream (ob, m_adjusted_quality);
  }
  
  /* Compute RES=(a*b + c/2)/c capping and return false if overflow happened.  */
*************** profile_count::combine_with_ipa_count (p
*** 406,411 ****
--- 408,415 ----
      return *this;
    if (ipa == zero ())
      return this->global0 ();
+   if (ipa == afdo_zero ())
+     return this->global0afdo ();
    return this->global0adjusted ();
  }
  
*************** profile_probability::sqrt () const
*** 495,501 ****
    if (!initialized_p () || *this == never () || *this == always ())
      return *this;
    profile_probability ret = *this;
!   ret.m_quality = MIN (ret.m_quality, ADJUSTED);
    uint32_t min_range = m_val;
    uint32_t max_range = max_probability;
    if (!m_val)
--- 499,505 ----
    if (!initialized_p () || *this == never () || *this == always ())
      return *this;
    profile_probability ret = *this;
!   ret.set_quality (MIN (ret.quality (), ADJUSTED));
    uint32_t min_range = m_val;
    uint32_t max_range = max_probability;
    if (!m_val)
diff -Nrcpad gcc-16-20250615/gcc/profile-count.h gcc-16-20250622/gcc/profile-count.h
*** gcc-16-20250615/gcc/profile-count.h	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/profile-count.h	Sun Jun 22 22:32:21 2025
*************** enum profile_quality {
*** 37,55 ****
     */
    GUESSED_LOCAL,
  
    /* Profile was read by feedback and was 0, we used local heuristics to guess
       better.  This is the case of functions not run in profile feedback.
       Never used by probabilities.  */
    GUESSED_GLOBAL0,
  
-   /* Same as GUESSED_GLOBAL0 but global count is adjusted 0.  */
-   GUESSED_GLOBAL0_ADJUSTED,
- 
    /* Profile is based on static branch prediction heuristics.  It may or may
       not reflect the reality but it can be compared interprocedurally
       (for example, we inlined function w/o profile feedback into function
!       with feedback and propagated from that).
!      Never used by probabilities.  */
    GUESSED,
  
    /* Profile was determined by autofdo.  */
--- 37,57 ----
     */
    GUESSED_LOCAL,
  
+   /* Same as GUESSED_GLOBAL0 but global count is afdo 0.  */
+   GUESSED_GLOBAL0_AFDO,
+ 
+   /* Same as GUESSED_GLOBAL0 but global count is adjusted 0.  */
+   GUESSED_GLOBAL0_ADJUSTED,
+ 
    /* Profile was read by feedback and was 0, we used local heuristics to guess
       better.  This is the case of functions not run in profile feedback.
       Never used by probabilities.  */
    GUESSED_GLOBAL0,
  
    /* Profile is based on static branch prediction heuristics.  It may or may
       not reflect the reality but it can be compared interprocedurally
       (for example, we inlined function w/o profile feedback into function
!       with feedback and propagated from that).  */
    GUESSED,
  
    /* Profile was determined by autofdo.  */
*************** class GTY((user)) profile_probability
*** 151,176 ****
    static const uint32_t max_probability = (uint32_t) 1 << (n_bits - 2);
    static const uint32_t uninitialized_probability
  		 = ((uint32_t) 1 << (n_bits - 1)) - 1;
  
    uint32_t m_val : 29;
!   enum profile_quality m_quality : 3;
  
    friend struct profile_count;
  public:
!   profile_probability (): m_val (uninitialized_probability),
!     m_quality (GUESSED)
!   {}
  
    profile_probability (uint32_t val, profile_quality quality):
!     m_val (val), m_quality (quality)
!   {}
  
    /* Named probabilities.  */
    static profile_probability never ()
      {
        profile_probability ret;
        ret.m_val = 0;
!       ret.m_quality = PRECISE;
        return ret;
      }
  
--- 153,191 ----
    static const uint32_t max_probability = (uint32_t) 1 << (n_bits - 2);
    static const uint32_t uninitialized_probability
  		 = ((uint32_t) 1 << (n_bits - 1)) - 1;
+   /* For probibilityes quality is either UNINITIALIZED (0)
+      or greated then GUESSED.  To save bits we store it in
+      adjusted form which skips the invalid values.  */
+   static const int min_quality = GUESSED;
  
    uint32_t m_val : 29;
!   unsigned m_adjusted_quality : 3;
  
    friend struct profile_count;
+ 
+   /* Set the quality of the probability.  */
+   void
+   set_quality (profile_quality quality)
+   {
+     gcc_checking_assert (quality == UNINITIALIZED_PROFILE
+ 			 || (quality >= min_quality && quality <= PRECISE));
+     m_adjusted_quality = quality ? quality - min_quality + 1 : 0;
+   }
+ 
  public:
!   profile_probability (): m_val (uninitialized_probability)
!   { set_quality (GUESSED); }
  
    profile_probability (uint32_t val, profile_quality quality):
!     m_val (val)
!   { set_quality (quality); }
  
    /* Named probabilities.  */
    static profile_probability never ()
      {
        profile_probability ret;
        ret.m_val = 0;
!       ret.set_quality (PRECISE);
        return ret;
      }
  
*************** public:
*** 178,184 ****
      {
        profile_probability ret;
        ret.m_val = 0;
!       ret.m_quality = GUESSED;
        return ret;
      }
  
--- 193,199 ----
      {
        profile_probability ret;
        ret.m_val = 0;
!       ret.set_quality (GUESSED);
        return ret;
      }
  
*************** public:
*** 222,228 ****
      {
        profile_probability ret;
        ret.m_val = max_probability;
!       ret.m_quality = GUESSED;
        return ret;
      }
  
--- 237,243 ----
      {
        profile_probability ret;
        ret.m_val = max_probability;
!       ret.set_quality (GUESSED);
        return ret;
      }
  
*************** public:
*** 230,236 ****
      {
        profile_probability ret;
        ret.m_val = max_probability;
!       ret.m_quality = PRECISE;
        return ret;
      }
  
--- 245,251 ----
      {
        profile_probability ret;
        ret.m_val = max_probability;
!       ret.set_quality (PRECISE);
        return ret;
      }
  
*************** public:
*** 240,246 ****
      {
        profile_probability c;
        c.m_val = uninitialized_probability;
!       c.m_quality = GUESSED;
        return c;
      }
  
--- 255,261 ----
      {
        profile_probability c;
        c.m_val = uninitialized_probability;
!       c.set_quality (GUESSED);
        return c;
      }
  
*************** public:
*** 253,259 ****
    /* Return true if value can be trusted.  */
    bool reliable_p () const
      {
!       return m_quality >= ADJUSTED;
      }
  
    /* Conversion from and to REG_BR_PROB_BASE integer fixpoint arithmetics.
--- 268,274 ----
    /* Return true if value can be trusted.  */
    bool reliable_p () const
      {
!       return quality () >= ADJUSTED;
      }
  
    /* Conversion from and to REG_BR_PROB_BASE integer fixpoint arithmetics.
*************** public:
*** 263,269 ****
        profile_probability ret;
        gcc_checking_assert (v >= 0 && v <= REG_BR_PROB_BASE);
        ret.m_val = RDIV (v * (uint64_t) max_probability, REG_BR_PROB_BASE);
!       ret.m_quality = GUESSED;
        return ret;
      }
  
--- 278,284 ----
        profile_probability ret;
        gcc_checking_assert (v >= 0 && v <= REG_BR_PROB_BASE);
        ret.m_val = RDIV (v * (uint64_t) max_probability, REG_BR_PROB_BASE);
!       ret.set_quality (GUESSED);
        return ret;
      }
  
*************** public:
*** 273,279 ****
        profile_probability ret = *this;
        if (!initialized_p ())
  	return *this;
!       ret.m_quality = ADJUSTED;
        return ret;
      }
  
--- 288,294 ----
        profile_probability ret = *this;
        if (!initialized_p ())
  	return *this;
!       ret.set_quality (ADJUSTED);
        return ret;
      }
  
*************** public:
*** 288,301 ****
      {
        profile_probability ret;
        ret.m_val = ((unsigned int)v) / 8;
!       ret.m_quality = (enum profile_quality)(v & 7);
        return ret;
      }
  
    int to_reg_br_prob_note () const
      {
        gcc_checking_assert (initialized_p ());
!       int ret = m_val * 8 + m_quality;
        gcc_checking_assert (from_reg_br_prob_note (ret) == *this);
        return ret;
      }
--- 303,316 ----
      {
        profile_probability ret;
        ret.m_val = ((unsigned int)v) / 8;
!       ret.m_adjusted_quality = ((unsigned int)v) & 7;
        return ret;
      }
  
    int to_reg_br_prob_note () const
      {
        gcc_checking_assert (initialized_p ());
!       int ret = m_val * 8 + m_adjusted_quality;
        gcc_checking_assert (from_reg_br_prob_note (ret) == *this);
        return ret;
      }
*************** public:
*** 315,328 ****
  	  gcc_checking_assert (tmp <= max_probability);
  	  ret.m_val = tmp;
  	}
!       ret.m_quality = PRECISE;
        return ret;
      }
  
    /* Basic operations.  */
    bool operator== (const profile_probability &other) const
      {
!       return m_val == other.m_val && m_quality == other.m_quality;
      }
  
    profile_probability operator+ (const profile_probability &other) const
--- 330,343 ----
  	  gcc_checking_assert (tmp <= max_probability);
  	  ret.m_val = tmp;
  	}
!       ret.set_quality (PRECISE);
        return ret;
      }
  
    /* Basic operations.  */
    bool operator== (const profile_probability &other) const
      {
!       return m_val == other.m_val && quality () == other.quality ();
      }
  
    profile_probability operator+ (const profile_probability &other) const
*************** public:
*** 336,342 ****
  
        profile_probability ret;
        ret.m_val = MIN ((uint32_t)(m_val + other.m_val), max_probability);
!       ret.m_quality = MIN (m_quality, other.m_quality);
        return ret;
      }
  
--- 351,357 ----
  
        profile_probability ret;
        ret.m_val = MIN ((uint32_t)(m_val + other.m_val), max_probability);
!       ret.set_quality (MIN (quality (), other.quality ()));
        return ret;
      }
  
*************** public:
*** 354,360 ****
        else
  	{
  	  m_val = MIN ((uint32_t)(m_val + other.m_val), max_probability);
! 	  m_quality = MIN (m_quality, other.m_quality);
  	}
        return *this;
      }
--- 369,375 ----
        else
  	{
  	  m_val = MIN ((uint32_t)(m_val + other.m_val), max_probability);
! 	  set_quality (MIN (quality (), other.quality ()));
  	}
        return *this;
      }
*************** public:
*** 368,374 ****
  	return uninitialized ();
        profile_probability ret;
        ret.m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
!       ret.m_quality = MIN (m_quality, other.m_quality);
        return ret;
      }
  
--- 383,389 ----
  	return uninitialized ();
        profile_probability ret;
        ret.m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
!       ret.set_quality (MIN (quality (), other.quality ()));
        return ret;
      }
  
*************** public:
*** 382,388 ****
        else
  	{
  	  m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
! 	  m_quality = MIN (m_quality, other.m_quality);
  	}
        return *this;
      }
--- 397,403 ----
        else
  	{
  	  m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
! 	  set_quality (MIN (quality (), other.quality ()));
  	}
        return *this;
      }
*************** public:
*** 396,402 ****
  	return uninitialized ();
        profile_probability ret;
        ret.m_val = RDIV ((uint64_t)m_val * other.m_val, max_probability);
!       ret.m_quality = MIN (MIN (m_quality, other.m_quality), ADJUSTED);
        return ret;
      }
  
--- 411,417 ----
  	return uninitialized ();
        profile_probability ret;
        ret.m_val = RDIV ((uint64_t)m_val * other.m_val, max_probability);
!       ret.set_quality (MIN (quality (), other.quality ()));
        return ret;
      }
  
*************** public:
*** 410,416 ****
        else
  	{
  	  m_val = RDIV ((uint64_t)m_val * other.m_val, max_probability);
! 	  m_quality = MIN (MIN (m_quality, other.m_quality), ADJUSTED);
  	}
        return *this;
      }
--- 425,431 ----
        else
  	{
  	  m_val = RDIV ((uint64_t)m_val * other.m_val, max_probability);
! 	  set_quality (MIN (MIN (quality (), other.quality ()), ADJUSTED));
  	}
        return *this;
      }
*************** public:
*** 426,433 ****
        if (m_val >= other.m_val)
  	{
  	  ret.m_val = max_probability;
!           ret.m_quality = MIN (MIN (m_quality, other.m_quality),
! 			       GUESSED);
  	  return ret;
  	}
        else if (!m_val)
--- 441,448 ----
        if (m_val >= other.m_val)
  	{
  	  ret.m_val = max_probability;
! 	  ret.set_quality (MIN (MIN (quality (), other.quality ()),
! 				GUESSED));
  	  return ret;
  	}
        else if (!m_val)
*************** public:
*** 439,445 ****
  				 other.m_val),
  			   max_probability);
  	}
!       ret.m_quality = MIN (MIN (m_quality, other.m_quality), ADJUSTED);
        return ret;
      }
  
--- 454,460 ----
  				 other.m_val),
  			   max_probability);
  	}
!       ret.set_quality (MIN (MIN (quality (), other.quality ()), ADJUSTED));
        return ret;
      }
  
*************** public:
*** 451,463 ****
  	return *this = uninitialized ();
        else
  	{
!           /* If we get probability above 1, mark it as unreliable
  	     and return 1. */
  	  if (m_val > other.m_val)
  	    {
  	      m_val = max_probability;
!               m_quality = MIN (MIN (m_quality, other.m_quality),
! 			       GUESSED);
  	      return *this;
  	    }
  	  else if (!m_val)
--- 466,478 ----
  	return *this = uninitialized ();
        else
  	{
! 	  /* If we get probability above 1, mark it as unreliable
  	     and return 1. */
  	  if (m_val > other.m_val)
  	    {
  	      m_val = max_probability;
! 	      set_quality (MIN (MIN (quality (), other.quality ()),
! 				GUESSED));
  	      return *this;
  	    }
  	  else if (!m_val)
*************** public:
*** 469,475 ****
  				 other.m_val),
  			   max_probability);
  	    }
! 	  m_quality = MIN (MIN (m_quality, other.m_quality), ADJUSTED);
  	}
        return *this;
      }
--- 484,490 ----
  				 other.m_val),
  			   max_probability);
  	    }
! 	  set_quality (MIN (MIN (quality (), other.quality ()), ADJUSTED));
  	}
        return *this;
      }
*************** public:
*** 519,525 ****
    profile_probability guessed () const
      {
        profile_probability ret = *this;
!       ret.m_quality = GUESSED;
        return ret;
      }
  
--- 534,540 ----
    profile_probability guessed () const
      {
        profile_probability ret = *this;
!       ret.set_quality (GUESSED);
        return ret;
      }
  
*************** public:
*** 527,533 ****
    profile_probability afdo () const
      {
        profile_probability ret = *this;
!       ret.m_quality = AFDO;
        return ret;
      }
  
--- 542,548 ----
    profile_probability afdo () const
      {
        profile_probability ret = *this;
!       ret.set_quality (AFDO);
        return ret;
      }
  
*************** public:
*** 542,548 ****
        uint64_t tmp;
        safe_scale_64bit (m_val, num, den, &tmp);
        ret.m_val = MIN (tmp, max_probability);
!       ret.m_quality = MIN (m_quality, ADJUSTED);
        return ret;
      }
  
--- 557,563 ----
        uint64_t tmp;
        safe_scale_64bit (m_val, num, den, &tmp);
        ret.m_val = MIN (tmp, max_probability);
!       ret.set_quality (MIN (quality (), ADJUSTED));
        return ret;
      }
  
*************** public:
*** 564,571 ****
        uint64_t val;
        safe_scale_64bit (m_val, num.m_val, den.m_val, &val);
        ret.m_val = MIN (val, max_probability);
!       ret.m_quality = MIN (MIN (MIN (m_quality, ADJUSTED),
! 				     num.m_quality), den.m_quality);
        return ret;
      }
  
--- 579,586 ----
        uint64_t val;
        safe_scale_64bit (m_val, num.m_val, den.m_val, &val);
        ret.m_val = MIN (val, max_probability);
!       ret.set_quality (MIN (MIN (MIN (quality (), ADJUSTED),
! 			    num.quality ()), den.quality ()));
        return ret;
      }
  
*************** public:
*** 587,593 ****
       CFG if we find this information useful on multiple places.   */
    bool probably_reliable_p () const
      {
!       if (m_quality >= ADJUSTED)
  	return true;
        if (!initialized_p ())
  	return false;
--- 602,608 ----
       CFG if we find this information useful on multiple places.   */
    bool probably_reliable_p () const
      {
!       if (quality () >= ADJUSTED)
  	return true;
        if (!initialized_p ())
  	return false;
*************** public:
*** 598,607 ****
    /* Return false if profile_probability is bogus.  */
    bool verify () const
      {
!       gcc_checking_assert (m_quality != UNINITIALIZED_PROFILE);
        if (m_val == uninitialized_probability)
! 	return m_quality == GUESSED;
!       else if (m_quality < GUESSED)
  	return false;
        return m_val <= max_probability;
      }
--- 613,622 ----
    /* Return false if profile_probability is bogus.  */
    bool verify () const
      {
!       gcc_checking_assert (quality () != UNINITIALIZED_PROFILE);
        if (m_val == uninitialized_probability)
! 	return quality () == GUESSED;
!       else if (quality () < GUESSED)
  	return false;
        return m_val <= max_probability;
      }
*************** public:
*** 656,666 ****
    /* Compute sware root.  */
    profile_probability sqrt () const;
  
!   /* Get the value of the count.  */
    uint32_t value () const { return m_val; }
  
!   /* Get the quality of the count.  */
!   enum profile_quality quality () const { return m_quality; }
  
    /* Output THIS to F.  */
    void dump (FILE *f) const;
--- 671,686 ----
    /* Compute sware root.  */
    profile_probability sqrt () const;
  
!   /* Get the value of the probability.  */
    uint32_t value () const { return m_val; }
  
!   /* Get the quality of the probability.  */
!   enum profile_quality quality () const
!   {
!     return (profile_quality) (m_adjusted_quality
! 			      ? m_adjusted_quality + min_quality - 1
! 			      : UNINITIALIZED_PROFILE);
!   }
  
    /* Output THIS to F.  */
    void dump (FILE *f) const;
*************** public:
*** 749,759 ****
  struct GTY(()) profile_count
  {
  public:
!   /* Use 62bit to hold basic block counters.  Should be at least
       64bit.  Although a counter cannot be negative, we use a signed
       type to hold various extra stages.  */
  
!   static const int n_bits = 61;
    static const uint64_t max_count = ((uint64_t) 1 << n_bits) - 2;
  private:
    static const uint64_t uninitialized_count = ((uint64_t) 1 << n_bits) - 1;
--- 769,779 ----
  struct GTY(()) profile_count
  {
  public:
!   /* Use 60bit to hold basic block counters.  Should be at least
       64bit.  Although a counter cannot be negative, we use a signed
       type to hold various extra stages.  */
  
!   static const int n_bits = 60;
    static const uint64_t max_count = ((uint64_t) 1 << n_bits) - 2;
  private:
    static const uint64_t uninitialized_count = ((uint64_t) 1 << n_bits) - 1;
*************** private:
*** 769,775 ****
  #endif
    uint64_t UINT64_BIT_FIELD_ALIGN m_val : n_bits;
  #undef UINT64_BIT_FIELD_ALIGN
!   enum profile_quality m_quality : 3;
  public:
  
    /* Return true if both values can meaningfully appear in single function
--- 789,795 ----
  #endif
    uint64_t UINT64_BIT_FIELD_ALIGN m_val : n_bits;
  #undef UINT64_BIT_FIELD_ALIGN
!   enum profile_quality m_quality : 4;
  public:
  
    /* Return true if both values can meaningfully appear in single function
*************** public:
*** 808,813 ****
--- 828,841 ----
        return c;
      }
  
+   static profile_count afdo_zero ()
+     {
+       profile_count c;
+       c.m_val = 0;
+       c.m_quality = AFDO;
+       return c;
+     }
+ 
    static profile_count guessed_zero ()
      {
        profile_count c;
*************** public:
*** 853,859 ****
    /* Return true if value can be operated inter-procedurally.  */
    bool ipa_p () const
      {
!       return !initialized_p () || m_quality >= GUESSED_GLOBAL0;
      }
  
    /* Return true if quality of profile is precise.  */
--- 881,887 ----
    /* Return true if value can be operated inter-procedurally.  */
    bool ipa_p () const
      {
!       return !initialized_p () || m_quality >= GUESSED_GLOBAL0_AFDO;
      }
  
    /* Return true if quality of profile is precise.  */
*************** public:
*** 929,935 ****
  	return *this = uninitialized ();
        else
  	{
!           gcc_checking_assert (compatible_p (other));
  	  uint64_t ret_val = m_val + other.m_val;
  	  m_val = MIN (ret_val, max_count);
  	  m_quality = MIN (m_quality, other.m_quality);
--- 957,963 ----
  	return *this = uninitialized ();
        else
  	{
! 	  gcc_checking_assert (compatible_p (other));
  	  uint64_t ret_val = m_val + other.m_val;
  	  m_val = MIN (ret_val, max_count);
  	  m_quality = MIN (m_quality, other.m_quality);
*************** public:
*** 958,964 ****
  	return *this = uninitialized ();
        else
  	{
!           gcc_checking_assert (compatible_p (other));
  	  m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
  	  m_quality = MIN (m_quality, other.m_quality);
  	}
--- 986,992 ----
  	return *this = uninitialized ();
        else
  	{
! 	  gcc_checking_assert (compatible_p (other));
  	  m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
  	  m_quality = MIN (m_quality, other.m_quality);
  	}
*************** public:
*** 1092,1098 ****
        if (ret.m_val == 0)
  	{
  	  ret.m_val = 1;
!           ret.m_quality = MIN (m_quality, ADJUSTED);
  	}
        return ret;
      }
--- 1120,1126 ----
        if (ret.m_val == 0)
  	{
  	  ret.m_val = 1;
! 	  ret.m_quality = MIN (m_quality, ADJUSTED);
  	}
        return ret;
      }
*************** public:
*** 1153,1159 ****
        safe_scale_64bit (m_val, prob.m_val, profile_probability::max_probability,
  			&tmp);
        ret.m_val = tmp;
!       ret.m_quality = MIN (m_quality, prob.m_quality);
        return ret;
      }
  
--- 1181,1187 ----
        safe_scale_64bit (m_val, prob.m_val, profile_probability::max_probability,
  			&tmp);
        ret.m_val = tmp;
!       ret.m_quality = MIN (m_quality, prob.quality ());
        return ret;
      }
  
*************** public:
*** 1191,1197 ****
        safe_scale_64bit (m_val, num.m_val, den.m_val, &val);
        ret.m_val = MIN (val, max_count);
        ret.m_quality = MIN (MIN (MIN (m_quality, ADJUSTED),
! 			        num.m_quality), den.m_quality);
        /* Be sure that ret is not local if num is global.
  	 Also ensure that ret is not global0 when num is global.  */
        if (num.ipa_p ())
--- 1219,1225 ----
        safe_scale_64bit (m_val, num.m_val, den.m_val, &val);
        ret.m_val = MIN (val, max_count);
        ret.m_quality = MIN (MIN (MIN (m_quality, ADJUSTED),
! 			   num.m_quality), den.m_quality);
        /* Be sure that ret is not local if num is global.
  	 Also ensure that ret is not global0 when num is global.  */
        if (num.ipa_p ())
*************** public:
*** 1220,1225 ****
--- 1248,1264 ----
        return ret;
      }
  
+   /* We know that profile is globally afdo 0 but keep local profile
+      if present.  */
+   profile_count global0afdo () const
+     {
+       profile_count ret = *this;
+       if (!initialized_p ())
+ 	return *this;
+       ret.m_quality = GUESSED_GLOBAL0_AFDO;
+       return ret;
+     }
+ 
    /* We know that profile is globally adjusted 0 but keep local profile
       if present.  */
    profile_count global0adjusted () const
*************** public:
*** 1239,1254 ****
        return ret;
      }
  
    /* Return variant of profile count which is always safe to compare
       across functions.  */
    profile_count ipa () const
      {
!       if (m_quality > GUESSED_GLOBAL0_ADJUSTED)
  	return *this;
        if (m_quality == GUESSED_GLOBAL0)
  	return zero ();
        if (m_quality == GUESSED_GLOBAL0_ADJUSTED)
  	return adjusted_zero ();
        return uninitialized ();
      }
  
--- 1278,1304 ----
        return ret;
      }
  
+   /* Return THIS with quality GUESSED.  */
+   profile_count force_guessed () const
+     {
+       profile_count ret = *this;
+       gcc_checking_assert (initialized_p ());
+       ret.m_quality = GUESSED;
+       return ret;
+     }
+ 
    /* Return variant of profile count which is always safe to compare
       across functions.  */
    profile_count ipa () const
      {
!       if (m_quality > GUESSED_GLOBAL0)
  	return *this;
        if (m_quality == GUESSED_GLOBAL0)
  	return zero ();
        if (m_quality == GUESSED_GLOBAL0_ADJUSTED)
  	return adjusted_zero ();
+       if (m_quality == GUESSED_GLOBAL0_AFDO)
+ 	return afdo_zero ();
        return uninitialized ();
      }
  
*************** public:
*** 1278,1291 ****
        if (overall.m_val < m_val)
  	{
  	  ret.m_val = profile_probability::max_probability;
! 	  ret.m_quality = GUESSED;
  	  return ret;
  	}
        else
  	ret.m_val = RDIV (m_val * profile_probability::max_probability,
  			  overall.m_val);
!       ret.m_quality = MIN (MAX (MIN (m_quality, overall.m_quality),
! 				GUESSED), ADJUSTED);
        return ret;
      }
  
--- 1328,1341 ----
        if (overall.m_val < m_val)
  	{
  	  ret.m_val = profile_probability::max_probability;
! 	  ret.set_quality (GUESSED);
  	  return ret;
  	}
        else
  	ret.m_val = RDIV (m_val * profile_probability::max_probability,
  			  overall.m_val);
!       ret.set_quality (MIN (MAX (MIN (m_quality, overall.m_quality),
! 				 GUESSED), ADJUSTED));
        return ret;
      }
  
diff -Nrcpad gcc-16-20250615/gcc/real.cc gcc-16-20250622/gcc/real.cc
*** gcc-16-20250615/gcc/real.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/real.cc	Sun Jun 22 22:32:21 2025
*************** static int do_compare (const REAL_VALUE_
*** 101,107 ****
  static void do_fix_trunc (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
  
  static unsigned long rtd_divmod (REAL_VALUE_TYPE *, REAL_VALUE_TYPE *);
! static void decimal_from_integer (REAL_VALUE_TYPE *);
  static void decimal_integer_string (char *, const REAL_VALUE_TYPE *,
  				    size_t);
  
--- 101,107 ----
  static void do_fix_trunc (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
  
  static unsigned long rtd_divmod (REAL_VALUE_TYPE *, REAL_VALUE_TYPE *);
! static void decimal_from_integer (REAL_VALUE_TYPE *, int);
  static void decimal_integer_string (char *, const REAL_VALUE_TYPE *,
  				    size_t);
  
*************** real_from_integer (REAL_VALUE_TYPE *r, f
*** 2309,2315 ****
      }
  
    if (fmt.decimal_p ())
!     decimal_from_integer (r);
    if (fmt)
      real_convert (r, fmt, r);
  }
--- 2309,2317 ----
      }
  
    if (fmt.decimal_p ())
!     /* We need at most one decimal digits for each 3 bits of input
!        precision.  */
!     decimal_from_integer (r, val_in.get_precision () / 3);
    if (fmt)
      real_convert (r, fmt, r);
  }
*************** decimal_integer_string (char *str, const
*** 2364,2375 ****
  /* Convert a real with an integral value to decimal float.  */
  
  static void
! decimal_from_integer (REAL_VALUE_TYPE *r)
  {
    char str[256];
  
!   decimal_integer_string (str, r, sizeof (str) - 1);
!   decimal_real_from_string (r, str);
  }
  
  /* Returns 10**2**N.  */
--- 2366,2386 ----
  /* Convert a real with an integral value to decimal float.  */
  
  static void
! decimal_from_integer (REAL_VALUE_TYPE *r, int digits)
  {
    char str[256];
  
!   if (digits <= 256)
!     {
!       decimal_integer_string (str, r, sizeof (str) - 1);
!       decimal_real_from_string (r, str);
!     }
!   else
!     {
!       char *s = XALLOCAVEC (char, digits);
!       decimal_integer_string (s, r, digits - 1);
!       decimal_real_from_string (r, s);
!     }
  }
  
  /* Returns 10**2**N.  */
diff -Nrcpad gcc-16-20250615/gcc/rtl.h gcc-16-20250622/gcc/rtl.h
*** gcc-16-20250615/gcc/rtl.h	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/rtl.h	Sun Jun 22 22:32:21 2025
*************** extern bool subreg_offset_representable_
*** 2506,2512 ****
  					   poly_uint64, machine_mode);
  extern unsigned int subreg_regno (const_rtx);
  extern int simplify_subreg_regno (unsigned int, machine_mode,
! 				  poly_uint64, machine_mode);
  extern int lowpart_subreg_regno (unsigned int, machine_mode,
  				 machine_mode);
  extern unsigned int subreg_nregs (const_rtx);
--- 2506,2513 ----
  					   poly_uint64, machine_mode);
  extern unsigned int subreg_regno (const_rtx);
  extern int simplify_subreg_regno (unsigned int, machine_mode,
! 				  poly_uint64, machine_mode,
! 				  bool allow_stack_regs = false);
  extern int lowpart_subreg_regno (unsigned int, machine_mode,
  				 machine_mode);
  extern unsigned int subreg_nregs (const_rtx);
diff -Nrcpad gcc-16-20250615/gcc/rtlanal.cc gcc-16-20250622/gcc/rtlanal.cc
*** gcc-16-20250615/gcc/rtlanal.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/rtlanal.cc	Sun Jun 22 22:32:21 2025
*************** subreg_offset_representable_p (unsigned
*** 4245,4255 ****
  
     can be simplified.  Return -1 if the subreg can't be simplified.
  
!    XREGNO is a hard register number.  */
  
  int
  simplify_subreg_regno (unsigned int xregno, machine_mode xmode,
! 		       poly_uint64 offset, machine_mode ymode)
  {
    struct subreg_info info;
    unsigned int yregno;
--- 4245,4260 ----
  
     can be simplified.  Return -1 if the subreg can't be simplified.
  
!    XREGNO is a hard register number.  ALLOW_STACK_REGS is true if
!    we should allow subregs of stack_pointer_rtx, frame_pointer_rtx.
!    and arg_pointer_rtx (which are normally expected to be the unique
!    way of referring to their respective registers).  */
! 
  
  int
  simplify_subreg_regno (unsigned int xregno, machine_mode xmode,
! 		       poly_uint64 offset, machine_mode ymode,
! 		       bool allow_stack_regs)
  {
    struct subreg_info info;
    unsigned int yregno;
*************** simplify_subreg_regno (unsigned int xreg
*** 4260,4279 ****
        && !REG_CAN_CHANGE_MODE_P (xregno, xmode, ymode))
      return -1;
  
!   /* We shouldn't simplify stack-related registers.  */
!   if ((!reload_completed || frame_pointer_needed)
!       && xregno == FRAME_POINTER_REGNUM)
!     return -1;
  
!   if (FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
!       && xregno == ARG_POINTER_REGNUM)
!     return -1;
  
!   if (xregno == STACK_POINTER_REGNUM
!       /* We should convert hard stack register in LRA if it is
! 	 possible.  */
!       && ! lra_in_progress)
!     return -1;
  
    /* Try to get the register offset.  */
    subreg_get_info (xregno, xmode, offset, ymode, &info);
--- 4265,4287 ----
        && !REG_CAN_CHANGE_MODE_P (xregno, xmode, ymode))
      return -1;
  
!   if (!allow_stack_regs)
!     {
!       /* We shouldn't simplify stack-related registers.  */
!       if ((!reload_completed || frame_pointer_needed)
! 	  && xregno == FRAME_POINTER_REGNUM)
! 	return -1;
  
!       if (FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
! 	  && xregno == ARG_POINTER_REGNUM)
! 	return -1;
  
!       if (xregno == STACK_POINTER_REGNUM
! 	  /* We should convert hard stack register in LRA if it is
! 	     possible.  */
! 	  && ! lra_in_progress)
! 	return -1;
!     }
  
    /* Try to get the register offset.  */
    subreg_get_info (xregno, xmode, offset, ymode, &info);
diff -Nrcpad gcc-16-20250615/gcc/simplify-rtx.cc gcc-16-20250622/gcc/simplify-rtx.cc
*** gcc-16-20250615/gcc/simplify-rtx.cc	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/simplify-rtx.cc	Sun Jun 22 22:32:21 2025
*************** simplify_context::simplify_binary_operat
*** 4063,4068 ****
--- 4063,4082 ----
  	  && rtx_equal_p (XEXP (XEXP (op0, 0), 0), op1))
  	return simplify_gen_binary (IOR, mode, XEXP (op0, 1), op1);
  
+       /* Convert (xor (and (rotate (~1) A) B) (ashift 1 A))
+ 	 into B | (1 << A).  */
+       if (SHIFT_COUNT_TRUNCATED
+ 	  && GET_CODE (op0) == AND
+ 	  && GET_CODE (XEXP (op0, 0)) == ROTATE
+ 	  && CONST_INT_P (XEXP (XEXP (op0, 0), 0))
+ 	  && INTVAL (XEXP (XEXP (op0, 0), 0)) == -2
+ 	  && GET_CODE (op1) == ASHIFT
+ 	  && CONST_INT_P (XEXP (op1, 0))
+ 	  && INTVAL (XEXP (op1, 0)) == 1
+ 	  && rtx_equal_p (XEXP (XEXP (op0, 0), 1), XEXP (op1, 1))
+ 	  && !side_effects_p (XEXP (op1, 1)))
+ 	return simplify_gen_binary (IOR, mode, XEXP (op0, 1), op1);
+ 
        tem = simplify_with_subreg_not (code, mode, op0, op1);
        if (tem)
  	return tem;
diff -Nrcpad gcc-16-20250615/gcc/testsuite/ChangeLog gcc-16-20250622/gcc/testsuite/ChangeLog
*** gcc-16-20250615/gcc/testsuite/ChangeLog	Sun Jun 15 22:32:25 2025
--- gcc-16-20250622/gcc/testsuite/ChangeLog	Sun Jun 22 22:32:21 2025
***************
*** 1,3 ****
--- 1,455 ----
+ 2025-06-21  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/118241
+ 	* gcc.target/riscv/pr118241.c: New test.
+ 
+ 2025-06-21  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gcc.dg/tree-prof/afdo-vpt-earlyinline.c: Update template.
+ 	* gcc.dg/tree-prof/indir-call-prof-2.c: Update template.
+ 
+ 2025-06-21  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gcc.dg/tree-prof/afdo-vpt-earlyinline.c: Update template.
+ 	* gcc.dg/tree-prof/indir-call-prof-2.c: Likewise.
+ 	* gcc.dg/tree-prof/afdo-inline.c: New test.
+ 
+ 2025-06-21  Pan Li  <pan2.li@intel.com>
+ 
+ 	PR target/120652
+ 	* gcc.target/riscv/rvv/autovec/pr120652-1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr120652-2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr120652-3.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr120652.h: New test.
+ 
+ 2025-06-20  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120701
+ 	* gcc.dg/pr120701.c: New.
+ 
+ 2025-06-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120654
+ 	* gcc.dg/torture/pr120654.c: New testcase.
+ 
+ 2025-06-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120708
+ 	* gcc.target/i386/memcpy-pr120708-1.c: New test.
+ 	* gcc.target/i386/memcpy-pr120708-2.c: Likewise.
+ 	* gcc.target/i386/memcpy-pr120708-3.c: Likewise.
+ 	* gcc.target/i386/memcpy-pr120708-4.c: Likewise.
+ 	* gcc.target/i386/memcpy-pr120708-5.c: Likewise.
+ 	* gcc.target/i386/memcpy-pr120708-6.c: Likewise.
+ 	* gcc.target/i386/memset-pr120708-1.c: Likewise.
+ 	* gcc.target/i386/memset-pr120708-2.c: Likewise.
+ 	* gcc.target/i386/memcpy-strategy-1.c: Drop dg-skip-if.  Replace
+ 	-march=atom with -mno-avx -msse2 -mtune=generic
+ 	-mtune-ctrl=^sse_typeless_stores.
+ 	* gcc.target/i386/memcpy-strategy-2.c: Likewise.
+ 	* gcc.target/i386/memcpy-vector_loop-1.c: Likewise.
+ 	* gcc.target/i386/memcpy-vector_loop-2.c: Likewise.
+ 	* gcc.target/i386/memset-vector_loop-1.c: Likewise.
+ 	* gcc.target/i386/memset-vector_loop-2.c: Likewise.
+ 
+ 2025-06-20  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-37.c: Force rocket tuning.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c: Likewise.
+ 
+ 2025-06-20  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c: Add asm check
+ 	for vminu.vx combine.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c: Ditto.
+ 
+ 2025-06-20  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macors.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add
+ 	test data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u8.c: New test.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/120689
+ 	* gcc.target/i386/pr120689.c: New test.
+ 
+ 2025-06-19  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/120713
+ 	* gfortran.dg/save_alloc_character_1.f90: New test.
+ 
+ 2025-06-19  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120427
+ 	* gcc.target/i386/cold-attribute-4.c: Compile with -Oz.
+ 	* gcc.target/i386/pr120427-1.c: New test.
+ 	* gcc.target/i386/pr120427-2.c: Likewise.
+ 	* gcc.target/i386/pr120427-3.c: Likewise.
+ 	* gcc.target/i386/pr120427-4.c: Likewise.
+ 
+ 2025-06-19  Dongyan Chen  <chendongyan@isrc.iscas.ac.cn>
+ 
+ 	* gcc.target/riscv/zicond-primitiveSemantics_compare_reg_reg_return_reg_reg.c: New test.
+ 
+ 2025-06-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* gcc.dg/dfp/bitint-10.c: New test.
+ 	* gcc.dg/dfp/pr120631.c: New test.
+ 
+ 2025-06-19  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* gcc.target/riscv/zilsd-code-gen-split-subreg-1.c: New test.
+ 	* gcc.target/riscv/zilsd-code-gen-split-subreg-2.c: New test.
+ 
+ 2025-06-19  Lili Cui  <lili.cui@intel.com>
+ 
+ 	PR target/120697
+ 	* gcc.target/i386/stack-clash-protection.c: New test.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gcc.dg/pr119039-1.c: Add space in search criteria.
+ 
+ 2025-06-18  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR c++/115908
+ 	PR c++/118074
+ 	PR c++/95615
+ 	* g++.dg/coroutines/pr115908.C: Move to...
+ 	* g++.dg/coroutines/torture/pr115908.C: ...here.
+ 	* g++.dg/coroutines/torture/pr95615-02.C: Move to...
+ 	* g++.dg/coroutines/torture/pr95615-01-promise-ctor-throws.C: ...here.
+ 	* g++.dg/coroutines/torture/pr95615-03.C: Move to...
+ 	* g++.dg/coroutines/torture/pr95615-02-get-return-object-throws.C: ...here.
+ 	* g++.dg/coroutines/torture/pr95615-01.C: Move to...
+ 	* g++.dg/coroutines/torture/pr95615-03-initial-suspend-throws.C: ...here.
+ 	* g++.dg/coroutines/torture/pr95615-04.C: Move to...
+ 	* g++.dg/coroutines/torture/pr95615-04-initial-await-ready-throws.C: ...here.
+ 	* g++.dg/coroutines/torture/pr95615-05.C: Move to...
+ 	* g++.dg/coroutines/torture/pr95615-05-initial-await-suspend-throws.C: ...here.
+ 	* g++.dg/coroutines/torture/pr95615.inc: Add more cases and ensure that the
+ 	code completes properly when no exceptions are thrown.
+ 	* g++.dg/coroutines/torture/pr95615-00-nothing-throws.C: New test.
+ 	* g++.dg/coroutines/torture/pr95615-06-initial-await-resume-throws.C: New test.
+ 	* g++.dg/coroutines/torture/pr95615-07-body-throws.C: New test.
+ 	* g++.dg/coroutines/torture/pr95615-08-initial-suspend-throws-uhe-throws.C: New test.
+ 	* g++.dg/coroutines/torture/pr95615-09-body-throws-uhe-throws.C: New test.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/119039
+ 	* gcc.dg/pr119039-2.c: New.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/119039
+ 	* gcc.dg/pr119039-1.c: New.
+ 	* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Adjust thread counts.
+ 
+ 2025-06-18  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/82480
+ 	* gfortran.dg/stat_3.f90: New test.
+ 
+ 2025-06-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/120631
+ 	* gcc.dg/dfp/bitint-9.c: New test.
+ 
+ 2025-06-18  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c: Add asm check
+ 	for vmin.vx combine.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c: Ditto.
+ 
+ 2025-06-18  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Add asm check.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ 	data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i8.c: New test.
+ 
+ 2025-06-18  Lili Cui  <lili.cui@intel.com>
+ 	    Michael Matz  <matz@suse.de>
+ 
+ 	* gcc.target/x86_64/abi/callabi/leaf-2.c: Adjust the test.
+ 	* gcc.target/i386/interrupt-16.c: Likewise.
+ 	* gfortran.dg/guality/arg1.f90: Likewise.
+ 	* gcc.target/i386/avx10_2-comibf-1.c: Likewise.
+ 	* g++.target/i386/shrink_wrap_separate.C: New test.
+ 	* gcc.target/i386/shrink_wrap_separate_check_lea.c: Likewise.
+ 
+ 2025-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/120661
+ 	* gcc.dg/pr120661-1.c: New.
+ 	* gcc.dg/pr120661-2.c: New.
+ 
+ 2025-06-17  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/aggr8.ads: New test.
+ 
+ 2025-06-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120673
+ 	* gm2/pim/fail/badmodvar.mod: New test.
+ 	* gm2/pim/fail/cyclictypes.mod: New test.
+ 	* gm2/pim/fail/cyclictypes2.mod: New test.
+ 	* gm2/pim/fail/cyclictypes4.mod: New test.
+ 
+ 2025-06-17  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gcc.dg/tree-prof/afdo-vpt-earlyinline.c: New test.
+ 
+ 2025-06-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* g++.dg/coroutines/assume.C: New test.
+ 
+ 2025-06-17  Umesh Kalappa  <ukalappa.mips@gmail.com>
+ 
+ 	* gcc.target/riscv/zalrsc.c: New test.
+ 
+ 2025-06-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/modules/warn-spec-3_a.C: New test.
+ 	* g++.dg/modules/warn-spec-3_b.C: New test.
+ 	* g++.dg/modules/warn-spec-3_c.C: New test.
+ 
+ 2025-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/120677
+ 	* gcc.c-torture/execute/pr120677.c: New test.
+ 
+ 2025-06-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/113027
+ 	* gcc.target/aarch64/pr113027-1.c: New test.
+ 	* gcc.target/aarch64/pr113027-2.c: Likewise.
+ 	* gcc.target/aarch64/pr113027-3.c: Likewise.
+ 	* gcc.target/aarch64/pr113027-4.c: Likewise.
+ 	* gcc.target/aarch64/pr113027-5.c: Likewise.
+ 	* gcc.target/aarch64/pr113027-6.c: Likewise.
+ 	* gcc.target/aarch64/pr113027-7.c: Likewise.
+ 
+ 2025-06-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* g++.dg/coroutines/unevaluated.C: New test.
+ 
+ 2025-06-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR c++/120273
+ 	* g++.dg/coroutines/pr120273.C: New test.
+ 
+ 2025-06-17  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* gcc.target/riscv/jump-table-large-code-model.c: Adding
+ 	-fno-pie.
+ 	* gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c: Ditto.
+ 
+ 2025-06-16  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/pack_fcvt_signed_1.c: Disable the aarch64 vector
+ 	cost model to preserve this test.
+ 	* gcc.target/aarch64/sve/pack_fcvt_unsigned_1.c: Likewise.
+ 	* gcc.target/aarch64/sve/pack_float_1.c: Likewise.
+ 	* gcc.target/aarch64/sve/unpack_float_1.c: Likewise.
+ 	* gcc.target/aarch64/sve/unpacked_cvtf_1.c: New test.
+ 	* gcc.target/aarch64/sve/unpacked_cvtf_2.c: Likewise.
+ 	* gcc.target/aarch64/sve/unpacked_cvtf_3.c: Likewise.
+ 	* gcc.target/aarch64/sve/unpacked_fcvt_1.c: Likewise.
+ 	* gcc.target/aarch64/sve/unpacked_fcvt_2.c: Likewise.
+ 	* gcc.target/aarch64/sve/unpacked_fcvtz_1.c: Likewise.
+ 	* gcc.target/aarch64/sve/unpacked_fcvtz_2.c: Likewise.
+ 
+ 2025-06-16  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/51961
+ 	* gfortran.dg/allocate_with_mold_5.f90: New test.
+ 
+ 2025-06-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/template/friend87.C
+ 	* g++.dg/cpp2a/concepts-complete1.C
+ 	* g++.dg/cpp2a/concepts-complete2.C
+ 	* g++.dg/cpp2a/concepts-complete3.C
+ 	* g++.dg/cpp2a/concepts-complete4.C: Expect -Wsfinae-incomplete.
+ 
+ 2025-06-16  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Leverage
+ 	helper macros to avoid code duplication.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add
+ 	signed and unsigned vx combine test macros.
+ 
+ 2025-06-16  Matthieu Longo  <matthieu.longo@arm.com>
+ 	    Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+ 
+ 	* lib/target-supports.exp:
+ 	(check_effective_target_aarch64_gas_has_build_attributes): New checker.
+ 	* gcc.target/aarch64/build-attributes/aarch64-build-attributes.exp: New DejaGNU file.
+ 	* gcc.target/aarch64/build-attributes/build-attribute-bti.c: New test.
+ 	* gcc.target/aarch64/build-attributes/build-attribute-gcs.c: New test.
+ 	* gcc.target/aarch64/build-attributes/build-attribute-pac.c: New test.
+ 	* gcc.target/aarch64/build-attributes/build-attribute-standard.c: New test.
+ 	* gcc.target/aarch64/build-attributes/no-build-attribute-bti.c: New test.
+ 	* gcc.target/aarch64/build-attributes/no-build-attribute-gcs.c: New test.
+ 	* gcc.target/aarch64/build-attributes/no-build-attribute-pac.c: New test.
+ 	* gcc.target/aarch64/build-attributes/no-build-attribute-standard.c: New test.
+ 
+ 2025-06-16  yxj-github-437  <2457369732@qq.com>
+ 
+ 	* g++.dg/cpp0x/variadic-crash7.C: New test.
+ 
+ 2025-06-16  Matthieu Longo  <matthieu.longo@arm.com>
+ 
+ 	* gcc.target/aarch64/bti-1.c: Emit assembly comments, and update
+ 	test assertion.
+ 
+ 2025-06-16  Jiawei  <jiawei@iscas.ac.cn>
+ 
+ 	* gcc.target/riscv/arch-53.c: Update testcase.
+ 
+ 2025-06-16  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* gcc.target/xtensa/elim_GP_regmove_0.c: Remove.
+ 	* gcc.target/xtensa/elim_GP_regmove_1.c: Remove.
+ 
+ 2025-06-15  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c: Add asm check
+ 	for vmaxu.vx combine.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c: Ditto.
+ 
+ 2025-06-15  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check
+ 	for vmaxu.vx combine.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ 	data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-1-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-1-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-1-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-1-u8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-2-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-2-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-2-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmax-run-2-u8.c: New test.
+ 
  2025-06-14  Georg-Johann Lay  <avr@gjlay.de>
  
  	Backported from master:
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/assume.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/assume.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/assume.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/assume.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,40 ----
+ // { dg-additional-options "-fsyntax-only -Wattributes" }
+ 
+ #include <coroutine>
+ 
+ struct awaitable {
+     awaitable (int n) : delay{n} {}
+ 
+     constexpr bool await_ready () const noexcept { return false; }
+     auto await_suspend (std::coroutine_handle<> h) const {
+         __builtin_abort ();
+         return false;
+     }
+     int await_resume() const noexcept {
+         return delay;
+     }
+ 
+     int delay;
+ };
+ 
+ struct Task {
+     struct promise_type {
+         promise_type() = default;
+         Task get_return_object() { return {}; }
+         std::suspend_never initial_suspend() { return {}; }
+         std::suspend_always final_suspend() noexcept { return {}; }
+         void unhandled_exception() {}
+         void return_void () {}
+         awaitable yield_value (int v) { return {v}; }
+     };
+ };
+ 
+ int h () { return 5; }
+ 
+ Task foo() noexcept {
+     int x = 5;
+     [[assume (x == 5)]];
+     [[assume (co_await awaitable{10})]]; // { dg-warning {assumption ignored because it contains an await-expression} }
+     [[assume ((h(),co_await awaitable{11}))]]; // { dg-warning {assumption ignored because it contains an await-expression} }
+     co_return;
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/pr115908.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/pr115908.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/pr115908.C	Sun Jun 15 22:32:29 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/pr115908.C	Thu Jan  1 00:00:00 1970
***************
*** 1,117 ****
- // { dg-do run }
- 
- // With the changes to deal with CWG2563 (and PR119916) we now use the
- // referenced promise in the return expression.  It is quite reasonable
- // for a body implementation to complete before control is returned to
- // the ramp - and in that case we would be creating the ramp return object
- // from an already-deleted promise object.
- // This is recognised to be a poor situation and resolution via a core
- // issue is planned.
- 
- // In this test we explicitly trigger the circumstance mentioned above.
- // { dg-xfail-run-if "" { *-*-* } }
- 
- #include <coroutine>
- 
- #ifdef OUTPUT
- #include <iostream>
- #endif
- 
- struct Promise;
- 
- int promise_life = 0;
- 
- struct Handle : std::coroutine_handle<Promise> {
- 
-     Handle(Promise &p) : std::coroutine_handle<Promise>(Handle::from_promise(p)) {
- #ifdef OUTPUT
-         std::cout << "Handle(Promise &) " << promise_life << std::endl;
- #endif
-          if (promise_life <= 0)
-           __builtin_abort ();
-    }
- 
-     Handle(Promise &&p) : std::coroutine_handle<Promise>(Handle::from_promise(p)) {
- #ifdef OUTPUT
-         std::cout << "Handle(Promise &&) "  << promise_life  << std::endl;
- #endif
-          if (promise_life <= 0)
-           __builtin_abort ();
-    }
- 
-     using promise_type = Promise;
- };
- 
- struct Promise {
-     Promise() {
- #ifdef OUTPUT
-         std::cout << "Promise()" << std::endl;
- #endif
-         promise_life++;
-     }
- 
-     Promise(Promise& p){
- #ifdef OUTPUT
-         std::cout << "Promise(Promise&)" << std::endl;
- #endif
-         promise_life++;
-     }
- 
-     ~Promise() {
- #ifdef OUTPUT
-         std::cout << "~Promise()" << std::endl;
- #endif
-         if (promise_life <= 0)
-           __builtin_abort ();
-         promise_life--;
-     }
- 
-     Promise& get_return_object() noexcept {
- #ifdef OUTPUT
-         std::cout << "get_return_object() " << promise_life << std::endl;
- #endif
-         if (promise_life <= 0)
-           __builtin_abort ();
-         return *this;
-     }
- 
-     std::suspend_never initial_suspend() const noexcept {
- #ifdef OUTPUT
-         std::cout << "initial_suspend()" << std::endl;
- #endif
-      return {}; 
-     }
-     std::suspend_never final_suspend() const noexcept {
- #ifdef OUTPUT
-         std::cout << "final_suspend()" << std::endl;
- #endif
-     return {};
-     }
-     void return_void() const noexcept {
-         if (!promise_life)
-           __builtin_abort ();
- #ifdef OUTPUT
-         std::cout << "return_void()" << std::endl;
- #endif
-     }
-     void unhandled_exception() const noexcept {}
- };
- 
- Handle Coro() {
- 
- #ifdef OUTPUT
-         std::cout << "Coro()" << std::endl;
- #endif
-     co_return;
- }
- 
- int main() {
- 
-   Coro();
- #ifdef OUTPUT
-         std::cout << "done Coro()" << std::endl;
- #endif
-   if (promise_life)
-     __builtin_abort ();
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/pr120273.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/pr120273.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/pr120273.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/pr120273.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,58 ----
+ // PR120273
+ // { dg-additional-options "-Wno-literal-suffix" }
+ namespace std {
+ void declval();
+ template < typename > struct invoke_result;
+ template < typename _Fn > using invoke_result_t = invoke_result< _Fn >;
+ template < typename _Derived, typename _Base >
+ concept derived_from = __is_base_of(_Base, _Derived);
+ template < typename, typename >
+ concept convertible_to = requires { declval; };
+ template < char... > int operator""ms();
+ template < typename _Result, typename > struct coroutine_traits : _Result {};
+ template < typename = void > struct coroutine_handle {
+   static coroutine_handle from_address(void *);
+   operator coroutine_handle<>();
+   void *address();
+ };
+ }
+ 
+ using namespace std;
+ 
+ template < class > using CoroutineHandle = coroutine_handle<>;
+ 
+ template < class Callable >
+   requires(derived_from< invoke_result_t< Callable >, int >)
+ Callable operator co_await(Callable);
+ 
+ struct FinalSuspendProxy {
+   bool await_ready() noexcept;
+   void await_suspend(CoroutineHandle< void >) noexcept ;
+   void await_resume() noexcept;
+ };
+ 
+ struct Task {
+   struct Promise;
+   using promise_type = Promise;
+ 
+   struct Promise {
+     auto initial_suspend() { return FinalSuspendProxy(); }
+     auto final_suspend () noexcept  { return FinalSuspendProxy(); }
+     void unhandled_exception () {}
+     Task get_return_object () { return {}; }
+   };
+ } ;
+ 
+ struct TestEventLoop {
+   struct Sleep {
+     Sleep(TestEventLoop, int);
+     bool await_ready();
+     void await_suspend(CoroutineHandle< void >);
+     void await_resume();
+   };
+   auto sleep(int tm) { return Sleep(*this, tm); }
+ };
+ 
+ Task test_body_11(TestEventLoop t) {
+   co_await t.sleep(5ms);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr115908.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr115908.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr115908.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr115908.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,112 ----
+ // { dg-do run }
+ 
+ // With the changes to deal with CWG2563 (and PR119916) we now use the
+ // referenced promise in the return expression.  It is quite reasonable
+ // for a body implementation to complete before control is returned to
+ // the ramp - so we need to ensure that the promise lifetime is extended
+ // in that case, tested here.
+ 
+ #include <coroutine>
+ 
+ #ifdef OUTPUT
+ #include <iostream>
+ #endif
+ 
+ struct Promise;
+ 
+ int promise_life = 0;
+ 
+ struct Handle : std::coroutine_handle<Promise> {
+ 
+     Handle(Promise &p) : std::coroutine_handle<Promise>(Handle::from_promise(p)) {
+ #ifdef OUTPUT
+         std::cout << "Handle(Promise &) " << promise_life << std::endl;
+ #endif
+          if (promise_life <= 0)
+           __builtin_abort ();
+    }
+ 
+     Handle(Promise &&p) : std::coroutine_handle<Promise>(Handle::from_promise(p)) {
+ #ifdef OUTPUT
+         std::cout << "Handle(Promise &&) "  << promise_life  << std::endl;
+ #endif
+          if (promise_life <= 0)
+           __builtin_abort ();
+    }
+ 
+     using promise_type = Promise;
+ };
+ 
+ struct Promise {
+     Promise() {
+ #ifdef OUTPUT
+         std::cout << "Promise()" << std::endl;
+ #endif
+         promise_life++;
+     }
+ 
+     Promise(Promise& p){
+ #ifdef OUTPUT
+         std::cout << "Promise(Promise&)" << std::endl;
+ #endif
+         promise_life++;
+     }
+ 
+     ~Promise() {
+ #ifdef OUTPUT
+         std::cout << "~Promise()" << std::endl;
+ #endif
+         if (promise_life <= 0)
+           __builtin_abort ();
+         promise_life--;
+     }
+ 
+     Promise& get_return_object() noexcept {
+ #ifdef OUTPUT
+         std::cout << "get_return_object() " << promise_life << std::endl;
+ #endif
+         if (promise_life <= 0)
+           __builtin_abort ();
+         return *this;
+     }
+ 
+     std::suspend_never initial_suspend() const noexcept {
+ #ifdef OUTPUT
+         std::cout << "initial_suspend()" << std::endl;
+ #endif
+      return {}; 
+     }
+     std::suspend_never final_suspend() const noexcept {
+ #ifdef OUTPUT
+         std::cout << "final_suspend()" << std::endl;
+ #endif
+     return {};
+     }
+     void return_void() const noexcept {
+         if (!promise_life)
+           __builtin_abort ();
+ #ifdef OUTPUT
+         std::cout << "return_void()" << std::endl;
+ #endif
+     }
+     void unhandled_exception() const noexcept {}
+ };
+ 
+ Handle Coro() {
+ 
+ #ifdef OUTPUT
+         std::cout << "Coro()" << std::endl;
+ #endif
+     co_return;
+ }
+ 
+ int main() {
+ 
+   Coro();
+ #ifdef OUTPUT
+         std::cout << "done Coro()" << std::endl;
+ #endif
+   if (promise_life)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-00-nothing-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-00-nothing-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-00-nothing-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-00-nothing-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,5 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ // Check that this completes correctly if nothing throws.
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01-promise-ctor-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01-promise-ctor-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01-promise-ctor-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01-promise-ctor-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,5 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define PROMISE_CTOR_THROWS 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01.C	Sun Jun 15 22:32:29 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-01.C	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- //  { dg-do run }
- //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
- 
- #define INITIAL_SUSPEND_THROWS 1
- #include "pr95615.inc"
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02-get-return-object-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02-get-return-object-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02-get-return-object-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02-get-return-object-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,5 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define GET_RETURN_OBJECT_THROWS 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02.C	Sun Jun 15 22:32:29 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-02.C	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- //  { dg-do run }
- //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
- 
- #define PROMISE_CTOR_THROWS 1
- #include "pr95615.inc"
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03-initial-suspend-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03-initial-suspend-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03-initial-suspend-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03-initial-suspend-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,5 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define INITIAL_SUSPEND_THROWS 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03.C	Sun Jun 15 22:32:29 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-03.C	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- //  { dg-do run }
- //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
- 
- #define GET_RETURN_OBJECT_THROWS 1
- #include "pr95615.inc"
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04-initial-await-ready-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04-initial-await-ready-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04-initial-await-ready-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04-initial-await-ready-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,5 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define INITIAL_AWAIT_READY_THROWS 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04.C	Sun Jun 15 22:32:29 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-04.C	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- //  { dg-do run }
- //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
- 
- #define INITIAL_AWAIT_READY_THROWS 1
- #include "pr95615.inc"
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05-initial-await-suspend-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05-initial-await-suspend-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05-initial-await-suspend-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05-initial-await-suspend-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,5 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define INITIAL_AWAIT_SUSPEND_THROWS 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05.C	Sun Jun 15 22:32:29 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-05.C	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- //  { dg-do run }
- //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
- 
- #define INITIAL_AWAIT_SUSPEND_THROWS 1
- #include "pr95615.inc"
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-06-initial-await-resume-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-06-initial-await-resume-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-06-initial-await-resume-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-06-initial-await-resume-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,7 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define INITIAL_AWAIT_RESUME_THROWS 1
+ // This should reach unhandled_exception
+ #define SHOULD_CALL_UNHANDLED_EXCEPTION 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-07-body-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-07-body-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-07-body-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-07-body-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,7 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define BODY_THROWS 1
+ // This should reach unhandled_exception
+ #define SHOULD_CALL_UNHANDLED_EXCEPTION 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-08-initial-suspend-throws-uhe-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-08-initial-suspend-throws-uhe-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-08-initial-suspend-throws-uhe-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-08-initial-suspend-throws-uhe-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,8 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define INITIAL_SUSPEND_THROWS 1
+ // It should be irrelevant that unhandled_exception might throw, so we should
+ // not call it.
+ #define UNHANDLED_EXCEPTION_THROWS 1
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-09-body-throws-uhe-throws.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-09-body-throws-uhe-throws.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615-09-body-throws-uhe-throws.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615-09-body-throws-uhe-throws.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,10 ----
+ //  { dg-do run }
+ //  { dg-skip-if "requires hosted libstdc++ for cassert in pr95615.inc" { ! hostedlib } }
+ 
+ #define BODY_THROWS 1
+ // This should reach unhandled_exception...
+ #define SHOULD_CALL_UNHANDLED_EXCEPTION 1
+ // ... which will throw 
+ #define UNHANDLED_EXCEPTION_THROWS 1
+ // and we should cleanup by calling destroy.
+ #include "pr95615.inc"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615.inc gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615.inc
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/torture/pr95615.inc	Sun Jun 15 22:32:29 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/torture/pr95615.inc	Sun Jun 22 22:32:25 2025
***************
*** 1,127 ****
- #if __has_include(<coroutine>)
  #include <coroutine>
! #else
! #include <experimental/coroutine>
! namespace std {
!     using namespace std::experimental;
! }
! #endif
! #include <cassert>
  #include <cstdio>
  #include <cstdlib>
  
! bool frame_live = false;
! bool promise_live = false;
! 
! struct X {};
  
  int Y_live = 0;
  int task_live = 0;
  
  struct Y
  {
!   Y () { std::puts("Y ()"); Y_live++; } 
!   Y (const Y&) { std::puts("Y (const Y&)"); Y_live++; } 
!   ~Y () { std::puts("~Y ()"); Y_live--; }
  };
  
  struct task {
      struct promise_type {
          void* operator new(size_t sz) {
!             std::puts("operator new()");
!             frame_live = true;
              return ::operator new(sz);
          }
  
!         void operator delete(void* p, size_t sz) {
!             std::puts("operator delete");
!             frame_live = false;
!             return ::operator delete(p, sz);
          }
  
          promise_type() {
!             std::puts("promise_type()");
! #if PROMISE_CTOR_THROWS
               throw X{};
  #endif
              promise_live = true;
          }
  
          ~promise_type() {
!             std::puts("~promise_type()");
!             promise_live = false;
          }
  
          struct awaiter {
              bool await_ready() {
! #if INITIAL_AWAIT_READY_THROWS
                 throw X{};
  #endif
                 return false;
              }
              void await_suspend(std::coroutine_handle<>) {
! #if INITIAL_AWAIT_SUSPEND_THROWS
                  throw X{};
  #endif
              }
              void await_resume() {
! #if INITIAL_AWAIT_RESUME_THROWS
! // this would be caught by unhandled_exception () which is tested
! // elsewhere.
                  throw X{};
  #endif
              }
          };
  
          awaiter initial_suspend() {
! #if INITIAL_SUSPEND_THROWS
              throw X{};
  #endif
              return {};
          }
  
          task get_return_object() {
!             std::puts("get_return_object()");
! #if GET_RETURN_OBJECT_THROWS
              throw X{};
  #endif
              return task{};
          }
  
!         std::suspend_never final_suspend() noexcept { return {}; }
!         void return_void() noexcept {}
!         void unhandled_exception() noexcept {
!             std::puts("unhandled_exception()");
          }
      };
  
-     task() { std::puts("task()");  task_live++; }
-     ~task() { std::puts("~task()"); task_live--; }
-     task(task&&) { std::puts("task(task&&)"); task_live++;  }
  };
  
  task f(Y Val __attribute__((__unused__))) {
!     co_return;
  }
  
  int main() {
!     bool failed = false;
!     Y Val;
!     try {
!         f(Val);
!     } catch (X) {
!         std::puts("caught X");
!         if (task_live)
!           std::puts("task live"), failed = true;
!         if (promise_live)
!           std::puts("promise live"), failed = true;
!         if (frame_live)
!           std::puts("frame live"), failed = true;
!     }
  
    if (Y_live != 1)
!     std::printf("Y live %d\n", Y_live), failed = true;
  
    if (failed)
!     abort() ;
  }
--- 1,209 ----
  #include <coroutine>
! #include <exception>
  #include <cstdio>
  #include <cstdlib>
  
! #ifndef OUTPUT
! #  define PRINT(X)
! #  define PRINTF(...)
! #else
! //#include <iostream>
! #  define PRINT(X) puts(X)
! //#  define PRINT(X) std::cout << (X) << std::endl
! #  define PRINTF(...) printf(__VA_ARGS__)
! #endif
  
+ int frame_live = 0;
+ int promise_live = 0;
  int Y_live = 0;
  int task_live = 0;
+ int unhandled_exception_called = 0;
+ 
+ struct X {};
  
  struct Y
  {
!   Y () {
!     PRINT("Y ()");
!     Y_live++;
!   } 
!   Y (const Y&) {
!     PRINT("Y (const Y&)");
!     Y_live++;
!   } 
!   ~Y () {
!     PRINT("~Y ()");
!     --Y_live;
!   }
  };
  
  struct task {
+     struct promise_type;
+     using coro_handle = std::coroutine_handle<promise_type>;
+     struct Z {
+       std::exception_ptr eptr;
+       coro_handle h;
+     };
      struct promise_type {
          void* operator new(size_t sz) {
!             PRINT("operator new()");
!             frame_live++;
              return ::operator new(sz);
          }
  
!         static void operator delete(void* p, size_t sz)  {
!             PRINT("operator delete");
!             --frame_live;
!             ::operator delete(p, sz);
          }
  
          promise_type() {
!             PRINT("promise_type()");
! #ifdef PROMISE_CTOR_THROWS
               throw X{};
  #endif
              promise_live = true;
          }
  
          ~promise_type() {
!             PRINT("~promise_type()");
!             --promise_live;
          }
  
          struct awaiter {
              bool await_ready() {
!              PRINT("initial await_ready()");
! #ifdef INITIAL_AWAIT_READY_THROWS
                 throw X{};
  #endif
+ // If we are testing the suspend infra, then suspend, otherwise continue
+ // so that we can test later paths (effectively, suspend_never).
+ #ifdef INITIAL_AWAIT_SUSPEND_THROWS
                 return false;
+ #else
+                return true;
+ #endif
              }
              void await_suspend(std::coroutine_handle<>) {
! #ifdef INITIAL_AWAIT_SUSPEND_THROWS
                  throw X{};
  #endif
              }
              void await_resume() {
!              PRINT("initial await_resume()");
! #ifdef INITIAL_AWAIT_RESUME_THROWS
! // This should be caught by unhandled_exception ()
                  throw X{};
  #endif
              }
          };
  
          awaiter initial_suspend() {
!            PRINT("initial_suspend()");
! #ifdef INITIAL_SUSPEND_THROWS
              throw X{};
  #endif
              return {};
          }
  
          task get_return_object() {
!             PRINT("get_return_object()");
! #ifdef GET_RETURN_OBJECT_THROWS
              throw X{};
  #endif
              return task{};
          }
  
!         std::suspend_never final_suspend() noexcept { 
!            PRINT("final_suspend()");
!            return {};
!         }
!         void return_void() {
!           PRINT("return_void()");
!         }
!         void unhandled_exception()  {
!             PRINT("unhandled_exception()");
!             unhandled_exception_called++;
! #ifdef UNHANDLED_EXCEPTION_THROWS
! 	    Z z{std::current_exception(),coro_handle::from_promise(*this)};
! 	    throw z;
!             //throw coro_handle::from_promise(*this);
! #endif
          }
      };
+    
+     task() noexcept {
+      PRINT("task()");
+      task_live++;
+     }
+     task(task&& t) noexcept {
+       PRINT("task(task&&)");
+       task_live++;
+     }
+     ~task() noexcept {
+       PRINT("~task()");
+       task_live--;
+     }
  
  };
  
  task f(Y Val __attribute__((__unused__))) {
!   PRINT("f()");
! #ifdef BODY_THROWS
!   throw X{};
! #endif
!   co_return;
  }
  
  int main() {
!   bool failed = false;
!   Y Val;
!   try {
!     PRINT("try-block-s");
!     task tsk = f(Val);
!     PRINT("try-block-e");
!   } catch (X) {
!     PRINT("caught X");
!   } catch (task::Z& z) {
!     PRINTF("caught Z : %d\n",(bool)z.eptr);
!     if (z.h.done())
!       {
!         PRINT("done, cleaning up");
!         z.h.destroy ();
!       }
!     else
!       PRINT("not done?");
!   } catch (std::coroutine_handle<task::promise_type>& h) {
!     PRINT("caught handle");
!     if (h.done())
!       {
!         PRINT("done, cleaning up");
!         h.destroy ();
!       }
!     else
!       PRINT("not done?");
!   }
  
+   if (task_live)
+     failed = true, __builtin_printf("task still live\n") ;
+   if (promise_live)
+     failed = true, __builtin_printf("promise still live\n");
+   if (frame_live)
+     failed = true, __builtin_printf("frame still live : %d\n", frame_live);
    if (Y_live != 1)
!     failed = true, __builtin_printf("Y live count : %d\n", Y_live);
! #ifdef SHOULD_CALL_UNHANDLED_EXCEPTION
!   if (unhandled_exception_called != 1)
!     failed = true, __builtin_printf("unhandled exception : %d\n", unhandled_exception_called);
! #else
!   if (unhandled_exception_called != 0)
!     failed = true, __builtin_printf("unhandled exception : %d\n", unhandled_exception_called);
! #endif
! 
!   __builtin_printf("checking result : %s \n",(failed?"bad":"good"));
! 
!   fflush(stdout);
  
    if (failed)
!    __builtin_abort();
  }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/unevaluated.C gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/unevaluated.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/coroutines/unevaluated.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/coroutines/unevaluated.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,25 ----
+ // { dg-additional-options "-fsyntax-only" }
+ #include <typeinfo>
+ #include <coroutine>
+ 
+ struct Task {
+     struct promise_type {
+         promise_type() = default;
+         Task get_return_object() { return {}; }
+         std::suspend_never initial_suspend() { return {}; }
+         std::suspend_always final_suspend() noexcept { return {}; }
+         void unhandled_exception() {}
+         void return_void () {}
+         std::suspend_never yield_value (int) { return {}; }
+     };
+ };
+ 
+ // We do not permit co_await, co_yield outside a function, and so uses in
+ // noexcept or requirements are covered by that.
+ Task foo()  {
+     /* This one will currently fail - see PR68604.  */
+     const std::type_info& ti1 = typeid (co_await std::suspend_never{}); // { dg-error {'co_await' cannot be used in an unevaluated context} "" { xfail *-*-* } }
+     std::size_t x = sizeof (co_yield (19)); // { dg-error {'co_yield' cannot be used in an unevaluated context} }
+     decltype (co_await std::suspend_never{}) A; // { dg-error {'co_await' cannot be used in an unevaluated context} }
+     co_return;
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/cpp0x/variadic-crash7.C gcc-16-20250622/gcc/testsuite/g++.dg/cpp0x/variadic-crash7.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/cpp0x/variadic-crash7.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/cpp0x/variadic-crash7.C	Sun Jun 22 22:32:25 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do compile { target c++11 } }
+ 
+ template <typename... Ts>
+ void f (Ts&&... args)
+ {
+   asm volatile ("" :: "r"(args) : "memory"); // { dg-error "parameter packs" }
+ }
+ 
+ void g()
+ {
+   f(1);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete1.C gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete1.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete1.C	Sun Jun 15 22:32:31 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete1.C	Sun Jun 22 22:32:26 2025
*************** template <class T> char f() { return 0;
*** 12,18 ****
  
  struct A;
  static_assert (sizeof (f<A>()) == 1); // { dg-message "first evaluated to 'false' from here" }
! struct A { typedef int type; };
  static_assert (sizeof (f<A>()) > 1); // { dg-error "assert" }
  // { dg-message "required from here" "" { target *-*-* } .-1 }
  static_assert (sizeof (f<A>()) > 1);
--- 12,18 ----
  
  struct A;
  static_assert (sizeof (f<A>()) == 1); // { dg-message "first evaluated to 'false' from here" }
! struct A { typedef int type; };	      // { dg-warning Wsfinae-incomplete }
  static_assert (sizeof (f<A>()) > 1); // { dg-error "assert" }
  // { dg-message "required from here" "" { target *-*-* } .-1 }
  static_assert (sizeof (f<A>()) > 1);
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete2.C gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete2.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete2.C	Sun Jun 15 22:32:31 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete2.C	Sun Jun 22 22:32:26 2025
*************** template <class T> char f() { return 0;
*** 18,23 ****
  
  struct A;
  static_assert (sizeof (f<A>()) == 1); // { dg-message "first evaluated to 'false' from here" }
! struct A { typedef int type; };
  static_assert (sizeof (f<A>()) > 1); // { dg-error "assert" }
  static_assert (sizeof (f<A>()) > 1);
--- 18,23 ----
  
  struct A;
  static_assert (sizeof (f<A>()) == 1); // { dg-message "first evaluated to 'false' from here" }
! struct A { typedef int type; };	      // { dg-warning Wsfinae-incomplete }
  static_assert (sizeof (f<A>()) > 1); // { dg-error "assert" }
  static_assert (sizeof (f<A>()) > 1);
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete3.C gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete3.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete3.C	Sun Jun 15 22:32:31 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete3.C	Sun Jun 22 22:32:26 2025
*************** template <class T> char f() { return 0;
*** 11,16 ****
  
  struct A { auto foo(); };
  static_assert (sizeof (f<A>()) == 1); // { dg-message "first evaluated to 'false' from here" }
! auto A::foo() { }
  static_assert (sizeof (f<A>()) > 1); // { dg-error "assert" }
  static_assert (sizeof (f<A>()) > 1);
--- 11,16 ----
  
  struct A { auto foo(); };
  static_assert (sizeof (f<A>()) == 1); // { dg-message "first evaluated to 'false' from here" }
! auto A::foo() { }		      // { dg-warning Wsfinae-incomplete }
  static_assert (sizeof (f<A>()) > 1); // { dg-error "assert" }
  static_assert (sizeof (f<A>()) > 1);
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete4.C gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete4.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/cpp2a/concepts-complete4.C	Sun Jun 15 22:32:31 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/cpp2a/concepts-complete4.C	Sun Jun 22 22:32:26 2025
*************** struct A;
*** 8,13 ****
  
  static_assert(!C<A>);
  
! struct A { static constexpr bool value = false; };
  
  static_assert(C<A>); // { dg-error "assert" }
--- 8,13 ----
  
  static_assert(!C<A>);
  
! struct A { static constexpr bool value = false; }; // { dg-warning Wsfinae-incomplete }
  
  static_assert(C<A>); // { dg-error "assert" }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/modules/warn-spec-3_a.C gcc-16-20250622/gcc/testsuite/g++.dg/modules/warn-spec-3_a.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/modules/warn-spec-3_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/modules/warn-spec-3_a.C	Sun Jun 22 22:32:28 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do compile { target c++20 } }
+ // { dg-additional-options -fmodules }
+ // { dg-module-cmi M }
+ 
+ module;
+ 
+ #include <initializer_list>
+ 
+ export module M;
+ 
+ #pragma GCC diagnostic ignored "-Winit-list-lifetime"
+ 
+ template <class T>
+ struct myspan {
+   const T* p; unsigned s;
+   myspan (std::initializer_list<T> il)
+     : p (il.begin()), s (il.size()) { }
+ };
+ 
+ export void f(myspan<int>);
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/modules/warn-spec-3_b.C gcc-16-20250622/gcc/testsuite/g++.dg/modules/warn-spec-3_b.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/modules/warn-spec-3_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/modules/warn-spec-3_b.C	Sun Jun 22 22:32:28 2025
***************
*** 0 ****
--- 1,7 ----
+ // { dg-additional-options "-fmodules -fdump-lang-module" }
+ 
+ // Test that we don't re-export the changes from M.
+ // { dg-final { scan-lang-dump {Diagnostic changes: 0} module } }
+ 
+ export module N;
+ import M;
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/modules/warn-spec-3_c.C gcc-16-20250622/gcc/testsuite/g++.dg/modules/warn-spec-3_c.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/modules/warn-spec-3_c.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.dg/modules/warn-spec-3_c.C	Sun Jun 22 22:32:28 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-additional-options "-fmodules -fdump-lang-module" }
+ 
+ // Test that we clean up the unpopped change in M.
+ // { dg-final { scan-lang-dump {Adding final pop} module } }
+ 
+ import N;
+ import M;
+ 
+ int main()
+ {
+   f({24,42});
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.dg/template/friend87.C gcc-16-20250622/gcc/testsuite/g++.dg/template/friend87.C
*** gcc-16-20250615/gcc/testsuite/g++.dg/template/friend87.C	Sun Jun 15 22:32:37 2025
--- gcc-16-20250622/gcc/testsuite/g++.dg/template/friend87.C	Sun Jun 22 22:32:29 2025
*************** struct CounterWriter {
*** 14,27 ****
  	static constexpr size_t value = current;
  
  	template<typename>
! 	friend auto counterFlag(CounterReader<tag, current>) noexcept {}
  };
  
  template<auto tag, auto unique, size_t current = 0, size_t mask = size_t(1) << (sizeof(size_t) * 8 - 1)>
  [[nodiscard]] constexpr size_t counterAdvance() noexcept {
  	if constexpr (!mask) {
  		return CounterWriter<tag, current + 1>::value;
! 	} else if constexpr (requires { counterFlag<void>(CounterReader<tag, current | mask>()); }) {
  		return counterAdvance<tag, unique, current | mask, (mask >> 1)>();
  	} 
  	else {
--- 14,27 ----
  	static constexpr size_t value = current;
  
  	template<typename>
! 	friend auto counterFlag(CounterReader<tag, current>) noexcept {} // { dg-warning -Wsfinae-incomplete }
  };
  
  template<auto tag, auto unique, size_t current = 0, size_t mask = size_t(1) << (sizeof(size_t) * 8 - 1)>
  [[nodiscard]] constexpr size_t counterAdvance() noexcept {
  	if constexpr (!mask) {
  		return CounterWriter<tag, current + 1>::value;
! 	} else if constexpr (requires { counterFlag<void>(CounterReader<tag, current | mask>()); }) { // { dg-message "here" }
  		return counterAdvance<tag, unique, current | mask, (mask >> 1)>();
  	} 
  	else {
diff -Nrcpad gcc-16-20250615/gcc/testsuite/g++.target/i386/shrink_wrap_separate.C gcc-16-20250622/gcc/testsuite/g++.target/i386/shrink_wrap_separate.C
*** gcc-16-20250615/gcc/testsuite/g++.target/i386/shrink_wrap_separate.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/g++.target/i386/shrink_wrap_separate.C	Sun Jun 22 22:32:30 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } */
+ typedef struct a b;
+ typedef double c;
+ struct a {
+   b *d;
+   b *e;
+ };
+ struct f {
+   c g;
+ };
+ inline bool h(c i, b *m) {
+   b *j = m->e;
+   for (; m->e; j = j->d)
+     if (h(i, j))
+       return 0;
+   return m;
+ }
+ bool k() {
+   f *l;
+   b *n;
+  return h(l->g, n);
+ }
+ /* { dg-final { scan-rtl-dump "The components we wrap separately are \\\[sep 3 4\\\]" "pro_and_epilogue" { target { ia32 } } } } */
+ /* { dg-final { scan-rtl-dump "The components we wrap separately are \\\[sep 40 41 42 43\\\]" "pro_and_epilogue" { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.c-torture/execute/pr120677.c gcc-16-20250622/gcc/testsuite/gcc.c-torture/execute/pr120677.c
*** gcc-16-20250615/gcc/testsuite/gcc.c-torture/execute/pr120677.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.c-torture/execute/pr120677.c	Sun Jun 22 22:32:31 2025
***************
*** 0 ****
--- 1,31 ----
+ /* PR tree-optimization/120677 */
+ /* { dg-do run { target int32plus } } */
+ 
+ unsigned a;
+ int b, e;
+ 
+ int
+ foo (int d)
+ {
+   switch (d)
+     {
+     case 0:
+     case 2:
+       return 0;
+     default:
+       return 1;
+     }
+ }
+ 
+ int
+ main ()
+ {
+   for (b = 8; b; b--)
+     if (a & 1)
+       a = a >> 1 ^ 20000000;
+     else
+       a >>= 1;
+   e = foo (0);
+   if (e || a)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/dfp/bitint-10.c gcc-16-20250622/gcc/testsuite/gcc.dg/dfp/bitint-10.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/dfp/bitint-10.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/dfp/bitint-10.c	Sun Jun 22 22:32:32 2025
***************
*** 0 ****
--- 1,49 ----
+ /* PR middle-end/120631 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 128
+ _Decimal128 a = 123456789135792468012345678900000000000.0dl;
+ _BitInt(128) b = 123456789135792468012345678900000000000wb;
+ _Decimal64 c = 12345678913579000000000000000000000000.0dd;
+ _BitInt(127) d = 12345678913579000000000000000000000000wb;
+ #endif
+ #if __BITINT_MAXWIDTH__ >= 256
+ _Decimal128 m = 1234567891357924680123456789000000000000000000000000000000000000000000000000.0dl;
+ _BitInt(256) n = 1234567891357924680123456789000000000000000000000000000000000000000000000000wb;
+ _Decimal64 o = 1234567891357900000000000000000000000000000000000000000000000000000000000000.0dd;
+ _BitInt(255) p = 1234567891357900000000000000000000000000000000000000000000000000000000000000wb;
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 128
+   if (a != b || (_BitInt(128)) a != b || c != d || (_BitInt(127)) c != d)
+     __builtin_abort ();
+   _Decimal128 e = 123456789135792468012345678900000000000.0dl;
+   _BitInt(128) f = 123456789135792468012345678900000000000wb;
+   _Decimal128 g = 123456789135792468012345678900000000000wb;
+   _BitInt(128) h = 123456789135792468012345678900000000000.0dl;
+   _Decimal64 i = 12345678913579000000000000000000000000.0dd;
+   _BitInt(128) j = 12345678913579000000000000000000000000wb;
+   _Decimal64 k = 12345678913579000000000000000000000000wb;
+   _BitInt(128) l = 12345678913579000000000000000000000000.0dd;
+   if (e != g || f != h || i != k || j != l)
+     __builtin_abort ();
+ #endif
+ #if __BITINT_MAXWIDTH__ >= 256
+   if (m != n || (_BitInt(256)) m != n || o != p || (_BitInt(255)) o != p)
+     __builtin_abort ();
+   _Decimal128 q = 1234567891357924680123456789000000000000000000000000000000000000000000000000.0dl;
+   _BitInt(256) r = 1234567891357924680123456789000000000000000000000000000000000000000000000000wb;
+   _Decimal128 s = 1234567891357924680123456789000000000000000000000000000000000000000000000000wb;
+   _BitInt(256) t = 1234567891357924680123456789000000000000000000000000000000000000000000000000.0dl;
+   _Decimal64 u = 1234567891357900000000000000000000000000000000000000000000000000000000000000.0dd;
+   _BitInt(255) v = 1234567891357900000000000000000000000000000000000000000000000000000000000000wb;
+   _Decimal64 w = 1234567891357900000000000000000000000000000000000000000000000000000000000000wb;
+   _BitInt(255) x = 1234567891357900000000000000000000000000000000000000000000000000000000000000.0dd;
+   if (q != s || r != t || u != w || v != x)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/dfp/bitint-9.c gcc-16-20250622/gcc/testsuite/gcc.dg/dfp/bitint-9.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/dfp/bitint-9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/dfp/bitint-9.c	Sun Jun 22 22:32:32 2025
***************
*** 0 ****
--- 1,29 ----
+ /* PR middle-end/120631 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 2048
+ _Decimal128 a =  .0dl;
+ _BitInt(2048) b =  ;
+ _Decimal64 c = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0dd;
+ _BitInt(1536) d = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000wb;
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 2048
+   if (a != b || (_BitInt(2048)) a != b || c != d || (_BitInt(1536)) c != d)
+     __builtin_abort ();
+   _Decimal128 e =  .0dl;
+   _BitInt(2048) f =  ;
+   _Decimal128 g =  ;
+   _BitInt(2048) h =  .0dl;
+   _Decimal64 i = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0dd;
+   _BitInt(1536) j = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000wb;
+   _Decimal64 k = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000wb;
+   _BitInt(1536) l = 123456789135790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0dd;
+   if (e != g || f != h || i != k || j != l)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/dfp/pr120631.c gcc-16-20250622/gcc/testsuite/gcc.dg/dfp/pr120631.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/dfp/pr120631.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/dfp/pr120631.c	Sun Jun 22 22:32:32 2025
***************
*** 0 ****
--- 1,25 ----
+ /* PR middle-end/120631 */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ _Decimal64 a = 1234567891357900000.0dd;
+ long long b = 1234567891357900000LL;
+ _Decimal32 c = 1234567000000000000.0df;
+ long long d = 1234567000000000000LL;
+ 
+ int
+ main ()
+ {
+   if (a != b || (long long) a != b || c != d || (long long) c != d)
+     __builtin_abort ();
+   _Decimal64 e = 1234567891357900000.0dd;
+   long long f = 1234567891357900000LL;
+   _Decimal64 g = 1234567891357900000LL;
+   long long h = 1234567891357900000.0dd;
+   _Decimal32 i = 1234567000000000000.0df;
+   long long j = 1234567000000000000LL;
+   _Decimal32 k = 1234567000000000000LL;
+   long long l = 1234567000000000000.0df;
+   if (e != g || f != h || i != k || j != l)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/pr119039-1.c gcc-16-20250622/gcc/testsuite/gcc.dg/pr119039-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/pr119039-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/pr119039-1.c	Sun Jun 22 22:32:33 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-evrp" } */
+ 
+ extern void foo (void);
+ extern void bar (void);
+ extern void baz (void);
+ 
+ /* Tests the ability to remove cases that are subranges.  */
+ 
+ void
+ test (int i)
+ {
+   if (i < 0 || i > 45)
+     return;
+   if (i >= 7 && i <= 8)
+     return;
+ 
+   switch (i)
+   {
+     case 1:
+       bar ();
+       break;
+     case 7 ... 8:
+       foo ();
+     case 14:
+       baz ();
+       break;
+     default:
+       break;
+   }
+ }
+ /* { dg-final { scan-tree-dump-not "foo " "evrp" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/pr119039-2.c gcc-16-20250622/gcc/testsuite/gcc.dg/pr119039-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/pr119039-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/pr119039-2.c	Sun Jun 22 22:32:33 2025
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-evrp" } */
+ 
+ extern void good (void);
+ extern void bad (void);
+ 
+ /* Switch simplification should remove 'case 2:' because 'i' will always
+  * have its 0th bit set (odd). */
+ 
+ void bitmask_elimination_1(int i)
+ {
+   i = i | 1;
+ 
+   switch (i)
+     {
+     case 1:
+       good ();
+       break;
+ 
+     // This case should be removed;
+     case 2:
+       bad ();
+       break;
+ 
+     case 3:
+       good ();
+       break;
+ 
+     default:
+       break;
+     }
+ }
+ 
+ /* Switch simplification should remove 'case 20-28:' because 'i' will always
+  * be a multiple of 16.  */
+ void bitmask_elimination_2 (int i)
+ {
+   int masked_val = i & 0xF0; // This zeroes out the lower 4 bits of 'i'
+ 
+   switch (masked_val)
+   {
+     case 0:
+       good (); // Reachable.
+       break;
+ 
+     // This entire cased should be removed;
+     case 20 ... 28:
+       bad ();
+       break;
+ 
+     case 32:
+       good (); // Reachable.
+       break;
+ 
+     default:
+       good ();
+       break;
+   }
+ }
+ /* { dg-final { scan-tree-dump-not "bad" "evrp" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/pr120661-1.c gcc-16-20250622/gcc/testsuite/gcc.dg/pr120661-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/pr120661-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/pr120661-1.c	Sun Jun 22 22:32:33 2025
***************
*** 0 ****
--- 1,51 ----
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23 -Os" } */
+ 
+ typedef __builtin_va_list __gnuc_va_list;
+ typedef __gnuc_va_list va_list;
+ 
+ int e, a, b;
+ int f(int b, ...) {
+   va_list args;
+   __builtin_c23_va_start(args, b);
+   unsigned c = 1;
+   for (int d; d < b; ++d)
+     c = c ^ 1;
+   return c;
+ }
+ static int fn3(int l, int i, int n) {
+   int j;
+   goto k;
+ r:
+   j = (f(e) + 1641730381) * l + 1189664732 * n + 1064 * i - 1545337304;
+   if (903562339 * j + n >= 0)
+     goto m;
+   goto ac;
+ k:
+   if (0)
+     goto ad;
+   goto t;
+ ad:
+   if (b)
+     goto s;
+   goto r;
+ m:
+   goto ad;
+ t:
+   j = l;
+   l = 800794 * j;
+   goto ad;
+ s:
+   b = 2 * b + 1;
+   if (a + (long)j)
+     goto t;
+   i = n;
+   goto s;
+ ac:
+ }
+ int main() {
+   if (a)
+     if (fn3(-1, 1, -1))
+       fn3(1, 0, 3);
+   return 0;
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/pr120661-2.c gcc-16-20250622/gcc/testsuite/gcc.dg/pr120661-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/pr120661-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/pr120661-2.c	Sun Jun 22 22:32:33 2025
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23 -O2" } */
+ 
+ typedef __builtin_va_list __gnuc_va_list;
+ typedef __gnuc_va_list va_list;
+ 
+ int a, c, d;
+ int e(int b, ...) {
+     va_list args;
+     __builtin_c23_va_start(args, b);
+ 
+     int r = 0;
+     for (int i = 0; i < b; i++) {
+         int v = __builtin_va_arg(args, int);
+         r += v;
+     }
+     __builtin_va_end (args);
+     return r;
+ }
+ int f() { e(0); }
+ int main() {
+   int h = 0, g = 0;
+   goto l;
+ i:
+   if (f() * h)
+     goto k;
+ j:
+   h = h - 2;
+ k:
+   d = 1200000000 * h + 10;
+   g = (long)g + -1000000000 * d + 1;
+   if (a * h >= 0) {
+     if (g + (c - (long)1) >= 0)
+       goto i;
+     return 0;
+   }
+ l:
+   goto j;
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/pr120701.c gcc-16-20250622/gcc/testsuite/gcc.dg/pr120701.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/pr120701.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/pr120701.c	Sun Jun 22 22:32:33 2025
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ int a, b, c, e, f;
+ int main() {
+   int d, g, i;
+ j:
+   if (d >= 0)
+     goto k;
+   if (g >= 0)
+     goto l;
+ k:
+   i = a + 3;
+ m:
+   f = 652685095 + 818172564 * g;
+   if (-1101344938 * f - 1654872807 * d >= 0)
+     goto n;
+   goto l;
+ o:
+   if (i) {
+     c = -b;
+     if (-c >= 0)
+       goto l;
+     g = b;
+     b = i + 5;
+     if (b * c)
+       goto n;
+     goto o;
+   }
+   if (e)
+     goto m;
+   goto j;
+ n:
+   d = 978208086 * g - 1963072513;
+   if (d + i)
+     return 0;
+   goto k;
+ l:
+   goto o;
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/torture/pr120654.c gcc-16-20250622/gcc/testsuite/gcc.dg/torture/pr120654.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/torture/pr120654.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/torture/pr120654.c	Sun Jun 22 22:32:34 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ 
+ int a, c, e, f, h, j;
+ long g, k;
+ void *malloc(long);
+ void free(void *);
+ int b(int m) {
+   if (m || a)
+     return 1;
+   return 0.0f;
+ }
+ int d(int m, int p2) { return b(m) + m + (1 + p2 + p2); }
+ int i() {
+   long l[] = {2, 9, 7, 8, g, g, 9, 0, 2, g};
+   e = l[c] << 6;
+ }
+ void n() {
+   long o;
+   int *p = malloc(sizeof(int));
+   k = 1 % j;
+   for (; i() + f + h; o++)
+     if (p[d(j + 6, (int)k + 1992695866) + h + f + j + (int)k - 1 + o])
+       free(p);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c gcc-16-20250622/gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c	Sun Jun 22 22:32:34 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-options "-O2 -fdump-tree-einline-details --param early-inlining-insns=1" } */
+ /* { dg-require-profiling "-fauto-profile" } */ 
+ volatile int a[1000];
+ int reta (int i)
+ {
+ 	if (a[i])
+ 		__builtin_printf ("It is one\n");
+ 	if (a[i] == 2)
+ 		__builtin_printf ("It is two\n");
+ 	return a[i];
+ }
+ int test ()
+ {
+ 	int s = 0;
+ 	for (int pos = 0; pos < 1000; pos++)
+ 	  reta(pos);
+ 	if (s)
+ 		__builtin_printf ("sum error\n");
+ }
+ int main()
+ {
+ 	for (int i = 0; i < 10000; i++)
+ 		test();
+ 	return 0;
+ }
+ /* { dg-final-use-autofdo { scan-tree-dump "Inlining using auto-profile test" "einline"} } */
+ /* { dg-final-use-autofdo { scan-tree-dump "Inlining using auto-profile reta.*transitively inlined to main" "einline"} } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c gcc-16-20250622/gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c	Sun Jun 22 22:32:34 2025
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-options "-O2 -fdump-ipa-afdo-details -fdump-tree-einline-details --param early-inlining-insns=1" } */
+ /* { dg-require-profiling "-fauto-profile" } */ 
+ 
+ volatile int array[1000];
+ int reta (int i)
+ {
+ 	return array[i];
+ }
+ struct wrapptr 
+ {
+ 	int (*ret)(int);
+ };
+ int test (struct wrapptr *p)
+ {
+ 	int s = 0;
+ 	int (*ret)(int) = p->ret;
+ 	for (int pos = 0; pos < 1000; pos++)
+ 	  ret(pos);
+ 	if (s)
+ 		__builtin_printf ("sum error\n");
+ }
+ int main()
+ {
+ 	for (int i = 0; i < 10000; i++)
+ 	{
+ 		struct wrapptr p={reta};
+ 
+ 
+ 
+ 		test(&p);
+ 	}
+ 	return 0;
+ }
+ /* { dg-final-use-autofdo { scan-tree-dump "Inlining using auto-profile test" "einline"} } */
+ /* { dg-final-use-autofdo { scan-tree-dump "Checking indirect call -> direct call ret_" "einline"} } */
+ /* { dg-final-use-autofdo { scan-tree-dump "looks good" "einline"} } */
+ /* If we inlined reta->test->main, it will contian array[pos].  */
+ /* { dg-final-use-autofdo { scan-tree-dump "array.pos_" "einline"} } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c gcc-16-20250622/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c	Sun Jun 15 22:32:47 2025
--- gcc-16-20250622/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c	Sun Jun 22 22:32:34 2025
*************** main (void)
*** 31,35 ****
  }
  /* { dg-final-use-not-autofdo { scan-ipa-dump "Indirect call -> direct call.* add1 .will resolve by ipa-profile" "profile"} } */
  /* { dg-final-use-not-autofdo { scan-ipa-dump "Indirect call -> direct call.* sub1 .will resolve by ipa-profile" "profile"} } */
! /* { dg-final-use-autofdo { scan-ipa-dump "Inlining add1/1 into main/4." "afdo"} } */
! /* { dg-final-use-autofdo { scan-ipa-dump "Inlining sub1/2 into main/4." "afdo"} } */
--- 31,35 ----
  }
  /* { dg-final-use-not-autofdo { scan-ipa-dump "Indirect call -> direct call.* add1 .will resolve by ipa-profile" "profile"} } */
  /* { dg-final-use-not-autofdo { scan-ipa-dump "Indirect call -> direct call.* sub1 .will resolve by ipa-profile" "profile"} } */
! /* { dg-final-use-autofdo { scan-tree-dump "Inlining add1/. into main/" "einline"} } */
! /* { dg-final-use-autofdo { scan-tree-dump "Inlining sub1/. into main/" "einline"} } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c gcc-16-20250622/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
*** gcc-16-20250615/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c	Sun Jun 15 22:32:47 2025
--- gcc-16-20250622/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c	Sun Jun 22 22:32:34 2025
***************
*** 11,18 ****
     to change decisions in switch expansion which in turn can expose new
     jump threading opportunities.  Skip the later tests on aarch64.  */
  /* { dg-final { scan-tree-dump-not "Jumps threaded"  "dom3" { target { ! aarch64*-*-* } } } } */
! /* { dg-final { scan-tree-dump "Jumps threaded: 10"  "thread2" { target { ! aarch64*-*-* } } } } */
! /* { dg-final { scan-tree-dump "Jumps threaded: 17"  "thread2" { target { aarch64*-*-* } } } } */
  
  enum STATE {
    S0=0,
--- 11,18 ----
     to change decisions in switch expansion which in turn can expose new
     jump threading opportunities.  Skip the later tests on aarch64.  */
  /* { dg-final { scan-tree-dump-not "Jumps threaded"  "dom3" { target { ! aarch64*-*-* } } } } */
! /* { dg-final { scan-tree-dump "Jumps threaded: 8"  "thread2" { target { ! aarch64*-*-* } } } } */
! /* { dg-final { scan-tree-dump "Jumps threaded: 8"  "thread2" { target { aarch64*-*-* } } } } */
  
  enum STATE {
    S0=0,
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/bti-1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/bti-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/bti-1.c	Sun Jun 15 22:32:48 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/bti-1.c	Sun Jun 22 22:32:35 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* -Os to create jump table.  */
! /* { dg-options "-Os" } */
  /* { dg-require-effective-target lp64 } */
  /* If configured with --enable-standard-branch-protection, don't use
     command line option.  */
--- 1,6 ----
  /* { dg-do compile } */
  /* -Os to create jump table.  */
! /* { dg-options "-Os -dA" } */
  /* { dg-require-effective-target lp64 } */
  /* If configured with --enable-standard-branch-protection, don't use
     command line option.  */
*************** f_jump_table (int y, int n)
*** 44,51 ****
    return (y == 0)? y+1:4;
  }
  /* f_jump_table should have PACIASP and AUTIASP.  */
! /* { dg-final { scan-assembler-times "hint\t25" 1 } } */
! /* { dg-final { scan-assembler-times "hint\t29" 1 } } */
  
  int
  f_label_address ()
--- 44,51 ----
    return (y == 0)? y+1:4;
  }
  /* f_jump_table should have PACIASP and AUTIASP.  */
! /* { dg-final { scan-assembler-times "hint\t25 // paciasp" 1 } } */
! /* { dg-final { scan-assembler-times "hint\t29 // autiasp" 1 } } */
  
  int
  f_label_address ()
*************** lab2:
*** 59,64 ****
    addr = &&lab1;
    return 2;
  }
! /* { dg-final { scan-assembler-times "hint\t34" 1 } } */
! /* { dg-final { scan-assembler-times "hint\t36" 12 } } */
! /* { dg-final { scan-assembler ".note.gnu.property" { target *-*-linux* } } } */
--- 59,65 ----
    addr = &&lab1;
    return 2;
  }
! /* { dg-final { scan-assembler-times "hint\t34 // bti c" 1 } } */
! /* { dg-final { scan-assembler-times "hint\t36 // bti j" 12 } } */
! /* { dg-final { scan-assembler "\.section\t\.note\.gnu\.property" { target *-*-linux* } } } */
! /* { dg-final { scan-assembler "\.word\t0x7\t\/\/ GNU_PROPERTY_AARCH64_FEATURE_1_AND \\(BTI, PAC, GCS\\)" { target *-*-linux* } } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/aarch64-build-attributes.exp gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/aarch64-build-attributes.exp
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/aarch64-build-attributes.exp	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/aarch64-build-attributes.exp	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,35 ----
+ # Copyright (C) 2024-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/>.
+ 
+ # GCC testsuite that uses the `dg.exp' driver.
+ 
+ # Exit immediately if this isn't an AArch64 target.
+ if ![istarget aarch64*-*-*] then {
+   return
+ }
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
+ 
+ # Initialize `dg'.
+ dg-init
+ 
+ # Main loop.
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
+ 	"" ""
+ 
+ # All done.
+ dg-finish
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-bti.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-bti.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-bti.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-bti.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && { aarch64_gas_has_build_attributes } } } } */
+ /* { dg-options "-mbranch-protection=bti -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler "\.aeabi_subsection aeabi_feature_and_bits, optional, ULEB128" } } */
+ /* { dg-final { scan-assembler "\.aeabi_attribute Tag_Feature_BTI, 1\t\/\/ Tag_Feature_BTI: true" } } */
+ /* { dg-final { scan-assembler-not "\.section\t\.note\.gnu\.property" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-gcs.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-gcs.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-gcs.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-gcs.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && { aarch64_gas_has_build_attributes } } } } */
+ /* { dg-options "-mbranch-protection=gcs -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler "\.aeabi_subsection aeabi_feature_and_bits, optional, ULEB128" } } */
+ /* { dg-final { scan-assembler "\.aeabi_attribute Tag_Feature_GCS, 1\t\/\/ Tag_Feature_GCS: true" } } */
+ /* { dg-final { scan-assembler-not "\.section\t\.note\.gnu\.property" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-pac.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-pac.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-pac.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-pac.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && { aarch64_gas_has_build_attributes } } } } */
+ /* { dg-options "-mbranch-protection=pac-ret -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler "\.aeabi_subsection aeabi_feature_and_bits, optional, ULEB128" } } */
+ /* { dg-final { scan-assembler "\.aeabi_attribute Tag_Feature_PAC, 1\t\/\/ Tag_Feature_PAC: true" } } */
+ /* { dg-final { scan-assembler-not "\.section\t\.note\.gnu\.property" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-standard.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-standard.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-standard.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/build-attribute-standard.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && aarch64_gas_has_build_attributes } } } */
+ /* { dg-options "-mbranch-protection=standard -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler "\.aeabi_subsection aeabi_feature_and_bits, optional, ULEB128" } } */
+ /* { dg-final { scan-assembler "\.aeabi_attribute Tag_Feature_BTI, 1\t\/\/ Tag_Feature_BTI: true" } } */
+ /* { dg-final { scan-assembler "\.aeabi_attribute Tag_Feature_PAC, 1\t\/\/ Tag_Feature_PAC: true" } } */
+ /* { dg-final { scan-assembler "\.aeabi_attribute Tag_Feature_GCS, 1\t\/\/ Tag_Feature_GCS: true" } } */
+ /* { dg-final { scan-assembler-not "\.section\t\.note\.gnu\.property" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-bti.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-bti.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-bti.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-bti.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && { ! aarch64_gas_has_build_attributes } } } } */
+ /* { dg-options "-mbranch-protection=bti -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-not "\.aeabi_subsection" } } */
+ /* { dg-final { scan-assembler-not "\.aeabi_attribute" } } */
+ /* { dg-final { scan-assembler "\.section\t\.note\.gnu\.property" } } */
+ /* { dg-final { scan-assembler "\.word\t0x1\t\/\/ GNU_PROPERTY_AARCH64_FEATURE_1_AND \\(BTI\\)" } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-gcs.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-gcs.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-gcs.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-gcs.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && { ! aarch64_gas_has_build_attributes } } } } */
+ /* { dg-options "-mbranch-protection=gcs -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-not "\.aeabi_subsection" } } */
+ /* { dg-final { scan-assembler-not "\.aeabi_attribute" } } */
+ /* { dg-final { scan-assembler "\.section\t\.note\.gnu\.property" } } */
+ /* { dg-final { scan-assembler "\.word\t0x4\t\/\/ GNU_PROPERTY_AARCH64_FEATURE_1_AND \\(GCS\\)" } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-pac.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-pac.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-pac.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-pac.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && { ! aarch64_gas_has_build_attributes } } } } */
+ /* { dg-options "-mbranch-protection=pac-ret -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-not "\.aeabi_subsection" } } */
+ /* { dg-final { scan-assembler-not "\.aeabi_attribute" } } */
+ /* { dg-final { scan-assembler "\.section\t\.note\.gnu\.property" } } */
+ /* { dg-final { scan-assembler "\.word\t0x2\t\/\/ GNU_PROPERTY_AARCH64_FEATURE_1_AND \\(PAC\\)" } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-standard.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-standard.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-standard.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/build-attributes/no-build-attribute-standard.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile { target { aarch64*-*-linux* && { ! aarch64_gas_has_build_attributes } } } } */
+ /* { dg-options "-mbranch-protection=standard -dA" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-not "\.aeabi_subsection" } } */
+ /* { dg-final { scan-assembler-not "\.aeabi_attribute" } } */
+ /* { dg-final { scan-assembler "\.section\t\.note\.gnu\.property" } } */
+ /* { dg-final { scan-assembler "\.word\t0x7\t\/\/ GNU_PROPERTY_AARCH64_FEATURE_1_AND \\(BTI, PAC, GCS\\)" } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-1.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-options "-O2" } */
+ 
+ #include <arm_neon.h>
+ 
+ float64x2x2_t
+ f1 (float64x2x2_t x)
+ {
+   x.val[0][1] += 1.0;
+   return x;
+ }
+ 
+ float64x2x3_t
+ f2 (float64x2x3_t x)
+ {
+   x.val[0][0] = x.val[1][1] + x.val[2][0];
+   return x;
+ }
+ 
+ float64x2x4_t
+ f3 (float64x2x4_t x)
+ {
+   x.val[0][0] = x.val[1][1] + x.val[2][0] - x.val[3][1];
+   return x;
+ }
+ 
+ /* { dg-final { scan-assembler-not {\tmov\t} } } */
+ /* { dg-final { scan-assembler-not {\[sp,} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-2.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-2.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,268 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target aarch64_little_endian } } } */
+ 
+ #include <arm_neon.h>
+ 
+ #define TEST(TYPE, A, B, C, D)			\
+   TYPE						\
+   test_##TYPE (TYPE a)				\
+   {						\
+     a.val[A][B] = a.val[C][D];			\
+     return a;					\
+   }
+ 
+ /*
+ ** test_bfloat16x4x2_t:
+ **	ins	v1\.h\[3\], v0\.h\[2\]
+ **	ret
+ */
+ TEST (bfloat16x4x2_t, 1, 3, 0, 2)
+ 
+ /*
+ ** test_float16x4x2_t:
+ **	ins	v1\.h\[1\], v0\.h\[3\]
+ **	ret
+ */
+ TEST (float16x4x2_t, 1, 1, 0, 3)
+ 
+ /*
+ ** test_float32x2x2_t:
+ **	ins	v1\.s\[0\], v0\.s\[1\]
+ **	ret
+ */
+ TEST (float32x2x2_t, 1, 0, 0, 1)
+ 
+ /*
+ ** test_float64x1x2_t:
+ **	fmov	d1, d0
+ **	ret
+ */
+ TEST (float64x1x2_t, 1, 0, 0, 0)
+ 
+ /*
+ ** test_int8x8x2_t:
+ **	ins	v0\.b\[5\], v1\.b\[7\]
+ **	ret
+ */
+ TEST (int8x8x2_t, 0, 5, 1, 7)
+ 
+ /*
+ ** test_int16x4x2_t:
+ **	ins	v0\.h\[2\], v1\.h\[2\]
+ **	ret
+ */
+ TEST (int16x4x2_t, 0, 2, 1, 2)
+ 
+ /*
+ ** test_int32x2x2_t:
+ **	ins	v0\.s\[0\], v1\.s\[1\]
+ **	ret
+ */
+ TEST (int32x2x2_t, 0, 0, 1, 1)
+ 
+ /*
+ ** test_int64x1x2_t:
+ **	fmov	d0, d1
+ **	ret
+ */
+ TEST (int64x1x2_t, 0, 0, 1, 0)
+ 
+ /*
+ ** test_uint8x8x2_t:
+ **	ins	v1\.b\[6\], v0\.b\[3\]
+ **	ret
+ */
+ TEST (uint8x8x2_t, 1, 6, 0, 3)
+ 
+ /*
+ ** test_uint16x4x2_t:
+ **	ins	v1\.h\[2\], v1\.h\[0\]
+ **	ret
+ */
+ TEST (uint16x4x2_t, 1, 2, 1, 0)
+ 
+ /*
+ ** test_uint32x2x2_t:
+ **	ins	v1\.s\[0\], v1\.s\[1\]
+ **	ret
+ */
+ TEST (uint32x2x2_t, 1, 0, 1, 1)
+ 
+ /*
+ ** test_uint64x1x2_t:
+ **	fmov	d1, d0
+ **	ret
+ */
+ TEST (uint64x1x2_t, 1, 0, 0, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x4x3_t:
+ **	ins	v2\.h\[3\], v0\.h\[2\]
+ **	ret
+ */
+ TEST (bfloat16x4x3_t, 2, 3, 0, 2)
+ 
+ /*
+ ** test_float16x4x3_t:
+ **	ins	v0\.h\[1\], v1\.h\[3\]
+ **	ret
+ */
+ TEST (float16x4x3_t, 0, 1, 1, 3)
+ 
+ /*
+ ** test_float32x2x3_t:
+ **	ins	v1\.s\[0\], v2\.s\[1\]
+ **	ret
+ */
+ TEST (float32x2x3_t, 1, 0, 2, 1)
+ 
+ /*
+ ** test_float64x1x3_t:
+ **	fmov	d1, d2
+ **	ret
+ */
+ TEST (float64x1x3_t, 1, 0, 2, 0)
+ 
+ /*
+ ** test_int8x8x3_t:
+ **	ins	v0\.b\[5\], v2\.b\[6\]
+ **	ret
+ */
+ TEST (int8x8x3_t, 0, 5, 2, 6)
+ 
+ /*
+ ** test_int16x4x3_t:
+ **	ins	v2\.h\[2\], v1\.h\[1\]
+ **	ret
+ */
+ TEST (int16x4x3_t, 2, 2, 1, 1)
+ 
+ /*
+ ** test_int32x2x3_t:
+ **	ins	v1\.s\[0\], v1\.s\[1\]
+ **	ret
+ */
+ TEST (int32x2x3_t, 1, 0, 1, 1)
+ 
+ /*
+ ** test_int64x1x3_t:
+ **	fmov	d2, d1
+ **	ret
+ */
+ TEST (int64x1x3_t, 2, 0, 1, 0)
+ 
+ /*
+ ** test_uint8x8x3_t:
+ **	ins	v1\.b\[6\], v2\.b\[7\]
+ **	ret
+ */
+ TEST (uint8x8x3_t, 1, 6, 2, 7)
+ 
+ /*
+ ** test_uint16x4x3_t:
+ **	ins	v2\.h\[2\], v1\.h\[3\]
+ **	ret
+ */
+ TEST (uint16x4x3_t, 2, 2, 1, 3)
+ 
+ /*
+ ** test_uint32x2x3_t:
+ **	ins	v2\.s\[0\], v0\.s\[1\]
+ **	ret
+ */
+ TEST (uint32x2x3_t, 2, 0, 0, 1)
+ 
+ /*
+ ** test_uint64x1x3_t:
+ **	fmov	d1, d2
+ **	ret
+ */
+ TEST (uint64x1x3_t, 1, 0, 2, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x4x4_t:
+ **	ins	v2\.h\[3\], v3\.h\[2\]
+ **	ret
+ */
+ TEST (bfloat16x4x4_t, 2, 3, 3, 2)
+ 
+ /*
+ ** test_float16x4x4_t:
+ **	ins	v0\.h\[2\], v3\.h\[1\]
+ **	ret
+ */
+ TEST (float16x4x4_t, 0, 2, 3, 1)
+ 
+ /*
+ ** test_float32x2x4_t:
+ **	ins	v3\.s\[0\], v2\.s\[1\]
+ **	ret
+ */
+ TEST (float32x2x4_t, 3, 0, 2, 1)
+ 
+ /*
+ ** test_float64x1x4_t:
+ **	fmov	d1, d3
+ **	ret
+ */
+ TEST (float64x1x4_t, 1, 0, 3, 0)
+ 
+ /*
+ ** test_int8x8x4_t:
+ **	ins	v0\.b\[4\], v3\.b\[7\]
+ **	ret
+ */
+ TEST (int8x8x4_t, 0, 4, 3, 7)
+ 
+ /*
+ ** test_int16x4x4_t:
+ **	ins	v3\.h\[3\], v1\.h\[1\]
+ **	ret
+ */
+ TEST (int16x4x4_t, 3, 3, 1, 1)
+ 
+ /*
+ ** test_int32x2x4_t:
+ **	ins	v1\.s\[0\], v3\.s\[1\]
+ **	ret
+ */
+ TEST (int32x2x4_t, 1, 0, 3, 1)
+ 
+ /*
+ ** test_int64x1x4_t:
+ **	fmov	d3, d1
+ **	ret
+ */
+ TEST (int64x1x4_t, 3, 0, 1, 0)
+ 
+ /*
+ ** test_uint8x8x4_t:
+ **	ins	v3\.b\[6\], v2\.b\[4\]
+ **	ret
+ */
+ TEST (uint8x8x4_t, 3, 6, 2, 4)
+ 
+ /*
+ ** test_uint16x4x4_t:
+ **	ins	v3\.h\[1\], v1\.h\[3\]
+ **	ret
+ */
+ TEST (uint16x4x4_t, 3, 1, 1, 3)
+ 
+ /*
+ ** test_uint32x2x4_t:
+ **	ins	v0\.s\[0\], v3\.s\[1\]
+ **	ret
+ */
+ TEST (uint32x2x4_t, 0, 0, 3, 1)
+ 
+ /*
+ ** test_uint64x1x4_t:
+ **	fmov	d1, d3
+ **	ret
+ */
+ TEST (uint64x1x4_t, 1, 0, 3, 0)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-3.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-3.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-3.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,268 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target aarch64_little_endian } } } */
+ 
+ #include <arm_neon.h>
+ 
+ #define TEST(TYPE, A, B, C, D)			\
+   TYPE						\
+   test_##TYPE (TYPE a)				\
+   {						\
+     a.val[A][B] = a.val[C][D];			\
+     return a;					\
+   }
+ 
+ /*
+ ** test_bfloat16x8x2_t:
+ **	ins	v1\.h\[6\], v0\.h\[5\]
+ **	ret
+ */
+ TEST (bfloat16x8x2_t, 1, 6, 0, 5)
+ 
+ /*
+ ** test_float16x8x2_t:
+ **	ins	v1\.h\[2\], v0\.h\[7\]
+ **	ret
+ */
+ TEST (float16x8x2_t, 1, 2, 0, 7)
+ 
+ /*
+ ** test_float32x4x2_t:
+ **	ins	v1\.s\[3\], v0\.s\[1\]
+ **	ret
+ */
+ TEST (float32x4x2_t, 1, 3, 0, 1)
+ 
+ /*
+ ** test_float64x2x2_t:
+ **	ins	v1\.d\[0\], v0\.d\[0\]
+ **	ret
+ */
+ TEST (float64x2x2_t, 1, 0, 0, 0)
+ 
+ /*
+ ** test_int8x16x2_t:
+ **	ins	v0\.b\[15\], v1\.b\[13\]
+ **	ret
+ */
+ TEST (int8x16x2_t, 0, 15, 1, 13)
+ 
+ /*
+ ** test_int16x8x2_t:
+ **	ins	v0\.h\[2\], v1\.h\[7\]
+ **	ret
+ */
+ TEST (int16x8x2_t, 0, 2, 1, 7)
+ 
+ /*
+ ** test_int32x4x2_t:
+ **	ins	v0\.s\[3\], v1\.s\[1\]
+ **	ret
+ */
+ TEST (int32x4x2_t, 0, 3, 1, 1)
+ 
+ /*
+ ** test_int64x2x2_t:
+ **	ins	v0\.d\[0\], v1\.d\[1\]
+ **	ret
+ */
+ TEST (int64x2x2_t, 0, 0, 1, 1)
+ 
+ /*
+ ** test_uint8x16x2_t:
+ **	ins	v1\.b\[13\], v0\.b\[11\]
+ **	ret
+ */
+ TEST (uint8x16x2_t, 1, 13, 0, 11)
+ 
+ /*
+ ** test_uint16x8x2_t:
+ **	ins	v1\.h\[6\], v1\.h\[3\]
+ **	ret
+ */
+ TEST (uint16x8x2_t, 1, 6, 1, 3)
+ 
+ /*
+ ** test_uint32x4x2_t:
+ **	ins	v1\.s\[3\], v1\.s\[1\]
+ **	ret
+ */
+ TEST (uint32x4x2_t, 1, 3, 1, 1)
+ 
+ /*
+ ** test_uint64x2x2_t:
+ **	ins	v1\.d\[0\], v1\.d\[1\]
+ **	ret
+ */
+ TEST (uint64x2x2_t, 1, 0, 1, 1)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x8x3_t:
+ **	ins	v2\.h\[3\], v0\.h\[7\]
+ **	ret
+ */
+ TEST (bfloat16x8x3_t, 2, 3, 0, 7)
+ 
+ /*
+ ** test_float16x8x3_t:
+ **	ins	v0\.h\[4\], v1\.h\[6\]
+ **	ret
+ */
+ TEST (float16x8x3_t, 0, 4, 1, 6)
+ 
+ /*
+ ** test_float32x4x3_t:
+ **	ins	v1\.s\[2\], v2\.s\[1\]
+ **	ret
+ */
+ TEST (float32x4x3_t, 1, 2, 2, 1)
+ 
+ /*
+ ** test_float64x2x3_t:
+ **	ins	v1\.d\[0\], v2\.d\[1\]
+ **	ret
+ */
+ TEST (float64x2x3_t, 1, 0, 2, 1)
+ 
+ /*
+ ** test_int8x16x3_t:
+ **	ins	v0\.b\[9\], v2\.b\[14\]
+ **	ret
+ */
+ TEST (int8x16x3_t, 0, 9, 2, 14)
+ 
+ /*
+ ** test_int16x8x3_t:
+ **	ins	v2\.h\[6\], v1\.h\[3\]
+ **	ret
+ */
+ TEST (int16x8x3_t, 2, 6, 1, 3)
+ 
+ /*
+ ** test_int32x4x3_t:
+ **	ins	v1\.s\[3\], v1\.s\[1\]
+ **	ret
+ */
+ TEST (int32x4x3_t, 1, 3, 1, 1)
+ 
+ /*
+ ** test_int64x2x3_t:
+ **	ins	v2\.d\[1\], v1\.d\[0\]
+ **	ret
+ */
+ TEST (int64x2x3_t, 2, 1, 1, 0)
+ 
+ /*
+ ** test_uint8x16x3_t:
+ **	ins	v1\.b\[10\], v2\.b\[8\]
+ **	ret
+ */
+ TEST (uint8x16x3_t, 1, 10, 2, 8)
+ 
+ /*
+ ** test_uint16x8x3_t:
+ **	ins	v2\.h\[5\], v1\.h\[2\]
+ **	ret
+ */
+ TEST (uint16x8x3_t, 2, 5, 1, 2)
+ 
+ /*
+ ** test_uint32x4x3_t:
+ **	ins	v2\.s\[3\], v0\.s\[1\]
+ **	ret
+ */
+ TEST (uint32x4x3_t, 2, 3, 0, 1)
+ 
+ /*
+ ** test_uint64x2x3_t:
+ **	ins	v1\.d\[0\], v2\.d\[1\]
+ **	ret
+ */
+ TEST (uint64x2x3_t, 1, 0, 2, 1)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x8x4_t:
+ **	ins	v2\.h\[5\], v3\.h\[6\]
+ **	ret
+ */
+ TEST (bfloat16x8x4_t, 2, 5, 3, 6)
+ 
+ /*
+ ** test_float16x8x4_t:
+ **	ins	v0\.h\[3\], v3\.h\[5\]
+ **	ret
+ */
+ TEST (float16x8x4_t, 0, 3, 3, 5)
+ 
+ /*
+ ** test_float32x4x4_t:
+ **	ins	v3\.s\[2\], v2\.s\[1\]
+ **	ret
+ */
+ TEST (float32x4x4_t, 3, 2, 2, 1)
+ 
+ /*
+ ** test_float64x2x4_t:
+ **	ins	v1\.d\[1\], v3\.d\[0\]
+ **	ret
+ */
+ TEST (float64x2x4_t, 1, 1, 3, 0)
+ 
+ /*
+ ** test_int8x16x4_t:
+ **	ins	v0\.b\[14\], v3\.b\[10\]
+ **	ret
+ */
+ TEST (int8x16x4_t, 0, 14, 3, 10)
+ 
+ /*
+ ** test_int16x8x4_t:
+ **	ins	v3\.h\[4\], v1\.h\[6\]
+ **	ret
+ */
+ TEST (int16x8x4_t, 3, 4, 1, 6)
+ 
+ /*
+ ** test_int32x4x4_t:
+ **	ins	v1\.s\[3\], v3\.s\[1\]
+ **	ret
+ */
+ TEST (int32x4x4_t, 1, 3, 3, 1)
+ 
+ /*
+ ** test_int64x2x4_t:
+ **	ins	v3\.d\[0\], v2\.d\[0\]
+ **	ret
+ */
+ TEST (int64x2x4_t, 3, 0, 2, 0)
+ 
+ /*
+ ** test_uint8x16x4_t:
+ **	ins	v3\.b\[13\], v2\.b\[6\]
+ **	ret
+ */
+ TEST (uint8x16x4_t, 3, 13, 2, 6)
+ 
+ /*
+ ** test_uint16x8x4_t:
+ **	ins	v3\.h\[2\], v1\.h\[7\]
+ **	ret
+ */
+ TEST (uint16x8x4_t, 3, 2, 1, 7)
+ 
+ /*
+ ** test_uint32x4x4_t:
+ **	ins	v0\.s\[3\], v3\.s\[2\]
+ **	ret
+ */
+ TEST (uint32x4x4_t, 0, 3, 3, 2)
+ 
+ /*
+ ** test_uint64x2x4_t:
+ **	ins	v1\.d\[0\], v3\.d\[1\]
+ **	ret
+ */
+ TEST (uint64x2x4_t, 1, 0, 3, 1)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-4.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-4.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-4.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,268 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target aarch64_little_endian } } } */
+ 
+ #include <arm_neon.h>
+ 
+ #define TEST(TYPE, A, B)		\
+   TYPE					\
+   test_##TYPE (TYPE a, TYPE *ptr)	\
+   {					\
+     a.val[A][B] = ptr->val[0][0];	\
+     return a;				\
+   }
+ 
+ /*
+ ** test_bfloat16x4x2_t:
+ **	ld1	\{v1\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x4x2_t, 1, 3)
+ 
+ /*
+ ** test_float16x4x2_t:
+ **	ld1	\{v1\.h\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (float16x4x2_t, 1, 1)
+ 
+ /*
+ ** test_float32x2x2_t:
+ **	ld1	\{v1\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (float32x2x2_t, 1, 0)
+ 
+ /*
+ ** test_float64x1x2_t:
+ **	ldr	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x1x2_t, 1, 0)
+ 
+ /*
+ ** test_int8x8x2_t:
+ **	ld1	\{v0\.b\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (int8x8x2_t, 0, 5)
+ 
+ /*
+ ** test_int16x4x2_t:
+ **	ld1	\{v0\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (int16x4x2_t, 0, 2)
+ 
+ /*
+ ** test_int32x2x2_t:
+ **	ld1	\{v0\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (int32x2x2_t, 0, 0)
+ 
+ /*
+ ** test_int64x1x2_t:
+ **	ldr	d0, \[x0\]
+ **	ret
+ */
+ TEST (int64x1x2_t, 0, 0)
+ 
+ /*
+ ** test_uint8x8x2_t:
+ **	ld1	\{v1\.b\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x8x2_t, 1, 6)
+ 
+ /*
+ ** test_uint16x4x2_t:
+ **	ld1	\{v1\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x4x2_t, 1, 2)
+ 
+ /*
+ ** test_uint32x2x2_t:
+ **	ld1	\{v1\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x2x2_t, 1, 0)
+ 
+ /*
+ ** test_uint64x1x2_t:
+ **	ldr	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x1x2_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x4x3_t:
+ **	ld1	\{v2\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x4x3_t, 2, 3)
+ 
+ /*
+ ** test_float16x4x3_t:
+ **	ld1	\{v0\.h\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (float16x4x3_t, 0, 1)
+ 
+ /*
+ ** test_float32x2x3_t:
+ **	ld1	\{v1\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (float32x2x3_t, 1, 0)
+ 
+ /*
+ ** test_float64x1x3_t:
+ **	ldr	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x1x3_t, 1, 0)
+ 
+ /*
+ ** test_int8x8x3_t:
+ **	ld1	\{v0\.b\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (int8x8x3_t, 0, 5)
+ 
+ /*
+ ** test_int16x4x3_t:
+ **	ld1	\{v2\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (int16x4x3_t, 2, 2)
+ 
+ /*
+ ** test_int32x2x3_t:
+ **	ld1	\{v1\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (int32x2x3_t, 1, 0)
+ 
+ /*
+ ** test_int64x1x3_t:
+ **	ldr	d2, \[x0\]
+ **	ret
+ */
+ TEST (int64x1x3_t, 2, 0)
+ 
+ /*
+ ** test_uint8x8x3_t:
+ **	ld1	\{v1\.b\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x8x3_t, 1, 6)
+ 
+ /*
+ ** test_uint16x4x3_t:
+ **	ld1	\{v2\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x4x3_t, 2, 2)
+ 
+ /*
+ ** test_uint32x2x3_t:
+ **	ld1	\{v2\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x2x3_t, 2, 0)
+ 
+ /*
+ ** test_uint64x1x3_t:
+ **	ldr	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x1x3_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x4x4_t:
+ **	ld1	\{v2\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x4x4_t, 2, 3)
+ 
+ /*
+ ** test_float16x4x4_t:
+ **	ld1	\{v0\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float16x4x4_t, 0, 2)
+ 
+ /*
+ ** test_float32x2x4_t:
+ **	ld1	\{v3\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (float32x2x4_t, 3, 0)
+ 
+ /*
+ ** test_float64x1x4_t:
+ **	ldr	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x1x4_t, 1, 0)
+ 
+ /*
+ ** test_int8x8x4_t:
+ **	ld1	\{v0\.b\}\[4\], \[x0\]
+ **	ret
+ */
+ TEST (int8x8x4_t, 0, 4)
+ 
+ /*
+ ** test_int16x4x4_t:
+ **	ld1	\{v3\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int16x4x4_t, 3, 3)
+ 
+ /*
+ ** test_int32x2x4_t:
+ **	ld1	\{v1\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (int32x2x4_t, 1, 0)
+ 
+ /*
+ ** test_int64x1x4_t:
+ **	ldr	d3, \[x0\]
+ **	ret
+ */
+ TEST (int64x1x4_t, 3, 0)
+ 
+ /*
+ ** test_uint8x8x4_t:
+ **	ld1	\{v3\.b\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x8x4_t, 3, 6)
+ 
+ /*
+ ** test_uint16x4x4_t:
+ **	ld1	\{v3\.h\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x4x4_t, 3, 1)
+ 
+ /*
+ ** test_uint32x2x4_t:
+ **	ld1	\{v0\.s\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x2x4_t, 0, 0)
+ 
+ /*
+ ** test_uint64x1x4_t:
+ **	ldr	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x1x4_t, 1, 0)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-5.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-5.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-5.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,268 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target aarch64_little_endian } } } */
+ 
+ #include <arm_neon.h>
+ 
+ #define TEST(TYPE, A, B)			\
+   TYPE						\
+   test_##TYPE (TYPE a, TYPE *ptr)		\
+   {						\
+     a.val[A][B] = ptr->val[0][0];		\
+     return a;					\
+   }
+ 
+ /*
+ ** test_bfloat16x8x2_t:
+ **	ld1	\{v1\.h\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x8x2_t, 1, 6)
+ 
+ /*
+ ** test_float16x8x2_t:
+ **	ld1	\{v1\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float16x8x2_t, 1, 2)
+ 
+ /*
+ ** test_float32x4x2_t:
+ **	ld1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (float32x4x2_t, 1, 3)
+ 
+ /*
+ ** test_float64x2x2_t:
+ **	ld1	\{v1\.d\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (float64x2x2_t, 1, 0)
+ 
+ /*
+ ** test_int8x16x2_t:
+ **	ld1	\{v0\.b\}\[15\], \[x0\]
+ **	ret
+ */
+ TEST (int8x16x2_t, 0, 15)
+ 
+ /*
+ ** test_int16x8x2_t:
+ **	ld1	\{v0\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (int16x8x2_t, 0, 2)
+ 
+ /*
+ ** test_int32x4x2_t:
+ **	ld1	\{v0\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int32x4x2_t, 0, 3)
+ 
+ /*
+ ** test_int64x2x2_t:
+ **	ld1	\{v0\.d\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (int64x2x2_t, 0, 0)
+ 
+ /*
+ ** test_uint8x16x2_t:
+ **	ld1	\{v1\.b\}\[13\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x16x2_t, 1, 13)
+ 
+ /*
+ ** test_uint16x8x2_t:
+ **	ld1	\{v1\.h\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x8x2_t, 1, 6)
+ 
+ /*
+ ** test_uint32x4x2_t:
+ **	ld1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x4x2_t, 1, 3)
+ 
+ /*
+ ** test_uint64x2x2_t:
+ **	ld1	\{v1\.d\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (uint64x2x2_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x8x3_t:
+ **	ld1	\{v2\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x8x3_t, 2, 3)
+ 
+ /*
+ ** test_float16x8x3_t:
+ **	ld1	\{v0\.h\}\[4\], \[x0\]
+ **	ret
+ */
+ TEST (float16x8x3_t, 0, 4)
+ 
+ /*
+ ** test_float32x4x3_t:
+ **	ld1	\{v1\.s\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float32x4x3_t, 1, 2)
+ 
+ /*
+ ** test_float64x2x3_t:
+ **	ld1	\{v1\.d\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (float64x2x3_t, 1, 0)
+ 
+ /*
+ ** test_int8x16x3_t:
+ **	ld1	\{v0\.b\}\[9\], \[x0\]
+ **	ret
+ */
+ TEST (int8x16x3_t, 0, 9)
+ 
+ /*
+ ** test_int16x8x3_t:
+ **	ld1	\{v2\.h\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (int16x8x3_t, 2, 6)
+ 
+ /*
+ ** test_int32x4x3_t:
+ **	ld1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int32x4x3_t, 1, 3)
+ 
+ /*
+ ** test_int64x2x3_t:
+ **	ld1	\{v2\.d\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (int64x2x3_t, 2, 1)
+ 
+ /*
+ ** test_uint8x16x3_t:
+ **	ld1	\{v1\.b\}\[10\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x16x3_t, 1, 10)
+ 
+ /*
+ ** test_uint16x8x3_t:
+ **	ld1	\{v2\.h\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x8x3_t, 2, 5)
+ 
+ /*
+ ** test_uint32x4x3_t:
+ **	ld1	\{v2\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x4x3_t, 2, 3)
+ 
+ /*
+ ** test_uint64x2x3_t:
+ **	ld1	\{v1\.d\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (uint64x2x3_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x8x4_t:
+ **	ld1	\{v2\.h\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x8x4_t, 2, 5)
+ 
+ /*
+ ** test_float16x8x4_t:
+ **	ld1	\{v0\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (float16x8x4_t, 0, 3)
+ 
+ /*
+ ** test_float32x4x4_t:
+ **	ld1	\{v3\.s\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float32x4x4_t, 3, 2)
+ 
+ /*
+ ** test_float64x2x4_t:
+ **	ld1	\{v1\.d\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (float64x2x4_t, 1, 1)
+ 
+ /*
+ ** test_int8x16x4_t:
+ **	ld1	\{v0\.b\}\[14\], \[x0\]
+ **	ret
+ */
+ TEST (int8x16x4_t, 0, 14)
+ 
+ /*
+ ** test_int16x8x4_t:
+ **	ld1	\{v3\.h\}\[4\], \[x0\]
+ **	ret
+ */
+ TEST (int16x8x4_t, 3, 4)
+ 
+ /*
+ ** test_int32x4x4_t:
+ **	ld1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int32x4x4_t, 1, 3)
+ 
+ /*
+ ** test_int64x2x4_t:
+ **	ld1	\{v3\.d\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (int64x2x4_t, 3, 0)
+ 
+ /*
+ ** test_uint8x16x4_t:
+ **	ld1	\{v3\.b\}\[13\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x16x4_t, 3, 13)
+ 
+ /*
+ ** test_uint16x8x4_t:
+ **	ld1	\{v3\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x8x4_t, 3, 2)
+ 
+ /*
+ ** test_uint32x4x4_t:
+ **	ld1	\{v0\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x4x4_t, 0, 3)
+ 
+ /*
+ ** test_uint64x2x4_t:
+ **	ld1	\{v1\.d\}\[0\], \[x0\]
+ **	ret
+ */
+ TEST (uint64x2x4_t, 1, 0)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-6.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-6.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-6.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,267 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target aarch64_little_endian } } } */
+ 
+ #include <arm_neon.h>
+ 
+ #define TEST(TYPE, A, B)		\
+   void					\
+   test_##TYPE (TYPE a, TYPE *ptr)	\
+   {					\
+     ptr->val[0][0] = a.val[A][B];	\
+   }
+ 
+ /*
+ ** test_bfloat16x4x2_t:
+ **	st1	\{v1\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x4x2_t, 1, 3)
+ 
+ /*
+ ** test_float16x4x2_t:
+ **	st1	\{v1\.h\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (float16x4x2_t, 1, 1)
+ 
+ /*
+ ** test_float32x2x2_t:
+ **	str	s1, \[x0\]
+ **	ret
+ */
+ TEST (float32x2x2_t, 1, 0)
+ 
+ /*
+ ** test_float64x1x2_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x1x2_t, 1, 0)
+ 
+ /*
+ ** test_int8x8x2_t:
+ **	st1	\{v0\.b\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (int8x8x2_t, 0, 5)
+ 
+ /*
+ ** test_int16x4x2_t:
+ **	st1	\{v0\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (int16x4x2_t, 0, 2)
+ 
+ /*
+ ** test_int32x2x2_t:
+ **	str	s0, \[x0\]
+ **	ret
+ */
+ TEST (int32x2x2_t, 0, 0)
+ 
+ /*
+ ** test_int64x1x2_t:
+ **	str	d0, \[x0\]
+ **	ret
+ */
+ TEST (int64x1x2_t, 0, 0)
+ 
+ /*
+ ** test_uint8x8x2_t:
+ **	st1	\{v1\.b\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x8x2_t, 1, 6)
+ 
+ /*
+ ** test_uint16x4x2_t:
+ **	st1	\{v1\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x4x2_t, 1, 2)
+ 
+ /*
+ ** test_uint32x2x2_t:
+ **	str	s1, \[x0\]
+ **	ret
+ */
+ TEST (uint32x2x2_t, 1, 0)
+ 
+ /*
+ ** test_uint64x1x2_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x1x2_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x4x3_t:
+ **	st1	\{v2\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x4x3_t, 2, 3)
+ 
+ /*
+ ** test_float16x4x3_t:
+ **	st1	\{v0\.h\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (float16x4x3_t, 0, 1)
+ 
+ /*
+ ** test_float32x2x3_t:
+ **	str	s1, \[x0\]
+ **	ret
+ */
+ TEST (float32x2x3_t, 1, 0)
+ 
+ /*
+ ** test_float64x1x3_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x1x3_t, 1, 0)
+ 
+ /*
+ ** test_int8x8x3_t:
+ **	st1	\{v0\.b\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (int8x8x3_t, 0, 5)
+ 
+ /*
+ ** test_int16x4x3_t:
+ **	st1	\{v2\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (int16x4x3_t, 2, 2)
+ 
+ /*
+ ** test_int32x2x3_t:
+ **	str	s1, \[x0\]
+ **	ret
+ */
+ TEST (int32x2x3_t, 1, 0)
+ 
+ /*
+ ** test_int64x1x3_t:
+ **	str	d2, \[x0\]
+ **	ret
+ */
+ TEST (int64x1x3_t, 2, 0)
+ 
+ /*
+ ** test_uint8x8x3_t:
+ **	st1	\{v1\.b\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x8x3_t, 1, 6)
+ 
+ /*
+ ** test_uint16x4x3_t:
+ **	st1	\{v2\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x4x3_t, 2, 2)
+ 
+ /*
+ ** test_uint32x2x3_t:
+ **	str	s2, \[x0\]
+ **	ret
+ */
+ TEST (uint32x2x3_t, 2, 0)
+ 
+ /*
+ ** test_uint64x1x3_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x1x3_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x4x4_t:
+ **	st1	\{v2\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x4x4_t, 2, 3)
+ 
+ /*
+ ** test_float16x4x4_t:
+ **	st1	\{v0\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float16x4x4_t, 0, 2)
+ 
+ /*
+ ** test_float32x2x4_t:
+ **	str	s3, \[x0\]
+ **	ret
+ */
+ TEST (float32x2x4_t, 3, 0)
+ 
+ /*
+ ** test_float64x1x4_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x1x4_t, 1, 0)
+ 
+ /*
+ ** test_int8x8x4_t:
+ **	st1	\{v0\.b\}\[4\], \[x0\]
+ **	ret
+ */
+ TEST (int8x8x4_t, 0, 4)
+ 
+ /*
+ ** test_int16x4x4_t:
+ **	st1	\{v3\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int16x4x4_t, 3, 3)
+ 
+ /*
+ ** test_int32x2x4_t:
+ **	str	s1, \[x0\]
+ **	ret
+ */
+ TEST (int32x2x4_t, 1, 0)
+ 
+ /*
+ ** test_int64x1x4_t:
+ **	str	d3, \[x0\]
+ **	ret
+ */
+ TEST (int64x1x4_t, 3, 0)
+ 
+ /*
+ ** test_uint8x8x4_t:
+ **	st1	\{v3\.b\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x8x4_t, 3, 6)
+ 
+ /*
+ ** test_uint16x4x4_t:
+ **	st1	\{v3\.h\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x4x4_t, 3, 1)
+ 
+ /*
+ ** test_uint32x2x4_t:
+ **	str	s0, \[x0\]
+ **	ret
+ */
+ TEST (uint32x2x4_t, 0, 0)
+ 
+ /*
+ ** test_uint64x1x4_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x1x4_t, 1, 0)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-7.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-7.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/pr113027-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/pr113027-7.c	Sun Jun 22 22:32:35 2025
***************
*** 0 ****
--- 1,267 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target aarch64_little_endian } } } */
+ 
+ #include <arm_neon.h>
+ 
+ #define TEST(TYPE, A, B)			\
+   void						\
+   test_##TYPE (TYPE a, TYPE *ptr)		\
+   {						\
+     ptr->val[0][0] = a.val[A][B];		\
+   }
+ 
+ /*
+ ** test_bfloat16x8x2_t:
+ **	st1	\{v1\.h\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x8x2_t, 1, 6)
+ 
+ /*
+ ** test_float16x8x2_t:
+ **	st1	\{v1\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float16x8x2_t, 1, 2)
+ 
+ /*
+ ** test_float32x4x2_t:
+ **	st1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (float32x4x2_t, 1, 3)
+ 
+ /*
+ ** test_float64x2x2_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x2x2_t, 1, 0)
+ 
+ /*
+ ** test_int8x16x2_t:
+ **	st1	\{v0\.b\}\[15\], \[x0\]
+ **	ret
+ */
+ TEST (int8x16x2_t, 0, 15)
+ 
+ /*
+ ** test_int16x8x2_t:
+ **	st1	\{v0\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (int16x8x2_t, 0, 2)
+ 
+ /*
+ ** test_int32x4x2_t:
+ **	st1	\{v0\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int32x4x2_t, 0, 3)
+ 
+ /*
+ ** test_int64x2x2_t:
+ **	str	d0, \[x0\]
+ **	ret
+ */
+ TEST (int64x2x2_t, 0, 0)
+ 
+ /*
+ ** test_uint8x16x2_t:
+ **	st1	\{v1\.b\}\[13\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x16x2_t, 1, 13)
+ 
+ /*
+ ** test_uint16x8x2_t:
+ **	st1	\{v1\.h\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x8x2_t, 1, 6)
+ 
+ /*
+ ** test_uint32x4x2_t:
+ **	st1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x4x2_t, 1, 3)
+ 
+ /*
+ ** test_uint64x2x2_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x2x2_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x8x3_t:
+ **	st1	\{v2\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x8x3_t, 2, 3)
+ 
+ /*
+ ** test_float16x8x3_t:
+ **	st1	\{v0\.h\}\[4\], \[x0\]
+ **	ret
+ */
+ TEST (float16x8x3_t, 0, 4)
+ 
+ /*
+ ** test_float32x4x3_t:
+ **	st1	\{v1\.s\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float32x4x3_t, 1, 2)
+ 
+ /*
+ ** test_float64x2x3_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (float64x2x3_t, 1, 0)
+ 
+ /*
+ ** test_int8x16x3_t:
+ **	st1	\{v0\.b\}\[9\], \[x0\]
+ **	ret
+ */
+ TEST (int8x16x3_t, 0, 9)
+ 
+ /*
+ ** test_int16x8x3_t:
+ **	st1	\{v2\.h\}\[6\], \[x0\]
+ **	ret
+ */
+ TEST (int16x8x3_t, 2, 6)
+ 
+ /*
+ ** test_int32x4x3_t:
+ **	st1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int32x4x3_t, 1, 3)
+ 
+ /*
+ ** test_int64x2x3_t:
+ **	st1	\{v2\.d\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (int64x2x3_t, 2, 1)
+ 
+ /*
+ ** test_uint8x16x3_t:
+ **	st1	\{v1\.b\}\[10\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x16x3_t, 1, 10)
+ 
+ /*
+ ** test_uint16x8x3_t:
+ **	st1	\{v2\.h\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x8x3_t, 2, 5)
+ 
+ /*
+ ** test_uint32x4x3_t:
+ **	st1	\{v2\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x4x3_t, 2, 3)
+ 
+ /*
+ ** test_uint64x2x3_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x2x3_t, 1, 0)
+ 
+ //--------------------------------------------------------------
+ 
+ /*
+ ** test_bfloat16x8x4_t:
+ **	st1	\{v2\.h\}\[5\], \[x0\]
+ **	ret
+ */
+ TEST (bfloat16x8x4_t, 2, 5)
+ 
+ /*
+ ** test_float16x8x4_t:
+ **	st1	\{v0\.h\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (float16x8x4_t, 0, 3)
+ 
+ /*
+ ** test_float32x4x4_t:
+ **	st1	\{v3\.s\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (float32x4x4_t, 3, 2)
+ 
+ /*
+ ** test_float64x2x4_t:
+ **	st1	\{v1\.d\}\[1\], \[x0\]
+ **	ret
+ */
+ TEST (float64x2x4_t, 1, 1)
+ 
+ /*
+ ** test_int8x16x4_t:
+ **	st1	\{v0\.b\}\[14\], \[x0\]
+ **	ret
+ */
+ TEST (int8x16x4_t, 0, 14)
+ 
+ /*
+ ** test_int16x8x4_t:
+ **	st1	\{v3\.h\}\[4\], \[x0\]
+ **	ret
+ */
+ TEST (int16x8x4_t, 3, 4)
+ 
+ /*
+ ** test_int32x4x4_t:
+ **	st1	\{v1\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (int32x4x4_t, 1, 3)
+ 
+ /*
+ ** test_int64x2x4_t:
+ **	str	d3, \[x0\]
+ **	ret
+ */
+ TEST (int64x2x4_t, 3, 0)
+ 
+ /*
+ ** test_uint8x16x4_t:
+ **	st1	\{v3\.b\}\[13\], \[x0\]
+ **	ret
+ */
+ TEST (uint8x16x4_t, 3, 13)
+ 
+ /*
+ ** test_uint16x8x4_t:
+ **	st1	\{v3\.h\}\[2\], \[x0\]
+ **	ret
+ */
+ TEST (uint16x8x4_t, 3, 2)
+ 
+ /*
+ ** test_uint32x4x4_t:
+ **	st1	\{v0\.s\}\[3\], \[x0\]
+ **	ret
+ */
+ TEST (uint32x4x4_t, 0, 3)
+ 
+ /*
+ ** test_uint64x2x4_t:
+ **	str	d1, \[x0\]
+ **	ret
+ */
+ TEST (uint64x2x4_t, 1, 0)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1.c	Sun Jun 15 22:32:50 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_signed_1.c	Sun Jun 22 22:32:36 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize" } */
  
  #include <stdint.h>
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize --param aarch64-vect-compare-costs=0" } */
  
  #include <stdint.h>
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1.c	Sun Jun 15 22:32:50 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1.c	Sun Jun 22 22:32:36 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize" } */
  
  #include <stdint.h>
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize --param aarch64-vect-compare-costs=0" } */
  
  #include <stdint.h>
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c	Sun Jun 15 22:32:50 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c	Sun Jun 22 22:32:36 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize" } */
  
  void __attribute__ ((noinline, noclone))
  pack_float_plus_1point1 (float *d, double *s, int size)
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize --param aarch64-vect-compare-costs=0" } */
  
  void __attribute__ ((noinline, noclone))
  pack_float_plus_1point1 (float *d, double *s, int size)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c	Sun Jun 15 22:32:50 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c	Sun Jun 22 22:32:37 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize" } */
  
  void __attribute__ ((noinline, noclone))
  unpack_float_plus_7point9 (double *d, float *s, int size)
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -ftree-vectorize  --param aarch64-vect-compare-costs=0" } */
  
  void __attribute__ ((noinline, noclone))
  unpack_float_plus_7point9 (double *d, float *s, int size)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_1.c	Sun Jun 22 22:32:37 2025
***************
*** 0 ****
--- 1,217 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msve-vector-bits=2048 -fno-schedule-insns -fno-schedule-insns2" } */
+ 
+ #include <stdint.h>
+ 
+ typedef _Float16 v32hf __attribute__((vector_size(64)));
+ typedef _Float16 v64hf __attribute__((vector_size(128)));
+ 
+ typedef float v32sf __attribute__((vector_size(128)));
+ typedef float v64sf __attribute__((vector_size(256)));
+ 
+ typedef double v32df __attribute__((vector_size(256)));
+ 
+ typedef int16_t v32hi __attribute__((vector_size(64)));
+ typedef int16_t v64hi __attribute__((vector_size(128)));
+ typedef uint16_t v32uhi __attribute__((vector_size(64)));
+ typedef uint16_t v64uhi __attribute__((vector_size(128)));
+ 
+ typedef int32_t v32si __attribute__((vector_size(128)));
+ typedef int32_t v64si __attribute__((vector_size(256)));
+ typedef uint32_t v32usi __attribute__((vector_size(128)));
+ typedef uint32_t v64usi __attribute__((vector_size(256)));
+ 
+ typedef int64_t v32di __attribute__((vector_size(256)));
+ typedef uint64_t v32udi __attribute__((vector_size(256)));
+ 
+ /*
+ ** float_2hf2hi:
+ **	...
+ **	ld1h	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	scvtf	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v32hf
+ float_2hf2hi (v32hi x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** float_2hf2uhi:
+ **	...
+ **	ld1h	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	ucvtf	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v32hf
+ float_2hf2uhi (v32uhi x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** float_2hf2si:
+ **	...
+ **	ld1w	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	scvtf	(z[0-9]+)\.h, \2/m, \1\.s
+ **	...
+ */
+ v32hf
+ float_2hf2si (v32si x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** float_2hf2usi:
+ **	...
+ **	ld1w	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	ucvtf	(z[0-9]+)\.h, \2/m, \1\.s
+ **	...
+ */
+ v32hf
+ float_2hf2usi (v32usi x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** float_2hf2di:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	scvtf	(z[0-9]+)\.h, \1/m, \2\.d
+ **	...
+ */
+ v32hf
+ float_2hf2di (v32di x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** float_2hf2udi:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	ucvtf	(z[0-9]+)\.h, \1/m, \2\.d
+ **	...
+ */
+ v32hf
+ float_2hf2udi (v32udi x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** float_4hf4hi:
+ **	...
+ **	ld1h	(z[0-9]+)\.s, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.s, vl64
+ **	scvtf	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v64hf
+ float_4hf4hi (v64hi x)
+ {
+   return __builtin_convertvector (x, v64hf);
+ }
+ 
+ /*
+ ** float_4hf4uhi:
+ **	...
+ **	ld1h	(z[0-9]+)\.s, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.s, vl64
+ **	ucvtf	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v64hf
+ float_4hf4uhi (v64uhi x)
+ {
+   return __builtin_convertvector (x, v64hf);
+ }
+ 
+ /*
+ ** float_4hf4si:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1w	(z[0-9]+)\.s, \1/z, \[x0\]
+ **	scvtf	(z[0-9]+)\.h, \1/m, \2\.s
+ **	...
+ */
+ v64hf
+ float_4hf4si (v64si x)
+ {
+   return __builtin_convertvector (x, v64hf);
+ }
+ 
+ /*
+ ** float_4hf4usi:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1w	(z[0-9]+)\.s, \1/z, \[x0\]
+ **	ucvtf	(z[0-9]+)\.h, \1/m, \2\.s
+ **	...
+ */
+ v64hf
+ float_4hf4usi (v64usi x)
+ {
+   return __builtin_convertvector (x, v64hf);
+ }
+ 
+ /*
+ ** float_2sf2si:
+ **	...
+ **	ld1w	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	scvtf	(z[0-9]+)\.s, \2/m, \1\.s
+ **	...
+ */
+ v32sf
+ float_2sf2si (v32si x)
+ {
+   return __builtin_convertvector (x, v32sf);
+ }
+ 
+ /*
+ ** float_2sf2usi:
+ **	...
+ **	ld1w	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	ucvtf	(z[0-9]+)\.s, \2/m, \1\.s
+ **	...
+ */
+ v32sf
+ float_2sf2usi (v32usi x)
+ {
+   return __builtin_convertvector (x, v32sf);
+ }
+ 
+ /*
+ ** float_2sf2di:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	scvtf	(z[0-9]+)\.s, \1/m, \2\.d
+ **	...
+ */
+ v32sf
+ float_2sf2di (v32di x)
+ {
+   return __builtin_convertvector (x, v32sf);
+ }
+ 
+ /*
+ ** float_2sf2udi:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	ucvtf	(z[0-9]+)\.s, \1/m, \2\.d
+ **	...
+ */
+ v32sf
+ float_2sf2udi (v32udi x)
+ {
+   return __builtin_convertvector (x, v32sf);
+ }
+ 
+ /* { dg-final { check-function-bodies "**" "" ""} } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_2.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_2.c	Sun Jun 22 22:32:37 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msve-vector-bits=2048 -fno-trapping-math" } */
+ 
+ #include "unpacked_cvtf_1.c"
+ 
+ /* { dg-final { scan-assembler-not {\tptrue\tp[0-7]\.d} } } */
+ /* { dg-final { scan-assembler-not {\tptrue\tp[0-7]\.s} } } */
+ /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b} 14 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tscvtf\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h\n} 2 } } */
+ /* { dg-final { scan-assembler-times {\tucvtf\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h\n} 2 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tscvtf\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.s\n} 2 } } */
+ /* { dg-final { scan-assembler-times {\tucvtf\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.s\n} 2 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tscvtf\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tucvtf\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tscvtf\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tucvtf\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s\n} 1 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tscvtf\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tucvtf\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_3.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_3.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_3.c	Sun Jun 22 22:32:37 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ftree-vectorize" } */
+ 
+ #include <stdint.h>
+ 
+ void f64_i32 (double *restrict x, int32_t  *restrict y, int n)
+ {
+   for (int i = 0; i < n; i++)
+     x[i] = (double)y[i];
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tscvtf\tz[0-9]+\.[sd], p[0-7]/m, z[0-9]+\.d\n} 1 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_1.c	Sun Jun 22 22:32:37 2025
***************
*** 0 ****
--- 1,118 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msve-vector-bits=2048 -fno-schedule-insns -fno-schedule-insns2" } */
+ 
+ typedef _Float16 v32hf __attribute__((vector_size(64)));
+ typedef _Float16 v64hf __attribute__((vector_size(128)));
+ 
+ typedef float v32sf __attribute__((vector_size(128)));
+ typedef float v64sf __attribute__((vector_size(256)));
+ 
+ typedef double v32df __attribute__((vector_size(256)));
+ 
+ /*
+ ** trunc_2sf2df:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvt	(z[0-9]+)\.s, \1/m, \2\.d
+ **	...
+ */
+ v32sf
+ trunc_2sf2df (v32df x)
+ {
+   return __builtin_convertvector (x, v32sf);
+ }
+ 
+ /*
+ ** trunc_2hf2df:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvt	(z[0-9]+)\.h, \1/m, \2\.d
+ **	...
+ */
+ v32hf
+ trunc_2hf2df (v32df x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** trunc_4hf4sf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1w	(z[0-9]+)\.s, \1/z, \[x0\]
+ **	fcvt	(z[0-9]+)\.h, \1/m, \2\.s
+ **	...
+ */
+ v64hf
+ trunc_4hf4sf (v64sf x)
+ {
+   return __builtin_convertvector (x, v64hf);
+ }
+ 
+ /*
+ ** trunc_2hf2sf:
+ **	...
+ **	ld1w	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvt	(z[0-9]+)\.h, \2/m, \1\.s
+ **	...
+ */
+ v32hf
+ trunc_2hf2sf (v32sf x)
+ {
+   return __builtin_convertvector (x, v32hf);
+ }
+ 
+ /*
+ ** extend_2df2hf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1h	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvt	(z[0-9]+)\.d, \1/m, \2\.h
+ **	...
+ */
+ v32df
+ extend_2df2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32df);
+ }
+ 
+ /*
+ ** extend_2df2sf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1w	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvt	(z[0-9]+)\.d, \1/m, \2\.s
+ **	...
+ */
+ v32df
+ extend_2df2sf (v32sf x)
+ {
+   return __builtin_convertvector (x, v32df);
+ }
+ 
+ /*
+ ** extend_4sf4hf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1h	(z[0-9]+)\.s, \1/z, \[x0\]
+ **	fcvt	(z[0-9]+)\.s, \1/m, \2\.h
+ **	...
+ */
+ v64sf
+ extend_4sf4hf (v64hf x)
+ {
+   return __builtin_convertvector (x, v64sf);
+ }
+ 
+ /*
+ ** extend_2sf2hf:
+ **	...
+ **	ld1h	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvt	(z[0-9]+)\.s, \2/m, \1\.h
+ **	...
+ */
+ v32sf
+ extend_2sf2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32sf);
+ }
+ 
+ /* { dg-final { check-function-bodies "**" "" ""} } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_2.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_2.c	Sun Jun 22 22:32:37 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msve-vector-bits=2048 -fno-trapping-math" } */
+ 
+ #include "unpacked_fcvt_1.c"
+ 
+ /* { dg-final { scan-assembler-not {\tptrue\tp[0-7]\.d} } } */
+ /* { dg-final { scan-assembler-not {\tptrue\tp[0-7]\.s} } } */
+ /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b} 8 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvt\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvt\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvt\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.s\n} 2 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvt\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.h\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvt\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.s\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvt\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.h\n} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_1.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_1.c	Sun Jun 22 22:32:37 2025
***************
*** 0 ****
--- 1,244 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msve-vector-bits=2048 -fno-schedule-insns -fno-schedule-insns2" } */
+ 
+ #include <stdint.h>
+ 
+ typedef _Float16 v32hf __attribute__((vector_size(64)));
+ typedef _Float16 v64hf __attribute__((vector_size(128)));
+ 
+ typedef float v32sf __attribute__((vector_size(128)));
+ typedef float v64sf __attribute__((vector_size(256)));
+ 
+ typedef double v32df __attribute__((vector_size(256)));
+ 
+ typedef int16_t v32hi __attribute__((vector_size(64)));
+ typedef int16_t v64hi __attribute__((vector_size(128)));
+ typedef uint16_t v32uhi __attribute__((vector_size(64)));
+ typedef uint16_t v64uhi __attribute__((vector_size(128)));
+ 
+ typedef int32_t v32si __attribute__((vector_size(128)));
+ typedef int32_t v64si __attribute__((vector_size(256)));
+ typedef uint32_t v32usi __attribute__((vector_size(128)));
+ typedef uint32_t v64usi __attribute__((vector_size(256)));
+ 
+ typedef int64_t v32di __attribute__((vector_size(256)));
+ typedef uint64_t v32udi __attribute__((vector_size(256)));
+ 
+ 
+ /*
+ ** fix_trunc_2hi2hf:
+ **	...
+ **	ld1h	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvtzs	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v32hi
+ fix_trunc_2hi2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32hi);
+ }
+ 
+ /*
+ ** fix_trunc_2uhi2hf:
+ **	...
+ **	ld1h	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvtzu	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v32uhi
+ fix_trunc_2uhi2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32uhi);
+ }
+ 
+ /*
+ ** fix_trunc_2si2hf:
+ **	...
+ **	ld1h	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvtzs	(z[0-9]+)\.s, \2/m, \1\.h
+ **	...
+ */
+ v32si
+ fix_trunc_2si2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32si);
+ }
+ 
+ /*
+ ** fix_trunc_2usi2hf:
+ **	...
+ **	ld1h	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvtzu	(z[0-9]+)\.s, \2/m, \1\.h
+ **	...
+ */
+ v32usi
+ fix_trunc_2usi2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32usi);
+ }
+ 
+ /*
+ ** fix_trunc_2di2hf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1h	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvtzs	(z[0-9]+)\.d, \1/m, \2\.h
+ **	...
+ */
+ v32di
+ fix_trunc_2di2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32di);
+ }
+ 
+ /*
+ ** fix_trunc_2udi2hf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1h	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvtzu	(z[0-9]+)\.d, \1/m, \2\.h
+ **	...
+ */
+ v32udi
+ fix_trunc_2udi2hf (v32hf x)
+ {
+   return __builtin_convertvector (x, v32udi);
+ }
+ 
+ /*
+ ** fix_trunc_4hi4hf:
+ **	...
+ **	ld1h	(z[0-9]+)\.s, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.s, vl64
+ **	fcvtzs	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v64hi
+ fix_trunc_4hi4hf (v64hf x)
+ {
+   return __builtin_convertvector (x, v64hi);
+ }
+ 
+ /*
+ ** fix_trunc_4uhi4hf:
+ **	...
+ **	ld1h	(z[0-9]+)\.s, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.s, vl64
+ **	fcvtzu	(z[0-9]+)\.h, \2/m, \1\.h
+ **	...
+ */
+ v64uhi
+ fix_trunc_4uhi4hf (v64hf x)
+ {
+   return __builtin_convertvector (x, v64uhi);
+ }
+ 
+ /*
+ ** fix_trunc_4si4hf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1h	(z[0-9]+)\.s, \1/z, \[x0\]
+ **	fcvtzs	(z[0-9]+)\.s, \1/m, \2\.h
+ **	...
+ */
+ v64si
+ fix_trunc_4si4hf (v64hf x)
+ {
+   return __builtin_convertvector (x, v64si);
+ }
+ 
+ /*
+ ** fix_trunc_4usi4hf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1h	(z[0-9]+)\.s, \1/z, \[x0\]
+ **	fcvtzu	(z[0-9]+)\.s, \1/m, \2\.h
+ **	...
+ */
+ v64usi
+ fix_trunc_4usi4hf (v64hf x)
+ {
+   return __builtin_convertvector (x, v64usi);
+ }
+ 
+ /*
+ ** fix_trunc_2si2sf:
+ **	...
+ **	ld1w	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvtzs	(z[0-9]+)\.s, \2/m, \1\.s
+ **	...
+ */
+ v32si
+ fix_trunc_2si2sf (v32sf x)
+ {
+   return __builtin_convertvector (x, v32si);
+ }
+ 
+ /*
+ ** fix_trunc_2usi2sf:
+ **	...
+ **	ld1w	(z[0-9]+)\.d, p[0-7]/z, \[x0\]
+ **	ptrue	(p[0-7])\.d, vl32
+ **	fcvtzu	(z[0-9]+)\.s, \2/m, \1\.s
+ **	...
+ */
+ v32usi
+ fix_trunc_2usi2sf (v32sf x)
+ {
+   return __builtin_convertvector (x, v32usi);
+ }
+ 
+ /*
+ ** fix_trunc_2di2sf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1w	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvtzs	(z[0-9]+)\.d, \1/m, \2\.s
+ **	...
+ */
+ v32di
+ fix_trunc_2di2sf (v32sf x)
+ {
+   return __builtin_convertvector (x, v32di);
+ }
+ 
+ /*
+ ** fix_trunc_2udi2sf:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1w	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvtzu	(z[0-9]+)\.d, \1/m, \2\.s
+ **	...
+ */
+ v32udi
+ fix_trunc_2udi2sf (v32sf x)
+ {
+   return __builtin_convertvector (x, v32udi);
+ }
+ 
+ /*
+ ** fix_trunc_2si2df:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvtzs	(z[0-9]+)\.s, \1/m, \2\.d
+ **	...
+ */
+ v32si
+ fix_trunc_2si2df (v32df x)
+ {
+   return __builtin_convertvector (x, v32si);
+ }
+ 
+ /*
+ ** fix_trunc_2usi2df:
+ **	ptrue	(p[0-7])\.b, vl256
+ **	ld1d	(z[0-9]+)\.d, \1/z, \[x0\]
+ **	fcvtzu	(z[0-9]+)\.s, \1/m, \2\.d
+ **	...
+ */
+ v32usi
+ fix_trunc_2usi2df (v32df x)
+ {
+   return __builtin_convertvector (x, v32usi);
+ }
+ 
+ /* { dg-final { check-function-bodies "**" "" ""} } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_2.c gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_2.c	Sun Jun 22 22:32:37 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msve-vector-bits=2048 -fno-trapping-math" } */
+ 
+ #include "unpacked_fcvtz_1.c"
+ 
+ /* { dg-final { scan-assembler-not {\tptrue\tp[0-7]\.d} } } */
+ /* { dg-final { scan-assembler-not {\tptrue\tp[0-7]\.s} } } */
+ /* { dg-final { scan-assembler-times {\tptrue\tp[0-7]\.b} 16 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvtzs\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h\n} 2 } } */
+ /* { dg-final { scan-assembler-times {\tfcvtzu\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h\n} 2 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvtzs\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.h\n} 2 } } */
+ /* { dg-final { scan-assembler-times {\tfcvtzu\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.h\n} 2 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvtzs\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.h\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvtzu\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.h\n} 1 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvtzs\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvtzu\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s\n} 1 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvtzs\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.s\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvtzu\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.s\n} 1 } } */
+ 
+ /* { dg-final { scan-assembler-times {\tfcvtzs\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
+ /* { dg-final { scan-assembler-times {\tfcvtzu\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.d\n} 1 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/avx10_2-comibf-1.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/avx10_2-comibf-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/avx10_2-comibf-1.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/avx10_2-comibf-1.c	Sun Jun 22 22:32:54 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=x86-64-v3 -mavx10.2 -O2 -fno-trapping-math" } */
  /* { dg-final { scan-assembler-times "vcomisbf16\[ \\t\]+\[^{}\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 6 } } */
  /* { dg-final { scan-assembler-times {j[a-z]+\s} 6 } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=x86-64-v3 -mavx10.2 -O2 -fno-trapping-math -fno-shrink-wrap" } */
  /* { dg-final { scan-assembler-times "vcomisbf16\[ \\t\]+\[^{}\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 6 } } */
  /* { dg-final { scan-assembler-times {j[a-z]+\s} 6 } } */
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/cold-attribute-4.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/cold-attribute-4.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/cold-attribute-4.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/cold-attribute-4.c	Sun Jun 22 22:32:56 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2" } */
  #include <string.h>
  
  int
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-Oz" } */
  #include <string.h>
  
  int
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/interrupt-16.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/interrupt-16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/interrupt-16.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/interrupt-16.c	Sun Jun 22 22:32:56 2025
*************** foo (int i)
*** 18,22 ****
  /* { dg-final { scan-assembler-not "(push|pop)(l|q)\[\\t \]*%(r|e)bp" } } */
  /* { dg-final { scan-assembler-not "(push|pop)l\[\\t \]*%edi" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "(push|pop)q\[\\t \]*%r\[0-9\]+" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%rdi" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%rdi" 1 { target { ! ia32 } } } } */
--- 18,22 ----
  /* { dg-final { scan-assembler-not "(push|pop)(l|q)\[\\t \]*%(r|e)bp" } } */
  /* { dg-final { scan-assembler-not "(push|pop)l\[\\t \]*%edi" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "(push|pop)q\[\\t \]*%r\[0-9\]+" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "(pushq.*%rdi|subq.*\\\$8,.*%rsp)" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "(popq.*%rdi|addq.*\\\$8,.*%rsp)" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-1.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-1.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
+ /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
+ /* { dg-final { scan-assembler-not "movdqa" } } */
+ 
+ char a[2048];
+ char b[2048];
+ void t (void)
+ {
+   __builtin_memcpy (a, b, 2048);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-2.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-2.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
+ /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
+ /* { dg-final { scan-assembler-not "movdqa" } } */
+ 
+ char *a;
+ char *b;
+ void t (void)
+ {
+   __builtin_memcpy (a, b, 2048);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-3.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-3.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-3.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
+ /* { dg-options "-O2 -march=atom -mmemcpy-strategy=vector_loop:-1:align" } */
+ /* { dg-final { scan-assembler-not "movdqa" } } */
+ 
+ char a[2048];
+ char b[2048];
+ void t (void)
+ {
+   __builtin_memcpy (a, b, 2048);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-4.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-4.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-4.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
+ /* { dg-options "-O2 -march=atom -mmemcpy-strategy=vector_loop:3000:align,libcall:-1:align" } */
+ /* { dg-final { scan-assembler-not "movdqa" } } */
+ 
+ char a[2048];
+ char b[2048];
+ void t (void)
+ {
+   __builtin_memcpy (a, b, 2048);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-5.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-5.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-5.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mprefer-vector-width=128 -mmemcpy-strategy=vector_loop:2048:noalign,libcall:-1:noalign" } */
+ 
+ #define SIZE (16 + 1) * 16
+ 
+ char dest[SIZE];
+ char src[SIZE];
+ 
+ void
+ foo (void)
+ {
+   __builtin_memcpy (dest, src, SIZE);
+ }
+ 
+ /* { dg-final { scan-assembler-times "vmovdqa\[ \t]\+\[^\n\r]*%xmm\[0-9\]\+" 10 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-6.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-6.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-pr120708-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-pr120708-6.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mprefer-vector-width=256 -mmemcpy-strategy=vector_loop:2048:noalign,libcall:-1:noalign" } */
+ 
+ #define SIZE (16 + 1) * 32
+ 
+ char dest[SIZE];
+ char src[SIZE];
+ 
+ void
+ foo (void)
+ {
+   __builtin_memcpy (dest, src, SIZE);
+ }
+ 
+ /* { dg-final { scan-assembler-times "vmovdqa\[ \t]\+\[^\n\r]*%ymm\[0-9\]\+" 10 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c	Sun Jun 22 22:32:56 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
! /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
! /* { dg-options "-O2 -march=atom -mmemcpy-strategy=vector_loop:-1:align" } */
  /* { dg-final { scan-assembler-times "movdqa" 8 } } */
  
  char a[2048];
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -mtune-ctrl=^sse_typeless_stores -mmemcpy-strategy=vector_loop:-1:align" } */
  /* { dg-final { scan-assembler-times "movdqa" 8 } } */
  
  char a[2048];
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c	Sun Jun 22 22:32:56 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
! /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
! /* { dg-options "-O2 -march=atom -mmemcpy-strategy=vector_loop:3000:align,libcall:-1:align" } */
  /* { dg-final { scan-assembler-times "movdqa" 8 } } */
  
  char a[2048];
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -mtune-ctrl=^sse_typeless_stores -mmemcpy-strategy=vector_loop:3000:align,libcall:-1:align" } */
  /* { dg-final { scan-assembler-times "movdqa" 8 } } */
  
  char a[2048];
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c	Sun Jun 22 22:32:56 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
! /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
! /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
  /* { dg-final { scan-assembler-times "movdqa" 8 } } */
  
  char a[2048];
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -mtune-ctrl=^sse_typeless_stores -minline-all-stringops -mstringop-strategy=vector_loop" } */
  /* { dg-final { scan-assembler-times "movdqa" 8 } } */
  
  char a[2048];
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c	Sun Jun 22 22:32:56 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
! /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
! /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
! /* { dg-final { scan-assembler-times "movdqa" 4} } */
  
  char *a;
  char *b;
--- 1,6 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -mtune-ctrl=^sse_typeless_stores -minline-all-stringops -mstringop-strategy=vector_loop" } */
! /* { dg-final { scan-assembler-times "movdqa" 4 } } */
  
  char *a;
  char *b;
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-pr120708-1.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-pr120708-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-pr120708-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-pr120708-1.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mprefer-vector-width=128 -mmemset-strategy=vector_loop:256:noalign,libcall:-1:noalign" } */
+ 
+ void
+ foo (char *dest)
+ {
+   __builtin_memset (dest, 0, 254);
+ }
+ 
+ /* { dg-final { scan-assembler "vmovdqu\[ \t]\+%xmm\[0-9\]+, \\(\[^\n\r]*\\)" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-pr120708-2.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-pr120708-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-pr120708-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-pr120708-2.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mprefer-vector-width=256 -mmemset-strategy=vector_loop:256:noalign,libcall:-1:noalign" } */
+ 
+ void
+ foo (char *dest)
+ {
+   __builtin_memset (dest, 0, 254);
+ }
+ 
+ /* { dg-final { scan-assembler "vmovdqu\[ \t]\+%ymm\[0-9\]+, \\(\[^\n\r]*\\)" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c	Sun Jun 22 22:32:56 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
! /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
! /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
  /* { dg-final { scan-assembler-times "movdqa" 4 } } */
  
  char a[2048];
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -mtune-ctrl=^sse_typeless_stores -minline-all-stringops -mstringop-strategy=vector_loop" } */
  /* { dg-final { scan-assembler-times "movdqa" 4 } } */
  
  char a[2048];
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c	Sun Jun 15 22:32:56 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c	Sun Jun 22 22:32:56 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
! /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=atom" } } */
! /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
  /* { dg-final { scan-assembler-times "movdqa" 4} } */
  
  char *a;
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -mtune-ctrl=^sse_typeless_stores -mstringop-strategy=vector_loop" } */
  /* { dg-final { scan-assembler-times "movdqa" 4} } */
  
  char *a;
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-1.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-1.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=sapphirerapids" } */
+ /* { dg-final { scan-assembler-not "and\[lq\]?\[\\t \]+\\\$0, \[0-9\]*\\(" } } */
+ 
+ struct __pthread_mutex_s
+ {
+   int __lock;
+   unsigned int __count;
+   int __owner;
+   unsigned int __nusers;
+   int __kind;
+   short __spins;
+   short __elision;
+   void *p[2];
+ };
+ typedef union
+ {
+   struct __pthread_mutex_s __data;
+   char __size[40];
+   long int __align;
+ } pthread_mutex_t;
+ typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
+ void
+ foo (__rtld_lock_recursive_t *lock, int i)
+ {
+   lock[i] = (__rtld_lock_recursive_t) {{ { 0, 0, 0, 0, 1,
+       0, 0, { ((void *)0) , ((void *)0) } } }};
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-2.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-2.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=sapphirerapids" } */
+ /* { dg-final { scan-assembler-not "or\[lq\]?\[\\t \]+\\\$-1, \[0-9\]*\\(" } } */
+ 
+ struct __pthread_mutex_s
+ {
+   int __lock;
+   unsigned int __count;
+   int __owner;
+   unsigned int __nusers;
+   int __kind;
+   short __spins;
+   short __elision;
+   void *p[2];
+ };
+ typedef union
+ {
+   struct __pthread_mutex_s __data;
+   char __size[40];
+   long int __align;
+ } pthread_mutex_t;
+ typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
+ void
+ foo (__rtld_lock_recursive_t *lock, int i)
+ {
+   lock[i] = (__rtld_lock_recursive_t) {{ { -1, -1, -1, -1, 1,
+       -1, -1, { ((void *)-1) , ((void *)-1) } } }};
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-3.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-3.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-3.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ typedef int SItype __attribute__ ((mode (SI)));
+ typedef unsigned int USItype __attribute__ ((mode (SI)));
+ typedef unsigned int UDItype __attribute__ ((mode (DI)));
+ typedef UDItype __attribute__ ((__may_alias__)) bar_t;
+ 
+ static inline __attribute__((__always_inline__)) SItype
+ bar (const bar_t **p, SItype prec)
+ {
+   bar_t mslimb = 0;
+   SItype i = 20;
+   SItype n = ((USItype) prec) % 4;
+   if (n)
+     {
+       prec -= n;
+       if (prec == 0)
+ 	return 1;
+       mslimb = (*p)[i];
+     }
+   while (mslimb == 0)
+     {
+       prec -= 4;
+       if (prec == 0)
+ 	return 1;
+       --i;
+       mslimb = (*p)[i];
+     }
+   return prec;
+ }
+ UDItype
+ foo (const bar_t *i, SItype iprec)
+ {
+   iprec = bar (&i, iprec);
+   USItype aiprec = iprec < 0 ? -iprec : iprec;
+   bar_t msb = *i;
+   UDItype mantissa = 0;
+   if (aiprec % 4)
+     msb &= ((bar_t) 1 << aiprec) - 1;
+   if (aiprec >= 54)
+     mantissa = (UDItype) msb << 32;
+ 
+   return (mantissa ^ (UDItype) 0x20000000000000);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-4.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-4.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120427-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120427-4.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ #include "cold-attribute-4.c"
+ 
+ /* { dg-final { scan-assembler "movl" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120689.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120689.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/pr120689.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/pr120689.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,17 ----
+ /* PR target/120689 */
+ /* { dg-do compile { target lp64 } } */
+ /* { dg-options "-O2 -mtune=generic -fno-stack-protector -masm=att" } */
+ /* { dg-final { scan-assembler-not "\t\(movzbl\|shrl\|salq\|orq\)\t" } } */
+ 
+ struct S { char a, b, c; };
+ 
+ [[gnu::noipa]]
+ void foo (struct S x, struct S y, struct S z)
+ {
+ }
+ 
+ void
+ bar (struct S x, struct S y, struct S z)
+ {
+   [[gnu::musttail]] return foo (x, y, z);
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/shrink_wrap_separate_check_lea.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/shrink_wrap_separate_check_lea.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/shrink_wrap_separate_check_lea.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/shrink_wrap_separate_check_lea.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } */
+ 
+ /* Avoid inserting sub between test-je-jle to change EFlags, lea should be used here
+         xorl    %eax, %eax
+         testl   %edi, %edi
+         je      .L11
+         sub     $16, %rsp  ------> leaq    -16(%rsp), %rsp
+         movq    %r13, 8(%rsp)
+         movl    $1, %r13d
+         jle     .L4
+ */
+ int foo (int num)
+ {
+   if (!num)
+     return 0;
+ 
+   register int r13 __asm ("r13") = 1;
+ 
+   for ( int i = 0; i < num; i++)
+     {
+       register int r12 __asm ("r12") = 1;
+       asm volatile ("" : "+r" (r12), "+r" (r13));
+     }
+ 
+   return 1;
+ }
+ /* { dg-final { scan-rtl-dump "The components we wrap separately are \\\[sep 40\\\]" "pro_and_epilogue" } } */
+ /* { dg-final { scan-assembler "leaq.*(%rsp)" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/i386/stack-clash-protection.c gcc-16-20250622/gcc/testsuite/gcc.target/i386/stack-clash-protection.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/i386/stack-clash-protection.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/i386/stack-clash-protection.c	Sun Jun 22 22:32:56 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fstack-clash-protection" } */
+ 
+ int flag;
+ void open();
+ int getChar();
+ typedef enum { QUOTE } CharType;
+ typedef enum { UNQ } State;
+ CharType getCharType();
+ void expand() {
+   open();
+   if (flag)
+     return;
+   int ch = getChar();
+   State nextState = getCharType();
+   if (nextState)
+     while (ch)
+       ;
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/arch-53.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/arch-53.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/arch-53.c	Sun Jun 15 22:33:14 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/arch-53.c	Sun Jun 22 22:33:02 2025
*************** void foo(){}
*** 8,11 ****
  _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\"" } } */
--- 8,11 ----
  _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_supm1p0\"" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c	Sun Jun 22 22:33:03 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64 -mcmodel=large" } */
  
  int foo(int x, int y)
  {
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64 -mcmodel=large -fno-pie" } */
  
  int foo(int x, int y)
  {
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/pr118241.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/pr118241.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/pr118241.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/pr118241.c	Sun Jun 22 22:33:03 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zicbop" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gc_zicbop" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ void test1() { __builtin_prefetch((int *)2047); }
+ void test2() { __builtin_prefetch((int *)1024); }
+ void test3(char *x) { __builtin_prefetch(&x); }
+ void test4(char *x) { __builtin_prefetch(&x[2]); }
+ void test5(char *x) { __builtin_prefetch(&x[1024]); }
+ 
+ /* So we expect test1, test3 and test4 to be a prefetch
+    with zero offset.  test2 and test5 will have a 1k offset.  */
+ /* { dg-final { scan-assembler-times "prefetch.r\t0\\(\[a-x0-9\]+\\)" 3 } } */
+ /* { dg-final { scan-assembler-times "prefetch.r\t1024" 2 } } */
+ 
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/pr119830.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/pr119830.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/pr119830.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/pr119830.c	Sun Jun 22 22:33:03 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zbb_zbs -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gc_zbb_zbs -mabi=ilp32" { target { rv32 } } } */
+ 
+ #include <stdint.h>
+ void test(int32_t N, int16_t* A, int16_t val) {
+     int32_t i, j;
+     for (i = 0; i < N; i++) {
+         for (j = 0; j < N; j++) {
+             A[i * N + j] += val;
+         }
+     }
+ }
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c	Sun Jun 22 22:33:03 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -fdump-tree-optimized-details" } */
  
  #include "vadd-template.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -fdump-tree-optimized-details -fno-pie" } */
  
  #include "vadd-template.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c	Sun Jun 22 22:33:03 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv64gcv_zvfh -mabi=lp64d -mrvv-vector-bits=scalable -fdump-tree-optimized-details" } */
  
  #include "vadd-template.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv64gcv_zvfh -mabi=lp64d -mrvv-vector-bits=scalable -fdump-tree-optimized-details -fno-pie" } */
  
  #include "vadd-template.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c	Sun Jun 22 22:33:03 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -fdump-tree-optimized-details" } */
  
  #include "vsub-template.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -fdump-tree-optimized-details -fno-pie" } */
  
  #include "vsub-template.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c	Sun Jun 22 22:33:03 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv64gcv_zvfh -mabi=lp64d -mrvv-vector-bits=scalable -fdump-tree-optimized-details" } */
  
  #include "vsub-template.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-std=c99 -fno-vect-cost-model -march=rv64gcv_zvfh -mabi=lp64d -mrvv-vector-bits=scalable -fdump-tree-optimized-details -fno-pie" } */
  
  #include "vsub-template.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-1.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-1.c	Sun Jun 22 22:33:04 2025
***************
*** 0 ****
--- 1,5 ----
+ /* Test that we do not have ice when compile */
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zvl256b -mabi=lp64d -O3" } */
+ 
+ #include "pr120652.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-2.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-2.c	Sun Jun 22 22:33:04 2025
***************
*** 0 ****
--- 1,5 ----
+ /* Test that we do not have ice when compile */
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zvl512b -mabi=lp64d -O3" } */
+ 
+ #include "pr120652.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-3.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-3.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652-3.c	Sun Jun 22 22:33:04 2025
***************
*** 0 ****
--- 1,5 ----
+ /* Test that we do not have ice when compile */
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zvl1024b -mabi=lp64d -O3" } */
+ 
+ #include "pr120652.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652.h gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652.h
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120652.h	Sun Jun 22 22:33:04 2025
***************
*** 0 ****
--- 1,31 ----
+ #ifndef HAVE_DEFINED_PR120652_H
+ #define HAVE_DEFINED_PR120652_H
+ 
+ unsigned n;
+ char ab[6];
+ unsigned ac;
+ unsigned ae;
+ 
+ int ak(int bb) {
+ bd:
+   for (ac = -17; ac != 16; ac++) {
+     unsigned be = 95;
+     if (be <= n) {
+       char *bg = &ab[1];
+       *bg ^= bb;
+     } else {
+       ae--;
+       for (n = 8; 0;)
+ 	goto bd;
+     }
+   }
+   return 0;
+ }
+ 
+ int main() {
+   ak(7);
+ 
+   return 0;
+ }
+ 
+ #endif
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int16_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T int16_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-times {vdiv.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int32_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T int32_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-times {vdiv.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int64_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T int64_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-times {vdiv.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int8_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T int8_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-times {vdiv.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vrem.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmax.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vmin.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint16_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T uint16_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-times {vdivu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vremu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint32_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T uint32_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-times {vdivu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vremu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint64_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T uint64_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-times {vdivu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vremu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint8_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
--- 5,11 ----
  
  #define T uint8_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-times {vdivu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vremu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmaxu.vx} 2 } } */
+ /* { dg-final { scan-assembler-times {vminu.vx} 2 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int16_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int16_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int32_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int32_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int64_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int64_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int8_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int8_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint16_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint16_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint32_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint32_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint64_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint64_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint8_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint8_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int16_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int16_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int32_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int32_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int64_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int64_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c	Sun Jun 22 22:33:05 2025
***************
*** 5,21 ****
  
  #define T int8_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T int8_t
  
! TEST_BINARY_VX_SIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 17,20 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint16_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint16_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint32_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint32_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint64_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint64_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c	Sun Jun 22 22:33:05 2025
***************
*** 5,20 ****
  
  #define T uint8_t
  
! DEF_VX_BINARY_CASE_0_WRAP(T, +, add)
! DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
! DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
! DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
! DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
! DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
! DEF_VX_BINARY_CASE_0_WRAP(T, /, div)
! DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)
! DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
--- 5,11 ----
  
  #define T uint8_t
  
! TEST_BINARY_VX_UNSIGNED_0(T)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 16,19 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X16)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X16)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,21 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X16)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 26,29 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X16)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vdiv.vx} } } */
  /* { dg-final { scan-assembler-not {vrem.vx} } } */
  /* { dg-final { scan-assembler-not {vmax.vx} } } */
+ /* { dg-final { scan-assembler-not {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 16,21 ****
--- 16,23 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 27,29 ****
--- 29,32 ----
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
+ /* { dg-final { scan-assembler {vmin.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X4)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler-not {vdivu.vx} } } */
  /* { dg-final { scan-assembler-not {vremu.vx} } } */
  /* { dg-final { scan-assembler-not {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler-not {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c	Sun Jun 22 22:33:05 2025
*************** DEF_VX_BINARY_CASE_1_WRAP(T, /, div, VX_
*** 15,20 ****
--- 15,22 ----
  DEF_VX_BINARY_CASE_1_WRAP(T, %, rem, VX_BINARY_BODY_X16)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_0_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_WARP(T), max, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_0_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
+ DEF_VX_BINARY_CASE_3_WRAP(T, MIN_FUNC_1_WARP(T), min, VX_BINARY_FUNC_BODY_X8)
  
  /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
*************** DEF_VX_BINARY_CASE_3_WRAP(T, MAX_FUNC_1_
*** 25,27 ****
--- 27,30 ----
  /* { dg-final { scan-assembler {vdivu.vx} } } */
  /* { dg-final { scan-assembler {vremu.vx} } } */
  /* { dg-final { scan-assembler {vmaxu.vx} } } */
+ /* { dg-final { scan-assembler {vminu.vx} } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Jun 22 22:33:05 2025
*************** DEF_MAX_1(uint64_t)
*** 167,172 ****
--- 167,212 ----
  #define MAX_FUNC_1(T) test_##T##_max_1
  #define MAX_FUNC_1_WARP(T) MAX_FUNC_1(T)
  
+ #define DEF_MIN_0(T)        \
+ static inline T             \
+ test_##T##_min_0 (T a, T b) \
+ {                           \
+   return a > b ? b : a;     \
+ }
+ 
+ #define DEF_MIN_1(T)        \
+ static inline T             \
+ test_##T##_min_1 (T a, T b) \
+ {                           \
+   return a >= b ? b : a;    \
+ }
+ 
+ DEF_MIN_0(int8_t)
+ DEF_MIN_0(int16_t)
+ DEF_MIN_0(int32_t)
+ DEF_MIN_0(int64_t)
+ 
+ DEF_MIN_1(int8_t)
+ DEF_MIN_1(int16_t)
+ DEF_MIN_1(int32_t)
+ DEF_MIN_1(int64_t)
+ 
+ DEF_MIN_0(uint8_t)
+ DEF_MIN_0(uint16_t)
+ DEF_MIN_0(uint32_t)
+ DEF_MIN_0(uint64_t)
+ 
+ DEF_MIN_1(uint8_t)
+ DEF_MIN_1(uint16_t)
+ DEF_MIN_1(uint32_t)
+ DEF_MIN_1(uint64_t)
+ 
+ #define MIN_FUNC_0(T) test_##T##_min_0
+ #define MIN_FUNC_0_WARP(T) MIN_FUNC_0(T)
+ 
+ #define MIN_FUNC_1(T) test_##T##_min_1
+ #define MIN_FUNC_1_WARP(T) MIN_FUNC_1(T)
+ 
  #define DEF_VX_BINARY_CASE_2(T, FUNC, NAME)                      \
  void                                                             \
  test_vx_binary_##NAME##_##FUNC##_##T##_case_2 (T * restrict out, \
*************** test_vx_binary_##NAME##_##FUNC##_##T##_c
*** 230,233 ****
--- 270,302 ----
    VX_BINARY_FUNC_BODY_X64(op)        \
    VX_BINARY_FUNC_BODY_X64(op)
  
+ #define TEST_BINARY_VX_SIGNED_0(T)                      \
+   DEF_VX_BINARY_CASE_0_WRAP(T, +, add)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)                  \
+   DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)         \
+   DEF_VX_BINARY_CASE_0_WRAP(T, &, and)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, |, or)                   \
+   DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, /, div)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)                  \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max) \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max) \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min) \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_1_WARP(T), min)
+ 
+ #define TEST_BINARY_VX_UNSIGNED_0(T)                    \
+   DEF_VX_BINARY_CASE_0_WRAP(T, +, add)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)                  \
+   DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)         \
+   DEF_VX_BINARY_CASE_0_WRAP(T, &, and)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, |, or)                   \
+   DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, /, div)                  \
+   DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)                  \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max) \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max) \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min) \
+   DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_1_WARP(T), min)
+ 
  #endif
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Jun 22 22:33:05 2025
*************** uint64_t TEST_BINARY_DATA(uint64_t, max)
*** 3730,3733 ****
--- 3730,4125 ----
    },
  };
  
+ int8_t TEST_BINARY_DATA(int8_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+   },
+   {
+     { 127 },
+     {
+        127,  127,  127,  127,
+         -1,   -1,   -1,   -1,
+       -128, -128, -128, -128,
+         -2,   -2,   -2,   -2,
+     },
+     {
+        127,  127,  127,  127,
+         -1,   -1,   -1,   -1,
+       -128, -128, -128, -128,
+         -2,   -2,   -2,   -2,
+     },
+   },
+   {
+     { -128 },
+     {
+       -128, -128, -128, -128,
+          1,    1,    1,    1,
+        127,  127,  127,  127,
+          2,    2,    2,    2,
+     },
+     {
+       -128, -128, -128, -128,
+       -128, -128, -128, -128,
+       -128, -128, -128, -128,
+       -128, -128, -128, -128,
+     },
+   },
+ };
+ 
+ int16_t TEST_BINARY_DATA(int16_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+   },
+   {
+     { 32767 },
+     {
+        32767,  32767,  32767,  32767,
+           -1,     -1,     -1,     -1,
+       -32768, -32768, -32768, -32768,
+           -2,     -2,     -2,     -2,
+     },
+     {
+        32767,  32767,  32767,  32767,
+           -1,     -1,     -1,     -1,
+       -32768, -32768, -32768, -32768,
+           -2,     -2,     -2,     -2,
+     },
+   },
+   {
+     { -32768 },
+     {
+       -32768, -32768, -32768, -32768,
+            1,      1,      1,      1,
+        32767,  32767,  32767,  32767,
+            2,      2,      2,      2,
+     },
+     {
+       -32768, -32768, -32768, -32768,
+       -32768, -32768, -32768, -32768,
+       -32768, -32768, -32768, -32768,
+       -32768, -32768, -32768, -32768,
+     },
+   },
+ };
+ 
+ int32_t TEST_BINARY_DATA(int32_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+   },
+   {
+     { 2147483647 },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+                -1,          -1,          -1,          -1,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+                -2,          -2,          -2,          -2,
+     },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+                -1,          -1,          -1,          -1,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+                -2,          -2,          -2,          -2,
+     },
+   },
+   {
+     { -2147483648 },
+     {
+       -2147483648, -2147483648, -2147483648, -2147483648,
+                 1,           1,           1,           1,
+        2147483647,  2147483647,  2147483647,  2147483647,
+                 2,           2,           2,           2,
+     },
+     {
+       -2147483648, -2147483648, -2147483648, -2147483648,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+     },
+   },
+ };
+ 
+ int64_t TEST_BINARY_DATA(int64_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+       -1, -1, -1, -1,
+       -2, -2, -2, -2,
+     },
+   },
+   {
+     { 9223372036854775807ll },
+     {
+         9223372036854775807ll,   9223372036854775807ll,   9223372036854775807ll,   9223372036854775807ll,
+                            -1,                      -1,                      -1,                      -1,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+                            -2,                      -2,                      -2,                      -2,
+     },
+     {
+        9223372036854775807ll,  9223372036854775807ll,  9223372036854775807ll,  9223372036854775807ll,
+                            -1,                      -1,                      -1,                      -1,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+                            -2,                      -2,                      -2,                      -2,
+     },
+   },
+   {
+     { -9223372036854775808ull },
+     {
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+                             1,                       1,                       1,                       1,
+         9223372036854775807ll,   9223372036854775807ll,   9223372036854775807ll,   9223372036854775807ll,
+                             2,                       2,                       2,                       2,
+     },
+     {
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+     },
+   },
+ };
+ 
+ uint8_t TEST_BINARY_DATA(uint8_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+     },
+   },
+   {
+     { 127 },
+     {
+        127,  127,  127,  127,
+        128,  128,  128,  128,
+        255,  255,  255,  255,
+          1,    1,    1,    1,
+     },
+     {
+        127,  127,  127,  127,
+        127,  127,  127,  127,
+        127,  127,  127,  127,
+          1,    1,    1,    1,
+     },
+   },
+   {
+     { 254 },
+     {
+        128,  128,  128,  128,
+        255,  255,  255,  255,
+        127,  127,  127,  127,
+          2,    2,    2,    2,
+     },
+     {
+        128,  128,  128,  128,
+        254,  254,  254,  254,
+        127,  127,  127,  127,
+          2,    2,    2,    2,
+     },
+   },
+ };
+ 
+ uint16_t TEST_BINARY_DATA(uint16_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+     },
+   },
+   {
+     { 32767 },
+     {
+        32767,  32767,  32767,  32767,
+        32768,  32768,  32768,  32768,
+        65535,  65535,  65535,  65535,
+            1,      1,      1,      1,
+     },
+     {
+        32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,
+        32767,  32767,  32767,  32767,
+            1,      1,      1,      1,
+     },
+   },
+   {
+     { 65534 },
+     {
+        32768,  32768,  32768,  32768,
+        65535,  65535,  65535,  65535,
+        32767,  32767,  32767,  32767,
+            2,      2,      2,      2,
+     },
+     {
+        32768,  32768,  32768,  32768,
+        65534,  65534,  65534,  65534,
+        32767,  32767,  32767,  32767,
+            2,      2,      2,      2,
+     },
+   },
+ };
+ 
+ uint32_t TEST_BINARY_DATA(uint32_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+     },
+   },
+   {
+     { 2147483647 },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+        2147483648,  2147483648,  2147483648,  2147483648,
+        4294967295,  4294967295,  4294967295,  4294967295,
+                 1,           1,           1,           1,
+     },
+     {
+        2147483647,  2147483647,  2147483647,  2147483647,
+        2147483647,  2147483647,  2147483647,  2147483647,
+        2147483647,  2147483647,  2147483647,  2147483647,
+                 1,           1,           1,           1,
+     },
+   },
+   {
+     { 4294967294 },
+     {
+        2147483648,  2147483648,  2147483648,  2147483648,
+        4294967295,  4294967295,  4294967295,  4294967295,
+        2147483647,  2147483647,  2147483647,  2147483647,
+                 2,           2,           2,           2,
+     },
+     {
+        2147483648,  2147483648,  2147483648,  2147483648,
+        4294967294,  4294967294,  4294967294,  4294967294,
+        2147483647,  2147483647,  2147483647,  2147483647,
+                 2,           2,           2,           2,
+     },
+   },
+ };
+ 
+ uint64_t TEST_BINARY_DATA(uint64_t, min)[][3][N] =
+ {
+   {
+     { 0 },
+     {
+        2,  2,  2,  2,
+        1,  1,  1,  1,
+        0,  0,  0,  0,
+        4,  4,  4,  4,
+     },
+     {
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+        0,  0,  0,  0,
+     },
+   },
+   {
+     { 9223372036854775807ull },
+     {
+         9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+         9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,
+        18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+                              1,                       1,                       1,                       1,
+     },
+     {
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+                             1,                       1,                       1,                       1,
+     },
+   },
+   {
+     { 18446744073709551614ull },
+     {
+        9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,
+       18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+                             2,                       2,                       2,                       2,
+     },
+     {
+        9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,  9223372036854775808ull,
+       18446744073709551614ull, 18446744073709551614ull, 18446744073709551614ull, 18446744073709551614ull,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
+                             2,                       2,                       2,                       2,
+     },
+   },
+ };
+ 
  #endif
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i16.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int16_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i32.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int32_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i64.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int64_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-i8.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int8_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u16.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint16_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u32.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint32_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u64.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint64_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-1-u8.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint8_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_0_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i16.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int16_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i32.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int32_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i64.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int64_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-i8.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          int8_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u16.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u16.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u16.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint16_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u32.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u32.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u32.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint32_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u64.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u64.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u64.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint64_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u8.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u8.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmin-run-2-u8.c	Sun Jun 22 22:33:05 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T          uint8_t
+ #define NAME       min
+ #define FUNC       MIN_FUNC_1_WARP(T)
+ #define TEST_DATA  TEST_BINARY_DATA_WRAP(T, NAME)
+ 
+ DEF_VX_BINARY_CASE_2_WRAP(T, FUNC, NAME)
+ 
+ #define TEST_RUN(T, NAME, out, in, x, n) \
+   RUN_VX_BINARY_CASE_2_WRAP(T, NAME, FUNC, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c	Sun Jun 22 22:33:06 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c	Sun Jun 22 22:33:07 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c	Sun Jun 22 22:33:07 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c	Sun Jun 22 22:33:07 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c	Sun Jun 15 22:33:15 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c	Sun Jun 22 22:33:07 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zalrsc.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zalrsc.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zalrsc.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zalrsc.c	Sun Jun 22 22:33:07 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64imfd_zalrsc -mabi=lp64" } */
+ /* { dg-skip-if "" { *-*-* } {"-O0"} } */
+ 
+ /* lr.w/sc.w */
+ int *i;
+ int lr_sc(int v)
+ {
+   return __atomic_exchange_4(i, v, __ATOMIC_RELAXED);
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mlr.w} 1 } } */
+ /* { dg-final { scan-assembler-times {\msc.w} 1 } } */
+ /* { dg-final { scan-assembler-not   {"mv\t"}   } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_reg_return_reg_reg.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_reg_return_reg_reg.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_reg_return_reg_reg.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_compare_reg_reg_return_reg_reg.c	Sun Jun 22 22:33:07 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zicond -mabi=lp64d -mtune=generic" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gc_zicond -mabi=ilp32f -mtune=generic" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" "-O3" } } */
+ 
+ #define N 10000
+ 
+ int primitiveSemantics_compare_reg_reg_return_reg_reg_00(int *a, int min_v)
+ {
+   int last = 0;
+ 
+   for (int i = 0; i < N; i++)
+   {
+     if (a[i] < min_v)
+       last = a[i];
+   }
+   return last;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mczero\.nez\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mczero\.eqz\M} 1 } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-1.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-1.c	Sun Jun 22 22:33:07 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32i_zilsd -mabi=ilp32" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ long long y;
+ long long foo(long long x)
+ {
+     return y + x;
+ }
+ 
+ /* { dg-final { scan-assembler-times "ld\t" 1 } } */
+ /* { dg-final { scan-assembler-not "lw\t" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-2.c gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gcc.target/riscv/zilsd-code-gen-split-subreg-2.c	Sun Jun 22 22:33:07 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32i_zilsd -mabi=ilp32" } */
+ 
+ long long y;
+ long long foo(long long x)
+ {
+     return y >> x;
+ }
+ /* TODO: We should not split that 64 bit load into two 32 bit load if we have
+    zilsd, but we split that during the expand time, so it's hard to fix via cost
+    model turning, we could either fix that for expander, or...combine those two
+    32 bit load back later.  */
+ /* { dg-final { scan-assembler-times "ld\t" 1 { xfail riscv*-*-*  } } } */
+ 
+ /* Os and Oz will use libcall, so the 64 bit load won't be split.  */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Os" "-Oz" } } */
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c gcc-16-20250622/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c	Sun Jun 15 22:33:25 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c	Sun Jun 22 22:33:08 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -fno-tree-vectorize -mabi=sysv" } */
  
  extern int glb1, gbl2, gbl3;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -fno-tree-vectorize -mabi=sysv -fno-shrink-wrap-separate" } */
  
  extern int glb1, gbl2, gbl3;
  
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_0.c gcc-16-20250622/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_0.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_0.c	Sun Jun 15 22:33:25 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_0.c	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fpeephole2" } */
- 
- /* can be processed */
- double test0(double a, double b) {
-   return __builtin_copysign(a, b);
- }
- 
- /* cannot be processed: due to violate '0' constraint of the 2nd source operand.  */
- int test1(int a, int b) {
-   int c;
-   asm volatile ("" : "=a"(c) : "r"(a), "0"(b));
-   return c;
- }
- 
- /* cannot be processed: due to violate '&' constraint of the destination operand.  */
- int test2(int a) {
-   int b;
-   asm volatile ("" : "=&a"(b) : "r"(a));
-   return b;
- }
- 
- /* { dg-final { scan-assembler-times "mov\t|mov.n\t" 2 } } */
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_1.c gcc-16-20250622/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_1.c
*** gcc-16-20250615/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_1.c	Sun Jun 15 22:33:25 2025
--- gcc-16-20250622/gcc/testsuite/gcc.target/xtensa/elim_GP_regmove_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fpeephole2 -mabi=windowed" } */
- 
- /* cannot be processed: due to violate 'a' constraint of the destination operand of the stack adjustment instruction.  */
- void test(void) {
-   int buffer[8192];
-   asm volatile ("" : : "m"(buffer));
- }
- 
- /* { dg-final { scan-assembler-times "movsp" 1 } } */
--- 0 ----
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gfortran.dg/allocate_with_mold_5.f90 gcc-16-20250622/gcc/testsuite/gfortran.dg/allocate_with_mold_5.f90
*** gcc-16-20250615/gcc/testsuite/gfortran.dg/allocate_with_mold_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gfortran.dg/allocate_with_mold_5.f90	Sun Jun 22 22:33:13 2025
***************
*** 0 ****
--- 1,51 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wsurprising" }
+ !
+ ! PR fortran/51961 - fix checking of MOLD= in ALLOCATE statements
+ !
+ ! Contributed by Tobias Burnus
+ 
+ program p
+   implicit none
+   type t
+   end type t
+   type u
+      class(t), allocatable :: a(:), b(:,:), c
+   end type u
+   class(T), allocatable :: a(:), b(:,:), c
+   type(u) :: z
+ 
+   allocate (b(2,2))
+   allocate (z% b(2,2))
+ 
+   allocate (a(2),      mold=b(:,1))
+   allocate (a(1:2),    mold=b(1,:))
+   allocate (a(2),      mold=b)        ! { dg-warning "but MOLD= expression at" }
+   allocate (a(1:2),    mold=b)        ! { dg-warning "but MOLD= expression at" }
+   allocate (z% a(2),   mold=b(:,1))
+   allocate (z% a(1:2), mold=b(1,:))
+   allocate (z% a(2),   mold=b)        ! { dg-warning "but MOLD= expression at" }
+   allocate (z% a(1:2), mold=b)        ! { dg-warning "but MOLD= expression at" }
+   allocate (z% a(2),   mold=z% b(:,1))
+   allocate (z% a(1:2), mold=z% b(1,:))
+   allocate (z% a(2),   mold=z% b)     ! { dg-warning "but MOLD= expression at" }
+   allocate (z% a(1:2), mold=z% b)     ! { dg-warning "but MOLD= expression at" }
+ 
+   allocate (c,      mold=b(1,1))
+   allocate (c,      mold=b)           ! { dg-warning "but MOLD= expression at" }
+   allocate (z% c,   mold=b(1,1))
+   allocate (z% c,   mold=b)           ! { dg-warning "but MOLD= expression at" }
+   allocate (z% c,   mold=z% b(1,1))
+   allocate (z% c,   mold=z% b)        ! { dg-warning "but MOLD= expression at" }
+ 
+   allocate (a,      mold=b(:,1))
+   allocate (a,      mold=b(1,:))
+   allocate (z% a,   mold=b(:,1))
+   allocate (z% a,   mold=b(1,:))
+   allocate (z% a,   mold=z% b(:,1))
+   allocate (z% a,   mold=z% b(1,:))
+ 
+   allocate (a,      mold=b)      ! { dg-error "or have the same rank" }
+   allocate (z% a,   mold=b)      ! { dg-error "or have the same rank" }
+   allocate (z% a,   mold=z% b)   ! { dg-error "or have the same rank" }
+ end
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gfortran.dg/guality/arg1.f90 gcc-16-20250622/gcc/testsuite/gfortran.dg/guality/arg1.f90
*** gcc-16-20250615/gcc/testsuite/gfortran.dg/guality/arg1.f90	Sun Jun 15 22:33:30 2025
--- gcc-16-20250622/gcc/testsuite/gfortran.dg/guality/arg1.f90	Sun Jun 22 22:33:15 2025
***************
*** 1,5 ****
  ! { dg-do run }
! ! { dg-options "-g" }
    integer :: a(10), b(12)
    call sub (a, 10)
    call sub (b, 12)
--- 1,5 ----
  ! { dg-do run }
! ! { dg-options "-fno-shrink-wrap -g" }
    integer :: a(10), b(12)
    call sub (a, 10)
    call sub (b, 12)
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gfortran.dg/save_alloc_character_1.f90 gcc-16-20250622/gcc/testsuite/gfortran.dg/save_alloc_character_1.f90
*** gcc-16-20250615/gcc/testsuite/gfortran.dg/save_alloc_character_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gfortran.dg/save_alloc_character_1.f90	Sun Jun 22 22:33:16 2025
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/120713
+ ! Check that the length variable of SAVEd allocatable character arrays are
+ ! not initialized at function entry.
+ 
+ program p
+   implicit none
+   call s(1)
+   call s(2)
+ contains
+   subroutine s(i)
+     integer, intent(in) :: i
+     character(len=:), allocatable, save :: a(:)
+     integer :: j
+     if (i == 1) then
+       allocate(a, source= [ ('x' // achar(ichar('0') + j), j=1,7) ])
+     else
+       if (len(a) /= 2) error stop 1
+       if (any(a /= ['x1','x2','x3','x4','x5','x6','x7'])) error stop 2
+     end if
+   end subroutine s
+ end program p
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gfortran.dg/stat_3.f90 gcc-16-20250622/gcc/testsuite/gfortran.dg/stat_3.f90
*** gcc-16-20250615/gcc/testsuite/gfortran.dg/stat_3.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gfortran.dg/stat_3.f90	Sun Jun 22 22:33:16 2025
***************
*** 0 ****
--- 1,46 ----
+ ! { dg-do compile }
+ ! PR fortran/82480 - checking of arguments to STAT/LSTAT/FSTAT
+ 
+ subroutine sub1 ()
+   integer, parameter  :: ik = kind(1)
+   integer(ik)         :: buff12(12)
+   integer(ik)         :: buff13(13)
+   integer(ik)         :: unit = 10
+   integer(ik)         :: ierr
+   character(len=64)   :: name = "/etc/passwd"
+   ierr = stat  (name, values= buff12)  ! { dg-error "too small" }
+   ierr = stat  (name, values= buff13)
+   ierr = lstat (name, values= buff12)  ! { dg-error "too small" }
+   ierr = lstat (name, values= buff13)
+   ierr = fstat (unit, values= buff12)  ! { dg-error "too small" }
+   ierr = fstat (unit, values= buff13)
+   ierr = stat  (name, values=(buff13)) ! { dg-error "must be a variable" }
+   ierr = lstat (name, values=(buff13)) ! { dg-error "must be a variable" }
+   ierr = fstat (unit, values=(buff13)) ! { dg-error "must be a variable" }
+ end
+ 
+ subroutine sub2 ()
+   integer, parameter  :: ik = kind(1)
+   integer(ik)         :: buff12(12)
+   integer(ik), target :: buff13(13) = 0
+   integer(ik)         :: unit = 10
+   integer(ik), target :: ierr = 0
+   character(len=64)   :: name = "/etc/passwd"
+   integer(ik),pointer :: pbuf(:) => buff13
+   integer(ik),pointer :: perr    => ierr
+   call stat  (name, status=ierr, values= buff12)  ! { dg-error "too small" }
+   call stat  (name, status=ierr, values= buff13)
+   call lstat (name, status=ierr, values= buff12)  ! { dg-error "too small" }
+   call lstat (name, status=ierr, values= buff13)
+   call fstat (unit, status=ierr, values= buff12)  ! { dg-error "too small" }
+   call fstat (unit, status=ierr, values= buff13)
+   call stat  (name, status=ierr, values=(buff13)) ! { dg-error "must be a variable" }
+   call lstat (name, status=ierr, values=(buff13)) ! { dg-error "must be a variable" }
+   call fstat (unit, status=ierr, values=(buff13)) ! { dg-error "must be a variable" }
+   call stat  (name, status=(ierr),values=buff13)  ! { dg-error "must be a variable" }
+   call lstat (name, status=(ierr),values=buff13)  ! { dg-error "must be a variable" }
+   call fstat (unit, status=(ierr),values=buff13)  ! { dg-error "must be a variable" }
+   call stat  (name, status=perr, values= pbuf)
+   call lstat (name, status=perr, values= pbuf)
+   call fstat (unit, status=perr, values= pbuf)
+ end
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gm2/pim/fail/badmodvar.mod gcc-16-20250622/gcc/testsuite/gm2/pim/fail/badmodvar.mod
*** gcc-16-20250615/gcc/testsuite/gm2/pim/fail/badmodvar.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gm2/pim/fail/badmodvar.mod	Sun Jun 22 22:33:17 2025
***************
*** 0 ****
--- 1,7 ----
+ MODULE badmodvar ;
+ 
+ VAR
+    x: y ;
+ BEGIN
+ 
+ END badmodvar.
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gm2/pim/fail/cyclictypes.mod gcc-16-20250622/gcc/testsuite/gm2/pim/fail/cyclictypes.mod
*** gcc-16-20250615/gcc/testsuite/gm2/pim/fail/cyclictypes.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gm2/pim/fail/cyclictypes.mod	Sun Jun 22 22:33:17 2025
***************
*** 0 ****
--- 1,13 ----
+ MODULE cyclictypes ;
+ 
+ TYPE
+    A = B;
+    B = A;
+ 
+ PROCEDURE foo ;
+ VAR
+    bar: A ;
+ END foo ;
+ 
+ 
+ END cyclictypes.
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod gcc-16-20250622/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod
*** gcc-16-20250615/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod	Sun Jun 22 22:33:17 2025
***************
*** 0 ****
--- 1,9 ----
+ MODULE cyclictypes2 ;
+ 
+ TYPE
+    A = B;
+    B = A;
+ 
+ VAR
+    bar: A ;
+ END cyclictypes2.
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod gcc-16-20250622/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod
*** gcc-16-20250615/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod	Sun Jun 22 22:33:17 2025
***************
*** 0 ****
--- 1,13 ----
+ MODULE cyclictypes4 ;
+ 
+ TYPE
+    A = B ;
+    B = C ;
+    C = D ;
+    D = A ;
+ 
+ VAR
+    v: A ;
+ BEGIN
+ 
+ END cyclictypes4.
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod gcc-16-20250622/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod
*** gcc-16-20250615/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod	Sun Jun 22 22:33:18 2025
***************
*** 0 ****
--- 1,16 ----
+ MODULE teststrings ;
+ 
+ IMPORT InOut,Strings;
+ 
+ VAR
+    content : ARRAY[1..256] OF CHAR;
+    position: CARDINAL;
+ 
+ (* the content is just random text.  *)
+ 
+ BEGIN
+    content := "erreur: In program module « essai3 »: attempting to pass (1) parameters to procedure";
+    InOut.WriteString(content);
+    InOut.WriteLn;
+    position := Strings.Pos ("IMPORT", content);
+ END teststrings .
diff -Nrcpad gcc-16-20250615/gcc/testsuite/gnat.dg/specs/aggr8.ads gcc-16-20250622/gcc/testsuite/gnat.dg/specs/aggr8.ads
*** gcc-16-20250615/gcc/testsuite/gnat.dg/specs/aggr8.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/gcc/testsuite/gnat.dg/specs/aggr8.ads	Sun Jun 22 22:33:20 2025
***************
*** 0 ****
--- 1,14 ----
+ -- PR ada/120665
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ package Aggr8 is
+ 
+   type T is null record
+     with Aggregate => (Empty => Empty, Add_Named => Add_Named);
+ 
+   function Empty return T is ([]);  -- { dg-warning "empty|infinite" }
+ 
+   procedure Add_Named (this : in out T; k : Integer; v : Integer) is null;
+ 
+ end Aggr8;
diff -Nrcpad gcc-16-20250615/gcc/testsuite/lib/target-supports.exp gcc-16-20250622/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20250615/gcc/testsuite/lib/target-supports.exp	Sun Jun 15 22:33:45 2025
--- gcc-16-20250622/gcc/testsuite/lib/target-supports.exp	Sun Jun 22 22:33:22 2025
*************** proc check_effective_target_aarch64_tiny
*** 12442,12447 ****
--- 12442,12462 ----
      }
  }
  
+ # Return 1 if Gas supports AEABI build attributes on AArch64 target
+ proc check_effective_target_aarch64_gas_has_build_attributes { } {
+     if { ![istarget aarch64*-*-*] } {
+ 	return 0
+     }
+ 
+     return [check_no_compiler_messages aarch64_gas_has_build_attributes object {
+ 	/* Assembly */
+ 	.aeabi_subsection aeabi_feature_and_bits, optional, ULEB128
+ 	.aeabi_attribute Tag_Feature_BTI, 1
+ 	.aeabi_attribute Tag_Feature_PAC, 1
+ 	.aeabi_attribute Tag_Feature_GCS, 1
+     }]
+ }
+ 
  # Create functions to check that the AArch64 assembler supports the
  # various architecture extensions via the .arch_extension pseudo-op.
  
diff -Nrcpad gcc-16-20250615/gcc/tree-cfg.cc gcc-16-20250622/gcc/tree-cfg.cc
*** gcc-16-20250615/gcc/tree-cfg.cc	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/gcc/tree-cfg.cc	Sun Jun 22 22:33:24 2025
*************** gimple_verify_flow_info (void)
*** 5760,5766 ****
    if (!EXIT_BLOCK_PTR_FOR_FN (cfun)
  	->count.compatible_p (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count))
      {
!       error ("exit block count is not compoatible with entry block count");
        err = true;
      }
  
--- 5760,5766 ----
    if (!EXIT_BLOCK_PTR_FOR_FN (cfun)
  	->count.compatible_p (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count))
      {
!       error ("exit block count is not compatible with entry block count");
        err = true;
      }
  
*************** gimple_verify_flow_info (void)
*** 5788,5794 ****
          }
        if (!bb->count.compatible_p (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count))
  	{
! 	  error ("count of bb %d is not compoatible with entry block count",
  		 bb->index);
  	  err = true;
  	}
--- 5788,5794 ----
          }
        if (!bb->count.compatible_p (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count))
  	{
! 	  error ("count of bb %d is not compatible with entry block count",
  		 bb->index);
  	  err = true;
  	}
*************** dump_function_to_file (tree fndecl, FILE
*** 8339,8345 ****
  	    fprintf (file, ", ");
  
  	  tree name = get_attribute_name (chain);
! 	  print_generic_expr (file, name, dump_flags);
  	  if (TREE_VALUE (chain) != NULL_TREE)
  	    {
  	      fprintf (file, " (");
--- 8339,8345 ----
  	    fprintf (file, ", ");
  
  	  tree name = get_attribute_name (chain);
! 	  print_generic_expr (file, name, flags);
  	  if (TREE_VALUE (chain) != NULL_TREE)
  	    {
  	      fprintf (file, " (");
*************** dump_function_to_file (tree fndecl, FILE
*** 8350,8362 ****
  				"omp declare variant base"))
  		{
  		  tree a = TREE_VALUE (chain);
! 		  print_generic_expr (file, TREE_PURPOSE (a), dump_flags);
  		  fprintf (file, " match ");
  		  print_omp_context_selector (file, TREE_VALUE (a),
! 					      dump_flags);
  		}
  	      else
! 		print_generic_expr (file, TREE_VALUE (chain), dump_flags);
  	      fprintf (file, ")");
  	    }
  	}
--- 8350,8362 ----
  				"omp declare variant base"))
  		{
  		  tree a = TREE_VALUE (chain);
! 		  print_generic_expr (file, TREE_PURPOSE (a), flags);
  		  fprintf (file, " match ");
  		  print_omp_context_selector (file, TREE_VALUE (a),
! 					      flags);
  		}
  	      else
! 		print_generic_expr (file, TREE_VALUE (chain), flags);
  	      fprintf (file, ")");
  	    }
  	}
*************** dump_function_to_file (tree fndecl, FILE
*** 8378,8384 ****
  	}
  
        print_generic_expr (file, TREE_TYPE (TREE_TYPE (fndecl)),
! 			  dump_flags | TDF_SLIM);
        fprintf (file, " __GIMPLE (%s",
  	       (fun->curr_properties & PROP_ssa) ? "ssa"
  	       : (fun->curr_properties & PROP_cfg) ? "cfg"
--- 8378,8384 ----
  	}
  
        print_generic_expr (file, TREE_TYPE (TREE_TYPE (fndecl)),
! 			  flags | TDF_SLIM);
        fprintf (file, " __GIMPLE (%s",
  	       (fun->curr_properties & PROP_ssa) ? "ssa"
  	       : (fun->curr_properties & PROP_cfg) ? "cfg"
*************** dump_function_to_file (tree fndecl, FILE
*** 8391,8397 ****
  	    fprintf (file, ",%s(%" PRIu64 ")",
  		     profile_quality_as_string (bb->count.quality ()),
  		     bb->count.value ());
! 	  if (dump_flags & TDF_UID)
  	    fprintf (file, ")\n%sD_%u (", function_name (fun),
  		     DECL_UID (fndecl));
  	  else
--- 8391,8397 ----
  	    fprintf (file, ",%s(%" PRIu64 ")",
  		     profile_quality_as_string (bb->count.quality ()),
  		     bb->count.value ());
! 	  if (flags & TDF_UID)
  	    fprintf (file, ")\n%sD_%u (", function_name (fun),
  		     DECL_UID (fndecl));
  	  else
*************** dump_function_to_file (tree fndecl, FILE
*** 8400,8407 ****
      }
    else
      {
!       print_generic_expr (file, TREE_TYPE (fntype), dump_flags);
!       if (dump_flags & TDF_UID)
  	fprintf (file, " %sD.%u %s(", function_name (fun), DECL_UID (fndecl),
  		 tmclone ? "[tm-clone] " : "");
        else
--- 8400,8407 ----
      }
    else
      {
!       print_generic_expr (file, TREE_TYPE (fntype), flags);
!       if (flags & TDF_UID)
  	fprintf (file, " %sD.%u %s(", function_name (fun), DECL_UID (fndecl),
  		 tmclone ? "[tm-clone] " : "");
        else
*************** dump_function_to_file (tree fndecl, FILE
*** 8412,8420 ****
    arg = DECL_ARGUMENTS (fndecl);
    while (arg)
      {
!       print_generic_expr (file, TREE_TYPE (arg), dump_flags);
        fprintf (file, " ");
!       print_generic_expr (file, arg, dump_flags);
        if (DECL_CHAIN (arg))
  	fprintf (file, ", ");
        arg = DECL_CHAIN (arg);
--- 8412,8420 ----
    arg = DECL_ARGUMENTS (fndecl);
    while (arg)
      {
!       print_generic_expr (file, TREE_TYPE (arg), flags);
        fprintf (file, " ");
!       print_generic_expr (file, arg, flags);
        if (DECL_CHAIN (arg))
  	fprintf (file, ", ");
        arg = DECL_CHAIN (arg);
diff -Nrcpad gcc-16-20250615/gcc/tree-inline.cc gcc-16-20250622/gcc/tree-inline.cc
*** gcc-16-20250615/gcc/tree-inline.cc	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/gcc/tree-inline.cc	Sun Jun 22 22:33:24 2025
*************** copy_cfg_body (copy_body_data * id,
*** 3084,3090 ****
    /* Register specific tree functions.  */
    gimple_register_cfg_hooks ();
  
!   /* If we are inlining just region of the function, make sure to connect
       new entry to ENTRY_BLOCK_PTR_FOR_FN (cfun).  Since new entry can be
       part of loop, we must compute frequency and probability of
       ENTRY_BLOCK_PTR_FOR_FN (cfun) based on the frequencies and
--- 3084,3090 ----
    /* Register specific tree functions.  */
    gimple_register_cfg_hooks ();
  
!   /* If we are offlining region of the function, make sure to connect
       new entry to ENTRY_BLOCK_PTR_FOR_FN (cfun).  Since new entry can be
       part of loop, we must compute frequency and probability of
       ENTRY_BLOCK_PTR_FOR_FN (cfun) based on the frequencies and
*************** copy_cfg_body (copy_body_data * id,
*** 3093,3104 ****
      {
        edge e;
        edge_iterator ei;
!       den = profile_count::zero ();
  
        FOR_EACH_EDGE (e, ei, new_entry->preds)
  	if (!e->src->aux)
! 	  den += e->count ();
!       ENTRY_BLOCK_PTR_FOR_FN (cfun)->count = den;
      }
  
    profile_count::adjust_for_ipa_scaling (&num, &den);
--- 3093,3106 ----
      {
        edge e;
        edge_iterator ei;
!       ENTRY_BLOCK_PTR_FOR_FN (cfun)->count = profile_count::zero ();
  
        FOR_EACH_EDGE (e, ei, new_entry->preds)
  	if (!e->src->aux)
! 	  ENTRY_BLOCK_PTR_FOR_FN (cfun)->count += e->count ();
!       /* Do not scale - the profile of offlined region should
! 	 remain unchanged.  */
!       num = den = profile_count::one ();
      }
  
    profile_count::adjust_for_ipa_scaling (&num, &den);
*************** expand_call_inline (basic_block bb, gimp
*** 4846,4852 ****
      goto egress;
  
    cg_edge = id->dst_node->get_edge (stmt);
!   gcc_checking_assert (cg_edge);
    /* First, see if we can figure out what function is being called.
       If we cannot, then there is no hope of inlining the function.  */
    if (cg_edge->indirect_unknown_callee)
--- 4848,4856 ----
      goto egress;
  
    cg_edge = id->dst_node->get_edge (stmt);
!   /* Edge should exist and speculations should be resolved at this
!      stage.  */
!   gcc_checking_assert (cg_edge && !cg_edge->speculative);
    /* First, see if we can figure out what function is being called.
       If we cannot, then there is no hope of inlining the function.  */
    if (cg_edge->indirect_unknown_callee)
diff -Nrcpad gcc-16-20250615/gcc/value-range.cc gcc-16-20250622/gcc/value-range.cc
*** gcc-16-20250615/gcc/value-range.cc	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/gcc/value-range.cc	Sun Jun 22 22:33:24 2025
*************** irange::verify_range ()
*** 1552,1557 ****
--- 1552,1562 ----
        gcc_checking_assert (ub.get_precision () == prec);
        int c = wi::cmp (lb, ub, TYPE_SIGN (m_type));
        gcc_checking_assert (c == 0 || c == -1);
+       // Previous UB should be lower than LB
+       if (i > 0)
+ 	gcc_checking_assert (wi::lt_p (upper_bound (i - 1),
+ 				       lb,
+ 				       TYPE_SIGN (m_type)));
      }
    m_bitmask.verify_mask ();
  }
*************** irange::contains_p (const wide_int &cst)
*** 1628,1637 ****
    if (undefined_p ())
      return false;
  
!   // See if we can exclude CST based on the known 0 bits.
!   if (!m_bitmask.unknown_p ()
!       && cst != 0
!       && wi::bit_and (m_bitmask.get_nonzero_bits (), cst) == 0)
      return false;
  
    signop sign = TYPE_SIGN (type ());
--- 1633,1640 ----
    if (undefined_p ())
      return false;
  
!   // Check if the known bits in bitmask exclude CST.
!   if (!m_bitmask.member_p (cst))
      return false;
  
    signop sign = TYPE_SIGN (type ());
*************** irange::irange_contains_p (const irange
*** 1899,1910 ****
    gcc_checking_assert (!undefined_p () && !varying_p ());
    gcc_checking_assert (!r.undefined_p () && !varying_p ());
  
    // In order for THIS to fully contain R, all of the pairs within R must
    // be fully contained by the pairs in this object.
    signop sign = TYPE_SIGN (m_type);
    unsigned ri = 0;
    unsigned i = 0;
!   wide_int rl = r.m_base[0];
    wide_int ru = r.m_base[1];
    wide_int l = m_base[0];
    wide_int u = m_base[1];
--- 1902,1918 ----
    gcc_checking_assert (!undefined_p () && !varying_p ());
    gcc_checking_assert (!r.undefined_p () && !varying_p ());
  
+   // Check singletons directly which will include any bitmasks.
+   wide_int rl;
+   if (r.singleton_p (rl))
+     return contains_p (rl);
+ 
    // In order for THIS to fully contain R, all of the pairs within R must
    // be fully contained by the pairs in this object.
    signop sign = TYPE_SIGN (m_type);
    unsigned ri = 0;
    unsigned i = 0;
!   rl = r.m_base[0];
    wide_int ru = r.m_base[1];
    wide_int l = m_base[0];
    wide_int u = m_base[1];
*************** irange::intersect (const vrange &v)
*** 1973,1978 ****
--- 1981,1996 ----
        return res;
      }
  
+   // If either range is a singleton and the other range does not contain
+   // it, the result is undefined.
+   wide_int val;
+   if ((singleton_p (val) && !r.contains_p (val))
+       || (r.singleton_p (val) && !contains_p (val)))
+     {
+       set_undefined ();
+       return true;
+     }
+ 
    // If R fully contains this, then intersection will change nothing.
    if (r.irange_contains_p (*this))
      return intersect_bitmask (r);
*************** irange::invert ()
*** 2254,2259 ****
--- 2272,2364 ----
      verify_range ();
  }
  
+ // This routine will take the bounds [LB, UB], and apply the bitmask to those
+ // values such that both bounds satisfy the bitmask.  TRUE is returned
+ // if either bound changes, and they are returned as [NEW_LB, NEW_UB].
+ // if NEW_UB < NEW_LB, then the entire bound is to be removed as none of
+ // the values are valid.
+ //   ie,   [4, 14] MASK 0xFFFE  VALUE 0x1
+ // means all values must be odd, the new bounds returned will be [5, 13].
+ //   ie,   [4, 4] MASK 0xFFFE  VALUE 0x1
+ // would return [1, 0] and as the LB < UB,   the entire subrange is invalid
+ // and should be removed.
+ 
+ bool
+ irange::snap (const wide_int &lb, const wide_int &ub,
+ 	      wide_int &new_lb, wide_int &new_ub)
+ {
+   int z = wi::ctz (m_bitmask.mask ());
+   if (z == 0)
+     return false;
+ 
+   const wide_int step = (wi::one (TYPE_PRECISION (type ())) << z);
+   const wide_int match_mask = step - 1;
+   const wide_int value = m_bitmask.value () & match_mask;
+ 
+   bool ovf = false;
+ 
+   wide_int rem_lb = lb & match_mask;
+   wide_int offset = (value - rem_lb) & match_mask;
+   new_lb = lb + offset;
+   // Check for overflows at +INF
+   if (wi::lt_p (new_lb, lb, TYPE_SIGN (type ())))
+     ovf = true;
+ 
+   wide_int rem_ub = ub & match_mask;
+   wide_int offset_ub = (rem_ub - value) & match_mask;
+   new_ub = ub - offset_ub;
+   // Check for underflows at -INF
+   if (wi::gt_p (new_ub, ub, TYPE_SIGN (type ())))
+     ovf = true;
+ 
+   // Overflow or inverted range = invalid
+   if (ovf || wi::lt_p (new_ub, new_lb, TYPE_SIGN (type ())))
+     {
+       new_lb = wi::one (lb.get_precision ());
+       new_ub = wi::zero (ub.get_precision ());
+       return true;
+     }
+   return (new_lb != lb) || (new_ub != ub);
+ }
+ 
+ // This method loops through the subranges in THIS, and adjusts any bounds
+ // to satisfy the contraints of the BITMASK.  If a subrange is invalid,
+ // it is removed.   TRUE is returned if there were any changes.
+ 
+ bool
+ irange::snap_subranges ()
+ {
+   bool changed = false;
+   int_range_max invalid;
+   unsigned x;
+   wide_int lb, ub;
+   for (x = 0; x < m_num_ranges; x++)
+     {
+       if (snap (lower_bound (x), upper_bound (x), lb, ub))
+ 	{
+ 	  changed = true;
+ 	  //  This subrange is to be completely removed.
+ 	  if (wi::lt_p (ub, lb, TYPE_SIGN (type ())))
+ 	    {
+ 	      int_range<1> tmp (type (), lower_bound (x), upper_bound (x));
+ 	      invalid.union_ (tmp);
+ 	      continue;
+ 	    }
+ 	  if (lower_bound (x) != lb)
+ 	    m_base[x * 2] = lb;
+ 	  if (upper_bound (x) != ub)
+ 	    m_base[x * 2 + 1] = ub;
+ 	}
+     }
+   // Remove any subranges which are no invalid.
+   if (!invalid.undefined_p ())
+     {
+       invalid.invert ();
+       intersect (invalid);
+     }
+   return changed;
+ }
+ 
  // If the mask can be trivially converted to a range, do so.
  // Otherwise attempt to remove the lower bits from the range.
  // Return true if the range changed in any way.
*************** irange::set_range_from_bitmask ()
*** 2353,2358 ****
--- 2458,2466 ----
  
    // Make sure we call intersect, so do it first.
    changed = intersect (mask_range) | changed;
+   // Now make sure each subrange endpoint matches the bitmask.
+   changed |= snap_subranges ();
+ 
    return changed;
  }
  
*************** irange::intersect_bitmask (const irange
*** 2444,2458 ****
    irange_bitmask bm = get_bitmask ();
    irange_bitmask save = bm;
    bm.intersect (r.get_bitmask ());
!   if (save == bm)
!     return false;
! 
    m_bitmask = bm;
  
    // Updating m_bitmask may still yield a semantic bitmask (as
    // returned by get_bitmask) which is functionally equivalent to what
    // we originally had.  In which case, there's still no change.
!   if (save == get_bitmask ())
      return false;
  
    if (!set_range_from_bitmask ())
--- 2552,2565 ----
    irange_bitmask bm = get_bitmask ();
    irange_bitmask save = bm;
    bm.intersect (r.get_bitmask ());
!   // Use ths opportunity to make sure mask always reflects the
!   // best mask we have.
    m_bitmask = bm;
  
    // Updating m_bitmask may still yield a semantic bitmask (as
    // returned by get_bitmask) which is functionally equivalent to what
    // we originally had.  In which case, there's still no change.
!   if (save == bm || save == get_bitmask ())
      return false;
  
    if (!set_range_from_bitmask ())
diff -Nrcpad gcc-16-20250615/gcc/value-range.h gcc-16-20250622/gcc/value-range.h
*** gcc-16-20250615/gcc/value-range.h	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/gcc/value-range.h	Sun Jun 22 22:33:24 2025
*************** private:
*** 344,349 ****
--- 344,351 ----
    bool intersect_bitmask (const irange &r);
    bool union_bitmask (const irange &r);
    bool set_range_from_bitmask ();
+   bool snap_subranges ();
+   bool snap (const wide_int &, const wide_int &, wide_int &, wide_int &);
  
    bool intersect (const wide_int& lb, const wide_int& ub);
    bool union_append (const irange &r);
diff -Nrcpad gcc-16-20250615/gcc/vr-values.cc gcc-16-20250622/gcc/vr-values.cc
*** gcc-16-20250615/gcc/vr-values.cc	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/gcc/vr-values.cc	Sun Jun 22 22:33:24 2025
*************** simplify_using_ranges::legacy_fold_cond
*** 513,597 ****
      }
  }
  
- /* Searches the case label vector VEC for the ranges of CASE_LABELs that are
-    used in range VR.  The indices are placed in MIN_IDX1, MAX_IDX, MIN_IDX2 and
-    MAX_IDX2.  If the ranges of CASE_LABELs are empty then MAX_IDX1 < MIN_IDX1.
-    Returns true if the default label is not needed.  */
- 
- static bool
- find_case_label_ranges (gswitch *stmt, const irange *vr,
- 			size_t *min_idx1, size_t *max_idx1,
- 			size_t *min_idx2, size_t *max_idx2)
- {
-   size_t i, j, k, l;
-   unsigned int n = gimple_switch_num_labels (stmt);
-   bool take_default;
-   tree case_low, case_high;
-   tree min, max;
-   value_range_kind kind = get_legacy_range (*vr, min, max);
- 
-   gcc_checking_assert (!vr->varying_p () && !vr->undefined_p ());
- 
-   take_default = !find_case_label_range (stmt, min, max, &i, &j);
- 
-   /* Set second range to empty.  */
-   *min_idx2 = 1;
-   *max_idx2 = 0;
- 
-   if (kind == VR_RANGE)
-     {
-       *min_idx1 = i;
-       *max_idx1 = j;
-       return !take_default;
-     }
- 
-   /* Set first range to all case labels.  */
-   *min_idx1 = 1;
-   *max_idx1 = n - 1;
- 
-   if (i > j)
-     return false;
- 
-   /* Make sure all the values of case labels [i , j] are contained in
-      range [MIN, MAX].  */
-   case_low = CASE_LOW (gimple_switch_label (stmt, i));
-   case_high = CASE_HIGH (gimple_switch_label (stmt, j));
-   if (tree_int_cst_compare (case_low, min) < 0)
-     i += 1;
-   if (case_high != NULL_TREE
-       && tree_int_cst_compare (max, case_high) < 0)
-     j -= 1;
- 
-   if (i > j)
-     return false;
- 
-   /* If the range spans case labels [i, j], the corresponding anti-range spans
-      the labels [1, i - 1] and [j + 1, n -  1].  */
-   k = j + 1;
-   l = n - 1;
-   if (k > l)
-     {
-       k = 1;
-       l = 0;
-     }
- 
-   j = i - 1;
-   i = 1;
-   if (i > j)
-     {
-       i = k;
-       j = l;
-       k = 1;
-       l = 0;
-     }
- 
-   *min_idx1 = i;
-   *max_idx1 = j;
-   *min_idx2 = k;
-   *max_idx2 = l;
-   return false;
- }
- 
  /* Simplify boolean operations if the source is known
     to be already a boolean.  */
  bool
--- 513,518 ----
*************** range_fits_type_p (const irange *vr,
*** 1023,1028 ****
--- 944,953 ----
    widest_int tem;
    signop src_sgn;
  
+   /* Now we can only handle ranges with constant bounds.  */
+   if (vr->undefined_p () || vr->varying_p ())
+     return false;
+ 
    /* We can only handle integral and pointer types.  */
    src_type = vr->type ();
    if (!INTEGRAL_TYPE_P (src_type)
*************** range_fits_type_p (const irange *vr,
*** 1031,1047 ****
  
    /* An extension is fine unless VR is SIGNED and dest_sgn is UNSIGNED,
       and so is an identity transform.  */
!   src_precision = TYPE_PRECISION (vr->type ());
    src_sgn = TYPE_SIGN (src_type);
    if ((src_precision < dest_precision
         && !(dest_sgn == UNSIGNED && src_sgn == SIGNED))
        || (src_precision == dest_precision && src_sgn == dest_sgn))
      return true;
  
-   /* Now we can only handle ranges with constant bounds.  */
-   if (vr->undefined_p () || vr->varying_p ())
-     return false;
- 
    wide_int vrmin = vr->lower_bound ();
    wide_int vrmax = vr->upper_bound ();
  
--- 956,968 ----
  
    /* An extension is fine unless VR is SIGNED and dest_sgn is UNSIGNED,
       and so is an identity transform.  */
!   src_precision = TYPE_PRECISION (src_type);
    src_sgn = TYPE_SIGN (src_type);
    if ((src_precision < dest_precision
         && !(dest_sgn == UNSIGNED && src_sgn == SIGNED))
        || (src_precision == dest_precision && src_sgn == dest_sgn))
      return true;
  
    wide_int vrmin = vr->lower_bound ();
    wide_int vrmax = vr->upper_bound ();
  
*************** bool
*** 1374,1530 ****
  simplify_using_ranges::simplify_switch_using_ranges (gswitch *stmt)
  {
    tree op = gimple_switch_index (stmt);
!   int_range_max vr;
!   bool take_default;
    edge e;
-   edge_iterator ei;
-   size_t i = 0, j = 0, n, n2;
-   tree vec2;
    switch_update su;
-   size_t k = 1, l = 0;
  
!   if (TREE_CODE (op) == SSA_NAME)
!     {
!       if (!query->range_of_expr (vr, op, stmt)
! 	  || vr.varying_p () || vr.undefined_p ())
! 	return false;
! 
!       /* Find case label for min/max of the value range.  */
!       take_default = !find_case_label_ranges (stmt, &vr, &i, &j, &k, &l);
!     }
!   else if (TREE_CODE (op) == INTEGER_CST)
!     {
!       take_default = !find_case_label_index (stmt, 1, op, &i);
!       if (take_default)
! 	{
! 	  i = 1;
! 	  j = 0;
! 	}
!       else
! 	{
! 	  j = i;
! 	}
!     }
!   else
      return false;
  
!   n = gimple_switch_num_labels (stmt);
  
!   /* We can truncate the case label ranges that partially overlap with OP's
!      value range.  */
!   size_t min_idx = 1, max_idx = 0;
!   tree min, max;
!   value_range_kind kind = get_legacy_range (vr, min, max);
!   if (!vr.undefined_p ())
!     find_case_label_range (stmt, min, max, &min_idx, &max_idx);
!   if (min_idx <= max_idx)
      {
!       tree min_label = gimple_switch_label (stmt, min_idx);
!       tree max_label = gimple_switch_label (stmt, max_idx);
  
!       /* Avoid changing the type of the case labels when truncating.  */
!       tree case_label_type = TREE_TYPE (CASE_LOW (min_label));
!       tree vr_min = fold_convert (case_label_type, min);
!       tree vr_max = fold_convert (case_label_type, max);
  
!       if (kind == VR_RANGE)
! 	{
! 	  /* If OP's value range is [2,8] and the low label range is
! 	     0 ... 3, truncate the label's range to 2 .. 3.  */
! 	  if (tree_int_cst_compare (CASE_LOW (min_label), vr_min) < 0
! 	      && CASE_HIGH (min_label) != NULL_TREE
! 	      && tree_int_cst_compare (CASE_HIGH (min_label), vr_min) >= 0)
! 	    CASE_LOW (min_label) = vr_min;
  
! 	  /* If OP's value range is [2,8] and the high label range is
! 	     7 ... 10, truncate the label's range to 7 .. 8.  */
! 	  if (tree_int_cst_compare (CASE_LOW (max_label), vr_max) <= 0
! 	      && CASE_HIGH (max_label) != NULL_TREE
! 	      && tree_int_cst_compare (CASE_HIGH (max_label), vr_max) > 0)
! 	    CASE_HIGH (max_label) = vr_max;
! 	}
!       else if (kind == VR_ANTI_RANGE)
  	{
! 	  tree one_cst = build_one_cst (case_label_type);
! 
! 	  if (min_label == max_label)
! 	    {
! 	      /* If OP's value range is ~[7,8] and the label's range is
! 		 7 ... 10, truncate the label's range to 9 ... 10.  */
! 	      if (tree_int_cst_compare (CASE_LOW (min_label), vr_min) == 0
! 		  && CASE_HIGH (min_label) != NULL_TREE
! 		  && tree_int_cst_compare (CASE_HIGH (min_label), vr_max) > 0)
! 		CASE_LOW (min_label)
! 		  = int_const_binop (PLUS_EXPR, vr_max, one_cst);
  
! 	      /* If OP's value range is ~[7,8] and the label's range is
! 		 5 ... 8, truncate the label's range to 5 ... 6.  */
! 	      if (tree_int_cst_compare (CASE_LOW (min_label), vr_min) < 0
! 		  && CASE_HIGH (min_label) != NULL_TREE
! 		  && tree_int_cst_compare (CASE_HIGH (min_label), vr_max) == 0)
! 		CASE_HIGH (min_label)
! 		  = int_const_binop (MINUS_EXPR, vr_min, one_cst);
! 	    }
  	  else
! 	    {
! 	      /* If OP's value range is ~[2,8] and the low label range is
! 		 0 ... 3, truncate the label's range to 0 ... 1.  */
! 	      if (tree_int_cst_compare (CASE_LOW (min_label), vr_min) < 0
! 		  && CASE_HIGH (min_label) != NULL_TREE
! 		  && tree_int_cst_compare (CASE_HIGH (min_label), vr_min) >= 0)
! 		CASE_HIGH (min_label)
! 		  = int_const_binop (MINUS_EXPR, vr_min, one_cst);
! 
! 	      /* If OP's value range is ~[2,8] and the high label range is
! 		 7 ... 10, truncate the label's range to 9 ... 10.  */
! 	      if (tree_int_cst_compare (CASE_LOW (max_label), vr_max) <= 0
! 		  && CASE_HIGH (max_label) != NULL_TREE
! 		  && tree_int_cst_compare (CASE_HIGH (max_label), vr_max) > 0)
! 		CASE_LOW (max_label)
! 		  = int_const_binop (PLUS_EXPR, vr_max, one_cst);
! 	    }
  	}
! 
!       /* Canonicalize singleton case ranges.  */
!       if (tree_int_cst_equal (CASE_LOW (min_label), CASE_HIGH (min_label)))
! 	CASE_HIGH (min_label) = NULL_TREE;
!       if (tree_int_cst_equal (CASE_LOW (max_label), CASE_HIGH (max_label)))
! 	CASE_HIGH (max_label) = NULL_TREE;
      }
  
!   /* We can also eliminate case labels that lie completely outside OP's value
!      range.  */
! 
!   /* Bail out if this is just all edges taken.  */
!   if (i == 1
!       && j == n - 1
!       && take_default)
      return false;
  
!   /* Build a new vector of taken case labels.  */
!   vec2 = make_tree_vec (j - i + 1 + l - k + 1 + (int)take_default);
!   n2 = 0;
! 
!   /* Add the default edge, if necessary.  */
!   if (take_default)
!     TREE_VEC_ELT (vec2, n2++) = gimple_switch_default_label (stmt);
! 
!   for (; i <= j; ++i, ++n2)
!     TREE_VEC_ELT (vec2, n2) = gimple_switch_label (stmt, i);
! 
!   for (; k <= l; ++k, ++n2)
!     TREE_VEC_ELT (vec2, n2) = gimple_switch_label (stmt, k);
  
!   /* Mark needed edges.  */
!   for (i = 0; i < n2; ++i)
      {
!       e = find_edge (gimple_bb (stmt),
! 		     label_to_block (cfun,
! 				     CASE_LABEL (TREE_VEC_ELT (vec2, i))));
!       e->aux = (void *)-1;
      }
  
    /* Queue not needed edges for later removal.  */
    FOR_EACH_EDGE (e, ei, gimple_bb (stmt)->succs)
      {
        if (e->aux == (void *)-1)
--- 1295,1393 ----
  simplify_using_ranges::simplify_switch_using_ranges (gswitch *stmt)
  {
    tree op = gimple_switch_index (stmt);
!   tree type = TREE_TYPE (op);
!   int_range_max op_range (type);
!   int_range_max default_range (type);
!   auto_vec<unsigned> cases;
!   cases.truncate (0);
    edge e;
    switch_update su;
  
!   // Abort if we don't have a useful range for the switch index.
!   if (!query->range_of_expr (op_range, op, stmt)
!       || op_range.varying_p () || op_range.undefined_p ())
      return false;
  
!   // Default range starts with full known range of op.
!   default_range = op_range;
!   edge default_edge = gimple_switch_default_edge (cfun, stmt);
  
!   unsigned x, lim = gimple_switch_num_labels (stmt);
!   for (x = 1; x < lim; x++)
      {
!       e = gimple_switch_edge (cfun, stmt, x);
!       tree label = gimple_switch_label (stmt, x);
  
!       // If this edge is the same as the default edge, do nothing else.
!       if (e == default_edge)
! 	continue;
!       // Ada sometimes has mismatched labels and index.  Just bail.
!       if (TREE_TYPE (CASE_LOW (label)) != type)
! 	return false;
  
!       wide_int low = wi::to_wide (CASE_LOW (label));
!       wide_int high;
!       // Singleton cases have no CASE_HIGH.
!       tree tree_high = CASE_HIGH (label);
!       if (tree_high)
! 	high = wi::to_wide (tree_high);
!       else
! 	high = low;
  
!       // If the case range is fully contained in op_range, leave the
!       // case as it is, otherwise adjust the labels.
!       int_range_max case_range (type, low, high);
!       if (case_range.intersect (op_range))
  	{
! 	  // If none of the label is in op_range, skip this label.
! 	  if (case_range.undefined_p ())
! 	    continue;
  
! 	  // Part of the label is in op_range, but not all of it.  CASE_RANGE
! 	  // contains the part that is.   Adjust the case range to
! 	  // the new min/max.
! 	  if (case_range.lower_bound () != low)
! 	    CASE_LOW (label) = wide_int_to_tree (type,
! 						 case_range.lower_bound ());
! 	  if (case_range.singleton_p ())
! 	    CASE_HIGH (label) = NULL_TREE;
  	  else
! 	    if (case_range.upper_bound () != high)
! 	      CASE_HIGH (label) = wide_int_to_tree (type,
! 						    case_range.upper_bound ());
  	}
!       // Add case label to the keep list.
!       cases.safe_push (x);
!       // Remove case_range from needing to be handled by the default.
!       case_range.invert ();
!       default_range.intersect (case_range);
      }
  
!   // An undefined DEFAULT range means the current default case is not needed.
!   unsigned idx = default_range.undefined_p () ? 0 : 1;
!   unsigned vec_size = cases.length () + idx;
!   if (vec_size == lim)
      return false;
  
!   tree vec2 = make_tree_vec (vec_size);
!   // Add default label if there is one.
!   if (idx)
!     {
!       TREE_VEC_ELT (vec2, 0) = gimple_switch_default_label (stmt);
!       e = gimple_switch_edge (cfun, stmt, 0);
!       e->aux =  (void *)-1;
!     }
  
!   for (x = 0; x < cases.length (); x++)
      {
!       unsigned swi = cases[x];
!       TREE_VEC_ELT (vec2, idx++) = gimple_switch_label (stmt, swi);
!       e = gimple_switch_edge (cfun, stmt, swi);
!       e->aux =  (void *)-1;
      }
  
    /* Queue not needed edges for later removal.  */
+   edge_iterator ei;
    FOR_EACH_EDGE (e, ei, gimple_bb (stmt)->succs)
      {
        if (e->aux == (void *)-1)
diff -Nrcpad gcc-16-20250615/include/ChangeLog gcc-16-20250622/include/ChangeLog
*** gcc-16-20250615/include/ChangeLog	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/include/ChangeLog	Sun Jun 22 22:33:24 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-06-20  Sosutha Sethuramapandian  <ssethuramapa@marvell.com>
+ 
+ 	PR target/110181
+ 	* longlong.h  [__riscv] (count_leading_zeros): Define.
+ 	[__riscv] (count_trailing_zeros): Likewise.
+ 	[__riscv] (COUNT_LEADING_ZEROS_0): Likewise.
+ 
  2025-06-02  Tobias Burnus  <tburnus@baylibre.com>
  
  	PR libgomp/120444
diff -Nrcpad gcc-16-20250615/include/longlong.h gcc-16-20250622/include/longlong.h
*** gcc-16-20250615/include/longlong.h	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/include/longlong.h	Sun Jun 22 22:33:24 2025
*************** extern UDItype __umulsidi3 (USItype, USI
*** 1065,1070 ****
--- 1065,1084 ----
  #endif
  
  #if defined(__riscv)
+ 
+ #ifdef __riscv_zbb
+ #if W_TYPE_SIZE == 32
+ #define count_leading_zeros(COUNT, X)   ((COUNT) = __builtin_clz (X))
+ #define count_trailing_zeros(COUNT, X)   ((COUNT) = __builtin_ctz (X))
+ #define COUNT_LEADING_ZEROS_0 32
+ #endif /* W_TYPE_SIZE == 32 */
+ #if W_TYPE_SIZE == 64
+ #define count_leading_zeros(COUNT, X)   ((COUNT) = __builtin_clzll (X))
+ #define count_trailing_zeros(COUNT, X)   ((COUNT) = __builtin_ctzll (X))
+ #define COUNT_LEADING_ZEROS_0 64
+ #endif /* W_TYPE_SIZE == 64 */
+ #endif /* __riscv_zbb */
+ 
  #ifdef __riscv_mul
  #define __umulsidi3(u,v) ((UDWtype)(UWtype)(u) * (UWtype)(v))
  #define __muluw3(a, b) ((UWtype)(a) * (UWtype)(b))
diff -Nrcpad gcc-16-20250615/libcpp/ChangeLog gcc-16-20250622/libcpp/ChangeLog
*** gcc-16-20250615/libcpp/ChangeLog	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/libcpp/ChangeLog	Sun Jun 22 22:33:24 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-06-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	* line-map.cc (linemap_location_from_module_p): Add.
+ 	* include/line-map.h: Declare it.
+ 
  2025-06-11  David Malcolm  <dmalcolm@redhat.com>
  
  	PR other/116792
diff -Nrcpad gcc-16-20250615/libcpp/include/line-map.h gcc-16-20250622/libcpp/include/line-map.h
*** gcc-16-20250615/libcpp/include/line-map.h	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/libcpp/include/line-map.h	Sun Jun 22 22:33:24 2025
*************** extern location_t linemap_module_loc
*** 1111,1116 ****
--- 1111,1120 ----
  extern void linemap_module_reparent
    (line_maps *, location_t loc, location_t new_parent);
  
+ /* TRUE iff the location comes from a module import.  */
+ extern bool linemap_location_from_module_p
+   (const line_maps *, location_t);
+ 
  /* Restore the linemap state such that the map at LWM-1 continues.
     Return start location of the new map.  */
  extern location_t linemap_module_restore
diff -Nrcpad gcc-16-20250615/libcpp/line-map.cc gcc-16-20250622/libcpp/line-map.cc
*** gcc-16-20250615/libcpp/line-map.cc	Sun Jun 15 22:33:47 2025
--- gcc-16-20250622/libcpp/line-map.cc	Sun Jun 22 22:33:24 2025
*************** linemap_module_restore (line_maps *set,
*** 767,772 ****
--- 767,783 ----
    return 0;
  }
  
+ /* TRUE iff the location comes from a module import.  */
+ 
+ bool
+ linemap_location_from_module_p (const line_maps *set, location_t loc)
+ {
+   const line_map_ordinary *map = linemap_ordinary_map_lookup (set, loc);
+   while (map && map->reason != LC_MODULE)
+     map = linemap_included_from_linemap (set, map);
+   return !!map;
+ }
+ 
  /* Returns TRUE if the line table set tracks token locations across
     macro expansion, FALSE otherwise.  */
  
diff -Nrcpad gcc-16-20250615/libgcobol/ChangeLog gcc-16-20250622/libgcobol/ChangeLog
*** gcc-16-20250615/libgcobol/ChangeLog	Sun Jun 15 22:33:48 2025
--- gcc-16-20250622/libgcobol/ChangeLog	Sun Jun 22 22:33:26 2025
***************
*** 1,3 ****
--- 1,12 ----
+ 2025-06-20  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* LICENSE: New file.
+ 
+ 2025-06-16  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/120621
+ 	* common-defs.h (class cbl_enabled_exceptions_t): Const parameter.
+ 
  2025-06-11  Robert Dubner  <rdubner@symas.com>
  
  	PR cobol/119975
diff -Nrcpad gcc-16-20250615/libgcobol/LICENSE gcc-16-20250622/libgcobol/LICENSE
*** gcc-16-20250615/libgcobol/LICENSE	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/libgcobol/LICENSE	Sun Jun 22 22:33:26 2025
***************
*** 0 ****
--- 1,27 ----
+ Copyright (c) 2021-2025 Symas Corporation
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ 
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following disclaimer
+   in the documentation and/or other materials provided with the
+   distribution.
+ * Neither the name of the Symas Corporation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff -Nrcpad gcc-16-20250615/libgcobol/common-defs.h gcc-16-20250622/libgcobol/common-defs.h
*** gcc-16-20250615/libgcobol/common-defs.h	Sun Jun 15 22:33:48 2025
--- gcc-16-20250622/libgcobol/common-defs.h	Sun Jun 22 22:33:26 2025
*************** class cbl_enabled_exceptions_t : protect
*** 570,576 ****
      : 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;
  
--- 570,576 ----
      : std::set<cbl_enabled_exception_t>(ecs, ecs + nec)
    {}
    void turn_on_off( bool enabled, bool location, ec_type_t type,
!                     const std::set<size_t>& files );
  
    const cbl_enabled_exception_t * match( ec_type_t ec, size_t file = 0 ) const;
  
diff -Nrcpad gcc-16-20250615/libgfortran/ChangeLog gcc-16-20250622/libgfortran/ChangeLog
*** gcc-16-20250615/libgfortran/ChangeLog	Sun Jun 15 22:33:48 2025
--- gcc-16-20250622/libgfortran/ChangeLog	Sun Jun 22 22:33:26 2025
***************
*** 1,3 ****
--- 1,24 ----
+ 2025-06-18  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/82480
+ 	* intrinsics/stat.c (stat_i4_sub_0): Fix argument names.  Rename
+ 	SARRAY to VALUES also in error message.  When array VALUES is
+ 	KIND=4, get only stat components that do not overflow INT32_MAX,
+ 	otherwise set the corresponding VALUES elements to -1.
+ 	(stat_i4_sub): Fix argument names.
+ 	(lstat_i4_sub): Likewise.
+ 	(stat_i8_sub_0): Likewise.
+ 	(stat_i8_sub): Likewise.
+ 	(lstat_i8_sub): Likewise.
+ 	(stat_i4): Likewise.
+ 	(stat_i8): Likewise.
+ 	(lstat_i4): Likewise.
+ 	(lstat_i8): Likewise.
+ 	(fstat_i4_sub): Likewise.
+ 	(fstat_i8_sub): Likewise.
+ 	(fstat_i4): Likewise.
+ 	(fstat_i8): Likewise.
+ 
  2025-06-11  François-Xavier Coudert  <fxcoudert@gcc.gnu.org>
  
  	PR libfortran/116400
diff -Nrcpad gcc-16-20250615/libgfortran/intrinsics/stat.c gcc-16-20250622/libgfortran/intrinsics/stat.c
*** gcc-16-20250615/libgfortran/intrinsics/stat.c	Sun Jun 15 22:33:48 2025
--- gcc-16-20250622/libgfortran/intrinsics/stat.c	Sun Jun 22 22:33:26 2025
*************** see the files COPYING3 and COPYING.RUNTI
*** 35,56 ****
  
  #ifdef HAVE_STAT
  
! /* SUBROUTINE STAT(FILE, SARRAY, STATUS)
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: SARRAY(13)
     INTEGER, INTENT(OUT), OPTIONAL :: STATUS
  
!    FUNCTION STAT(FILE, SARRAY)
     INTEGER STAT
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: SARRAY(13)  */
  
  /*extern void stat_i4_sub_0 (char *, gfc_array_i4 *, GFC_INTEGER_4 *,
  			   gfc_charlen_type, int);
  internal_proto(stat_i4_sub_0);*/
  
  static void
! stat_i4_sub_0 (char *name, gfc_array_i4 *sarray, GFC_INTEGER_4 *status,
  	       gfc_charlen_type name_len, int is_lstat __attribute__ ((unused)))
  {
    int val;
--- 35,56 ----
  
  #ifdef HAVE_STAT
  
! /* SUBROUTINE STAT(NAME, VALUES, STATUS)
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: VALUES(13)
     INTEGER, INTENT(OUT), OPTIONAL :: STATUS
  
!    FUNCTION STAT(NAME, VALUES)
     INTEGER STAT
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: VALUES(13)  */
  
  /*extern void stat_i4_sub_0 (char *, gfc_array_i4 *, GFC_INTEGER_4 *,
  			   gfc_charlen_type, int);
  internal_proto(stat_i4_sub_0);*/
  
  static void
! stat_i4_sub_0 (char *name, gfc_array_i4 *values, GFC_INTEGER_4 *status,
  	       gfc_charlen_type name_len, int is_lstat __attribute__ ((unused)))
  {
    int val;
*************** stat_i4_sub_0 (char *name, gfc_array_i4
*** 58,69 ****
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (sarray) != 1)
!     runtime_error ("Array rank of SARRAY is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(sarray,0) < 13)
!     runtime_error ("Array size of SARRAY is too small.");
  
    /* Make a null terminated copy of the string.  */
    str = fc_strdup (name, name_len);
--- 58,69 ----
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (values) != 1)
!     runtime_error ("Array rank of VALUES is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(values,0) < 13)
!     runtime_error ("Array size of VALUES is too small.");
  
    /* Make a null terminated copy of the string.  */
    str = fc_strdup (name, name_len);
*************** stat_i4_sub_0 (char *name, gfc_array_i4
*** 80,136 ****
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(sarray,0);
  
        /* Device ID  */
!       sarray->base_addr[0 * stride] = sb.st_dev;
  
        /* Inode number  */
!       sarray->base_addr[1 * stride] = sb.st_ino;
  
        /* File mode  */
!       sarray->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       sarray->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       sarray->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       sarray->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       sarray->base_addr[6 * stride] = sb.st_rdev;
  #else
!       sarray->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       sarray->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       sarray->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       sarray->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       sarray->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       sarray->base_addr[11 * stride] = sb.st_blksize;
! #else
!       sarray->base_addr[11 * stride] = -1;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       sarray->base_addr[12 * stride] = sb.st_blocks;
! #else
!       sarray->base_addr[12 * stride] = -1;
  #endif
      }
  
--- 80,149 ----
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(values,0);
! 
!       /* Return -1 for any value overflowing INT32_MAX.  */
!       for (int i = 0; i < 13; i++)
! 	values->base_addr[i * stride] = -1;
  
        /* Device ID  */
!       if (sb.st_dev <= INT32_MAX)
! 	values->base_addr[0 * stride] = sb.st_dev;
  
        /* Inode number  */
!       if (sb.st_ino <= INT32_MAX)
! 	values->base_addr[1 * stride] = sb.st_ino;
  
        /* File mode  */
!       if (sb.st_mode <= INT32_MAX)
! 	values->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       if (sb.st_nlink <= INT32_MAX)
! 	values->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       if (sb.st_uid <= INT32_MAX)
! 	values->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       if (sb.st_gid <= INT32_MAX)
! 	values->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       if (sb.st_rdev <= INT32_MAX)
! 	values->base_addr[6 * stride] = sb.st_rdev;
  #else
!       values->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       if (sb.st_size <= INT32_MAX)
! 	values->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       if (sb.st_atime <= INT32_MAX)
! 	values->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       if (sb.st_mtime <= INT32_MAX)
! 	values->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       if (sb.st_ctime <= INT32_MAX)
! 	values->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       if (sb.st_blksize <= INT32_MAX)
! 	values->base_addr[11 * stride] = sb.st_blksize;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       if (sb.st_blocks <= INT32_MAX)
! 	values->base_addr[12 * stride] = sb.st_blocks;
  #endif
      }
  
*************** extern void stat_i4_sub (char *, gfc_arr
*** 144,153 ****
  iexport_proto(stat_i4_sub);
  
  void
! stat_i4_sub (char *name, gfc_array_i4 *sarray, GFC_INTEGER_4 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i4_sub_0 (name, sarray, status, name_len, 0);
  }
  iexport(stat_i4_sub);
  
--- 157,166 ----
  iexport_proto(stat_i4_sub);
  
  void
! stat_i4_sub (char *name, gfc_array_i4 *values, GFC_INTEGER_4 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i4_sub_0 (name, values, status, name_len, 0);
  }
  iexport(stat_i4_sub);
  
*************** extern void lstat_i4_sub (char *, gfc_ar
*** 157,173 ****
  iexport_proto(lstat_i4_sub);
  
  void
! lstat_i4_sub (char *name, gfc_array_i4 *sarray, GFC_INTEGER_4 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i4_sub_0 (name, sarray, status, name_len, 1);
  }
  iexport(lstat_i4_sub);
  
  
  
  static void
! stat_i8_sub_0 (char *name, gfc_array_i8 *sarray, GFC_INTEGER_8 *status,
  	       gfc_charlen_type name_len, int is_lstat __attribute__ ((unused)))
  {
    int val;
--- 170,186 ----
  iexport_proto(lstat_i4_sub);
  
  void
! lstat_i4_sub (char *name, gfc_array_i4 *values, GFC_INTEGER_4 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i4_sub_0 (name, values, status, name_len, 1);
  }
  iexport(lstat_i4_sub);
  
  
  
  static void
! stat_i8_sub_0 (char *name, gfc_array_i8 *values, GFC_INTEGER_8 *status,
  	       gfc_charlen_type name_len, int is_lstat __attribute__ ((unused)))
  {
    int val;
*************** stat_i8_sub_0 (char *name, gfc_array_i8
*** 175,186 ****
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (sarray) != 1)
!     runtime_error ("Array rank of SARRAY is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(sarray,0) < 13)
!     runtime_error ("Array size of SARRAY is too small.");
  
    /* Make a null terminated copy of the string.  */
    str = fc_strdup (name, name_len);
--- 188,199 ----
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (values) != 1)
!     runtime_error ("Array rank of VALUES is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(values,0) < 13)
!     runtime_error ("Array size of VALUES is too small.");
  
    /* Make a null terminated copy of the string.  */
    str = fc_strdup (name, name_len);
*************** stat_i8_sub_0 (char *name, gfc_array_i8
*** 197,253 ****
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(sarray,0);
  
        /* Device ID  */
!       sarray->base_addr[0] = sb.st_dev;
  
        /* Inode number  */
!       sarray->base_addr[stride] = sb.st_ino;
  
        /* File mode  */
!       sarray->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       sarray->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       sarray->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       sarray->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       sarray->base_addr[6 * stride] = sb.st_rdev;
  #else
!       sarray->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       sarray->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       sarray->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       sarray->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       sarray->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       sarray->base_addr[11 * stride] = sb.st_blksize;
  #else
!       sarray->base_addr[11 * stride] = -1;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       sarray->base_addr[12 * stride] = sb.st_blocks;
  #else
!       sarray->base_addr[12 * stride] = -1;
  #endif
      }
  
--- 210,266 ----
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(values,0);
  
        /* Device ID  */
!       values->base_addr[0] = sb.st_dev;
  
        /* Inode number  */
!       values->base_addr[stride] = sb.st_ino;
  
        /* File mode  */
!       values->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       values->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       values->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       values->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       values->base_addr[6 * stride] = sb.st_rdev;
  #else
!       values->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       values->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       values->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       values->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       values->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       values->base_addr[11 * stride] = sb.st_blksize;
  #else
!       values->base_addr[11 * stride] = -1;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       values->base_addr[12 * stride] = sb.st_blocks;
  #else
!       values->base_addr[12 * stride] = -1;
  #endif
      }
  
*************** extern void stat_i8_sub (char *, gfc_arr
*** 261,270 ****
  iexport_proto(stat_i8_sub);
  
  void
! stat_i8_sub (char *name, gfc_array_i8 *sarray, GFC_INTEGER_8 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i8_sub_0 (name, sarray, status, name_len, 0);
  }
  
  iexport(stat_i8_sub);
--- 274,283 ----
  iexport_proto(stat_i8_sub);
  
  void
! stat_i8_sub (char *name, gfc_array_i8 *values, GFC_INTEGER_8 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i8_sub_0 (name, values, status, name_len, 0);
  }
  
  iexport(stat_i8_sub);
*************** extern void lstat_i8_sub (char *, gfc_ar
*** 275,284 ****
  iexport_proto(lstat_i8_sub);
  
  void
! lstat_i8_sub (char *name, gfc_array_i8 *sarray, GFC_INTEGER_8 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i8_sub_0 (name, sarray, status, name_len, 1);
  }
  
  iexport(lstat_i8_sub);
--- 288,297 ----
  iexport_proto(lstat_i8_sub);
  
  void
! lstat_i8_sub (char *name, gfc_array_i8 *values, GFC_INTEGER_8 *status,
  	     gfc_charlen_type name_len)
  {
!   stat_i8_sub_0 (name, values, status, name_len, 1);
  }
  
  iexport(lstat_i8_sub);
*************** extern GFC_INTEGER_4 stat_i4 (char *, gf
*** 288,297 ****
  export_proto(stat_i4);
  
  GFC_INTEGER_4
! stat_i4 (char *name, gfc_array_i4 *sarray, gfc_charlen_type name_len)
  {
    GFC_INTEGER_4 val;
!   stat_i4_sub (name, sarray, &val, name_len);
    return val;
  }
  
--- 301,310 ----
  export_proto(stat_i4);
  
  GFC_INTEGER_4
! stat_i4 (char *name, gfc_array_i4 *values, gfc_charlen_type name_len)
  {
    GFC_INTEGER_4 val;
!   stat_i4_sub (name, values, &val, name_len);
    return val;
  }
  
*************** extern GFC_INTEGER_8 stat_i8 (char *, gf
*** 299,330 ****
  export_proto(stat_i8);
  
  GFC_INTEGER_8
! stat_i8 (char *name, gfc_array_i8 *sarray, gfc_charlen_type name_len)
  {
    GFC_INTEGER_8 val;
!   stat_i8_sub (name, sarray, &val, name_len);
    return val;
  }
  
  
! /* SUBROUTINE LSTAT(FILE, SARRAY, STATUS)
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: SARRAY(13)
     INTEGER, INTENT(OUT), OPTIONAL :: STATUS
  
!    FUNCTION LSTAT(FILE, SARRAY)
     INTEGER LSTAT
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: SARRAY(13)  */
  
  extern GFC_INTEGER_4 lstat_i4 (char *, gfc_array_i4 *, gfc_charlen_type);
  export_proto(lstat_i4);
  
  GFC_INTEGER_4
! lstat_i4 (char *name, gfc_array_i4 *sarray, gfc_charlen_type name_len)
  {
    GFC_INTEGER_4 val;
!   lstat_i4_sub (name, sarray, &val, name_len);
    return val;
  }
  
--- 312,343 ----
  export_proto(stat_i8);
  
  GFC_INTEGER_8
! stat_i8 (char *name, gfc_array_i8 *values, gfc_charlen_type name_len)
  {
    GFC_INTEGER_8 val;
!   stat_i8_sub (name, values, &val, name_len);
    return val;
  }
  
  
! /* SUBROUTINE LSTAT(NAME, VALUES, STATUS)
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: VALUES(13)
     INTEGER, INTENT(OUT), OPTIONAL :: STATUS
  
!    FUNCTION LSTAT(NAME, VALUES)
     INTEGER LSTAT
     CHARACTER(len=*), INTENT(IN) :: FILE
!    INTEGER, INTENT(OUT), :: VALUES(13)  */
  
  extern GFC_INTEGER_4 lstat_i4 (char *, gfc_array_i4 *, gfc_charlen_type);
  export_proto(lstat_i4);
  
  GFC_INTEGER_4
! lstat_i4 (char *name, gfc_array_i4 *values, gfc_charlen_type name_len)
  {
    GFC_INTEGER_4 val;
!   lstat_i4_sub (name, values, &val, name_len);
    return val;
  }
  
*************** extern GFC_INTEGER_8 lstat_i8 (char *, g
*** 332,341 ****
  export_proto(lstat_i8);
  
  GFC_INTEGER_8
! lstat_i8 (char *name, gfc_array_i8 *sarray, gfc_charlen_type name_len)
  {
    GFC_INTEGER_8 val;
!   lstat_i8_sub (name, sarray, &val, name_len);
    return val;
  }
  
--- 345,354 ----
  export_proto(lstat_i8);
  
  GFC_INTEGER_8
! lstat_i8 (char *name, gfc_array_i8 *values, gfc_charlen_type name_len)
  {
    GFC_INTEGER_8 val;
!   lstat_i8_sub (name, values, &val, name_len);
    return val;
  }
  
*************** lstat_i8 (char *name, gfc_array_i8 *sarr
*** 344,375 ****
  
  #ifdef HAVE_FSTAT
  
! /* SUBROUTINE FSTAT(UNIT, SARRAY, STATUS)
     INTEGER, INTENT(IN) :: UNIT
!    INTEGER, INTENT(OUT) :: SARRAY(13)
     INTEGER, INTENT(OUT), OPTIONAL :: STATUS
  
!    FUNCTION FSTAT(UNIT, SARRAY)
     INTEGER FSTAT
     INTEGER, INTENT(IN) :: UNIT
!    INTEGER, INTENT(OUT) :: SARRAY(13)  */
  
  extern void fstat_i4_sub (GFC_INTEGER_4 *, gfc_array_i4 *, GFC_INTEGER_4 *);
  iexport_proto(fstat_i4_sub);
  
  void
! fstat_i4_sub (GFC_INTEGER_4 *unit, gfc_array_i4 *sarray, GFC_INTEGER_4 *status)
  {
    int val;
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (sarray) != 1)
!     runtime_error ("Array rank of SARRAY is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(sarray,0) < 13)
!     runtime_error ("Array size of SARRAY is too small.");
  
    /* Convert Fortran unit number to C file descriptor.  */
    val = unit_to_fd (*unit);
--- 357,388 ----
  
  #ifdef HAVE_FSTAT
  
! /* SUBROUTINE FSTAT(UNIT, VALUES, STATUS)
     INTEGER, INTENT(IN) :: UNIT
!    INTEGER, INTENT(OUT) :: VALUES(13)
     INTEGER, INTENT(OUT), OPTIONAL :: STATUS
  
!    FUNCTION FSTAT(UNIT, VALUES)
     INTEGER FSTAT
     INTEGER, INTENT(IN) :: UNIT
!    INTEGER, INTENT(OUT) :: VALUES(13)  */
  
  extern void fstat_i4_sub (GFC_INTEGER_4 *, gfc_array_i4 *, GFC_INTEGER_4 *);
  iexport_proto(fstat_i4_sub);
  
  void
! fstat_i4_sub (GFC_INTEGER_4 *unit, gfc_array_i4 *values, GFC_INTEGER_4 *status)
  {
    int val;
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (values) != 1)
!     runtime_error ("Array rank of VALUES is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(values,0) < 13)
!     runtime_error ("Array size of VALUES is too small.");
  
    /* Convert Fortran unit number to C file descriptor.  */
    val = unit_to_fd (*unit);
*************** fstat_i4_sub (GFC_INTEGER_4 *unit, gfc_a
*** 378,434 ****
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(sarray,0);
  
        /* Device ID  */
!       sarray->base_addr[0 * stride] = sb.st_dev;
  
        /* Inode number  */
!       sarray->base_addr[1 * stride] = sb.st_ino;
  
        /* File mode  */
!       sarray->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       sarray->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       sarray->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       sarray->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       sarray->base_addr[6 * stride] = sb.st_rdev;
  #else
!       sarray->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       sarray->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       sarray->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       sarray->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       sarray->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       sarray->base_addr[11 * stride] = sb.st_blksize;
! #else
!       sarray->base_addr[11 * stride] = -1;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       sarray->base_addr[12 * stride] = sb.st_blocks;
! #else
!       sarray->base_addr[12 * stride] = -1;
  #endif
      }
  
--- 391,460 ----
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(values,0);
! 
!       /* Return -1 for any value overflowing INT32_MAX.  */
!       for (int i = 0; i < 13; i++)
! 	values->base_addr[i * stride] = -1;
  
        /* Device ID  */
!       if (sb.st_dev <= INT32_MAX)
! 	values->base_addr[0 * stride] = sb.st_dev;
  
        /* Inode number  */
!       if (sb.st_ino <= INT32_MAX)
! 	values->base_addr[1 * stride] = sb.st_ino;
  
        /* File mode  */
!       if (sb.st_mode <= INT32_MAX)
! 	values->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       if (sb.st_nlink <= INT32_MAX)
! 	values->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       if (sb.st_uid <= INT32_MAX)
! 	values->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       if (sb.st_gid <= INT32_MAX)
! 	values->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       if (sb.st_rdev <= INT32_MAX)
! 	values->base_addr[6 * stride] = sb.st_rdev;
  #else
!       values->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       if (sb.st_size <= INT32_MAX)
! 	values->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       if (sb.st_atime <= INT32_MAX)
! 	values->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       if (sb.st_mtime <= INT32_MAX)
! 	values->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       if (sb.st_ctime <= INT32_MAX)
! 	values->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       if (sb.st_blksize <= INT32_MAX)
! 	values->base_addr[11 * stride] = sb.st_blksize;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       if (sb.st_blocks <= INT32_MAX)
! 	values->base_addr[12 * stride] = sb.st_blocks;
  #endif
      }
  
*************** extern void fstat_i8_sub (GFC_INTEGER_8
*** 441,458 ****
  iexport_proto(fstat_i8_sub);
  
  void
! fstat_i8_sub (GFC_INTEGER_8 *unit, gfc_array_i8 *sarray, GFC_INTEGER_8 *status)
  {
    int val;
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (sarray) != 1)
!     runtime_error ("Array rank of SARRAY is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(sarray,0) < 13)
!     runtime_error ("Array size of SARRAY is too small.");
  
    /* Convert Fortran unit number to C file descriptor.  */
    val = unit_to_fd ((int) *unit);
--- 467,484 ----
  iexport_proto(fstat_i8_sub);
  
  void
! fstat_i8_sub (GFC_INTEGER_8 *unit, gfc_array_i8 *values, GFC_INTEGER_8 *status)
  {
    int val;
    struct stat sb;
  
    /* If the rank of the array is not 1, abort.  */
!   if (GFC_DESCRIPTOR_RANK (values) != 1)
!     runtime_error ("Array rank of VALUES is not 1.");
  
    /* If the array is too small, abort.  */
!   if (GFC_DESCRIPTOR_EXTENT(values,0) < 13)
!     runtime_error ("Array size of VALUES is too small.");
  
    /* Convert Fortran unit number to C file descriptor.  */
    val = unit_to_fd ((int) *unit);
*************** fstat_i8_sub (GFC_INTEGER_8 *unit, gfc_a
*** 461,517 ****
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(sarray,0);
  
        /* Device ID  */
!       sarray->base_addr[0] = sb.st_dev;
  
        /* Inode number  */
!       sarray->base_addr[stride] = sb.st_ino;
  
        /* File mode  */
!       sarray->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       sarray->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       sarray->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       sarray->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       sarray->base_addr[6 * stride] = sb.st_rdev;
  #else
!       sarray->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       sarray->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       sarray->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       sarray->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       sarray->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       sarray->base_addr[11 * stride] = sb.st_blksize;
  #else
!       sarray->base_addr[11 * stride] = -1;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       sarray->base_addr[12 * stride] = sb.st_blocks;
  #else
!       sarray->base_addr[12 * stride] = -1;
  #endif
      }
  
--- 487,543 ----
  
    if (val == 0)
      {
!       index_type stride = GFC_DESCRIPTOR_STRIDE(values,0);
  
        /* Device ID  */
!       values->base_addr[0] = sb.st_dev;
  
        /* Inode number  */
!       values->base_addr[stride] = sb.st_ino;
  
        /* File mode  */
!       values->base_addr[2 * stride] = sb.st_mode;
  
        /* Number of (hard) links  */
!       values->base_addr[3 * stride] = sb.st_nlink;
  
        /* Owner's uid  */
!       values->base_addr[4 * stride] = sb.st_uid;
  
        /* Owner's gid  */
!       values->base_addr[5 * stride] = sb.st_gid;
  
        /* ID of device containing directory entry for file (0 if not available) */
  #if HAVE_STRUCT_STAT_ST_RDEV
!       values->base_addr[6 * stride] = sb.st_rdev;
  #else
!       values->base_addr[6 * stride] = 0;
  #endif
  
        /* File size (bytes)  */
!       values->base_addr[7 * stride] = sb.st_size;
  
        /* Last access time  */
!       values->base_addr[8 * stride] = sb.st_atime;
  
        /* Last modification time  */
!       values->base_addr[9 * stride] = sb.st_mtime;
  
        /* Last file status change time  */
!       values->base_addr[10 * stride] = sb.st_ctime;
  
        /* Preferred I/O block size (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLKSIZE
!       values->base_addr[11 * stride] = sb.st_blksize;
  #else
!       values->base_addr[11 * stride] = -1;
  #endif
  
        /* Number of blocks allocated (-1 if not available)  */
  #if HAVE_STRUCT_STAT_ST_BLOCKS
!       values->base_addr[12 * stride] = sb.st_blocks;
  #else
!       values->base_addr[12 * stride] = -1;
  #endif
      }
  
*************** extern GFC_INTEGER_4 fstat_i4 (GFC_INTEG
*** 524,533 ****
  export_proto(fstat_i4);
  
  GFC_INTEGER_4
! fstat_i4 (GFC_INTEGER_4 *unit, gfc_array_i4 *sarray)
  {
    GFC_INTEGER_4 val;
!   fstat_i4_sub (unit, sarray, &val);
    return val;
  }
  
--- 550,559 ----
  export_proto(fstat_i4);
  
  GFC_INTEGER_4
! fstat_i4 (GFC_INTEGER_4 *unit, gfc_array_i4 *values)
  {
    GFC_INTEGER_4 val;
!   fstat_i4_sub (unit, values, &val);
    return val;
  }
  
*************** extern GFC_INTEGER_8 fstat_i8 (GFC_INTEG
*** 535,544 ****
  export_proto(fstat_i8);
  
  GFC_INTEGER_8
! fstat_i8 (GFC_INTEGER_8 *unit, gfc_array_i8 *sarray)
  {
    GFC_INTEGER_8 val;
!   fstat_i8_sub (unit, sarray, &val);
    return val;
  }
  
--- 561,570 ----
  export_proto(fstat_i8);
  
  GFC_INTEGER_8
! fstat_i8 (GFC_INTEGER_8 *unit, gfc_array_i8 *values)
  {
    GFC_INTEGER_8 val;
!   fstat_i8_sub (unit, values, &val);
    return val;
  }
  
diff -Nrcpad gcc-16-20250615/libgomp/ChangeLog gcc-16-20250622/libgomp/ChangeLog
*** gcc-16-20250615/libgomp/ChangeLog	Sun Jun 15 22:33:50 2025
--- gcc-16-20250622/libgomp/ChangeLog	Sun Jun 22 22:33:43 2025
***************
*** 1,3 ****
--- 1,24 ----
+ 2025-06-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* target.c (GOMP_REQUIRES_NAME_BUF_LEN): Define.
+ 	(GOMP_offload_register_ver, gomp_target_init): Use it for the
+ 	char buffer size.
+ 
+ 2025-06-19  Tobias Burnus  <tburnus@baylibre.com>
+ 	    waffl3x  <waffl3x@baylibre.com>
+ 
+ 	* libgomp.texi (omp_init_allocator): Refer to 'Memory allocation'
+ 	for available memory spaces.
+ 	(OMP_ALLOCATOR): Move list of traits and predefined memspaces
+ 	and allocators to ...
+ 	(Memory allocation): ... here. Document omp(x)::allocator::*;
+ 	minor wording tweaks, be more explicit about memkind, pinned and
+ 	pool_size.
+ 
+ 2025-06-17  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.c++/declare_target-2.C: New test.
+ 
  2025-06-10  Tobias Burnus  <tburnus@baylibre.com>
  
  	* testsuite/libgomp.c/declare-variant-4.h (gfx942): New variant function.
diff -Nrcpad gcc-16-20250615/libgomp/libgomp.texi gcc-16-20250622/libgomp/libgomp.texi
*** gcc-16-20250615/libgomp/libgomp.texi	Sun Jun 15 22:33:50 2025
--- gcc-16-20250622/libgomp/libgomp.texi	Sun Jun 22 22:33:43 2025
*************** traits; if an allocator that fulfills th
*** 3453,3459 ****
  @code{omp_null_allocator} is returned.
  
  The predefined memory spaces and available traits can be found at
! @ref{OMP_ALLOCATOR}, where the trait names have to be prefixed by
  @code{omp_atk_} (e.g. @code{omp_atk_pinned}) and the named trait values by
  @code{omp_atv_} (e.g. @code{omp_atv_true}); additionally, @code{omp_atv_default}
  may be used as trait value to specify that the default value should be used.
--- 3453,3459 ----
  @code{omp_null_allocator} is returned.
  
  The predefined memory spaces and available traits can be found at
! @ref{Memory allocation}, where the trait names have to be prefixed by
  @code{omp_atk_} (e.g. @code{omp_atk_pinned}) and the named trait values by
  @code{omp_atv_} (e.g. @code{omp_atv_true}); additionally, @code{omp_atv_default}
  may be used as trait value to specify that the default value should be used.
*************** may be used as trait value to specify th
*** 3476,3482 ****
  @end multitable
  
  @item @emph{See also}:
! @ref{OMP_ALLOCATOR}, @ref{Memory allocation}, @ref{omp_destroy_allocator}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v5.0}, Section 3.7.2
--- 3476,3482 ----
  @end multitable
  
  @item @emph{See also}:
! @ref{Memory allocation}, @ref{OMP_ALLOCATOR}, @ref{omp_destroy_allocator}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v5.0}, Section 3.7.2
*************** The value can either be a predefined all
*** 4057,4119 ****
  or a predefined memory space followed by a colon and a comma-separated list
  of memory trait and value pairs, separated by @code{=}.
  
  Note: The corresponding device environment variables are currently not
  supported.  Therefore, the non-host @var{def-allocator-var} ICVs are always
  initialized to @code{omp_default_mem_alloc}.  However, on all devices,
  the @code{omp_set_default_allocator} API routine can be used to change
  value.
  
- @multitable @columnfractions .45 .45
- @headitem Predefined allocators @tab Associated predefined memory spaces
- @item omp_default_mem_alloc     @tab omp_default_mem_space
- @item omp_large_cap_mem_alloc   @tab omp_large_cap_mem_space
- @item omp_const_mem_alloc       @tab omp_const_mem_space
- @item omp_high_bw_mem_alloc     @tab omp_high_bw_mem_space
- @item omp_low_lat_mem_alloc     @tab omp_low_lat_mem_space
- @item omp_cgroup_mem_alloc      @tab omp_low_lat_mem_space (implementation defined)
- @item omp_pteam_mem_alloc       @tab omp_low_lat_mem_space (implementation defined)
- @item omp_thread_mem_alloc      @tab omp_low_lat_mem_space (implementation defined)
- @item ompx_gnu_pinned_mem_alloc @tab omp_default_mem_space (GNU extension)
- @end multitable
- 
- The predefined allocators use the default values for the traits,
- as listed below.  Except that the last three allocators have the
- @code{access} trait set to @code{cgroup}, @code{pteam}, and
- @code{thread}, respectively.
- 
- @multitable @columnfractions .25 .40 .25
- @headitem Trait @tab Allowed values @tab Default value
- @item @code{sync_hint} @tab @code{contended}, @code{uncontended},
-                             @code{serialized}, @code{private}
-                        @tab @code{contended}
- @item @code{alignment} @tab Positive integer being a power of two
-                        @tab 1 byte
- @item @code{access}    @tab @code{all}, @code{cgroup},
-                             @code{pteam}, @code{thread}
-                        @tab @code{all}
- @item @code{pool_size} @tab Positive integer
-                        @tab See @ref{Memory allocation}
- @item @code{fallback}  @tab @code{default_mem_fb}, @code{null_fb},
-                             @code{abort_fb}, @code{allocator_fb}
-                        @tab See below
- @item @code{fb_data}   @tab @emph{unsupported as it needs an allocator handle}
-                        @tab (none)
- @item @code{pinned}    @tab @code{true}, @code{false}
-                        @tab See below
- @item @code{partition} @tab @code{environment}, @code{nearest},
-                             @code{blocked}, @code{interleaved}
-                        @tab @code{environment}
- @end multitable
- 
- For the @code{fallback} trait, the default value is @code{null_fb} for the
- @code{omp_default_mem_alloc} allocator and any allocator that is associated
- with device memory; for all other allocators, it is @code{default_mem_fb}
- by default.
- 
- For the @code{pinned} trait, the default value is @code{true} for
- predefined allocator @code{ompx_gnu_pinned_mem_alloc} (a GNU extension), and
- @code{false} for all others.
- 
  Examples:
  @smallexample
  OMP_ALLOCATOR=omp_high_bw_mem_alloc
--- 4057,4071 ----
  or a predefined memory space followed by a colon and a comma-separated list
  of memory trait and value pairs, separated by @code{=}.
  
+ See @ref{Memory allocation} for a list of supported prefedined allocators,
+ memory spaces, and traits.
+ 
  Note: The corresponding device environment variables are currently not
  supported.  Therefore, the non-host @var{def-allocator-var} ICVs are always
  initialized to @code{omp_default_mem_alloc}.  However, on all devices,
  the @code{omp_set_default_allocator} API routine can be used to change
  value.
  
  Examples:
  @smallexample
  OMP_ALLOCATOR=omp_high_bw_mem_alloc
*************** This function copies device memory from
*** 5972,5978 ****
  on the current device.  It copies @var{bytes} bytes of data from the device
  address, specified by @var{data_dev_src}, to the device address
  @var{data_dev_dest}.  The @code{_async} version performs the transfer
! asnychronously using the queue associated with @var{async_arg}.
  
  @item @emph{C/C++}:
  @multitable @columnfractions .20 .80
--- 5924,5930 ----
  on the current device.  It copies @var{bytes} bytes of data from the device
  address, specified by @var{data_dev_src}, to the device address
  @var{data_dev_dest}.  The @code{_async} version performs the transfer
! asynchronously using the queue associated with @var{async_arg}.
  
  @item @emph{C/C++}:
  @multitable @columnfractions .20 .80
*************** on more architectures, GCC currently doe
*** 6883,6888 ****
--- 6835,6841 ----
        @tab See @code{-march=} in ``Nvidia PTX Options''
  @end multitable
  
+ 
  @node Memory allocation
  @section Memory allocation
  
*************** The description below applies to:
*** 6917,6927 ****
        @code{_Alignof} and C++'s @code{alignof}.
  @end itemize
  
! For the available predefined allocators and, as applicable, their associated
! predefined memory spaces and for the available traits and their default values,
! see @ref{OMP_ALLOCATOR}.  Predefined allocators without an associated memory
! space use the @code{omp_default_mem_space} memory space.  See additionally
! @ref{Offload-Target Specifics}.
  
  For the memory spaces, the following applies:
  @itemize
--- 6870,6963 ----
        @code{_Alignof} and C++'s @code{alignof}.
  @end itemize
  
! GCC supports the following predefined allocators and predefined memory spaces:
! 
! @multitable @columnfractions .45 .45
! @headitem Predefined allocators @tab Associated predefined memory spaces
! @item omp_default_mem_alloc     @tab omp_default_mem_space
! @item omp_large_cap_mem_alloc   @tab omp_large_cap_mem_space
! @item omp_const_mem_alloc       @tab omp_const_mem_space
! @item omp_high_bw_mem_alloc     @tab omp_high_bw_mem_space
! @item omp_low_lat_mem_alloc     @tab omp_low_lat_mem_space
! @item omp_cgroup_mem_alloc      @tab omp_low_lat_mem_space (implementation defined)
! @item omp_pteam_mem_alloc       @tab omp_low_lat_mem_space (implementation defined)
! @item omp_thread_mem_alloc      @tab omp_low_lat_mem_space (implementation defined)
! @item ompx_gnu_pinned_mem_alloc @tab omp_default_mem_space (GNU extension)
! @end multitable
! 
! Each predefined allocator, including @code{omp_null_allocator}, has a corresponding
! allocator class template that meet the C++ allocator completeness requirements.
! These are located in the @code{omp::allocator} namespace, and the
! @code{ompx::allocator} namespace for gnu extensions.  This allows the
! allocator-aware C++ standard library containers to use OpenMP allocation routines;
! for instance:
! 
! @smallexample
! std::vector<int, omp::allocator::cgroup_mem<int>> vec;
! @end smallexample
! 
! The following allocator templates are supported:
! 
! @multitable @columnfractions .45 .45
! @headitem Predefined allocators @tab Associated allocator template
! @item omp_null_allocator        @tab omp::allocator::null_allocator
! @item omp_default_mem_alloc     @tab omp::allocator::default_mem
! @item omp_large_cap_mem_alloc   @tab omp::allocator::large_cap_mem
! @item omp_const_mem_alloc       @tab omp::allocator::const_mem
! @item omp_high_bw_mem_alloc     @tab omp::allocator::high_bw_mem
! @item omp_low_lat_mem_alloc     @tab omp::allocator::low_lat_mem
! @item omp_cgroup_mem_alloc      @tab omp::allocator::cgroup_mem
! @item omp_pteam_mem_alloc       @tab omp::allocator::pteam_mem
! @item omp_thread_mem_alloc      @tab omp::allocator::thread_mem
! @item ompx_gnu_pinned_mem_alloc @tab ompx::allocator::gnu_pinned_mem
! @end multitable
! 
! The following traits are available when constructing a new allocator;
! if a trait is not specified or with the value @code{default}, the
! specified default value is used for that trait.  The predefined
! allocators use the default values of each trait, except that the
! @code{omp_cgroup_mem_alloc}, @code{omp_pteam_mem_alloc}, and
! @code{omp_thread_mem_alloc} allocators have the @code{access} trait
! set to @code{cgroup}, @code{pteam}, and @code{thread}, respectively.
! For each trait, a named constant prefixed by @code{omp_atk_} exists;
! for each non-numeric value, a named constant prefixed by @code{omp_atv_}
! exists.
! 
! @multitable @columnfractions .25 .40 .25
! @headitem Trait @tab Allowed values @tab Default value
! @item @code{sync_hint} @tab @code{contended}, @code{uncontended},
!                             @code{serialized}, @code{private}
!                        @tab @code{contended}
! @item @code{alignment} @tab Positive integer being a power of two
!                        @tab 1 byte
! @item @code{access}    @tab @code{all}, @code{cgroup},
!                             @code{pteam}, @code{thread}
!                        @tab @code{all}
! @item @code{pool_size} @tab Positive integer (bytes)
!                        @tab See below.
! @item @code{fallback}  @tab @code{default_mem_fb}, @code{null_fb},
!                             @code{abort_fb}, @code{allocator_fb}
!                        @tab See below
! @item @code{fb_data}   @tab @emph{allocator handle}
!                        @tab (none)
! @item @code{pinned}    @tab @code{true}, @code{false}
!                        @tab See below
! @item @code{partition} @tab @code{environment}, @code{nearest},
!                             @code{blocked}, @code{interleaved}
!                        @tab @code{environment}
! @end multitable
! 
! For the @code{fallback} trait, the default value is @code{null_fb} for the
! @code{omp_default_mem_alloc} allocator and any allocator that is associated
! with device memory; for all other allocators, it is @code{default_mem_fb}
! by default.
! 
! For the @code{pinned} trait, the default value is @code{true} for
! predefined allocator @code{ompx_gnu_pinned_mem_alloc} (a GNU extension), and
! @code{false} for all others.
! 
! The following description applies to the initial device (the host) and largely
! also to non-host devices; for the latter, also see @ref{Offload-Target Specifics}.
  
  For the memory spaces, the following applies:
  @itemize
*************** For the memory spaces, the following app
*** 6936,6949 ****
  @end itemize
  
  On Linux systems, where the @uref{https://github.com/memkind/memkind, memkind
! library} (@code{libmemkind.so.0}) is available at runtime, it is used when
! creating memory allocators requesting
  
  @itemize
! @item the memory space @code{omp_high_bw_mem_space}
! @item the memory space @code{omp_large_cap_mem_space}
! @item the @code{partition} trait @code{interleaved}; note that for
!       @code{omp_large_cap_mem_space} the allocation will not be interleaved
  @end itemize
  
  On Linux systems, where the @uref{https://github.com/numactl/numactl, numa
--- 6972,6987 ----
  @end itemize
  
  On Linux systems, where the @uref{https://github.com/memkind/memkind, memkind
! library} (@code{libmemkind.so.0}) is available at runtime and the respective
! memkind kind is supported, it is used when creating memory allocators requesting
  
  @itemize
! @item the @code{partition} trait @code{interleaved} except when the memory space
!       is @code{omp_large_cap_mem_space} (uses @code{MEMKIND_HBW_INTERLEAVE})
! @item the memory space is @code{omp_high_bw_mem_space}  (uses
!       @code{MEMKIND_HBW_PREFERRED})
! @item the memory space is @code{omp_large_cap_mem_space} (uses
!       @code{MEMKIND_DAX_KMEM_ALL} or, if not available, @code{MEMKIND_DAX_KMEM})
  @end itemize
  
  On Linux systems, where the @uref{https://github.com/numactl/numactl, numa
*************** a @code{nearest} allocation.
*** 6969,6978 ****
  Additional notes regarding the traits:
  @itemize
  @item The @code{pinned} trait is supported on Linux hosts, but is subject to
!       the OS @code{ulimit}/@code{rlimit} locked memory settings.
  @item The default for the @code{pool_size} trait is no pool and for every
        (re)allocation the associated library routine is called, which might
!       internally use a memory pool.
  @item For the @code{partition} trait, the partition part size will be the same
        as the requested size (i.e. @code{interleaved} or @code{blocked} has no
        effect), except for @code{interleaved} when the memkind library is
--- 7007,7021 ----
  Additional notes regarding the traits:
  @itemize
  @item The @code{pinned} trait is supported on Linux hosts, but is subject to
!       the OS @code{ulimit}/@code{rlimit} locked memory settings.  It currently
!       uses @code{mmap} and is therefore optimized for few allocations, including
!       large data.  If the conditions for numa or memkind allocations are
!       fulfilled, those allocators are used instead.
  @item The default for the @code{pool_size} trait is no pool and for every
        (re)allocation the associated library routine is called, which might
!       internally use a memory pool.  Currently, the same applies when a
!       @code{pool_size} has been specified, except that once allocations exceed
!       the the pool size, the action of the @code{fallback} trait applies.
  @item For the @code{partition} trait, the partition part size will be the same
        as the requested size (i.e. @code{interleaved} or @code{blocked} has no
        effect), except for @code{interleaved} when the memkind library is
*************** Additional notes regarding the traits:
*** 6981,6993 ****
        that allocated the memory; on Linux, this is in particular the case when
        the memory placement policy is set to preferred.
  @item The @code{access} trait has no effect such that memory is always
!       accessible by all threads.
  @item The @code{sync_hint} trait has no effect.
  @end itemize
  
  See also:
  @ref{Offload-Target Specifics}
  
  @c ---------------------------------------------------------------------
  @c Offload-Target Specifics
  @c ---------------------------------------------------------------------
--- 7024,7038 ----
        that allocated the memory; on Linux, this is in particular the case when
        the memory placement policy is set to preferred.
  @item The @code{access} trait has no effect such that memory is always
!       accessible by all threads. (Except on supported no-host devices.)
  @item The @code{sync_hint} trait has no effect.
  @end itemize
  
  See also:
  @ref{Offload-Target Specifics}
  
+ 
+ 
  @c ---------------------------------------------------------------------
  @c Offload-Target Specifics
  @c ---------------------------------------------------------------------
diff -Nrcpad gcc-16-20250615/libgomp/target.c gcc-16-20250622/libgomp/target.c
*** gcc-16-20250615/libgomp/target.c	Sun Jun 15 22:33:50 2025
--- gcc-16-20250622/libgomp/target.c	Sun Jun 22 22:33:43 2025
*************** gomp_unload_image_from_device (struct go
*** 2641,2646 ****
--- 2641,2650 ----
      }
  }
  
+ #define GOMP_REQUIRES_NAME_BUF_LEN \
+   sizeof ("unified_address, unified_shared_memory, " \
+ 	  "self_maps, reverse_offload")
+ 
  static void
  gomp_requires_to_name (char *buf, size_t size, int requires_mask)
  {
*************** GOMP_offload_register_ver (unsigned vers
*** 2689,2698 ****
  
    if (omp_req && omp_requires_mask && omp_requires_mask != omp_req)
      {
!       char buf1[sizeof ("unified_address, unified_shared_memory, "
! 			"self_maps, reverse_offload")];
!       char buf2[sizeof ("unified_address, unified_shared_memory, "
! 			"self_maps, reverse_offload")];
        gomp_requires_to_name (buf2, sizeof (buf2),
  			     omp_req != GOMP_REQUIRES_TARGET_USED
  			     ? omp_req : omp_requires_mask);
--- 2693,2700 ----
  
    if (omp_req && omp_requires_mask && omp_requires_mask != omp_req)
      {
!       char buf1[GOMP_REQUIRES_NAME_BUF_LEN];
!       char buf2[GOMP_REQUIRES_NAME_BUF_LEN];
        gomp_requires_to_name (buf2, sizeof (buf2),
  			     omp_req != GOMP_REQUIRES_TARGET_USED
  			     ? omp_req : omp_requires_mask);
*************** gomp_target_init (void)
*** 5786,5793 ****
  		    found = true;
  		if (found)
  		  {
! 		    char buf[sizeof ("unified_address, unified_shared_memory, "
! 				     "reverse_offload")];
  		    gomp_requires_to_name (buf, sizeof (buf), omp_req);
  		    char *name = (char *) malloc (cur_len + 1);
  		    memcpy (name, cur, cur_len);
--- 5788,5794 ----
  		    found = true;
  		if (found)
  		  {
! 		    char buf[GOMP_REQUIRES_NAME_BUF_LEN];
  		    gomp_requires_to_name (buf, sizeof (buf), omp_req);
  		    char *name = (char *) malloc (cur_len + 1);
  		    memcpy (name, cur, cur_len);
diff -Nrcpad gcc-16-20250615/libgomp/testsuite/libgomp.c++/declare_target-2.C gcc-16-20250622/libgomp/testsuite/libgomp.c++/declare_target-2.C
*** gcc-16-20250615/libgomp/testsuite/libgomp.c++/declare_target-2.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250622/libgomp/testsuite/libgomp.c++/declare_target-2.C	Sun Jun 22 22:33:44 2025
***************
*** 0 ****
--- 1,25 ----
+ // { dg-do link }
+ 
+ // Actually not needed: -fipa-cp is default with -O2:
+ // { dg-additional-options "-O2 -fipa-cp" }
+ 
+ // The code failed because 'std::endl' becoḿes implicitly 'declare target'
+ // but not the 'widen' function it calls.  While the linker had no issues
+ // (endl is never called, either because it is inlined or optimized away),
+ // the IPA-CP (enabled by -O2 and higher) failed as the definition for
+ // 'widen' did not exist on the offload side.
+ 
+ #include <iostream>
+ 
+ void func (int m)
+ {
+   if (m < 0)
+     std::cout << "should not happen" << std::endl;
+ }
+ 
+ 
+ int main()
+ {
+   #pragma omp target
+     func (1);
+ }
diff -Nrcpad gcc-16-20250615/libstdc++-v3/ChangeLog gcc-16-20250622/libstdc++-v3/ChangeLog
*** gcc-16-20250615/libstdc++-v3/ChangeLog	Sun Jun 15 22:33:52 2025
--- gcc-16-20250622/libstdc++-v3/ChangeLog	Sun Jun 22 22:33:49 2025
***************
*** 1,3 ****
--- 1,9 ----
+ 2025-06-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* testsuite/20_util/is_complete_or_unbounded/memoization.cc
+ 	* testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc:
+ 	Expect -Wsfinae-incomplete.
+ 
  2025-06-13  Jonathan Wakely  <jwakely@redhat.com>
  
  	PR libstdc++/120397
diff -Nrcpad gcc-16-20250615/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc gcc-16-20250622/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc
*** gcc-16-20250615/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc	Sun Jun 15 22:33:53 2025
--- gcc-16-20250622/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc	Sun Jun 22 22:33:52 2025
*************** struct X;
*** 23,29 ****
  static_assert(
    !std::__is_complete_or_unbounded(std::__type_identity<X>{}), "error");
  
! struct X{};
  static_assert(
    std::__is_complete_or_unbounded(std::__type_identity<X>{}),
    "Result memoized. This leads to worse diagnostics");
--- 23,29 ----
  static_assert(
    !std::__is_complete_or_unbounded(std::__type_identity<X>{}), "error");
  
! struct X{};			// { dg-warning Wsfinae-incomplete }
  static_assert(
    std::__is_complete_or_unbounded(std::__type_identity<X>{}),
    "Result memoized. This leads to worse diagnostics");
diff -Nrcpad gcc-16-20250615/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc gcc-16-20250622/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc
*** gcc-16-20250615/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc	Sun Jun 15 22:33:53 2025
--- gcc-16-20250622/libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc	Sun Jun 22 22:33:52 2025
***************
*** 25,29 ****
  struct X;
  constexpr bool res_incomplete = std::is_move_constructible<X>::value; // { dg-error "required from here" }
  
! struct X{};
  constexpr bool res_complete = std::is_default_constructible<X>::value; // { dg-bogus "required from here" }
--- 25,29 ----
  struct X;
  constexpr bool res_incomplete = std::is_move_constructible<X>::value; // { dg-error "required from here" }
  
! struct X{};							       // { dg-warning Wsfinae-incomplete }
  constexpr bool res_complete = std::is_default_constructible<X>::value; // { dg-bogus "required from here" }
